src/cm/views/texts.py
changeset 38 be1807d390d4
parent 24 c8a95e540b79
child 42 82f6e2879e0a
equal deleted inserted replaced
37:d62454bf4402 38:be1807d390d4
    33 from django.shortcuts import render_to_response
    33 from django.shortcuts import render_to_response
    34 from django.template import RequestContext
    34 from django.template import RequestContext
    35 from django.template.loader import render_to_string
    35 from django.template.loader import render_to_string
    36 from django.utils.translation import ugettext as _, ugettext_lazy
    36 from django.utils.translation import ugettext as _, ugettext_lazy
    37 from django.views.generic.list_detail import object_list
    37 from django.views.generic.list_detail import object_list
       
    38 from tagging.models import Tag
    38 import difflib
    39 import difflib
    39 import logging
    40 import logging
    40 import mimetypes
    41 import mimetypes
    41 import simplejson
    42 import simplejson
    42 import sys
    43 import sys
   144 TEXT_PAGINATION = 10
   145 TEXT_PAGINATION = 10
   145 # security check inside view
   146 # security check inside view
   146 # TODO: set global access perm
   147 # TODO: set global access perm
   147 def text_list(request):
   148 def text_list(request):
   148     paginate_by = get_int(request.GET,'paginate',TEXT_PAGINATION)
   149     paginate_by = get_int(request.GET,'paginate',TEXT_PAGINATION)
   149     
   150     tag_selected = request.GET.get('tag_selected', 0)
       
   151         
   150     order_by = get_among(request.GET,'order',('title','author','modified','-title','-author','-modified'),'-modified')
   152     order_by = get_among(request.GET,'order',('title','author','modified','-title','-author','-modified'),'-modified')
   151 
   153 
   152     if request.method == 'POST':
   154     if request.method == 'POST':
   153         action = request.POST.get('action',None)
   155         action = request.POST.get('action',None)
   154         text_keys = get_keys_from_dict(request.POST, 'check-').keys()        
   156         text_keys = get_keys_from_dict(request.POST, 'check-').keys()        
   161                     raise UnauthorizedException('No perm can_delete_text on comment') 
   163                     raise UnauthorizedException('No perm can_delete_text on comment') 
   162             display_message(request, _(u'%(nb_texts)i text(s) deleted') %{'nb_texts':len(text_keys)})
   164             display_message(request, _(u'%(nb_texts)i text(s) deleted') %{'nb_texts':len(text_keys)})
   163             return HttpResponseRedirect(reverse('text'))
   165             return HttpResponseRedirect(reverse('text'))
   164 
   166 
   165     texts = get_texts_with_perm(request, 'can_view_text').order_by(order_by)
   167     texts = get_texts_with_perm(request, 'can_view_text').order_by(order_by)
       
   168 
       
   169     context = {    
       
   170                'tag_list' : Tag.objects.usage_for_queryset(TextVersion.objects.filter(id__in = [t.last_text_version_id for t in get_texts_with_perm(request, 'can_view_text')])),
       
   171                'tag_selected': tag_selected,
       
   172                }
       
   173 
       
   174     if tag_selected:     
       
   175         tag_ids = Tag.objects.filter(name=tag_selected)
       
   176         if tag_ids:   
       
   177             content_type_id = ContentType.objects.get_for_model(TextVersion).pk
       
   178             # table cm_userprofile is not present if display_suspended_users: fix this 
       
   179             texts = texts.extra(where=['tagging_taggeditem.object_id = cm_text.last_text_version_id', 
       
   180                                        'tagging_taggeditem.content_type_id = %i' %content_type_id,
       
   181                                        'tagging_taggeditem.tag_id = %i' %tag_ids[0].id],
       
   182                                 tables=['tagging_taggeditem'],
       
   183                                 )
       
   184     
   166     return object_list(request, texts,
   185     return object_list(request, texts,
   167                        template_name = 'site/text_list.html',
   186                        template_name = 'site/text_list.html',
   168                        paginate_by = paginate_by,
   187                        paginate_by = paginate_by,
       
   188                        extra_context=context,
   169                        )
   189                        )
   170     
   190     
   171 @has_perm_on_text('can_view_text')
   191 @has_perm_on_text('can_view_text')
   172 def text_view(request, key, adminkey=None):
   192 def text_view(request, key, adminkey=None):
   173     text = get_text_by_keys_or_404(key)
   193     text = get_text_by_keys_or_404(key)