@@ -172,6 +172,9 @@ class SegmentVisit(models.Model):
172
172
max_length = 64 , editable = False , null = True , db_index = True )
173
173
visit_date = models .DateTimeField (auto_now_add = True )
174
174
175
+ class Meta :
176
+ ordering = ['-visit_date' ]
177
+
175
178
@classmethod
176
179
def create_segment_visit (cls , page , request , metadata = None ):
177
180
"""Create a segment visit object.
@@ -185,37 +188,39 @@ def create_segment_visit(cls, page, request, metadata=None):
185
188
:rtype: wagtail_personalisation.models.SegmentVisit
186
189
"""
187
190
from wagtail_personalisation .adapters import get_segment_adapter
191
+ wxp_settings = PersonalisationSettings .for_site (request .site )
192
+
193
+ if wxp_settings .detailed_visits :
194
+ adapter = get_segment_adapter (request )
195
+ user_segments = adapter .get_segments ()
196
+
197
+ if not metadata :
198
+ metadata = page .personalisation_metadata
199
+ metadata = metadata .metadata_for_segments (user_segments )
200
+
201
+ user = request .user if request .user .is_authenticated else None
202
+ visit = cls .objects .create (
203
+ user = user ,
204
+ page = page ,
205
+ served_segment = metadata .first ().segment ,
206
+ served_variant = metadata .first ().variant ,
207
+ session = request .session .session_key
208
+ )
188
209
189
- adapter = get_segment_adapter (request )
190
- user_segments = adapter .get_segments ()
191
-
192
- if not metadata :
193
- metadata = page .personalisation_metadata
194
- metadata = metadata .metadata_for_segments (user_segments )
195
-
196
- user = request .user if request .user .is_authenticated () else None
197
- visit = cls .objects .create (
198
- user = user ,
199
- page = page ,
200
- served_segment = metadata .first ().segment ,
201
- served_variant = metadata .first ().variant ,
202
- session = request .session .session_key
203
- )
210
+ for segment in user_segments :
211
+ rules = [
212
+ rule for rule in segment .get_rules () if rule .unique_encoded_name
213
+ in request .matched_rules
214
+ ]
204
215
205
- for segment in user_segments :
206
- rules = [
207
- rule for rule in segment .get_rules () if rule .unique_encoded_name
208
- in request .matched_rules
209
- ]
210
-
211
- SegmentVisitMetadata .objects .create (
212
- visit = visit ,
213
- segment = segment ,
214
- matched_rules = ',' .join (
215
- rule .unique_encoded_name for rule in rules )
216
- )
216
+ SegmentVisitMetadata .objects .create (
217
+ visit = visit ,
218
+ segment = segment ,
219
+ matched_rules = ',' .join (
220
+ rule .unique_encoded_name for rule in rules )
221
+ )
217
222
218
- return visit
223
+ return visit
219
224
220
225
@classmethod
221
226
def reverse_match (cls , user ):
0 commit comments