You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

85 lines
2.3 KiB

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _
from cms.plugin_pool import plugin_pool
from .segment_plugin_base import SegmentPluginBase
from ..models import (
AuthenticatedSegmentPluginModel,
CookieSegmentPluginModel,
FallbackSegmentPluginModel,
SwitchSegmentPluginModel,
)
class FallbackSegmentPlugin(SegmentPluginBase):
'''
This segment plugin represents a degenerate case where the segment
always matches.
'''
model = FallbackSegmentPluginModel
name = _('Fallback')
# It doesn't make much sense to override this one...
allow_overrides = False
def is_context_appropriate(self, context, instance):
return True
plugin_pool.register_plugin(FallbackSegmentPlugin)
class SwitchSegmentPlugin(SegmentPluginBase):
'''
This switch segmentation plugin allows the operator to turn the segment ON
or OFF statically and independently from the context. This is primarily
useful for testing.
'''
model = SwitchSegmentPluginModel
name = _('Segment by switch')
# It doesn't make much sense to override this one...
allow_overrides = False
def is_context_appropriate(self, context, instance):
return instance.on_off
plugin_pool.register_plugin(SwitchSegmentPlugin)
class CookieSegmentPlugin(SegmentPluginBase):
'''
This is a segmentation plugin that renders output on the condition that a
cookie with ``cookie_key`` is present and has the value ``cookie_value``.
'''
model = CookieSegmentPluginModel
name = _('Segment by cookie')
def is_context_appropriate(self, context, instance):
request = context.get('request')
value = request.COOKIES.get(instance.cookie_key)
return (value == instance.cookie_value)
plugin_pool.register_plugin(CookieSegmentPlugin)
class AuthenticatedSegmentPlugin(SegmentPluginBase):
'''
This plugin allows segmentation based on the authentication/authorization
status of the visitor.
'''
model = AuthenticatedSegmentPluginModel
name = _('Segment by auth')
def is_context_appropriate(self, context, instance):
request = context.get('request')
return request and request.user and request.user.is_authenticated()
plugin_pool.register_plugin(AuthenticatedSegmentPlugin)