def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return if user_can_change_page(self.request.user, page=self.page): try: mytitleextension = MyTitleExtension.objects.get( extended_object_id=self.page.id) except MyTitleExtension.DoesNotExist: mytitleextension = None try: if mytitleextension: url = admin_reverse('extensionapp_mytitleextension_change', args=(mytitleextension.pk, )) else: url = admin_reverse( 'extensionapp_mytitleextension_add' ) + '?extended_object=%s' % self.page.pk except NoReverseMatch: # not in urls pass else: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu('page') current_page_menu.add_modal_item(_('Title Extension'), url=url, disabled=not_edit_mode)
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return if user_can_change_page(self.request.user, page=self.page): try: mypageextension = MyPageExtension.objects.get(extended_object_id=self.page.id) except MyPageExtension.DoesNotExist: mypageextension = None try: if mypageextension: url = admin_reverse('extensionapp_mypageextension_change', args=(mypageextension.pk,)) else: url = admin_reverse('extensionapp_mypageextension_add') + '?extended_object=%s' % self.page.pk except NoReverseMatch: # not in urls pass else: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu('page') current_page_menu.add_modal_item(_('Page Extension'), url=url, disabled=not_edit_mode)
def populate(self): self.current_site = Site.objects.get_current() # always use draft if we have a page self.page = get_page_draft(self.request.current_page) # check global permissions if CMS_PERMISSIONS is active if get_cms_setting('PERMISSION'): has_global_current_page_change_permission = has_page_change_permission(self.request) else: has_global_current_page_change_permission = False # check if user has page edit permission can_change = self.request.current_page and self.request.current_page.has_change_permission(self.request) if has_global_current_page_change_permission or can_change: self.change_admin_menu() if self.page: self.add_page_menu() if self.toolbar.edit_mode: # history menu self.add_history_menu() self.change_language_menu() # publish button if self.page.has_publish_permission(self.request): classes = ["cms_btn-action", "cms_btn-publish"] if self.page.is_dirty(): classes.append("cms_btn-publish-active") if self.page.published: title = _("Publish Changes") else: title = _("Publish Page now") publish_url = reverse('admin:cms_page_publish_page', args=(self.page.pk,)) self.toolbar.add_button(title, url=publish_url, extra_classes=classes, side=self.toolbar.RIGHT, disabled=not self.page.is_dirty()) self.add_draft_live()
def populate(self): page = get_page_draft(self.request.current_page) if not page or not user_can_change_page(self.request.user, page=page): return current_page_menu = self.toolbar.get_or_create_menu('page') position = self.get_position(current_page_menu) file_formats = FILE_FORMATS.values() if len(file_formats) == 1: menu = current_page_menu else: menu = current_page_menu.get_or_create_menu( 'export-page', _('Export'), position=position) for file_format in file_formats: label = _('Export to {ext}').format(ext='.' + file_format.ext) url = reverse('export-page:cms_page', kwargs={ 'page_pk': page.pk, 'file_format': file_format.name}) menu.add_link_item(label, url=url, position=position) current_page_menu.add_break('export-page-break', position=position)
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return # check global permissions if CMS_PERMISSIONS is active if get_cms_setting("PERMISSION"): has_global_current_page_change_permission = has_page_change_permission(self.request) else: has_global_current_page_change_permission = False # check if user has page edit permission can_change = self.request.current_page and self.request.current_page.has_change_permission(self.request) if has_global_current_page_change_permission or can_change: try: extension = CSSExtension.objects.get(extended_object_id=self.page.id) except CSSExtension.DoesNotExist: extension = None try: if extension: url = reverse("admin:cms_extensions_cssextension_change", args=(extension.pk,)) else: url = reverse("admin:cms_extensions_cssextension_add") + "?extended_object=%s" % self.page.pk except NoReverseMatch: # not in urls pass else: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu("page") current_page_menu.add_modal_item(_("CSS"), url=url, disabled=not_edit_mode)
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return # check global permissions if CMS_PERMISSIONS is active if get_cms_setting('PERMISSION'): has_global_current_page_change_permission = has_page_change_permission(self.request) else: has_global_current_page_change_permission = False # check if user has page edit permission can_change = self.request.current_page and self.request.current_page.has_change_permission(self.request) if has_global_current_page_change_permission or can_change: try: mypageextension = MyPageExtension.objects.get(extended_object_id=self.page.id) except MyPageExtension.DoesNotExist: mypageextension = None try: if mypageextension: url = admin_reverse('extensionapp_mypageextension_change', args=(mypageextension.pk,)) else: url = admin_reverse('extensionapp_mypageextension_add') + '?extended_object=%s' % self.page.pk except NoReverseMatch: # not in urls pass else: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu('page') current_page_menu.add_modal_item(_('Page Extension'), url=url, disabled=not_edit_mode)
def populate(self): self.page = get_page_draft(self.request.current_page) self.title = self.get_title() self.permissions_activated = get_cms_setting('PERMISSION') self.change_admin_menu() self.add_page_menu() self.change_language_menu()
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return # check if user has page edit permission if user_can_change_page(user=self.request.user, page=self.page): try: extension = CSSExtension.objects.get( extended_object_id=self.page.id) except CSSExtension.DoesNotExist: extension = None try: if extension: url = reverse("admin:cms_extensions_cssextension_change", args=(extension.pk, )) else: url = reverse("admin:cms_extensions_cssextension_add") url = f"{url}?extended_object={self.page.pk}" except NoReverseMatch: # not in urls pass else: not_edit_mode = not self.toolbar.edit_mode_active current_page_menu = self.toolbar.\ get_or_create_menu("page") current_page_menu.add_modal_item(_("CSS"), url=url, disabled=not_edit_mode)
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) try: self.title = Title.objects.get(page=self.page, language=self.current_lang, publisher_is_draft=True) except Title.DoesNotExist: self.title = None # check global permissions if CMS_PERMISSIONS is active if get_cms_setting('PERMISSION'): has_global_current_page_change_permission = has_page_change_permission( self.request) else: has_global_current_page_change_permission = False # check if user has page edit permission can_change = self.request.current_page and self.request.current_page.has_change_permission( self.request) if has_global_current_page_change_permission or can_change: self.change_admin_menu() if self.page: self.add_page_menu() # history menu if self.page and self.toolbar.edit_mode: self.add_history_menu() self.change_language_menu()
def populate(self): """ When visiting a page that is linked to a page extension, show an item in the toolbar only to users who have the permission to update the page. Clicking on this menu item will open the admin page of the page extension. Note: We don't want to show a link to create a new page extension on a page that does not have it yet. For clarity, we choose to only create page extensions transparently via the page creation wizard. """ # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return if user_can_change_page(user=self.request.user, page=self.page): page_extension, admin_url = self.get_page_extension_admin() if page_extension: edit_mode_inactive = not self.toolbar.edit_mode_active page_menu = self.toolbar.get_or_create_menu("page") # Create the new menu item as a modal page_menu.add_modal_item( _("{:s} settings").format(self.model.__name__), url=admin_url, disabled=edit_mode_inactive, position=PAGE_EXTENSION_TOOLBAR_ITEM_POSITION, )
def get_node_by_id(self, id, nodes, namespace=None): final_node = None try: for node in nodes: if node.id == id: if namespace: if node.namespace == namespace: final_node = node break else: final_node = node break if final_node is None: """ If we're editing a page, we need to find the draft version of the page and turn it into a navigation node """ page = get_page_draft(Page.objects.get(id=id)) final_node = page_to_node(page, page, 0) final_node.children = [] final_node.parent = [] except: logger.exception('Failed to find node') return final_node
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return # check global permissions if CMS_PERMISSIONS is active if get_cms_setting('PERMISSION'): has_global_current_page_change_permission = has_page_change_permission(self.request) else: has_global_current_page_change_permission = False # check if user has page edit permission can_change = self.request.current_page and self.request.current_page.has_change_permission(self.request) if has_global_current_page_change_permission or can_change: try: icon_extension = MenuExtension.objects.get(extended_object_id=self.page.id) except MenuExtension.DoesNotExist: icon_extension = None try: if icon_extension: url = reverse('admin:app_menuextension_change', args=(icon_extension.pk,)) else: url = reverse('admin:app_menuextension_add') + '?extended_object=%s' % self.page.pk except NoReverseMatch: pass else: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu('page') current_page_menu.add_modal_item(_('Menu Settings'), url=url, disabled=not_edit_mode)
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return if user_can_change_page(user=self.request.user, page=self.page): try: page_extension = PageDetailExtension.objects.get( extended_object_id=self.page.id) except PageDetailExtension.DoesNotExist: page_extension = None try: if page_extension: url = reverse('admin:api_pagedetailextension_change', args=(page_extension.pk, )) else: url = reverse('admin:api_pagedetailextension_add' ) + '?extended_object=%s' % self.page.pk test = url except NoReverseMatch: # not in urls pass else: not_edit_mode = not self.toolbar.edit_mode_active current_page_menu = self.toolbar.get_or_create_menu('page') current_page_menu.add_modal_item(_('Page Extention'), url=url, disabled=not_edit_mode)
def _get_page(self): """ A utility method that caches the current page and make sure to use the draft version of the page. """ # always use draft if we have a page if not self.page: self.page = get_page_draft(self.request.current_page) return self.page
def populate(self): if not self.toolbar.edit_mode: return cms_page = get_page_draft(self.request.current_page) if not cms_page or user_can_change_page(self.request.user, cms_page): self.active_operation = self.get_active_operation() self.add_buttons()
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return # check global permissions if CMS_PERMISSIONS is active if get_cms_setting("PERMISSION"): has_global_current_page_change_permission = has_page_change_permission(self.request) else: has_global_current_page_change_permission = False # check if user has page edit permission can_change = self.request.current_page and self.request.current_page.has_change_permission(self.request) if has_global_current_page_change_permission or can_change: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu("page") super_item = current_page_menu.find_first(Break, identifier=PAGE_MENU_SECOND_BREAK) + 1 meta_menu = current_page_menu.get_or_create_menu("pagemeta", PAGE_META_MENU_TITLE, position=super_item) position = 0 # Page tags try: page_extension = PageMeta.objects.get(extended_object_id=self.page.pk) except PageMeta.DoesNotExist: page_extension = None try: if page_extension: url = reverse("admin:djangocms_page_meta_pagemeta_change", args=(page_extension.pk,)) else: url = "%s?extended_object=%s" % (reverse("admin:djangocms_page_meta_pagemeta_add"), self.page.pk) except NoReverseMatch: # not in urls pass else: meta_menu.add_modal_item(PAGE_META_ITEM_TITLE, url=url, disabled=not_edit_mode, position=position) # Title tags for title in self.page.title_set.all(): try: title_extension = TitleMeta.objects.get(extended_object_id=title.pk) except TitleMeta.DoesNotExist: title_extension = None try: if title_extension: url = reverse("admin:djangocms_page_meta_titlemeta_change", args=(title_extension.pk,)) else: url = "%s?extended_object=%s" % (reverse("admin:djangocms_page_meta_titlemeta_add"), title.pk) except NoReverseMatch: # not in urls pass else: position += 1 language = get_language_object(title.language) meta_menu.add_modal_item(language["name"], url=url, disabled=not_edit_mode, position=position)
def request_hook(self): """ redirect to "?edit_off" if request is pending """ response = super(PublisherPageToolbar, self).request_hook() self.current_request = None user = self.request.user if user.is_superuser: log.debug("Don't modify cms toolbar for superusers") return response can_publish_page = user.has_perm("cms.publish_page") can_change_page = user.has_perm("cms.change_page") log.debug("User %r can publish: %r - can change: %r", user, can_publish_page, can_change_page) if not (can_publish_page or can_change_page): # e.g.: anonymous user should not see any messages log.debug("Don't modify cms toolbar for current user %s", self.request.user) return response page = get_page_draft(self.request.current_page) if page is None: log.warning("No current page.") return response open_requests = PublisherStateModel.objects.get_open_requests( publisher_instance=page) if open_requests.count() == 0: log.debug("Current page has no open publishing requests.") # self.is_dirty = self.page.is_dirty(language=self.current_lang) # if not self.is_dirty: # log.debug("Current page is dirty") # return response # else: # log.debug("Current page is not dirty") return response self.current_request = open_requests.latest() if self.toolbar.edit_mode: # The page has pending request: The User should not be able to edit it. # But we need the "edit mode": The user should raise into 404 # if current page is not published yet! # see also: # https://github.com/wearehoods/django-ya-model-publisher/issues/9 log.debug("Turn off edit mode, because page as pending requests") self.toolbar.edit_mode = False return response
def populate(self): # django CMS >= 3.6 if CMS_GTE_36 and not self.toolbar.edit_mode_active: return # django CMS <= 3.5 if not CMS_GTE_36 and not self.toolbar.edit_mode: return cms_page = get_page_draft(self.request.current_page) if not cms_page or user_can_change_page(self.request.user, cms_page): self.active_operation = self.get_active_operation() self.add_buttons()
def create_dummy_page(title, template, placeholder, parent=None): page = create_page( title, template, language=settings.LANGUAGE_CODE, parent=parent, in_navigation=True, ) page.placeholders.add(placeholder) page = get_page_draft(page) page.publish(settings.LANGUAGE_CODE) print("\t%s" % page.get_absolute_url(language=settings.LANGUAGE_CODE)) return page
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return # check global permissions if CMS_PERMISSIONS is active if get_cms_setting('PERMISSION'): if not has_page_change_permission: has_global_current_page_change_permission = has_page_permission( self.request.user, self.request.current_page, 'change' ) else: has_global_current_page_change_permission = has_page_change_permission( self.request ) else: has_global_current_page_change_permission = False # check if user has page edit permission if not has_page_change_permission: can_change = (self.request.current_page and self.request.current_page.has_change_permission(self.request.user)) else: can_change = (self.request.current_page and self.request.current_page.has_change_permission(self.request)) if has_global_current_page_change_permission or can_change: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu('page') position = current_page_menu.find_first( Break, identifier=PAGE_MENU_THIRD_BREAK) - 1 # Page tags try: page_extension = PageSitemapProperties.objects.get(extended_object_id=self.page.pk) except PageSitemapProperties.DoesNotExist: page_extension = None try: if page_extension: url = reverse('admin:djangocms_page_sitemap_pagesitemapproperties_change', args=(page_extension.pk,)) else: url = "%s?extended_object=%s" % ( reverse('admin:djangocms_page_sitemap_pagesitemapproperties_add'), self.page.pk) except NoReverseMatch: # pragma: no cover # not in urls pass else: current_page_menu.add_modal_item(PAGE_SITEMAP_MENU_TITLE, url=url, disabled=not_edit_mode, position=position)
def populate(self): self.page = get_page_draft(self.request.current_page) menu = self.toolbar.get_or_create_menu('core-app', _('Popups')) url = reverse('cms_popup') menu.add_link_item(_('Edit'), url=url) history_menu = self.toolbar.get_or_create_menu(HISTORY_MENU_IDENTIFIER, _('History'), position=2) if self.page and self.toolbar.edit_mode: delete_action = reverse('cms_delete_widgets', kwargs=(dict(page=self.page.pk))) delete_question = _('Are you sure you want to delete all widgets on current page?') history_menu.add_ajax_item(_('Delete All widgets on page'), action=delete_action, question=delete_question, on_success=self.toolbar.REFRESH_PAGE) delete_action = reverse('cms_delete_static_widgets') delete_question = _('Are you sure you want to delete all widgets from all static placeholders?') history_menu.add_ajax_item(_('Delete All static widgets'), action=delete_action, question=delete_question, on_success=self.toolbar.REFRESH_PAGE)
def create_dummy_page(title, template, placeholders, parent=None): page = create_page(title, template, language=settings.LANGUAGE_CODE, parent=parent, in_navigation=True, with_revision=True) for placeholder in placeholders: page.placeholders.add(placeholder) page = get_page_draft(page) page.publish(settings.LANGUAGE_CODE) print("\t%s" % page.get_absolute_url(language=settings.LANGUAGE_CODE)) return page
def populate(self): user = self.request.user if not PublisherStateModel.has_change_permission( user, raise_exception=False): return menu = self.toolbar.get_or_create_menu( key="publisher-state", verbose_name=_("open requests"), ) state_qs = PublisherStateModel.objects.all().filter_open( ) # All open entries for state in state_qs: url = state.admin_reply_url() publisher_instance = state.publisher_instance menu.add_link_item( name="%s: %s" % (state.action_name, publisher_instance), url=url, ) menu.add_break() menu.add_sideframe_item( name=_("Publisher State list"), url=admin_reverse("publisher_publisherstatemodel_changelist"), ) menu.add_break() # Add history link: page = get_page_draft(self.request.current_page) if page is not None: states = PublisherStateModel.objects.filter_by_instance( publisher_instance=page) state = states.first() name = _("Current page history") if state is None: # No history -> disabled entry menu.add_link_item( name=name, url="", disabled=True, ) else: # Has history -> add link to it: url = state.admin_history_url() menu.add_sideframe_item(name=name, url=url)
def populate(self): """ Adds Moderation link to Page Toolbar Menu """ # always use draft if we have a page page = get_page_draft(self.request.current_page) if page: can_change = page_permissions.user_can_change_page( self.request.user, page) else: can_change = False if not can_change: return page_menu = self.toolbar.get_menu('page') if not page_menu or page_menu.disabled: return try: extension = PageModeration.objects.get(extended_object_id=page.pk) except PageModeration.DoesNotExist: extension = None opts = PageModeration._meta url_args = [] if extension: url_name = '{}_{}_{}'.format(opts.app_label, opts.model_name, 'change') url_args.append(extension.pk) else: url_name = '{}_{}_{}'.format(opts.app_label, opts.model_name, 'add') url = get_admin_url(url_name, self.current_lang, args=url_args) if not extension: url += '?extended_object=%s' % page.pk not_edit_mode = not self.toolbar.edit_mode_active page_menu.add_modal_item(_('Moderation'), url=url, disabled=not_edit_mode)
def user_can_view_page(user, page, site=None): if site is None: site = get_current_site() if user.is_superuser: return True public_for = get_cms_setting('PUBLIC_FOR') can_see_unrestricted = public_for == 'all' or (public_for == 'staff' and user.is_staff) page = get_page_draft(page) # inherited and direct view permissions is_restricted = page.has_view_restrictions(site) if not is_restricted and can_see_unrestricted: # Page has no restrictions and project is configured # to allow everyone to see unrestricted pages. return True elif not user.is_authenticated(): # Page has restrictions or project is configured # to require staff user status to see pages. return False if user_can_view_all_pages(user, site=site): return True if not is_restricted: # Page has no restrictions but user can't see unrestricted pages return False if user_can_change_page(user, page): # If user has change permissions on a page # then he can automatically view it. return True has_perm = has_generic_permission( page=page, user=user, action='view_page', check_global=False, ) return has_perm
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return self.toolbar.add_item( TemplateItem( "cms/toolbar/items/on_off.html", extra_context={ 'request': self.request, 'diazo_enabled': check_themes_enabled(self.request), }, side=RIGHT, ), len(self.toolbar.right_items), )
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: return # Nothing to do page_tag = PageExtend.objects.filter(extended_object_id=self.page.id).first() try: if page_tag: url = reverse('admin:page_extend_pageextend_change', args=(page_tag.pk,)) else: url = reverse('admin:page_extend_pageextend_add') + '?extended_object=%s' % self.page.pk except NoReverseMatch: pass else: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu('page') current_page_menu.add_modal_item(_('Extend options...'), url=url, disabled=not_edit_mode)
def populate(self): self.current_site = Site.objects.get_current() # always use draft if we have a page self.page = get_page_draft(self.request.current_page) # check global permissions if CMS_PERMISSIONS is active if get_cms_setting('PERMISSION'): has_global_current_page_change_permission = has_page_change_permission( self.request) else: has_global_current_page_change_permission = False # check if user has page edit permission can_change = self.request.current_page and self.request.current_page.has_change_permission( self.request) if has_global_current_page_change_permission or can_change: self.change_admin_menu() if self.page: self.add_page_menu() if self.toolbar.edit_mode: # history menu self.add_history_menu() self.change_language_menu() # publish button if self.page.has_publish_permission(self.request): classes = ["cms_btn-action", "cms_btn-publish"] if self.page.is_dirty(): classes.append("cms_btn-publish-active") if self.page.published: title = _("Publish Changes") else: title = _("Publish Page now") # PATCH: publish_url = reverse('admin:cms_page_publish_page', args=(self.page.pk,)) publish_url = reverse('admin:cms_page_publish_page', args=(self.page.pk, ))[3:] self.toolbar.add_button( title, url=publish_url, extra_classes=classes, side=self.toolbar.RIGHT, disabled=not self.page.is_dirty()) self.add_draft_live()
def get_tags(context, limit=None): """ @brief Fetches Tag objects """ tagged_items = None # get all available tags tags = Tag.objects.all() if 'page' == limit: # just return tags of the current page... # get the ID of the current page's draft version (all changes are made # to the draft version in DjangoCMS) current_page = get_page_draft(context['request'].current_page).id try: # find the matching PageTags object's id pagetags_id = PageTags.objects.get(extended_object_id=current_page).id # get all TaggedItems associated with this PageTags object tagged_items = TaggedItem.objects.filter(object_id=pagetags_id) except PageTags.DoesNotExist: # obviously this page is not tagged, so there are no tagged items tagged_items = None if not tagged_items: # just return the tags in use # @todo: Make this configurable?! tagged_items = TaggedItem.objects.all() tagged_items = tagged_items.values_list('tag_id', flat=True) tags = tags.filter(id__in=tagged_items) # add the URL to the tag, if the cms app is used try: for t in tags: t.url = reverse('tag_detail', args=[t.slug]) except NoReverseMatch: # fail silently pass return tags
def user_can_view_page(user, page): if user.is_superuser: return True public_for = get_cms_setting('PUBLIC_FOR') can_see_unrestricted = public_for == 'all' or (public_for == 'staff' and user.is_staff) page = get_page_draft(page) # inherited and direct view permissions is_restricted = page.has_view_restrictions() if not is_restricted and can_see_unrestricted: # Page has no restrictions and project is configured # to allow everyone to see unrestricted pages. return True elif not user.is_authenticated(): # Page has restrictions or project is configured # to require staff user status to see pages. return False if user_can_view_all_pages(user, site=page.site): return True if not is_restricted: # Page has no restrictions but user can't see unrestricted pages return False if user_can_change_page(user, page): # If user has change permissions on a page # then he can automatically view it. return True has_perm = has_generic_permission( page=page, user=user, action='view_page', check_global=False, ) return has_perm
def post_template_populate(self): self.page = get_page_draft(self.request.current_page) statics = getattr(self.request, 'static_placeholders', []) placeholders = getattr(self.request, 'placeholders', []) if self.page: if self.page.has_change_permission(self.request): self.add_structure_mode() elif statics: for static_placeholder in statics: if static_placeholder.has_change_permission(self.request): self.add_structure_mode() break else: added = False if statics: for static_placeholder in statics: if static_placeholder.has_change_permission(self.request): self.add_structure_mode() added = True break if not added and placeholders: self.add_structure_mode()
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return # check global permissions if CMS_PERMISSIONS is active if get_cms_setting("PERMISSION"): has_global_current_page_change_permission = has_page_change_permission( self.request) else: has_global_current_page_change_permission = False # check if user has page edit permission can_change = self.request.current_page and self.request.current_page.has_change_permission( self.request) if has_global_current_page_change_permission or can_change: try: extension = CSSExtension.objects.get( extended_object_id=self.page.id) except CSSExtension.DoesNotExist: extension = None try: if extension: url = reverse("admin:cms_extensions_cssextension_change", args=(extension.pk, )) else: url = reverse("admin:cms_extensions_cssextension_add" ) + "?extended_object=%s" % self.page.pk except NoReverseMatch: # not in urls pass else: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu("page") current_page_menu.add_modal_item(_("CSS"), url=url, disabled=not_edit_mode)
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) try: self.title = Title.objects.get(page=self.page, language=self.current_lang, publisher_is_draft=True) except Title.DoesNotExist: self.title = None # check global permissions if CMS_PERMISSIONS is active if get_cms_setting('PERMISSION'): has_global_current_page_change_permission = has_page_change_permission(self.request) else: has_global_current_page_change_permission = False # check if user has page edit permission can_change = self.request.current_page and self.request.current_page.has_change_permission(self.request) if has_global_current_page_change_permission or can_change: self.change_admin_menu() if self.page: self.add_page_menu() # history menu if self.page and self.toolbar.edit_mode: self.add_history_menu() self.change_language_menu()
def populate(self): """ @brief This method actually makes the modifications to the toolbar """ # all changes will be made on the draft version of the page self.page = get_page_draft(self.request.current_page) if not self.page: # if there is no page, there is nothing to do... return try: # fetch existing PageTags-object page_tags = PageTags.objects.get(extended_object_id=self.page.id) except PageTags.DoesNotExist: # this page has not been tagged yet! page_tags = None try: if page_tags: # if we have existing tags, use modification dialogue url = reverse('admin:djangocms_tagpage_pagetags_change', args=(page_tags.pk,)) else: # use initial creation dialogue url = reverse( 'admin:djangocms_tagpage_pagetags_add' ) + '?extended_object={0}'.format(self.page.pk) except NoReverseMatch: # if no URL could be fetched, fail silently pas else: # Add our own menu entry to the toolbar (as child of 'page') not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu('page') current_page_menu.add_modal_item(_('Tags'), url=url, disabled=not_edit_mode)
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return if user_can_change_page(user=self.request.user, page=self.page): try: icon_extension = HeaderBackgroundExtension.objects.get(extended_object_id=self.page.id) except HeaderBackgroundExtension.DoesNotExist: icon_extension = None try: if icon_extension: url = reverse('admin:website_headerbackgroundextension_change', args=(icon_extension.pk,)) else: url = reverse('admin:website_headerbackgroundextension_add') + '?extended_object=%s' % self.page.pk except NoReverseMatch: pass else: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu('page') current_page_menu.add_modal_item("Page background", url=url, disabled=not_edit_mode)
def get_node_by_id(self, id, nodes): final_node = None for node in nodes: if node.id == id: final_node = node break if final_node is None: """ If we're editing a page, we need to find the draft version of the page and turn it into a navigation node """ page = get_page_draft(Page.objects.get(id=id)) final_node = page_to_node(page, page, 0) final_node.children = [] final_node.parent = [] return final_node
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return # check global permissions if CMS_PERMISSIONS is active if get_cms_setting('PERMISSION'): if not has_page_change_permission: has_global_current_page_change_permission = has_page_permission( self.request.user, self.request.current_page, 'change') else: has_global_current_page_change_permission = has_page_change_permission( self.request) else: has_global_current_page_change_permission = False # check if user has page edit permission if not has_page_change_permission: can_change = (self.request.current_page and self.request.current_page.has_change_permission( self.request.user)) else: can_change = (self.request.current_page and self.request.current_page.has_change_permission( self.request)) if has_global_current_page_change_permission or can_change: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu('page') super_item = current_page_menu.find_first( Break, identifier=PAGE_MENU_SECOND_BREAK) + 1 meta_menu = current_page_menu.get_or_create_menu( 'pagemeta', PAGE_META_MENU_TITLE, position=super_item) position = 0 # Page tags try: page_extension = PageMeta.objects.get( extended_object_id=self.page.pk) except PageMeta.DoesNotExist: page_extension = None try: if page_extension: url = reverse('admin:djangocms_page_meta_pagemeta_change', args=(page_extension.pk, )) else: url = '%s?extended_object=%s' % ( reverse('admin:djangocms_page_meta_pagemeta_add'), self.page.pk) except NoReverseMatch: # not in urls pass else: meta_menu.add_modal_item(PAGE_META_ITEM_TITLE, url=url, disabled=not_edit_mode, position=position) # Title tags for title in self.page.title_set.filter( language__in=get_language_list(self.page.site_id)): try: title_extension = TitleMeta.objects.get( extended_object_id=title.pk) except TitleMeta.DoesNotExist: title_extension = None try: if title_extension: url = reverse( 'admin:djangocms_page_meta_titlemeta_change', args=(title_extension.pk, )) else: url = '%s?extended_object=%s' % ( reverse('admin:djangocms_page_meta_titlemeta_add'), title.pk) except NoReverseMatch: # not in urls pass else: position += 1 language = get_language_object(title.language) meta_menu.add_modal_item(language['name'], url=url, disabled=not_edit_mode, position=position)
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return # check global permissions if CMS_PERMISSIONS is active if get_cms_setting('PERMISSION'): has_global_current_page_change_permission = has_page_permission( self.request.user, self.request.current_page, 'change' ) else: has_global_current_page_change_permission = False # check if user has page edit permission has_change_permission = self.request.current_page.has_change_permission(self.request.user) can_change = (self.request.current_page and has_change_permission) if has_global_current_page_change_permission or can_change: try: not_edit_mode = not self.toolbar.edit_mode except AttributeError: not_edit_mode = not self.toolbar.edit_mode_active tags_menu = self.toolbar.get_or_create_menu('page') super_item = tags_menu.find_first(Break, identifier=PAGE_MENU_SECOND_BREAK) + 1 tags_menu = tags_menu.get_or_create_menu( 'pagetags', PAGE_TAGS_MENU_TITLE, position=super_item ) position = 0 # Page tags try: page_extension = PageTags.objects.get(extended_object_id=self.page.pk) except PageTags.DoesNotExist: page_extension = None try: if page_extension: url = reverse('admin:djangocms_page_tags_pagetags_change', args=(page_extension.pk,)) else: url = '%s?extended_object=%s' % ( reverse('admin:djangocms_page_tags_pagetags_add'), self.page.pk ) except NoReverseMatch: # pragma: no cover # not in urls pass else: tags_menu.add_modal_item(PAGE_TAGS_ITEM_TITLE, url=url, disabled=not_edit_mode, position=position) # Title tags try: site_id = self.page.node.site_id except AttributeError: # CMS_3_4 site_id = self.page.site_id for title in self.page.title_set.filter( language__in=get_language_list(site_id) ): try: title_extension = TitleTags.objects.get(extended_object_id=title.pk) except TitleTags.DoesNotExist: title_extension = None try: if title_extension: url = reverse('admin:djangocms_page_tags_titletags_change', args=(title_extension.pk,)) else: url = '%s?extended_object=%s' % ( reverse('admin:djangocms_page_tags_titletags_add'), title.pk) except NoReverseMatch: # pragma: no cover # not in urls pass else: position += 1 language = get_language_object(title.language) tags_menu.add_modal_item(language['name'], url=url, disabled=not_edit_mode, position=position)
def init_from_request(self): self.page = get_page_draft(self.request.current_page)
def init_from_request(self): self.page = get_page_draft(self.request.current_page) self.title = self.get_title() self.permissions_activated = get_cms_setting('PERMISSION')
def site_language(self): cms_page = get_page_draft(self.request.current_page) site_id = cms_page.node.site_id if cms_page else None return get_site_language_from_request(self.request, site_id)
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if self.page and has_page_change_permission(self.request): return
def populate(self): self.page = get_page_draft(self.request.current_page)
def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return self.lang = get_language_from_request(self.request) try: self.title_page = self.page.title_set.get(language=self.lang) except: # Nothing to do return # # Remove default menu # #self.page_menu = self.toolbar.get_or_create_menu('page') #self.toolbar.remove_item(self.page_menu) # # check global permissions # if get_cms_setting('PERMISSION'): has_global_current_page_change_permission = has_page_change_permission(self.request) else: has_global_current_page_change_permission = False can_change = self.request.current_page and self.request.current_page.has_change_permission(self.request) if has_global_current_page_change_permission or can_change: # Page urls page_url = reverse(PAGE_MENU_ADD) delete_page_url = reverse(PAGE_MENU_DELETE, args=(self.page.pk,)) sub_page_params = {'edit': 1, 'position': 'last-child', 'target': self.page.pk} # Rich page urls rich_page_add_url = reverse(RICHPAGE_MENU_ADD) + '?extended_object=%s' % self.title_page.pk # Rich Slideshow rich_slideshow_add_url = reverse(RICHSLIDESHOW_MENU_ADD) + '?extended_object=%s' % self.page.pk # # build the Pages menu # menu = self.toolbar.get_or_create_menu('rich-page-new', _('Pages'), position=1) menu.add_modal_item(_('New Page'), url=page_url) menu.add_modal_item(_('New Sub Page'), url=add_url_parameters(page_url, sub_page_params)) menu.add_modal_item(_('Delete page'), url=delete_page_url) try: rich_page = RichPage.objects.get(extended_object_id=self.title_page.pk) except RichPage.DoesNotExist: rich_page = None try: rich_slideshow = RichSlideshow.objects.get(extended_object_id=self.page.id) except RichSlideshow.DoesNotExist: rich_slideshow = None if not rich_page: menu.add_break(PAGE_MENU_BREAK) menu.add_modal_item(_('Add article'), url=rich_page_add_url) # # Check if the page has rich content or rich collection # if rich_page: menu.add_break(PAGE_MENU_BREAK) # # Rich page urls # rich_page_change_url = reverse(RICHPAGE_MENU_CHANGE, args=(self.title_page.pk,)) + '?extended_object=%s' % self.title_page.pk rich_page_delete_url = reverse(RICHPAGE_MENU_DELETE, args=(self.title_page.pk,)) + '?extended_object=%s' % self.title_page.pk menu.add_modal_item(_('Edit article'), url=rich_page_change_url) menu.add_modal_item(_('Delete article'), url=rich_page_delete_url) menu.add_break(PAGE_MENU_BREAK) if rich_slideshow: rich_slideshow_change_url = reverse(RICHSLIDESHOW_MENU_CHANGE, args=(rich_slideshow.pk,)) + '?extended_object=%s' % self.page.pk menu.add_modal_item(_('Delete slideshow'), url=rich_slideshow_change_url) else: menu.add_modal_item(_('Add slideshow'), url=rich_slideshow_add_url)
def populate(self): self.page = get_page_draft(self.request.current_page) config = self.__get_services_config() if not config: # Do nothing if there is no services app_config to work with return user = getattr(self.request, 'user', None) try: view_name = self.request.resolver_match.view_name except AttributeError: view_name = None if user and view_name: language = get_language_from_request(self.request, check_path=True) # get existing admin menu admin_menu = self.toolbar.get_or_create_menu(ADMIN_MENU_IDENTIFIER) # add new Services item admin_menu.add_sideframe_item(_('Services'), url='/admin/js_services/service/', position=0) # If we're on an Service detail page, then get the service if view_name == '{0}:service-detail'.format(config.namespace): obj = get_object_from_request(Service, self.request) else: obj = None menu = self.toolbar.get_or_create_menu('services-app', config.get_app_title()) change_config_perm = user.has_perm( 'js_services.change_servicesconfig') add_config_perm = user.has_perm('js_services.add_servicesconfig') config_perms = [change_config_perm, add_config_perm] change_service_perm = user.has_perm('js_services.change_service') delete_service_perm = user.has_perm('js_services.delete_service') add_service_perm = user.has_perm('js_services.add_service') service_perms = [ change_service_perm, add_service_perm, delete_service_perm, ] if change_config_perm: url_args = {} if language: url_args = { 'language': language, } url = get_admin_url('js_services_servicesconfig_change', [ config.pk, ], **url_args) menu.add_modal_item(_('Configure addon'), url=url) if any(config_perms) and any(service_perms): menu.add_break() if change_service_perm: url_args = {} if config: url_args = {'sections__id__exact': config.pk} url = get_admin_url('js_services_service_changelist', **url_args) menu.add_sideframe_item(_('Service list'), url=url) if add_service_perm: url_args = { 'sections': config.pk, 'owner': user.pk, } if language: url_args.update({ 'language': language, }) url = get_admin_url('js_services_service_add', **url_args) menu.add_modal_item(_('Add new service'), url=url) if change_service_perm and obj: url_args = {} if language: url_args = { 'language': language, } url = get_admin_url('js_services_service_change', [ obj.pk, ], **url_args) menu.add_modal_item(_('Edit this service'), url=url, active=True) if delete_service_perm and obj: redirect_url = self.get_on_delete_redirect_url( obj, language=language) url = get_admin_url('js_services_service_delete', [ obj.pk, ]) menu.add_modal_item(_('Delete this service'), url=url, on_close=redirect_url) if settings.USE_I18N: # and not self._language_menu: if obj: self._language_menu = self.toolbar.get_or_create_menu( LANGUAGE_MENU_IDENTIFIER, _('Language'), position=-1) self._language_menu.items = [] languages = get_language_dict(self.current_site.pk) page_languages = self.page.get_languages() remove = [] for code, name in get_language_tuple(): if code in obj.get_available_languages(): remove.append((code, name)) try: url = obj.get_absolute_url(code) except NoReverseMatch: url = None if url and code in page_languages: self._language_menu.add_link_item( name, url=url, active=self.current_lang == code) if self.toolbar.edit_mode_active: add = [l for l in languages.items() if l not in remove] copy = [ (code, name) for code, name in languages.items() if code != self.current_lang and (code, name) in remove ] if (add or len(remove) > 1 or copy) and change_service_perm: self._language_menu.add_break(ADD_OBJ_LANGUAGE_BREAK) if add: add_plugins_menu = self._language_menu.get_or_create_menu( '{0}-add-trans'.format( LANGUAGE_MENU_IDENTIFIER), _('Add Translation')) for code, name in add: url_args = {} url = '%s?language=%s' % (get_admin_url( 'js_services_service_change', [obj.pk], ** url_args), code) add_plugins_menu.add_modal_item(name, url=url) if len(remove) > 1: remove_plugins_menu = self._language_menu.get_or_create_menu( '{0}-del-trans'.format( LANGUAGE_MENU_IDENTIFIER), _('Delete Translation')) for code, name in remove: url = get_admin_url( 'js_services_service_delete_translation', [obj.pk, code]) remove_plugins_menu.add_modal_item(name, url=url) if copy: copy_plugins_menu = self._language_menu.get_or_create_menu( '{0}-copy-trans'.format( LANGUAGE_MENU_IDENTIFIER), _('Copy all plugins')) title = _('from %s') question = _( 'Are you sure you want to copy all plugins from %s?' ) url = get_admin_url( 'js_services_service_copy_language', [obj.pk]) for code, name in copy: copy_plugins_menu.add_ajax_item( title % name, action=url, data={ 'source_language': code, 'target_language': self.current_lang }, question=question % name, on_success=self.toolbar.REFRESH_PAGE)