From 8b5117ba8054ab9dd4b4caab30b7999705ae90a8 Mon Sep 17 00:00:00 2001 From: PCoder Date: Fri, 25 Aug 2017 13:28:16 +0530 Subject: [PATCH 01/77] Commented code that was causing the error when executing the tests --- hosting/test_forms.py | 67 ++++++++---------- hosting/test_models.py | 150 ++++++++++++++++++++--------------------- hosting/test_views.py | 70 +++++++++---------- 3 files changed, 139 insertions(+), 148 deletions(-) diff --git a/hosting/test_forms.py b/hosting/test_forms.py index e0f5df30..dd5ee94a 100644 --- a/hosting/test_forms.py +++ b/hosting/test_forms.py @@ -1,14 +1,9 @@ from django.test import TestCase - -from unittest import mock from model_mommy import mommy - -from .forms import HostingOrderAdminForm, HostingUserLoginForm, HostingUserSignupForm -from .models import VirtualMachinePlan +from .forms import HostingUserLoginForm, HostingUserSignupForm class HostingUserLoginFormTest(TestCase): - def setUp(self): password = 'user_password' self.user = mommy.make('CustomUser') @@ -34,9 +29,7 @@ class HostingUserLoginFormTest(TestCase): class HostingUserSignupFormTest(TestCase): - def setUp(self): - self.completed_data = { 'name': 'test name', 'email': 'test@ungleich.com', @@ -58,13 +51,11 @@ class HostingUserSignupFormTest(TestCase): class HostingOrderAdminFormTest(TestCase): - def setUp(self): - self.customer = mommy.make('StripeCustomer') self.vm_plan = mommy.make('VirtualMachinePlan') - self.vm_canceled_plan = mommy.make('VirtualMachinePlan', - status=VirtualMachinePlan.CANCELED_STATUS) + # self.vm_canceled_plan = mommy.make('VirtualMachinePlan', + # status=VirtualMachinePlan.CANCELED_STATUS) self.mocked_charge = { 'amount': 5100, @@ -87,30 +78,30 @@ class HostingOrderAdminFormTest(TestCase): 'customer': None } - @mock.patch('utils.stripe_utils.StripeUtils.make_charge') - def test_valid_form(self, stripe_mocked_call): - stripe_mocked_call.return_value = { - 'paid': True, - 'response_object': self.mocked_charge, - 'error': None - } - form = HostingOrderAdminForm(data=self.completed_data) - self.assertTrue(form.is_valid()) + # @mock.patch('utils.stripe_utils.StripeUtils.make_charge') + # def test_valid_form(self, stripe_mocked_call): + # stripe_mocked_call.return_value = { + # 'paid': True, + # 'response_object': self.mocked_charge, + # 'error': None + # } + # form = HostingOrderAdminForm(data=self.completed_data) + # self.assertTrue(form.is_valid()) - @mock.patch('utils.stripe_utils.StripeUtils.make_charge') - def test_invalid_form_canceled_vm(self, stripe_mocked_call): - - self.completed_data.update({ - 'vm_plan': self.vm_canceled_plan.id - }) - stripe_mocked_call.return_value = { - 'paid': True, - 'response_object': self.mocked_charge, - 'error': None - } - form = HostingOrderAdminForm(data=self.completed_data) - self.assertFalse(form.is_valid()) - - def test_invalid_form(self): - form = HostingOrderAdminForm(data=self.incompleted_data) - self.assertFalse(form.is_valid()) + # @mock.patch('utils.stripe_utils.StripeUtils.make_charge') + # def test_invalid_form_canceled_vm(self, stripe_mocked_call): + # + # self.completed_data.update({ + # 'vm_plan': self.vm_canceled_plan.id + # }) + # stripe_mocked_call.return_value = { + # 'paid': True, + # 'response_object': self.mocked_charge, + # 'error': None + # } + # form = HostingOrderAdminForm(data=self.completed_data) + # self.assertFalse(form.is_valid()) + # + # def test_invalid_form(self): + # form = HostingOrderAdminForm(data=self.incompleted_data) + # self.assertFalse(form.is_valid()) diff --git a/hosting/test_models.py b/hosting/test_models.py index 2b41045b..944044ea 100644 --- a/hosting/test_models.py +++ b/hosting/test_models.py @@ -1,75 +1,75 @@ -from django.test import TestCase - -from django.core.management import call_command - - -from .models import VirtualMachineType - - -class VirtualMachineTypeModelTest(TestCase): - - def setUp(self): - self.HETZNER_NUG_NAME = 'hetzner_nug' - self.HETZNER_NAME = 'hetzner' - self.HETZNER_RAID6_NAME = 'hetzner_raid6' - self.HETZNER_GLUSTERFS_NAME = 'hetzner_glusterfs' - self.BERN_NAME = 'bern' - self.HETZNER_NUG_EXPECTED_PRICE = 79 - self.HETZNER_EXPECTED_PRICE = 180 - self.HETZNER_RAID6_EXPECTED_PRICE = 216 - self.HETZNER_GLUSTERFS_EXPECTED_PRICE = 252 - self.BERN_EXPECTED_PRICE = 202 - - call_command('create_vm_types') - - def test_calculate_price(self): - - # hetzner_nug - # specifications = { - # 'cores': 2, - # 'memory': 10, - # 'disk_size': 100 - # } - # vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_NUG_NAME) - # calculated_price = vm_type.calculate_price(specifications) - # self.assertEqual(calculated_price, self.HETZNER_NUG_EXPECTED_PRICE) - - # hetzner - specifications = { - 'cores': 2, - 'memory': 10, - 'disk_size': 100 - } - vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_NAME) - calculated_price = vm_type.calculate_price(specifications) - self.assertEqual(calculated_price, self.HETZNER_EXPECTED_PRICE) - - # hetzner_raid6 - # specifications = { - # 'cores': 2, - # 'memory': 10, - # 'disk_size': 100 - # } - # vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_RAID6_NAME) - # calculated_price = vm_type.calculate_price(specifications) - # self.assertEqual(calculated_price, self.HETZNER_RAID6_EXPECTED_PRICE) - - # hetzner_glusterfs - # specifications = { - # 'cores': 2, - # 'memory': 10, - # 'disk_size': 100 - # } - # vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_GLUSTERFS_NAME) - # calculated_price = vm_type.calculate_price(specifications) - # self.assertEqual(calculated_price, self.HETZNER_GLUSTERFS_EXPECTED_PRICE) - - # bern - specifications = { - 'cores': 2, - 'memory': 10, - 'disk_size': 100 - } - vm_type = VirtualMachineType.objects.get(hosting_company=self.BERN_NAME) - calculated_price = vm_type.calculate_price(specifications) - self.assertEqual(calculated_price, self.BERN_EXPECTED_PRICE) +# from django.test import TestCase +# +# from django.core.management import call_command +# +# +# #from .models import VirtualMachineType +# +# +# class VirtualMachineTypeModelTest(TestCase): +# +# def setUp(self): +# self.HETZNER_NUG_NAME = 'hetzner_nug' +# self.HETZNER_NAME = 'hetzner' +# self.HETZNER_RAID6_NAME = 'hetzner_raid6' +# self.HETZNER_GLUSTERFS_NAME = 'hetzner_glusterfs' +# self.BERN_NAME = 'bern' +# self.HETZNER_NUG_EXPECTED_PRICE = 79 +# self.HETZNER_EXPECTED_PRICE = 180 +# self.HETZNER_RAID6_EXPECTED_PRICE = 216 +# self.HETZNER_GLUSTERFS_EXPECTED_PRICE = 252 +# self.BERN_EXPECTED_PRICE = 202 +# +# call_command('create_vm_types') +# +# def test_calculate_price(self): +# +# # hetzner_nug +# # specifications = { +# # 'cores': 2, +# # 'memory': 10, +# # 'disk_size': 100 +# # } +# # vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_NUG_NAME) +# # calculated_price = vm_type.calculate_price(specifications) +# # self.assertEqual(calculated_price, self.HETZNER_NUG_EXPECTED_PRICE) +# +# # hetzner +# specifications = { +# 'cores': 2, +# 'memory': 10, +# 'disk_size': 100 +# } +# vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_NAME) +# calculated_price = vm_type.calculate_price(specifications) +# self.assertEqual(calculated_price, self.HETZNER_EXPECTED_PRICE) +# +# # hetzner_raid6 +# # specifications = { +# # 'cores': 2, +# # 'memory': 10, +# # 'disk_size': 100 +# # } +# # vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_RAID6_NAME) +# # calculated_price = vm_type.calculate_price(specifications) +# # self.assertEqual(calculated_price, self.HETZNER_RAID6_EXPECTED_PRICE) +# +# # hetzner_glusterfs +# # specifications = { +# # 'cores': 2, +# # 'memory': 10, +# # 'disk_size': 100 +# # } +# # vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_GLUSTERFS_NAME) +# # calculated_price = vm_type.calculate_price(specifications) +# # self.assertEqual(calculated_price, self.HETZNER_GLUSTERFS_EXPECTED_PRICE) +# +# # bern +# specifications = { +# 'cores': 2, +# 'memory': 10, +# 'disk_size': 100 +# } +# vm_type = VirtualMachineType.objects.get(hosting_company=self.BERN_NAME) +# calculated_price = vm_type.calculate_price(specifications) +# self.assertEqual(calculated_price, self.BERN_EXPECTED_PRICE) diff --git a/hosting/test_views.py b/hosting/test_views.py index aa9a9ace..e8853c9f 100644 --- a/hosting/test_views.py +++ b/hosting/test_views.py @@ -13,11 +13,11 @@ from stored_messages.models import Inbox from membership.models import CustomUser, StripeCustomer -from .models import VirtualMachineType, HostingOrder, VirtualMachinePlan +from .models import HostingOrder from .views import DjangoHostingView, RailsHostingView, NodeJSHostingView, LoginView, SignupView, \ PaymentVMView, OrdersHostingDetailView, OrdersHostingListView, VirtualMachineView, \ VirtualMachinesPlanListView, PasswordResetView, PasswordResetConfirmView, HostingPricingView, \ - NotificationsView, MarkAsReadNotificationView, GenerateVMSSHKeysView + NotificationsView, MarkAsReadNotificationView from utils.tests import BaseTestCase @@ -47,15 +47,15 @@ class DjangoHostingViewTest(TestCase, ProcessVMSelectionTestMixin): self.view = DjangoHostingView() self.expected_template = 'hosting/django.html' HOSTING = 'django' - configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) + #configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) self.expected_context = { 'hosting': HOSTING, 'hosting_long': "Django", - 'configuration_detail': configuration_detail, + #'configuration_detail': configuration_detail, 'domain': "django-hosting.ch", 'google_analytics': "UA-62285904-6", 'email': "info@django-hosting.ch", - 'vm_types': VirtualMachineType.get_serialized_vm_types(), + #'vm_types': VirtualMachineType.get_serialized_vm_types(), } @@ -66,15 +66,15 @@ class RailsHostingViewTest(TestCase, ProcessVMSelectionTestMixin): self.view = RailsHostingView() self.expected_template = 'hosting/rails.html' HOSTING = 'rails' - configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) + #configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) self.expected_context = { 'hosting': HOSTING, 'hosting_long': "Ruby On Rails", - 'configuration_detail': configuration_detail, + #'configuration_detail': configuration_detail, 'domain': "rails-hosting.ch", 'google_analytics': "UA-62285904-5", 'email': "info@rails-hosting.ch", - 'vm_types': VirtualMachineType.get_serialized_vm_types(), + #'vm_types': VirtualMachineType.get_serialized_vm_types(), } @@ -85,15 +85,15 @@ class NodeJSHostingViewTest(TestCase, ProcessVMSelectionTestMixin): self.view = NodeJSHostingView() self.expected_template = 'hosting/nodejs.html' HOSTING = 'nodejs' - configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) + #configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) self.expected_context = { 'hosting': HOSTING, 'hosting_long': "NodeJS", - 'configuration_detail': configuration_detail, + #'configuration_detail': configuration_detail, 'domain': "node-hosting.ch", 'google_analytics': "UA-62285904-7", 'email': "info@node-hosting.ch", - 'vm_types': VirtualMachineType.get_serialized_vm_types(), + #'vm_types': VirtualMachineType.get_serialized_vm_types(), } @@ -104,11 +104,11 @@ class HostingPricingViewTest(TestCase): self.view = HostingPricingView() self.expected_template = 'hosting/hosting_pricing.html' - configuration_options = dict(VirtualMachinePlan.VM_CONFIGURATION) + #configuration_options = dict(VirtualMachinePlan.VM_CONFIGURATION) self.expected_context = { - 'configuration_options': configuration_options, + #'configuration_options': configuration_options, 'email': "info@django-hosting.ch", - 'vm_types': VirtualMachineType.get_serialized_vm_types(), + #'vm_types': VirtualMachineType.get_serialized_vm_types(), } def url_resolve_to_view_correctly(self): @@ -135,10 +135,10 @@ class PaymentVMViewTest(BaseTestCase): self.view = PaymentVMView # VM - self.vm = mommy.make(VirtualMachineType, base_price=10000, - memory_price=100, - core_price=1000, - disk_size_price=1) + # self.vm = mommy.make(VirtualMachineType, base_price=10000, + # memory_price=100, + # core_price=1000, + # disk_size_price=1) # post data self.billing_address = { @@ -153,16 +153,16 @@ class PaymentVMViewTest(BaseTestCase): self.url = reverse('hosting:payment') # Session data - self.session_data = { - 'vm_specs': { - 'hosting_company': self.vm.hosting_company, - 'cores': 1, - 'memory': 10, - 'disk_size': 10000, - 'price': 22000, - 'configuration': dict(VirtualMachinePlan.VM_CONFIGURATION).get('django') - } - } + # self.session_data = { + # 'vm_specs': { + # 'hosting_company': self.vm.hosting_company, + # 'cores': 1, + # 'memory': 10, + # 'disk_size': 10000, + # 'price': 22000, + # 'configuration': dict(VirtualMachinePlan.VM_CONFIGURATION).get('django') + # } + # } session = self.customer_client.session session.update(self.session_data) @@ -290,8 +290,8 @@ class GenerateVMSSHKeysViewTest(BaseTestCase): def setUp(self): super(GenerateVMSSHKeysViewTest, self).setUp() - self.view = GenerateVMSSHKeysView - self.vm = mommy.make(VirtualMachinePlan) + # self.view = GenerateVMSSHKeysView + # self.vm = mommy.make(VirtualMachinePlan) self.expected_template = 'hosting/virtual_machine_key.html' self.url = reverse('hosting:virtual_machine_key', kwargs={'pk': self.vm.id}) @@ -312,8 +312,8 @@ class GenerateVMSSHKeysViewTest(BaseTestCase): # Logged user should get the page response = self.customer_client.get(self.url, follow=True) self.assertEqual(response.status_code, 200) - updated_vm = VirtualMachinePlan.objects.get(id=self.vm.id) - self.assertEqual(response.context['public_key'].decode("utf-8"), updated_vm.public_key) + #updated_vm = VirtualMachinePlan.objects.get(id=self.vm.id) + #self.assertEqual(response.context['public_key'].decode("utf-8"), updated_vm.public_key) self.assertTrue(response.context['private_key'] is not None) self.assertEqual(len(response.context['public_key']), 380) self.assertTrue(len(response.context['private_key']) is 1678 or 1674) @@ -326,7 +326,7 @@ class VirtualMachineViewTest(BaseTestCase): super(VirtualMachineViewTest, self).setUp() self.stripe_customer = mommy.make(StripeCustomer, user=self.customer) - self.vm = mommy.make(VirtualMachinePlan) + #self.vm = mommy.make(VirtualMachinePlan) self.vm.assign_permissions(self.customer) self.order = mommy.make(HostingOrder, customer=self.stripe_customer, vm_plan=self.vm) self.url = reverse('hosting:virtual_machines', kwargs={'pk': self.vm.id}) @@ -361,8 +361,8 @@ class VirtualMachinesPlanListViewTest(BaseTestCase): self.stripe_customer = mommy.make(StripeCustomer, user=self.customer) mommy.make(HostingOrder, customer=self.stripe_customer, approved=True, _quantity=20) - _vms = VirtualMachinePlan.objects.all() - self.vms = sorted(_vms, key=lambda vm: vm.id, reverse=True) + #_vms = VirtualMachinePlan.objects.all() + #self.vms = sorted(_vms, key=lambda vm: vm.id, reverse=True) self.url = reverse('hosting:virtual_machines') self.view = VirtualMachinesPlanListView() self.expected_template = 'hosting/virtual_machines.html' From e2188cc166666d4cab69ec7a1db1dce6008a6a07 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Mon, 2 Oct 2017 17:19:51 +0200 Subject: [PATCH 02/77] Added some skipIf conditions --- utils/tests.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/utils/tests.py b/utils/tests.py index d5c2d726..1da5ba28 100644 --- a/utils/tests.py +++ b/utils/tests.py @@ -139,6 +139,10 @@ class TestStripeCustomerDescription(TestCase): self.assertEqual(customer_data.description, self.customer_name) +@skipIf(settings.STRIPE_API_PRIVATE_KEY_TEST == "" or + settings.TEST_MANAGE_SSH_KEY_HOST == "", + """Skipping test_save_ssh_key_add because either host + or public key were not specified or were empty""") class StripePlanTestCase(TestStripeCustomerDescription): """ A class to test Stripe plans @@ -161,6 +165,10 @@ class StripePlanTestCase(TestStripeCustomerDescription): self.assertIsNone(stripe_plan.get('error')) self.assertIsInstance(stripe_plan.get('response_object'), StripePlan) + @skipIf(settings.TEST_MANAGE_SSH_KEY_PUBKEY == "" or + settings.TEST_MANAGE_SSH_KEY_HOST == "", + """Skipping test_save_ssh_key_add because either host + or public key were not specified or were empty""") @patch('utils.stripe_utils.logger') def test_create_duplicate_plans_error_handling(self, mock_logger): """ @@ -254,10 +262,8 @@ class SaveSSHKeyTestCase(TestCase): self.public_key = settings.TEST_MANAGE_SSH_KEY_PUBKEY self.hosts = settings.TEST_MANAGE_SSH_KEY_HOST - @skipIf(settings.TEST_MANAGE_SSH_KEY_PUBKEY is None or - settings.TEST_MANAGE_SSH_KEY_PUBKEY == "" or - settings.TEST_MANAGE_SSH_KEY_HOST is None or - settings.TEST_MANAGE_SSH_KEY_HOST is "", + @skipIf(settings.TEST_MANAGE_SSH_KEY_PUBKEY == "" or + settings.TEST_MANAGE_SSH_KEY_HOST == "", """Skipping test_save_ssh_key_add because either host or public key were not specified or were empty""") def test_save_ssh_key_add(self): From 49ea549c73ca6cf0f04c7f4240b53d2e9e85c838 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Sun, 5 Nov 2017 23:48:20 +0530 Subject: [PATCH 03/77] ungleich header slider --- .../static/ungleich_page/css/ungleich.css | 15 +++++++ .../ungleich_page/includes/_header.html | 41 ++++++++++++++----- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/ungleich_page/static/ungleich_page/css/ungleich.css b/ungleich_page/static/ungleich_page/css/ungleich.css index 40ddf2fd..fc8a460e 100644 --- a/ungleich_page/static/ungleich_page/css/ungleich.css +++ b/ungleich_page/static/ungleich_page/css/ungleich.css @@ -111,3 +111,18 @@ paddding: 10px; } } + +.header_slider { + height: 100vh; +} + +.header_slider > .carousel { + display: flex; + flex-direction: column; + height: 100%; + align-items: stretch; +} + +.header_slider > .carousel .item { + padding-top: 150px; +} \ No newline at end of file diff --git a/ungleich_page/templates/ungleich_page/includes/_header.html b/ungleich_page/templates/ungleich_page/includes/_header.html index a86f2f24..996b297c 100644 --- a/ungleich_page/templates/ungleich_page/includes/_header.html +++ b/ungleich_page/templates/ungleich_page/includes/_header.html @@ -1,17 +1,36 @@ {% load static %} {% load i18n %} -
-
-
- -


-
- - {% trans "We Design, Configure & Maintain
Your Linux Infrastructure " %} -
-
+
+ + + +
\ No newline at end of file From e35d9a27895d9ca978165d96375cedf4e7de8b36 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 16 Nov 2017 17:44:15 +0100 Subject: [PATCH 04/77] Add ungleich_cms_page.html --- .../ungleich_page/ungleich_cms_page.html | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 ungleich_page/templates/ungleich_page/ungleich_cms_page.html diff --git a/ungleich_page/templates/ungleich_page/ungleich_cms_page.html b/ungleich_page/templates/ungleich_page/ungleich_cms_page.html new file mode 100644 index 00000000..9f863f1f --- /dev/null +++ b/ungleich_page/templates/ungleich_page/ungleich_cms_page.html @@ -0,0 +1,145 @@ +{% load static i18n cms_tags sekizai_tags %} + + + + + + + + + + + + {% page_attribute "page_title" %} + + + + + + + + + + + + + + {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %} + {% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %} + + {% include "google_analytics.html" %} + + + + + + +{% cms_toolbar %} + + + + + {% placeholder 'Ungleich Page Contents' %} + + + {% include "ungleich_page/includes/_header.html" %} + + + {% include "ungleich_page/includes/_services.html" %} + + + {% include "ungleich_page/includes/_portfolio.html" %} + + + {% include "ungleich_page/includes/_about.html" %} + + + {% include "ungleich_page/includes/_team.html" %} + + + {% include "ungleich_page/includes/_softwares.html" %} + + + {% include "ungleich_page/includes/_contact_us.html" %} + + + {% include "ungleich_page/includes/_footer.html" %} + + + + + + + + + + + + + + + + + + + + + + + + + From e9b3e77752d8eb71e3f7e441551f0deca3b515a1 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Fri, 17 Nov 2017 15:48:44 +0100 Subject: [PATCH 05/77] Change title char field in UngleichPicture to HTML field --- ungleich_page/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ungleich_page/models.py b/ungleich_page/models.py index 3759ee25..5ea6a9dc 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -11,7 +11,7 @@ class UngelichPicture(CMSPlugin): related_name="image", on_delete=models.SET_NULL ) - title = models.CharField(max_length=400) + title = HTMLField() class SectionWithImage(UngelichPicture): From 501dc08b0ef86dffcd4b181df768532a8a544395 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Fri, 17 Nov 2017 16:30:44 +0100 Subject: [PATCH 06/77] Align text to flex-start or flex-end for timeline --- .../static/ungleich_page/css/ungleich.css | 36 ++++++++++++++++++- .../ungleich_page/glasfaser/_about_item.html | 2 +- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/ungleich_page/static/ungleich_page/css/ungleich.css b/ungleich_page/static/ungleich_page/css/ungleich.css index fc8a460e..fe34ee6b 100644 --- a/ungleich_page/static/ungleich_page/css/ungleich.css +++ b/ungleich_page/static/ungleich_page/css/ungleich.css @@ -125,4 +125,38 @@ .header_slider > .carousel .item { padding-top: 150px; -} \ No newline at end of file +} + + +.timeline>li .timeline-panel { + display: flex; + min-height: 80px; + align-items: center; + padding-bottom: 15px; +} + +.flex-justify-content-end{ + justify-content: flex-end; +} + +.flex-justify-content-start{ + justify-content: flex-start; +} + +.timeline>li.timeline-inverted>.timeline-panel { + padding-bottom: 0; +} + + +@media (min-width: 768px) and (max-width: 991px) { + .timeline>li .timeline-panel { + min-height: 100px; + } +} + +@media (min-width: 992px) { + .timeline>li .timeline-panel { + min-height: 170px; + } +} + diff --git a/ungleich_page/templates/ungleich_page/glasfaser/_about_item.html b/ungleich_page/templates/ungleich_page/glasfaser/_about_item.html index 0ccdff9a..6b619579 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/_about_item.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/_about_item.html @@ -4,7 +4,7 @@ {% if instance.link_url %}{% endif %} -
+

