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

Support for Weblate self advertisement

parent ae9f4828
...@@ -22,22 +22,69 @@ import random ...@@ -22,22 +22,69 @@ import random
from django.utils.translation import ugettext as _, ugettext_lazy from django.utils.translation import ugettext as _, ugettext_lazy
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
from weblate import appsettings
DONATE = 'http://weblate.org/donate/'
GITTIP = 'https://www.gittip.com/nijel/'
class AdvertisementManager(models.Manager): class AdvertisementManager(models.Manager):
def get_advertisement(self, placement): def get_advertisement(self, placement):
'''
Returns random advertisement for given placement.
'''
now = timezone.now() now = timezone.now()
base = self.filter( base = self.filter(
placement=placement, placement=placement,
date_start__lt=now, date_start__lte=now,
date_end__gt=now date_end__gte=now
) )
count = base.count() count = base.count()
if count == 0: if count == 0:
return None return self.fallback_advertisement(placement)
offset = random.randint(0, count - 1) offset = random.randint(0, count - 1)
return base[offset] 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): class Advertisement(models.Model):
PLACEMENT_MAIL_TEXT = 1 PLACEMENT_MAIL_TEXT = 1
...@@ -72,6 +119,8 @@ class Advertisement(models.Model): ...@@ -72,6 +119,8 @@ class Advertisement(models.Model):
blank=True blank=True
) )
objects = AdvertisementManager()
class Meta(object): class Meta(object):
app_label = 'trans' app_label = 'trans'
index_together = [ index_together = [
......
...@@ -53,3 +53,4 @@ from trans.tests.test_naturaldate import * ...@@ -53,3 +53,4 @@ from trans.tests.test_naturaldate import *
from trans.tests.test_remote import * from trans.tests.test_remote import *
from trans.tests.test_selenium import * from trans.tests.test_selenium import *
from trans.tests.test_debug 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) ...@@ -158,3 +158,6 @@ REGISTRATION_CAPTCHA = get('REGISTRATION_CAPTCHA', True)
# Source language # Source language
SOURCE_LANGUAGE = get('SOURCE_LANGUAGE', 'en') 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