11<?php namespace ChannelEngine \Magento2 \Observer ;
22
3+ use Magento \Framework \Event \Observer ;
34use Magento \Framework \Event \ObserverInterface ;
45use Magento \Catalog \Model \ProductRepository ;
6+ use Magento \Framework \Stdlib \DateTime \DateTime ;
7+ use Psr \Log \LoggerInterface ;
8+ use ChannelEngine \Magento2 \Helper \ProductHelper ;
59
610class StockItemObserver implements ObserverInterface
711{
812 /**
913 * @var ProductRepository
1014 */
11- private $ productRepository ;
15+ private ProductRepository $ productRepository ;
16+ /**
17+ * @var LoggerInterface
18+ */
19+ private LoggerInterface $ logger ;
20+ /**
21+ * @var DateTime
22+ */
23+ private DateTime $ dateTime ;
24+ /**
25+ * @var ProductHelper
26+ */
27+ private ProductHelper $ productHelper ;
1228
13- public function __construct (ProductRepository $ productRepository )
29+ /**
30+ * @param ProductRepository $productRepository
31+ * @param LoggerInterface $logger
32+ * @param DateTime $dateTime
33+ * @param ProductHelper $productHelper
34+ */
35+ public function __construct (
36+ ProductRepository $ productRepository ,
37+ LoggerInterface $ logger ,
38+ DateTime $ dateTime ,
39+ ProductHelper $ productHelper
40+ )
1441 {
1542 $ this ->productRepository = $ productRepository ;
43+ $ this ->logger = $ logger ;
44+ $ this ->dateTime = $ dateTime ;
45+ $ this ->productHelper = $ productHelper ;
1646 }
1747
18- public function execute (\Magento \Framework \Event \Observer $ observer )
48+ /**
49+ * @param Observer $observer
50+ * @return void
51+ */
52+ public function execute (Observer $ observer )
1953 {
20- $ stockItem = $ observer ->getItem ();
21- $ productId = $ stockItem ->getProductId ();
22- $ product = $ this ->productRepository ->getById ($ productId );
23- $ date = date ('Y-m-d H:i:s ' );
24- $ attr = 'ce_updated_at ' ;
25-
26- // Set both: https://magento.stackexchange.com/a/229280
27- $ product ->setData ($ attr , $ date );
28- $ product ->setCustomAttribute ($ attr , $ date );
29-
30- // Save only the attribute, to prevent cyclic events (when already performing a product save)
31- $ product ->getResource ()->saveAttribute ($ product , $ attr );
54+ try {
55+ $ stockItem = $ observer ->getItem ();
56+ $ productId = $ stockItem ->getProductId ();
57+ $ product = $ this ->productRepository ->getById ($ productId );
58+
59+ if ($ this ->productHelper ->wasUpdatedRecently ($ product )) {
60+ return ;
61+ }
62+
63+ $ date = $ this ->dateTime ->gmtDate ();
64+ $ attr = 'ce_updated_at ' ;
65+
66+ // Set both: https://magento.stackexchange.com/a/229280
67+ $ product ->setData ($ attr , $ date );
68+ $ product ->setCustomAttribute ($ attr , $ date );
69+
70+ // Save only the attribute, to prevent cyclic events (when already performing a product save)
71+ $ product ->getResource ()->saveAttribute ($ product , $ attr );
72+ } catch (\Exception $ e ) {
73+ $ this ->logger ->error ($ e ->getMessage ());
74+ }
3275 }
33- }
76+ }
0 commit comments