|
1 from cm.utils.embed import embed_html |
1 from cm.activity import register_activity |
2 from cm.activity import register_activity |
2 from cm.client import jsonize, get_filter_datas, edit_comment, remove_comment, \ |
3 from cm.client import jsonize, get_filter_datas, edit_comment, remove_comment, \ |
3 add_comment, RequestComplexEncoder, comments_thread, own_notify |
4 add_comment, RequestComplexEncoder, comments_thread, own_notify |
4 from cm.cm_settings import NEW_TEXT_VERSION_ON_EDIT |
5 from cm.cm_settings import NEW_TEXT_VERSION_ON_EDIT |
5 from cm.diff import text_diff as _text_diff, text_history as inner_text_history, \ |
6 from cm.diff import text_diff as _text_diff, text_history as inner_text_history, \ |
13 from cm.utils import get_among, get_among, get_int |
14 from cm.utils import get_among, get_among, get_int |
14 from cm.utils.comment_positioning import compute_new_comment_positions, \ |
15 from cm.utils.comment_positioning import compute_new_comment_positions, \ |
15 insert_comment_markers |
16 insert_comment_markers |
16 from cm.utils.html import cleanup_textarea |
17 from cm.utils.html import cleanup_textarea |
17 from cm.utils.spannifier import spannify |
18 from cm.utils.spannifier import spannify |
18 from cm.views import get_keys_from_dict, get_text_by_keys_or_404, redirect |
19 from cm.views import get_keys_from_dict, get_textversion_by_keys_or_404, get_text_by_keys_or_404, redirect |
19 from cm.views.export import content_export2 |
20 from cm.views.export import content_export2 |
20 from cm.views.user import AnonUserRoleForm, cm_login |
21 from cm.views.user import AnonUserRoleForm, cm_login |
21 from difflib import unified_diff |
22 from difflib import unified_diff |
22 from django import forms |
23 from django import forms |
23 from django.conf import settings |
24 from django.conf import settings |
167 paginate_by = paginate_by, |
168 paginate_by = paginate_by, |
168 ) |
169 ) |
169 |
170 |
170 @has_perm_on_text('can_view_text') |
171 @has_perm_on_text('can_view_text') |
171 def text_view(request, key, adminkey=None): |
172 def text_view(request, key, adminkey=None): |
172 |
|
173 text = get_text_by_keys_or_404(key) |
173 text = get_text_by_keys_or_404(key) |
174 register_activity(request, "text_view", text=text) |
174 register_activity(request, "text_view", text=text) |
175 |
|
176 text_version = text.get_latest_version() |
175 text_version = text.get_latest_version() |
177 template_dict = { 'text' : text, 'text_version' : text_version, 'title' : text_version.title, 'content' : text_version.get_content()} |
176 embed_code = embed_html(key, 'id="text_view_frame" name="text_view_frame"') |
|
177 |
|
178 template_dict = { 'embed_code':embed_code, 'text' : text, 'text_version' : text_version, 'title' : text_version.title, 'content' : text_version.get_content()} |
178 return render_to_response('site/text_view.html', template_dict, context_instance=RequestContext(request)) |
179 return render_to_response('site/text_view.html', template_dict, context_instance=RequestContext(request)) |
179 |
180 |
180 @has_perm_on_text('can_delete_text') |
181 @has_perm_on_text('can_delete_text') |
181 def text_delete(request, key): |
182 def text_delete(request, key): |
182 text = Text.objects.get(key=key) |
183 text = Text.objects.get(key=key) |
186 register_activity(request, "text_removed", text=text) |
187 register_activity(request, "text_removed", text=text) |
187 text.delete() |
188 text.delete() |
188 return HttpResponse('') # no redirect because this is called by js |
189 return HttpResponse('') # no redirect because this is called by js |
189 |
190 |
190 @has_perm_on_text('can_view_text') # only protected by text_view / comment filtering done in view |
191 @has_perm_on_text('can_view_text') # only protected by text_view / comment filtering done in view |
191 def text_view_comments(request, key, adminkey=None): |
192 def text_view_comments(request, key, version_key=None, adminkey=None): |
192 text = get_text_by_keys_or_404(key) |
193 text = get_text_by_keys_or_404(key) |
193 #TODO: stupid why restrict to latest ? |
194 if version_key : |
194 text_version = text.get_latest_version() |
195 text_version = get_textversion_by_keys_or_404(version_key, adminkey, key) |
|
196 else : |
|
197 text_version = text.get_latest_version() |
|
198 |
195 comments = get_viewable_comments(request, text_version.comment_set.filter(reply_to__isnull=True),text) |
199 comments = get_viewable_comments(request, text_version.comment_set.filter(reply_to__isnull=True),text) |
196 filter_datas = get_filter_datas(request, text_version, text) |
200 filter_datas = get_filter_datas(request, text_version, text) |
197 |
201 |
198 get_params = simplejson.dumps(request.GET) |
202 get_params = simplejson.dumps(request.GET) |
199 |
203 |
220 # TODO: (RBE to RBA) send mail withinfos |
224 # TODO: (RBE to RBA) send mail withinfos |
221 ret = "warn test" |
225 ret = "warn test" |
222 #print request.POST |
226 #print request.POST |
223 elif request.POST: |
227 elif request.POST: |
224 key = request.POST['key'] |
228 key = request.POST['key'] |
|
229 version_key = request.POST['version_key'] |
225 |
230 |
226 text = Text.objects.get(key=key) ; |
231 text = Text.objects.get(key=key) ; |
227 #TODO: stupid why restrict to latest ? |
232 #TODO: stupid why restrict to latest ? |
228 text_version = text.get_latest_version() |
233 text_version = text.get_latest_version() |
229 |
234 |
232 ret = own_notify(request=request, key=key) |
237 ret = own_notify(request=request, key=key) |
233 if function_name in ('editComment', 'addComment', 'removeComment',) : |
238 if function_name in ('editComment', 'addComment', 'removeComment',) : |
234 if function_name == 'editComment' : |
239 if function_name == 'editComment' : |
235 ret = edit_comment(request=request, key=key, comment_key=request.POST['comment_key']) |
240 ret = edit_comment(request=request, key=key, comment_key=request.POST['comment_key']) |
236 elif function_name == 'addComment' : |
241 elif function_name == 'addComment' : |
237 ret = add_comment(request=request, key=key) |
242 ret = add_comment(request=request, key=key, version_key=version_key) |
238 elif function_name == 'removeComment' : |
243 elif function_name == 'removeComment' : |
239 ret = remove_comment(request=request, key=key, comment_key=request.POST['comment_key']) |
244 ret = remove_comment(request=request, key=key, comment_key=request.POST['comment_key']) |
240 |
245 |
241 ret['filterData'] = get_filter_datas(request, text_version, text) |
246 ret['filterData'] = get_filter_datas(request, text_version, text) |
242 #ret['tagCloud'] = get_tagcloud(key) |
247 #ret['tagCloud'] = get_tagcloud(key) |
396 return render_to_response('site/text_print.html', |
401 return render_to_response('site/text_print.html', |
397 template_dict, |
402 template_dict, |
398 context_instance=RequestContext(request)) |
403 context_instance=RequestContext(request)) |
399 |
404 |
400 @has_perm_on_text('can_view_text') |
405 @has_perm_on_text('can_view_text') |
401 def text_view_frame(request, key, adminkey=None): |
406 def text_view_frame(request, key, version_key=None, adminkey=None): |
402 text = get_text_by_keys_or_404(key) |
407 text = get_text_by_keys_or_404(key) |
403 |
408 |
404 text_version = text.get_latest_version() |
409 if version_key : |
405 template_dict = {'text' : text} |
410 text_version = get_textversion_by_keys_or_404(version_key, adminkey, key) |
|
411 else : |
|
412 text_version = text.get_latest_version() |
|
413 template_dict = {'text' : text, 'text_version' : text_version} |
406 return render_to_response('site/text_view_frame.html', |
414 return render_to_response('site/text_view_frame.html', |
407 template_dict, |
415 template_dict, |
408 context_instance=RequestContext(request)) |
416 context_instance=RequestContext(request)) |
409 |
417 |
410 |
418 |
439 vv2 = versions[index + 1] |
447 vv2 = versions[index + 1] |
440 else: |
448 else: |
441 vv2 = None |
449 vv2 = None |
442 paired_versions.append((vv1, vv2, colors_dict.get(vv1.get_name(), '#D9D9D9'))) |
450 paired_versions.append((vv1, vv2, colors_dict.get(vv1.get_name(), '#D9D9D9'))) |
443 |
451 |
|
452 embed_code = "" |
|
453 content = "" |
444 if v1_nid and not v2_nid: |
454 if v1_nid and not v2_nid: |
445 content = v1.get_content() |
455 embed_code = embed_html(key, 'id="text_view_frame" name="text_view_frame"', v1.key) |
446 else: |
456 else: |
447 content = get_uniffied_inner_diff_table(cleanup_textarea(v1.content), cleanup_textarea(v2.content)) |
457 content = get_uniffied_inner_diff_table(cleanup_textarea(v1.content), cleanup_textarea(v2.content)) |
448 |
458 |
449 template_dict = {'paired_versions' : paired_versions, |
459 template_dict = {'paired_versions' : paired_versions, |
450 'text' : text, |
460 'text' : text, |
561 text_version_2 = TextVersion.objects.get(pk=id_v2) |
572 text_version_2 = TextVersion.objects.get(pk=id_v2) |
562 content = _text_diff(text_version_1.get_content(), text_version_2.get_content()) |
573 content = _text_diff(text_version_1.get_content(), text_version_2.get_content()) |
563 title = _text_diff(text_version_1.title, text_version_2.title) |
574 title = _text_diff(text_version_1.title, text_version_2.title) |
564 return render_to_response('site/text_view.html', {'text' : text, 'text_version_1' : text_version_1, 'text_version_2' : text_version_2, 'title' : title, 'content' : content}, context_instance=RequestContext(request)) |
575 return render_to_response('site/text_view.html', {'text' : text, 'text_version_1' : text_version_1, 'text_version_2' : text_version_2, 'title' : title, 'content' : content}, context_instance=RequestContext(request)) |
565 |
576 |
566 |
577 # commented out, unused suspected |
567 @has_perm_on_text('can_view_text') |
578 #@has_perm_on_text('can_view_text') |
568 def text_version(request, key, id_version): |
579 #def text_version(request, key, id_version): |
569 text = get_text_by_keys_or_404(key) |
580 # text = get_text_by_keys_or_404(key) |
570 text_version = TextVersion.objects.get(pk=id_version) |
581 # text_version = TextVersion.objects.get(pk=id_version) |
571 # TODO : assert text_v in text ... |
582 # # TODO : assert text_v in text ... |
572 # TODO : do not use db id |
583 # # TODO : do not use db id |
573 return render_to_response('site/text_view.html', {'text' : text, 'text_version' : text_version, 'title' : text_version.title, 'content' : text_version.get_content()}, context_instance=RequestContext(request)) |
584 # return render_to_response('site/text_view.html', {'text' : text, 'text_version' : text_version, 'title' : text_version.title, 'content' : text_version.get_content()}, context_instance=RequestContext(request)) |
574 |
585 |
575 class EditTextForm(ModelForm): |
586 class EditTextForm(ModelForm): |
576 title = forms.CharField(label=_("Title"), widget=forms.TextInput) |
587 title = forms.CharField(label=_("Title"), widget=forms.TextInput) |
577 #format = forms.CharField(label=_("Format")) |
588 #format = forms.CharField(label=_("Format")) |
578 #content = forms.TextField(label=_("Content")) |
589 #content = forms.TextField(label=_("Content")) |