8

work in progress

Signed-off-by: Jasper Berghoef <jasper.berghoef@gmail.com>
This commit is contained in:
Jasper Berghoef
2017-01-11 10:38:08 +01:00
committed by Boris Besemer
parent b5d0a657ed
commit d1528f1ed4
3 changed files with 56 additions and 38 deletions

View File

@@ -37,6 +37,13 @@ class AbstractBaseRule(models.Model):
def __str__(self):
return "Abstract segmentation rule"
def encoded_name(self):
"""Returns a string with a slug for the rule"""
return slugify(self.__str__().lower())
def description(self):
return "Abstract segmentation rule"
class Meta:
abstract = True
@@ -67,6 +74,18 @@ class TimeRule(AbstractBaseRule):
def __str__(self):
return _('Time Rule')
def description(self):
description = {
'title': _('These users visit between'),
'value': _('{} and {}'),
}
description['value'] = description['value'].format(
self.start_time,
self.end_time)
return description
@python_2_unicode_compatible
class DayRule(AbstractBaseRule):
@@ -115,6 +134,20 @@ class DayRule(AbstractBaseRule):
def __str__(self):
return _('Day Rule')
def description(self):
description = {
'title': _('These users visit on'),
'value': _('{}'),
}
days = [self.mon]
description['value'] = description['value'].format(
self.start_time,
self.end_time)
return description
@python_2_unicode_compatible
class ReferralRule(AbstractBaseRule):
@@ -326,6 +359,13 @@ class Segment(ClusterableModel):
"""Returns a string with a slug for the segment"""
return slugify(self.name.lower())
def get_rules(self):
rules = AbstractBaseRule.__subclasses__()
segment_rules = []
for rule in rules:
segment_rules += rule.objects.filter(segment=self)
return segment_rules
def check_status_change(sender, instance, *args, **kwargs):
"""Check if the status has changed. Alter dates accordingly."""

View File

@@ -35,42 +35,13 @@
</ul>
<ul class="inspect segment_rules">
{% for rule in segment.personalisation_timerule_related.all %}
<li class="time_rule">
These users visit between
<span>{{ rule.start_time }} and {{ rule.end_time }}</span>
{% for rule in segment.get_rules %}
<li class="{{ rule.encoded_name }}">
{{ rule.description.title }}
<span>{{ rule.description.value }}</span>
</li>
{% endfor %}
{% for rule in segment.personalisation_referralrule_related.all %}
<li class="referral_rule">
These visits originate from
<pre>{{ rule.regex_string }}</pre>
</li>
{% endfor %}
{% for rule in segment.personalisation_visitcountrule_related.all %}
<li class="visit_count_rule">
These users visited {{ rule.counted_page }}
<span>{{ rule.get_operator_display }} {{ rule.count }} times</span>
</li>
{% endfor %}
{% for rule in segment.personalisation_queryrule_related.all %}
<li class="query_rule">
These users used a url with the query
<pre>?{{ rule.parameter }}={{ rule.value }}</pre>
</li>
{% endfor %}
<li class="persistent_state {{ segment.persistent|yesno:"persistent,fleeting" }}">
{% trans "The persistence of this segment is" %}
{% if segment.persistent %}
<span title="{% trans "This segment persists in between visits" %}">{% trans "Persistent" %}</span>
{% else %}
<span title="{% trans "This segment is reevaluated on every visit" %}">{% trans "Fleeting" %}</span>
{% endif %}
</li>
</ul>
</div>

View File

@@ -6,15 +6,17 @@ from django.conf.urls import include, url
from django.shortcuts import reverse
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
from wagtail.contrib.modeladmin.views import IndexView
from wagtail.wagtailadmin.widgets import Button, ButtonWithDropdownFromHook
from wagtail.wagtailcore import hooks
from personalisation import admin_urls
from personalisation.app_settings import segments_adapter
from personalisation.models import PersonalisablePage, Segment
from personalisation.utils import impersonate_other_page
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
from wagtail.wagtailadmin.widgets import Button, ButtonWithDropdownFromHook
from wagtail.wagtailcore import hooks
logger = logging.getLogger()
logger = logging.getLogger(__name__)
@hooks.register('register_admin_urls')
@@ -28,9 +30,14 @@ def register_admin_urls():
]
class SegmentModelIndexView(IndexView):
pass
class SegmentModelAdmin(ModelAdmin):
"""The base model for the Segments administration interface."""
model = Segment
index_view_class = SegmentModelIndexView
menu_icon = 'group'
add_to_settings_menu = False
list_display = ('status', 'name', 'create_date', 'edit_date')