src/cm/views/texts.py
changeset 24 c8a95e540b79
parent 12 f69ff46d3240
child 38 be1807d390d4
equal deleted inserted replaced
23:dbbd99172620 24:c8a95e540b79
       
     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,
   453                      'v1_id' : v1_id,
   463                      'v1_id' : v1_id,
   454                      'v2_id' : v2_id,
   464                      'v2_id' : v2_id,
   455                      'version1': v1,
   465                      'version1': v1,
   456                      'version2': v2,
   466                      'version2': v2,
   457                      'content' : content,
   467                      'content' : content,
       
   468                      'embed_code':embed_code,
   458                      'author_colors' : author_colors,
   469                      'author_colors' : author_colors,
   459                      }
   470                      }
   460     return render_to_response('site/text_history.html', template_dict, context_instance=RequestContext(request))
   471     return render_to_response('site/text_history.html', template_dict, context_instance=RequestContext(request))
   461 
   472 
   462 # taken from trac
   473 # taken from trac
   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"))