@@ -172,6 +172,9 @@ class SegmentVisit(models.Model):
172172 max_length = 64 , editable = False , null = True , db_index = True )
173173 visit_date = models .DateTimeField (auto_now_add = True )
174174
175+ class Meta :
176+ ordering = ['-visit_date' ]
177+
175178 @classmethod
176179 def create_segment_visit (cls , page , request , metadata = None ):
177180 """Create a segment visit object.
@@ -185,37 +188,39 @@ def create_segment_visit(cls, page, request, metadata=None):
185188 :rtype: wagtail_personalisation.models.SegmentVisit
186189 """
187190 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+ )
188209
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+ ]
204215
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+ )
217222
218- return visit
223+ return visit
219224
220225 @classmethod
221226 def reverse_match (cls , user ):
0 commit comments