Esempio n. 1
0
    def get_context(self, request, category, slug, year, month, day, id):

        try:
            cat = Category.objects.get_by_tree_path(category)
        except Category.DoesNotExist:
            raise Http404("Category with tree_path '%s' doesn't exist." % category)

        if year:
            publishable = get_cached_object_or_404(Publishable,
                        publish_from__year=year,
                        publish_from__month=month,
                        publish_from__day=day,
                        category=cat,
                        slug=slug,
                        static=False
                    )
        else:
            publishable = get_cached_object_or_404(Publishable, pk=id)
            if not publishable.static:
                raise Http404()

        if not (publishable.is_published() or request.user.is_staff):
            # future publish, render if accessed by logged in staff member
            raise Http404

        obj = publishable.target

        context = {
                'object' : obj,
                'category' : cat,
                'content_type_name' : slugify(obj.content_type.model_class()._meta.verbose_name_plural),
                'content_type' : obj.content_type
            }

        return context
Esempio n. 2
0
def _category_detail(tree_path=False):
    """
    Helper function that does all the data fetching for `home` and `category_detail` views. Returns
    a dictionary containing:

        - `category`: the root `Category` of the site
        - `is_homepage`: boolean whether the category is the root category
        - `archive_entry_year`: year of last `Listing`

    :Parameters: 
        - `tree_path`: `Category.tree_path` (empty if home category)

    :Exceptions: 
        - `Http404`: if there is no base category
    """
    if tree_path:
        cat = get_cached_object_or_404(Category, tree_path=tree_path, site__id=settings.SITE_ID)
    else:
        cat = get_cached_object_or_404(Category, tree_parent__isnull=True, site__id=settings.SITE_ID)
    context = {
                'category' : cat,
                'is_homepage': not bool(tree_path),
                'archive_entry_year' : __archive_entry_year(cat),
            }

    return context
Esempio n. 3
0
    def get_context(self, request, **kwargs):
        category = kwargs.get("category", None)
        slug = kwargs.get("slug", None)
        export = None
        cat = None
        title = u""
        link = ""
        items = tuple()
        context = dict()

        if slug:
            items = Export.objects.get_items_for_slug(slug=slug)
            try:
                export_object = Export.objects.get(slug=slug)
                title = export_object.title
                link = export_object.url
            except Export.DoesNotExist:
                raise Http404
        else:
            if category:
                cat = get_cached_object_or_404(Category, tree_path=category, site__id=settings.SITE_ID)
            else:
                cat = get_cached_object_or_404(Category, tree_parent__isnull=True, site__id=settings.SITE_ID)
            items = Export.objects.get_items_for_category(category=cat)
            export_object = Export.objects.get(category=cat)
            title = export_object.title
            link = export_object.url

        context.update(
            {"exported_items": items, "category": cat, "is_homepage": not bool(category), "title": title, "link": link}
        )
        return context
Esempio n. 4
0
def _object_detail(user, category, content_type, slug, year=None, month=None, day=None):
    """
    Helper function that does all the data fetching for `object_detail` view. It
    returns a dictionary containing:

        - `placement`: `Placement` instance representing the URL accessed
        - `object`: `Publishable` instance bound to the `placement`
        - `category`: `Category` of the `placement`
        - `content_type_name`: slugified plural verbose name of the publishable's content type
        - `content_type`: `ContentType` of the publishable

    :Parameters: 
        - `user`: django `User` instance
        - `category`: `Category.tree_path` (empty if home category)
        - `year`, `month`, `day`: date matching the `publish_from` field of the `Placement` object
        - `content_type`: slugified `verbose_name_plural` of the target model
        - `slug`: slug of the `Placement`

    :Exceptions:
        - `Http404`: if object or placement doesn't exist or dates don't match
    """
    ct = get_content_type(content_type)

    if category:
        cat = get_cached_object_or_404(Category, tree_path=category, site__id=settings.SITE_ID)
    else:
        cat = get_cached_object_or_404(Category, tree_parent__isnull=True, site__id=settings.SITE_ID)

    if year:
        placement = get_cached_object_or_404(Placement,
                    publish_from__year=year,
                    publish_from__month=month,
                    publish_from__day=day,
                    publishable__content_type=ct,
                    category=cat,
                    slug=slug,
                    static=False
                )
    else:
        placement = get_cached_object_or_404(Placement, category=cat, publishable__content_type=ct, slug=slug, static=True)

    if not (placement.is_active() or user.is_staff):
        # future placement, render if accessed by logged in staff member
        raise Http404

    obj = placement.publishable.target

    context = {
            'placement' : placement,
            'object' : obj,
            'category' : cat,
            'content_type_name' : content_type,
            'content_type' : ct,
        }

    return context
Esempio n. 5
0
    def get_context(self, request, category, slug, year, month, day, id):

        try:
            cat = Category.objects.get_by_tree_path(category)
        except Category.DoesNotExist:
            # non-static url, no way to recover
            if year:
                raise Http404("Category with tree_path '%s' doesn't exist." %
                              category)
            else:
                cat = None

        if year:
            publishable = get_cached_object_or_404(Publishable,
                                                   publish_from__year=year,
                                                   publish_from__month=month,
                                                   publish_from__day=day,
                                                   category=cat,
                                                   slug=slug,
                                                   static=False)
        else:
            publishable = get_cached_object_or_404(Publishable, pk=id)
            if cat is None:
                raise self.WrongUrl(
                    'Category with tree_path %r does not exist.' % category,
                    publishable)
            elif not publishable.static:
                raise self.WrongUrl('%s is not static.' % publishable,
                                    publishable)
            elif slug != publishable.slug:
                raise self.WrongUrl('Wrong slug in URL (%r).' % slug,
                                    publishable)
            elif publishable.category_id != cat.pk:
                raise self.WrongUrl('Wrong category for %s.' % publishable,
                                    publishable)

        if not (publishable.is_published() or request.user.is_staff):
            # future publish, render if accessed by logged in staff member
            raise Http404

        # save existing object to preserve memory and SQL
        publishable.category = cat

        context = {
            'object':
            publishable,
            'category':
            cat,
            'content_type_name':
            slugify(publishable.content_type.model_class()._meta.
                    verbose_name_plural),
            'content_type':
            publishable.content_type
        }

        return context
