def create_page(title, template, language, menu_title=None, slug=None, apphook=None, redirect=None, meta_description=None, meta_keywords=None, created_by='python-api', parent=None, publication_date=None, publication_end_date=None, in_navigation=False, soft_root=False, reverse_id=None, navigation_extenders=None, published=False, site=None, login_required=False, limit_visibility_in_menu=VISIBILITY_ALL, position="last-child", overwrite_url=None): """ Create a CMS Page and it's title for the given language See docs/extending_cms/api_reference.rst for more info """ # ugly permissions hack if created_by and isinstance(created_by, auth.get_user_model()): _thread_locals.user = created_by created_by = created_by.username else: _thread_locals.user = None # validate template assert template in [tpl[0] for tpl in get_cms_setting('TEMPLATES')] # validate site if not site: site = Site.objects.get_current() else: assert isinstance(site, Site) # validate language: assert language in get_language_list(site), get_cms_setting('LANGUAGES').get(site.pk) # set default slug: if not slug: slug = _generate_valid_slug(title, parent, language) # validate and normalize apphook if apphook: application_urls = _verify_apphook(apphook) else: application_urls = None # validate parent if parent: assert isinstance(parent, Page) parent = Page.objects.get(pk=parent.pk) # validate publication date if publication_date: assert isinstance(publication_date, datetime.date) # validate publication end date if publication_end_date: assert isinstance(publication_end_date, datetime.date) # validate softroot assert get_cms_setting('SOFTROOT') or not soft_root if navigation_extenders: raw_menus = menu_pool.get_menus_by_attribute("cms_enabled", True) menus = [menu[0] for menu in raw_menus] assert navigation_extenders in menus # validate menu visibility accepted_limitations = (VISIBILITY_ALL, VISIBILITY_USERS, VISIBILITY_STAFF) assert limit_visibility_in_menu in accepted_limitations # validate position assert position in ('last-child', 'first-child', 'left', 'right') page = Page( created_by=created_by, changed_by=created_by, parent=parent, publication_date=publication_date, publication_end_date=publication_end_date, in_navigation=in_navigation, soft_root=soft_root, reverse_id=reverse_id, navigation_extenders=navigation_extenders, published=False, # will be published later template=template, site=site, login_required=login_required, limit_visibility_in_menu=limit_visibility_in_menu, ) page.insert_at(parent, position) page.save() create_title( language=language, title=title, menu_title=menu_title, slug=slug, apphook=application_urls, redirect=redirect, meta_description=meta_description, meta_keywords=meta_keywords, page=page, overwrite_url=overwrite_url ) if published: page.publish() del _thread_locals.user return page.reload()
def create_page(title, template, language, menu_title=None, slug=None, apphook=None, apphook_namespace=None, redirect=None, meta_description=None, created_by='python-api', parent=None, publication_date=None, publication_end_date=None, in_navigation=False, soft_root=False, reverse_id=None, navigation_extenders=None, published=False, site=None, login_required=False, limit_visibility_in_menu=VISIBILITY_ALL, position="last-child", overwrite_url=None, xframe_options=Page.X_FRAME_OPTIONS_INHERIT): """ Create a CMS Page and it's title for the given language See docs/extending_cms/api_reference.rst for more info """ # ugly permissions hack if created_by and isinstance(created_by, get_user_model()): _thread_locals.user = created_by created_by = getattr(created_by, get_user_model().USERNAME_FIELD) else: _thread_locals.user = None # validate template if not template == TEMPLATE_INHERITANCE_MAGIC: assert template in [tpl[0] for tpl in get_cms_setting('TEMPLATES')] get_template(template) # validate site if not site: site = Site.objects.get_current() else: assert isinstance(site, Site) # validate language: assert language in get_language_list(site), get_cms_setting( 'LANGUAGES').get(site.pk) # set default slug: if not slug: slug = _generate_valid_slug(title, parent, language) # validate parent if parent: assert isinstance(parent, Page) parent = Page.objects.get(pk=parent.pk) # validate publication date if publication_date: assert isinstance(publication_date, datetime.date) # validate publication end date if publication_end_date: assert isinstance(publication_end_date, datetime.date) if navigation_extenders: raw_menus = menu_pool.get_menus_by_attribute("cms_enabled", True) menus = [menu[0] for menu in raw_menus] assert navigation_extenders in menus # validate menu visibility accepted_limitations = (VISIBILITY_ALL, VISIBILITY_USERS, VISIBILITY_STAFF) assert limit_visibility_in_menu in accepted_limitations # validate position assert position in ('last-child', 'first-child', 'left', 'right') # validate and normalize apphook if apphook: application_urls = _verify_apphook(apphook, apphook_namespace) else: application_urls = None if reverse_id: if Page.objects.drafts().filter(reverse_id=reverse_id, site=site).count(): raise FieldError('A page with the reverse_id="%s" already exist.' % reverse_id) page = Page( created_by=created_by, changed_by=created_by, parent=parent, publication_date=publication_date, publication_end_date=publication_end_date, in_navigation=in_navigation, soft_root=soft_root, reverse_id=reverse_id, navigation_extenders=navigation_extenders, template=template, application_urls=application_urls, application_namespace=apphook_namespace, site=site, login_required=login_required, limit_visibility_in_menu=limit_visibility_in_menu, xframe_options=xframe_options, ) page.insert_at(parent, position) page.save() create_title( language=language, title=title, menu_title=menu_title, slug=slug, redirect=redirect, meta_description=meta_description, page=page, overwrite_url=overwrite_url, ) if published: page.publish(language) del _thread_locals.user return page.reload()
def create_page(title, template, language, menu_title=None, slug=None, apphook=None, redirect=None, meta_description=None, meta_keywords=None, created_by='python-api', parent=None, publication_date=None, publication_end_date=None, in_navigation=False, soft_root=False, reverse_id=None, navigation_extenders=None, published=False, site=None, login_required=False, limit_visibility_in_menu=VISIBILITY_ALL, position="last-child", overwrite_url=None): """ Create a CMS Page and it's title for the given language See docs/extending_cms/api_reference.rst for more info """ # ugly permissions hack if created_by and isinstance(created_by, User): _thread_locals.user = created_by created_by = created_by.username else: _thread_locals.user = None # validate template assert template in [tpl[0] for tpl in get_cms_setting('TEMPLATES')] # validate site if not site: site = Site.objects.get_current() else: assert isinstance(site, Site) # validate language: assert language in get_language_list(site), get_cms_setting( 'LANGUAGES').get(site.pk) # set default slug: if not slug: slug = _generate_valid_slug(title, parent, language) # validate and normalize apphook if apphook: application_urls = _verify_apphook(apphook) else: application_urls = None # validate parent if parent: assert isinstance(parent, Page) parent = Page.objects.get(pk=parent.pk) # validate publication date if publication_date: assert isinstance(publication_date, datetime.date) # validate publication end date if publication_end_date: assert isinstance(publication_end_date, datetime.date) # validate softroot assert get_cms_setting('SOFTROOT') or not soft_root if navigation_extenders: raw_menus = menu_pool.get_menus_by_attribute("cms_enabled", True) menus = [menu[0] for menu in raw_menus] assert navigation_extenders in menus # validate menu visibility accepted_limitations = (VISIBILITY_ALL, VISIBILITY_USERS, VISIBILITY_STAFF) assert limit_visibility_in_menu in accepted_limitations # validate position assert position in ('last-child', 'first-child', 'left', 'right') page = Page( created_by=created_by, changed_by=created_by, parent=parent, publication_date=publication_date, publication_end_date=publication_end_date, in_navigation=in_navigation, soft_root=soft_root, reverse_id=reverse_id, navigation_extenders=navigation_extenders, published=False, # will be published later template=template, site=site, login_required=login_required, limit_visibility_in_menu=limit_visibility_in_menu, ) page.insert_at(parent, position) page.save() create_title(language=language, title=title, menu_title=menu_title, slug=slug, apphook=application_urls, redirect=redirect, meta_description=meta_description, meta_keywords=meta_keywords, page=page, overwrite_url=overwrite_url) if published: page.publish() del _thread_locals.user return page.reload()
def create_page(title, template, language, menu_title=None, slug=None, apphook=None, apphook_namespace=None, redirect=None, meta_description=None, created_by='python-api', parent=None, publication_date=None, publication_end_date=None, in_navigation=False, soft_root=False, reverse_id=None, navigation_extenders=None, published=False, site=None, login_required=False, limit_visibility_in_menu=VISIBILITY_ALL, position="last-child", overwrite_url=None, xframe_options=Page.X_FRAME_OPTIONS_INHERIT): """ Create a CMS Page and it's title for the given language See docs/extending_cms/api_reference.rst for more info """ # ugly permissions hack if created_by and isinstance(created_by, get_user_model()): _thread_locals.user = created_by created_by = getattr(created_by, get_user_model().USERNAME_FIELD) else: _thread_locals.user = None # validate template if not template == TEMPLATE_INHERITANCE_MAGIC: assert template in [tpl[0] for tpl in get_cms_setting('TEMPLATES')] get_template(template) # validate site if not site: site = Site.objects.get_current() else: assert isinstance(site, Site) # validate language: assert language in get_language_list(site), get_cms_setting('LANGUAGES').get(site.pk) # set default slug: if not slug: slug = _generate_valid_slug(title, parent, language) # validate parent if parent: assert isinstance(parent, Page) parent = Page.objects.get(pk=parent.pk) # validate publication date if publication_date: assert isinstance(publication_date, datetime.date) # validate publication end date if publication_end_date: assert isinstance(publication_end_date, datetime.date) if navigation_extenders: raw_menus = menu_pool.get_menus_by_attribute("cms_enabled", True) menus = [menu[0] for menu in raw_menus] assert navigation_extenders in menus # validate menu visibility accepted_limitations = (VISIBILITY_ALL, VISIBILITY_USERS, VISIBILITY_STAFF) assert limit_visibility_in_menu in accepted_limitations # validate position assert position in ('last-child', 'first-child', 'left', 'right') # validate and normalize apphook if apphook: application_urls = _verify_apphook(apphook, apphook_namespace) else: application_urls = None if reverse_id: if Page.objects.drafts().filter(reverse_id=reverse_id).count(): raise FieldError('A page with the reverse_id="%s" already exist.' % reverse_id) page = Page( created_by=created_by, changed_by=created_by, parent=parent, publication_date=publication_date, publication_end_date=publication_end_date, in_navigation=in_navigation, soft_root=soft_root, reverse_id=reverse_id, navigation_extenders=navigation_extenders, template=template, application_urls=application_urls, application_namespace=apphook_namespace, site=site, login_required=login_required, limit_visibility_in_menu=limit_visibility_in_menu, xframe_options=xframe_options, ) page.insert_at(parent, position) page.save() create_title( language=language, title=title, menu_title=menu_title, slug=slug, redirect=redirect, meta_description=meta_description, page=page, overwrite_url=overwrite_url, ) if published: page.publish(language) del _thread_locals.user return page.reload()