Nicer menu.
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 10 Oct 2012 11:22:49 +0000 (13:22 +0200)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 10 Oct 2012 11:23:10 +0000 (13:23 +0200)
36 files changed:
contact/forms.py
contact/locale/pl/LC_MESSAGES/django.mo
contact/locale/pl/LC_MESSAGES/django.po
contact/templates/contact/form.html
contact/templates/contact/mail_body.txt
contact/templates/contact/mail_managers_body.txt
contact/templates/contact/mail_managers_subject.txt
contact/templates/contact/mail_subject.txt
fnpdjango/templates/fnpdjango/lang_switcher.html [new file with mode: 0755]
fnpdjango/templatetags/fnp_lang.py [new file with mode: 0755]
fnpdjango/utils/views.py
menu/__init__.py [new file with mode: 0644]
menu/helpers.py [new file with mode: 0755]
menu/models.py [new file with mode: 0644]
menu/templates/menu/menu.html [new file with mode: 0755]
menu/templatetags/__init__.py [new file with mode: 0755]
menu/templatetags/menu_tags.py [new file with mode: 0755]
migdal/__init__.py
migdal/templates/migdal/entry/entry_detail.html
migdal/templates/migdal/entry/entry_list.html
migdal/templates/migdal/menu.html [deleted file]
migdal/templates/search/search.html
migdal/templatetags/migdal_tags.py
migdal/urls.py
migdal/views.py
prawokultury/contact_forms.py [changed mode: 0755->0644]
prawokultury/locale/pl/LC_MESSAGES/django.mo
prawokultury/locale/pl/LC_MESSAGES/django.po
prawokultury/menu_items.py [new file with mode: 0644]
prawokultury/settings.d/30-apps.conf
prawokultury/settings.d/60-custom.conf
prawokultury/static/css/forms.css
prawokultury/static/css/forms.scss
prawokultury/templates/base.html
prawokultury/urls.py
requirements.txt

index 81a83df..70a415b 100644 (file)
@@ -39,11 +39,12 @@ class ContactForm(forms.Form):
                 attachment.file.save(value.name, value)
                 attachment.save()
 
                 attachment.file.save(value.name, value)
                 attachment.save()
 
+        site = Site.objects.get_current()
         dictionary = {
             'form_tag': self.form_tag,
         dictionary = {
             'form_tag': self.form_tag,
-            'site': Site.objects.get_current(),
+            'site_name': site.name,
+            'site_domain': site.domain,
             'contact': contact,
             'contact': contact,
-            'admin_url': '',
         }
         context = RequestContext(request)
         mail_managers_subject = render_to_string([
         }
         context = RequestContext(request)
         mail_managers_subject = render_to_string([
@@ -67,7 +68,7 @@ class ContactForm(forms.Form):
                     'contact/mail_body.txt', 
                 ], dictionary, context)
             send_mail(mail_subject, mail_body,
                     'contact/mail_body.txt', 
                 ], dictionary, context)
             send_mail(mail_subject, mail_body,
-                'no-reply@%s' % dictionary['site'].domain,
+                'no-reply@%s' % site.domain,
                 [contact.contact],
                 fail_silently=True)
 
                 [contact.contact],
                 fail_silently=True)
 
index fb22992..985b0c0 100644 (file)
Binary files a/contact/locale/pl/LC_MESSAGES/django.mo and b/contact/locale/pl/LC_MESSAGES/django.mo differ
index c2e5844..7805958 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-10-08 16:48+0200\n"
-"PO-Revision-Date: 2012-10-08 16:51+0100\n"
+"POT-Creation-Date: 2012-10-10 13:12+0200\n"
+"PO-Revision-Date: 2012-10-10 13:12+0100\n"
 "Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: \n"
 "Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: \n"
@@ -60,8 +60,8 @@ msgstr "Wyślij"
 #: templates/contact/mail_body.txt:2
 #: templates/contact/mail_subject.txt:1
 #, python-format
 #: templates/contact/mail_body.txt:2
 #: templates/contact/mail_subject.txt:1
 #, python-format
-msgid "Thank you for contacting us at %(site.name)s."
-msgstr "Dziękujemy za skontaktowanie się z nami na stronie %(site.name)s."
+msgid "Thank you for contacting us at %(site_name)s."
+msgstr "Dziękujemy za skontaktowanie się z nami na stronie %(site_name)s."
 
 #: templates/contact/mail_body.txt:3
 msgid "Your submission has been referred to the project coordinator."
 
 #: templates/contact/mail_body.txt:3
 msgid "Your submission has been referred to the project coordinator."
index 85a971e..3374c58 100644 (file)
@@ -7,7 +7,7 @@
     {% block contact_form_description %}
     {% endblock %}
 
     {% block contact_form_description %}
     {% endblock %}
 