{{ instance.title }}

From 4367b9e58a6d8386285ba357a6ef7aafd13be445 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Fri, 17 Nov 2017 16:32:40 +0100 Subject: [PATCH 07/77] Add ungleich cms page template --- dynamicweb/settings/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dynamicweb/settings/base.py b/dynamicweb/settings/base.py index 48a2399f..19c263d5 100644 --- a/dynamicweb/settings/base.py +++ b/dynamicweb/settings/base.py @@ -219,6 +219,7 @@ CMS_TEMPLATES = ( # dcl ('datacenterlight/cms_page.html', gettext('Data Center Light')), ('ungleich_page/glasfaser_cms_page.html', gettext('Glasfaser')), + ('ungleich_page/ungleich_cms_page.html', gettext('ungleich')), ) DATABASES = { From 432d109c48c8f3ed67b018f8e81b904fd584b2c0 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Fri, 17 Nov 2017 16:36:25 +0100 Subject: [PATCH 08/77] Add migration --- .../migrations/0007_auto_20171117_1011.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 ungleich_page/migrations/0007_auto_20171117_1011.py diff --git a/ungleich_page/migrations/0007_auto_20171117_1011.py b/ungleich_page/migrations/0007_auto_20171117_1011.py new file mode 100644 index 00000000..71b4017a --- /dev/null +++ b/ungleich_page/migrations/0007_auto_20171117_1011.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-11-17 10:11 +from __future__ import unicode_literals + +from django.db import migrations +import djangocms_text_ckeditor.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('ungleich_page', '0006_aboutitem_link_url'), + ] + + operations = [ + migrations.AlterField( + model_name='ungelichpicture', + name='title', + field=djangocms_text_ckeditor.fields.HTMLField(), + ), + ] From 8a2eb8307a6991fedbf414af90f2ffab4d70e3fe Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Fri, 17 Nov 2017 17:36:01 +0100 Subject: [PATCH 09/77] Add UngleichServiceItem model --- ungleich_page/models.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ungleich_page/models.py b/ungleich_page/models.py index 5ea6a9dc..894e4101 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -87,3 +87,12 @@ class AboutItem(UngelichPicture): return "{alignment} - {title}".format( alignment=alignment, title=self.title ) + + +class UngleichServiceItem(ServiceItem): + data_replaced_image = FilerImageField( + null=True, + blank=True, + related_name="service_item_data_replaced_image", + on_delete=models.SET_NULL + ) \ No newline at end of file From cf1f7d6141344847fd79a00f6705046aa39a3ad0 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Fri, 17 Nov 2017 17:37:05 +0100 Subject: [PATCH 10/77] Add UngleichServicesPlugin and UngleichServicesItemPlugin --- ungleich_page/cms_plugins.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index a5b10d5f..4c842093 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -3,7 +3,7 @@ from cms.plugin_pool import plugin_pool from .models import ( UngelichContactUsSection, UngelichTextSection, Service, ServiceItem, - About, AboutItem, SectionWithImage + About, AboutItem, SectionWithImage, UngleichServiceItem ) @@ -145,3 +145,35 @@ class GlasfaserAboutItemPlugin(CMSPluginBase): ) context['instance'] = instance return context + + +@plugin_pool.register_plugin +class UngleichServicesPlugin(CMSPluginBase): + name = "ungleich Services Plugin" + model = Service + render_template = "ungleich_page/ungleich/section_services.html" + cache = False + allow_children = True + child_classes = ['UngleichServicesItemPlugin'] + + def render(self, context, instance, placeholder): + context['service_instance'] = instance + context['section_id'] = get_section_id(instance, 'services') + return context + + +@plugin_pool.register_plugin +class UngleichServicesItemPlugin(CMSPluginBase): + name = "ungleich Service Item Plugin" + model = UngleichServiceItem + render_template = "ungleich_page/ungleich/_services_item.html" + cache = False + require_parent = True + parent_classes = ['UngleichServicesPlugin'] + + def render(self, context, instance, placeholder): + context = super(UngleichServicesItemPlugin, self).render( + context, instance, placeholder + ) + context['instance'] = instance + return context \ No newline at end of file From 2af78be195170d853ddd48740f9875c17212f96f Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Fri, 17 Nov 2017 17:39:46 +0100 Subject: [PATCH 11/77] First version of ungleich/section_services.html (wip) --- .../ungleich/section_services.html | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 ungleich_page/templates/ungleich_page/ungleich/section_services.html diff --git a/ungleich_page/templates/ungleich_page/ungleich/section_services.html b/ungleich_page/templates/ungleich_page/ungleich/section_services.html new file mode 100644 index 00000000..10a682b7 --- /dev/null +++ b/ungleich_page/templates/ungleich_page/ungleich/section_services.html @@ -0,0 +1,44 @@ +{% load static i18n cms_tags %} +
+
+
+

{{ service_instance.title }}

+

+ {% trans "We support our clients in all areas of Unix infrastructure." %}
+ {% trans "Our top notch configuration management is refreshingly simple and reliable." %} +

+
+
+
+
+ +
+

{% trans "Hosting" %}

+

 

+

{% trans "Ruby on Rails. Java hosting, Django hosting, we make it everything run smooth and safe." %}

+
+
+
+
+
+ +
+

{% trans "Configuration as a Service" %}

+

 

+

{% trans "Ruby on Rails, Django, Java, Webserver, Mailserver, any infrastructure that needs to configured, we provide comprehensive solutions. Amazon, rackspace or bare metal servers, we configure for you." %}

+
+
+
+
+
+ +
+

{% trans "Linux System Engineering" %}

+

 

+

{% trans "Let your developers develop! We take care of your system administration. Gentoo, Archlinux, Debian, Ubuntu, and many more." %}

+
+
+
+
+
+
From 06e8b3acc99aa7e855ff8fa74552cbd1065e10ee Mon Sep 17 00:00:00 2001 From: PCoder Date: Sun, 19 Nov 2017 08:16:50 +0100 Subject: [PATCH 12/77] Remove new line --- .../templates/ungleich_page/glasfaser/section_services.html | 1 - 1 file changed, 1 deletion(-) diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_services.html b/ungleich_page/templates/ungleich_page/glasfaser/section_services.html index a4b50e5c..4f373653 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_services.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_services.html @@ -11,7 +11,6 @@ {% render_plugin plugin %}
{% endfor %} -
\ No newline at end of file From 41b68365ed275dc64f04ddff71c4509afd4bfc34 Mon Sep 17 00:00:00 2001 From: PCoder Date: Sun, 19 Nov 2017 10:22:32 +0100 Subject: [PATCH 13/77] Add ungleichserviceitem migration --- .../migrations/0008_ungleichserviceitem.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 ungleich_page/migrations/0008_ungleichserviceitem.py diff --git a/ungleich_page/migrations/0008_ungleichserviceitem.py b/ungleich_page/migrations/0008_ungleichserviceitem.py new file mode 100644 index 00000000..3a029110 --- /dev/null +++ b/ungleich_page/migrations/0008_ungleichserviceitem.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-11-17 18:49 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import filer.fields.image + + +class Migration(migrations.Migration): + + dependencies = [ + ('filer', '0005_auto_20171015_0703'), + ('ungleich_page', '0007_auto_20171117_1011'), + ] + + operations = [ + migrations.CreateModel( + name='UngleichServiceItem', + fields=[ + ('serviceitem_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.ServiceItem')), + ('data_replaced_image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='service_item_data_replaced_image', to='filer.Image')), + ], + options={ + 'abstract': False, + }, + bases=('ungleich_page.serviceitem',), + ), + ] From 7aca2512600cf1a5d57d180fb85c5a0f64d5f575 Mon Sep 17 00:00:00 2001 From: PCoder Date: Sun, 19 Nov 2017 10:25:30 +0100 Subject: [PATCH 14/77] Add ungleich services and serivce item htmls --- .../ungleich/_services_item.html | 8 ++++ .../ungleich/section_services.html | 42 ++++--------------- 2 files changed, 15 insertions(+), 35 deletions(-) create mode 100644 ungleich_page/templates/ungleich_page/ungleich/_services_item.html diff --git a/ungleich_page/templates/ungleich_page/ungleich/_services_item.html b/ungleich_page/templates/ungleich_page/ungleich/_services_item.html new file mode 100644 index 00000000..87fda196 --- /dev/null +++ b/ungleich_page/templates/ungleich_page/ungleich/_services_item.html @@ -0,0 +1,8 @@ +
+ +
+

{{ instance.title }}

+

 

+

{{ instance.description }}

+
+
\ No newline at end of file diff --git a/ungleich_page/templates/ungleich_page/ungleich/section_services.html b/ungleich_page/templates/ungleich_page/ungleich/section_services.html index 10a682b7..2c9e5246 100644 --- a/ungleich_page/templates/ungleich_page/ungleich/section_services.html +++ b/ungleich_page/templates/ungleich_page/ungleich/section_services.html @@ -1,44 +1,16 @@ -{% load static i18n cms_tags %} +{% load cms_tags %}

{{ service_instance.title }}

-

- {% trans "We support our clients in all areas of Unix infrastructure." %}
- {% trans "Our top notch configuration management is refreshingly simple and reliable." %} -

+

{{ service_instance.sub_title }}

-
-
- -
-

{% trans "Hosting" %}

-

 

-

{% trans "Ruby on Rails. Java hosting, Django hosting, we make it everything run smooth and safe." %}

-
-
-
-
-
- -
-

{% trans "Configuration as a Service" %}

-

 

-

{% trans "Ruby on Rails, Django, Java, Webserver, Mailserver, any infrastructure that needs to configured, we provide comprehensive solutions. Amazon, rackspace or bare metal servers, we configure for you." %}

-
-
-
-
-
- -
-

{% trans "Linux System Engineering" %}

-

 

-

{% trans "Let your developers develop! We take care of your system administration. Gentoo, Archlinux, Debian, Ubuntu, and many more." %}

-
-
-
+ {% for plugin in service_instance.child_plugin_instances %} +
+ {% render_plugin plugin %} +
+ {% endfor %}
From d006ddcf0db26b638e8b906d7ab842a22ca7edac Mon Sep 17 00:00:00 2001 From: PCoder Date: Sun, 19 Nov 2017 13:19:01 +0100 Subject: [PATCH 15/77] Add UngleichHeaderWithTextAndImageSliderPlugin and UngleichHeaderItemPlugin --- ungleich_page/cms_plugins.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 4c842093..9d5cfda0 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -3,7 +3,8 @@ from cms.plugin_pool import plugin_pool from .models import ( UngelichContactUsSection, UngelichTextSection, Service, ServiceItem, - About, AboutItem, SectionWithImage, UngleichServiceItem + About, AboutItem, SectionWithImage, UngleichServiceItem, UngleichHeader, + UngleichHeaderItem ) @@ -176,4 +177,35 @@ class UngleichServicesItemPlugin(CMSPluginBase): context, instance, placeholder ) context['instance'] = instance + return context + + +@plugin_pool.register_plugin +class UngleichHeaderWithTextAndImageSliderPlugin(CMSPluginBase): + name = "ungleich Header with Text and Image Slider Plugin" + model = UngleichHeader + render_template = "ungleich_page/ungleich/header.html" + cache = False + allow_children = True + child_classes = ['UngleichHeaderItemPlugin'] + + def render(self, context, instance, placeholder): + context['instance'] = instance + return context + + +@plugin_pool.register_plugin +class UngleichHeaderItemPlugin(CMSPluginBase): + name = "ungleich Header Item Plugin" + model = UngleichHeaderItem + render_template = "ungleich_page/ungleich/_header_item.html" + cache = False + require_parent = True + parent_classes = ['UngleichHeaderWithTextAndImageSliderPlugin'] + + def render(self, context, instance, placeholder): + context = super(UngleichHeaderItemPlugin, self).render( + context, instance, placeholder + ) + context['instance'] = instance return context \ No newline at end of file From e05a2eab7e4a2b985dd5fac426e9a87a210dd8ec Mon Sep 17 00:00:00 2001 From: PCoder Date: Sun, 19 Nov 2017 13:19:40 +0100 Subject: [PATCH 16/77] Add UngleichHeader and UngleichHeaderItem models --- ungleich_page/models.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/ungleich_page/models.py b/ungleich_page/models.py index 894e4101..640e599b 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -95,4 +95,24 @@ class UngleichServiceItem(ServiceItem): blank=True, related_name="service_item_data_replaced_image", on_delete=models.SET_NULL - ) \ No newline at end of file + ) + + +class UngleichHeader(CMSPlugin): + background_image = FilerImageField( + null=True, + blank=True, + related_name="ungleich_header_background_image", + on_delete=models.SET_NULL + ) + carousel_data_interval = models.IntegerField(default=5000) + + +class UngleichHeaderItem(CMSPlugin): + image = FilerImageField( + null=True, + blank=True, + related_name="ungleich_header_item_image", + on_delete=models.SET_NULL + ) + description = HTMLField() \ No newline at end of file From 09b118b3119764107511df031558b6bd062a77fe Mon Sep 17 00:00:00 2001 From: PCoder Date: Sun, 19 Nov 2017 13:20:26 +0100 Subject: [PATCH 17/77] Add intro-cap-sans-transform p class --- ungleich_page/static/ungleich_page/css/ungleich.css | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ungleich_page/static/ungleich_page/css/ungleich.css b/ungleich_page/static/ungleich_page/css/ungleich.css index fe34ee6b..b3296ca1 100644 --- a/ungleich_page/static/ungleich_page/css/ungleich.css +++ b/ungleich_page/static/ungleich_page/css/ungleich.css @@ -7,6 +7,17 @@ color: #494949; } +.header-vh { + height: 30px; +} +.intro-cap-sans-transform p { + font-family: 'Raleway', 'Helvetica Neue', 'Open Sans Bold', Helvetica, Arial, 'Arial Bold', sans-serif; + font-size: 26px; + font-style: normal; + font-weight: 200; + color: #FFF; +} + .intro-cap { font-family: 'Raleway', 'Helvetica Neue', 'Open Sans Bold', Helvetica, Arial, 'Arial Bold', sans-serif; font-size: 26px; From 7a9c624012ffe5e7fae09bc0df0a194c25e9cda1 Mon Sep 17 00:00:00 2001 From: PCoder Date: Sun, 19 Nov 2017 13:21:00 +0100 Subject: [PATCH 18/77] Add ungleich header migration --- .../0009_ungleichheader_ungleichheaderitem.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 ungleich_page/migrations/0009_ungleichheader_ungleichheaderitem.py diff --git a/ungleich_page/migrations/0009_ungleichheader_ungleichheaderitem.py b/ungleich_page/migrations/0009_ungleichheader_ungleichheaderitem.py new file mode 100644 index 00000000..499917a2 --- /dev/null +++ b/ungleich_page/migrations/0009_ungleichheader_ungleichheaderitem.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-11-19 11:28 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import djangocms_text_ckeditor.fields +import filer.fields.image + + +class Migration(migrations.Migration): + + dependencies = [ + ('filer', '0005_auto_20171015_0703'), + ('cms', '0014_auto_20160404_1908'), + ('ungleich_page', '0008_ungleichserviceitem'), + ] + + operations = [ + migrations.CreateModel( + name='UngleichHeader', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('carousel_data_interval', models.IntegerField(default=5000)), + ('background_image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ungleich_header_background_image', to='filer.Image')), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), + migrations.CreateModel( + name='UngleichHeaderItem', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('description', djangocms_text_ckeditor.fields.HTMLField()), + ('image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ungleich_header_item_image', to='filer.Image')), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), + ] From 4e8b3cdbe8441ce22e75df294f4ed299abce264c Mon Sep 17 00:00:00 2001 From: PCoder Date: Sun, 19 Nov 2017 13:22:37 +0100 Subject: [PATCH 19/77] Add ungleich header.html _header_item.html --- .../ungleich_page/ungleich/_header_item.html | 14 +++++++++++++ .../ungleich_page/ungleich/header.html | 20 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 ungleich_page/templates/ungleich_page/ungleich/_header_item.html create mode 100644 ungleich_page/templates/ungleich_page/ungleich/header.html diff --git a/ungleich_page/templates/ungleich_page/ungleich/_header_item.html b/ungleich_page/templates/ungleich_page/ungleich/_header_item.html new file mode 100644 index 00000000..ca4303db --- /dev/null +++ b/ungleich_page/templates/ungleich_page/ungleich/_header_item.html @@ -0,0 +1,14 @@ +
+
+ {% if instance.image %} + +
+ {% endif %} +
+ + {{ instance.description }} + +
+
+
diff --git a/ungleich_page/templates/ungleich_page/ungleich/header.html b/ungleich_page/templates/ungleich_page/ungleich/header.html new file mode 100644 index 00000000..89def4ee --- /dev/null +++ b/ungleich_page/templates/ungleich_page/ungleich/header.html @@ -0,0 +1,20 @@ +{% load cms_tags %} +
+ +
\ No newline at end of file From f927220a889e05ea17c1d2b2c36c831b6a91cb5a Mon Sep 17 00:00:00 2001 From: PCoder Date: Sun, 19 Nov 2017 14:54:16 +0100 Subject: [PATCH 20/77] Use image width 300px --- .../templates/ungleich_page/ungleich/_header_item.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ungleich_page/templates/ungleich_page/ungleich/_header_item.html b/ungleich_page/templates/ungleich_page/ungleich/_header_item.html index ca4303db..a770d1ed 100644 --- a/ungleich_page/templates/ungleich_page/ungleich/_header_item.html +++ b/ungleich_page/templates/ungleich_page/ungleich/_header_item.html @@ -1,7 +1,7 @@
{% if instance.image %} -
{% endif %} From 567ff8d314044a9f88f1289315e5388ff91b8306 Mon Sep 17 00:00:00 2001 From: PCoder Date: Sun, 19 Nov 2017 15:51:52 +0100 Subject: [PATCH 21/77] Change subtitle to HTMLfield --- .../migrations/0010_auto_20171119_1404.py | 21 +++++++++++++++++++ ungleich_page/models.py | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 ungleich_page/migrations/0010_auto_20171119_1404.py diff --git a/ungleich_page/migrations/0010_auto_20171119_1404.py b/ungleich_page/migrations/0010_auto_20171119_1404.py new file mode 100644 index 00000000..4057a90b --- /dev/null +++ b/ungleich_page/migrations/0010_auto_20171119_1404.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-11-19 14:04 +from __future__ import unicode_literals + +from django.db import migrations +import djangocms_text_ckeditor.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('ungleich_page', '0009_ungleichheader_ungleichheaderitem'), + ] + + operations = [ + migrations.AlterField( + model_name='service', + name='sub_title', + field=djangocms_text_ckeditor.fields.HTMLField(), + ), + ] diff --git a/ungleich_page/models.py b/ungleich_page/models.py index 640e599b..d1e0199b 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -54,7 +54,7 @@ class UngelichTextSection(CMSPlugin): class Service(CMSPlugin): menu_text = models.CharField(max_length=100, default="", blank=True) title = models.CharField(max_length=200) - sub_title = models.CharField(max_length=200) + sub_title = HTMLField() def __str__(self): return self.title From 16e5fb8f5c9a03cc814c7ddde3537dd32059ed3d Mon Sep 17 00:00:00 2001 From: PCoder Date: Wed, 22 Nov 2017 00:16:39 +0100 Subject: [PATCH 22/77] Add multiply filter --- datacenterlight/templatetags/custom_tags.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/datacenterlight/templatetags/custom_tags.py b/datacenterlight/templatetags/custom_tags.py index ce6e6724..908b1f89 100644 --- a/datacenterlight/templatetags/custom_tags.py +++ b/datacenterlight/templatetags/custom_tags.py @@ -31,3 +31,14 @@ def get_value_from_dict(dict_data, key): return dict_data.get(key) else: return "" + + +@register.filter('multiply') +def multiply(value, arg): + """ + usage: {{ quantity|multiply:price }} + :param value: + :param arg: + :return: + """ + return value*arg From 1e567ef6ad0e86ec1f438d2e6240944f74bfd9d9 Mon Sep 17 00:00:00 2001 From: PCoder Date: Wed, 22 Nov 2017 00:19:07 +0100 Subject: [PATCH 23/77] Add ungleichproduct and ungleichproductitem plugins --- ungleich_page/cms_plugins.py | 36 +++++++++++++++++- ...011_ungleichproduct_ungleichproductitem.py | 38 +++++++++++++++++++ ungleich_page/models.py | 10 ++++- 3 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 ungleich_page/migrations/0011_ungleichproduct_ungleichproductitem.py diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 9d5cfda0..1b10375a 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -4,7 +4,7 @@ from cms.plugin_pool import plugin_pool from .models import ( UngelichContactUsSection, UngelichTextSection, Service, ServiceItem, About, AboutItem, SectionWithImage, UngleichServiceItem, UngleichHeader, - UngleichHeaderItem + UngleichHeaderItem, UngleichProductItem, UngleichProduct ) @@ -208,4 +208,36 @@ class UngleichHeaderItemPlugin(CMSPluginBase): context, instance, placeholder ) context['instance'] = instance - return context \ No newline at end of file + return context + + +@plugin_pool.register_plugin +class UngleichProductsPlugin(CMSPluginBase): + name = "ungleich Products Plugin" + model = UngleichProduct + render_template = "ungleich_page/ungleich/section_products.html" + cache = False + allow_children = True + child_classes = ['UngleichProductsItemPlugin'] + + def render(self, context, instance, placeholder): + context['product_instance'] = instance + context['section_id'] = get_section_id(instance, 'products') + return context + + +@plugin_pool.register_plugin +class UngleichProductsItemPlugin(CMSPluginBase): + name = "ungleich Product Item Plugin" + model = UngleichProductItem + render_template = "ungleich_page/ungleich/_products_item.html" + cache = False + require_parent = True + parent_classes = ['UngleichProductsPlugin'] + + def render(self, context, instance, placeholder): + context = super(UngleichProductsItemPlugin, self).render( + context, instance, placeholder + ) + context['instance'] = instance + return context diff --git a/ungleich_page/migrations/0011_ungleichproduct_ungleichproductitem.py b/ungleich_page/migrations/0011_ungleichproduct_ungleichproductitem.py new file mode 100644 index 00000000..c4984f5a --- /dev/null +++ b/ungleich_page/migrations/0011_ungleichproduct_ungleichproductitem.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-11-21 19:04 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('ungleich_page', '0010_auto_20171119_1404'), + ] + + operations = [ + migrations.CreateModel( + name='UngleichProduct', + fields=[ + ('service_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.Service')), + ('section_class', models.CharField(blank=True, default='', max_length=100)), + ], + options={ + 'abstract': False, + }, + bases=('ungleich_page.service',), + ), + migrations.CreateModel( + name='UngleichProductItem', + fields=[ + ('serviceitem_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.ServiceItem')), + ('url', models.URLField(blank=True, default='', max_length=300)), + ], + options={ + 'abstract': False, + }, + bases=('ungleich_page.serviceitem',), + ), + ] diff --git a/ungleich_page/models.py b/ungleich_page/models.py index d1e0199b..f936f23b 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -115,4 +115,12 @@ class UngleichHeaderItem(CMSPlugin): related_name="ungleich_header_item_image", on_delete=models.SET_NULL ) - description = HTMLField() \ No newline at end of file + description = HTMLField() + + +class UngleichProductItem(ServiceItem): + url = models.URLField(max_length=300, default="", blank=True) + + +class UngleichProduct(Service): + section_class = models.CharField(max_length=100, default="", blank=True) \ No newline at end of file From 609a49cdbb825c6aa7dbaa54884758d7c62c36ad Mon Sep 17 00:00:00 2001 From: PCoder Date: Wed, 22 Nov 2017 00:20:06 +0100 Subject: [PATCH 24/77] Add section_products and _products_item templates --- .../ungleich/_products_item.html | 6 ++++++ .../ungleich/section_products.html | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 ungleich_page/templates/ungleich_page/ungleich/_products_item.html create mode 100644 ungleich_page/templates/ungleich_page/ungleich/section_products.html diff --git a/ungleich_page/templates/ungleich_page/ungleich/_products_item.html b/ungleich_page/templates/ungleich_page/ungleich/_products_item.html new file mode 100644 index 00000000..0a09640d --- /dev/null +++ b/ungleich_page/templates/ungleich_page/ungleich/_products_item.html @@ -0,0 +1,6 @@ + +
+