Esempio n. 6
0
    def get_context(self, request, category=None):
        if category:
            cat = get_cached_object_or_404(Category, tree_path=category, site__id=settings.SITE_ID)
        else:
            cat = get_cached_object_or_404(Category, tree_parent__isnull=True, site__id=settings.SITE_ID)
        context = {
                    'category' : cat,
                    'is_homepage': not bool(category),
                    'archive_entry_year' : self._archive_entry_year(cat),
                }

        return context
Esempio n. 7
0
    def get_context(self, request, category, slug, year, month, day, id):

        try:
            cat = Category.objects.get_by_tree_path(category)
        except Category.DoesNotExist:
            # non-static url, no way to recover
            if year:
                raise Http404("Category with tree_path '%s' doesn't exist." % category)
            else:
                cat = None

        if year:
            publishable = get_cached_object_or_404(Publishable,
                        publish_from__year=year,
                        publish_from__month=month,
                        publish_from__day=day,
                        category=cat,
                        slug=slug,
                        static=False
                    )
        else:
            publishable = get_cached_object_or_404(Publishable, pk=id)

        if not (publishable.is_published() or request.user.is_staff):
            # future publish, render if accessed by logged in staff member
            raise Http404

        if not year:
            if cat is None:
                raise self.WrongUrl('Category with tree_path %r does not exist.' % category, publishable)
            elif not publishable.static:
                raise self.WrongUrl('%s is not static.' % publishable, publishable)
            elif slug != publishable.slug:
                raise self.WrongUrl('Wrong slug in URL (%r).' % slug, publishable)
            elif publishable.category_id != cat.pk:
                raise self.WrongUrl('Wrong category for %s.' % publishable, publishable)

        # save existing object to preserve memory and SQL
        publishable.category = cat

        context = {
                'object' : publishable,
                'category' : cat,
                'content_type_name' : slugify(publishable.content_type.model_class()._meta.verbose_name_plural),
                'content_type' : publishable.content_type
            }

        return context
Esempio n. 8
0
    def get_context(self, request, category, slug, year, month, day, id):

        try:
            cat = Category.objects.get_by_tree_path(category)
        except Category.DoesNotExist:
            # non-static url, no way to recover
            if year:
                raise Http404("Category with tree_path '%s' doesn't exist." % category)
            else:
                cat = None

        if year:
            lookup = {
                'publish_from__year': year,
                'publish_from__month': month,
                'publish_from__day': day,
                'category': cat,
                'slug': slug,
                'static': False
            }
            try:
                publishable = get_cached_object(Publishable, published=True, **lookup)
            except Publishable.DoesNotExist:
                # Fallback for staff members in case there are multiple
                # objects with same URL.
                if request.user.is_staff:
                    try:
                        publishable = Publishable.objects.filter(published=False, **lookup)[0]
                    except IndexError:
                        raise Http404
                else:
                    raise Http404
        else:
            publishable = get_cached_object_or_404(Publishable, pk=id)

        if not (publishable.is_published() or request.user.is_staff):
            # future publish, render if accessed by logged in staff member
            raise Http404

        if not year:
            if cat is None:
                raise self.WrongUrl('Category with tree_path %r does not exist.' % category, publishable)
            elif not publishable.static:
                raise self.WrongUrl('%s is not static.' % publishable, publishable)
            elif slug != publishable.slug:
                raise self.WrongUrl('Wrong slug in URL (%r).' % slug, publishable)
            elif publishable.category_id != cat.pk:
                raise self.WrongUrl('Wrong category for %s.' % publishable, publishable)

        # save existing object to preserve memory and SQL
        publishable.category = cat

        context = {
                'object' : publishable,
                'category' : cat,
                'content_type_name' : slugify(publishable.content_type.model_class()._meta.verbose_name_plural),
                'content_type' : publishable.content_type
            }

        return context
Esempio n. 9
0
    def correct_answer_view(self, request, contest_pk, extra_context=None):
        contest = get_cached_object_or_404(Contest, pk=contest_pk)
        contestants = contest.get_correct_answers()
        title = u"%s '%s': %s" % (Contest._meta.verbose_name, contest.title, _('Correct Answers'))
        module_name = Contestant._meta.module_name

        return render_to_response('newman/polls/correct-answers.html',
            {'contestants' : contestants, 'title' : title, 'module_name' : module_name})
Esempio n. 10
0
File: views.py Progetto: whit/ella
    def done(self, request, cleaned_data):
        ip = request.META['REMOTE_ADDR']

        CommentForm(request.POST).save(
                other_values={'ip_address': ip}
            )

        ct = get_cached_object_or_404(ContentType, pk=cleaned_data['target_ct'].id)
        target = get_cached_object_or_404(ct, pk=cleaned_data['target_id'])

        if 'redir' in request.POST:
            url = request.POST['redir']
        elif hasattr(target, 'get_absolute_url'):
            url = target.get_absolute_url()
        else:
            url = '/'
        return HttpResponseRedirect(url)
Esempio n. 11
0
File: views.py Progetto: Almad/ella
    def get_context(self, request, **kwargs):
        slug = kwargs.get('slug', None)
        export_object = get_cached_object_or_404(AggregatedExport, slug=slug)

        context = {
            'export_slug': slug,
            'export_object': export_object,
            'category': None
        }
        return context
