Author: batiste.bieler
Date: Wed Jul  8 04:14:44 2009
New Revision: 597

Modified:
    trunk/pages/http.py
    trunk/pages/managers.py
    trunk/pages/templatetags/pages_tags.py
    trunk/pages/tests/pages_tests.py
    trunk/pages/utils.py
    trunk/pages/views.py

Log:
Fix issue 123

Modified: trunk/pages/http.py
==============================================================================
--- trunk/pages/http.py (original)
+++ trunk/pages/http.py Wed Jul  8 04:14:44 2009
@@ -69,24 +69,12 @@

  def get_language_from_request(request, current_page=None):
      """Return the most obvious language according the request."""
-    # first try the GET parameter
      language = request.GET.get('language', None)
      if language:
          return language

      if hasattr(request, 'LANGUAGE_CODE'):
-        client_language = \
-            settings.PAGE_LANGUAGE_MAPPING(str(request.LANGUAGE_CODE))
+        return settings.PAGE_LANGUAGE_MAPPING(str(request.LANGUAGE_CODE))
      else:
-        client_language = settings.PAGE_DEFAULT_LANGUAGE
+        return settings.PAGE_DEFAULT_LANGUAGE

-    # then try to get the right one for the page
-    if current_page:
-        # try to get the language that match the client language
-        languages = current_page.get_languages()
-        for lang in languages:
-            if client_language == str(lang):
-                return client_language
-
-    # last resort
-    return settings.PAGE_DEFAULT_LANGUAGE
\ No newline at end of file

Modified: trunk/pages/managers.py
==============================================================================
--- trunk/pages/managers.py     (original)
+++ trunk/pages/managers.py     Wed Jul  8 04:14:44 2009
@@ -18,6 +18,8 @@
  from django.contrib.sites.models import Site
  from django.db.models import Q
  from django.core.cache import cache
+from django.core.urlresolvers import reverse
+
  from pages import settings

  class PageManager(models.Manager):
@@ -85,6 +87,27 @@
      def expired(self):
          return self.on_site().filter(
              publication_end_date__lte=datetime.now())
+
+    def from_slug(self, slug, complete_path, lang, exclude_drafts=True):
+        """Get the page according to a slug."""
+        from pages.models import Content, Page
+        relative_url = complete_path
+        root = reverse('pages-root')
+        if relative_url.startswith(root):
+            relative_url = relative_url[len(root):]
+        page_ids = Content.objects.get_page_ids_by_slug(slug)
+        pages_list = self.filter(id__in=page_ids)
+        if exclude_drafts:
+            pages_list = pages_list.exclude(status=Page.DRAFT)
+        current_page = None
+        if len(pages_list) == 1:
+            return pages_list[0]
+        # more than one page matching the slug, let's use the full url
+        if len(pages_list) > 1:
+            for page in pages_list:
+                if page.get_url(lang) == relative_url:
+                    return page
+        return None

  class ContentManager(models.Manager):
      """Content manager methods"""

Modified: trunk/pages/templatetags/pages_tags.py
==============================================================================
--- trunk/pages/templatetags/pages_tags.py      (original)
+++ trunk/pages/templatetags/pages_tags.py      Wed Jul  8 04:14:44 2009
@@ -9,7 +9,6 @@

  from pages import settings
  from pages.models import Content, Page
-from pages.utils import get_page_from_slug
  from pages.http import get_language_from_request

  register = template.Library()
@@ -30,7 +29,8 @@

      # if the page is a SafeUnicode, try to use it like a slug
      if isinstance(page, SafeUnicode) or isinstance(page, unicode):
-        page = get_page_from_slug(page, context['request'], absolute_lang)
+        page = Page.objects.from_slug(page, context['request'].path,
+            absolute_lang)

      if not page:
          return ''
@@ -40,7 +40,8 @@
      if not absolute_lang:
          absolute_lang = get_language_from_request(context['request'], page)

-    c = Content.objects.get_content(page, absolute_lang, content_type,  
fallback)
+    c = Content.objects.get_content(page, absolute_lang, content_type,
+fallback)
      return c

  """Filters"""
@@ -89,7 +90,8 @@
      if "tree_expanded" in request.COOKIES:
          cookie_string = urllib.unquote(request.COOKIES['tree_expanded'])
          if cookie_string:
-            ids = [int(id) for id in  
urllib.unquote(request.COOKIES['tree_expanded']).split(',')]
+            ids = [int(id) for id in
+urllib.unquote(request.COOKIES['tree_expanded']).split(',')]
              if page.id in ids:
                  expanded = True

@@ -99,7 +101,8 @@

      return locals()
  pages_admin_menu = register.inclusion_tag('admin/pages/page/menu.html',
-                                           
takes_context=True)(pages_admin_menu)
+
+takes_context=True)(pages_admin_menu)


  def show_content(context, page, content_type, lang=None, fallback=True):