-    <form method="POST" action="." enctype="multipart/form-data">
+    <form method="POST" action="." enctype="multipart/form-data" class="submit-form">
     {% csrf_token %}
     <table>
         {{ form.as_table }}
     {% csrf_token %}
     <table>
         {{ form.as_table }}
index b6037ad..5015757 100644 (file)
@@ -1,5 +1,5 @@
 {% load i18n %}
 {% load i18n %}
-{% blocktrans %}Thank you for contacting us at {{ site.name }}.{% endblocktrans %}
+{% blocktrans %}Thank you for contacting us at {{ site_name }}.{% endblocktrans %}
 {% trans "Your submission has been referred to the project coordinator." %}
 
 -- 
 {% trans "Your submission has been referred to the project coordinator." %}
 
 -- 
index 1090fb7..c54478a 100644 (file)
@@ -1,5 +1,5 @@
-Wypełniono formularz {{ form_tag }} na stronie {{ site.name }}.
+{% load url from future %}Wypełniono formularz {{ form_tag }} na stronie {{ site_name }}.
 
 
-http://{{ site.domain }}{{ admin_url }}
+http://{{ site_domain }}{% url 'admin:contact_contact_change' contact.pk %}
 
 {{ contact.body }}
 
 {{ contact.body }}
index 93088ee..12d2c8e 100644 (file)
@@ -1 +1 @@
-Wypełniono formularz {{ form_tag }} na stronie {{ site.name }}.
\ No newline at end of file
+Wypełniono formularz {{ form_tag }} na stronie {{ site_name }}.
\ No newline at end of file
index 3edb82a..b8f586e 100644 (file)
@@ -1 +1 @@
-{% load i18n %}{% blocktrans %}Thank you for contacting us at {{ site.name }}.{% endblocktrans %}
\ No newline at end of file
+{% load i18n %}{% blocktrans %}Thank you for contacting us at {{ site_name }}.{% endblocktrans %}
\ No newline at end of file
diff --git a/fnpdjango/templates/fnpdjango/lang_switcher.html b/fnpdjango/templates/fnpdjango/lang_switcher.html
new file mode 100755 (executable)
index 0000000..9b725ac
--- /dev/null
@@ -0,0 +1,6 @@
+{% load i18n fnp_lang %}
+{% for lc, ln in languages %}
+    {% if lc != request.LANGUAGE_CODE %}
+        <a href="{{ request|get_here_url:lc }}">{{ lc }}</a>
+    {% endif %}
+{% endfor %}
\ No newline at end of file
diff --git a/fnpdjango/templatetags/fnp_lang.py b/fnpdjango/templatetags/fnp_lang.py
new file mode 100755 (executable)
index 0000000..8eb5194
--- /dev/null
@@ -0,0 +1,45 @@
+from django.conf import settings
+from django.core.urlresolvers import resolve, reverse
+from django import template
+from django.utils import translation
+from ..utils.views import get_current_object
+
+register = template.Library()
+
+
+@register.inclusion_tag('fnpdjango/lang_switcher.html', takes_context=True)
+def lang_switcher(context):
+    """Context-aware language switcher.
+
+    Use ..utils.views.set_current_object to provide the context.
+    """
+    request = context['request']
+    obj = get_current_object(request)
+    languages = settings.LANGUAGES
+    if hasattr(obj, 'get_available_languages'):
+        available_languages = set(obj.get_available_languages())
+        languages = [lang for lang in languages if lang[0] in available_languages]
+    return {
+        'request': request,
+        'languages': languages,
+    }
+
+
+@register.filter
+def get_here_url(request, lang):
+    obj = get_current_object(request, for_url=True)
+    if hasattr(obj, 'get_absolute_url'):
+        with translation.override(lang):
+            url = obj.get_absolute_url()
+    else:
+        match = resolve(request.get_full_path())
+        view = match.url_name
+        if view is None:
+            view = match.func
+        if lang is None:
+            lang = translation.get_language()
+        with translation.override(lang):
+            url = reverse(view, args=match.args, kwargs=match.kwargs)
+    return url
+
+
index caf8a43..f2270cc 100644 (file)
@@ -15,3 +15,14 @@ def serve_file(url):
         return response
     else:
         return HttpResponseRedirect(url)
         return response
     else:
         return HttpResponseRedirect(url)
