from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool from .cms_models import ( DCLBannerItemPluginModel, DCLBannerListPluginModel, DCLContactPluginModel, DCLFooterPluginModel, DCLLinkPluginModel, DCLNavbarDropdownPluginModel, DCLSectionIconPluginModel, DCLSectionImagePluginModel, DCLSectionPluginModel, DCLNavbarPluginModel, DCLSectionPromoPluginModel, DCLCustomPricingModel ) from .models import VMTemplate, VMPricing @plugin_pool.register_plugin class DCLSectionPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Section Plugin" model = DCLSectionPluginModel render_template = "datacenterlight/cms/section.html" cache = False allow_children = True child_classes = [ 'DCLSectionIconPlugin', 'DCLSectionImagePlugin', 'DCLSectionPromoPlugin', 'UngleichHTMLPlugin' ] def render(self, context, instance, placeholder): context = super(DCLSectionPlugin, self).render( context, instance, placeholder ) context['children_to_side'] = [] context['children_to_content'] = [] if instance.child_plugin_instances is not None: right_children = [ 'DCLSectionImagePluginModel', 'DCLSectionIconPluginModel' ] for child in instance.child_plugin_instances: if child.__class__.__name__ in right_children: context['children_to_side'].append(child) else: context['children_to_content'].append(child) return context @plugin_pool.register_plugin class DCLSectionIconPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Section Icon Plugin" model = DCLSectionIconPluginModel render_template = "datacenterlight/cms/section_icon.html" cache = False require_parent = True @plugin_pool.register_plugin class DCLSectionImagePlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Section Image Plugin" model = DCLSectionImagePluginModel render_template = "datacenterlight/cms/section_image.html" cache = False require_parent = True @plugin_pool.register_plugin class DCLSectionPromoPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Section Promo Plugin" model = DCLSectionPromoPluginModel render_template = "datacenterlight/cms/section_promo.html" cache = False @plugin_pool.register_plugin class DCLCalculatorPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Calculator Section Plugin" model = DCLSectionPluginModel render_template = "datacenterlight/cms/calculator.html" cache = False allow_children = True child_classes = [ 'DCLSectionPromoPlugin', 'UngleichHTMLPlugin', 'DCLCustomPricingPlugin' ] def render(self, context, instance, placeholder): context = super(DCLCalculatorPlugin, self).render( context, instance, placeholder ) context['templates'] = VMTemplate.objects.all() context['children_to_side'] = [] context['children_to_content'] = [] pricing_plugin_model = None for child in instance.child_plugin_instances: if child.__class__.__name__ == 'DCLCustomPricingModel': # The second clause is just to make sure we pick up the most # recent CustomPricing, if more than one is present if (pricing_plugin_model is None or child.pricing_id > pricing_plugin_model.model.pricing_id): pricing_plugin_model = child if pricing_plugin_model: context['vm_pricing'] = VMPricing.get_vm_pricing_by_name( name=pricing_plugin_model.pricing.name ) else: context['vm_pricing'] = VMPricing.get_default_pricing() if instance.child_plugin_instances is not None: context['children_to_content'].extend( instance.child_plugin_instances ) return context @plugin_pool.register_plugin class DCLCustomPricingPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Custom Pricing Plugin" model = DCLCustomPricingModel render_plugin = False @plugin_pool.register_plugin class DCLBannerListPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Banner List Plugin" model = DCLBannerListPluginModel render_template = "datacenterlight/cms/banner_list.html" cache = False allow_children = True child_classes = ['DCLBannerItemPlugin'] @plugin_pool.register_plugin class DCLBannerItemPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Banner Item Plugin" model = DCLBannerItemPluginModel render_template = "datacenterlight/cms/banner_item.html" cache = False require_parent = True parent_classes = ['DCLBannerListPlugin'] @plugin_pool.register_plugin class DCLNavbarPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Navbar Plugin" model = DCLNavbarPluginModel render_template = "datacenterlight/cms/navbar.html" cache = False allow_children = True child_classes = ['DCLLinkPlugin', 'DCLNavbarDropdownPlugin'] @plugin_pool.register_plugin class DCLNavbarDropdownPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Navbar Dropdown Plugin" model = DCLNavbarDropdownPluginModel render_template = "datacenterlight/cms/navbar_dropdown.html" cache = False allow_children = True child_classes = ['DCLLinkPlugin'] require_parent = True parent_classes = ['DCLNavbarPlugin'] @plugin_pool.register_plugin class DCLLinkPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Link Plugin" model = DCLLinkPluginModel render_template = "datacenterlight/cms/link.html" cache = False require_parent = True @plugin_pool.register_plugin class DCLContactPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Contact Plugin" model = DCLContactPluginModel render_template = "datacenterlight/cms/contact.html" cache = False @plugin_pool.register_plugin class DCLFooterPlugin(CMSPluginBase): module = "Datacenterlight" name = "DCL Footer Plugin" model = DCLFooterPluginModel render_template = "datacenterlight/cms/footer.html" cache = False allow_children = True child_classes = ['DCLLinkPlugin']