def get_form(self, request, obj=None, **kwargs): """Get a :class:`Page <pages.admin.forms.PageForm>` for the :class:`Page <pages.models.Page>` and modify its fields depending on the request.""" #form = super(PageAdmin, self).get_form(request, obj, **kwargs) template = get_template_from_request(request, obj) form = make_form(self.model, get_placeholders(template)) language = get_language_from_request(request) form.base_fields['language'].initial = language if obj: initial_slug = obj.slug(language=language, fallback=False) initial_title = obj.title(language=language, fallback=False) form.base_fields['slug'].initial = initial_slug form.base_fields['title'].initial = initial_title form.base_fields['slug'].label = _('Slug') template = get_template_from_request(request, obj) page_templates = settings.get_page_templates() if len(page_templates) > 0: template_choices = list(page_templates) template_choices.insert( 0, (settings.PAGE_DEFAULT_TEMPLATE, _('Default template'))) form.base_fields['template'].choices = template_choices form.base_fields['template'].initial = force_text(template) for placeholder in get_placeholders(template): name = placeholder.name if obj: initial = placeholder.get_content(obj, language, name) else: initial = None form.base_fields[name] = placeholder.get_field(obj, language, initial=initial) for placeholder in self.metadata_fields: name = placeholder['name'] initial = None if obj: try: initial = Content.objects.get(page=obj, language=language, type=name).body except Content.DoesNotExist: pass form.base_fields[name] = placeholder['field'] form.base_fields[name].initial = initial return form
def change_view(self, request, object_id, extra_context=None): """The ``change`` admin view for the :class:`Page <pages.models.Page>`.""" language = get_language_from_request(request) extra_context = { 'language': language, # don't see where it's used #'lang': current_lang, 'page_languages': settings.PAGE_LANGUAGES, } try: int(object_id) except ValueError: raise Http404('The "%s" part of the location is invalid.' % str(object_id)) try: obj = self.model.objects.get(pk=object_id) except self.model.DoesNotExist: # Don't raise Http404 just yet, because we haven't checked # permissions yet. We don't want an unauthenticated user to be able # to determine whether a given object exists. obj = None else: template = get_template_from_request(request, obj) extra_context['placeholders'] = get_placeholders(template) extra_context['traduction_languages'] = [ l for l in settings.PAGE_LANGUAGES if Content.objects.get_content(obj, l[0], "title") and l[0] != language ] extra_context['page'] = obj return super(PageAdmin, self).change_view(request, object_id, extra_context=extra_context)
def change_view(self, request, object_id, extra_context=None): """The ``change`` admin view for the :class:`Page <pages.models.Page>`.""" language = get_language_from_request(request) extra_context = { 'language': language, # don't see where it's used #'lang': current_lang, 'page_languages': settings.PAGE_LANGUAGES, } try: int(object_id) except ValueError: raise Http404('The "%s" part of the location is invalid.' % str(object_id)) try: obj = self.model.objects.get(pk=object_id) except self.model.DoesNotExist: # Don't raise Http404 just yet, because we haven't checked # permissions yet. We don't want an unauthenticated user to be able # to determine whether a given object exists. obj = None else: template = get_template_from_request(request, obj) extra_context['placeholders'] = get_placeholders(template) extra_context['traduction_languages'] = [l for l in settings.PAGE_LANGUAGES if Content.objects.get_content(obj, l[0], "title") and l[0] != language] extra_context['page'] = obj return super(PageAdmin, self).change_view(request, object_id, extra_context=extra_context)
def get_form(self, request, obj=None, **kwargs): """Get a :class:`Page <pages.admin.forms.PageForm>` for the :class:`Page <pages.models.Page>` and modify its fields depending on the request.""" #form = super(PageAdmin, self).get_form(request, obj, **kwargs) template = get_template_from_request(request, obj) form = make_form(self.model, get_placeholders(template)) language = get_language_from_request(request) form.base_fields['language'].initial = language if obj: initial_slug = obj.slug(language=language, fallback=False) initial_title = obj.title(language=language, fallback=False) form.base_fields['slug'].initial = initial_slug form.base_fields['title'].initial = initial_title form.base_fields['slug'].label = _('Slug') template = get_template_from_request(request, obj) page_templates = settings.get_page_templates() if len(page_templates) > 0: template_choices = list(page_templates) template_choices.insert(0, (settings.PAGE_DEFAULT_TEMPLATE, _('Default template'))) form.base_fields['template'].choices = template_choices form.base_fields['template'].initial = force_text(template) for placeholder in get_placeholders(template): name = placeholder.name if obj: initial = placeholder.get_content(obj, language, name) else: initial = None form.base_fields[name] = placeholder.get_field(obj, language, initial=initial) for placeholder in self.metadata_fields: name = placeholder['name'] initial = None if obj: try: initial = Content.objects.get(page=obj, language=language, type=name).body except Content.DoesNotExist: pass form.base_fields[name] = placeholder['field'] form.base_fields[name].initial = initial return form
def test_bug_152(self): """Test bug 152 http://code.google.com/p/django-page-cms/issues/detail?id=152""" from basic_cms.utils import get_placeholders self.assertEqual( str(get_placeholders('pages/tests/test1.html')), "[<Placeholder Node: body>]" )
def traduction(request, page_id, language_id): """Traduction helper.""" page = Page.objects.get(pk=page_id) lang = language_id placeholders = get_placeholders(page.get_template()) language_error = (Content.objects.get_content(page, language_id, "title") is None) return render_to_response('pages/traduction_helper.html', { 'page': page, 'lang': lang, 'language_error': language_error, 'placeholders': placeholders, }, context_instance=RequestContext(request))
def test_placeholder_bug(self): """Test placeholder with django template inheritance works prepoerly. http://code.google.com/p/django-page-cms/issues/detail?id=210 """ p1 = self.new_page(content={'slug':'test', 'one':'one', 'two': 'two'}) template = django.template.loader.get_template('pages/tests/extends.html') context = Context({'current_page': p1, 'lang':'en-us'}) renderer = template.render(context) self.assertTrue('one' in renderer) self.assertTrue('two' in renderer) from basic_cms.utils import get_placeholders self.assertEqual( str(get_placeholders('pages/tests/extends.html')), '[<Placeholder Node: one>, <Placeholder Node: two>]')
def traduction(request, page_id, language_id): """Traduction helper.""" page = Page.objects.get(pk=page_id) lang = language_id placeholders = get_placeholders(page.get_template()) language_error = ( Content.objects.get_content(page, language_id, "title") is None ) return render_to_response('pages/traduction_helper.html', { 'page': page, 'lang': lang, 'language_error': language_error, 'placeholders': placeholders, }, context_instance=RequestContext(request))
def save_model(self, request, page, form, change): """Move the page in the tree if necessary and save every placeholder :class:`Content <pages.models.Content>`. """ language = form.cleaned_data['language'] target = form.data.get('target', None) position = form.data.get('position', None) page.save() # if True, we need to move the page if target and position: try: target = self.model.objects.get(pk=target) except self.model.DoesNotExist: pass else: target.invalidate() page.move_to(target, position) for name in self.mandatory_placeholders: data = form.cleaned_data[name] placeholder = PlaceholderNode(name) extra_data = placeholder.get_extra_data(form.data) placeholder.save(page, language, data, change, extra_data=extra_data) for placeholder in get_placeholders(page.get_template()): if (placeholder.name in form.cleaned_data and placeholder.name not in self.mandatory_placeholders): data = form.cleaned_data[placeholder.name] extra_data = placeholder.get_extra_data(form.data) placeholder.save(page, language, data, change, extra_data=extra_data) for placeholder in self.metadata_fields: data = form.cleaned_data[placeholder['name']] Content.objects.set_or_create_content(page, language, placeholder['name'], data) page.invalidate()
def save_model(self, request, page, form, change): """Move the page in the tree if necessary and save every placeholder :class:`Content <pages.models.Content>`. """ language = form.cleaned_data['language'] target = form.data.get('target', None) position = form.data.get('position', None) page.save() # if True, we need to move the page if target and position: try: target = self.model.objects.get(pk=target) except self.model.DoesNotExist: pass else: target.invalidate() page.move_to(target, position) for name in self.mandatory_placeholders: data = form.cleaned_data[name] placeholder = PlaceholderNode(name) extra_data = placeholder.get_extra_data(form.data) placeholder.save(page, language, data, change, extra_data=extra_data) for placeholder in get_placeholders(page.get_template()): if(placeholder.name in form.cleaned_data and placeholder.name not in self.mandatory_placeholders): data = form.cleaned_data[placeholder.name] extra_data = placeholder.get_extra_data(form.data) placeholder.save(page, language, data, change, extra_data=extra_data) for placeholder in self.metadata_fields: data = form.cleaned_data[placeholder['name']] Content.objects.set_or_create_content( page, language, placeholder['name'], data ) page.invalidate()
def test_placeholder_bug(self): """Test placeholder with django template inheritance works prepoerly. http://code.google.com/p/django-page-cms/issues/detail?id=210 """ p1 = self.new_page(content={ 'slug': 'test', 'one': 'one', 'two': 'two' }) template = django.template.loader.get_template( 'pages/tests/extends.html') context = Context({'current_page': p1, 'lang': 'en-us'}) renderer = template.render(context) self.assertTrue('one' in renderer) self.assertTrue('two' in renderer) from basic_cms.utils import get_placeholders self.assertEqual(str(get_placeholders('pages/tests/extends.html')), '[<Placeholder Node: one>, <Placeholder Node: two>]')
def get_fieldsets(self, request, obj=None): """ Add fieldsets of placeholders to the list of already existing fieldsets. """ # some ugly business to remove freeze_date # from the field list general_module = { 'fields': list(self.general_fields), 'classes': ('module-general', ), } default_fieldsets = list(self.fieldsets) if not request.user.has_perm('pages.can_freeze'): general_module['fields'].remove('freeze_date') if not request.user.has_perm('pages.can_publish'): general_module['fields'].remove('status') default_fieldsets[0][1] = general_module placeholder_fieldsets = [] template = get_template_from_request(request, obj) for placeholder in get_placeholders(template): if placeholder.name not in self.mandatory_placeholders: placeholder_fieldsets.append(placeholder.name) additional_fieldsets = [] # meta fields metadata_fieldsets = [f['name'] for f in self.metadata_fields] additional_fieldsets.append((_('Metadata'), { 'fields': metadata_fieldsets, 'classes': ('module-content', 'grp-collapse grp-closed'), })) additional_fieldsets.append((_('Content'), { 'fields': placeholder_fieldsets, 'classes': ('module-content', ), })) return default_fieldsets + additional_fieldsets
def get_fieldsets(self, request, obj=None): """ Add fieldsets of placeholders to the list of already existing fieldsets. """ # some ugly business to remove freeze_date # from the field list general_module = { 'fields': list(self.general_fields), 'classes': ('module-general',), } default_fieldsets = list(self.fieldsets) if not request.user.has_perm('pages.can_freeze'): general_module['fields'].remove('freeze_date') if not request.user.has_perm('pages.can_publish'): general_module['fields'].remove('status') default_fieldsets[0][1] = general_module placeholder_fieldsets = [] template = get_template_from_request(request, obj) for placeholder in get_placeholders(template): if placeholder.name not in self.mandatory_placeholders: placeholder_fieldsets.append(placeholder.name) additional_fieldsets = [] # meta fields metadata_fieldsets = [f['name'] for f in self.metadata_fields] additional_fieldsets.append((_('Metadata'), { 'fields': metadata_fieldsets, 'classes': ('module-content', 'grp-collapse grp-closed'), })) additional_fieldsets.append((_('Content'), { 'fields': placeholder_fieldsets, 'classes': ('module-content',), })) return default_fieldsets + additional_fieldsets
def get_form(self, request, obj=None, **kwargs): form = super(PageAdminWithDefaultContent, self ).get_form(request, obj, **kwargs) language = get_language_from_request(request) if global_settings.LANGUAGE_CODE == language: # this is the "official" language return form if Content.objects.filter(page=obj, language=language).count(): return form # this is a new page, try to find some default content template = get_template_from_request(request, obj) for placeholder in get_placeholders(template): name = placeholder.name form.base_fields[name] = placeholder.get_field(obj, language, initial=Content.objects.get_content(obj, global_settings.LANGUAGE_CODE, name)) return form
def test_bug_152(self): """Test bug 152 http://code.google.com/p/django-page-cms/issues/detail?id=152""" from basic_cms.utils import get_placeholders self.assertEqual(str(get_placeholders('pages/tests/test1.html')), "[<Placeholder Node: body>]")