Esempio n. 12
0
File: admin.py Progetto: whit/ella
 def __call__(self, request, url):
     if url and url.endswith('correct_answers'):
         pk = url.split('/')[-2]
         contest = get_cached_object_or_404(Contest, pk=pk)
         contestants = contest.get_correct_answers()
         title = u"%s '%s': %s" % (Contest._meta.verbose_name, contest.title, _('Correct Answers'))
         module_name = Contestant._meta.module_name
         return render_to_response('admin/polls/answer/correct.html',
             {'contestants' : contestants, 'title' : title, 'module_name' : module_name})
     return super(ContestOptions, self).__call__(request, url)
Esempio n. 13
0
File: views.py Progetto: whit/ella
    def get_context(self, request, category, content_type, slug, year, month,
                    day):
        ct = get_content_type(content_type)

        cat = get_cached_object_or_404(Category,
                                       tree_path=category,
                                       site__id=settings.SITE_ID)

        if year:
            placement = get_cached_object_or_404(Placement,
                                                 publish_from__year=year,
                                                 publish_from__month=month,
                                                 publish_from__day=day,
                                                 publishable__content_type=ct,
                                                 category=cat,
                                                 slug=slug,
                                                 static=False)
        else:
            placement = get_cached_object_or_404(Placement,
                                                 category=cat,
                                                 publishable__content_type=ct,
                                                 slug=slug,
                                                 static=True)

        # save existing object to preserve memory and SQL
        placement.category = cat
        placement.publishable.content_type = ct

        if not (placement.is_active() or request.user.is_staff):
            # future placement, render if accessed by logged in staff member
            raise Http404

        obj = placement.publishable.target

        context = {
            'placement': placement,
            'object': obj,
            'category': cat,
            'content_type_name': content_type,
            'content_type': ct,
        }

        return context
Esempio n. 14
0
File: views.py Progetto: whit/ella
    def get_context(self, request, **kwargs):
        slug = kwargs.get('slug', None)
        export_object = get_cached_object_or_404(AggregatedExport, slug=slug)

        context = {
            'export_slug': slug,
            'export_object': export_object,
            'category': None
        }
        return context
Esempio n. 15
0
 def __call__(self, request, url):
     if url and url.endswith('correct_answers'):
         pk = url.split('/')[-2]
         contest = get_cached_object_or_404(Contest, pk=pk)
         contestants = contest.get_correct_answers()
         title = u"%s '%s': %s" % (Contest._meta.verbose_name, contest.title, _('Correct Answers'))
         module_name = Contestant._meta.module_name
         return render_to_response('admin/polls/answer/correct.html',
             {'contestants' : contestants, 'title' : title, 'module_name' : module_name})
     return super(ContestAdmin, self).__call__(request, url)
Esempio n. 16
0
        def correct_answer_view(self, request, contest_pk, extra_context=None):
            contest = get_cached_object_or_404(Contest, pk=contest_pk)
            contestants = contest.get_correct_answers()
            title = u"%s '%s': %s" % (Contest._meta.verbose_name, contest.title, _("Correct Answers"))
            module_name = Contestant._meta.module_name

            return render_to_response(
                "newman/polls/correct-answers.html",
                {"contestants": contestants, "title": title, "module_name": module_name},
            )
Esempio n. 17
0
    def correct_answer_view(self, request, contest_pk, extra_context=None):
        contest = get_cached_object_or_404(Contest, pk=contest_pk)
        contestants = contest.get_correct_answers()
        title = u"%s '%s': %s" % (Contest._meta.verbose_name, contest.title, _('Correct Answers'))
        module_name = get_model_name_from_class(Contestant)
        context = {
            'contest': contest,
            'contestants': contestants,
            'title': title,
            'module_name': module_name
        }

        if (request.GET.get('type') == 'excel'):
            response = render_to_response(
                'admin/polls/correct-answers-excel.html',
                context,
                RequestContext(request)
            )
            response['Content-Disposition'] = 'attachment; filename=contest_%s.xls' % contest.pk
            response['Content-Type'] = 'application/vnd.ms-excel;charset=utf-8'
            return response
        elif (request.GET.get('type') == 'csv'):
            response = HttpResponse(content_type='text/csv')
            response['Content-Disposition'] = 'attachment; filename=contest_%s.csv' % contest.pk
            writer = csv.writer(response)
            head = [
                encode_item(_('Count Guess Difference')),
                encode_item(_('Name')),
                encode_item(_('Surname')),
                encode_item(_('User')),
                encode_item(_('Email')),
                encode_item(_('Phone number')),
                encode_item(_('Address')),
                encode_item(_('Winner')),
            ]
            writer.writerow(list(head))
            for contestant in contestants:
                row = [
                    encode_item(contestant.count_guess_difference),
                    encode_item(contestant.name),
                    encode_item(contestant.surname),
                    encode_item(contestant.user),
                    encode_item(contestant.email),
                    encode_item(contestant.phonenumber),
                    encode_item(contestant.address),
                    encode_item(contestant.winner and _('Yes') or _('No')),
                ]
                writer.writerow(list(row))
            return response
        else:
            return render_to_response(
                'admin/polls/correct-answers.html',
                context,
                RequestContext(request)
            )
Esempio n. 18
0
    def get_context(self, request, category, content_type, slug, year, month, day, id):
        ct = get_content_type(content_type)

        try:
            cat = Category.objects.get_by_tree_path(category)
        except Category.DoesNotExist:
            raise Http404('Category with given tree_path doesn\'t exist.')

        if year:
            publishable = get_cached_object_or_404(Publishable,
                        publish_from__year=year,
                        publish_from__month=month,
                        publish_from__day=day,
                        content_type=ct,
                        category=cat,
                        slug=slug,
                        static=False
                    )
        else:
            publishable = get_cached_object_or_404(Publishable, pk=id)
            if publishable.category_id != cat.pk or publishable.content_type_id != ct.id or not publishable.static:
                raise Http404()

        # save existing object to preserve memory and SQL
        publishable.category = cat
        publishable.content_type = ct


        if not (publishable.is_published() or request.user.is_staff):
            # future publish, render if accessed by logged in staff member
            raise Http404

        obj = publishable.target

        context = {
                'object' : obj,
                'category' : cat,
                'content_type_name' : content_type,
                'content_type' : ct,
            }

        return context
