Collection.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Security\Model\ResourceModel\PasswordResetRequestEvent;
  7. /**
  8. * Password reset request event collection
  9. *
  10. * @api
  11. * @since 100.1.0
  12. */
  13. class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
  14. {
  15. /**
  16. * @var string
  17. * @since 100.1.0
  18. */
  19. protected $_idFieldName = 'id';
  20. /**
  21. * @var \Magento\Framework\Stdlib\DateTime\DateTime
  22. * @since 100.1.0
  23. */
  24. protected $dateTime;
  25. /**
  26. * @param \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory
  27. * @param \Psr\Log\LoggerInterface $logger
  28. * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
  29. * @param \Magento\Framework\Event\ManagerInterface $eventManager
  30. * @param \Magento\Framework\Stdlib\DateTime\DateTime $dateTime
  31. * @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
  32. * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource
  33. */
  34. public function __construct(
  35. \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
  36. \Psr\Log\LoggerInterface $logger,
  37. \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
  38. \Magento\Framework\Event\ManagerInterface $eventManager,
  39. \Magento\Framework\Stdlib\DateTime\DateTime $dateTime,
  40. \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
  41. \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
  42. ) {
  43. parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
  44. $this->dateTime = $dateTime;
  45. }
  46. /**
  47. * Define resource model
  48. *
  49. * @return void
  50. * @since 100.1.0
  51. */
  52. protected function _construct()
  53. {
  54. $this->_init(
  55. \Magento\Security\Model\PasswordResetRequestEvent::class,
  56. \Magento\Security\Model\ResourceModel\PasswordResetRequestEvent::class
  57. );
  58. }
  59. /**
  60. * Filter by account reference
  61. *
  62. * @param string $reference
  63. * @return $this
  64. * @since 100.1.0
  65. */
  66. public function filterByAccountReference($reference)
  67. {
  68. $this->addFieldToFilter('account_reference', $reference);
  69. return $this;
  70. }
  71. /**
  72. * Filter by IP
  73. *
  74. * @param string $ip
  75. * @return $this
  76. * @since 100.1.0
  77. */
  78. public function filterByIp($ip)
  79. {
  80. $this->addFieldToFilter('ip', $ip);
  81. return $this;
  82. }
  83. /**
  84. * Filter by request type
  85. *
  86. * @param int $requestType
  87. * @return $this
  88. * @since 100.1.0
  89. */
  90. public function filterByRequestType($requestType)
  91. {
  92. $this->addFieldToFilter('request_type', $requestType);
  93. return $this;
  94. }
  95. /**
  96. * Filter by lifetime
  97. *
  98. * @param int $lifetime
  99. * @return $this
  100. * @since 100.1.0
  101. */
  102. public function filterByLifetime($lifetime)
  103. {
  104. $connection = $this->getConnection();
  105. $gmtTimestamp = $this->dateTime->gmtTimestamp();
  106. $this->addFieldToFilter(
  107. 'created_at',
  108. ['gt' => $connection->formatDate($gmtTimestamp - $lifetime)]
  109. );
  110. return $this;
  111. }
  112. /**
  113. * Filter last item
  114. *
  115. * @return $this
  116. * @since 100.1.0
  117. */
  118. public function filterLastItem()
  119. {
  120. $this->addOrder('created_at', self::SORT_ORDER_DESC)->getSelect()->limit(1);
  121. return $this;
  122. }
  123. /**
  124. * Filter by IP or by account reference
  125. *
  126. * @param int $ip
  127. * @param string $accountReference
  128. * @return $this
  129. * @since 100.1.0
  130. */
  131. public function filterByIpOrAccountReference($ip, $accountReference)
  132. {
  133. $this->addFieldToFilter(
  134. ['ip', 'account_reference'],
  135. [
  136. ['eq' => $ip],
  137. ['eq' => $accountReference],
  138. ]
  139. );
  140. return $this;
  141. }
  142. /**
  143. * Delete records older than some value
  144. *
  145. * @param int $timestamp
  146. * @return $this
  147. * @since 100.1.0
  148. */
  149. public function deleteRecordsOlderThen($timestamp)
  150. {
  151. $this->getResource()->deleteRecordsOlderThen((int)$timestamp);
  152. return $this;
  153. }
  154. }