+
+
+def set_current_object(request, obj, in_url=True):
+    request.CURRENT_OBJECT = obj
+    request.CURRENT_OBJECT_IN_URL = in_url
+
+
+def get_current_object(request, for_url=False):
+    if for_url and not getattr(request, 'CURRENT_OBJECT_IN_URL', True):
+        return None
+    return getattr(request, 'CURRENT_OBJECT', None)
diff --git a/menu/__init__.py b/menu/__init__.py
new file mode 100644 (file)
index 0000000..d1daaa0
--- /dev/null
@@ -0,0 +1,8 @@
+from fnpdjango.utils.app import AppSettings
+
+
+class Settings(AppSettings):
+    MODULE = 'menu_items'
+
+
+app_settings = Settings('MENU')
diff --git a/menu/helpers.py b/menu/helpers.py
new file mode 100755 (executable)
index 0000000..2a5df9d
--- /dev/null
@@ -0,0 +1,74 @@
+class MenuItem(object):
+    html_id = None
+
+    def __init__(self, url, title, html_id=None):
+        self.url = url
+        self.title = title
+        self.html_id = html_id
+
+    def is_active(self, request, value):
+        return request.get_full_path() == str(self.url)
+
+    def check_active(self, request, value):
+        self.active = self.is_active(request, value)
+
+    def get_url(self):
+        return self.url
+
+    def get_title(self):
+        return self.title
+
+
+class ObjectMenuItem(MenuItem):
+    """Menu item corresponding to an object.
+
+    If no url or title is provided, get_absolute_url and __unicode__ are used.
+    You can also provide a reverse lookup dictionary, as in {model: field_name}.
+    """
+    def __init__(self, obj, url=None, rev_lookups=None, title=None, html_id=None):
+        super(ObjectMenuItem, self).__init__(url=url, title=title, html_id=html_id)
+        self.obj = obj
+        self.rev_lookups = rev_lookups
+
+    def get_title(self):
+        return self.title or unicode(self.obj)
+
+    @property
+    def get_url(self):
+        return self.url or self.get_obj().get_absolute_url()
+
+    def is_active(self, request, value):
+        if value == self.obj:
+            return True
+        if self.rev_lookups:
+            for model, manager in self.rev_lookups.items():
+                if (isinstance(value, model) and 
+                        self.obj in getattr(value, manager).all()):
+                    return True
+        return False
+
+
+class ModelMenuItem(MenuItem):
+    """Menu item corresponding to a model, optionally filtered by some fields."""
+
+    def __init__(self, model, url, field_lookups=None, title=None, html_id=None):
+        if title is None:
+            title = unicode(model)
+        super(ModelMenuItem, self).__init__(title=title, url=url, html_id=html_id)
+        self.model = model
+        self.field_lookups = field_lookups
+
+    def is_active(self, request, value):
+        if value == self.model and not self.field_lookups:
+            return True
+        if isinstance(value, self.model) and self.field_lookups:
+            lookups_ok = True
+            for field, lookup in self.field_lookups.items():
+                if getattr(value, field) != lookup:
+                    lookups_ok = False
+            if lookups_ok:
+                return True
+        return False
+
+    def get_title(self):
+        return self.title or unicode(self.model)
diff --git a/menu/models.py b/menu/models.py
new file mode 100644 (file)
index 0000000..bebdfaa
--- /dev/null
@@ -0,0 +1,4 @@
+import importlib
+from . import app_settings
+
+items = importlib.import_module(app_settings.MODULE).ITEMS
diff --git a/menu/templates/menu/menu.html b/menu/templates/menu/menu.html
new file mode 100755 (executable)
index 0000000..56debe5
--- /dev/null
@@ -0,0 +1,7 @@
+{% load i18n %}
+{% for item in items %}
+    <li{% if item.active %} 
+        class="active"{%endif %} {% if item.html_id %}
+        id="{{ item.html_id}}"{% endif %}>
+        <a href="{{ item.get_url }}">{{ item.get_title }}</a></li>
+{% endfor %}
diff --git a/menu/templatetags/__init__.py b/menu/templatetags/__init__.py
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/menu/templatetags/menu_tags.py b/menu/templatetags/menu_tags.py
new file mode 100755 (executable)
index 0000000..7446cb7
--- /dev/null
@@ -0,0 +1,14 @@
+from django import template
+from fnpdjango.utils.views import get_current_object
+from ..models import items
+
+register = template.Library()
+
+
+@register.inclusion_tag('menu/menu.html', takes_context=True)
+def main_menu(context):
+    request = context['request']
+    obj = get_current_object(request)
+    for item in items:
+        item.check_active(request, obj)
+    return {'items': items}
index 4d3a144..fe90406 100644 (file)
@@ -25,7 +25,7 @@ class Settings(AppSettings):
     )
     LAST_COMMENTS = 5
 
     )
     LAST_COMMENTS = 5
 
-    MENU = []
+    MAIN_PAGE_ENTRY = None
 
     TYPES_DICT = None
     def _more_TYPES_DICT(self, value):
 
     TYPES_DICT = None
     def _more_TYPES_DICT(self, value):
index 92bf2dd..c19b49b 100755 (executable)
 {% endspaceless %}{% endblock %}
 
 
 {% endspaceless %}{% endblock %}
 
 