Esempio n. 19
0
File: views.py Progetto: Almad/ella
    def get_context(self, request, **kwargs):
        now = datetime.now()
        category = kwargs.get('category', None)
        slug = kwargs.get('slug', None)
        export = None
        export_object = None
        cat = None
        title = u''
        link = ''
        items = tuple()
        context = dict()

        if slug:
            items = Export.objects.get_items_for_slug(slug=slug)
            try:
                export_object = Export.objects.get(slug=slug)
            except Export.DoesNotExist:
                raise Http404(_('Export with given slug does not exist.'))
        else:
            if category:
                cat = get_cached_object_or_404(Category, tree_path=category, site__id=settings.SITE_ID)
            else:
                cat = get_cached_object_or_404(Category, tree_parent__isnull=True, site__id=settings.SITE_ID)
            items = Export.objects.get_items_for_category(category=cat)
            export_object = Export.objects.get(category=cat)

        title = export_object.title
        link = export_object.url
        description = export_object.description

        context.update({
            'updated': now.strftime('%Y-%m-%dT%H:%M:%S+02:00'),
            'exported_items': items,
            'export_slug': slug,
            'export_object': export_object,
            'description': description,
            'category': cat,
            'is_homepage': not bool(category),
            'title': title,
            'link': link
        })
        return context
Esempio n. 20
0
    def correct_answer_view(self, request, contest_pk, extra_context=None):
        contest = get_cached_object_or_404(Contest, pk=contest_pk)
        contestants = contest.get_correct_answers()
        title = u"%s '%s': %s" % (Contest._meta.verbose_name, contest.title,
                                  _('Correct Answers'))
        module_name = Contestant._meta.module_name

        return render_to_response('newman/polls/correct-answers.html', {
            'contestants': contestants,
            'title': title,
            'module_name': module_name
        })
Esempio n. 21
0
 def __call__(self, request, url):
     if url and url.endswith("correct_answers"):
         pk = url.split("/")[-2]
         contest = get_cached_object_or_404(Contest, pk=pk)
         contestants = contest.get_correct_answers()
         title = u"%s '%s': %s" % (Contest._meta.verbose_name, contest.title, _("Correct Answers"))
         module_name = Contestant._meta.module_name
         return render_to_response(
             "admin/polls/answer/correct.html",
             {"contestants": contestants, "title": title, "module_name": module_name},
         )
     return super(ContestOptions, self).__call__(request, url)
Esempio n. 22
0
File: views.py Progetto: rajeev/ella
    def get_context(self, request, category, content_type, slug, year, month, day):
        ct = get_content_type(content_type)

        cat = get_cached_object_or_404(Category, tree_path=category, site__id=settings.SITE_ID)

        if year:
            placement = get_cached_object_or_404(Placement,
                        publish_from__year=year,
                        publish_from__month=month,
                        publish_from__day=day,
                        publishable__content_type=ct,
                        category=cat,
                        slug=slug,
                        static=False
                    )
        else:
            placement = get_cached_object_or_404(Placement, category=cat, publishable__content_type=ct, slug=slug, static=True)

        # save existing object to preserve memory and SQL
        placement.category = cat
        placement.publishable.content_type = ct


        if not (placement.is_active() or request.user.is_staff):
            # future placement, render if accessed by logged in staff member
            raise Http404

        obj = placement.publishable.target

        context = {
                'placement' : placement,
                'object' : obj,
                'category' : cat,
                'content_type_name' : content_type,
                'content_type' : ct,
            }

        return context
Esempio n. 23
0
    def get(self, request, *args, **kwargs):
        if 'slug' not in kwargs:
            raise Http404

        # Compatibility with `paginator` tag.
        if 'p' in request.GET:
            self.kwargs.update({'page': request.GET['p']})

        self.author = get_cached_object_or_404(Author, slug=kwargs['slug'])

        response = render_as_api(request, self.author)
        if response:
            return response

        return super(AuthorView, self).get(request, *args, **kwargs)
Esempio n. 24
0
File: sites.py Progetto: Almad/ella
    def root_ella(self, request, url):
        url = url.lstrip('ella/')
        url = url.rstrip('/')

        if url.startswith('cache/status'):
            from ella.ellaadmin.memcached import cache_status
            return cache_status(request)

        if url.split('/')[0].isdigit():
            url_parts = url.split('/')
            contenttype = get_cached_object_or_404(ContentType, pk=url_parts[0])
            url_parts.pop(0)
            return self.root_contenttype(request, contenttype, *url_parts)

        raise http.Http404
Esempio n. 25
0
    def get(self, request, *args, **kwargs):
        if 'slug' not in kwargs:
            raise Http404

        # Compatibility with `paginator` tag.
        if 'p' in request.GET:
            self.kwargs.update({'page': request.GET['p']})

        self.author = get_cached_object_or_404(Author, slug=kwargs['slug'])

        response = render_as_api(request, self.author)
        if response:
            return response

        return super(AuthorView, self).get(request, *args, **kwargs)
Esempio n. 26
0
File: sites.py Progetto: whit/ella
    def root_ella(self, request, url):
        url = url.lstrip('ella/')
        url = url.rstrip('/')

        if url.startswith('cache/status'):
            from ella.ellaadmin.memcached import cache_status
            return cache_status(request)

        if url.split('/')[0].isdigit():
            url_parts = url.split('/')
            contenttype = get_cached_object_or_404(ContentType,
                                                   pk=url_parts[0])
            url_parts.pop(0)
            return self.root_contenttype(request, contenttype, *url_parts)

        raise http.Http404
