Skip to content

Add a small SupporterPromo model for showing promos #1413

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jul 7, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 6 additions & 9 deletions readthedocs/core/static-src/core/js/readthedocs-doc-embed.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,12 @@ $(document).ready(function () {

// Show promo selectively
if (data.promo && build.show_promo()) {
// TODO don't hardcode this promo
var promo = sponsorship.Promo.from_variants([
{
id: 'wtd-eu',
text: 'Write the Docs Europe, in Prague Aug 31 - Sep 1. <a>Buy your ticket now!</a>',
link: 'http://www.writethedocs.org/conf/eu/2015/',
image: 'https://70247537a87b983da006-a47a8cc3edeb6b00d7ff1d6a25af0fda.ssl.cf5.rackcdn.com/wtd-promo.png'
}
]);
var promo = sponsorship.Promo.from_variant([
id=data.promo_data.id,
text=data.promo_data.text,
image=data.promo_data.image,
link=data.promo_data.link
])
if (promo) {
promo.display();
}
Expand Down
15 changes: 6 additions & 9 deletions readthedocs/core/static/core/js/readthedocs-doc-embed.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,15 +98,12 @@ $(document).ready(function () {

// Show promo selectively
if (data.promo && build.show_promo()) {
// TODO don't hardcode this promo
var promo = sponsorship.Promo.from_variants([
{
id: 'wtd-eu',
text: 'Write the Docs Europe, in Prague Aug 31 - Sep 1. <a>Buy your ticket now!</a>',
link: 'http://www.writethedocs.org/conf/eu/2015/',
image: 'https://70247537a87b983da006-a47a8cc3edeb6b00d7ff1d6a25af0fda.ssl.cf5.rackcdn.com/wtd-promo.png'
}
]);
var promo = sponsorship.Promo.from_variant([
id=data.promo_data.id,
text=data.promo_data.text,
image=data.promo_data.image,
link=data.promo_data.link
])
if (promo) {
promo.display();
}
Expand Down
12 changes: 10 additions & 2 deletions readthedocs/donate/admin.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
from django.contrib import admin
from .models import Supporter
from .models import Supporter, SupporterPromo


class SupporterAdmin(admin.ModelAdmin):
model = Supporter
raw_id_fields = ('user',)
list_display = ('name', 'email', 'dollars', 'public')
list_filter = ('name', 'email', 'dollars', 'public')

admin.site.register(Supporter, SupporterAdmin)

class SupporterPromoAdmin(admin.ModelAdmin):
model = SupporterPromo
list_display = ('name', 'display_type', 'text', 'live')
list_filter = ('live', 'display_type')


admin.site.register(Supporter, SupporterAdmin)
admin.site.register(SupporterPromo, SupporterPromoAdmin)
98 changes: 98 additions & 0 deletions readthedocs/donate/migrations/0003_add_promo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models


class Migration(SchemaMigration):

def forwards(self, orm):
# Adding model 'SupporterPromo'
db.create_table(u'donate_supporterpromo', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('pub_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
('modified_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
('name', self.gf('django.db.models.fields.CharField')(max_length=200)),
('analytics_id', self.gf('django.db.models.fields.CharField')(max_length=200)),
('text', self.gf('django.db.models.fields.TextField')(blank=True)),
('link', self.gf('django.db.models.fields.URLField')(max_length=255, null=True, blank=True)),
('image', self.gf('django.db.models.fields.URLField')(max_length=255, null=True, blank=True)),
('live', self.gf('django.db.models.fields.BooleanField')(default=False)),
))
db.send_create_signal(u'donate', ['SupporterPromo'])


def backwards(self, orm):
# Deleting model 'SupporterPromo'
db.delete_table(u'donate_supporterpromo')


models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'donate.supporter': {
'Meta': {'object_name': 'Supporter'},
'dollars': ('django.db.models.fields.IntegerField', [], {'default': '50', 'max_length': '30'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '200', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'last_4_digits': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
'logo_url': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
'pub_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'site_url': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'stripe_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'subscribed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'goldonce'", 'null': 'True', 'to': u"orm['auth.User']"})
},
u'donate.supporterpromo': {
'Meta': {'object_name': 'SupporterPromo'},
'analytics_id': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'link': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'live': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
'pub_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'text': ('django.db.models.fields.TextField', [], {'blank': 'True'})
}
}

complete_apps = ['donate']
90 changes: 90 additions & 0 deletions readthedocs/donate/migrations/0004_add_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models


class Migration(SchemaMigration):

def forwards(self, orm):
# Adding field 'SupporterPromo.display_type'
db.add_column(u'donate_supporterpromo', 'display_type',
self.gf('django.db.models.fields.CharField')(default='doc', max_length=200),
keep_default=False)


def backwards(self, orm):
# Deleting field 'SupporterPromo.display_type'
db.delete_column(u'donate_supporterpromo', 'display_type')


models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'donate.supporter': {
'Meta': {'object_name': 'Supporter'},
'dollars': ('django.db.models.fields.IntegerField', [], {'default': '50', 'max_length': '30'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '200', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'last_4_digits': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
'logo_url': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
'pub_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'site_url': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'stripe_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'subscribed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'goldonce'", 'null': 'True', 'to': u"orm['auth.User']"})
},
u'donate.supporterpromo': {
'Meta': {'object_name': 'SupporterPromo'},
'analytics_id': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
'display_type': ('django.db.models.fields.CharField', [], {'default': "'doc'", 'max_length': '200'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'link': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'live': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
'pub_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'text': ('django.db.models.fields.TextField', [], {'blank': 'True'})
}
}

complete_apps = ['donate']
33 changes: 33 additions & 0 deletions readthedocs/donate/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@
(8000, '4 Weeks ($8000)'),
)

DISPLAY_CHOICES = (
('doc', 'Documentation Pages'),
('site-footer', 'Site Footer'),
('search', 'Search Pages'),
)


class Supporter(models.Model):
pub_date = models.DateTimeField(_('Publication date'), auto_now_add=True)
Expand All @@ -41,3 +47,30 @@ class Supporter(models.Model):

def __str__(self):
return self.name


class SupporterPromo(models.Model):
pub_date = models.DateTimeField(_('Publication date'), auto_now_add=True)
modified_date = models.DateTimeField(_('Modified date'), auto_now=True)

name = models.CharField(_('Name'), max_length=200)
analytics_id = models.CharField(_('Analytics ID'), max_length=200)
text = models.TextField(_('Text'), blank=True)
link = models.URLField(_('Link URL'), max_length=255, blank=True, null=True)
image = models.URLField(_('Image URL'), max_length=255, blank=True, null=True)
display_type = models.CharField(_('Display Type'), max_length=200,
choices=DISPLAY_CHOICES, default='doc')

live = models.BooleanField(_('Live'), default=False)

def __str__(self):
return self.name

def as_dict(self):
"A dict respresentation of this for JSON encoding"
return {
'id': self.analytics_id,
'text': self.text,
'link': self.link,
'image': self.image,
}
10 changes: 8 additions & 2 deletions readthedocs/restapi/views/footer_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

from builds.models import Version
from projects.models import Project
from donate.models import SupporterPromo


@decorators.api_view(['GET'])
Expand Down Expand Up @@ -59,6 +60,8 @@ def footer_html(request):
if project.gold_owners.count():
show_promo = False

promo_obj = SupporterPromo.objects.filter(live=True, display_type='doc').order_by('?').first()

context = Context({
'project': project,
'path': path,
Expand All @@ -80,9 +83,12 @@ def footer_html(request):

context.update(csrf(request))
html = template_loader.get_template('restapi/footer.html').render(context)
return Response({
resp_data = {
'html': html,
'version_active': version.active,
'version_supported': version.supported,
'promo': show_promo,
})
}
if show_promo and promo_obj:
resp_data['promo_data'] = promo_obj.as_dict()
return Response(resp_data)