-{% block "main_menu" %}
-    {% main_menu 'object' entry %}
-{% endblock "main_menu" %}
-
-
 {% block "body" %}
 
 {% if not entry.published %}
 {% block "body" %}
 
 {% if not entry.published %}
index bd9bbf6..e144533 100755 (executable)
@@ -5,17 +5,6 @@
 {% load migdal_tags %}
 
 
 {% load migdal_tags %}
 
 
-{% block "main_menu" %}
-    {% if category %}
-        {% main_menu 'object' category %}
-    {% elif entry_type %}
-        {% main_menu 'entry_type' entry_type.db %}
-    {% else %}
-        {{ block.super }}
-    {% endif %}
-{% endblock "main_menu" %}
-
-
 {% block "body" %}
 
 {% if category %}
 {% block "body" %}
 
 {% if category %}
diff --git a/migdal/templates/migdal/menu.html b/migdal/templates/migdal/menu.html
deleted file mode 100755 (executable)
index 3fcfef5..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-{% load i18n %}
-{% for item in items %}
-    <li{% if item.active %} 
-        class="active"{%endif %} {% if item.html_id %}
-        id="{{ item.html_id}}"{% endif %}>
-        <a href="{{ item.url }}">{{ item.title }}</a></li>
-{% endfor %}
index 84610ff..31be738 100644 (file)
@@ -2,7 +2,7 @@
 {% load url from future %}
 {% load i18n %}
 {% load migdal_tags %}
 {% load url from future %}
 {% load i18n %}
 {% load migdal_tags %}