Esempio n. 27
0
def new_comment(request, context, reply=None):
    """new comment for specified object"""
    init_props = {
        'target': '%d:%d' % (context['content_type'].id, context['object']._get_pk_val()),
        'options' : FORM_OPTIONS['UNAUTHORIZED_ONLY'],
}
    if reply:
        init_props['parent'] = reply
        context.update({
                'reply' : True,
                'parent' : get_cached_object_or_404(Comment, pk=reply, target_ct=context['content_type'], target_id=context['object']._get_pk_val()),
})
    form = CommentForm(init_props=init_props)
    context['form'] = form
    templates = get_templates_from_placement('comments/form.html', context['placement'])
    return render_to_response(templates, context, context_instance=RequestContext(request))
Esempio n. 28
0
File: sites.py Progetto: whit/ella
    def root_contenttype(self, request, contenttype, *url_parts):
        """
        prepare redirect to admin_list view, objects change_view,
        other special views (delete, history, ..) and hook our own views
        """
        get_params = request.GET and '?%s' % request.GET.urlencode() or ''
        changelist_view = '../../%s/%s' % (
            contenttype.app_label,
            contenttype.model,
        )

        if not len(url_parts):
            # redirect to admin changelist list for this contet type
            redir = '%s/%s' % (changelist_view, get_params)
            return http.HttpResponseRedirect(redir)

        if not url_parts[0].isdigit:
            # we don't handle actions on content type itself
            raise http.Http404

        if len(url_parts) == 1:
            # redirect to admin change view for specific object
            redir = '../%s/%s/%s' % (changelist_view, url_parts[0], get_params)
            return http.HttpResponseRedirect(redir)

        if len(url_parts) == 2 and url_parts[1] == 'info':
            # object_detail for some ajax raw_id widget
            mimetype = 'text/html' or 'application/json'  # ?:)
            obj = get_cached_object_or_404(contenttype, pk=url_parts[0])
            response = {
                'name': str(obj),
                'content_type_name': contenttype.name,
                'content_type': contenttype.model,
                'url': getattr(obj, 'get_absolute_url', lambda: None)(),
                'admin_url': admin_url(obj),
            }
            return http.HttpResponse(simplejson.dumps(response, indent=2),
                                     mimetype=mimetype)

        if len(url_parts) == 2:
            # some action on specific object (delete, history, ..)
            redir = '../../%s/%s/%s/%s' % (changelist_view, url_parts[0],
                                           url_parts[1], get_params)
            return http.HttpResponseRedirect(redir)

        raise http.Http404
Esempio n. 29
0
    def get_context(self, request, **kwargs):
        now = datetime.now()
        category = kwargs.get("category", None)
        slug = kwargs.get("slug", None)
        export = None
        export_object = None
        cat = None
        title = u""
        link = ""
        items = tuple()
        context = dict()

        photo_format = request.GET.get("photo_format", None)
        if photo_format:
            try:
                photo_format = get_cached_object_or_404(Format, name=photo_format, sites=settings.SITE_ID)
            except ValueError, Format.DoesNotExist:
                raise Http404
Esempio n. 30
0
File: views.py Progetto: whit/ella
    def get_context(self, request, **kwargs):
        now = datetime.now()
        category = kwargs.get('category', None)
        slug = kwargs.get('slug', None)
        export = None
        export_object = None
        cat = None
        title = u''
        link = ''
        items = tuple()
        context = dict()

        photo_format = request.GET.get('photo_format', None)
        if photo_format:
            try:
                photo_format = get_cached_object_or_404(Format, name=photo_format, sites=settings.SITE_ID)
            except ValueError, Format.DoesNotExist:
                raise Http404
Esempio n. 31
0
File: sites.py Progetto: Almad/ella
    def root_contenttype(self, request, contenttype, *url_parts):
        """
        prepare redirect to admin_list view, objects change_view,
        other special views (delete, history, ..) and hook our own views
        """
        get_params = request.GET and '?%s' % request.GET.urlencode() or ''
        changelist_view = '../../%s/%s' % (contenttype.app_label, contenttype.model,)

        if not len(url_parts):
            # redirect to admin changelist list for this contet type
            redir = '%s/%s' % (changelist_view, get_params)
            return http.HttpResponseRedirect(redir)

        if not url_parts[0].isdigit:
            # we don't handle actions on content type itself
            raise http.Http404

        if len(url_parts) == 1:
            # redirect to admin change view for specific object
            redir = '../%s/%s/%s' % (changelist_view, url_parts[0], get_params)
            return http.HttpResponseRedirect(redir)

        if len(url_parts) == 2 and url_parts[1] == 'info':
            # object_detail for some ajax raw_id widget
            mimetype = 'text/html' or 'application/json' # ?:)
            obj = get_cached_object_or_404(contenttype, pk=url_parts[0])
            response = {
                'name': str(obj),
                'content_type_name': contenttype.name,
                'content_type': contenttype.model,
                'url': getattr(obj, 'get_absolute_url', lambda:None)(),
                'admin_url': admin_url(obj),
}
            return http.HttpResponse(simplejson.dumps(response, indent=2), mimetype=mimetype)

        if len(url_parts) == 2:
            # some action on specific object (delete, history, ..)
            redir = '../../%s/%s/%s/%s' % (changelist_view, url_parts[0], url_parts[1], get_params)
            return http.HttpResponseRedirect(redir)

        raise http.Http404
Esempio n. 32
0
File: views.py Progetto: whit/ella
def new_comment(request, context, reply=None):
    """new comment for specified object"""
    init_props = {
        'target': '%d:%d' % (context['content_type'].id, context['object']._get_pk_val()),
        'options' : FORM_OPTIONS['UNAUTHORIZED_ONLY'],
    }
    if reply:
        init_props['parent'] = reply
        context.update({
                'reply' : True,
                'parent' : get_cached_object_or_404(
                        Comment,
                        pk=reply,
                        target_ct=context['content_type'],
                        target_id=context['object']._get_pk_val()
                    ),
            })
    form = CommentForm(init_props=init_props)
    context['form'] = form
    templates = get_templates_from_placement('comments/form.html', context['placement'])
    return render_to_response(templates, context, context_instance=RequestContext(request))
