modified cms integrate to support separate content for each domain

This commit is contained in:
Arvind Tiwari 2018-04-03 22:41:29 +05:30
parent 9511428c9d
commit d843c34d68
10 changed files with 105 additions and 24 deletions

View file

@ -4,7 +4,7 @@ from .cms_models import CMSIntegration
class CMSIntegrationAdmin(PlaceholderAdminMixin, admin.ModelAdmin):
pass
list_display = ('name', 'domain')
admin.site.register(CMSIntegration, CMSIntegrationAdmin)

View file

@ -1,14 +1,15 @@
from cms.models.fields import PlaceholderField
from cms.models.pluginmodel import CMSPlugin
from django.contrib.sites.models import Site
from django.db import models
from django.utils.safestring import mark_safe
from djangocms_text_ckeditor.fields import HTMLField
from filer.fields.image import FilerImageField
from cms.models.fields import PlaceholderField
class CMSIntegration(models.Model):
name = models.CharField(
max_length=100, unique=True, default='default',
max_length=100, default='default',
help_text=(
'A unique name for the Integration. This name will be used to '
'fetch the Integration into pages'
@ -20,6 +21,10 @@ class CMSIntegration(models.Model):
navbar_placeholder = PlaceholderField(
'datacenterlight_navbar', related_name='dcl-navbar-placeholder+'
)
domain = models.ForeignKey(Site, null=True, blank=True)
class Meta:
unique_together = ('name', 'domain')
def __str__(self):
return self.name

View file

@ -1,3 +1,4 @@
from django.contrib.sites.models import Site
from django.core.management.base import BaseCommand
from datacenterlight.cms_models import CMSIntegration
@ -6,8 +7,16 @@ class Command(BaseCommand):
help = '''Creates cms integration objects for datacenterlight'''
def handle(self, *args, **options):
obj, created = CMSIntegration.objects.get_or_create(name='default')
self.create_cms_integration()
def create_cms_integration(self, site=None):
obj, created = CMSIntegration.objects.get_or_create(
name='default', domain=site
)
domain_name = site.domain if site else 'All Sites'
if created:
print('created the default CMSIntegration object')
print('created the default CMSIntegration object for', domain_name)
else:
print('default CMSIntegration object already exists')
print(
'default CMSIntegration object already exists for', domain_name
)

View file

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.4 on 2018-04-03 17:08
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
replaces = [('datacenterlight', '0018_auto_20180403_1930'), ('datacenterlight', '0019_auto_20180403_2054')]
dependencies = [
('datacenterlight', '0017_auto_20180329_0056'),
('sites', '0002_alter_domain_unique'),
]
operations = [
migrations.AlterField(
model_name='dclcontactpluginmodel',
name='organization_name',
field=models.CharField(blank=True, default='ungleich glarus ag', max_length=100),
),
migrations.AlterField(
model_name='dclfooterpluginmodel',
name='copyright_label',
field=models.CharField(blank=True, default='ungleich glarus ag', help_text='Name of the company alongside the copyright year', max_length=100),
),
migrations.AddField(
model_name='cmsintegration',
name='domain',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
),
migrations.AlterField(
model_name='cmsintegration',
name='name',
field=models.CharField(default='default', help_text='A unique name for the Integration. This name will be used to fetch the Integration into pages', max_length=100),
),
migrations.AlterUniqueTogether(
name='cmsintegration',
unique_together=set([('name', 'domain')]),
),
]

View file

@ -74,6 +74,17 @@ a.list-group-item-danger.active:focus {
padding: 10px;
}
#logoWhite,
.navbar-transparent #logoBlack {
display: none;
}
#logoBlack,
.navbar-transparent #logoWhite {
display: block;
width: 220px;
}
@media (min-width: 768px) {
.navbar-right {
margin-right: 10px;

View file

@ -1,3 +1,12 @@
.navbar-transparent #logoWhite {
display: none;
}
.navbar-transparent #logoBlack {
display: block;
width: 220px;
}
.topnav .navbar-fixed-top .navbar-collapse {
max-height: 740px;
}

View file

@ -141,17 +141,6 @@ textarea {
color: #fff;
}
#logoWhite,
.navbar-transparent #logoBlack {
display: none;
}
#logoBlack,
.navbar-transparent #logoWhite {
display: block;
width: 220px;
}
.nav-language {
position: relative;
}

View file

@ -11,11 +11,11 @@
<span class="icon-bar"></span>
</button>
{% if instance.logo_dark or instance.logo_light %}
<a href="{{ instance.logo_url|default:'/' }}" id="logoBlack" class="navbar-brand topnav"><img src="{{ instance.get_logo_dark }}"></a>
<a href="{{ instance.logo_url|default:'/' }}" id="logoWhite" class="navbar-brand topnav"><img src="{{ instance.get_logo_light }}"></a>
<a href="{{ instance.logo_url|default:'/' }}" id="logoBlack" class="navbar-brand"><img src="{{ instance.get_logo_dark }}"></a>
<a href="{{ instance.logo_url|default:'/' }}" id="logoWhite" class="navbar-brand"><img src="{{ instance.get_logo_light }}"></a>
{% else %}
<a href="/" id="logoBlack" class="navbar-brand topnav"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a>
<a href="/" id="logoWhite" class="navbar-brand topnav"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a>
<a href="/" id="logoBlack" class="navbar-brand"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a>
<a href="/" id="logoWhite" class="navbar-brand"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a>
{% endif %}
</div>
<div class="collapse navbar-collapse" id="dcl-topnav">

14
datacenterlight/utils.py Normal file
View file

@ -0,0 +1,14 @@
from django.contrib.sites.models import Site
from .cms_models import CMSIntegration
def get_cms_integration(name):
current_site = Site.objects.get_current()
try:
cms_integration = CMSIntegration.objects.get(
name=name, domain=current_site
)
except CMSIntegration.DoesNotExist:
cms_integration = CMSIntegration.objects.get(name=name, domain=None)
return cms_integration

View file

@ -9,6 +9,7 @@ from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render
from django.utils.translation import get_language, ugettext_lazy as _
from django.views.decorators.cache import cache_control
from django.views.generic import FormView, CreateView, DetailView
@ -24,7 +25,7 @@ from utils.stripe_utils import StripeUtils
from utils.tasks import send_plain_email_task
from .forms import ContactForm
from .models import VMTemplate
from .cms_models import CMSIntegration
from .utils import get_cms_integration
logger = logging.getLogger(__name__)
@ -220,7 +221,7 @@ class PaymentOrderView(FormView):
'site_url': reverse('datacenterlight:index'),
'login_form': HostingUserLoginForm(prefix='login_form'),
'billing_address_form': billing_address_form,
'cms_integration': CMSIntegration.objects.get(name='default')
'cms_integration': get_cms_integration('default')
})
return context
@ -358,7 +359,7 @@ class OrderConfirmationView(DetailView):
'billing_address_data': (
request.session.get('billing_address_data')
),
'cms_integration': CMSIntegration.objects.get(name='default')
'cms_integration': get_cms_integration('default')
}
return render(request, self.template_name, context)