diff --git a/.github/workflows/grumphp.yml b/.github/workflows/grumphp.yml index 305ae6f..12eac2e 100644 --- a/.github/workflows/grumphp.yml +++ b/.github/workflows/grumphp.yml @@ -15,7 +15,7 @@ jobs: strategy: fail-fast: false matrix: - php-versions: ['8.1', '8.2', '8.3'] + php-versions: ['8.2', '8.3', '8.4'] steps: - uses: actions/checkout@v4 diff --git a/.jeeves.yaml b/.jeeves.yaml index 02a8cef..dff2779 100644 --- a/.jeeves.yaml +++ b/.jeeves.yaml @@ -1,47 +1,50 @@ Mygento: Base: - Event: - readonly: true - columns: - id: - type: bigint - pk: true - identity: true - unsigned: true - nullable: false - comment: 'Event ID' - instance: - type: varchar - nullable: false - comment: 'Server' - channel: - type: varchar - nullable: false - comment: 'Channel' - level: - type: int - unsigned: true - nullable: false - comment: 'level' - source: 'Mygento\Base\Model\Source\Loglevel' - message: - type: text - nullable: false - comment: 'log datetime' - logged_at: - type: datetime - nullable: false - comment: 'message' - context: - type: text - comment: 'context' - extra: - type: text - comment: 'extra' - indexes: - IX_EVENT_INST: - columns: ['instance'] - IX_EVENT_CHAN: - columns: ['channel'] - IX_EVENT_LVL: - columns: ['level'] + settings: + php_version: 8.2 + entities: + Event: + readonly: true + columns: + id: + type: bigint + pk: true + identity: true + unsigned: true + nullable: false + comment: 'Event ID' + instance: + type: varchar + nullable: false + comment: 'Server' + channel: + type: varchar + nullable: false + comment: 'Channel' + level: + type: int + unsigned: true + nullable: false + comment: 'level' + source: 'Mygento\Base\Model\Source\Loglevel' + message: + type: text + nullable: false + comment: 'log datetime' + logged_at: + type: datetime + nullable: false + comment: 'message' + context: + type: text + comment: 'context' + extra: + type: text + comment: 'extra' + indexes: + IX_EVENT_INST: + columns: ['instance'] + IX_EVENT_CHAN: + columns: ['channel'] + IX_EVENT_LVL: + columns: ['level'] diff --git a/Api/Data/EventInterface.php b/Api/Data/EventInterface.php index 5ebe30f..e6945d3 100644 --- a/Api/Data/EventInterface.php +++ b/Api/Data/EventInterface.php @@ -21,105 +21,82 @@ interface EventInterface /** * Get id - * @return int|null */ - public function getId(); + public function getId(): ?int; /** * Set id * @param int $id - * @return $this */ - public function setId($id); + public function setId($id): self; /** * Get instance - * @return string|null */ - public function getInstance(); + public function getInstance(): string; /** * Set instance - * @param string $instance - * @return $this */ - public function setInstance($instance); + public function setInstance(string $instance): self; /** * Get channel - * @return string|null */ - public function getChannel(); + public function getChannel(): string; /** * Set channel - * @param string $channel - * @return $this */ - public function setChannel($channel); + public function setChannel(string $channel): self; /** * Get level - * @return int|null */ - public function getLevel(); + public function getLevel(): int; /** * Set level - * @param int $level - * @return $this */ - public function setLevel($level); + public function setLevel(int $level): self; /** * Get message - * @return string|null */ - public function getMessage(); + public function getMessage(): string; /** * Set message - * @param string $message - * @return $this */ - public function setMessage($message); + public function setMessage(string $message): self; /** * Get logged at - * @return string|null */ - public function getLoggedAt(); + public function getLoggedAt(): string; /** * Set logged at - * @param string $loggedAt - * @return $this */ - public function setLoggedAt($loggedAt); + public function setLoggedAt(string $loggedAt): self; /** * Get context - * @return string|null */ - public function getContext(); + public function getContext(): ?string; /** * Set context - * @param string $context - * @return $this */ - public function setContext($context); + public function setContext(?string $context): self; /** * Get extra - * @return string|null */ - public function getExtra(); + public function getExtra(): ?string; /** * Set extra - * @param string $extra - * @return $this */ - public function setExtra($extra); + public function setExtra(?string $extra): self; } diff --git a/Api/Data/EventSearchResultsInterface.php b/Api/Data/EventSearchResultsInterface.php index 776087d..cf7874d 100644 --- a/Api/Data/EventSearchResultsInterface.php +++ b/Api/Data/EventSearchResultsInterface.php @@ -8,7 +8,9 @@ namespace Mygento\Base\Api\Data; -interface EventSearchResultsInterface extends \Magento\Framework\Api\SearchResultsInterface +use Magento\Framework\Api\SearchResultsInterface; + +interface EventSearchResultsInterface extends SearchResultsInterface { /** * Get list of Event diff --git a/Api/EventRepositoryInterface.php b/Api/EventRepositoryInterface.php index 5c412af..3eeb5c7 100644 --- a/Api/EventRepositoryInterface.php +++ b/Api/EventRepositoryInterface.php @@ -8,46 +8,38 @@ namespace Mygento\Base\Api; +use Magento\Framework\Api\SearchCriteriaInterface; + interface EventRepositoryInterface { /** * Save Event - * @param \Mygento\Base\Api\Data\EventInterface $entity * @throws \Magento\Framework\Exception\LocalizedException - * @return \Mygento\Base\Api\Data\EventInterface */ - public function save(Data\EventInterface $entity); + public function save(Data\EventInterface $entity): Data\EventInterface; /** * Retrieve Event - * @param int $entityId * @throws \Magento\Framework\Exception\LocalizedException - * @return \Mygento\Base\Api\Data\EventInterface */ - public function getById($entityId); + public function getById(int $entityId): Data\EventInterface; /** * Retrieve Event entities matching the specified criteria - * @param \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria * @throws \Magento\Framework\Exception\LocalizedException - * @return \Mygento\Base\Api\Data\EventSearchResultsInterface */ - public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria); + public function getList(SearchCriteriaInterface $searchCriteria): Data\EventSearchResultsInterface; /** * Delete Event - * @param \Mygento\Base\Api\Data\EventInterface $entity * @throws \Magento\Framework\Exception\LocalizedException - * @return bool true on success */ - public function delete(Data\EventInterface $entity); + public function delete(Data\EventInterface $entity): bool; /** * Delete Event - * @param int $entityId * @throws \Magento\Framework\Exception\NoSuchEntityException * @throws \Magento\Framework\Exception\LocalizedException - * @return bool true on success */ - public function deleteById($entityId); + public function deleteById(int $entityId): bool; } diff --git a/Controller/Adminhtml/Cron/Schedule.php b/Controller/Adminhtml/Cron/Schedule.php index 1b31172..5e16a3d 100644 --- a/Controller/Adminhtml/Cron/Schedule.php +++ b/Controller/Adminhtml/Cron/Schedule.php @@ -37,7 +37,7 @@ public function __construct( /** * Execute action based on request and return result - * @return \Magento\Framework\Controller\ResultInterface|ResponseInterface + * @return \Magento\Framework\App\ResponseInterface|\Magento\Framework\Controller\ResultInterface */ public function execute() { diff --git a/Controller/Adminhtml/Event.php b/Controller/Adminhtml/Event.php index f33288a..87d7bcf 100644 --- a/Controller/Adminhtml/Event.php +++ b/Controller/Adminhtml/Event.php @@ -8,55 +8,24 @@ namespace Mygento\Base\Controller\Adminhtml; -abstract class Event extends \Magento\Backend\App\Action +use Magento\Backend\App\Action; +use Magento\Framework\Registry; +use Mygento\Base\Api\EventRepositoryInterface; + +abstract class Event extends Action { /** * Authorization level * * @see _isAllowed() */ - public const ADMIN_RESOURCE = 'Mygento_Base::base_event'; - - /** - * Core registry - * - * @var \Magento\Framework\Registry - */ - protected $coreRegistry; - - /** - * Event repository - * - * @var \Mygento\Base\Api\EventRepositoryInterface - */ - protected $repository; + public const ADMIN_RESOURCE = 'Mygento_Base::event'; - /** - * @param \Mygento\Base\Api\EventRepositoryInterface $repository - * @param \Magento\Framework\Registry $coreRegistry - * @param \Magento\Backend\App\Action\Context $context - */ public function __construct( - \Mygento\Base\Api\EventRepositoryInterface $repository, - \Magento\Framework\Registry $coreRegistry, - \Magento\Backend\App\Action\Context $context, + protected readonly EventRepositoryInterface $repository, + protected readonly Registry $coreRegistry, + Action\Context $context, ) { parent::__construct($context); - $this->repository = $repository; - $this->coreRegistry = $coreRegistry; - } - - /** - * Init page - * - * @param \Magento\Backend\Model\View\Result\Page $resultPage - * @return \Magento\Backend\Model\View\Result\Page - */ - protected function initPage($resultPage) - { - $resultPage->setActiveMenu('Mygento_Base::event'); - - //->addBreadcrumb(__('Event'), __('Event')); - return $resultPage; } } diff --git a/Controller/Adminhtml/Event/Index.php b/Controller/Adminhtml/Event/Index.php index 0bbe9d2..03e47d4 100644 --- a/Controller/Adminhtml/Event/Index.php +++ b/Controller/Adminhtml/Event/Index.php @@ -8,40 +8,40 @@ namespace Mygento\Base\Controller\Adminhtml\Event; -class Index extends \Mygento\Base\Controller\Adminhtml\Event -{ - /** @var \Magento\Framework\View\Result\PageFactory */ - private $resultPageFactory; +use Magento\Backend\App\Action\Context; +use Magento\Framework\App\Request\DataPersistorInterface; +use Magento\Framework\Controller\ResultInterface; +use Magento\Framework\Registry; +use Magento\Framework\View\Result\PageFactory; +use Mygento\Base\Api\EventRepositoryInterface; +use Mygento\Base\Controller\Adminhtml\Event; - /** - * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory - * @param \Mygento\Base\Api\EventRepositoryInterface $repository - * @param \Magento\Framework\Registry $coreRegistry - * @param \Magento\Backend\App\Action\Context $context - */ +class Index extends Event +{ public function __construct( - \Magento\Framework\View\Result\PageFactory $resultPageFactory, - \Mygento\Base\Api\EventRepositoryInterface $repository, - \Magento\Framework\Registry $coreRegistry, - \Magento\Backend\App\Action\Context $context, + private readonly PageFactory $resultPageFactory, + private readonly DataPersistorInterface $dataPersistor, + EventRepositoryInterface $repository, + Registry $coreRegistry, + Context $context, ) { - $this->resultPageFactory = $resultPageFactory; parent::__construct($repository, $coreRegistry, $context); } /** * Index action - * - * @return \Magento\Framework\Controller\ResultInterface */ - public function execute() + public function execute(): ResultInterface { /** @var \Magento\Backend\Model\View\Result\Page $resultPage */ $resultPage = $this->resultPageFactory->create(); - $this->initPage($resultPage)->getConfig()->getTitle()->prepend(__('Event')); + $resultPage + ->setActiveMenu('Mygento_Base::event') + ->getConfig() + ->getTitle()->prepend(__('Event')->render()); + + $this->dataPersistor->clear('base_event'); - //$dataPersistor = $this->_objectManager->get(\Magento\Framework\App\Request\DataPersistorInterface::class); - //$dataPersistor->clear('base_event'); return $resultPage; } } diff --git a/Helper/Currency.php b/Helper/Currency.php index 7741c12..ab7be32 100644 --- a/Helper/Currency.php +++ b/Helper/Currency.php @@ -20,11 +20,6 @@ class Currency extends \Magento\Framework\App\Helper\AbstractHelper */ private $currencyFactory; - /** - * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory - * @param \Magento\Framework\App\Helper\Context $context - */ public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Directory\Model\CurrencyFactory $currencyFactory, diff --git a/Model/Config/Backend/File.php b/Model/Config/Backend/File.php index 1555fe9..80382e2 100644 --- a/Model/Config/Backend/File.php +++ b/Model/Config/Backend/File.php @@ -9,9 +9,16 @@ namespace Mygento\Base\Model\Config\Backend; use Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface; +use Magento\Framework\App\Cache\TypeListInterface; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Data\Collection\AbstractDb; use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\File\UploaderFactory; +use Magento\Framework\Filesystem; +use Magento\Framework\Model\Context; +use Magento\Framework\Model\ResourceModel\AbstractResource; +use Magento\Framework\Registry; /** * @method getFieldConfig() @@ -28,50 +35,17 @@ class File extends \Magento\Framework\App\Config\Value */ protected $maxFileSize = 0; - /** - * @var \Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface - */ - private $requestData; - - /** - * @var \Magento\Framework\Filesystem - */ - private $filesystem; - - /** - * @var \Magento\Framework\Filesystem\DirectoryList - */ - private $directoryList; - - /** - * @var \Magento\Framework\File\UploaderFactory - */ - private $uploaderFactory; - - /** - * @param \Magento\Framework\File\UploaderFactory $uploaderFactory - * @param RequestDataInterface $requestData - * @param \Magento\Framework\Filesystem $filesystem - * @param \Magento\Framework\Filesystem\DirectoryList $directoryList - * @param \Magento\Framework\Model\Context $context - * @param \Magento\Framework\Registry $registry - * @param \Magento\Framework\App\Config\ScopeConfigInterface $config - * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList - * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource - * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection - * @param array $data - */ public function __construct( - \Magento\Framework\File\UploaderFactory $uploaderFactory, - RequestDataInterface $requestData, - \Magento\Framework\Filesystem $filesystem, - \Magento\Framework\Filesystem\DirectoryList $directoryList, - \Magento\Framework\Model\Context $context, - \Magento\Framework\Registry $registry, - \Magento\Framework\App\Config\ScopeConfigInterface $config, - \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList, - \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, - \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, + private UploaderFactory $uploaderFactory, + private RequestDataInterface $requestData, + private Filesystem $filesystem, + private DirectoryList $directoryList, + Context $context, + Registry $registry, + ScopeConfigInterface $config, + TypeListInterface $cacheTypeList, + ?AbstractResource $resource = null, + ?AbstractDb $resourceCollection = null, array $data = [], ) { parent::__construct( @@ -83,10 +57,6 @@ public function __construct( $resourceCollection, $data, ); - $this->requestData = $requestData; - $this->filesystem = $filesystem; - $this->uploaderFactory = $uploaderFactory; - $this->directoryList = $directoryList; } /** diff --git a/Model/Event.php b/Model/Event.php index d90da71..924004f 100644 --- a/Model/Event.php +++ b/Model/Event.php @@ -9,14 +9,17 @@ namespace Mygento\Base\Model; use Magento\Framework\Model\AbstractModel; +use Mygento\Base\Api\Data\EventInterface; -class Event extends AbstractModel implements \Mygento\Base\Api\Data\EventInterface +class Event extends AbstractModel implements EventInterface { + /** @inheritDoc */ + protected $_eventPrefix = 'mygento_base_event'; + /** * Get id - * @return int|null */ - public function getId() + public function getId(): ?int { return $this->getData(self::ID); } @@ -24,142 +27,120 @@ public function getId() /** * Set id * @param int $id - * @return $this */ - public function setId($id) + public function setId($id): self { return $this->setData(self::ID, $id); } /** * Get instance - * @return string|null */ - public function getInstance() + public function getInstance(): string { return $this->getData(self::INSTANCE); } /** * Set instance - * @param string $instance - * @return $this */ - public function setInstance($instance) + public function setInstance(string $instance): self { return $this->setData(self::INSTANCE, $instance); } /** * Get channel - * @return string|null */ - public function getChannel() + public function getChannel(): string { return $this->getData(self::CHANNEL); } /** * Set channel - * @param string $channel - * @return $this */ - public function setChannel($channel) + public function setChannel(string $channel): self { return $this->setData(self::CHANNEL, $channel); } /** * Get level - * @return int|null */ - public function getLevel() + public function getLevel(): int { return $this->getData(self::LEVEL); } /** * Set level - * @param int $level - * @return $this */ - public function setLevel($level) + public function setLevel(int $level): self { return $this->setData(self::LEVEL, $level); } /** * Get message - * @return string|null */ - public function getMessage() + public function getMessage(): string { return $this->getData(self::MESSAGE); } /** * Set message - * @param string $message - * @return $this */ - public function setMessage($message) + public function setMessage(string $message): self { return $this->setData(self::MESSAGE, $message); } /** * Get logged at - * @return string|null */ - public function getLoggedAt() + public function getLoggedAt(): string { return $this->getData(self::LOGGED_AT); } /** * Set logged at - * @param string $loggedAt - * @return $this */ - public function setLoggedAt($loggedAt) + public function setLoggedAt(string $loggedAt): self { return $this->setData(self::LOGGED_AT, $loggedAt); } /** * Get context - * @return string|null */ - public function getContext() + public function getContext(): ?string { return $this->getData(self::CONTEXT); } /** * Set context - * @param string $context - * @return $this */ - public function setContext($context) + public function setContext(?string $context): self { return $this->setData(self::CONTEXT, $context); } /** * Get extra - * @return string|null */ - public function getExtra() + public function getExtra(): ?string { return $this->getData(self::EXTRA); } /** * Set extra - * @param string $extra - * @return $this */ - public function setExtra($extra) + public function setExtra(?string $extra): self { return $this->setData(self::EXTRA, $extra); } @@ -169,6 +150,6 @@ public function setExtra($extra) */ protected function _construct() { - $this->_init(\Mygento\Base\Model\ResourceModel\Event::class); + $this->_init(ResourceModel\Event::class); } } diff --git a/Model/Event/DataProvider.php b/Model/Event/DataProvider.php index 5a3379a..178fcfe 100644 --- a/Model/Event/DataProvider.php +++ b/Model/Event/DataProvider.php @@ -9,48 +9,38 @@ namespace Mygento\Base\Model\Event; use Magento\Framework\App\Request\DataPersistorInterface; +use Magento\Ui\DataProvider\Modifier\PoolInterface; +use Magento\Ui\DataProvider\ModifierPoolDataProvider; +use Mygento\Base\Model\ResourceModel\Event\Collection; use Mygento\Base\Model\ResourceModel\Event\CollectionFactory; -class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider +class DataProvider extends ModifierPoolDataProvider { - /** @var \Mygento\Base\Model\ResourceModel\Event\Collection */ + /** @var Collection */ protected $collection; - /** @var DataPersistorInterface */ - protected $dataPersistor; + private DataPersistorInterface $dataPersistor; + private array $loadedData = []; - /** @var array */ - protected $loadedData; - - /** - * @param \Mygento\Base\Model\ResourceModel\Event\CollectionFactory $collectionFactory - * @param \Magento\Framework\App\Request\DataPersistorInterface $dataPersistor - * @param string $name - * @param string $primaryFieldName - * @param string $requestFieldName - * @param array $meta - * @param array $data - */ public function __construct( CollectionFactory $collectionFactory, DataPersistorInterface $dataPersistor, - $name, - $primaryFieldName, - $requestFieldName, + string $name, + string $primaryFieldName, + string $requestFieldName, array $meta = [], array $data = [], + ?PoolInterface $pool = null, ) { - parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data); + parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data, $pool); + $this->collection = $collectionFactory->create(); $this->dataPersistor = $dataPersistor; } - /** - * @return array|null - */ - public function getData() + public function getData(): array { - if (isset($this->loadedData)) { + if (!empty($this->loadedData)) { return $this->loadedData; } $items = $this->collection->getItems(); diff --git a/Model/EventRepository.php b/Model/EventRepository.php index 5c6c8d5..8eb2508 100644 --- a/Model/EventRepository.php +++ b/Model/EventRepository.php @@ -8,56 +8,41 @@ namespace Mygento\Base\Model; -use Magento\Framework\Api\SortOrder; -use Magento\Framework\Data\Collection; +use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface; +use Magento\Framework\Api\SearchCriteriaInterface; +use Magento\Framework\Exception\CouldNotDeleteException; +use Magento\Framework\Exception\CouldNotSaveException; +use Magento\Framework\Exception\NoSuchEntityException; +use Mygento\Base\Api\Data\EventInterface; +use Mygento\Base\Api\Data\EventInterfaceFactory; +use Mygento\Base\Api\Data\EventSearchResultsInterface; +use Mygento\Base\Api\Data\EventSearchResultsInterfaceFactory; +use Mygento\Base\Api\EventRepositoryInterface; +use Mygento\Base\Model\ResourceModel\Event\CollectionFactory; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class EventRepository implements \Mygento\Base\Api\EventRepositoryInterface +class EventRepository implements EventRepositoryInterface { - /** @var \Mygento\Base\Model\ResourceModel\Event */ - private $resource; - - /** @var \Mygento\Base\Model\ResourceModel\Event\CollectionFactory */ - private $collectionFactory; - - /** @var \Mygento\Base\Api\Data\EventInterfaceFactory */ - private $entityFactory; - - /** @var \Mygento\Base\Api\Data\EventSearchResultsInterfaceFactory */ - private $searchResultsFactory; - - /** - * @param \Mygento\Base\Model\ResourceModel\Event $resource - * @param \Mygento\Base\Model\ResourceModel\Event\CollectionFactory $collectionFactory - * @param \Mygento\Base\Api\Data\EventInterfaceFactory $entityFactory - * @param \Mygento\Base\Api\Data\EventSearchResultsInterfaceFactory $searchResultsFactory - */ public function __construct( - ResourceModel\Event $resource, - ResourceModel\Event\CollectionFactory $collectionFactory, - \Mygento\Base\Api\Data\EventInterfaceFactory $entityFactory, - \Mygento\Base\Api\Data\EventSearchResultsInterfaceFactory $searchResultsFactory, - ) { - $this->resource = $resource; - $this->collectionFactory = $collectionFactory; - $this->entityFactory = $entityFactory; - $this->searchResultsFactory = $searchResultsFactory; - } + private readonly ResourceModel\Event $resource, + private readonly CollectionFactory $collectionFactory, + private readonly EventInterfaceFactory $entityFactory, + private readonly EventSearchResultsInterfaceFactory $searchResultsFactory, + private readonly CollectionProcessorInterface $collectionProcessor, + ) {} /** - * @param int $entityId - * @throws \Magento\Framework\Exception\NoSuchEntityException - * @return \Mygento\Base\Api\Data\EventInterface + * @throws NoSuchEntityException */ - public function getById($entityId) + public function getById(int $entityId): EventInterface { $entity = $this->entityFactory->create(); $this->resource->load($entity, $entityId); if (!$entity->getId()) { - throw new \Magento\Framework\Exception\NoSuchEntityException( - __('Base Event with id "%1" does not exist.', $entityId), + throw new NoSuchEntityException( + __('A Base Event with id "%1" does not exist', $entityId), ); } @@ -65,19 +50,16 @@ public function getById($entityId) } /** - * @param \Mygento\Base\Api\Data\EventInterface $entity - * @psalm-param \Mygento\Base\Api\Data\EventInterface&\Magento\Framework\Model\AbstractModel $event - * @throws \Magento\Framework\Exception\CouldNotSaveException - * @return \Mygento\Base\Api\Data\EventInterface + * @throws CouldNotSaveException */ - public function save(\Mygento\Base\Api\Data\EventInterface $entity) + public function save(EventInterface $entity): EventInterface { try { - /** @psalm-param \Mygento\Base\Api\Data\EventInterface&\Magento\Framework\Model\AbstractModel $event */ $this->resource->save($entity); } catch (\Exception $exception) { - throw new \Magento\Framework\Exception\CouldNotSaveException( - __($exception->getMessage()), + throw new CouldNotSaveException( + __('Could not save the Base Event'), + $exception, ); } @@ -85,16 +67,14 @@ public function save(\Mygento\Base\Api\Data\EventInterface $entity) } /** - * @param \Mygento\Base\Api\Data\EventInterface $entity - * @throws \Magento\Framework\Exception\CouldNotDeleteException - * @return bool + * @throws CouldNotDeleteException */ - public function delete(\Mygento\Base\Api\Data\EventInterface $entity) + public function delete(EventInterface $entity): bool { try { $this->resource->delete($entity); } catch (\Exception $exception) { - throw new \Magento\Framework\Exception\CouldNotDeleteException( + throw new CouldNotDeleteException( __($exception->getMessage()), ); } @@ -103,53 +83,22 @@ public function delete(\Mygento\Base\Api\Data\EventInterface $entity) } /** - * @param int $entityId - * @throws \Magento\Framework\Exception\NoSuchEntityException - * @throws \Magento\Framework\Exception\CouldNotDeleteException - * @return bool + * @throws NoSuchEntityException + * @throws CouldNotDeleteException */ - public function deleteById($entityId) + public function deleteById(int $entityId): bool { return $this->delete($this->getById($entityId)); } - /** - * @param \Magento\Framework\Api\SearchCriteriaInterface $criteria - * @return \Mygento\Base\Api\Data\EventSearchResultsInterface - */ - public function getList(\Magento\Framework\Api\SearchCriteriaInterface $criteria) + public function getList(SearchCriteriaInterface $criteria): EventSearchResultsInterface { /** @var \Mygento\Base\Model\ResourceModel\Event\Collection $collection */ $collection = $this->collectionFactory->create(); - foreach ($criteria->getFilterGroups() as $filterGroup) { - $fields = []; - $conditions = []; - foreach ($filterGroup->getFilters() as $filter) { - $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq'; - $fields[] = $filter->getField(); - $conditions[] = [$condition => $filter->getValue()]; - } - if ($fields) { - $collection->addFieldToFilter($fields, $conditions); - } - } - $sortOrders = $criteria->getSortOrders(); - $sortAsc = SortOrder::SORT_ASC; - $orderAsc = Collection::SORT_ORDER_ASC; - $orderDesc = Collection::SORT_ORDER_DESC; - if ($sortOrders) { - /** @var SortOrder $sortOrder */ - foreach ($sortOrders as $sortOrder) { - $collection->addOrder( - $sortOrder->getField(), - ($sortOrder->getDirection() == $sortAsc) ? $orderAsc : $orderDesc, - ); - } - } - $collection->setCurPage($criteria->getCurrentPage()); - $collection->setPageSize($criteria->getPageSize()); - /** @var \Mygento\Base\Api\Data\EventSearchResultsInterface $searchResults */ + $this->collectionProcessor->process($criteria, $collection); + + /** @var EventSearchResultsInterface $searchResults */ $searchResults = $this->searchResultsFactory->create(); $searchResults->setSearchCriteria($criteria); $searchResults->setItems($collection->getItems()); diff --git a/Model/EventSearchResults.php b/Model/EventSearchResults.php new file mode 100644 index 0000000..5562576 --- /dev/null +++ b/Model/EventSearchResults.php @@ -0,0 +1,14 @@ +eventRepository = $eventRepository; @@ -47,21 +31,18 @@ public function __construct( /** * Writes the record down to the log of the implementing handler - * - * @param array $record - * @return void */ - protected function write(array $record): void + protected function write(LogRecord $record): void { $event = $this->eventFactory->create(); $event->setInstance(gethostname()); - $event->setLevel($record['level']); - $event->setChannel($record['channel']); - $event->setMessage($record['message']); + $event->setLevel($record->level); + $event->setChannel($record->channel); + $event->setMessage($record->message); //serialize - $event->setContext($this->serialize($record['context'])); - $event->setExtra($this->serialize($record['extra'])); + $event->setContext($this->serialize($record->context)); + $event->setExtra($this->serialize($record->extra)); $this->eventRepository->save($event); } diff --git a/Model/Logger/Handler.php b/Model/Logger/Handler.php index 16e7e35..9869e6b 100644 --- a/Model/Logger/Handler.php +++ b/Model/Logger/Handler.php @@ -8,17 +8,14 @@ namespace Mygento\Base\Model\Logger; +use Magento\Framework\Filesystem\DriverInterface; + class Handler extends \Magento\Framework\Logger\Handler\Base { - /** - * @param string $name - * @param \Magento\Framework\Filesystem\DriverInterface $filesystem - * @param string $filePath - */ public function __construct( - $name, - \Magento\Framework\Filesystem\DriverInterface $filesystem, - $filePath = null, + string $name, + DriverInterface $filesystem, + ?string $filePath = null, ) { $this->fileName = DIRECTORY_SEPARATOR . 'var' . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . $name . '.log'; diff --git a/Model/Logger/Logger.php b/Model/Logger/Logger.php index 053578d..d41768d 100644 --- a/Model/Logger/Logger.php +++ b/Model/Logger/Logger.php @@ -10,11 +10,8 @@ class Logger extends \Magento\Framework\Logger\Monolog { - /** - * @param string $name - */ public function __construct( - $name, + string $name, ) { parent::__construct( $name, diff --git a/Model/Mock/OrderMock.php b/Model/Mock/OrderMock.php index 24f7b31..0a72336 100644 --- a/Model/Mock/OrderMock.php +++ b/Model/Mock/OrderMock.php @@ -9,7 +9,10 @@ namespace Mygento\Base\Model\Mock; use Magento\Framework\DataObject; +use Magento\Sales\Api\Data\OrderAddressInterface; +use Magento\Sales\Api\Data\OrderExtensionInterface; use Magento\Sales\Api\Data\OrderInterface; +use Magento\Sales\Api\Data\OrderPaymentInterface; /** * Class OrderMock @@ -44,7 +47,7 @@ public function getPayment() return parent::getPayment(); } - public function setBillingAddress(\Magento\Sales\Api\Data\OrderAddressInterface $address = null) + public function setBillingAddress(?OrderAddressInterface $address = null) { return parent::setBillingAddress($address); } @@ -59,7 +62,7 @@ public function setState($state) return parent::setState($state); } - public function setPayment(\Magento\Sales\Api\Data\OrderPaymentInterface $payment = null) + public function setPayment(?OrderPaymentInterface $payment = null) { return parent::setPayment($payment); } @@ -99,7 +102,7 @@ public function getExtensionAttributes() return parent::getExtensionAttributes(); } - public function setExtensionAttributes(\Magento\Sales\Api\Data\OrderExtensionInterface $extensionAttributes) + public function setExtensionAttributes(OrderExtensionInterface $extensionAttributes) { return parent::setExtensionAttributes($extensionAttributes); } @@ -749,7 +752,7 @@ public function getXForwardedFor() return parent::getXForwardedFor(); } - public function setStatusHistories(array $statusHistories = null) + public function setStatusHistories(?array $statusHistories = null) { return parent::setStatusHistories($statusHistories); } diff --git a/Model/ResourceModel/Event.php b/Model/ResourceModel/Event.php index 202b004..a7b7242 100644 --- a/Model/ResourceModel/Event.php +++ b/Model/ResourceModel/Event.php @@ -8,14 +8,18 @@ namespace Mygento\Base\Model\ResourceModel; -class Event extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; + +class Event extends AbstractDb { + public const TABLE_NAME = 'mygento_base_event'; + public const TABLE_PRIMARY_KEY = 'id'; + /** * Initialize resource model - * @return void */ protected function _construct() { - $this->_init('mygento_base_event', 'id'); + $this->_init(self::TABLE_NAME, self::TABLE_PRIMARY_KEY); } } diff --git a/Model/ResourceModel/Event/Collection.php b/Model/ResourceModel/Event/Collection.php index c547478..b1f6436 100644 --- a/Model/ResourceModel/Event/Collection.php +++ b/Model/ResourceModel/Event/Collection.php @@ -8,10 +8,14 @@ namespace Mygento\Base\Model\ResourceModel\Event; -class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; +use Mygento\Base\Model\Event; +use Mygento\Base\Model\ResourceModel\Event as EventResource; + +class Collection extends AbstractCollection { /** @var string */ - protected $_idFieldName = 'id'; + protected $_idFieldName = EventResource::TABLE_PRIMARY_KEY; /** * Define resource model @@ -19,8 +23,8 @@ class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\Ab protected function _construct() { $this->_init( - \Mygento\Base\Model\Event::class, - \Mygento\Base\Model\ResourceModel\Event::class, + Event::class, + EventResource::class, ); } } diff --git a/Model/ResourceModel/Event/Grid/Collection.php b/Model/ResourceModel/Event/Grid/Collection.php index 83b987f..44a8899 100644 --- a/Model/ResourceModel/Event/Grid/Collection.php +++ b/Model/ResourceModel/Event/Grid/Collection.php @@ -8,41 +8,36 @@ namespace Mygento\Base\Model\ResourceModel\Event\Grid; +use Magento\Framework\Api\Search\AggregationInterface; use Magento\Framework\Api\Search\SearchResultInterface; use Magento\Framework\Api\SearchCriteriaInterface; +use Magento\Framework\Data\Collection\Db\FetchStrategyInterface; +use Magento\Framework\Data\Collection\EntityFactoryInterface; +use Magento\Framework\DB\Adapter\AdapterInterface; +use Magento\Framework\Event\ManagerInterface; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; use Mygento\Base\Model\ResourceModel\Event\Collection as ParentCollection; +use Psr\Log\LoggerInterface; class Collection extends ParentCollection implements SearchResultInterface { - /** @var \Magento\Framework\Api\Search\AggregationInterface */ - protected $aggregations; + protected AggregationInterface $aggregations; /** - * @param \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory - * @param \Psr\Log\LoggerInterface $logger - * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy - * @param \Magento\Framework\Event\ManagerInterface $eventManager - * @param string $mainTable - * @param string $eventPrefix - * @param string $eventObject - * @param string $resourceModel - * @param string $model - * @param \Magento\Framework\DB\Adapter\AdapterInterface|string|null $connection - * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory, - \Psr\Log\LoggerInterface $logger, - \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, - \Magento\Framework\Event\ManagerInterface $eventManager, + EntityFactoryInterface $entityFactory, + LoggerInterface $logger, + FetchStrategyInterface $fetchStrategy, + ManagerInterface $eventManager, string $mainTable, string $eventPrefix, string $eventObject, string $resourceModel, string $model = \Magento\Framework\View\Element\UiComponent\DataProvider\Document::class, - \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null, + ?AdapterInterface $connection = null, + ?AbstractDb $resource = null, ) { parent::__construct( $entityFactory, @@ -90,7 +85,7 @@ public function getSearchCriteria() * @return $this * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function setSearchCriteria(SearchCriteriaInterface $searchCriteria = null) + public function setSearchCriteria(?SearchCriteriaInterface $searchCriteria = null) { return $this; } @@ -118,7 +113,7 @@ public function setTotalCount($totalCount) * @return $this * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function setItems(array $items = null) + public function setItems(?array $items = null) { return $this; } diff --git a/Model/Source/Loglevel.php b/Model/Source/Loglevel.php index 721a211..e66fcf9 100644 --- a/Model/Source/Loglevel.php +++ b/Model/Source/Loglevel.php @@ -8,18 +8,21 @@ namespace Mygento\Base\Model\Source; +use Monolog\Level; + class Loglevel implements \Magento\Framework\Data\OptionSourceInterface { /** * Return array of options as value-label pairs, eg. value => label * - * @return array + * @return array */ - public function toOptionArray() + public function toOptionArray(): array { $levels = []; - foreach (\Monolog\Logger::getLevels() as $level => $value) { - $levels[] = ['value' => $value, 'label' => $level]; + $list = array_combine(Level::NAMES, Level::VALUES); + foreach ($list as $level => $value) { + $levels[$value] = $level; } return $levels; diff --git a/Test/Extra/TableOutput.php b/Test/Extra/TableOutput.php index 61ec499..c0ea05c 100644 --- a/Test/Extra/TableOutput.php +++ b/Test/Extra/TableOutput.php @@ -47,7 +47,7 @@ public static function dump($headers, $rows = null) $table->render(); } - public static function dumpResult(Result $result, string $title = null) + public static function dumpResult(Result $result, ?string $title = null) { $output = new StreamOutput(fopen('php://stdout', 'w')); $table = new SymfonyTable($output); @@ -106,7 +106,7 @@ public static function dumpResult(Result $result, string $title = null) $table->render(); } - public static function dumpOrder(OrderInterface $order, string $title = null) + public static function dumpOrder(OrderInterface $order, ?string $title = null) { self::showOrderLegend(); diff --git a/Test/Unit/DiscountHelper/GeneralTestCase.php b/Test/Unit/DiscountHelper/GeneralTestCase.php index 9c6d963..bf17f21 100644 --- a/Test/Unit/DiscountHelper/GeneralTestCase.php +++ b/Test/Unit/DiscountHelper/GeneralTestCase.php @@ -496,7 +496,7 @@ public function getOrders() */ protected static function getExpected() {} - protected function onNotSuccessfulTest(\Throwable $e): void + protected function onNotSuccessfulTest(\Throwable $e): never { //beautify output echo "\033[1;31m"; // light red diff --git a/Test/Unit/Facade/AbstractFacadeTest.php b/Test/Unit/Facade/AbstractTestFacade.php similarity index 97% rename from Test/Unit/Facade/AbstractFacadeTest.php rename to Test/Unit/Facade/AbstractTestFacade.php index d0def60..149499e 100644 --- a/Test/Unit/Facade/AbstractFacadeTest.php +++ b/Test/Unit/Facade/AbstractTestFacade.php @@ -15,7 +15,7 @@ use Mygento\Base\Test\Extra\GetRecalculateResultFactory; use PHPUnit\Framework\TestCase; -abstract class AbstractFacadeTest extends TestCase +abstract class AbstractTestFacade extends TestCase { /** * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager diff --git a/Test/Unit/Facade/AllHandlers/StepByStepBundleTest.php b/Test/Unit/Facade/AllHandlers/StepByStepBundleTest.php index 397b90d..d6e59e3 100644 --- a/Test/Unit/Facade/AllHandlers/StepByStepBundleTest.php +++ b/Test/Unit/Facade/AllHandlers/StepByStepBundleTest.php @@ -21,9 +21,9 @@ use Mygento\Base\Test\Extra\ExpectedMaker; use Mygento\Base\Test\Extra\TableOutput; use Mygento\Base\Test\Extra\TestItemSkipper; -use Mygento\Base\Test\Unit\Facade\AbstractFacadeTest; +use Mygento\Base\Test\Unit\Facade\AbstractTestFacade; -class StepByStepBundleTest extends AbstractFacadeTest +class StepByStepBundleTest extends AbstractTestFacade { /** * @dataProvider \Mygento\Base\Test\Unit\Facade\AllHandlers\StepByStepBundleDataProvider::provide diff --git a/Test/Unit/Facade/AllHandlersTest.php b/Test/Unit/Facade/AllHandlersTest.php index 416abfc..1e1bd9e 100644 --- a/Test/Unit/Facade/AllHandlersTest.php +++ b/Test/Unit/Facade/AllHandlersTest.php @@ -20,7 +20,7 @@ use Mygento\Base\Test\Extra\TableOutput; use Mygento\Base\Test\Extra\TestItemSkipper; -class AllHandlersTest extends AbstractFacadeTest +class AllHandlersTest extends AbstractTestFacade { /** * @dataProvider \Mygento\Base\Test\Unit\Facade\AllHandlersDataProvider::dataProvider diff --git a/Test/Unit/Facade/Handlers/AddChildrenOfBundleHandlerTest.php b/Test/Unit/Facade/Handlers/AddChildrenOfBundleHandlerTest.php index 15c6465..485df1f 100644 --- a/Test/Unit/Facade/Handlers/AddChildrenOfBundleHandlerTest.php +++ b/Test/Unit/Facade/Handlers/AddChildrenOfBundleHandlerTest.php @@ -13,9 +13,9 @@ use Mygento\Base\Service\RecalculatorFacade; use Mygento\Base\Test\Extra\ExpectedMaker; use Mygento\Base\Test\Extra\TableOutput; -use Mygento\Base\Test\Unit\Facade\AbstractFacadeTest; +use Mygento\Base\Test\Unit\Facade\AbstractTestFacade; -class AddChildrenOfBundleHandlerTest extends AbstractFacadeTest +class AddChildrenOfBundleHandlerTest extends AbstractTestFacade { /** * @dataProvider \Mygento\Base\Test\Unit\Facade\Handlers\DataProvider\BundlesDataProvider::dataProviderBundles diff --git a/Test/Unit/Facade/Handlers/AddExtraDiscountsHandlerTest.php b/Test/Unit/Facade/Handlers/AddExtraDiscountsHandlerTest.php index 9956714..9b67fdb 100644 --- a/Test/Unit/Facade/Handlers/AddExtraDiscountsHandlerTest.php +++ b/Test/Unit/Facade/Handlers/AddExtraDiscountsHandlerTest.php @@ -12,9 +12,9 @@ use Mygento\Base\Service\PostHandlers\AddExtraDiscounts; use Mygento\Base\Service\RecalculatorFacade; use Mygento\Base\Test\Extra\ExpectedMaker; -use Mygento\Base\Test\Unit\Facade\AbstractFacadeTest; +use Mygento\Base\Test\Unit\Facade\AbstractTestFacade; -class AddExtraDiscountsHandlerTest extends AbstractFacadeTest +class AddExtraDiscountsHandlerTest extends AbstractTestFacade { /** * @dataProvider \Mygento\Base\Test\Unit\Facade\Handlers\DataProvider\ExtraDiscountsDataProvider::dataProvider diff --git a/Test/Unit/Facade/Handlers/SkipItemsHandlerTest.php b/Test/Unit/Facade/Handlers/SkipItemsHandlerTest.php index 88ca976..ed8c1c7 100644 --- a/Test/Unit/Facade/Handlers/SkipItemsHandlerTest.php +++ b/Test/Unit/Facade/Handlers/SkipItemsHandlerTest.php @@ -15,9 +15,9 @@ use Mygento\Base\Test\Extra\ExpectedMaker; use Mygento\Base\Test\Extra\TableOutput; use Mygento\Base\Test\Extra\TestItemSkipper; -use Mygento\Base\Test\Unit\Facade\AbstractFacadeTest; +use Mygento\Base\Test\Unit\Facade\AbstractTestFacade; -class SkipItemsHandlerTest extends AbstractFacadeTest +class SkipItemsHandlerTest extends AbstractTestFacade { /** * @dataProvider \Mygento\Base\Test\Unit\Facade\Handlers\DataProvider\SkipItemsDataProvider::dataProvider() diff --git a/Test/Unit/TaxHelper/DiscountAmountInclTaxTest.php b/Test/Unit/TaxHelper/DiscountAmountInclTaxTest.php index e6f2c6d..3ef9b12 100644 --- a/Test/Unit/TaxHelper/DiscountAmountInclTaxTest.php +++ b/Test/Unit/TaxHelper/DiscountAmountInclTaxTest.php @@ -127,7 +127,7 @@ protected static function getExpected() ]; } - protected function onNotSuccessfulTest(\Throwable $e): void + protected function onNotSuccessfulTest(\Throwable $e): never { //beautify output echo "\033[1;31m"; // light red diff --git a/Test/framework/bootstrap.php b/Test/framework/bootstrap.php index 96bc247..2c16939 100644 --- a/Test/framework/bootstrap.php +++ b/Test/framework/bootstrap.php @@ -43,7 +43,6 @@ function ($errNo, $errStr, $errFile, $errLine) { E_USER_ERROR => 'User Error', E_USER_WARNING => 'User Warning', E_USER_NOTICE => 'User Notice', - E_STRICT => 'Strict', E_RECOVERABLE_ERROR => 'Recoverable Error', E_DEPRECATED => 'Deprecated', E_USER_DEPRECATED => 'User Deprecated', diff --git a/composer.json b/composer.json index 3f38c94..d02b99c 100644 --- a/composer.json +++ b/composer.json @@ -22,15 +22,15 @@ "mygento" ], "require": { - "php": ">=8.0.0", + "php": ">=8.2.0", "ext-bcmath": "*", "magento/framework": "103.*", "magento/module-sales": "103.*", - "monolog/monolog": "<3" + "monolog/monolog": "^3" }, "require-dev": { "mygento/coding-standard": "~2.14.0", - "phpunit/phpunit": "~9.5.0" + "phpunit/phpunit": "^10.5" }, "autoload": { "files": [ diff --git a/etc/db_schema.xml b/etc/db_schema.xml index 2cfbf07..65b41a6 100644 --- a/etc/db_schema.xml +++ b/etc/db_schema.xml @@ -1,14 +1,14 @@ - - +
+ - + - - + + diff --git a/etc/di.xml b/etc/di.xml index 8c18651..78cd733 100644 --- a/etc/di.xml +++ b/etc/di.xml @@ -1,10 +1,4 @@ - @@ -43,7 +37,7 @@ - + @@ -51,6 +45,20 @@ + + + + Magento\Framework\Api\SearchCriteria\CollectionProcessor\FilterProcessor + Magento\Framework\Api\SearchCriteria\CollectionProcessor\SortingProcessor + Magento\Framework\Api\SearchCriteria\CollectionProcessor\PaginationProcessor + + + + + + Mygento\Base\Model\SearchCriteria\EventCollectionProcessor + + diff --git a/grumphp.yml b/grumphp.yml index 57fe3d7..92b5c80 100644 --- a/grumphp.yml +++ b/grumphp.yml @@ -21,4 +21,5 @@ grumphp: phpstan: autoload_file: 'vendor/mygento/coding-standard/stan/autoload.php' ignore_patterns: ['Test'] + memory_limit: '-1' level: 1 diff --git a/view/adminhtml/ui_component/base_event_listing.xml b/view/adminhtml/ui_component/base_event_listing.xml index 2a7f33e..691762e 100644 --- a/view/adminhtml/ui_component/base_event_listing.xml +++ b/view/adminhtml/ui_component/base_event_listing.xml @@ -63,6 +63,9 @@ text text + + true + @@ -73,6 +76,9 @@ text text + + true + @@ -83,6 +89,11 @@ select select + + true + true + true + @@ -94,6 +105,9 @@ text text + + true + @@ -104,6 +118,9 @@ date date + + true +