diff -r 8cb89c153140 -r f436e2fef076 src/cm/views/texts.py --- a/src/cm/views/texts.py Fri Feb 05 18:43:58 2010 +0100 +++ b/src/cm/views/texts.py Tue Feb 09 22:20:08 2010 +0100 @@ -3,8 +3,6 @@ from cm.client import jsonize, get_filter_datas, edit_comment, remove_comment, \ add_comment, RequestComplexEncoder, comments_thread, own_notify from cm.cm_settings import NEW_TEXT_VERSION_ON_EDIT -from cm.diff import text_diff as _text_diff, text_history as inner_text_history, \ - get_colors from cm.exception import UnauthorizedException from cm.message import * from cm.models import * @@ -211,6 +209,19 @@ text.delete() return HttpResponse('') # no redirect because this is called by js +@has_perm_on_text('can_delete_text') +def text_version_delete(request, key, text_version_key): + text_version = TextVersion.objects.get(key=text_version_key) + text=text_version.text + if request.method != 'POST': + raise UnauthorizedException('Unauthorized') + display_message(request, _(u'Text version %(text_version_title)s deleted') %{'text_version_title':text_version.title}) + register_activity(request, "text_version_removed", text=text) + import pdb;pdb.set_trace() + text_version.delete() + return HttpResponse('') # no redirect because this is called by js + + @has_perm_on_text('can_view_text') # only protected by text_view / comment filtering done in view def text_view_comments(request, key, version_key=None, adminkey=None): text = get_text_by_keys_or_404(key) @@ -445,59 +456,61 @@ @has_perm_on_text('can_view_text') -def text_history(request, key, v1_nid=None, v2_nid=None, adminkey=False): - text = get_text_by_keys_or_404(key) - text_versions = text.get_versions() - author_colors = get_colors([t.get_name() for t in text.get_inversed_versions()]) - - if v1_nid: - v1_nid = int(v1_nid) - else: - v1_nid = text.get_versions_number() - - v1 = text.get_version(v1_nid) +def text_history_version(request, key, version_key): + text = get_text_by_keys_or_404(key) + text_version = get_textversion_by_keys_or_404(version_key, key=key) + template_dict = {'text' : text, + 'text_version' : text_version, + 'embed_code' : embed_html(key, 'id="text_view_frame" name="text_view_frame"', version_key), + } + return render_to_response('site/text_history_version.html', + template_dict, + context_instance=RequestContext(request)) - v1_id = v1.id - - v2_id = None - v2 = None - if v2_nid: - v2_nid = int(v2_nid) - v2 = text.get_version(v2_nid) - v2_id = v2.id +@has_perm_on_text('can_view_text') +def text_history_compare(request, key, v1_version_key, v2_version_key, mode=''): + text = get_text_by_keys_or_404(key) + v1 = get_textversion_by_keys_or_404(v1_version_key, key=key) + v2 = get_textversion_by_keys_or_404(v2_version_key, key=key) + + content = get_uniffied_inner_diff_table(v1.content, v2.content) + if mode=='1': + # alternate diff + from cm.utils.diff import text_diff + content = text_diff(v1.get_content(), v2.get_content()) - versions = text.get_inversed_versions() - paired_versions = [] - colors_dict = dict(author_colors) - for index in range(len(versions)): - vv1 = versions[index] - if index + 1 < len(versions): - vv2 = versions[index + 1] - else: - vv2 = None - paired_versions.append((vv1, vv2, colors_dict.get(vv1.get_name(), '#D9D9D9'))) + template_dict = { + 'text' : text, + 'v1': v1, + 'v2': v2, + 'content' : content.strip(), + 'empty' : '
'==content, + } + return render_to_response('site/text_history_compare.html', + template_dict, + context_instance=RequestContext(request)) + +@has_perm_on_text('can_view_text') +def text_history(request, key): + text = get_text_by_keys_or_404(key) + + if request.method == 'POST': + v1_key = request.POST.get('newkey',None) + v2_key = request.POST.get('oldkey',None) + if v1_key and v2_key: + return redirect(request, 'text-history-compare', args=[text.key, v2_key, v1_key ]) + + text_versions = text.get_versions() + paginate_by = get_int(request.GET,'paginate',TEXT_PAGINATION) - embed_code = "" - content = "" - if v1_nid and not v2_nid: - embed_code = embed_html(key, 'id="text_view_frame" name="text_view_frame"', v1.key) - else: - content = get_uniffied_inner_diff_table(v1.content, v2.content) - - template_dict = {'paired_versions' : paired_versions, - 'text' : text, - 'v1_nid' : v1_nid, - 'v2_nid' : v2_nid, - 'v1_id' : v1_id, - 'v2_id' : v2_id, - 'version1': v1, - 'version2': v2, - 'content' : content.strip(), - 'embed_code':embed_code, - 'is_diff' : content !='
', - 'author_colors' : author_colors, - } - return render_to_response('site/text_history.html', template_dict, context_instance=RequestContext(request)) + last_last_version = text_versions[1] if len(text_versions)>1 else None + context = {'text':text, 'last_version':text.last_text_version, 'last_last_version':last_last_version} + return object_list(request, text_versions, + template_name = 'site/text_history.html', + paginate_by = paginate_by, + extra_context=context, + ) + # taken from trac def _get_change_extent(str1, str2): @@ -558,22 +571,6 @@ res.append('') return ''.join(res) -@has_perm_on_text('can_view_text') -def text_history_compare(request, key, v1_nid=None, v2_nid=None, adminkey=None): - text = get_text_by_keys_or_404(key) - - vis_diff = difflib.HtmlDiff() - v1 = text.get_version(int(v1_nid)) - v2 = text.get_version(int(v2_nid)) - content = _text_diff(v2.get_content(), v1.get_content()) - #content = vis_diff.make_table(v1.content.split('\n'), v2.content.split('\n'), v1_nid, v2_nid, context=None) - - template_dict = { - 'text' : text, - 'content' : content, - } - return render_to_response('site/text_history_compare.html', template_dict, context_instance=RequestContext(request)) - #def text_history_version(request, key): # text = get_text_by_keys_or_404(key=key) # return _text_history_version(request, text) @@ -586,32 +583,11 @@ # template_dict['admin'] = True # return render_to_response('site/text_history.html', template_dict, context_instance=RequestContext(request)) # -#def _text_history_version(request, text, admin=False): -# pass -# class TextVersionForm(ModelForm): class Meta: model = TextVersion fields = ('title', 'content', 'format') -@has_perm_on_text('can_view_text') -def text_diff(request, key, id_v1, id_v2): - text = get_text_by_keys_or_404(key) - text_version_1 = TextVersion.objects.get(pk=id_v1) - text_version_2 = TextVersion.objects.get(pk=id_v2) - content = _text_diff(text_version_1.get_content(), text_version_2.get_content()) - title = _text_diff(text_version_1.title, text_version_2.title) - 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)) - -# commented out, unused suspected -#@has_perm_on_text('can_view_text') -#def text_version(request, key, id_version): -# text = get_text_by_keys_or_404(key) -# text_version = TextVersion.objects.get(pk=id_version) -# # TODO : assert text_v in text ... -# # TODO : do not use db id -# 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)) - class EditTextForm(ModelForm): title = forms.CharField(label=_("Title"), widget=forms.TextInput) #format = forms.CharField(label=_("Format")) @@ -749,11 +725,11 @@ # TODO: modif de la base => if POST @has_perm_on_text('can_edit_text') -def text_revert(request, key, v1_nid, adminkey=None): +def text_revert(request, key, text_version_key): text = get_text_by_keys_or_404(key) - text.revert_to_version(v1_nid) - display_message(request, _(u'A new version (copied from version %(version_id)s) has been created') % {'version_id':v1_nid}) + text_version = text.revert_to_version(text_version_key) + display_message(request, _(u'A new version (copied from version %(version_title)s) has been created') % {'version_title':text_version.title}) return HttpResponseRedirect(reverse('text-history', args=[text.key]))