Esempio n. 33
0
def export(request, count, name='', content_type=None):
    """
    Export banners.

    :Parameters:
        - `count`: number of objects to pass into the template
        - `name`: name of the template ( page/export/banner.html is default )
        - `models`: list of Model classes to include
    """
    t_list = []
    if name:
        t_list.append('page/export/%s.html' % name)
    t_list.append('page/export/banner.html')

    cat = get_cached_object_or_404(Category, tree_parent__isnull=True, site__id=settings.SITE_ID)
    listing = Listing.objects.get_listing(count=count, category=cat)
    return render_to_response(
            t_list,
            { 'category' : cat, 'listing' : listing },
            context_instance=RequestContext(request),
            content_type=content_type
        )
Esempio n. 34
0
File: views.py Progetto: whit/ella
def export(request, count, name='', content_type=None):
    """
    Export banners.

    :Parameters:
        - `count`: number of objects to pass into the template
        - `name`: name of the template ( page/export/banner.html is default )
        - `models`: list of Model classes to include
    """
    t_list = []
    if name:
        t_list.append('page/export/%s.html' % name)
    t_list.append('page/export/banner.html')

    cat = get_cached_object_or_404(Category,
                                   tree_path='',
                                   site__id=settings.SITE_ID)
    listing = Listing.objects.get_listing(count=count, category=cat)
    return render(request,
                  t_list, {
                      'category': cat,
                      'listing': listing
                  },
                  content_type=content_type)
Esempio n. 35
0
    def get_context(self, request, category, slug, year, month, day, id):
        try:
            cat = Category.objects.get_by_tree_path(category)
        except Category.DoesNotExist:
            # non-static url, no way to recover
            if year:
                raise Http404("Category with tree_path '%s' doesn't exist." % category)
            else:
                cat = None

        if year:
            start_date = localize(datetime(int(year), int(month), int(day)))
            end_date = start_date + timedelta(days=1)

            lookup = {
                'publish_from__gte': start_date,
                'publish_from__lt': end_date,
                'category': cat,
                'slug': slug,
                'static': False
            }
            try:
                publishable = get_cached_object(Publishable, published=True, **lookup)
            except Publishable.DoesNotExist:
                # Fallback for staff members in case there are multiple
                # objects with same URL.
                if request.user.is_staff:
                    try:
                        # Make sure we return specific publishable subclass
                        # like when using `get_cached_object` if possible.
                        p = Publishable.objects.filter(published=False, **lookup)[0]
                        publishable = p.content_type.model_class()._default_manager.get(pk=p.pk)
                    except IndexError:
                        raise Http404
                else:
                    raise Http404
        else:
            publishable = get_cached_object_or_404(Publishable, pk=id)

        if not (publishable.is_published() or request.user.is_staff):
            # future publish, render if accessed by logged in staff member
            raise Http404

        if not year:
            if cat is None:
                raise self.WrongUrl('Category with tree_path %r does not exist.' % category, publishable)
            elif not publishable.static:
                raise self.WrongUrl('%s is not static.' % publishable, publishable)
            elif slug != publishable.slug:
                raise self.WrongUrl('Wrong slug in URL (%r).' % slug, publishable)
            elif publishable.category_id != cat.pk:
                raise self.WrongUrl('Wrong category for %s.' % publishable, publishable)

        # save existing object to preserve memory and SQL
        publishable.category = cat

        context = {
            'object': publishable,
            'category': cat,
            'content_type_name': slugify(publishable.content_type.model_class()._meta.verbose_name_plural),
            'content_type': publishable.content_type
        }

        return context
