22
22
use craft \helpers \UrlHelper ;
23
23
use lhs \elasticsearch \Elasticsearch as ElasticsearchPlugin ;
24
24
use lhs \elasticsearch \exceptions \IndexElementException ;
25
+ use lhs \elasticsearch \jobs \IndexElementJob ;
25
26
use lhs \elasticsearch \records \ElasticsearchRecord ;
27
+ use yii \db \Query ;
26
28
27
29
/**
28
30
*/
@@ -94,6 +96,7 @@ public function indexElement(Element $element): ?string
94
96
95
97
/**
96
98
* Removes an entry from the Elasticsearch index
99
+ *
97
100
* @param Element $element The entry to delete
98
101
* @return int The number of rows deleted
99
102
* @throws \yii\elasticsearch\Exception If the entry to be deleted cannot be found
@@ -102,11 +105,46 @@ public function deleteElement(Element $element): int
102
105
{
103
106
Craft::info ("Deleting entry # {$ element ->id }: {$ element ->url }" , __METHOD__ );
104
107
108
+ $ this ->deleteElementFromQueue ($ element );
109
+
105
110
ElasticsearchRecord::$ siteId = $ element ->siteId ;
106
111
107
112
return ElasticsearchRecord::deleteAll (['_id ' => $ element ->id ]);
108
113
}
109
114
115
+ /**
116
+ * Removes all entries for an element from queue
117
+ * @param Element $element
118
+ * @return void
119
+ * @throws \yii\base\InvalidConfigException
120
+ */
121
+ protected function deleteElementFromQueue (Element $ element ): void
122
+ {
123
+ $ job = new IndexElementJob (
124
+ [
125
+ 'siteId ' => $ element ->getSite ()->id ,
126
+ 'elementId ' => $ element ->id ,
127
+ 'type ' => get_class ($ element ),
128
+ ]
129
+ );
130
+
131
+ $ queueService = Craft::$ app ->getQueue ();
132
+ $ queueClass = get_class ($ queueService );
133
+
134
+ $ entries = (new Query ())
135
+ ->from ($ queueClass ::TABLE )
136
+ ->where ([
137
+ 'job ' => Craft::$ app ->getQueue ()->serializer ->serialize ($ job )
138
+ ])->all ();
139
+
140
+ foreach ($ entries as $ entry ) {
141
+ if (isset ($ entry ['id ' ])) {
142
+ $ methodName = $ queueService instanceof \yii \queue \db \Queue ? 'remove ' : 'release ' ;
143
+ $ queueService ->$ methodName ($ entry ['id ' ]);
144
+ }
145
+ }
146
+ }
147
+
110
148
/**
111
149
* Get the reason why an entry should NOT be reindex.
112
150
* @param Element $element The element to consider for reindexing
0 commit comments