{{ instance.title }}

+

 

+

{{ instance.description }}

+
\ No newline at end of file diff --git a/ungleich_page/templates/ungleich_page/ungleich/section_products.html b/ungleich_page/templates/ungleich_page/ungleich/section_products.html new file mode 100644 index 00000000..8eb2f312 --- /dev/null +++ b/ungleich_page/templates/ungleich_page/ungleich/section_products.html @@ -0,0 +1,20 @@ +{% load cms_tags custom_tags %} +
+
+
+
+
+

{{ product_instance.title }}

+

{{ product_instance.sub_title }}

+
+
+
+ {% for plugin in product_instance.child_plugin_instances %} +
+ {% render_plugin plugin %} +
+ {% endfor %} +
+
+
+
\ No newline at end of file From 85289c2eeddc7682e6c66a94469464b2fb95f6dd Mon Sep 17 00:00:00 2001 From: PCoder Date: Thu, 23 Nov 2017 09:45:38 +0100 Subject: [PATCH 25/77] Add ungleich customer section, templates and migration --- ungleich_page/cms_plugins.py | 35 +++++++++++++- ...2_ungleichcustomer_ungleichcustomeritem.py | 46 +++++++++++++++++++ ungleich_page/models.py | 22 ++++++++- .../ungleich/_customer_item.html | 2 + .../ungleich/section_customers.html | 35 ++++++++++++++ 5 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 ungleich_page/migrations/0012_ungleichcustomer_ungleichcustomeritem.py create mode 100644 ungleich_page/templates/ungleich_page/ungleich/_customer_item.html create mode 100644 ungleich_page/templates/ungleich_page/ungleich/section_customers.html diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 1b10375a..d7c3c1a6 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -4,7 +4,8 @@ from cms.plugin_pool import plugin_pool from .models import ( UngelichContactUsSection, UngelichTextSection, Service, ServiceItem, About, AboutItem, SectionWithImage, UngleichServiceItem, UngleichHeader, - UngleichHeaderItem, UngleichProductItem, UngleichProduct + UngleichHeaderItem, UngleichProductItem, UngleichProduct, UngleichCustomer, + UngleichCustomerItem ) @@ -241,3 +242,35 @@ class UngleichProductsItemPlugin(CMSPluginBase): ) context['instance'] = instance return context + + +@plugin_pool.register_plugin +class UngleichCustomerSectionPlugin(CMSPluginBase): + name = "ungleich Customer Section Plugin" + model = UngleichCustomer + render_template = "ungleich_page/ungleich/section_customers.html" + cache = False + allow_children = True + child_classes = ['UngleichCustomerItemPlugin'] + + def render(self, context, instance, placeholder): + context['customer_instance'] = instance + context['section_id'] = get_section_id(instance, 'customer') + return context + + +@plugin_pool.register_plugin +class UngleichCustomerItemPlugin(CMSPluginBase): + name = "ungleich Customer Item Plugin" + model = UngleichCustomerItem + render_template = "ungleich_page/ungleich/_customer_item.html" + cache = False + require_parent = True + parent_classes = ['UngleichCustomerSectionPlugin'] + + def render(self, context, instance, placeholder): + context = super(UngleichCustomerItemPlugin, self).render( + context, instance, placeholder + ) + context['instance'] = instance + return context diff --git a/ungleich_page/migrations/0012_ungleichcustomer_ungleichcustomeritem.py b/ungleich_page/migrations/0012_ungleichcustomer_ungleichcustomeritem.py new file mode 100644 index 00000000..148ce241 --- /dev/null +++ b/ungleich_page/migrations/0012_ungleichcustomer_ungleichcustomeritem.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-11-23 08:11 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import djangocms_text_ckeditor.fields +import filer.fields.image + + +class Migration(migrations.Migration): + + dependencies = [ + ('filer', '0005_auto_20171015_0703'), + ('cms', '0014_auto_20160404_1908'), + ('ungleich_page', '0011_ungleichproduct_ungleichproductitem'), + ] + + operations = [ + migrations.CreateModel( + name='UngleichCustomer', + fields=[ + ('service_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.Service')), + ('section_class', models.CharField(blank=True, default='', max_length=100)), + ('carousel_data_interval', models.IntegerField(default=3000)), + ('bottom_text', djangocms_text_ckeditor.fields.HTMLField(default='

*ungleich means not equal to (≠) U+2260.

')), + ], + options={ + 'abstract': False, + }, + bases=('ungleich_page.service',), + ), + migrations.CreateModel( + name='UngleichCustomerItem', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('url', models.URLField(blank=True, default='', max_length=300)), + ('description', djangocms_text_ckeditor.fields.HTMLField()), + ('image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='customer_item_image', to='filer.Image')), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), + ] diff --git a/ungleich_page/models.py b/ungleich_page/models.py index f936f23b..9024ac28 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -123,4 +123,24 @@ class UngleichProductItem(ServiceItem): class UngleichProduct(Service): - section_class = models.CharField(max_length=100, default="", blank=True) \ No newline at end of file + section_class = models.CharField(max_length=100, default="", blank=True) + + +class UngleichCustomer(Service): + section_class = models.CharField(max_length=100, default="", blank=True) + carousel_data_interval = models.IntegerField(default=3000) + bottom_text = HTMLField( + default='

*ungleich means ' + 'not equal to (≠) U+2260.

' + ) + + +class UngleichCustomerItem(CMSPlugin): + image = FilerImageField( + null=True, + blank=True, + related_name="customer_item_image", + on_delete=models.SET_NULL + ) + url = models.URLField(max_length=300, default="", blank=True) + description = HTMLField() diff --git a/ungleich_page/templates/ungleich_page/ungleich/_customer_item.html b/ungleich_page/templates/ungleich_page/ungleich/_customer_item.html new file mode 100644 index 00000000..794bcb06 --- /dev/null +++ b/ungleich_page/templates/ungleich_page/ungleich/_customer_item.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ungleich_page/templates/ungleich_page/ungleich/section_customers.html b/ungleich_page/templates/ungleich_page/ungleich/section_customers.html new file mode 100644 index 00000000..afe67b2a --- /dev/null +++ b/ungleich_page/templates/ungleich_page/ungleich/section_customers.html @@ -0,0 +1,35 @@ +{% load cms_tags custom_tags %} +
+
+
+

{{ customer_instance.title }}

+

{{ customer_instance.sub_title }}

+
+
+
+ + + +
+
+
+
+ {{customer_instance.bottom_text}} +
+
\ No newline at end of file From 0fff040a9be8ab92758dbf097e1bd3ebc2590d66 Mon Sep 17 00:00:00 2001 From: PCoder Date: Thu, 23 Nov 2017 09:46:42 +0100 Subject: [PATCH 26/77] Use forloop.counter --- .../templates/ungleich_page/ungleich/section_products.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ungleich_page/templates/ungleich_page/ungleich/section_products.html b/ungleich_page/templates/ungleich_page/ungleich/section_products.html index 8eb2f312..06e6632d 100644 --- a/ungleich_page/templates/ungleich_page/ungleich/section_products.html +++ b/ungleich_page/templates/ungleich_page/ungleich/section_products.html @@ -10,7 +10,7 @@
{% for plugin in product_instance.child_plugin_instances %} -
+
{% render_plugin plugin %}
{% endfor %} From 7fa23577f62fa788e11772444bebf3f5f56a63b8 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 23 Nov 2017 11:35:39 +0100 Subject: [PATCH 27/77] Change 0005_auto_20171015_0703 dependency to 0004_auto_20160328_1434 --- ungleich_page/migrations/0008_ungleichserviceitem.py | 2 +- .../migrations/0009_ungleichheader_ungleichheaderitem.py | 2 +- .../migrations/0012_ungleichcustomer_ungleichcustomeritem.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ungleich_page/migrations/0008_ungleichserviceitem.py b/ungleich_page/migrations/0008_ungleichserviceitem.py index 3a029110..2037dcf6 100644 --- a/ungleich_page/migrations/0008_ungleichserviceitem.py +++ b/ungleich_page/migrations/0008_ungleichserviceitem.py @@ -10,7 +10,7 @@ import filer.fields.image class Migration(migrations.Migration): dependencies = [ - ('filer', '0005_auto_20171015_0703'), + ('filer', '0004_auto_20160328_1434'), ('ungleich_page', '0007_auto_20171117_1011'), ] diff --git a/ungleich_page/migrations/0009_ungleichheader_ungleichheaderitem.py b/ungleich_page/migrations/0009_ungleichheader_ungleichheaderitem.py index 499917a2..2faabe45 100644 --- a/ungleich_page/migrations/0009_ungleichheader_ungleichheaderitem.py +++ b/ungleich_page/migrations/0009_ungleichheader_ungleichheaderitem.py @@ -11,7 +11,7 @@ import filer.fields.image class Migration(migrations.Migration): dependencies = [ - ('filer', '0005_auto_20171015_0703'), + ('filer', '0004_auto_20160328_1434'), ('cms', '0014_auto_20160404_1908'), ('ungleich_page', '0008_ungleichserviceitem'), ] diff --git a/ungleich_page/migrations/0012_ungleichcustomer_ungleichcustomeritem.py b/ungleich_page/migrations/0012_ungleichcustomer_ungleichcustomeritem.py index 148ce241..85b1c203 100644 --- a/ungleich_page/migrations/0012_ungleichcustomer_ungleichcustomeritem.py +++ b/ungleich_page/migrations/0012_ungleichcustomer_ungleichcustomeritem.py @@ -11,7 +11,7 @@ import filer.fields.image class Migration(migrations.Migration): dependencies = [ - ('filer', '0005_auto_20171015_0703'), + ('filer', '0004_auto_20160328_1434'), ('cms', '0014_auto_20160404_1908'), ('ungleich_page', '0011_ungleichproduct_ungleichproductitem'), ] From 6ec7fc182b4a60fb8d2ff49205347fb3fc260d81 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 23 Nov 2017 13:02:08 +0100 Subject: [PATCH 28/77] Add ungleich HTML only template --- ungleich_page/cms_plugins.py | 17 ++++++++++- .../migrations/0013_ungleichhtmlonly.py | 29 +++++++++++++++++++ ungleich_page/models.py | 4 +++ .../ungleich_page/ungleich/html_block.html | 5 ++++ 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 ungleich_page/migrations/0013_ungleichhtmlonly.py create mode 100644 ungleich_page/templates/ungleich_page/ungleich/html_block.html diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index d7c3c1a6..52762a1b 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -5,7 +5,7 @@ from .models import ( UngelichContactUsSection, UngelichTextSection, Service, ServiceItem, About, AboutItem, SectionWithImage, UngleichServiceItem, UngleichHeader, UngleichHeaderItem, UngleichProductItem, UngleichProduct, UngleichCustomer, - UngleichCustomerItem + UngleichCustomerItem, UngleichHTMLOnly ) @@ -274,3 +274,18 @@ class UngleichCustomerItemPlugin(CMSPluginBase): ) context['instance'] = instance return context + + +@plugin_pool.register_plugin +class UngleichHTMLPlugin(CMSPluginBase): + name = "ungleich HTML Plugin" + model = UngleichHTMLOnly + render_template = "ungleich_page/ungleich/html_block.html" + cache = False + + def render(self, context, instance, placeholder): + context = super(UngleichHTMLPlugin, self).render( + context, instance, placeholder + ) + context['instance'] = instance + return context diff --git a/ungleich_page/migrations/0013_ungleichhtmlonly.py b/ungleich_page/migrations/0013_ungleichhtmlonly.py new file mode 100644 index 00000000..c726a5a0 --- /dev/null +++ b/ungleich_page/migrations/0013_ungleichhtmlonly.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-11-23 11:49 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import djangocms_text_ckeditor.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0014_auto_20160404_1908'), + ('ungleich_page', '0012_ungleichcustomer_ungleichcustomeritem'), + ] + + operations = [ + migrations.CreateModel( + name='UngleichHTMLOnly', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('HTML', djangocms_text_ckeditor.fields.HTMLField()), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), + ] diff --git a/ungleich_page/models.py b/ungleich_page/models.py index 9024ac28..2113b4c0 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -144,3 +144,7 @@ class UngleichCustomerItem(CMSPlugin): ) url = models.URLField(max_length=300, default="", blank=True) description = HTMLField() + + +class UngleichHTMLOnly(CMSPlugin): + HTML = HTMLField() diff --git a/ungleich_page/templates/ungleich_page/ungleich/html_block.html b/ungleich_page/templates/ungleich_page/ungleich/html_block.html new file mode 100644 index 00000000..65c7b792 --- /dev/null +++ b/ungleich_page/templates/ungleich_page/ungleich/html_block.html @@ -0,0 +1,5 @@ +{% load cms_tags static %} +{{instance.HTML}} +{% for plugin in instance.child_plugin_instances %} + {% render_plugin plugin %} +{% endfor %} From db4362af01a7e6650773fd99619b4d8c2f77a957 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 23 Nov 2017 14:52:21 +0100 Subject: [PATCH 29/77] Remove unused includes in ungleich_cms_page --- .../ungleich_page/ungleich_cms_page.html | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/ungleich_page/templates/ungleich_page/ungleich_cms_page.html b/ungleich_page/templates/ungleich_page/ungleich_cms_page.html index 9f863f1f..763e25c1 100644 --- a/ungleich_page/templates/ungleich_page/ungleich_cms_page.html +++ b/ungleich_page/templates/ungleich_page/ungleich_cms_page.html @@ -89,27 +89,6 @@ {% placeholder 'Ungleich Page Contents' %} - - {% include "ungleich_page/includes/_header.html" %} - - - {% include "ungleich_page/includes/_services.html" %} - - - {% include "ungleich_page/includes/_portfolio.html" %} - - - {% include "ungleich_page/includes/_about.html" %} - - - {% include "ungleich_page/includes/_team.html" %} - - - {% include "ungleich_page/includes/_softwares.html" %} - - - {% include "ungleich_page/includes/_contact_us.html" %} - {% include "ungleich_page/includes/_footer.html" %} From f4b252ff090d3116205392989d1a144192a19268 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 23 Nov 2017 17:15:19 +0100 Subject: [PATCH 30/77] Show carousel indicators only if we have more than 1 item --- .../templates/ungleich_page/ungleich/header.html | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ungleich_page/templates/ungleich_page/ungleich/header.html b/ungleich_page/templates/ungleich_page/ungleich/header.html index 89def4ee..9cf759e6 100644 --- a/ungleich_page/templates/ungleich_page/ungleich/header.html +++ b/ungleich_page/templates/ungleich_page/ungleich/header.html @@ -2,12 +2,13 @@