Esempio n. 36
0
File: views.py Progetto: whit/ella
            try:
                photo_format = get_cached_object_or_404(Format, name=photo_format, sites=settings.SITE_ID)
            except ValueError, Format.DoesNotExist:
                raise Http404
        else:
            photo_format = None

        if slug:
            items = Export.objects.get_items_for_slug(slug=slug, photo_format=photo_format)
            try:
                export_object = Export.objects.get(slug=slug)
            except Export.DoesNotExist:
                raise Http404(_('Export with given slug does not exist.'))
        else:
            if category:
                cat = get_cached_object_or_404(Category, tree_path=category, site__id=settings.SITE_ID)
            else:
                cat = get_cached_object_or_404(Category, tree_parent__isnull=True, site__id=settings.SITE_ID)
            items = Export.objects.get_items_for_category(category=cat, photo_format=photo_format)
            export_object = Export.objects.get(category=cat)

        # Ugly hack how to force photo format passed in GET params
        if photo_format:
            export_object.photo_format = photo_format

        title = export_object.title
        link = export_object.url
        description = export_object.description

        context.update({
            'updated': now.strftime('%Y-%m-%dT%H:%M:%S+02:00'),
Esempio n. 37
0
                month = int(month)
                date(year, month, 1)
            except ValueError, e:
                raise Http404()
            kwa['publish_from__month'] = month

        if day:
            try:
                day = int(day)
                date(year, month, day)
            except ValueError, e:
                raise Http404()
            kwa['publish_from__day'] = day

        if category:
            cat = get_cached_object_or_404(Category, tree_path=category, site__id=settings.SITE_ID)
            kwa['category'] = cat
            kwa['children'] = Listing.objects.ALL
        else:
            cat = get_cached_object_or_404(Category, tree_parent__isnull=True, site__id=settings.SITE_ID)
            kwa['category'] = cat

        if content_type:
            ct = get_content_type(content_type)
            kwa['content_types'] = [ ct ]
        else:
            ct = False

        qset = Listing.objects.get_queryset_wrapper(kwa)
        paginator = Paginator(qset, paginate_by)
Esempio n. 38
0
File: views.py Progetto: rajeev/ella
            try:
                month = int(month)
                date(year, month, 1)
            except ValueError, e:
                raise Http404()
            kwa['publish_from__month'] = month

        if day:
            try:
                day = int(day)
                date(year, month, day)
            except ValueError, e:
                raise Http404()
            kwa['publish_from__day'] = day

        cat = get_cached_object_or_404(Category, tree_path=category, site__id=settings.SITE_ID)
        kwa['category'] = cat
        if category:
            kwa['children'] = Listing.objects.ALL

        if content_type:
            ct = get_content_type(content_type)
            kwa['content_types'] = [ ct ]
        else:
            ct = False

        qset = Listing.objects.get_queryset_wrapper(kwa)
        paginator = Paginator(qset, paginate_by)

        if page_no > paginator.num_pages or page_no < 1:
            raise Http404()
Esempio n. 39
0
def poll_vote(request, poll_id):
    """
    Add vote for a poll

    Redirect to object's get_absolute_url() on success.

    Params:
        poll_id: Poll object identifier

    Raises:
        Http404 if no content_type or model is associated with the given IDs
    """
    poll_ct = ContentType.objects.get_for_model(Poll)
    poll = get_cached_object_or_404(poll_ct, pk=poll_id)

    url = get_next_url(request)

    # activity check
    if not poll.is_active():
        return HttpResponseRedirect(url)

    # vote check
    if poll_check_vote(request, poll) != POLL_USER_NOT_YET_VOTED:
        return HttpResponseRedirect(url)

    form = QuestionForm(poll.question)(request.POST)

    # invalid input
    if not form.is_valid():
        # no choice selected error - via session
        sess_nv = request.session.get(POLLS_NO_CHOICE_COOKIE_NAME, [])
        sess_nv.append(poll.id)
        request.session[POLLS_NO_CHOICE_COOKIE_NAME] = sess_nv
        return HttpResponseRedirect(url)

    # vote save
    kwa = {}
    if request.user.is_authenticated():
        kwa['user'] = request.user
    if request.META.has_key('HTTP_X_FORWARDED_FOR'):
        kwa['ip_address'] = request.META['HTTP_X_FORWARDED_FOR']
    else:
        kwa['ip_address'] = request.META['REMOTE_ADDR']
    poll.vote(form.cleaned_data['choice'], **kwa)

    # just voted info session update
    sess_jv = request.session.get(POLLS_JUST_VOTED_COOKIE_NAME, [])
    sess_jv.append(poll.id)
    request.session[POLLS_JUST_VOTED_COOKIE_NAME] = sess_jv

    response = HttpResponseRedirect(url)

    # authenticated user vote - session update
    if request.user.is_authenticated():
        sess = request.session.get(POLLS_COOKIE_NAME, [])
        sess.append(poll.id)
        request.session[POLLS_COOKIE_NAME] = sess
    # annonymous user vote - cookies update
    else:
        cook = request.COOKIES.get(POLLS_COOKIE_NAME, '').split(',')
        if len(cook) > POLLS_MAX_COOKIE_LENGTH:
            cook = cook[1:]
        cook.append(str(poll.id))
        expires = datetime.strftime(datetime.utcnow() + timedelta(seconds=POLLS_MAX_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S GMT")
        response.set_cookie(
            POLLS_COOKIE_NAME,
            value=','.join(cook),
            max_age=POLLS_MAX_COOKIE_AGE,
            expires=expires,
            path='/',
            domain=Site.objects.get_current().domain,
            secure=None
        )

    return response
Esempio n. 40
0
    def get_context(self, request, **kwargs):
        slug = kwargs.get("slug", None)
        export_object = get_cached_object_or_404(AggregatedExport, slug=slug)

        context = {"export_slug": slug, "export_object": export_object, "category": None}
        return context
Esempio n. 41
0
File: views.py Progetto: whit/ella
                month = int(month)
                date(year, month, 1)
            except ValueError, e:
                raise Http404()
            kwa['publish_from__month'] = month

        if day:
            try:
                day = int(day)
                date(year, month, day)
            except ValueError, e:
                raise Http404()
            kwa['publish_from__day'] = day

        cat = get_cached_object_or_404(Category,
                                       tree_path=category,
                                       site__id=settings.SITE_ID)
        kwa['category'] = cat
        if category:
            kwa['children'] = Listing.objects.ALL

        if content_type:
            ct = get_content_type(content_type)
            kwa['content_types'] = [ct]
        else:
            ct = False

        qset = Listing.objects.get_queryset_wrapper(kwa)
        paginator = Paginator(qset, paginate_by)

        if page_no > paginator.num_pages or page_no < 1:
Esempio n. 42
0
    def get_context(self, request, category='', year=None, month=None, \
        day=None, content_type=None,
        paginate_by=listingex_settings.PAGINATE_BY):

        # pagination
        if 'p' in request.GET and request.GET['p'].isdigit():
            page_no = int(request.GET['p'])
        else:
            page_no = 1

        # if we are not on the first page, display a different template
        category_title_page = page_no == 1

        kwa = {}
        if year:
            category_title_page = False
            year = int(year)
            kwa['publish_from__year'] = year

        if month:
            try:
                month = int(month)
                date(year, month, 1)
            except ValueError:
                raise Http404()
            kwa['publish_from__month'] = month

        if day:
            try:
                day = int(day)
                date(year, month, day)
            except ValueError:
                raise Http404()
            kwa['publish_from__day'] = day

        cat = get_cached_object_or_404(Category, tree_path=category,
                                       site__id=settings.SITE_ID)
        kwa['category'] = cat
        if category:
            kwa['children'] = Listing.objects.ALL

        if content_type:
            ct = get_content_type(content_type)
            kwa['content_types'] = [ct]
        else:
            ct = False

        qset = Listing.objects.get_queryset_wrapper(kwa)

        if self.is_ex_applied(cat):
            per_first_page = (listingex_settings.FIRST_PAGE_COUNT or
                              paginate_by)
        else:
            per_first_page = paginate_by

        paginator = PaginatorEx(qset, per_first_page, paginate_by)

        if page_no > paginator.num_pages or page_no < 1:
            raise Http404()

        page = paginator.page(page_no)
        listings = page.object_list

        context = {
                'page': page,
                'is_paginated': paginator.num_pages > 1,
                'results_per_page': paginate_by,
                'content_type': ct,
                'content_type_name': content_type,
                'listings': listings,
                'category': cat,
                'is_homepage': (not bool(category) and page_no == 1
                                and year is None),
                'is_title_page': category_title_page,
                'archive_entry_year': lambda: self._archive_entry_year(cat),
            }

        return context
Esempio n. 43
0
def survey_vote(request, survey_id):

    survey_ct = ContentType.objects.get_for_model(Survey)
    survey = get_cached_object_or_404(survey_ct, pk=survey_id)

    url = get_next_url(request)

    # activity check
    if not survey.current_activity_state == polls_settings.ACTIVITY_ACTIVE:
        return HttpResponseRedirect(url)

    # vote check
    if survey_check_vote(request, survey) != polls_settings.USER_NOT_YET_VOTED:
        return HttpResponseRedirect(url)

    form = QuestionForm(survey)(request.POST)

    # invalid input
    if not form.is_valid():
        # no choice selected error - via session
        sess_nv = request.session.get(
            polls_settings.SURVEY_NO_CHOICE_COOKIE_NAME, [])
        sess_nv.append(survey.id)
        request.session[polls_settings.SURVEY_NO_CHOICE_COOKIE_NAME] = sess_nv
        return HttpResponseRedirect(url)

    # vote save
    kwa = {}
    if request.user.is_authenticated():
        kwa['user'] = request.user
    kwa['ip_address'] = request.META['REMOTE_ADDR']
    survey.vote(form.cleaned_data['choice'], **kwa)

    # just voted info session update
    sess_jv = request.session.get(polls_settings.SURVEY_JUST_VOTED_COOKIE_NAME,
                                  [])
    sess_jv.append(survey.id)
    request.session[polls_settings.SURVEY_JUST_VOTED_COOKIE_NAME] = sess_jv

    response = HttpResponseRedirect(url)

    # authenticated user vote - session update
    if request.user.is_authenticated():
        sess = request.session.get(polls_settings.SURVEY_COOKIE_NAME, [])
        sess.append(survey.id)
        request.session[polls_settings.SURVEY_COOKIE_NAME] = sess
    # annonymous user vote - cookies update
    else:
        cook = request.COOKIES.get(polls_settings.SURVEY_COOKIE_NAME,
                                   '').split(',')
        if len(cook) > polls_settings.SURVEY_MAX_COOKIE_LENGTH:
            cook = cook[1:]
        cook.append(str(survey.id))
        expires = datetime.strftime(
            datetime.utcnow() +
            timedelta(seconds=polls_settings.SURVEY_MAX_COOKIE_AGE),
            "%a, %d-%b-%Y %H:%M:%S GMT")
        response.set_cookie(polls_settings.SURVEY_COOKIE_NAME,
                            value=','.join(cook),
                            max_age=polls_settings.SURVEY_MAX_COOKIE_AGE,
                            expires=expires,
                            path='/',
                            domain=Site.objects.get_current().domain,
                            secure=None)

    return response
Esempio n. 44
0
def survey_vote(request, survey_id):

    survey_ct = ContentType.objects.get_for_model(Survey)
    survey = get_cached_object_or_404(survey_ct, pk=survey_id)

    url = get_next_url(request)

    # activity check
    if not survey.current_activity_state == polls_settings.ACTIVITY_ACTIVE:
        return HttpResponseRedirect(url)

    # vote check
    if survey_check_vote(request, survey) != polls_settings.USER_NOT_YET_VOTED:
        return HttpResponseRedirect(url)

    form = QuestionForm(survey)(request.POST)

    # invalid input
    if not form.is_valid():
        # no choice selected error - via session
        sess_nv = request.session.get(polls_settings.SURVEY_NO_CHOICE_COOKIE_NAME, [])
        sess_nv.append(survey.id)
        request.session[polls_settings.SURVEY_NO_CHOICE_COOKIE_NAME] = sess_nv
        return HttpResponseRedirect(url)

    # vote save
    kwa = {}
    if request.user.is_authenticated():
        kwa['user'] = request.user
    kwa['ip_address'] = request.META['REMOTE_ADDR']
    survey.vote(form.cleaned_data['choice'], **kwa)

    # just voted info session update
    sess_jv = request.session.get(polls_settings.SURVEY_JUST_VOTED_COOKIE_NAME, [])
    sess_jv.append(survey.id)
    request.session[polls_settings.SURVEY_JUST_VOTED_COOKIE_NAME] = sess_jv

    response = HttpResponseRedirect(url)

    # authenticated user vote - session update
    if request.user.is_authenticated():
        sess = request.session.get(polls_settings.SURVEY_COOKIE_NAME, [])
        sess.append(survey.id)
        request.session[polls_settings.SURVEY_COOKIE_NAME] = sess
    # annonymous user vote - cookies update
    else:
        cook = request.COOKIES.get(polls_settings.SURVEY_COOKIE_NAME, '').split(',')
        if len(cook) > polls_settings.SURVEY_MAX_COOKIE_LENGTH:
            cook = cook[1:]
        cook.append(str(survey.id))
        expires = datetime.strftime(datetime.utcnow() + timedelta(seconds=polls_settings.SURVEY_MAX_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S GMT")
        response.set_cookie(
            polls_settings.SURVEY_COOKIE_NAME,
            value=','.join(cook),
            max_age=polls_settings.SURVEY_MAX_COOKIE_AGE,
            expires=expires,
            path='/',
            domain=Site.objects.get_current().domain,
            secure=None
        )

    return response
Esempio n. 45
0
 def results_export_view(self, request, contest_pk, extra_context=None, all_correct=False):
     contest = get_cached_object_or_404(Contest, pk=contest_pk)
     return self.results_export_response(request, contest, all_correct=all_correct)