@@ -117,7 +120,8 @@
      lang -- the wanted language (default None, use the request object to  
know)
      fallback -- use fallback content
      """
-    return {'content':get_content(context, page, content_type, lang,  
fallback)}
+    return {'content':get_content(context, page, content_type, lang,
+fallback)}
  show_content = register.inclusion_tag('pages/content.html',
                                        takes_context=True)(show_content)

@@ -135,16 +139,18 @@
      lang -- the wanted language (defaults to None, uses request object  
else)
      """
      request = context.get('request', False)
-    # if the page is a SafeUnicode, try to use it like a slug
-    if isinstance(page, SafeUnicode) or isinstance(page, unicode):
-        page = get_page_from_slug(page, request)
-    if not request or not page:
+    if not request:
          return {'content':''}
      if lang is None:
          if 'lang' in context:
              lang = context['lang']
          else:
-            lang = get_language_from_request(context['request'], page)
+            lang = get_language_from_request(request, page)
+    # if the page is a SafeUnicode, try to use it like a slug
+    if isinstance(page, SafeUnicode) or isinstance(page, unicode):
+        page = Page.objects.from_slug(page, request.path, lang)
+    if not page:
+        return {'content':''}
      url = page.get_absolute_url(language=lang)
      if url:
          return {'content':url}

Modified: trunk/pages/tests/pages_tests.py
==============================================================================
--- trunk/pages/tests/pages_tests.py    (original)
+++ trunk/pages/tests/pages_tests.py    Wed Jul  8 04:14:44 2009
@@ -32,7 +32,7 @@

      def test_02_create_page(self):
          """Test that a page can be created via the admin."""
-        setattr(settings, "SITE_ID", 2)
+        #setattr(settings, "SITE_ID", 2)
          c = Client()
          c.login(username= 'batiste', password='b')
          page_data = self.get_new_page_data()
@@ -215,7 +215,7 @@
          response = c.post('/admin/pages/page/%d/' % page.id, page_data)
          self.assertRedirects(response, '/admin/pages/page/')

-        setattr(settings, "PAGE_DEFAULT_LANGUAGE", 'en-us')
+        #setattr(settings, "PAGE_DEFAULT_LANGUAGE", 'en-us')

          # test that the frontend view use the good parameters
          # I cannot find a way of setting the accept-language HTTP

Modified: trunk/pages/utils.py
==============================================================================
--- trunk/pages/utils.py        (original)
+++ trunk/pages/utils.py        Wed Jul  8 04:14:44 2009
@@ -85,24 +85,3 @@
          if permission == "All":
              return True
      return False
-
-# TODO: move this in the manager
-def get_page_from_slug(slug, request, lang=None):
-    """Get the page according to a slug."""
-    from pages.models import Content, Page
-    from django.core.urlresolvers import reverse
-    lang = get_language_from_request(request)
-    relative_url = request.path
-    root = reverse('pages-root')
-    if request.path.startswith(root):
-        relative_url = relative_url[len(root):]
-    page_ids = Content.objects.get_page_ids_by_slug(slug)
-    pages_list = Page.objects.filter(id__in=page_ids)
-    current_page = None
-    if len(pages_list) == 1:
-        return pages_list[0]
-    if len(pages_list) > 1:
-        for page in pages_list:
-            if page.get_url(lang) == relative_url:
-                return page
-    return None

Modified: trunk/pages/views.py
==============================================================================
--- trunk/pages/views.py        (original)
+++ trunk/pages/views.py        Wed Jul  8 04:14:44 2009
@@ -6,10 +6,9 @@
  from pages import settings
  from pages.models import Page, Content
  from pages.http import auto_render, get_language_from_request
-from pages.utils import get_page_from_slug


-def details(request, slug=None, lang=None, ajax=False):
+def details(request, slug=None, lang=None):
      """This view get the root pages for navigation
      and the current page to display if there is any.

@@ -26,11 +25,14 @@
      This can be usefull if you want to write your own
      view. You can reuse the following code without having to
      copy and paste it."""
+
      pages = Page.objects.navigation().order_by("tree_id")
      current_page = False
+    if lang is None:
+        lang = get_language_from_request(request, current_page)

      if slug:
-        current_page = get_page_from_slug(slug, request, lang)
+        current_page = Page.objects.from_slug(slug, request.path, lang)
          if current_page and request.META['PATH_INFO'] != \
                                      current_page.get_absolute_url():
              raise Http404
@@ -44,16 +46,13 @@
          current_page.calculated_status in (Page.DRAFT, Page.EXPIRED):
          raise Http404

-    if not lang:
-        lang = get_language_from_request(request, current_page)
-
      if current_page.redirect_to:
          return HttpResponsePermanentRedirect(
              current_page.redirect_to.get_absolute_url(lang))

      template_name = current_page.get_template()

-    if ajax:
+    if request.is_ajax():
          new_template_name = "body_%s" % template_name
          return new_template_name, locals()


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pinax-updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/pinax-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to