-{% load events_tags %}
+{#% load events_tags %#}
 
 
 {% block "body" %}
 
 
 {% block "body" %}
@@ -11,8 +11,8 @@
 {% for result in page.object_list %}
   {% if result.model_name == "entry" %}
     {% entry_short result.object %}
 {% for result in page.object_list %}
   {% if result.model_name == "entry" %}
     {% entry_short result.object %}
-  {% elif result.model_name == "event" %}
-    {% event_short result.object %}
+  {#% elif result.model_name == "event" %#}
+    {#% event_short result.object %#}
   {% endif %}
 {% empty %}
 <p>{% trans "No results found." %}</p>
   {% endif %}
 {% empty %}
 <p>{% trans "No results found." %}</p>
index d12920f..c1b824c 100644 (file)
@@ -4,7 +4,6 @@
 #
 from django_comments_xtd.models import XtdComment
 from django.contrib import comments
 #
 from django_comments_xtd.models import XtdComment
 from django.contrib import comments
-from django.core.urlresolvers import reverse
 from django import template
 from migdal import app_settings
 from migdal.models import Category, Entry
 from django import template
 from migdal import app_settings
 from migdal.models import Category, Entry
@@ -76,62 +75,3 @@ def entry_comment_form(entry):
             'form': comments.get_form()(entry),
             'next': entry.get_absolute_url(),
         }
             'form': comments.get_form()(entry),
             'next': entry.get_absolute_url(),
         }
-
-
-class MenuItem(object):
-    html_id = None
-
-    def __init__(self, title, url, html_id=None):
-        self.title = title
-        self.url = url
-        self.html_id = html_id
-
-    def check_active(self, chooser, value):
-        self.active = chooser == 'url' and value == self.url
-
-
-class ModelMenuItem(object):
-    def __init__(self, obj, title=None, html_id=None):
-        self.obj = obj
-        self.title = title or unicode(obj)
-        self.url = obj.get_absolute_url()
-        self.html_id = html_id
-
-    def check_active(self, chooser, value):
-        self.active = (chooser == 'object' and value == self.obj or
-                        chooser == 'objects' and self.obj in value)
-
-class CategoryMenuItem(ModelMenuItem):
-    def check_active(self, chooser, value):
-        super(CategoryMenuItem, self).check_active(chooser, value)
-        self.active = (self.active or
-                       (chooser == 'object' and isinstance(value, Entry) and
-                        self.obj in value.categories.all()))
-
-
-class EntryTypeMenuItem(object):
-    def __init__(self, title, type_, html_id=None):
-        self.type = type_
-        self.title = title
-        self.url = reverse('migdal_entry_list_%s' % type_)
-        self.html_id = html_id
-
-    def check_active(self, chooser, value):
-        self.active = (chooser == 'object' and isinstance(value, Entry)
-                        and value.type == self.type or
-                        chooser == 'entry_type' and value == self.type)
-
-@register.inclusion_tag('migdal/menu.html', takes_context=True)
-def main_menu(context, chooser=None, value=None):
-    items = [
-        #ModelMenuItem(Entry.objects.get(slug_pl='o-nas')),
-        #MenuItem(_(u'Events'), reverse('events')),
-    ]
-    # TODO: context-aware language switcher
-    if context['request'].LANGUAGE_CODE == 'pl':
-        items.append(MenuItem(u'en', '/en/', html_id='item-lang'))
-    else:
-        items.append(MenuItem(u'pl', '/', html_id='item-lang'))
-    for item in items:
-        item.check_active(chooser, value)
-    return {'items': items}
index 310a648..49a4346 100644 (file)
@@ -28,7 +28,7 @@ for t in app_settings.TYPES:
 
 urlpatterns = i18n_patterns('',
     # main page
 
 urlpatterns = i18n_patterns('',
     # main page
-    url(r'^$', 'migdal.views.entry_list', name='migdal_main'),
+    url(r'^$', 'migdal.views.main', name='migdal_main'),
     url(r'^rss.xml$', feeds.EntriesFeed(), name='migdal_main_feed'),
     # submit new entry
     url(string_concat(r'^', _('submit'), r'/$'), 'migdal.views.submit', name='migdal_submit'),
     url(r'^rss.xml$', feeds.EntriesFeed(), name='migdal_main_feed'),
     # submit new entry
     url(string_concat(r'^', _('submit'), r'/$'), 'migdal.views.submit', name='migdal_submit'),
index 84cd6fe..d8652c7 100644 (file)
@@ -4,6 +4,7 @@
 #
 from django.shortcuts import get_object_or_404, render, redirect
 from django.utils.translation import get_language
 #
 from django.shortcuts import get_object_or_404, render, redirect
 from django.utils.translation import get_language
+from fnpdjango.utils.views import set_current_object
 from migdal import api
 from migdal.forms import get_submit_form
 from migdal.models import Category, Entry
 from migdal import api
 from migdal.forms import get_submit_form
 from migdal.models import Category, Entry
@@ -11,6 +12,14 @@ from migdal import app_settings
 from haystack.views import SearchView
 
 
 from haystack.views import SearchView
 
 
+def main(request):
+    if app_settings.MAIN_PAGE_ENTRY is not None:
+        main_entry = Entry.objects.get(**app_settings.MAIN_PAGE_ENTRY)
+        return entry(request, entry=main_entry)
+    else:
+        return entry_list(request)
+
+
 def entry_list(request, type_db=None, category_slug=None):
     lang = request.LANGUAGE_CODE
     templates = ["migdal/entry/entry_list.html"]
 def entry_list(request, type_db=None, category_slug=None):
     lang = request.LANGUAGE_CODE
     templates = ["migdal/entry/entry_list.html"]
@@ -30,6 +39,9 @@ def entry_list(request, type_db=None, category_slug=None):
     else:
         category = None
 
     else:
         category = None
 
+    if category:
+        set_current_object(request, category)
+
     promobox = 5 if entry_type is None and category is None else None
 
     object_list = api.entry_list(entry_type=entry_type, category=category,
     promobox = 5 if entry_type is None and category is None else None
 
     object_list = api.entry_list(entry_type=entry_type, category=category,
@@ -43,15 +55,17 @@ def entry_list(request, type_db=None, category_slug=None):
         })
 
 
         })
 
 
-def entry(request, type_db, slug):
-    lang = request.LANGUAGE_CODE
-    args = {'type': type_db, 'slug_%s' % lang: slug}
-    if not request.user.has_perm('migdal.change_entry'):
-        args['published_%s' % lang] = True
-    entry = get_object_or_404(Entry, **args)
+def entry(request, type_db=None, slug=None, entry=None):
+    if entry is None:
+        lang = request.LANGUAGE_CODE
+        args = {'type': type_db, 'slug_%s' % lang: slug}
+        entry = get_object_or_404(Entry, **args)
+    if request.user.has_perm('migdal.change_entry') or not entry.published:
+        raise Http404
+    set_current_object(request, entry, in_url=slug is not None)
 
     templates = ["migdal/entry/entry_detail.html"]
 
     templates = ["migdal/entry/entry_detail.html"]
-    if type_db is not None:
+    if entry.type is not None:
         templates = ["migdal/entry/%s/entry_detail.html" % type_db] + templates
     return render(request, templates, {'entry': entry})
 
         templates = ["migdal/entry/%s/entry_detail.html" % type_db] + templates
     return render(request, templates, {'entry': entry})
 
old mode 100755 (executable)
new mode 100644 (file)
index 4fbdd9c..90fc529
@@ -6,6 +6,10 @@ from django.utils.translation import ugettext_lazy as _
 class RegistrationForm(ContactForm):
     form_tag = 'register'
     name = forms.CharField(label=_('Name'), max_length=128)
 class RegistrationForm(ContactForm):
     form_tag = 'register'
     name = forms.CharField(label=_('Name'), max_length=128)
-    organization = forms.CharField(label=_('Organization'), max_length=128)
-    summary = forms.CharField(label=_('Summary'), widget=forms.Textarea)
-    presentation = forms.FileField(label=_('Presentation'))
+    contact = forms.EmailField(label=_('E-mail'), max_length=128)
+    organization = forms.CharField(label=_('Organization'), 
+            max_length=256, required=False)
+    presentation = forms.FileField(label=_('Presentation'),
+            required=False)
+    summary = forms.CharField(label=_('Summary'),
+            widget=forms.Textarea, required=False)
index a24b21f..6a54584 100644 (file)
Binary files a/prawokultury/locale/pl/LC_MESSAGES/django.mo and b/prawokultury/locale/pl/LC_MESSAGES/django.mo differ
index 31b4010..193eb47 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: prawokultury\n"
 "Report-Msgid-Bugs-To: \n"
 msgstr ""
 "Project-Id-Version: prawokultury\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-30 11:15+0200\n"
-"PO-Revision-Date: 2012-08-30 11:15+0100\n"
+"POT-Creation-Date: 2012-10-10 12:41+0200\n"
+"PO-Revision-Date: 2012-10-10 12:42+0100\n"
 "Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n"
 "Language-Team: FNP <fundacja@nowoczesnapolska.org.pl>\n"
 "Language: \n"
 "Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n"
 "Language-Team: FNP <fundacja@nowoczesnapolska.org.pl>\n"
 "Language: \n"
@@ -17,15 +17,28 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
 
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
 
-#: urls.py:23
-msgid "events"
-msgstr "wydarzenia"
+#: contact_forms.py:8
+msgid "Name"
+msgstr "Imię i nazwisko"
 
 
-#: templates/404.html:5
-msgid "Page not found."
-msgstr "Strona nie znaleziona."
+#: contact_forms.py:9
+msgid "Organization"
+msgstr "Organizacja"
+
+#: contact_forms.py:10
+msgid "Summary"
+msgstr "Podsumowanie prezentacji"
+
+#: contact_forms.py:11
+msgid "Presentation"
+msgstr "Prezentacja"
 
 
-#: templates/404.html:10
+#: menu_items.py:22
+msgid "Form"
+msgstr "Formularz"
+
+#: templates/404.html:5
+#: templates/404.html.py:10
 msgid "Page not found"
 msgstr "Strona nie znaleziona"
 
 msgid "Page not found"
 msgstr "Strona nie znaleziona"
 
@@ -33,73 +46,60 @@ msgstr "Strona nie znaleziona"
 msgid "The page you were looking for doesn't exist."
 msgstr "Strona, której szukasz, nie istnieje."
 
 msgid "The page you were looking for doesn't exist."
 msgstr "Strona, której szukasz, nie istnieje."
 
-#: templates/base.html:8
-#: templates/base.html.py:13
-#: templates/base.html:14
-#: templates/base.html.py:25
-#: templates/base.html:73
-msgid "Culture's right"
-msgstr "Prawo kultury"
+#: templates/base.html:26
+msgid "CopyCamp"
+msgstr "CopyCamp"
 
 
-#: templates/base.html:30
-msgid "Organizer"
-msgstr "Organizator"
+#: templates/base.html:41
+msgid "Search"
+msgstr "Szukaj"
 
 
-#: templates/base.html:33
-msgid "Modern Poland Foundation"
-msgstr "Fundacja Nowoczesna Polska"
+#: templates/base.html:84
+msgid "If not explicitly stated otherwise, all texts are licensed under the <a href='http://creativecommons.org/licenses/by-sa/3.0/'>Creative Commons Attribution-Share Alike</a> free license."
+msgstr "Jeśli nie oznaczono inaczej, wszystkie teksty są objęte wolną licencją <a href='http://creativecommons.org/licenses/by-sa/3.0/deed.pl'>Creative Commons Uznanie autorstwa – Na tych samych warunkach</a>."
 
 
-#: templates/base.html:35
-msgid "Sponsor"
-msgstr "Wspierane przez"
+#: templates/contact/register/form.html:4
+msgid "Registration form"
+msgstr "Formularz rejestracyjny"
 
 
-#: templates/base.html:38
-msgid "Trust for Civil Society in Central and Eastern Europe"
-msgstr ""
+#~ msgid "events"
+#~ msgstr "wydarzenia"
 
 
-#: templates/base.html:47
-msgid "Search"
-msgstr "Szukaj"
+#~ msgid "Page not found."
+#~ msgstr "Strona nie znaleziona."
 
 
-#: templates/base.html:62
-msgid "Upcoming events"
-msgstr "Nadchodzące wydarzenia"
+#~ msgid "Culture's right"
+#~ msgstr "Prawo kultury"
 
 
-#: templates/base.html:77
-msgid "Latest comments"
-msgstr "Ostatnie komentarze"
+#~ msgid "Modern Poland Foundation"
+#~ msgstr "Fundacja Nowoczesna Polska"
 
 
-#: templates/base.html:105
-msgid "If not explicitly stated otherwise, all texts are licensed under the <a href='http://creativecommons.org/licenses/by-sa/3.0/'>Creative Commons Attribution-Share Alike</a> free license."
-msgstr "Jeśli nie oznaczono inaczej, wszystkie teksty są objęte wolną licencją <a href='http://creativecommons.org/licenses/by-sa/3.0/deed.pl'>Creative Commons Uznanie autorstwa – Na tych samych warunkach</a>."
+#~ msgid "Sponsor"
+#~ msgstr "Wspierane przez"
+
+#~ msgid "Upcoming events"
+#~ msgstr "Nadchodzące wydarzenia"
+
+#~ msgid "Latest comments"
+#~ msgstr "Ostatnie komentarze"
+
+#~ msgid "Share on Facebook"
+#~ msgstr "Podziel się na Facebooku"
+
+#~ msgid "Share on Google+"
+#~ msgstr "Podziel się na Google+"
+
+#~ msgid "Share on Twitter"
+#~ msgstr "Podziel się na Twitterze"
+
+#~ msgid "Share on NK.pl"
+#~ msgstr "Podziel się na NK.pl"
+
+#~ msgid "next"
+#~ msgstr "następne"
 
 
-#: templates/share.html:5
-#: templates/share.html.py:7
-msgid "Share on Facebook"
-msgstr "Podziel się na Facebooku"
-
-#: templates/share.html:10
-#: templates/share.html.py:12
-msgid "Share on Google+"
-msgstr "Podziel się na Google+"
-
-#: templates/share.html:15
-#: templates/share.html.py:17
-msgid "Share on Twitter"
-msgstr "Podziel się na Twitterze"
-
-#: templates/share.html:20
-#: templates/share.html.py:22
-msgid "Share on NK.pl"
-msgstr "Podziel się na NK.pl"
-
-#: templates/prevnext/next.html:13
-msgid "next"
-msgstr "następne"
-
-#: templates/prevnext/previous.html:13
-msgid "previous"
-msgstr "poprzednie"
+#~ msgid "previous"
+#~ msgstr "poprzednie"
 
 #~ msgid "About us"
 #~ msgstr "O nas"
 
 #~ msgid "About us"
 #~ msgstr "O nas"
diff --git a/prawokultury/menu_items.py b/prawokultury/menu_items.py
new file mode 100644 (file)
index 0000000..59f3fc9
--- /dev/null
@@ -0,0 +1,24 @@
+from migdal.models import Entry
+from menu.helpers import ObjectMenuItem, MenuItem
+from django.core.urlresolvers import reverse_lazy
+from django.utils.translation import ugettext_lazy as _
+
+
+ITEMS = []
+
+def add_entry(**qs):
+    try:
+        entry = Entry.objects.get(**qs)
+    except Entry.DoesNotExist:
+        return
+    if not entry.published:
+        return
+    ITEMS.append(ObjectMenuItem(entry))
+
+add_entry(slug_pl='co')
+add_entry(slug_pl='gdzie')
+add_entry(slug_pl='program')
+add_entry(slug_pl='media')
+ITEMS.append(MenuItem(reverse_lazy('contact_form', args=['register']), _('Form')))
+add_entry(slug_pl='materialy')
+add_entry(slug_pl='kontakt')
index f466de7..ec61087 100755 (executable)
@@ -3,9 +3,11 @@ INSTALLED_APPS = (
     'fnpdjango',
 
     #'events',
     'fnpdjango',
 
     #'events',
+    'menu',
     'migdal',
     'contact',
 
     'migdal',
     'contact',
 
+    'sponsors',
     'gravatar',
     'south',
     'django.contrib.comments',
     'gravatar',
     'south',
     'django.contrib.comments',
index 9fec2d5..4e8f264 100755 (executable)
@@ -6,9 +6,13 @@ MIGDAL_TYPES = (
 )
 
 MIGDAL_TAXONOMIES = ()
 )
 
 MIGDAL_TAXONOMIES = ()
+MIGDAL_MAIN_PAGE_ENTRY = {'slug_pl': 'jakies-info'}
 
 CONTACT_FORMS_MODULE = 'prawokultury.contact_forms'
 
 
 CONTACT_FORMS_MODULE = 'prawokultury.contact_forms'
 
+MENU_MODULE = 'prawokultury.menu_items'
+
 # Use Nginx's X-accel when serving files with helpers.serve_file().
 # See http://wiki.nginx.org/X-accel
 X_ACCEL_REDIRECT = False
 # Use Nginx's X-accel when serving files with helpers.serve_file().
 # See http://wiki.nginx.org/X-accel
 X_ACCEL_REDIRECT = False
+
index 9b3957d..4acb30f 100644 (file)
@@ -34,3 +34,7 @@
     font-size: 1.1em; }
     .submit-form .helptext a {
       color: #363A3B; }
     font-size: 1.1em; }
     .submit-form .helptext a {
       color: #363A3B; }
+  .submit-form .required label {
+    font-weight: bold; }
+  .submit-form .required label:before {
+    content: '* '; }
index 626702e..7e8d90a 100644 (file)
             color: #363A3B;
         }
     }
             color: #363A3B;
         }
     }
