Commit 867d2fca authored by Michal Čihař's avatar Michal Čihař

Support for Weblate self advertisement

parent ae9f4828
......@@ -22,22 +22,69 @@ import random
from django.utils.translation import ugettext as _, ugettext_lazy
from django.db import models
from django.utils import timezone
from weblate import appsettings
DONATE = 'http://weblate.org/donate/'
GITTIP = 'https://www.gittip.com/nijel/'
class AdvertisementManager(models.Manager):
def get_advertisement(self, placement):
'''
Returns random advertisement for given placement.
'''
now = timezone.now()
base = self.filter(
placement=placement,
date_start__lt=now,
date_end__gt=now
date_start__lte=now,
date_end__gte=now
)
count = base.count()
if count == 0:
return None
return self.fallback_advertisement(placement)
offset = random.randint(0, count - 1)
return base[offset]
def fallback_advertisement(self, placement):
'''
Returns fallback advertisement.
'''
if not appsettings.SELF_ADVERTISEMENT:
return None
now = timezone.now()
if placement == Advertisement.PLACEMENT_MAIL_TEXT:
text = random.choice([
_('Donate to Weblate at {0}').format(DONATE),
_('Support Weblate at {0}').format(GITTIP),
])
return Advertisement(
date_start=now,
date_end=now,
placement=placement,
text=text
)
elif placement == Advertisement.PLACEMENT_MAIL_TEXT:
text = random.choice([
'<a href="{0}">{1}</a>'.format(
_('Donate to Weblate'),
DONATE,
),
'<a href="{0}">{1}</a>'.format(
_('Support Weblate using GitTip'),
GITTIP,
),
])
return Advertisement(
date_start=now,
date_end=now,
placement=placement,
text=text
)
return None
class Advertisement(models.Model):
PLACEMENT_MAIL_TEXT = 1
......@@ -72,6 +119,8 @@ class Advertisement(models.Model):
blank=True
)
objects = AdvertisementManager()
class Meta(object):
app_label = 'trans'
index_together = [
......
......@@ -53,3 +53,4 @@ from trans.tests.test_naturaldate import *
from trans.tests.test_remote import *
from trans.tests.test_selenium import *
from trans.tests.test_debug import *
from trans.tests.test_advertisement import *
# -*- coding: utf-8 -*-
#
# Copyright © 2012 - 2013 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <http://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
"""
Tests for translation models.
"""
from django.test import TestCase
from django.utils import timezone
from trans.models import Advertisement
from weblate import appsettings
import datetime
class AdvertisementTest(TestCase):
def test_none(self):
appsettings.SELF_ADVERTISEMENT = False
adv = Advertisement.objects.get_advertisement(
Advertisement.PLACEMENT_MAIL_TEXT
)
self.assertIsNone(adv)
def test_self(self):
appsettings.SELF_ADVERTISEMENT = True
adv = Advertisement.objects.get_advertisement(
Advertisement.PLACEMENT_MAIL_TEXT
)
self.assertTrue('Weblate' in adv.text)
def test_existing(self):
appsettings.SELF_ADVERTISEMENT = False
adv_created = Advertisement.objects.create(
placement=Advertisement.PLACEMENT_MAIL_TEXT,
date_start=timezone.now(),
date_end=timezone.now(),
text='Test ADV'
)
adv = Advertisement.objects.get_advertisement(
Advertisement.PLACEMENT_MAIL_TEXT
)
self.assertEquals(
adv_created,
adv
)
def test_outdated(self):
appsettings.SELF_ADVERTISEMENT = False
Advertisement.objects.create(
placement=Advertisement.PLACEMENT_MAIL_TEXT,
date_start=timezone.now() - datetime.timedelta(days=1),
date_end=timezone.now() - datetime.timedelta(days=1),
text='Test ADV'
)
adv = Advertisement.objects.get_advertisement(
Advertisement.PLACEMENT_MAIL_TEXT
)
self.assertIsNone(adv)
......@@ -158,3 +158,6 @@ REGISTRATION_CAPTCHA = get('REGISTRATION_CAPTCHA', True)
# Source language
SOURCE_LANGUAGE = get('SOURCE_LANGUAGE', 'en')
# Self advertisement
SELF_ADVERTISEMENT = get('SELF_ADVERTISEMENT', False)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment