cms.views: 65 total statements, 0.0% covered

Generated: Wed 2013-03-13 10:33 CET

Source file: /media/Envs/Envs/filer-gallery/lib/python2.7/site-packages/cms/views.py

Stats: 0 executed, 53 missed, 12 excluded, 48 ignored

  1. # -*- coding: utf-8 -*-
  2. from cms.apphook_pool import apphook_pool
  3. from cms.appresolver import get_app_urls
  4. from cms.utils import get_template_from_request, get_language_from_request
  5. from cms.utils.i18n import get_fallback_languages
  6. from cms.utils.page_resolver import get_page_from_request
  7. from django.conf import settings
  8. from django.conf.urls.defaults import patterns
  9. from django.core.urlresolvers import resolve, Resolver404
  10. from django.http import Http404, HttpResponseRedirect
  11. from django.shortcuts import render_to_response
  12. from django.template.context import RequestContext
  13. from django.utils.http import urlquote
  14. def _handle_no_page(request, slug):
  15. if not slug and settings.DEBUG:
  16. return render_to_response("cms/new.html", RequestContext(request))
  17. raise Http404('CMS: Page not found for "%s"' % slug)
  18. def details(request, slug):
  19. """
  20. The main view of the Django-CMS! Takes a request and a slug, renders the
  21. page.
  22. """
  23. # get the right model
  24. context = RequestContext(request)
  25. # Get a Page model object from the request
  26. page = get_page_from_request(request, use_path=slug)
  27. if not page:
  28. return _handle_no_page(request, slug)
  29. current_language = get_language_from_request(request)
  30. # Check that the current page is available in the desired (current) language
  31. available_languages = page.get_languages()
  32. # We resolve an alternate language for the page if it's not available.
  33. # Since the "old" details view had an exception for the root page, it is
  34. # ported here. So no resolution if the slug is ''.
  35. if (current_language not in available_languages):
  36. if settings.CMS_LANGUAGE_FALLBACK:
  37. # If we didn't find the required page in the requested (current)
  38. # language, let's try to find a suitable fallback in the list of
  39. # fallback languages (CMS_LANGUAGE_CONF)
  40. for alt_lang in get_fallback_languages(current_language):
  41. if alt_lang in available_languages:
  42. alt_url = page.get_absolute_url(language=alt_lang, fallback=True)
  43. path = '/%s%s' % (alt_lang, alt_url)
  44. # In the case where the page is not available in the
  45. # preferred language, *redirect* to the fallback page. This
  46. # is a design decision (instead of rendering in place)).
  47. return HttpResponseRedirect(path)
  48. # There is a page object we can't find a proper language to render it
  49. _handle_no_page(request, slug)
  50. if apphook_pool.get_apphooks():
  51. # There are apphooks in the pool. Let's see if there is one for the
  52. # current page
  53. # since we always have a page at this point, applications_page_check is
  54. # pointless
  55. # page = applications_page_check(request, page, slug)
  56. # Check for apphooks! This time for real!
  57. app_urls = page.get_application_urls(current_language, False)
  58. if app_urls:
  59. app = apphook_pool.get_apphook(app_urls)
  60. pattern_list = []
  61. for urlpatterns in get_app_urls(app.urls):
  62. pattern_list += urlpatterns
  63. urlpatterns = patterns('', *pattern_list)
  64. try:
  65. view, args, kwargs = resolve('/', tuple(urlpatterns))
  66. return view(request, *args, **kwargs)
  67. except Resolver404:
  68. pass
  69. # Check if the page has a redirect url defined for this language.
  70. redirect_url = page.get_redirect(language=current_language)
  71. if redirect_url:
  72. if (settings.i18n_installed and redirect_url[0] == "/"
  73. and not redirect_url.startswith('/%s/' % current_language)):
  74. # add language prefix to url
  75. redirect_url = "/%s/%s" % (current_language, redirect_url.lstrip("/"))
  76. # prevent redirect to self
  77. own_urls = [
  78. 'http%s://%s%s' % ('s' if request.is_secure() else '', request.get_host(), request.path),
  79. '/%s%s' % (current_language, request.path),
  80. request.path,
  81. ]
  82. if redirect_url not in own_urls:
  83. return HttpResponseRedirect(redirect_url)
  84. # permission checks
  85. if page.login_required and not request.user.is_authenticated():
  86. if settings.i18n_installed:
  87. path = urlquote("/%s%s" % (request.LANGUAGE_CODE, request.get_full_path()))
  88. else:
  89. path = urlquote(request.get_full_path())
  90. tup = settings.LOGIN_URL , "next", path
  91. return HttpResponseRedirect('%s?%s=%s' % tup)
  92. template_name = get_template_from_request(request, page, no_current_page=True)
  93. # fill the context
  94. context['lang'] = current_language
  95. context['current_page'] = page
  96. context['has_change_permissions'] = page.has_change_permission(request)
  97. context['has_view_permissions'] = page.has_view_permission(request)
  98. if not context['has_view_permissions']:
  99. return _handle_no_page(request, slug)
  100. return render_to_response(template_name, context)