From 3d7aeb6f7ef3ea87a1c9ce4ea3dee193505aa7ca Mon Sep 17 00:00:00 2001 From: livca-smile <48252963+livca-smile@users.noreply.github.com> Date: Thu, 21 Sep 2023 10:51:26 +0200 Subject: [PATCH] Fix compatibility 2 4 6 (#40) Fix compatibility Magento 2.4.6 --------- Co-authored-by: guvra --- .codeclimate.yml | 25 ---- .gitattributes | 8 ++ .github/workflows/static-analysis.yaml | 66 +++++++++ .gitignore | 6 + .travis.yml | 19 --- Api/Data/RetailerInterface.php | 35 ++--- Api/Data/RetailerSearchResultsInterface.php | 34 ++--- Api/RetailerRepositoryInterface.php | 60 +++----- .../Retailer/Edit/Button/AbstractButton.php | 64 ++------- Block/Adminhtml/Retailer/Edit/Button/Back.php | 22 +-- .../Adminhtml/Retailer/Edit/Button/Delete.php | 26 +--- Block/Adminhtml/Retailer/Edit/Button/Save.php | 22 +-- .../Retailer/Edit/Button/SaveAndContinue.php | 24 +--- CHANGELOG.md | 19 +++ Controller/Adminhtml/AbstractRetailer.php | 125 ++++++----------- Controller/Adminhtml/Retailer/Create.php | 23 +--- Controller/Adminhtml/Retailer/Delete.php | 28 ++-- Controller/Adminhtml/Retailer/Edit.php | 25 +--- .../Adminhtml/Retailer/Image/Upload.php | 115 +++++----------- Controller/Adminhtml/Retailer/Index.php | 24 +--- .../Adminhtml/Retailer/MassAllowDelivery.php | 31 +---- Controller/Adminhtml/Retailer/MassDelete.php | 31 +---- Controller/Adminhtml/Retailer/MassDisable.php | 31 +---- .../Retailer/MassDisallowDelivery.php | 31 +---- Controller/Adminhtml/Retailer/MassEnable.php | 34 ++--- Controller/Adminhtml/Retailer/MediaUpload.php | 24 +--- Controller/Adminhtml/Retailer/Save.php | 115 ++++++++-------- Model/ResourceModel/Retailer/Collection.php | 90 +++++------- Model/Retailer.php | 39 ++---- Model/Retailer/EavPostDataHandler.php | 26 ++-- Model/Retailer/PostDataHandlerInterface.php | 28 ++-- Model/RetailerRepository.php | 130 +++++------------- README.md | 10 +- .../Data/DefaultRetailerAttributes.php} | 83 ++++++----- Setup/Patch/RetailerSetup.php | 70 ++++++++++ Setup/RetailerSetup.php | 95 ------------- Ui/Component/Form/Retailer/Options.php | 62 ++------- .../Listing/Column/RetailerActions.php | 81 +++-------- composer.json | 47 ++++--- etc/acl.xml | 20 +-- etc/adminhtml/di.xml | 16 --- etc/adminhtml/menu.xml | 15 -- etc/adminhtml/routes.xml | 17 +-- etc/di.xml | 27 +--- etc/events.xml | 26 +--- etc/module.xml | 21 +-- etc/webapi.xml | 15 -- i18n/en_US.csv | 5 +- i18n/fr_FR.csv | 5 +- phpcs.xml.dist | 25 ++++ phpmd.xml.dist | 10 ++ phpstan.neon.dist | 11 ++ registration.php | 20 +-- .../layout/smile_retailer_retailer_create.xml | 16 --- .../layout/smile_retailer_retailer_edit.xml | 16 --- .../layout/smile_retailer_retailer_index.xml | 16 --- .../ui_component/smile_retailer_form.xml | 16 --- .../ui_component/smile_retailer_listing.xml | 20 +-- 58 files changed, 736 insertions(+), 1409 deletions(-) delete mode 100644 .codeclimate.yml create mode 100644 .gitattributes create mode 100644 .github/workflows/static-analysis.yaml create mode 100644 .gitignore delete mode 100644 .travis.yml create mode 100644 CHANGELOG.md rename Setup/{InstallData.php => Patch/Data/DefaultRetailerAttributes.php} (55%) create mode 100644 Setup/Patch/RetailerSetup.php delete mode 100644 Setup/RetailerSetup.php create mode 100644 phpcs.xml.dist create mode 100644 phpmd.xml.dist create mode 100644 phpstan.neon.dist diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index 36bb2fa..0000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,25 +0,0 @@ ---- -engines: - duplication: - enabled: true - config: - languages: - - javascript - - php - eslint: - enabled: true - fixme: - enabled: true - phan: - enabled: true - config: - file_extensions: php - ignore-undeclared: true -ratings: - paths: - - "**.js" - - "**.php" -exclude_paths: - - src/*/Test - - vendor/* - - Resources/* diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..14e897f --- /dev/null +++ b/.gitattributes @@ -0,0 +1,8 @@ +/.github export-ignore +/.gitattributes export-ignore +/.gitignore export-ignore +/CHANGELOG.md export-ignore +/phpcs.xml.dist export-ignore +/phpmd.xml.dist export-ignore +/phpstan.neon.dist export-ignore +/README.md export-ignore diff --git a/.github/workflows/static-analysis.yaml b/.github/workflows/static-analysis.yaml new file mode 100644 index 0000000..43a1dfc --- /dev/null +++ b/.github/workflows/static-analysis.yaml @@ -0,0 +1,66 @@ +name: 'Static Analysis' + +on: + pull_request: ~ + push: + branches: + - 'master' + +jobs: + static-analysis: + runs-on: 'ubuntu-latest' + + strategy: + matrix: + php-version: + - '8.1' + + steps: + - name: 'Checkout' + uses: 'actions/checkout@v3' + + - name: 'Install PHP' + uses: 'shivammathur/setup-php@v2' + with: + php-version: '${{ matrix.php-version }}' + coverage: 'none' + tools: 'composer:v2' + env: + COMPOSER_AUTH_JSON: | + { + "http-basic": { + "repo.magento.com": { + "username": "${{ secrets.MAGENTO_USERNAME }}", + "password": "${{ secrets.MAGENTO_PASSWORD }}" + } + } + } + + - name: 'Get composer cache directory' + id: 'composer-cache' + run: 'echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT' + + - name: 'Cache dependencies' + uses: 'actions/cache@v3' + with: + path: '${{ steps.composer-cache.outputs.dir }}' + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: '${{ runner.os }}-composer-' + + - name: 'Install dependencies' + run: 'composer install --prefer-dist' + + - name: 'Run composer audit' + run: 'composer audit --format=plain' + + - name: 'Run Parallel Lint' + run: 'vendor/bin/parallel-lint --exclude vendor .' + + - name: 'Run PHP CodeSniffer' + run: 'vendor/bin/phpcs --extensions=php,phtml' + + - name: 'Run PHPMD' + run: 'vendor/bin/phpmd . xml phpmd.xml.dist' + + - name: 'Run PHPStan' + run: 'vendor/bin/phpstan analyse' diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..437d97f --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/.fleet +/.idea +/vendor +/composer.lock +/phpcs.xml +/phpstan.neon diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 53d2d92..0000000 --- a/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: php - -php: -- '5.6' -- '7.0' - -install: [ - "mkdir -p app/etc var", - "echo \"{\\\"http-basic\\\":{\\\"repo.magento.com\\\":{\\\"username\\\":\\\"${MAGENTO_USERNAME}\\\",\\\"password\\\":\\\"${MAGENTO_PASSWORD}\\\"}}}\" > auth.json", - "composer install --prefer-dist" -] - -cache: - directories: - - $HOME/.composer/cache - -script: - - vendor/bin/phpcs --ignore=/vendor/,/app/ --standard=vendor/smile/magento2-smilelab-phpcs/phpcs-standards/SmileLab --extensions=php ./ - - vendor/bin/phpmd ./ text vendor/smile/magento2-smilelab-phpmd/phpmd-rulesets/rulset.xml --exclude vendor diff --git a/Api/Data/RetailerInterface.php b/Api/Data/RetailerInterface.php index 45eff2e..e103f8f 100644 --- a/Api/Data/RetailerInterface.php +++ b/Api/Data/RetailerInterface.php @@ -1,43 +1,34 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Api\Data; use Smile\Seller\Api\Data\SellerInterface; /** - * Retailer Interface - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud + * @api + * @method mixed getData(...$key) + * @method mixed setData(...$data) + * @phpcs:disable SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly.ReferenceViaFullyQualifiedName + * @phpcs:disable Generic.Files.LineLength.TooLong */ interface RetailerInterface extends SellerInterface { - const ATTRIBUTE_SET_RETAILER = "retailer"; + public const ATTRIBUTE_SET_RETAILER = "retailer"; /** - * Retrieve existing extension attributes object or create a new one. + * Retrieve existing extension attributes object or create a new one. - need concrete type declaration to generate RetailerExtensionInterface * * @return \Smile\Retailer\Api\Data\RetailerExtensionInterface|null */ - public function getExtensionAttributes(); + public function getExtensionAttributes(): ?RetailerExtensionInterface; /** * Set an extension attributes object. * - * @param \Smile\Retailer\Api\Data\RetailerExtensionInterface $extensionAttributes The additional attributes - * + * @param \Smile\Retailer\Api\Data\RetailerExtensionInterface $extensionAttributes The additional attributes - need concrete type declaration * @return $this */ - public function setExtensionAttributes(\Smile\Retailer\Api\Data\RetailerExtensionInterface $extensionAttributes); + public function setExtensionAttributes(\Smile\Retailer\Api\Data\RetailerExtensionInterface $extensionAttributes): self; } diff --git a/Api/Data/RetailerSearchResultsInterface.php b/Api/Data/RetailerSearchResultsInterface.php index 44205d2..9e065eb 100644 --- a/Api/Data/RetailerSearchResultsInterface.php +++ b/Api/Data/RetailerSearchResultsInterface.php @@ -1,39 +1,29 @@ - * @copyright 2017 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Api\Data; +use Magento\Framework\Api\SearchResultsInterface; +use Magento\Framework\DataObject; + /** - * Class RetailerSearchResultsInterface - * - * @category Smile - * @package Smile\Retailer\Api\Data - * @author De Cramer Oliver + * @api */ -interface RetailerSearchResultsInterface extends \Magento\Framework\Api\SearchResultsInterface +interface RetailerSearchResultsInterface extends SearchResultsInterface { /** * Get Retailers list. * - * @return RetailerInterface[] + * @return RetailerInterface[]|DataObject[] */ - public function getItems(); + public function getItems(): array; /** * Set Retailers list. * - * @param RetailerInterface[] $items List of retailers - * + * @param RetailerInterface[]|DataObject[] $items List of retailers * @return $this */ - public function setItems(array $items); + public function setItems(array $items): self; } diff --git a/Api/RetailerRepositoryInterface.php b/Api/RetailerRepositoryInterface.php index 1e8c8cd..1b16cc3 100644 --- a/Api/RetailerRepositoryInterface.php +++ b/Api/RetailerRepositoryInterface.php @@ -1,97 +1,75 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); namespace Smile\Retailer\Api; use Magento\Framework\Api\SearchCriteriaInterface; +use Smile\Retailer\Api\Data\RetailerInterface; use Smile\Retailer\Api\Data\RetailerSearchResultsInterface; +use Smile\Seller\Api\Data\SellerInterface; /** - * Retailer Repository interface - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud + * @api */ interface RetailerRepositoryInterface { /** * Create retailer service * - * @param \Smile\Retailer\Api\Data\RetailerInterface $retailer The retailer - * - * @return \Smile\Retailer\Api\Data\RetailerInterface - * + * @param RetailerInterface|SellerInterface $retailer The retailer + * @return RetailerInterface|SellerInterface * @throws \Magento\Framework\Exception\CouldNotSaveException */ - public function save(\Smile\Retailer\Api\Data\RetailerInterface $retailer); + public function save(RetailerInterface|SellerInterface $retailer); /** * Get info about retailer by retailer id * * @param int $retailerId The retailer Id - * @param int $storeId The store Id - * - * @return \Smile\Retailer\Api\Data\RetailerInterface - * + * @param ?int $storeId The store Id + * @return RetailerInterface|SellerInterface * @throws \Magento\Framework\Exception\NoSuchEntityException */ - public function get($retailerId, $storeId = null); + public function get(int $retailerId, ?int $storeId = null); /** * Get info about retailer by retailer code * - * @param int $retailerCode The retailer Code - * @param int $storeId The store Id - * - * @return \Smile\Retailer\Api\Data\RetailerInterface - * + * @param string $retailerCode The retailer Code + * @param ?int $storeId The store Id + * @return RetailerInterface|SellerInterface * @throws \Magento\Framework\Exception\NoSuchEntityException */ - public function getByCode($retailerCode, $storeId = null); + public function getByCode(string $retailerCode, ?int $storeId = null); /** * Get relation list * * @param SearchCriteriaInterface $criteria Search criterai for collection - * * @return RetailerSearchResultsInterface */ - public function getList(SearchCriteriaInterface $criteria); + public function getList(SearchCriteriaInterface $criteria): RetailerSearchResultsInterface; /** * Delete retailer by identifier * - * @param \Smile\Retailer\Api\Data\RetailerInterface $retailer retailer which will deleted - * + * @param RetailerInterface|SellerInterface $retailer retailer which will deleted * @return bool Will returned True if deleted - * * @throws \Magento\Framework\Exception\InputException * @throws \Magento\Framework\Exception\StateException * @throws \Magento\Framework\Exception\NoSuchEntityException */ - public function delete(\Smile\Retailer\Api\Data\RetailerInterface $retailer); + public function delete(RetailerInterface|SellerInterface $retailer): bool; /** * Delete retailer by identifier * * @param int $retailerId The retailer id - * * @return bool Will returned True if deleted - * * @throws \Magento\Framework\Exception\InputException * @throws \Magento\Framework\Exception\StateException * @throws \Magento\Framework\Exception\NoSuchEntityException */ - public function deleteByIdentifier($retailerId); + public function deleteByIdentifier(int $retailerId): bool; } diff --git a/Block/Adminhtml/Retailer/Edit/Button/AbstractButton.php b/Block/Adminhtml/Retailer/Edit/Button/AbstractButton.php index 463fcde..c4f8f49 100644 --- a/Block/Adminhtml/Retailer/Edit/Button/AbstractButton.php +++ b/Block/Adminhtml/Retailer/Edit/Button/AbstractButton.php @@ -1,81 +1,43 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Block\Adminhtml\Retailer\Edit\Button; +use Magento\Framework\Registry; +use Magento\Framework\View\Element\UiComponent\Context; use Magento\Framework\View\Element\UiComponent\Control\ButtonProviderInterface; +use Smile\Retailer\Api\Data\RetailerInterface; /** - * Abstract Retailer edit button - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud + * Abstract Retailer edit button. */ class AbstractButton implements ButtonProviderInterface { - /** - * Url Builder - * - * @var Context - */ - protected $context; - - /** - * Registry - * - * @var Registry - */ - protected $registry; - - /** - * Generic constructor - * - * @param \Magento\Framework\View\Element\UiComponent\Context $context Application context - * @param \Magento\Framework\Registry $registry Application registry - */ public function __construct( - \Magento\Framework\View\Element\UiComponent\Context $context, - \Magento\Framework\Registry $registry + protected Context $context, + protected Registry $registry ) { - $this->context = $context; - $this->registry = $registry; } /** - * Generate url by route and parameters - * - * @param string $route The route - * @param array $params The params - * - * @return string + * Generate url by route and parameters. */ - public function getUrl($route = '', $params = []) + public function getUrl(string $route = '', array $params = []): string { return $this->context->getUrl($route, $params); } /** * Get retailer - * - * @return \Smile\Retailer\Api\Data\RetailerInterface */ - public function getRetailer() + public function getRetailer(): ?RetailerInterface { return $this->registry->registry('current_seller'); } /** - * {@inheritdoc} + * @inheritdoc */ public function getButtonData() { diff --git a/Block/Adminhtml/Retailer/Edit/Button/Back.php b/Block/Adminhtml/Retailer/Edit/Button/Back.php index 8a4b51b..cc0d0c3 100644 --- a/Block/Adminhtml/Retailer/Edit/Button/Back.php +++ b/Block/Adminhtml/Retailer/Edit/Button/Back.php @@ -1,28 +1,16 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Block\Adminhtml\Retailer\Edit\Button; /** - * Save Button for retailer edition - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud + * Save Button for retailer edition. */ class Back extends AbstractButton { /** - * {@inheritdoc} + * @inheritdoc */ public function getButtonData() { diff --git a/Block/Adminhtml/Retailer/Edit/Button/Delete.php b/Block/Adminhtml/Retailer/Edit/Button/Delete.php index 8ef4eac..3653469 100644 --- a/Block/Adminhtml/Retailer/Edit/Button/Delete.php +++ b/Block/Adminhtml/Retailer/Edit/Button/Delete.php @@ -1,28 +1,16 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Block\Adminhtml\Retailer\Edit\Button; /** - * Delete button for retailer edition - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud + * Delete button for retailer edition. */ class Delete extends AbstractButton { /** - * {@inheritdoc} + * @inheritdoc */ public function getButtonData() { @@ -42,9 +30,9 @@ public function getButtonData() } /** - * @return string + * Get the deletion url. */ - private function getDeleteUrl() + private function getDeleteUrl(): string { return $this->getUrl('*/*/delete', ['id' => $this->getRetailer()->getId()]); } diff --git a/Block/Adminhtml/Retailer/Edit/Button/Save.php b/Block/Adminhtml/Retailer/Edit/Button/Save.php index deed2ff..fd9f97a 100644 --- a/Block/Adminhtml/Retailer/Edit/Button/Save.php +++ b/Block/Adminhtml/Retailer/Edit/Button/Save.php @@ -1,28 +1,16 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Block\Adminhtml\Retailer\Edit\Button; /** - * Save Button for retailer edition - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud + * Save Button for retailer edition. */ class Save extends AbstractButton { /** - * {@inheritdoc} + * @inheritdoc */ public function getButtonData() { diff --git a/Block/Adminhtml/Retailer/Edit/Button/SaveAndContinue.php b/Block/Adminhtml/Retailer/Edit/Button/SaveAndContinue.php index a3bc377..265686b 100644 --- a/Block/Adminhtml/Retailer/Edit/Button/SaveAndContinue.php +++ b/Block/Adminhtml/Retailer/Edit/Button/SaveAndContinue.php @@ -1,30 +1,16 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Block\Adminhtml\Retailer\Edit\Button; /** - * Save and Continue Button for retailer edition - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud + * Save and Continue Button for retailer edition. */ class SaveAndContinue extends AbstractButton { /** - * {@inheritdoc} - * - * @return array + * @inheritdoc */ public function getButtonData() { diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..93108af --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,19 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [2.0.0] - 2023-09-20 +[2.0.0]: https://github.com/Smile-SA/magento2-module-offer/compare/1.2.9.1...2.0.0 + +Dataset compatibility ES 2.11.x and PHP 8.2 + +- Fix Dynamic type declaration +- Fix Type hinting +- Replace `Zend_Date` by `DateTime` +- Remove `MutationObserver` support +- Fix UI Component Retailer Offer editing +- Replace `Zend_Validate` by `Laminas\Validator` +- Fix Retailer Grid Column Action +- Fix Retailer Grid Mass Actions +- Fix some translations +- Remove Temando/Shipping Plugin diff --git a/Controller/Adminhtml/AbstractRetailer.php b/Controller/Adminhtml/AbstractRetailer.php index 4de7cf9..1270e12 100644 --- a/Controller/Adminhtml/AbstractRetailer.php +++ b/Controller/Adminhtml/AbstractRetailer.php @@ -1,97 +1,48 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Controller\Adminhtml; +use Exception; use Magento\Backend\App\Action; +use Magento\Backend\App\Action\Context; +use Magento\Backend\Model\View\Result\Page; +use Magento\Framework\Controller\Result\ForwardFactory; +use Magento\Framework\Registry; +use Magento\Framework\View\Result\PageFactory; +use Magento\Ui\Component\MassAction\Filter; +use Smile\Retailer\Api\Data\RetailerInterfaceFactory; +use Smile\Retailer\Api\RetailerRepositoryInterface; +use Smile\Retailer\Model\ResourceModel\Retailer\CollectionFactory; /** - * Abstract Retailer controller + * Abstract Retailer controller. * - * @category Smile - * @package Smile\ElasticsuiteRetailer - * @author Romain Ruaud + * @method mixed getData(...$key) + * @method mixed setData(...$data) */ abstract class AbstractRetailer extends Action { - /** - * @var \Magento\Framework\View\Result\PageFactory|null - */ - protected $resultPageFactory = null; - - /** - * @var \Magento\Framework\Controller\Result\ForwardFactory|null - */ - protected $resultForwardFactory = null; - - /** - * Core registry - * - * @var \Magento\Framework\Registry - */ - protected $coreRegistry; - - /** - * @var \Smile\Retailer\Api\Data\RetailerInterfaceFactory - */ - protected $retailerRepository; - - /** - * Retailer Factory - * - * @var \Smile\Retailer\Api\Data\RetailerInterfaceFactory - */ - protected $retailerFactory; - - /** - * @var \Smile\Retailer\Api\RetailerScheduleManagementInterface - */ - protected $scheduleManagement; - - /** - * Abstract constructor. - * - * @param \Magento\Backend\App\Action\Context $context Application context. - * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory Result Page factory. - * @param \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory Result forward factory. - * @param \Magento\Framework\Registry $coreRegistry Application registry. - * @param \Smile\Retailer\Api\RetailerRepositoryInterface $retailerRepository Retailer Repository - * @param \Smile\Retailer\Api\Data\RetailerInterfaceFactory $retailerFactory Retailer Factory. - */ public function __construct( - \Magento\Backend\App\Action\Context $context, - \Magento\Framework\View\Result\PageFactory $resultPageFactory, - \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory, - \Magento\Framework\Registry $coreRegistry, - \Smile\Retailer\Api\RetailerRepositoryInterface $retailerRepository, - \Smile\Retailer\Api\Data\RetailerInterfaceFactory $retailerFactory + Context $context, + protected PageFactory $resultPageFactory, + protected ForwardFactory $resultForwardFactory, + protected Registry $coreRegistry, + protected RetailerRepositoryInterface $retailerRepository, + protected RetailerInterfaceFactory $retailerFactory, + protected Filter $filter, + protected CollectionFactory $collectionFactory ) { - $this->resultPageFactory = $resultPageFactory; - $this->resultForwardFactory = $resultForwardFactory; - $this->coreRegistry = $coreRegistry; - $this->retailerRepository = $retailerRepository; - $this->retailerFactory = $retailerFactory; - parent::__construct($context); } /** - * Create result page - * - * @return \Magento\Backend\Model\View\Result\Page + * Create result page. */ - protected function createPage() + protected function createPage(): Page { - /** @var \Magento\Backend\Model\View\Result\Page $resultPage */ + /** @var Page $resultPage */ $resultPage = $this->resultPageFactory->create(); $resultPage->setActiveMenu('Smile_Retailer::retailers') ->addBreadcrumb(__('Sellers'), __('Retailers')); @@ -100,13 +51,25 @@ protected function createPage() } /** - * Check if allowed to manage retailer - * @SuppressWarnings(PHPMD.CamelCaseMethodName) - * - * @return bool + * @inheritdoc */ - protected function _isAllowed() + protected function _isAllowed(): bool { return $this->_authorization->isAllowed('Smile_Retailer::retailers'); } + + /** + * Get all selected ids. + */ + protected function getAllSelectedIds(): array + { + try { + $collection = $this->filter->getCollection($this->collectionFactory->create()); + $retailerIds = $collection->getAllIds(); + } catch (Exception) { + $retailerIds = []; + } + + return $retailerIds; + } } diff --git a/Controller/Adminhtml/Retailer/Create.php b/Controller/Adminhtml/Retailer/Create.php index bb2d44d..3984126 100644 --- a/Controller/Adminhtml/Retailer/Create.php +++ b/Controller/Adminhtml/Retailer/Create.php @@ -1,32 +1,19 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); namespace Smile\Retailer\Controller\Adminhtml\Retailer; +use Magento\Framework\App\Action\HttpGetActionInterface; use Smile\Retailer\Controller\Adminhtml\AbstractRetailer; /** * Retailer Adminhtml Edit controller. - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud */ -class Create extends AbstractRetailer +class Create extends AbstractRetailer implements HttpGetActionInterface { /** - * {@inheritdoc} + * @inheritdoc */ public function execute() { diff --git a/Controller/Adminhtml/Retailer/Delete.php b/Controller/Adminhtml/Retailer/Delete.php index e904293..b5bb488 100644 --- a/Controller/Adminhtml/Retailer/Delete.php +++ b/Controller/Adminhtml/Retailer/Delete.php @@ -1,32 +1,20 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); namespace Smile\Retailer\Controller\Adminhtml\Retailer; +use Exception; +use Magento\Framework\App\Action\HttpGetActionInterface; use Smile\Retailer\Controller\Adminhtml\AbstractRetailer; /** * Retailer Adminhtml Delete controller. - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud */ -class Delete extends AbstractRetailer +class Delete extends AbstractRetailer implements HttpGetActionInterface { /** - * {@inheritdoc} + * @inheritdoc */ public function execute() { @@ -36,7 +24,7 @@ public function execute() $identifier = $this->getRequest()->getParam('id', false); $model = $this->retailerFactory->create(); if ($identifier) { - $model = $this->retailerRepository->get($identifier); + $model = $this->retailerRepository->get((int) $identifier); if (!$model->getId()) { $this->messageManager->addError(__('This retailer no longer exists.')); @@ -49,7 +37,7 @@ public function execute() $this->messageManager->addSuccess(__('You deleted the retailer %1.', $model->getName())); return $resultRedirect->setPath('*/*/index'); - } catch (\Exception $e) { + } catch (Exception $e) { $this->messageManager->addError($e->getMessage()); return $resultRedirect->setPath('*/*/edit', ['id' => $this->getRequest()->getParam('id')]); diff --git a/Controller/Adminhtml/Retailer/Edit.php b/Controller/Adminhtml/Retailer/Edit.php index e24f169..80be4a5 100644 --- a/Controller/Adminhtml/Retailer/Edit.php +++ b/Controller/Adminhtml/Retailer/Edit.php @@ -1,33 +1,20 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); namespace Smile\Retailer\Controller\Adminhtml\Retailer; +use Magento\Framework\App\Action\HttpGetActionInterface; use Magento\Framework\Exception\NoSuchEntityException; use Smile\Retailer\Controller\Adminhtml\AbstractRetailer; /** * Retailer Adminhtml Edit controller. - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud */ -class Edit extends AbstractRetailer +class Edit extends AbstractRetailer implements HttpGetActionInterface { /** - * {@inheritdoc} + * @inheritdoc */ public function execute() { @@ -35,7 +22,7 @@ public function execute() $resultPage = $this->resultPageFactory->create(); $retailerId = (int) $this->getRequest()->getParam('id'); - $storeId = $this->getRequest()->getParam('store', null); + $storeId = (int) $this->getRequest()->getParam('store', null); $retailer = null; try { diff --git a/Controller/Adminhtml/Retailer/Image/Upload.php b/Controller/Adminhtml/Retailer/Image/Upload.php index b2eab8b..b45d642 100644 --- a/Controller/Adminhtml/Retailer/Image/Upload.php +++ b/Controller/Adminhtml/Retailer/Image/Upload.php @@ -1,104 +1,54 @@ - * @copyright 2019 Smile - * @license Open Software License ("OSL") v. 3.0 - * - */ +declare(strict_types=1); + namespace Smile\Retailer\Controller\Adminhtml\Category\Image; +use Exception; +use Magento\Backend\App\Action; +use Magento\Backend\App\Action\Context; +use Magento\Catalog\Model\ImageUploader; +use Magento\Framework\App\Action\HttpPostActionInterface; +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Controller\Result\Json as ResultJson; use Magento\Framework\Controller\ResultFactory; +use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Directory\WriteInterface; +use Magento\MediaStorage\Helper\File\Storage\Database; +use Magento\MediaStorage\Model\File\UploaderFactory; +use Magento\Store\Model\StoreManagerInterface; +use Psr\Log\LoggerInterface; /** * Retailer Adminhtml Upload Controller */ -class Upload extends \Magento\Backend\App\Action +class Upload extends Action implements HttpPostActionInterface { - /** - * Image uploader - * - * @var \Magento\Catalog\Model\ImageUploader - */ - protected $imageUploader; - - /** - * Uploader factory - * - * @var \Magento\MediaStorage\Model\File\UploaderFactory - */ - private $uploaderFactory; - - /** - * Media directory object (writable). - * - * @var \Magento\Framework\Filesystem\Directory\WriteInterface - */ - protected $mediaDirectory; - - /** - * Store manager - * - * @var \Magento\Store\Model\StoreManagerInterface - */ - protected $storeManager; - - /** - * Core file storage database - * - * @var \Magento\MediaStorage\Helper\File\Storage\Database - */ - protected $coreFileStorageDatabase; - - /** - * @var \Psr\Log\LoggerInterface - */ - protected $logger; + protected WriteInterface $mediaDirectory; - /** - * Upload constructor. - * - * @param \Magento\Backend\App\Action\Context $context - * @param \Magento\Catalog\Model\ImageUploader $imageUploader - */ public function __construct( - \Magento\Backend\App\Action\Context $context, - \Magento\Catalog\Model\ImageUploader $imageUploader, - \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory, - \Magento\Framework\Filesystem $filesystem, - \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDatabase, - \Psr\Log\LoggerInterface $logger + Context $context, + protected ImageUploader $imageUploader, + protected UploaderFactory $uploaderFactory, + Filesystem $filesystem, + protected StoreManagerInterface $storeManager, + protected Database $coreFileStorageDatabase, + protected LoggerInterface $logger ) { parent::__construct($context); - $this->imageUploader = $imageUploader; - $this->uploaderFactory = $uploaderFactory; - $this->mediaDirectory = $filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA); - $this->storeManager = $storeManager; - $this->coreFileStorageDatabase = $coreFileStorageDatabase; - $this->logger = $logger; + $this->mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA); } /** - * Check admin permissions for this controller - * - * @return boolean + * @inheritdoc */ - protected function _isAllowed() + protected function _isAllowed(): bool { return $this->_authorization->isAllowed('Smile_Retailer::retailers'); } /** - * Upload file controller action - * - * @return \Magento\Framework\Controller\ResultInterface + * @inheritdoc */ public function execute() { @@ -111,9 +61,14 @@ public function execute() 'path' => $this->_getSession()->getCookiePath(), 'domain' => $this->_getSession()->getCookieDomain(), ]; - } catch (\Exception $e) { + } catch (Exception $e) { $result = ['error' => $e->getMessage(), 'errorcode' => $e->getCode()]; } - return $this->resultFactory->create(ResultFactory::TYPE_JSON)->setData($result); + + /** @var ResultJson $resultJson */ + $resultJson = $this->resultFactory->create(ResultFactory::TYPE_JSON); + $resultJson->setData($result); + + return $resultJson; } } diff --git a/Controller/Adminhtml/Retailer/Index.php b/Controller/Adminhtml/Retailer/Index.php index a9a424a..b88883d 100644 --- a/Controller/Adminhtml/Retailer/Index.php +++ b/Controller/Adminhtml/Retailer/Index.php @@ -1,36 +1,22 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); namespace Smile\Retailer\Controller\Adminhtml\Retailer; +use Magento\Framework\App\Action\HttpGetActionInterface; use Smile\Retailer\Controller\Adminhtml\AbstractRetailer; /** * Retailer Adminhtml Index controller. - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud */ -class Index extends AbstractRetailer +class Index extends AbstractRetailer implements HttpGetActionInterface { /** - * {@inheritdoc} + * @inheritdoc */ public function execute() { - /** @var \Magento\Backend\Model\View\Result\Page $resultPage */ $resultPage = $this->createPage(); $resultPage->getConfig()->getTitle()->prepend(__('Retailers List')); diff --git a/Controller/Adminhtml/Retailer/MassAllowDelivery.php b/Controller/Adminhtml/Retailer/MassAllowDelivery.php index 503343d..7970d47 100644 --- a/Controller/Adminhtml/Retailer/MassAllowDelivery.php +++ b/Controller/Adminhtml/Retailer/MassAllowDelivery.php @@ -1,43 +1,26 @@ - * @copyright 2019 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); namespace Smile\Retailer\Controller\Adminhtml\Retailer; +use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\Controller\ResultFactory; -use Magento\Backend\App\Action\Context; use Smile\Retailer\Controller\Adminhtml\AbstractRetailer; /** * Retailer Adminhtml MassAllowDelivery controller. - * - * @category Smile - * @package Smile\Retailer - * @author Fanny DECLERCK */ -class MassAllowDelivery extends AbstractRetailer +class MassAllowDelivery extends AbstractRetailer implements HttpPostActionInterface { /** - * Execute action - * - * @return \Magento\Backend\Model\View\Result\Redirect - * @throws \Magento\Framework\Exception\LocalizedException|\Exception + * @inheritdoc */ public function execute() { - $retailerIds = $this->getRequest()->getParam('selected'); + $retailerIds = $this->getAllSelectedIds(); foreach ($retailerIds as $id) { - $model = $this->retailerRepository->get($id); + $model = $this->retailerRepository->get((int) $id); $model->setData('allow_store_delivery', true); $this->retailerRepository->save($model); } diff --git a/Controller/Adminhtml/Retailer/MassDelete.php b/Controller/Adminhtml/Retailer/MassDelete.php index 3b4ab12..767136d 100644 --- a/Controller/Adminhtml/Retailer/MassDelete.php +++ b/Controller/Adminhtml/Retailer/MassDelete.php @@ -1,43 +1,26 @@ - * @copyright 2019 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); namespace Smile\Retailer\Controller\Adminhtml\Retailer; +use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\Controller\ResultFactory; -use Magento\Backend\App\Action\Context; use Smile\Retailer\Controller\Adminhtml\AbstractRetailer; /** * Retailer Adminhtml MassDelete controller. - * - * @category Smile - * @package Smile\Retailer - * @author Fanny DECLERCK */ -class MassDelete extends AbstractRetailer +class MassDelete extends AbstractRetailer implements HttpPostActionInterface { /** - * Execute action - * - * @return \Magento\Backend\Model\View\Result\Redirect - * @throws \Magento\Framework\Exception\LocalizedException|\Exception + * @inheritdoc */ public function execute() { - $retailerIds = $this->getRequest()->getParam('selected'); + $retailerIds = $this->getAllSelectedIds(); foreach ($retailerIds as $id) { - $model = $this->retailerRepository->get($id); + $model = $this->retailerRepository->get((int) $id); $this->retailerRepository->delete($model); } diff --git a/Controller/Adminhtml/Retailer/MassDisable.php b/Controller/Adminhtml/Retailer/MassDisable.php index 359ed28..7fd35d1 100644 --- a/Controller/Adminhtml/Retailer/MassDisable.php +++ b/Controller/Adminhtml/Retailer/MassDisable.php @@ -1,43 +1,26 @@ - * @copyright 2019 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); namespace Smile\Retailer\Controller\Adminhtml\Retailer; +use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\Controller\ResultFactory; -use Magento\Backend\App\Action\Context; use Smile\Retailer\Controller\Adminhtml\AbstractRetailer; /** * Retailer Adminhtml MassDisable controller. - * - * @category Smile - * @package Smile\Retailer - * @author Fanny DECLERCK */ -class MassDisable extends AbstractRetailer +class MassDisable extends AbstractRetailer implements HttpPostActionInterface { /** - * Execute action - * - * @return \Magento\Backend\Model\View\Result\Redirect - * @throws \Magento\Framework\Exception\LocalizedException|\Exception + * @inheritdoc */ public function execute() { - $retailerIds = $this->getRequest()->getParam('selected'); + $retailerIds = $this->getAllSelectedIds(); foreach ($retailerIds as $id) { - $model = $this->retailerRepository->get($id); + $model = $this->retailerRepository->get((int) $id); $model->setData('is_active', false); $this->retailerRepository->save($model); } diff --git a/Controller/Adminhtml/Retailer/MassDisallowDelivery.php b/Controller/Adminhtml/Retailer/MassDisallowDelivery.php index b8e5d85..dc47729 100644 --- a/Controller/Adminhtml/Retailer/MassDisallowDelivery.php +++ b/Controller/Adminhtml/Retailer/MassDisallowDelivery.php @@ -1,43 +1,26 @@ - * @copyright 2019 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); namespace Smile\Retailer\Controller\Adminhtml\Retailer; +use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\Controller\ResultFactory; -use Magento\Backend\App\Action\Context; use Smile\Retailer\Controller\Adminhtml\AbstractRetailer; /** * Retailer Adminhtml MassDisallowDelivery controller. - * - * @category Smile - * @package Smile\Retailer - * @author Fanny DECLERCK */ -class MassDisallowDelivery extends AbstractRetailer +class MassDisallowDelivery extends AbstractRetailer implements HttpPostActionInterface { /** - * Execute action - * - * @return \Magento\Backend\Model\View\Result\Redirect - * @throws \Magento\Framework\Exception\LocalizedException|\Exception + * @inheritdoc */ public function execute() { - $retailerIds = $this->getRequest()->getParam('selected'); + $retailerIds = $this->getAllSelectedIds(); foreach ($retailerIds as $id) { - $model = $this->retailerRepository->get($id); + $model = $this->retailerRepository->get((int) $id); $model->setData('allow_store_delivery', false); $this->retailerRepository->save($model); } diff --git a/Controller/Adminhtml/Retailer/MassEnable.php b/Controller/Adminhtml/Retailer/MassEnable.php index 71208e0..bea77d5 100644 --- a/Controller/Adminhtml/Retailer/MassEnable.php +++ b/Controller/Adminhtml/Retailer/MassEnable.php @@ -1,43 +1,27 @@ - * @copyright 2019 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); namespace Smile\Retailer\Controller\Adminhtml\Retailer; +use Magento\Backend\Model\View\Result\Redirect; +use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\Controller\ResultFactory; -use Magento\Backend\App\Action\Context; use Smile\Retailer\Controller\Adminhtml\AbstractRetailer; /** * Retailer Adminhtml MassEnable controller. - * - * @category Smile - * @package Smile\Retailer - * @author Fanny DECLERCK */ -class MassEnable extends AbstractRetailer +class MassEnable extends AbstractRetailer implements HttpPostActionInterface { /** - * Execute action - * - * @return \Magento\Backend\Model\View\Result\Redirect - * @throws \Magento\Framework\Exception\LocalizedException|\Exception + * @inheritdoc */ public function execute() { - $retailerIds = $this->getRequest()->getParam('selected'); + $retailerIds = $this->getAllSelectedIds(); foreach ($retailerIds as $id) { - $model = $this->retailerRepository->get($id); + $model = $this->retailerRepository->get((int) $id); $model->setData('is_active', true); $this->retailerRepository->save($model); } @@ -46,7 +30,7 @@ public function execute() __('A total of %1 record(s) have been enabled.', count($retailerIds)) ); - /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ + /** @var Redirect $resultRedirect */ $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT); return $resultRedirect->setPath('*/*/'); diff --git a/Controller/Adminhtml/Retailer/MediaUpload.php b/Controller/Adminhtml/Retailer/MediaUpload.php index 3348463..8f06bd1 100644 --- a/Controller/Adminhtml/Retailer/MediaUpload.php +++ b/Controller/Adminhtml/Retailer/MediaUpload.php @@ -1,25 +1,15 @@ - * @copyright 2019 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Controller\Adminhtml\Retailer; +use Magento\Catalog\Controller\Adminhtml\Category\Image\Upload; +use Magento\Framework\App\Action\HttpPostActionInterface; + /** * MediaUpload controller. - * - * @package Smile\Retailer - * @author Ihor KVASNYTSKYI - * @copyright 2019 Smile */ -class MediaUpload extends \Magento\Catalog\Controller\Adminhtml\Category\Image\Upload +class MediaUpload extends Upload implements HttpPostActionInterface { - } diff --git a/Controller/Adminhtml/Retailer/Save.php b/Controller/Adminhtml/Retailer/Save.php index 1193247..3f45994 100644 --- a/Controller/Adminhtml/Retailer/Save.php +++ b/Controller/Adminhtml/Retailer/Save.php @@ -1,78 +1,76 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); namespace Smile\Retailer\Controller\Adminhtml\Retailer; +use Exception; +use Magento\Backend\App\Action\Context; +use Magento\Backend\Model\Session; +use Magento\Backend\Model\View\Result\Redirect; +use Magento\Framework\App\Action\HttpPostActionInterface; +use Magento\Framework\Controller\Result\ForwardFactory; +use Magento\Framework\HTTP\PhpEnvironment\Request; +use Magento\Framework\Registry; +use Magento\Framework\View\Result\PageFactory; +use Magento\Store\Model\Store; +use Magento\Ui\Component\MassAction\Filter; +use Smile\Retailer\Api\Data\RetailerInterfaceFactory; +use Smile\Retailer\Api\RetailerRepositoryInterface; use Smile\Retailer\Controller\Adminhtml\AbstractRetailer; +use Smile\Retailer\Model\ResourceModel\Retailer\CollectionFactory; use Smile\Seller\Api\Data\SellerInterface; /** * Retailer Adminhtml Save controller. - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud */ -class Save extends AbstractRetailer +class Save extends AbstractRetailer implements HttpPostActionInterface { - /** - * @var \Smile\Retailer\Model\Retailer\PostDataHandlerInterface[] - */ - private $postDataHandlers; - - /** - * Constructor. - * - * @param \Magento\Backend\App\Action\Context $context Application context. - * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory Result Page factory. - * @param \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory Result forward factory. - * @param \Magento\Framework\Registry $coreRegistry Application registry. - * @param \Smile\Retailer\Api\RetailerRepositoryInterface $retailerRepository Retailer Repository - * @param \Smile\Retailer\Api\Data\RetailerInterfaceFactory $retailerFactory Retailer Factory. - * @param \Smile\Retailer\Model\Retailer\PostDataHandlerInterface[] $postDataHandlers Form data handlers. - */ public function __construct( - \Magento\Backend\App\Action\Context $context, - \Magento\Framework\View\Result\PageFactory $resultPageFactory, - \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory, - \Magento\Framework\Registry $coreRegistry, - \Smile\Retailer\Api\RetailerRepositoryInterface $retailerRepository, - \Smile\Retailer\Api\Data\RetailerInterfaceFactory $retailerFactory, - array $postDataHandlers = [] + Context $context, + PageFactory $resultPageFactory, + ForwardFactory $resultForwardFactory, + Registry $coreRegistry, + RetailerRepositoryInterface $retailerRepository, + RetailerInterfaceFactory $retailerFactory, + Filter $filter, + CollectionFactory $collectionFactory, + private array $postDataHandlers = [] ) { - parent::__construct($context, $resultPageFactory, $resultForwardFactory, $coreRegistry, $retailerRepository, $retailerFactory); - $this->postDataHandlers = $postDataHandlers; + parent::__construct( + $context, + $resultPageFactory, + $resultForwardFactory, + $coreRegistry, + $retailerRepository, + $retailerFactory, + $filter, + $collectionFactory + ); } /** - * {@inheritdoc} + * @inheritdoc + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function execute() { - /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ + /** @var Redirect $resultRedirect */ $resultRedirect = $this->resultRedirectFactory->create(); - $data = $this->getRequest()->getPostValue(); - $redirectBack = $this->getRequest()->getParam('back', false); + /** @var Request $request */ + $request = $this->getRequest(); + $data = $request->getPostValue(); + $redirectBack = $request->getParam('back', false); if ($data) { - $identifier = $this->getRequest()->getParam('id'); - $storeId = $this->getRequest()->getParam('store_id', \Magento\Store\Model\Store::DEFAULT_STORE_ID); - $model = $this->retailerFactory->create(); + $identifier = $request->getParam('id'); + $storeId = $request->getParam('store_id', Store::DEFAULT_STORE_ID); + $model = $this->retailerFactory->create(); + $media = ''; - $media = false; - if (!empty($data[SellerInterface::MEDIA_PATH]) + if ( + !empty($data[SellerInterface::MEDIA_PATH]) && isset($data[SellerInterface::MEDIA_PATH][0]['name']) ) { $media = $data[SellerInterface::MEDIA_PATH][0]['name']; @@ -80,10 +78,9 @@ public function execute() unset($data[SellerInterface::MEDIA_PATH]); if ($identifier) { - $model = $this->retailerRepository->get($identifier); + $model = $this->retailerRepository->get((int) $identifier); if (!$model->getId()) { $this->messageManager->addError(__('This retailer no longer exists.')); - return $resultRedirect->setPath('*/*/'); } } @@ -93,15 +90,13 @@ public function execute() } $model->setData($data); - $model->setStoreId($storeId); - if ($media) { - $model->setMediaPath($media); - } + $model->setData('store_id', $storeId); + $model->setMediaPath($media); try { $this->retailerRepository->save($model); $this->messageManager->addSuccessMessage(__('You saved the retailer %1.', $model->getName())); - $this->_objectManager->get('Magento\Backend\Model\Session')->setFormData(false); + $this->_objectManager->get(Session::class)->setFormData(false); if ($redirectBack) { $redirectParams = ['id' => $model->getId()]; @@ -113,9 +108,9 @@ public function execute() } return $resultRedirect->setPath('*/*/'); - } catch (\Exception $e) { + } catch (Exception $e) { $this->messageManager->addErrorMessage($e->getMessage()); - $this->_objectManager->get('Magento\Backend\Model\Session')->setFormData($data); + $this->_objectManager->get(Session::class)->setFormData($data); $returnParams = ['id' => $model->getId()]; diff --git a/Model/ResourceModel/Retailer/Collection.php b/Model/ResourceModel/Retailer/Collection.php index fd26ea0..c989428 100644 --- a/Model/ResourceModel/Retailer/Collection.php +++ b/Model/ResourceModel/Retailer/Collection.php @@ -1,59 +1,45 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Model\ResourceModel\Retailer; +use Magento\Eav\Model\Config; +use Magento\Eav\Model\EntityFactory as EavEntityFactory; +use Magento\Eav\Model\ResourceModel\Helper; +use Magento\Framework\App\ResourceConnection; +use Magento\Framework\Data\Collection\Db\FetchStrategyInterface; +use Magento\Framework\Data\Collection\EntityFactory; +use Magento\Framework\DB\Adapter\AdapterInterface; +use Magento\Framework\Event\ManagerInterface; +use Magento\Framework\Validator\UniversalFactory; +use Magento\Store\Model\StoreManagerInterface; +use Psr\Log\LoggerInterface; use Smile\Retailer\Api\Data\RetailerInterface; +use Smile\Retailer\Model\Retailer; +use Smile\Seller\Model\ResourceModel\Seller as SellerResource; +use Smile\Seller\Model\ResourceModel\Seller\Collection as SellerResourceModelCollection; /** - * Retailers Collection - * - * @SuppressWarnings(PHPMD.CamelCasePropertyName) The properties are inherited + * Retailers Collection. * - * @category Smile - * @package Smile\Retailer - * @author Aurelien FOUCRET + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ -class Collection extends \Smile\Seller\Model\ResourceModel\Seller\Collection +class Collection extends SellerResourceModelCollection { - /** - * Collection constructor. - * - * @SuppressWarnings(PHPMD.ExcessiveParameterList) Parent construct already has 10 arguments. - * - * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory Entity Factory - * @param \Psr\Log\LoggerInterface $logger Logger - * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy Fetch Strategy - * @param \Magento\Framework\Event\ManagerInterface $eventManager Event Manager - * @param \Magento\Eav\Model\Config $eavConfig EAV Config - * @param \Magento\Framework\App\ResourceConnection $resource Resource Connection - * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory EAV Entity Factory - * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper Resource Helper - * @param \Magento\Store\Model\StoreManagerInterface $storeManager The Store Manager - * @param \Magento\Framework\Validator\UniversalFactory $universalFactory Universal Factory - * @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection Database Connection - */ public function __construct( - \Magento\Framework\Data\Collection\EntityFactory $entityFactory, - \Psr\Log\LoggerInterface $logger, - \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, - \Magento\Framework\Event\ManagerInterface $eventManager, - \Magento\Eav\Model\Config $eavConfig, - \Magento\Framework\App\ResourceConnection $resource, - \Magento\Eav\Model\EntityFactory $eavEntityFactory, - \Magento\Eav\Model\ResourceModel\Helper $resourceHelper, - \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\Framework\Validator\UniversalFactory $universalFactory, - \Magento\Framework\DB\Adapter\AdapterInterface $connection = null + EntityFactory $entityFactory, + LoggerInterface $logger, + FetchStrategyInterface $fetchStrategy, + ManagerInterface $eventManager, + Config $eavConfig, + ResourceConnection $resource, + EavEntityFactory $eavEntityFactory, + Helper $resourceHelper, + StoreManagerInterface $storeManager, + UniversalFactory $universalFactory, + ?AdapterInterface $connection = null ) { parent::__construct( $entityFactory, @@ -72,19 +58,17 @@ public function __construct( } /** - * Init collection and determine table names - * - * @SuppressWarnings(PHPMD.CamelCaseMethodName) The method is inherited - * - * @return void + * @inheritdoc */ protected function _construct() { - $this->_init('Smile\Retailer\Model\Retailer', 'Smile\Seller\Model\ResourceModel\Seller'); + $this->_init(Retailer::class, SellerResource::class); if ($this->sellerAttributeSetId == null) { if ($this->sellerAttributeSetName !== null) { - $this->sellerAttributeSetId = $this->getResource()->getAttributeSetIdByName($this->sellerAttributeSetName); + /** @var SellerResource $resourceModel */ + $resourceModel = $this->getResource(); + $this->sellerAttributeSetId = $resourceModel->getAttributeSetIdByName($this->sellerAttributeSetName); } } } diff --git a/Model/Retailer.php b/Model/Retailer.php index 4e2618e..dd8f5f6 100644 --- a/Model/Retailer.php +++ b/Model/Retailer.php @@ -1,58 +1,47 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Model; +use Smile\Retailer\Api\Data\RetailerExtensionInterface; use Smile\Retailer\Api\Data\RetailerInterface; use Smile\Seller\Model\Seller; /** - * Retailer Model class - * - * @category Smile - * @package Smile\Retailer - * @author Aurelien FOUCRET + * Retailer Model class. */ class Retailer extends Seller implements RetailerInterface { /** - * {@inheritDoc} + * @inheritdoc */ - public function getExtensionAttributes() + public function getExtensionAttributes(): ?RetailerExtensionInterface { $extensionAttributes = $this->_getExtensionAttributes(); + // @phpstan-ignore-next-line - this if seems not necessary, TODO: test without it if (!$extensionAttributes) { $extensionAttributes = $this->extensionAttributesFactory - ->create('Smile\Retailer\Api\Data\RetailerInterface'); + ->create(RetailerInterface::class); $this->_setExtensionAttributes($extensionAttributes); } + /** @var RetailerExtensionInterface $extensionAttributes */ return $extensionAttributes; } /** - * {@inheritDoc} + * @inheritdoc */ - public function setExtensionAttributes(\Smile\Retailer\Api\Data\RetailerExtensionInterface $extensionAttributes) + public function setExtensionAttributes(RetailerExtensionInterface $extensionAttributes): self { return $this->_setExtensionAttributes($extensionAttributes); } /** - * Retrieve AttributeSetName - * - * @return string + * @inheritdoc */ - public function getAttributeSetName() + public function getAttributeSetName(): string { return ucfirst(self::ATTRIBUTE_SET_RETAILER); } diff --git a/Model/Retailer/EavPostDataHandler.php b/Model/Retailer/EavPostDataHandler.php index 86ff18e..527f6ec 100644 --- a/Model/Retailer/EavPostDataHandler.php +++ b/Model/Retailer/EavPostDataHandler.php @@ -1,32 +1,22 @@ - * @copyright 2017 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Model\Retailer; +use Smile\Retailer\Api\Data\RetailerInterface; + /** * EAV Post Data handler for retailer edition : will handle values submitted with the "Use Default" checkbox checked. - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud */ class EavPostDataHandler implements PostDataHandlerInterface { /** - * {@inheritDoc} + * @inheritdoc */ - public function getData(\Smile\Retailer\Api\Data\RetailerInterface $retailer, $data) + public function getData(RetailerInterface $retailer, mixed $data): mixed { - if (isset($data['use_default']) && !empty($data['use_default'])) { + if (!empty($data['use_default'])) { foreach ($data['use_default'] as $attributeCode => $attributeValue) { if ($attributeValue && isset($data[$attributeCode])) { $data[$attributeCode] = null; diff --git a/Model/Retailer/PostDataHandlerInterface.php b/Model/Retailer/PostDataHandlerInterface.php index 8ce54ec..62add27 100644 --- a/Model/Retailer/PostDataHandlerInterface.php +++ b/Model/Retailer/PostDataHandlerInterface.php @@ -1,33 +1,21 @@ -* @copyright 2016 Smile -* @license Open Software License ("OSL") v. 3.0 -*/ + +declare(strict_types=1); + namespace Smile\Retailer\Model\Retailer; +use Exception; +use Smile\Retailer\Api\Data\RetailerInterface; + /** * Form data handler interface. - * - * @category Smile - * @package Smile\Retailer - * @author Aurelien FOUCRET */ interface PostDataHandlerInterface { /** * Process form data. * - * @param \Smile\Retailer\Api\Data\RetailerInterface $retailer Retailer. - * @param mixed $data Original form data. - * - * @return mixed + * @throws Exception */ - public function getData(\Smile\Retailer\Api\Data\RetailerInterface $retailer, $data); + public function getData(RetailerInterface $retailer, mixed $data): mixed; } diff --git a/Model/RetailerRepository.php b/Model/RetailerRepository.php index e24b25b..b839107 100644 --- a/Model/RetailerRepository.php +++ b/Model/RetailerRepository.php @@ -1,128 +1,77 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Model; -use Magento\Framework\Api\SearchCriteriaInterface; -use Magento\Framework\Api\SortOrder; use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface; +use Magento\Framework\Api\Search\FilterGroup; use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface; +use Magento\Framework\Api\SearchCriteriaInterface; +use Magento\Framework\Api\SortOrder; use Smile\Retailer\Api\Data\RetailerInterface; +use Smile\Retailer\Api\Data\RetailerInterfaceFactory; use Smile\Retailer\Api\Data\RetailerSearchResultsInterface; -use Smile\Retailer\Api\RetailerRepositoryInterface; use Smile\Retailer\Api\Data\RetailerSearchResultsInterfaceFactory; +use Smile\Retailer\Api\RetailerRepositoryInterface; use Smile\Retailer\Model\ResourceModel\Retailer\Collection; use Smile\Retailer\Model\ResourceModel\Retailer\CollectionFactory; +use Smile\Seller\Api\Data\SellerInterface; +use Smile\Seller\Model\SellerRepository; +use Smile\Seller\Model\SellerRepositoryFactory; /** - * Retailer Repository + * Retailer Repository implementation. * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class RetailerRepository implements RetailerRepositoryInterface { - /** - * @var \Smile\Seller\Model\SellerRepository - */ - private $sellerRepository; - - /** - * @var RetailerSearchResultsInterfaceFactory - */ - private $searchResultFactory; + private SellerRepository $sellerRepository; - /** - * @var CollectionFactory - */ - private $collectionFactory; - - /** - * @var CollectionProcessorInterface - */ - private $collectionProcessor; - - /** - * @var JoinProcessorInterface - */ - private $joinProcessor; - - /** - * Constructor. - * - * @param \Smile\Seller\Model\SellerRepositoryFactory $sellerRepositoryFactory Seller repository. - * @param \Smile\Retailer\Api\Data\RetailerInterfaceFactory $retailerFactory Retailer factory. - * @param RetailerSearchResultsInterfaceFactory $searchResultFactory Search Result factory. - * @param CollectionFactory $collectionFactory Collection factory. - * @param CollectionProcessorInterface $collectionProcessor Search criteria collection - * processor. - * @param JoinProcessorInterface $joinProcessor Extension attriubute join - * processor. - */ public function __construct( - \Smile\Seller\Model\SellerRepositoryFactory $sellerRepositoryFactory, - \Smile\Retailer\Api\Data\RetailerInterfaceFactory $retailerFactory, - RetailerSearchResultsInterfaceFactory $searchResultFactory, - CollectionFactory $collectionFactory, - CollectionProcessorInterface $collectionProcessor, - JoinProcessorInterface $joinProcessor + SellerRepositoryFactory $sellerRepositoryFactory, + RetailerInterfaceFactory $retailerFactory, + private RetailerSearchResultsInterfaceFactory $searchResultFactory, + private CollectionFactory $collectionFactory, + private CollectionProcessorInterface $collectionProcessor, + private JoinProcessorInterface $joinProcessor ) { $this->sellerRepository = $sellerRepositoryFactory->create([ - 'sellerFactory' => $retailerFactory, + 'sellerFactory' => $retailerFactory, 'attributeSetName' => RetailerInterface::ATTRIBUTE_SET_RETAILER, ]); - - $this->searchResultFactory = $searchResultFactory; - $this->collectionFactory = $collectionFactory; - $this->collectionProcessor = $collectionProcessor; - $this->joinProcessor = $joinProcessor; } /** - * {@inheritDoc} + * @inheritdoc */ - public function save(\Smile\Retailer\Api\Data\RetailerInterface $retailer) + public function save(SellerInterface $retailer) { return $this->sellerRepository->save($retailer); } /** - * {@inheritDoc} + * @inheritdoc */ - public function get($retailerId, $storeId = null) + public function get(int $retailerId, ?int $storeId = null) { - return $this->sellerRepository->get($retailerId, $storeId); + return $this->sellerRepository->get((int) $retailerId, $storeId); } /** - * {@inheritDoc} + * @inheritdoc */ - public function getByCode($retailerCode, $storeId = null) + public function getByCode(string $retailerCode, ?int $storeId = null) { return $this->sellerRepository->getByCode($retailerCode, $storeId); } /** - * Search for retailers. - * - * @param SearchCriteriaInterface $searchCriteria Search criteria - * - * @return RetailerSearchResultsInterface + * @inheritdoc */ - public function getList(SearchCriteriaInterface $searchCriteria) + public function getList(SearchCriteriaInterface $searchCriteria): RetailerSearchResultsInterface { - /** @var Collection $collection */ $collection = $this->collectionFactory->create(); $this->joinProcessor->process($collection); @@ -139,7 +88,7 @@ public function getList(SearchCriteriaInterface $searchCriteria) $field = $sortOrder->getField(); $collection->addOrder( $field, - ($sortOrder->getDirection() == SortOrder::SORT_ASC) ? 'ASC' : 'DESC' + $sortOrder->getDirection() == SortOrder::SORT_ASC ? 'ASC' : 'DESC' ); } $collection->setCurPage($searchCriteria->getCurrentPage()); @@ -155,33 +104,26 @@ public function getList(SearchCriteriaInterface $searchCriteria) } /** - * {@inheritDoc} + * @inheritdoc */ - public function delete(\Smile\Retailer\Api\Data\RetailerInterface $retailer) + public function delete(SellerInterface $retailer): bool { return $this->sellerRepository->delete($retailer); } /** - * {@inheritDoc} + * @inheritdoc */ - public function deleteByIdentifier($retailerId) + public function deleteByIdentifier(int $retailerId): bool { return $this->sellerRepository->deleteByIdentifier($retailerId); } /** * Helper function that adds a FilterGroup to the collection. - * - * @param \Magento\Framework\Api\Search\FilterGroup $filterGroup Filter Group - * @param Collection $collection Retailer collection - * - * @return void */ - protected function addFilterGroupToCollection( - \Magento\Framework\Api\Search\FilterGroup $filterGroup, - Collection $collection - ) { + protected function addFilterGroupToCollection(FilterGroup $filterGroup, Collection $collection): void + { $fields = []; foreach ($filterGroup->getFilters() as $filter) { $conditionType = $filter->getConditionType() ? $filter->getConditionType() : 'eq'; diff --git a/README.md b/README.md index a5c196b..84250cd 100644 --- a/README.md +++ b/README.md @@ -4,21 +4,21 @@ It allows to add retailers info. ### Requirements -The module requires : +The module requires: -- [Seller](https://github.com/Smile-SA/magento2-module-seller) > 1.2.* +- [Seller](https://github.com/Smile-SA/magento2-module-seller) >= 2.0.* ### How to use -1. Install the module via Composer : +1. Install the module via Composer: ``` composer require smile/module-retailer ``` -2. Enable it +2. Enable it: ``` bin/magento module:enable Smile_Retailer ``` -3. Install the module and rebuild the DI cache +3. Install the module and rebuild the DI cache: ``` bin/magento setup:upgrade ``` diff --git a/Setup/InstallData.php b/Setup/Patch/Data/DefaultRetailerAttributes.php similarity index 55% rename from Setup/InstallData.php rename to Setup/Patch/Data/DefaultRetailerAttributes.php index 7afe1a9..b71955e 100644 --- a/Setup/InstallData.php +++ b/Setup/Patch/Data/DefaultRetailerAttributes.php @@ -1,71 +1,70 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ -namespace Smile\Retailer\Setup; +declare(strict_types=1); + +namespace Smile\Retailer\Setup\Patch\Data; -use Magento\Framework\Setup\InstallDataInterface; -use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\ModuleDataSetupInterface; +use Magento\Framework\Setup\Patch\DataPatchInterface; +use Magento\Framework\Setup\Patch\PatchVersionInterface; use Smile\Retailer\Api\Data\RetailerInterface; +use Smile\Retailer\Setup\Patch\RetailerSetup; +use Smile\Retailer\Setup\Patch\RetailerSetupFactory; /** - * Seller Data install class. - * - * @category Smile - * @package Smile\Seller - * @author Aurelien FOUCRET + * Class default groups and attributes for customer */ -class InstallData implements InstallDataInterface +class DefaultRetailerAttributes implements DataPatchInterface, PatchVersionInterface { + public function __construct( + private readonly RetailerSetupFactory $retailerSetupFactory, + private readonly ModuleDataSetupInterface $moduleDataSetup + ) { + } + /** - * @var RetailerSetupFactory + * @inheritdoc + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ - private $retailerSetupFactory; + public function apply(): self + { + /** @var RetailerSetup $retailerSetup */ + $retailerSetup = $this->retailerSetupFactory->create(['setup' => $this->moduleDataSetup]); + $retailerSetup->installEntities(); + + $this->installRetailerAttributeSet($retailerSetup); + + return $this; + } /** - * InstallData constructor - * - * @param RetailerSetupFactory $retailerSetupFactory The Retailer Setup factory + * @inheritdoc */ - public function __construct(RetailerSetupFactory $retailerSetupFactory) + public static function getDependencies(): array { - $this->retailerSetupFactory = $retailerSetupFactory; + return []; } /** - * {@inheritDoc} + * @inheritdoc */ - public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context) + public static function getVersion(): string { - $setup->startSetup(); - - /** @var RetailerSetup $retailerSetup */ - $retailerSetup = $this->retailerSetupFactory->create(['setup' => $setup]); - $retailerSetup->installEntities(); - - $this->installRetailerAttributeSet($retailerSetup); - - $setup->endSetup(); + return '2.0.1'; } + /** + * @inheritdoc + */ + public function getAliases(): array + { + return []; + } /** * Initialize the Retailer attribute sets. - * - * @param RetailerSetup $setup The Retailer Setup */ - protected function installRetailerAttributeSet(RetailerSetup $setup) + protected function installRetailerAttributeSet(RetailerSetup $setup): void { $attributeSetsDefinition = $setup->getAttributeSetDefinition(); $groupsDefinition = $setup->getGroupsDefinition(); diff --git a/Setup/Patch/RetailerSetup.php b/Setup/Patch/RetailerSetup.php new file mode 100644 index 0000000..c42d921 --- /dev/null +++ b/Setup/Patch/RetailerSetup.php @@ -0,0 +1,70 @@ +getRetailerAttributes() + ); + + return $entities; + } + + /** + * Get the group definition. + */ + public function getGroupsDefinition(): array + { + return [ + 'General' => 10, + 'Images' => 20, + 'Meta Data' => 30, + ]; + } + + /** + * Get the attributes set definition for retailers. + */ + public function getAttributeSetDefinition(): array + { + return [ + ucfirst(RetailerInterface::ATTRIBUTE_SET_RETAILER) => [ + 'General' => [ + 'name', + 'seller_code', + 'is_active', + 'description', + ], + 'Meta Data' => [ + 'meta_title', + 'meta_keywords', + 'meta_description', + ], + ], + ]; + } + + /** + * Retrieve retailer specific attributes. + */ + private function getRetailerAttributes(): array + { + return []; + } +} diff --git a/Setup/RetailerSetup.php b/Setup/RetailerSetup.php deleted file mode 100644 index b76bedb..0000000 --- a/Setup/RetailerSetup.php +++ /dev/null @@ -1,95 +0,0 @@ - - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ - -namespace Smile\Retailer\Setup; - -use Smile\Retailer\Api\Data\RetailerInterface; -use Smile\Seller\Setup\SellerSetup; - -/** - * Retailer Setup class : contains EAV Attributes declarations. - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud - */ -class RetailerSetup extends SellerSetup -{ - /** - * Default entities and attributes - * - * @return array - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - */ - public function getDefaultEntities() - { - $entities = parent::getDefaultEntities(); - $entities[RetailerInterface::ENTITY]['attributes'] = array_merge( - $entities[RetailerInterface::ENTITY]['attributes'], - $this->getRetailerAttributes() - ); - - return $entities; - } - - /** - * Get the group definition - * - * @return array - */ - public function getGroupsDefinition() - { - return [ - 'General' => 10, - 'Images' => 20, - 'Meta Data' => 30, - ]; - } - - /** - * Get the attributes set definition for retailers - * - * @return array - */ - public function getAttributeSetDefinition() - { - return [ - ucfirst(RetailerInterface::ATTRIBUTE_SET_RETAILER) => [ - 'General' => [ - 'name', - 'seller_code', - 'is_active', - 'description', - ], - 'Meta Data' => [ - 'meta_title', - 'meta_keywords', - 'meta_description', - ], - ], - ]; - } - - /** - * Retrieve retailer specific attributes - * - * @return array - */ - private function getRetailerAttributes() - { - $attributes = []; - - return $attributes; - } -} diff --git a/Ui/Component/Form/Retailer/Options.php b/Ui/Component/Form/Retailer/Options.php index 8623934..8e0392c 100644 --- a/Ui/Component/Form/Retailer/Options.php +++ b/Ui/Component/Form/Retailer/Options.php @@ -1,77 +1,43 @@ - * @copyright 2019 Smile - * @license Open Software License ("OSL") v. 3.0 - */ + +declare(strict_types=1); + namespace Smile\Retailer\Ui\Component\Form\Retailer; -use Magento\Framework\Data\OptionSourceInterface; use Magento\Framework\App\RequestInterface; +use Magento\Framework\Data\OptionSourceInterface; use Smile\Retailer\Model\ResourceModel\Retailer\CollectionFactory; /** - * Source Model for Retailer Picker - * - * @category Smile - * @package Smile\Retailer - * @author Fanny DECLERCK + * Source Model for Retailer Picker. */ class Options implements OptionSourceInterface { - /** - * @var \Smile\Retailer\Model\ResourceModel\Retailer\CollectionFactory - */ - protected $retailerCollectionFactory; + protected ?array $retailersList = null; - /** - * @var RequestInterface - */ - protected $request; - - /** - * @var array - */ - protected $retailersList; - - /** - * @param CollectionFactory $retailerCollectionFactory The Retailer Collection Factory - * @param RequestInterface $request The application request - */ public function __construct( - CollectionFactory $retailerCollectionFactory, - RequestInterface $request + protected CollectionFactory $retailerCollectionFactory, + protected RequestInterface $request ) { - $this->retailerCollectionFactory = $retailerCollectionFactory; - $this->request = $request; } /** - * {@inheritdoc} + * @inheritdoc */ - public function toOptionArray() + public function toOptionArray(): array { return $this->getRetailerList(); } /** - * Retrieve retailer tree - * - * @return array + * Retrieve retailer tree. */ - protected function getRetailerList() + protected function getRetailerList(): array { if ($this->retailersList === null) { $this->retailersList = []; $storeId = $this->request->getParam('store'); - /* @var $collection \Smile\Seller\Model\ResourceModel\Seller\Collection */ $collection = $this->retailerCollectionFactory->create(); $collection @@ -80,9 +46,9 @@ protected function getRetailerList() foreach ($collection as $retailer) { $this->retailersList[$retailer->getId()] = [ - 'value' => $retailer->getId(), + 'value' => $retailer->getId(), 'is_active' => $retailer->getIsActive(), - 'label' => $retailer->getName(), + 'label' => $retailer->getName(), ]; } } diff --git a/Ui/Component/Listing/Column/RetailerActions.php b/Ui/Component/Listing/Column/RetailerActions.php index e446d0f..d9e0089 100644 --- a/Ui/Component/Listing/Column/RetailerActions.php +++ b/Ui/Component/Listing/Column/RetailerActions.php @@ -1,97 +1,58 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ -namespace Smile\Retailer\Ui\Component\Listing\Column; -use Magento\Ui\Component\Listing\Columns\Column; +declare(strict_types=1); + +namespace Smile\Retailer\Ui\Component\Listing\Column; +use Magento\Framework\UrlInterface; use Magento\Framework\View\Element\UiComponent\ContextInterface; use Magento\Framework\View\Element\UiComponentFactory; -use Magento\Framework\UrlInterface; +use Magento\Ui\Component\Listing\Columns\Column; /** - * Retailer Actions for Ui Component - * - * @category Smile - * @package Smile\Retailer - * @author Romain Ruaud + * Retailer Actions for Ui Component. */ class RetailerActions extends Column { - /** - * Edit Url path - **/ - const RETAILER_URL_PATH_EDIT = 'smile_retailer/retailer/edit'; + private const RETAILER_URL_PATH_EDIT = 'smile_retailer/retailer/edit'; + private const RETAILER_URL_PATH_DELETE = 'smile_retailer/retailer/delete'; - /** - * Delete Url path - **/ - const RETAILER_URL_PATH_DELETE = 'smile_retailer/retailer/delete'; - - /** @var UrlInterface */ - protected $urlBuilder; - - /** - * @var string - */ - private $editUrl; - - /** - * @param ContextInterface $context Application context - * @param UiComponentFactory $uiComponentFactory Ui Component Factory - * @param UrlInterface $urlBuilder URL Builder - * @param array $components Components - * @param array $data Component Data - * @param string $editUrl Edit Url - */ public function __construct( ContextInterface $context, UiComponentFactory $uiComponentFactory, - UrlInterface $urlBuilder, + protected UrlInterface $urlBuilder, array $components = [], array $data = [], - $editUrl = self::RETAILER_URL_PATH_EDIT + private string $editUrl = self::RETAILER_URL_PATH_EDIT ) { - $this->urlBuilder = $urlBuilder; - $this->editUrl = $editUrl; - parent::__construct($context, $uiComponentFactory, $components, $data); } /** - * Prepare Data Source - * - * @param array $dataSource The data source - * - * @return array + * Prepare Data Source. */ - public function prepareDataSource(array $dataSource) + public function prepareDataSource(array $dataSource): array { if (isset($dataSource['data']['items'])) { foreach ($dataSource['data']['items'] as & $item) { $name = $this->getData('name'); + $itemName = $item['name'] ?? __('Entity ID : ') . $item['entity_id'] ; if (isset($item['entity_id'])) { $item[$name]['edit'] = [ - 'href' => $this->urlBuilder->getUrl($this->editUrl, ['id' => $item['entity_id']]), + 'href' => $this->urlBuilder->getUrl($this->editUrl, ['id' => $item['entity_id']]), 'label' => __('Edit'), ]; $item[$name]['delete'] = [ - 'href' => $this->urlBuilder->getUrl(self::RETAILER_URL_PATH_DELETE, ['id' => $item['entity_id']]), - 'label' => __('Delete'), + 'href' => $this->urlBuilder->getUrl( + self::RETAILER_URL_PATH_DELETE, + ['id' => $item['entity_id']] + ), + 'label' => __('Delete'), 'confirm' => [ - 'title' => __('Delete ${ $.$data.name }'), - 'message' => __('Are you sure you want to delete ${ $.$data.name } ?'), + 'title' => __('Delete %1', $itemName), + 'message' => __('Are you sure you want to delete %1 ?', $itemName), ], ]; } diff --git a/composer.json b/composer.json index 2c66814..141dfe3 100644 --- a/composer.json +++ b/composer.json @@ -2,23 +2,7 @@ "name": "smile/module-retailer", "type": "magento2-module", "description": "Smile Retailer Suite - Retailer Module", - "keywords": ["magento2","retailer suite","retailer","shop","retailer"], - "repositories": [ - { - "type": "composer", - "url": "https://repo.magento.com/" - } - ], - "require": { - "magento/framework": "*", - "magento/module-store": "*", - "magento/module-eav": "*", - "magento/magento-composer-installer": "*", - "smile/module-seller" : "~1.2.0" - }, - "require-dev": { - "smile/magento2-smilelab-quality-suite": "1.0.0" - }, + "keywords": ["magento2", "retailer suite", "retailer", "shop", "retailer"], "license": "OSL-3.0", "authors": [ { @@ -30,14 +14,37 @@ "email": "romain.ruaud@smile.fr" } ], + "require": { + "php": "^8.1", + "magento/framework": ">=103.0.4", + "magento/module-eav": ">=102.1.4", + "magento/module-store": ">=101.1.4", + "smile/module-seller": "^2.0" + }, + "require-dev": { + "smile/magento2-smilelab-quality-suite": "^3.0" + }, + "repositories": [ + { + "type": "composer", + "url": "https://repo.magento.com/" + } + ], + "minimum-stability": "dev", + "prefer-stable": true, "autoload": { "files": [ "registration.php" ], "psr-4": { - "Smile\\Retailer\\" : "" + "Smile\\Retailer\\": "" } }, - "minimum-stability": "dev", - "prefer-stable": true + "config": { + "allow-plugins": { + "magento/composer-dependency-version-audit-plugin": true, + "dealerdirect/phpcodesniffer-composer-installer": true + }, + "sort-packages": true + } } diff --git a/etc/acl.xml b/etc/acl.xml index 8a8cd4c..d3b9805 100644 --- a/etc/acl.xml +++ b/etc/acl.xml @@ -1,28 +1,10 @@ - - + diff --git a/etc/adminhtml/di.xml b/etc/adminhtml/di.xml index ae5e41f..6952337 100644 --- a/etc/adminhtml/di.xml +++ b/etc/adminhtml/di.xml @@ -1,20 +1,4 @@ - diff --git a/etc/adminhtml/menu.xml b/etc/adminhtml/menu.xml index c62f968..2fe00a2 100644 --- a/etc/adminhtml/menu.xml +++ b/etc/adminhtml/menu.xml @@ -1,19 +1,4 @@ - - diff --git a/etc/adminhtml/routes.xml b/etc/adminhtml/routes.xml index 6e042d6..df400e2 100644 --- a/etc/adminhtml/routes.xml +++ b/etc/adminhtml/routes.xml @@ -1,23 +1,8 @@ - - - + diff --git a/etc/di.xml b/etc/di.xml index 9af80f6..0dc886b 100644 --- a/etc/di.xml +++ b/etc/di.xml @@ -1,27 +1,8 @@ - - - - - - - + + + @@ -76,7 +57,7 @@ retailer - + Smile\Retailer\Ui\Component\Retailer\Form\FieldMapper diff --git a/etc/events.xml b/etc/events.xml index a133c14..7754c9e 100644 --- a/etc/events.xml +++ b/etc/events.xml @@ -1,35 +1,19 @@ - - - - + - + - + - + - + diff --git a/etc/module.xml b/etc/module.xml index bb41d9b..0a3245b 100644 --- a/etc/module.xml +++ b/etc/module.xml @@ -1,24 +1,9 @@ - - - + - - + + diff --git a/etc/webapi.xml b/etc/webapi.xml index d3f390a..6afaf78 100644 --- a/etc/webapi.xml +++ b/etc/webapi.xml @@ -1,19 +1,4 @@ - - diff --git a/i18n/en_US.csv b/i18n/en_US.csv index 2d1083e..ee3d98e 100644 --- a/i18n/en_US.csv +++ b/i18n/en_US.csv @@ -14,8 +14,8 @@ Retailer,Retailer "Retailers List","Retailers List" "You saved the retailer %1.","You saved the retailer %1." Edit,Edit -"Delete ${ $.$data.name }","Delete ${ $.$data.name }" -"Are you sure you want to delete ${ $.$data.name } ?","Are you sure you want to delete ${ $.$data.name } ?" +"Delete %1","Delete %1" +"Are you sure you want to delete %1 ?","Are you sure you want to delete %1 ?" "Retailer Information","Retailer Information" "Retailer Name","Retailer Name" "Seller Code","Seller Code" @@ -28,3 +28,4 @@ Name,Name Active,Active Inactive,Inactive Status,Status +"Entity ID : ","Entity ID : " diff --git a/i18n/fr_FR.csv b/i18n/fr_FR.csv index b9d0848..04dadd6 100644 --- a/i18n/fr_FR.csv +++ b/i18n/fr_FR.csv @@ -14,8 +14,8 @@ Retailer,Magasin "Retailers List","Liste des magasins" "You saved the retailer %1.","Vous avez sauvegardé le magasin %1." Edit,Éditer -"Delete ${ $.$data.name }","Supprimer ${ $.$data.name }" -"Are you sure you want to delete ${ $.$data.name } ?","Êtes-vous sur de vouloir supprimer ${ $.$data.name } ?" +"Delete %1","Supprimer %1" +"Are you sure you want to delete %1 ?","Êtes-vous sur de vouloir supprimer %1 ?" "Retailer Information","Informations du magasin" "Retailer Name","Nom du magasin" "Seller Code","Code" @@ -28,3 +28,4 @@ Name,Nom Active,Activé Inactive,Désactivé Status,Statut +"Entity ID : ","Entité ID : " diff --git a/phpcs.xml.dist b/phpcs.xml.dist new file mode 100644 index 0000000..5769c9b --- /dev/null +++ b/phpcs.xml.dist @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + . + vendor/* + diff --git a/phpmd.xml.dist b/phpmd.xml.dist new file mode 100644 index 0000000..8eadf89 --- /dev/null +++ b/phpmd.xml.dist @@ -0,0 +1,10 @@ + + + + + + vendor/* + diff --git a/phpstan.neon.dist b/phpstan.neon.dist new file mode 100644 index 0000000..4e40864 --- /dev/null +++ b/phpstan.neon.dist @@ -0,0 +1,11 @@ +parameters: + level: 6 + phpVersion: 80100 + checkMissingIterableValueType: false + paths: + - . + excludePaths: + - 'vendor/*' + +includes: + - %currentWorkingDirectory%/vendor/smile/magento2-smilelab-phpstan/extension.neon diff --git a/registration.php b/registration.php index d5a4e68..c55fb48 100644 --- a/registration.php +++ b/registration.php @@ -1,19 +1,11 @@ - * @copyright 2016 Smile - * @license Open Software License ("OSL") v. 3.0 - */ -\Magento\Framework\Component\ComponentRegistrar::register( - \Magento\Framework\Component\ComponentRegistrar::MODULE, +declare(strict_types=1); + +use Magento\Framework\Component\ComponentRegistrar; + +ComponentRegistrar::register( + ComponentRegistrar::MODULE, 'Smile_Retailer', __DIR__ ); diff --git a/view/adminhtml/layout/smile_retailer_retailer_create.xml b/view/adminhtml/layout/smile_retailer_retailer_create.xml index f0cfbaa..07f0bc4 100644 --- a/view/adminhtml/layout/smile_retailer_retailer_create.xml +++ b/view/adminhtml/layout/smile_retailer_retailer_create.xml @@ -1,20 +1,4 @@ - diff --git a/view/adminhtml/layout/smile_retailer_retailer_edit.xml b/view/adminhtml/layout/smile_retailer_retailer_edit.xml index 25de548..e36e6b5 100644 --- a/view/adminhtml/layout/smile_retailer_retailer_edit.xml +++ b/view/adminhtml/layout/smile_retailer_retailer_edit.xml @@ -1,20 +1,4 @@ - diff --git a/view/adminhtml/layout/smile_retailer_retailer_index.xml b/view/adminhtml/layout/smile_retailer_retailer_index.xml index c1fd58a..70a5ffa 100644 --- a/view/adminhtml/layout/smile_retailer_retailer_index.xml +++ b/view/adminhtml/layout/smile_retailer_retailer_index.xml @@ -1,20 +1,4 @@ - diff --git a/view/adminhtml/ui_component/smile_retailer_form.xml b/view/adminhtml/ui_component/smile_retailer_form.xml index 3405def..997611e 100644 --- a/view/adminhtml/ui_component/smile_retailer_form.xml +++ b/view/adminhtml/ui_component/smile_retailer_form.xml @@ -1,20 +1,4 @@ -
diff --git a/view/adminhtml/ui_component/smile_retailer_listing.xml b/view/adminhtml/ui_component/smile_retailer_listing.xml index 4b0afab..f543924 100644 --- a/view/adminhtml/ui_component/smile_retailer_listing.xml +++ b/view/adminhtml/ui_component/smile_retailer_listing.xml @@ -1,20 +1,4 @@ - @@ -88,7 +72,9 @@ - +