+
+    .required label {
+        font-weight: bold;
+    }
+    .required label:before {
+        content: '* ';
+    }
 }
 }
index 6473962..5f200a5 100755 (executable)
@@ -1,7 +1,8 @@
 <!DOCTYPE html>
 {% load url from future %}
 {% load i18n static %}
 <!DOCTYPE html>
 {% load url from future %}
 {% load i18n static %}
-{% load fnp_common migdal_tags fnp_share %}
+{% load fnp_common migdal_tags fnp_share fnp_lang menu_tags %}
+{% load sponsor_tags %}
 {% load compressed %}
 <html prefix="og: http://ogp.me/ns#">
     <head>
 {% load compressed %}
 <html prefix="og: http://ogp.me/ns#">
     <head>
@@ -27,7 +28,6 @@
         </div>
         <div class="bar-right">
             <div class="social">
         </div>
         <div class="bar-right">
             <div class="social">
-                <a href="{% url 'contact_form' 'register' %}">register!</a>
                 {% url 'migdal_main' as main_url %}
                 {% share main_url "CopyCamp" "big" %}
             </div>
                 {% url 'migdal_main' as main_url %}
                 {% share main_url "CopyCamp" "big" %}
             </div>
 
         <div id="menu-bar">
         <div class="bar-right">
 
         <div id="menu-bar">
         <div class="bar-right">
