from cms.extensions import TitleExtension from cms.extensions.extension_pool import extension_pool from django.db import models class ExtensionModel(TitleExtension): name = models.CharField(max_length=255) class Meta: verbose_name = 'Extension' def __str__(self): return self.name extension_pool.register(ExtensionModel)
help_text=_(u'"@" sign not required.')) twitter_site = models.CharField(_(u'Website Twitter Account'), max_length=255, default='', blank=True, help_text=_(u'"@" sign not required.')) twitter_type = models.CharField(_(u'Resource type'), max_length=255, choices=TWITTER_TYPE_CHOICES) gplus_author = models.CharField(_(u'Author Google+ URL'), max_length=255, default='', blank=True, help_text=_(u'Use the Google+ Name (together with "+") or the complete path to the page.')) gplus_type = models.CharField(_(u'Resource type'), max_length=255, choices=GPLUS_TYPE_CHOICES, help_text=_(u'Use Article for generic pages.')) class Meta: verbose_name = _(u'Page meta info (all languages)') extension_pool.register(PageMeta) class TitleMeta(TitleExtension): image = FilerFileField(null=True, blank=True, related_name="djangocms_page_meta_title", help_text=_(u'If empty, page image will be used for all languages.')) keywords = models.CharField(max_length=400, default='', blank=True) description = models.CharField(max_length=400, default='', blank=True) og_description = models.CharField(_(u'Facebook Description'), max_length=400, default='', blank=True) twitter_description = models.CharField(_(u'Twitter Description'), max_length=140, default='', blank=True) gplus_description = models.CharField(_(u'Google+ Description'), max_length=400, default='', blank=True) @property def locale(self): if self.extended_object.language.find("_") > -1: return self.extended_object.language
from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool def content_file_name(instance, filename): return '/'.join(['app_info', str(instance.pk), filename]) class AppInfoExtension(PageExtension): feature_image = models.ImageField(null=True, blank=True, upload_to=content_file_name) icon_image = models.ImageField(null=True, blank=True, upload_to=content_file_name) apple_store_id = models.CharField(null=True, blank=True, max_length=256) google_store_id = models.CharField(null=True, blank=True, max_length=256) extension_pool.register(AppInfoExtension) class ContactUs(models.Model): category = models.CharField(max_length=128) name = models.CharField(max_length=256) phone = models.CharField(max_length=128) email = models.CharField(max_length=256) message = models.TextField() received = models.DateTimeField(default=datetime.datetime.now)
from django.utils.translation import ugettext_lazy as _ from taggit_autosuggest.managers import TaggableManager from .utils import get_cache_key class PageTags(PageExtension): tags = TaggableManager() def copy_relations(self, oldinstance, language): """ Needed to copy tags when publishing page """ self.tags.set(*oldinstance.tags.all()) class Meta: verbose_name = _('Page tags (all languages)') extension_pool.register(PageTags) class TitleTags(TitleExtension): tags = TaggableManager() def copy_relations(self, oldinstance, language): """ Needed to copy tags when publishing page """ self.tags.set(*oldinstance.tags.all()) class Meta: verbose_name = _('Page tags (language-dependent)') extension_pool.register(TitleTags) # Cache cleanup when deleting pages / editing page extensions
verbose_name=_('Catalog'), null=True) def title(self): return self.catalog.get_page().get_title() def pages(self): if self.display_level == self.CHILD: pages = self.catalog.get_page().get_descendants() elif self.display_level == self.CURRENT: pages = self.catalog.get_page().get_leafnodes() else: pages = self.catalog.get_page().get_descendants() return pages[:self.page_count] def get_absolute_url(self): return self.catalog.get_page().get_absolute_url() class CatalogExtension(PageExtension): is_catalog = models.BooleanField(_('This page is a catalog'), default=True) def __unicode__(self): return self.get_page().get_title() def __str__(self): return self.__unicode__().encode("utf-8") extension_pool.register(CatalogExtension)
page = models.ForeignKey( Page, on_delete=models.CASCADE, related_name="blogpost_plugins", limit_choices_to={ "publisher_is_draft": True, "blogpost__isnull": False }, ) variant = models.CharField( _("variant"), max_length=50, choices=defaults.BLOGPOST_GLIMPSE_VARIANT_CHOICES, help_text=_("Optional glimpse variant for a custom look."), blank=True, null=True, ) class Meta: db_table = "richie_blog_post_plugin" verbose_name = _("blog post plugin") verbose_name_plural = _("blog post plugins") def __str__(self): """Human representation of a page plugin""" return self.page.get_title() extension_pool.register(BlogPost)
from django.utils.translation import ugettext_lazy as _ from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool MENU_ITEM_CSS_CLASS_CHOICES = ( ("featured", ".featured"), ) BODY_CSS_CLASS_CHOICES = ( ("serious", ".serious"), ("playful", ".playful"), ) class CSSExtension(PageExtension): menu_item_css_class = models.CharField( _("Menu Item CSS Class"), max_length=200, blank=True, choices=MENU_ITEM_CSS_CLASS_CHOICES, ) body_css_class = models.CharField( _("Body CSS Class"), max_length=200, blank=True, choices=BODY_CSS_CLASS_CHOICES, ) extension_pool.register(CSSExtension)
from django.db import models # page extension imports from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool # django filer imports from filer.fields.image import FilerImageField class HeaderOptionsExtension(PageExtension): header_subtitle = models.CharField(max_length=32, blank=True) header_image = FilerImageField(blank=True) header_image_source = models.CharField(max_length=32, blank=True) header_image_source_url = models.URLField(blank=True) header_image_license = models.CharField(max_length=32, blank=True) header_image_license_url = models.URLField(blank=True) extension_pool.register(HeaderOptionsExtension)
from django.db import models from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool class TheselectionExtension(PageExtension): subtitle = models.CharField(max_length=30) backgroundcolor = models.CharField(max_length=9) extension_pool.register(TheselectionExtension)
ICON_CATALOG = 'http://materializecss.com/icons.html' RATING_CHOICES = [(1, '1 star'), (2, '2 stars'), (3, '3 stars'), (4, '4 stars'), (5, '5 stars') ] class IconNameExtension(PageExtension): icon_name = models.CharField( _('Materialize icon name'), max_length=80, null=False, blank=False, help_text=_('Choose an icon at ' + ICON_CATALOG)) extension_pool.register(IconNameExtension) class RatingExtension(PageExtension): include_rating = models.BooleanField(default=False) extension_pool.register(RatingExtension) class SocialMediaExtension(PageExtension): include_social_media = models.BooleanField(default=False) extension_pool.register(SocialMediaExtension) class PageRating(models.Model):
@author: dennis ''' import datetime from django.db import models from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool def content_file_name(instance, filename): return '/'.join(['app_info', str(instance.pk), filename]) class AppInfoExtension(PageExtension): feature_image = models.ImageField(null=True, blank=True, upload_to=content_file_name) icon_image = models.ImageField(null=True, blank=True, upload_to=content_file_name) apple_store_id = models.CharField(null=True, blank=True, max_length=256) google_store_id = models.CharField(null=True, blank=True, max_length=256) extension_pool.register(AppInfoExtension) class ContactUs(models.Model): category = models.CharField(max_length=128) name = models.CharField(max_length=256) phone = models.CharField(max_length=128) email = models.CharField(max_length=256) message = models.TextField() received = models.DateTimeField(default=datetime.datetime.now)
page_count = models.PositiveSmallIntegerField(_('How much page display'), default=5) display_date = models.BooleanField(_('Show page date in line'), default=True, blank=True) catalog = models.ForeignKey('CatalogExtension', verbose_name=_('Catalog'), null=True) def title(self): return self.catalog.get_page().get_title() def pages(self): if self.display_level == self.CHILD: pages = self.catalog.get_page().get_descendants() elif self.display_level == self.CURRENT: pages = self.catalog.get_page().get_leafnodes() else: pages = self.catalog.get_page().get_descendants() return pages[:self.page_count] def get_absolute_url(self): return self.catalog.get_page().get_absolute_url() class CatalogExtension(PageExtension): is_catalog = models.BooleanField(_('This page is a catalog'), default=True) def __unicode__(self): return self.get_page().get_title() def __str__(self): return self.__unicode__().encode("utf-8") extension_pool.register(CatalogExtension)
class Metadata(TitleExtension): """ Custom titles and META fields for the page """ ROBOTS_CHOICES = ( ('index, follow', 'Index, Follow'), ('index, nofollow', 'Index, No Follow'), ('noindex, follow', 'No Index, Follow'), ('noindex, nofollow', 'No Index, No Follow'), ) h1 = models.CharField(verbose_name=_('H1'), max_length=255, blank=True, null=True) keywords = models.TextField(verbose_name=_('Meta: Keywords'), blank=True, null=True) copyright = models.CharField(verbose_name=_('Meta: Copyright'), blank=True, null=True, max_length=255) author = models.CharField(verbose_name=_('Meta: Author'), blank=True, null=True, max_length=255) meta_robots = models.CharField(verbose_name=_('Meta: Robots'), choices=ROBOTS_CHOICES, default='index,follow', max_length=17) @property def meta_robots_value(self): """ Returns Verbose Value of the meta_robots field :return: str """ return dict(self.ROBOTS_CHOICES)[self.meta_robots] extension_pool.register(Metadata)
from cms.models.pluginmodel import CMSPlugin from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool from django.db import models from filer.fields.image import FilerImageField class DiscourseTopicModel(CMSPlugin): topic = models.CharField(max_length=100, blank=True, null=True) def __unicode__(self): return self.topic or "(none)" class CallToActionModel(CMSPlugin): title = models.CharField(max_length=500) description = models.CharField(max_length=500, blank=True, null=True) url = models.CharField(max_length=500, blank=True, null=True) button_text = models.CharField(max_length=100) def __unicode__(self): return self.title class SpeakupPageExtension(PageExtension): header_image = FilerImageField(null=True, blank=True) extension_pool.register(SpeakupPageExtension)
from django.db import models from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool class ColorExtension(PageExtension): color = models.CharField("color", default=None, help_text="Please provide an HTML color code.", max_length=8) extension_pool.register(ColorExtension)
from django.db import models from cms.extensions import PageExtension, TitleExtension from cms.extensions.extension_pool import extension_pool from distutils.version import LooseVersion class MyPageExtension(PageExtension): extra = models.CharField(blank=True, default="", max_length=255) if LooseVersion(django.get_version()) < LooseVersion("1.5"): favorite_users = models.ManyToManyField(User, blank=True, null=True) else: favorite_users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, null=True) def copy_relations(self, other, language): for favorite_user in other.favorite_users.all(): favorite_user.pk = None favorite_user.mypageextension = self favorite_user.save() extension_pool.register(MyPageExtension) class MyTitleExtension(TitleExtension): extra_title = models.CharField(blank=True, default="", max_length=255) extension_pool.register(MyTitleExtension)
from cms.extensions import PageExtension, TitleExtension from cms.extensions.extension_pool import extension_pool class MyPageExtension(PageExtension): extra = models.CharField(blank=True, default='', max_length=255) favorite_users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True) def copy_relations(self, other, language): for favorite_user in other.favorite_users.all(): favorite_user.pk = None favorite_user.mypageextension = self favorite_user.save() extension_pool.register(MyPageExtension) # extension_pool.register can be used also as a decorator @extension_pool.register class MyTitleExtension(TitleExtension): extra_title = models.CharField(blank=True, default='', max_length=255) class MultiTablePageExtensionParent(models.Model): extension_parent_field = models.CharField(blank=True, default='', max_length=255) class MultiTablePageExtension(MultiTablePageExtensionParent, PageExtension): multitable_extra = models.CharField(blank=True, default='', max_length=255)
Facebook page plugin (widget) """ facebook_page_url = models.URLField(_('facebook page url')) tabs = models.CharField(_('tabs'), max_length=255, default='timeline') width = models.PositiveSmallIntegerField( _('width'), blank=True, null=True, validators=[MinValueValidator(180), MaxValueValidator(500)] ) height = models.PositiveSmallIntegerField( _('height'), blank=True, null=True, validators=[MinValueValidator(70)] ) small_header = models.BooleanField(_('use small header'), default=False) hide_cover_photo = models.BooleanField(_('hide cover photo'), default=False) adapt_to_container_width = models.BooleanField(_('adapt to container width'), default=True) show_friends_faces = models.BooleanField(_('show friend\'s faces'), default=True) class Meta: verbose_name = _('facebook page plugin') verbose_name_plural = _('facebook page plugins') def __str__(self): return self.facebook_page_url class IconExtension(PageExtension): image = FilerImageField(blank=True, null=True, on_delete=models.SET_NULL) extension_pool.register(IconExtension)
from django.db import models from django.utils.translation import ugettext_lazy as _ from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool ICON_CATALOG = 'http://materializecss.com/icons.html' class IconNameExtension(PageExtension): icon_name = models.CharField( _('Materialize icon name'), max_length=80, null=False, blank=False, help_text=_('Choose an icon at ' + ICON_CATALOG)) extension_pool.register(IconNameExtension)
from django.db import models from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool from filer.fields.image import FilerImageField # Create your models here. class UngleichPage(PageExtension): #image_header = models.ImageField(upload_to='image_header') image = FilerImageField(null=True, blank=True, related_name="ungleinch_page_image") class Meta: app_label = 'ungleich' extension_pool.register(UngleichPage)
from django.db import models from django.utils.translation import get_language from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool from cms.utils.i18n import get_language_code class PageBannerExtension(PageExtension): banner_image = models.ImageField(upload_to='banners') background_color = models.CharField(max_length=50, default='', blank=True) font_color = models.CharField(max_length=50, default='', blank=True) def __unicode__(self): return self.extended_object.get_title( get_language_code(get_language())) extension_pool.register(PageBannerExtension)
from .utils import get_cache_key class PageTags(PageExtension): tags = TaggableManager() def copy_relations(self, oldinstance, language): """ Needed to copy tags when publishing page """ self.tags.set(*oldinstance.tags.all()) class Meta: verbose_name = _('Page tags (all languages)') extension_pool.register(PageTags) class TitleTags(TitleExtension): tags = TaggableManager() def copy_relations(self, oldinstance, language): """ Needed to copy tags when publishing page """ self.tags.set(*oldinstance.tags.all()) class Meta: verbose_name = _('Page tags (language-dependent)') extension_pool.register(TitleTags)
def render(self, context, instance, placeholder): context = super(WorkingGroupPlugin, self)\ .render(context, instance, placeholder) context['workinggroups'] = WorkingGroup.objects.active() return context plugin_pool.register_plugin(WorkingGroupPlugin) class SignupFormPlugin(CMSPluginBase): model = SignupForm module = "OKF" name = _("Signup Form") render_template = "organisation/signup_form.html" def render(self, context, instance, placeholder): context = super(SignupFormPlugin, self)\ .render(context, instance, placeholder) context['title'] = instance.title context['description'] = instance.description return context plugin_pool.register_plugin(SignupFormPlugin) extension_pool.register(SideBarExtension)
from cms.models import CMSPlugin from django.db import models from django.utils.translation import ugettext_lazy as _ from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool class ArticlesPlugin(CMSPlugin): limit = models.PositiveIntegerField(_('Articles per page')) class TeaserExtension(PageExtension): title = models.CharField(_('title'), max_length=255, blank=True, null=True) image = models.ImageField( _('image'), upload_to='teaser', blank=True, null=True) description = models.TextField(_('description'), blank=True, null=True) extension_pool.register(TeaserExtension)
# -*- coding: utf-8 -*- from django.db import models from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool class DjuPageThumbnail(PageExtension): image = models.ImageField(upload_to='pageimages', blank=True) extension_pool.register(DjuPageThumbnail)
""" Django models that store data required for OGO's CMS extensions """ from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool from filer.fields.image import FilerImageField class FeatureImageExtension(PageExtension): """ Extend the CMS page model to add OGO-specific fields """ feature_image = FilerImageField(blank=True) extension_pool.register(FeatureImageExtension)
from django.db import models from django.utils.translation import ugettext as _ from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool class SitemapExtension(PageExtension): show_on_sitemap = models.BooleanField(_('Show on sitemap'), null=False, default=True) show_on_xml_sitemap = models.BooleanField(_('Show on xml sitemap'), null=False, default=True) noindex = models.BooleanField(_('noindex'), null=False, default=False) nofollow = models.BooleanField(_('nofollow'), null=False, default=False) canonical_url = models.CharField(blank=True, null=True, max_length=255, verbose_name=_('Canonical URL')) extension_pool.register(SitemapExtension)
related_name='preview_image_extensions' ) teaser = models.TextField(verbose_name=_('teaser'), blank=True) show_preview = models.BooleanField( verbose_name=_('show preview?'), default=True ) extra_classes = models.CharField(verbose_name=_('extra classes'), max_length=512, blank=True) class Meta: verbose_name=_('Page Image and Teaser') def get_preview_image(self): return self.preview_image or self.image extension_pool.register(ImageExtension) class ChildPagePreviewPlugin(CMSPlugin): STYLE_CHOICES = getattr( settings, 'DJANGOCMS_PAGE_IMAGE_CPP_STYLE_CHOICES', [] ) DEFAULT_STYLE = getattr( settings, 'DJANGOCMS_PAGE_IMAGE_CPP_DEFAULT_STYLE', '' ) style = models.CharField( _('style'),
# -*- coding: utf-8 -*- from __future__ import unicode_literals from jsonfield.fields import JSONField from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool class RevealExtension(PageExtension): options = JSONField(blank=True, default={}) class Meta: db_table = 'cmsplugin_cascade_reveal' verbose_name = "Reveal Option" verbose_name_plural = "Reveal Options" def __str__(self): return PageExtension.__str__(self) extension_pool.register(RevealExtension)
) class Meta: db_table = 'cmsplugin_cascade_page' verbose_name = verbose_name_plural = _("Cascade Page Settings") def __str__(self): return self.get_page().get_title() @classmethod def assure_relation(cls, cms_page): """ Assure that we have a foreign key relation, pointing from CascadePage onto CMSPage. """ try: cms_page.cascadepage except cls.DoesNotExist: cls.objects.create(extended_object=cms_page) @classmethod def delete_cascade_element(cls, instance=None, **kwargs): if isinstance(instance, CascadeModelBase): try: instance.placeholder.page.cascadepage.glossary['element_ids'].pop(str(instance.pk)) instance.placeholder.page.cascadepage.save() except (AttributeError, KeyError): pass extension_pool.register(CascadePage) models.signals.pre_delete.connect(CascadePage.delete_cascade_element, dispatch_uid='delete_cascade_element')
# ‐*‐ coding: utf‐8 ‐*‐ from django.db import models # page extension imports from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool # django filer imports from filer.fields.image import FilerImageField class PageFieldExtension(PageExtension): subtitle = models.CharField(max_length=255, blank=True) background_image = FilerImageField(blank=True) extension_pool.register(PageFieldExtension)
from django.utils.html import strip_tags from menu import invalidate_menu_cache from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool from cms.models.pluginmodel import CMSPlugin from django.db import models from tinymce import models as tinymodels class MenuExtension(PageExtension): show_on_top_menu = models.BooleanField(default=False) show_on_footer_menu = models.BooleanField(default=False) extension_pool.register(MenuExtension) def update_menu_settings(sender, **kwargs): invalidate_menu_cache() post_save.connect(update_menu_settings, sender=MenuExtension, dispatch_uid='update_menu_settings') class NewsletterSignups(models.Model): registered_date = models.DateTimeField(auto_now_add=True) email = models.CharField(max_length=300) class Meta: verbose_name = 'Newsletter Signup' verbose_name_plural = 'Newsletter Signups'
slideshow = PlaceholderField('richpage_slideshow', related_name='richpage_slideshow') class RichSlideshow(PageExtension): slideshow_title = models.CharField(max_length=100, default='Slideshow title') def save(self, *args, **kwargs): from cms.api import add_plugin if not self.pk: super(RichSlideshow, self).save(*args, **kwargs) page = self.extended_object placeholder = page.get_title_obj().richpage.slideshow language = settings.LANGUAGES[0][0] gallery_plugin = add_plugin(placeholder, GalleryCMSPlugin, language) data = {'folder_id': 1} # TODO add new folder for each slideshow child_plugin = add_plugin(placeholder, SlideFolderCMSPlugin, language, target=gallery_plugin, **data) else: super(RichSlideshow, self).save(*args, **kwargs) extension_pool.register(RichPage) extension_pool.register(RichSlideshow)