From febc8df810701062ed45c129c0e30c504db28849 Mon Sep 17 00:00:00 2001 From: hernani Date: Mon, 7 Jun 2010 14:15:07 +0000 Subject: [PATCH] Adds custom header and footer, and a preview mechanism. git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@383 0cfe37f9-358a-4d5e-be75-b63607b5c754 --- forum/context.py | 7 -- forum/settings/base.py | 5 +- forum/settings/forms.py | 16 +++-- forum/settings/static.py | 41 +++++++++++- .../skins/default/templates/base_content.html | 34 ++++++++-- forum/skins/default/templates/footer.html | 65 +++++++++---------- .../templates/osqaadmin/djstyle_base.html | 23 ++++++- .../default/templates/osqaadmin/set.html | 8 ++- forum/templatetags/extra_filters.py | 9 +++ forum/views/admin.py | 34 +++++++--- forum/views/meta.py | 3 +- 11 files changed, 180 insertions(+), 65 deletions(-) diff --git a/forum/context.py b/forum/context.py index ce7d1b1..641af38 100644 --- a/forum/context.py +++ b/forum/context.py @@ -4,13 +4,6 @@ def application_settings(context): return {'settings': settings} def auth_processor(request): - """ - Returns context variables required by apps that use Django's authentication - system. - - If there is no 'user' attribute in the request, uses AnonymousUser (from - django.contrib.auth). - """ if hasattr(request, 'user'): user = request.user if user.is_authenticated(): diff --git a/forum/settings/base.py b/forum/settings/base.py index cdc80b0..ae36e25 100644 --- a/forum/settings/base.py +++ b/forum/settings/base.py @@ -6,12 +6,13 @@ import logging TMP_MINICACHE_SECONDS = 5 class SettingSet(list): - def __init__(self, name, title, description, weight=1000, markdown=False): + def __init__(self, name, title, description, weight=1000, markdown=False, can_preview=False): self.name = name self.title = title self.description = description self.weight = weight self.markdown = markdown + self.can_preview = can_preview class BaseSetting(object): @@ -30,6 +31,8 @@ class BaseSetting(object): self._temp = None if set is not None: + self.set = set + if not set.name in Setting.sets: Setting.sets[set.name] = set diff --git a/forum/settings/forms.py b/forum/settings/forms.py index c0d3a49..b4a93e6 100644 --- a/forum/settings/forms.py +++ b/forum/settings/forms.py @@ -14,16 +14,20 @@ class UnfilteredField(forms.CharField): class SettingsSetForm(forms.Form): - def __init__(self, set, data=None, *args, **kwargs): - if data is None: - initial = dict([(setting.name, setting.value) for setting in set]) - else: - initial = None + def __init__(self, set, data=None, unsaved=None, *args, **kwargs): + initial = dict([(setting.name, setting.value) for setting in set]) + + if unsaved: + initial.update(unsaved) super(SettingsSetForm, self).__init__(data, initial=initial, *args, **kwargs) for setting in set: - if isinstance(setting, (Setting.emulators.get(str, DummySetting), Setting.emulators.get(unicode, DummySetting))): + widget = setting.field_context.get('widget', None) + + if widget is forms.RadioSelect or isinstance(widget, forms.RadioSelect): + field = forms.ChoiceField(**setting.field_context) + elif isinstance(setting, (Setting.emulators.get(str, DummySetting), Setting.emulators.get(unicode, DummySetting))): if not setting.field_context.get('widget', None): setting.field_context['widget'] = forms.TextInput(attrs={'class': 'longstring'}) field = forms.CharField(**setting.field_context) diff --git a/forum/settings/static.py b/forum/settings/static.py index 2ba412a..3cc7602 100644 --- a/forum/settings/static.py +++ b/forum/settings/static.py @@ -1,10 +1,10 @@ from base import Setting, SettingSet -from django.forms.widgets import Textarea +from django.forms.widgets import Textarea, RadioSelect from django.utils.translation import ugettext_lazy as _ STATIC_PAGE_REGISTRY = Setting('STATIC_PAGE_REGISTRY', {}) -CSS_SET = SettingSet('css', 'Custom CSS', "Define some custom css you can use to override the default css.", 2000) +CSS_SET = SettingSet('css', 'Custom CSS', "Define some custom css you can use to override the default css.", 2000, can_preview=True) USE_CUSTOM_CSS = Setting('USE_CUSTOM_CSS', False, CSS_SET, dict( label = _("Use custom CSS"), @@ -17,3 +17,40 @@ help_text = _("Your custom CSS."), widget=Textarea(attrs={'rows': '25'}), required=False)) + +HEAD_AND_FOOT_SET = SettingSet('headandfoot', 'Header and Footer', "Adds a custom header and/or footer to your page", 2000, can_preview=True) + +USE_CUSTOM_HEADER = Setting('USE_CUSTOM_HEADER', False, HEAD_AND_FOOT_SET, dict( +label = _("Use custom header"), +help_text = _("Do you want to use a custom header."), +required=False)) + +CUSTOM_HEADER = Setting('CUSTOM_HEADER', '', HEAD_AND_FOOT_SET, dict( +label = _("Custom Header"), +help_text = _("Your custom header."), +widget=Textarea(attrs={'rows': '25'}), +required=False)) + +USE_CUSTOM_FOOTER = Setting('USE_CUSTOM_FOOTER', False, HEAD_AND_FOOT_SET, dict( +label = _("Use custom footer"), +help_text = _("Do you want to use a custom footer."), +required=False)) + +CUSTOM_FOOTER = Setting('CUSTOM_FOOTER', '', HEAD_AND_FOOT_SET, dict( +label = _("Custom Footer"), +help_text = _("Your custom footer."), +widget=Textarea(attrs={'rows': '25'}), +required=False)) + +CUSTOM_FOOTER_MODE_CHOICES = ( + ('replace', _('Replace default footer')), + ('above', _('Above default footer')), + ('below', _('Below default footer')), +) + +CUSTOM_FOOTER_MODE = Setting('CUSTOM_FOOTER_MODE', 'replace', HEAD_AND_FOOT_SET, dict( +label = _("Custom Footer Mode"), +help_text = _("How your custom footer will appear."), +widget=RadioSelect, +choices=CUSTOM_FOOTER_MODE_CHOICES, +required=False)) \ No newline at end of file diff --git a/forum/skins/default/templates/base_content.html b/forum/skins/default/templates/base_content.html index c434d66..79c85dc 100644 --- a/forum/skins/default/templates/base_content.html +++ b/forum/skins/default/templates/base_content.html @@ -1,7 +1,6 @@ -{% load i18n %} -{% load extra_tags %} +{% load i18n extra_tags extra_filters markup %} {% block fulltitle %}{% block title %}{% endblock %} - {{ settings.APP_SHORT_NAME }}{% endblock %} @@ -14,7 +13,7 @@ {% endif %} - {% if settings.USE_CUSTOM_CSS %} + {% if settings.USE_CUSTOM_CSS|or_preview:request %} {% endif %} {% block forestyle %}{% endblock %} @@ -65,6 +64,11 @@ {% endautoescape %} × + {% if settings.USE_CUSTOM_HEADER|or_preview:request %} +
+ {{ settings.CUSTOM_HEADER|or_preview:request|markdown:"settingsparser" }} +
+ {% endif %} {% include "header.html" %} {% block page_center %}
@@ -82,7 +86,29 @@
{% endblock %} - {% include "footer.html" %} + {% if settings.USE_CUSTOM_FOOTER|or_preview:request %} + {% ifequal settings.CUSTOM_FOOTER_MODE|or_preview:request "above" %} + + {% endifequal %} +
+ {% ifequal settings.CUSTOM_FOOTER_MODE|or_preview:request "replace" %} + {{ settings.CUSTOM_FOOTER|or_preview:request|markdown:"settingsparser" }} + {% else %} + {% include "footer.html" %} + {% endifequal %} +
+ {% ifequal settings.CUSTOM_FOOTER_MODE|or_preview:request "below" %} + + {% endifequal %} + {% else %} +
+ {% include "footer.html" %} +
+ {% endif %} {% block endjs %} {% endblock %} {% if settings.GOOGLE_ANALYTICS_KEY %} diff --git a/forum/skins/default/templates/footer.html b/forum/skins/default/templates/footer.html index 1650315..4e1b97b 100644 --- a/forum/skins/default/templates/footer.html +++ b/forum/skins/default/templates/footer.html @@ -1,37 +1,36 @@ {% load extra_tags %} {% load i18n %} -
-
- -

- - powered by OSQA - -

-
- -
+ +
+ +

+ + powered by OSQA + +

+
+ diff --git a/forum/skins/default/templates/osqaadmin/djstyle_base.html b/forum/skins/default/templates/osqaadmin/djstyle_base.html index 9a7cf74..2ddbcbf 100644 --- a/forum/skins/default/templates/osqaadmin/djstyle_base.html +++ b/forum/skins/default/templates/osqaadmin/djstyle_base.html @@ -53,6 +53,15 @@ {% block admincontent %}{% endblock %}