-            <form id="search-form" method="GET" action="{% url 'search' %}"><input name="q" /><button>
+            <!--form id="search-form" method="GET" action="{% url 'search' %}"><input name="q" /><button>
                 <img src="{% static "img/search.png" %}" alt="{% trans "Search" %}" />
                 <img src="{% static "img/search.png" %}" alt="{% trans "Search" %}" />
-            </button></form>
+            </button></form-->
         </div>
         <ul id="menu" class="bar-left">
             {% block "main_menu" %}
         </div>
         <ul id="menu" class="bar-left">
             {% block "main_menu" %}
-                {% main_menu 'url' request.get_full_path %}
+                {% main_menu %}
             {% endblock %}
             {% endblock %}
+            <li id="item-lang">{% lang_switcher %}</li>
         </ul>
         <div style="clear: both;"></div>
         </div>
         </ul>
         <div style="clear: both;"></div>
         </div>
@@ -53,7 +54,7 @@
         <div id="sidebar" class="bar-right">
             {% block "sidebar" %}
                 <div class="sidebar-box">
         <div id="sidebar" class="bar-right">
             {% block "sidebar" %}
                 <div class="sidebar-box">
-                    (Sponsorzy)
+                    {% sponsor_page 'main' %}
                 </div>
             {% endblock %}
         </div>
                 </div>
             {% endblock %}
         </div>
