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) |