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