index 049edac..2dcdfb9 100644 (file)
@@ -23,7 +23,7 @@ urlpatterns = patterns('',
     (r'^accounts/login/$', 'django_cas.views.login'),
     (r'^accounts/logout/$', 'django_cas.views.logout'),
 ) + i18n_patterns('',
     (r'^accounts/login/$', 'django_cas.views.login'),
     (r'^accounts/logout/$', 'django_cas.views.logout'),
 ) + i18n_patterns('',
-    url(string_concat(r'^', _('events'), r'/'), include('events.urls')),
+    #url(string_concat(r'^', _('events'), r'/'), include('events.urls')),
     url(r'^comments/', include('django_comments_xtd.urls')),
     url(r'^contact/', include('contact.urls')),
 ) + migdal_urlpatterns 
     url(r'^comments/', include('django_comments_xtd.urls')),
     url(r'^contact/', include('contact.urls')),
 ) + migdal_urlpatterns 
index 4fb7200..0aaad30 100644 (file)
@@ -22,3 +22,5 @@ django-pipeline>=1.2,<1.3
 -e git+https://github.com/toastdriven/django-haystack.git@master#egg=django-haystack
 pysolr
 piwik
 -e git+https://github.com/toastdriven/django-haystack.git@master#egg=django-haystack
 pysolr
 piwik
+
+-e git+https://github.com/fnp/django-sponsors.git@master#egg=django-sponsors