def add_history_menu(self): if self.toolbar.edit_mode and self.page: refresh = self.toolbar.REFRESH_PAGE history_menu = self.toolbar.get_or_create_menu(HISTORY_MENU_IDENTIFIER, _('History'), position=2) if is_installed('reversion'): from cms.utils.reversion_hacks import reversion, Revision versions = reversion.get_for_object(self.page) if self.page.revision_id: current_revision = Revision.objects.get(pk=self.page.revision_id) has_undo = versions.filter(revision__pk__lt=current_revision.pk).exists() has_redo = versions.filter(revision__pk__gt=current_revision.pk).exists() else: has_redo = False has_undo = versions.count() > 1 undo_action = admin_reverse('cms_page_undo', args=(self.page.pk,)) redo_action = admin_reverse('cms_page_redo', args=(self.page.pk,)) history_menu.add_ajax_item(_('Undo'), action=undo_action, disabled=not has_undo, on_success=refresh) history_menu.add_ajax_item(_('Redo'), action=redo_action, disabled=not has_redo, on_success=refresh) history_menu.add_break(HISTORY_MENU_BREAK) revert_action = admin_reverse('cms_page_revert_page', args=(self.page.pk, self.current_lang)) revert_question = _('Are you sure you want to revert to live?') is_enabled = self.page.is_dirty(self.current_lang) and self.page.publisher_public history_menu.add_ajax_item(_('Revert to live'), action=revert_action, question=revert_question, disabled=not is_enabled, on_success=refresh, extra_classes=('cms-toolbar-revert',)) history_menu.add_modal_item(_('View history'), url=admin_reverse('cms_page_history', args=(self.page.pk,)))
def test_file_persistence(self): content = b'content1' with reversion.create_revision(): # add a file instance file1 = FileModel() file1.test_file.save('file1.txt', SimpleUploadedFile('file1.txt', content), False) file1.save() # manually add a revision because we use the explicit way # django-cms uses too. adapter = reversion.get_adapter(FileModel) reversion.revision_context_manager.add_to_context( reversion.default_revision_manager, file1, adapter.get_version_data(file1)) # reload the instance from db file2 = FileModel.objects.all()[0] # delete the instance. file2.delete() # revert the old version file_version = reversion.get_for_object(file1)[0] file_version.revert() # reload the reverted instance and check for its content file1 = FileModel.objects.all()[0] self.assertEqual(file1.test_file.file.read(), content)
def add_history_menu(self): if self.toolbar.edit_mode and self.page: refresh = self.toolbar.REFRESH_PAGE history_menu = self.toolbar.get_or_create_menu( HISTORY_MENU_IDENTIFIER, _('History'), position=2) if is_installed('reversion'): from cms.utils.reversion_hacks import reversion, Revision versions = reversion.get_for_object(self.page) if self.page.revision_id: current_revision = Revision.objects.get( pk=self.page.revision_id) has_undo = versions.filter( revision__pk__lt=current_revision.pk).exists() has_redo = versions.filter( revision__pk__gt=current_revision.pk).exists() else: has_redo = False has_undo = versions.count() > 1 undo_action = admin_reverse('cms_page_undo', args=(self.page.pk, )) redo_action = admin_reverse('cms_page_redo', args=(self.page.pk, )) history_menu.add_ajax_item(_('Undo'), action=undo_action, disabled=not has_undo, on_success=refresh) history_menu.add_ajax_item(_('Redo'), action=redo_action, disabled=not has_redo, on_success=refresh) history_menu.add_break(HISTORY_MENU_BREAK) revert_action = admin_reverse('cms_page_revert_page', args=(self.page.pk, self.current_lang)) revert_question = _('Are you sure you want to revert to live?') is_enabled = self.page.is_dirty( self.current_lang) and self.page.publisher_public history_menu.add_ajax_item(_('Revert to live'), action=revert_action, question=revert_question, disabled=not is_enabled, on_success=refresh, extra_classes=('cms-toolbar-revert', )) history_menu.add_modal_item(_('View history'), url=admin_reverse( 'cms_page_history', args=(self.page.pk, )))
def add_page_menu(self): if self.page and self.has_page_change_permission(): edit_mode = self.toolbar.edit_mode refresh = self.toolbar.REFRESH_PAGE # menu for current page # NOTE: disabled if the current path is "deeper" into the # application's url patterns than its root. This is because # when the Content Manager is at the root of the app-hook, # some of the page options still make sense. current_page_menu = self.toolbar.get_or_create_menu( PAGE_MENU_IDENTIFIER, _('Page'), position=1, disabled=self.in_apphook() and not self.in_apphook_root()) # page operations menu add_page_menu = current_page_menu.get_or_create_menu(PAGE_MENU_ADD_IDENTIFIER, _('Create Page')) app_page_url = admin_reverse('cms_page_add') new_page_params = {'edit': 1, 'position': 'last-child'} if self.page.parent_id: new_page_params['target'] = self.page.parent_id add_page_menu_modal_items = ( (_('New Page'), new_page_params), (_('New Sub Page'), {'edit': 1, 'position': 'last-child', 'target': self.page.pk}), (_('Duplicate this Page'), {'copy_target': self.page.pk}) ) for title, params in add_page_menu_modal_items: params.update(language=self.toolbar.language) add_page_menu.add_modal_item(title, url=add_url_parameters(app_page_url, params)) # first break current_page_menu.add_break(PAGE_MENU_FIRST_BREAK) # page edit page_edit_url = '?%s' % get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON') current_page_menu.add_link_item(_('Edit this Page'), disabled=edit_mode, url=page_edit_url) # page settings page_settings_url = admin_reverse('cms_page_change', args=(self.page.pk,)) page_settings_url = add_url_parameters(page_settings_url, language=self.toolbar.language) current_page_menu.add_modal_item(_('Page settings'), url=page_settings_url, disabled=not edit_mode, on_close=refresh) # advanced settings advanced_url = admin_reverse('cms_page_advanced', args=(self.page.pk,)) advanced_url = add_url_parameters(advanced_url, language=self.toolbar.language) advanced_disabled = not self.page.has_advanced_settings_permission(self.request) or not edit_mode current_page_menu.add_modal_item(_('Advanced settings'), url=advanced_url, disabled=advanced_disabled) # templates menu if self.toolbar.build_mode or edit_mode: templates_menu = current_page_menu.get_or_create_menu('templates', _('Templates')) action = admin_reverse('cms_page_change_template', args=(self.page.pk,)) for path, name in get_cms_setting('TEMPLATES'): active = self.page.template == path if path == TEMPLATE_INHERITANCE_MAGIC: templates_menu.add_break(TEMPLATE_MENU_BREAK) templates_menu.add_ajax_item(name, action=action, data={'template': path}, active=active, on_success=refresh) # page type page_type_url = admin_reverse('cms_page_add_page_type') page_type_url = add_url_parameters(page_type_url, copy_target=self.page.pk, language=self.toolbar.language) current_page_menu.add_modal_item(_('Save as Page Type'), page_type_url, disabled=not edit_mode) # second break current_page_menu.add_break(PAGE_MENU_SECOND_BREAK) # permissions if self.permissions_activated: permissions_url = admin_reverse('cms_page_permissions', args=(self.page.pk,)) permission_disabled = not edit_mode or not self.page.has_change_permissions_permission(self.request) current_page_menu.add_modal_item(_('Permissions'), url=permissions_url, disabled=permission_disabled) # dates settings dates_url = admin_reverse('cms_page_dates', args=(self.page.pk,)) current_page_menu.add_modal_item(_('Publishing dates'), url=dates_url, disabled=not edit_mode) # third break current_page_menu.add_break(PAGE_MENU_THIRD_BREAK) # navigation toggle nav_title = _('Hide in navigation') if self.page.in_navigation else _('Display in navigation') nav_action = admin_reverse('cms_page_change_innavigation', args=(self.page.pk,)) current_page_menu.add_ajax_item(nav_title, action=nav_action, disabled=not edit_mode, on_success=refresh) # publisher if self.title: if self.title.published: publish_title = _('Unpublish page') publish_url = admin_reverse('cms_page_unpublish', args=(self.page.pk, self.current_lang)) else: publish_title = _('Publish page') publish_url = admin_reverse('cms_page_publish_page', args=(self.page.pk, self.current_lang)) current_page_menu.add_ajax_item(publish_title, action=publish_url, disabled=not edit_mode, on_success=refresh) # fourth break current_page_menu.add_break(PAGE_MENU_FOURTH_BREAK) history_menu = current_page_menu.get_or_create_menu(HISTORY_MENU_IDENTIFIER, _('History')) if is_installed('reversion'): from cms.utils.reversion_hacks import reversion, Revision versions = reversion.get_for_object(self.page) if self.page.revision_id: current_revision = Revision.objects.get(pk=self.page.revision_id) has_undo = versions.filter(revision__pk__lt=current_revision.pk).exists() has_redo = versions.filter(revision__pk__gt=current_revision.pk).exists() else: has_redo = False has_undo = versions.count() > 1 undo_action = admin_reverse('cms_page_undo', args=(self.page.pk,)) redo_action = admin_reverse('cms_page_redo', args=(self.page.pk,)) history_menu.add_ajax_item(_('Undo'), action=undo_action, disabled=not has_undo, on_success=refresh) history_menu.add_ajax_item(_('Redo'), action=redo_action, disabled=not has_redo, on_success=refresh) history_menu.add_break(HISTORY_MENU_BREAK) revert_action = admin_reverse('cms_page_revert_page', args=(self.page.pk, self.current_lang)) revert_question = _('Are you sure you want to revert to live?') is_enabled = self.page.is_dirty(self.current_lang) and self.page.publisher_public history_menu.add_ajax_item(_('Revert to live'), action=revert_action, question=revert_question, disabled=not is_enabled, on_success=refresh, extra_classes=('cms-toolbar-revert',)) history_menu.add_modal_item(_('View history'), url=admin_reverse('cms_page_history', args=(self.page.pk,))) # last break current_page_menu.add_break(PAGE_MENU_LAST_BREAK) # delete delete_url = admin_reverse('cms_page_delete', args=(self.page.pk,)) on_delete_redirect_url = self.get_on_delete_redirect_url() current_page_menu.add_modal_item(_('Delete page'), url=delete_url, on_close=on_delete_redirect_url, disabled=not edit_mode)