def diff(request, group, snipName, changeId=None): snip = get_object_or_404(WikiSnip, group=group, name=snipName) if not snip.has_view_permission(): raise PermissionDenied() changeEnd = get_object_or_404( WikiSnipChange, snip=snip, pk=changeId, ) args = { 'snip': snip, 'snipName': snipName, } try: changeStart = snip.wikisnipchange_set.filter( edited__lt=changeEnd.edited, ).order_by('-edited')[0] args['prev_change'] = changeStart except IndexError: changeStart = None diffTable = ugettext("This is the first change.") try: next_change = snip.wikisnipchange_set.filter( edited__gt=changeEnd.edited, ).order_by('edited')[0] args['next_change'] = next_change except IndexError: pass if changeStart: htmlDiff = HtmlDiff(wrapcolumn=50, ) from sphene.community.templatetags.sph_extras import sph_date, sph_user_displayname desc = ugettext('%(date)s by %(editor)s') if snip.has_edit_permission(): desc += ' / <a href="%(editversionlink)s">' + ugettext( 'Edit this version') + '</a>' fromdesc = desc % { 'date': sph_date(changeStart.edited), 'editor': sph_user_displayname(changeStart.editor), 'editversionlink': changeStart.get_absolute_editurl() }, todesc = desc % { 'date': sph_date(changeEnd.edited), 'editor': sph_user_displayname(changeEnd.editor), 'editversionlink': changeEnd.get_absolute_editurl() }, diffTable = htmlDiff.make_table( changeStart.body.splitlines(1), changeEnd.body.splitlines(1), fromdesc=fromdesc, todesc=todesc, context=True, ) args['diffTable'] = mark_safe(diffTable) args['fromchange'] = changeStart args['tochange'] = changeEnd return render_to_response('sphene/sphwiki/diff.html', args, context_instance=RequestContext(request))
def diff(request, group, snipName, changeId = None): snip = get_object_or_404( WikiSnip, group = group, name = snipName ) if not snip.has_view_permission(): raise PermissionDenied() changeEnd = get_object_or_404( WikiSnipChange, snip = snip, pk = changeId, ) args = { 'snip': snip, 'snipName': snipName,} try: changeStart = snip.wikisnipchange_set.filter( edited__lt = changeEnd.edited, ).order_by('-edited')[0] args['prev_change'] = changeStart except IndexError: changeStart = None diffTable = ugettext("This is the first change.") try: next_change = snip.wikisnipchange_set.filter( edited__gt = changeEnd.edited, ).order_by('edited')[0] args['next_change'] = next_change except IndexError: pass if changeStart: htmlDiff = HtmlDiff(wrapcolumn = 50,) from sphene.community.templatetags.sph_extras import sph_date, sph_user_displayname desc = ugettext('%(date)s by %(editor)s') if snip.has_edit_permission(): desc += ' / <a href="%(editversionlink)s">'+ugettext('Edit this version')+'</a>' fromdesc = desc % { 'date': sph_date( changeStart.edited ), 'editor': sph_user_displayname( changeStart.editor ), 'editversionlink': changeStart.get_absolute_editurl() }, todesc = desc % { 'date': sph_date( changeEnd.edited ), 'editor': sph_user_displayname( changeEnd.editor ), 'editversionlink': changeEnd.get_absolute_editurl() }, diffTable = htmlDiff.make_table( changeStart.body.splitlines(1), changeEnd.body.splitlines(1), fromdesc = fromdesc, todesc = todesc, context = True, ) args['diffTable'] = mark_safe(diffTable) args['fromchange'] = changeStart args['tochange'] = changeEnd return render_to_response( 'sphene/sphwiki/diff.html', args, context_instance = RequestContext(request) )
def editSnip(request, group, snipName, versionId = None): version = None data = request.method == 'POST' and request.POST or None try: snip = WikiSnip.objects.get( group = group, name__exact = snipName ) if versionId is not None: version = WikiSnipChange.objects.get( pk = versionId ) if not version or version.snip != snip: # TODO: raise a 404 instead raise PermissionDenied() snip.body = version.body #SnipForm = forms.models.form_for_instance(snip, form = CaptchaEditBaseForm) form = WikiSnipForm(data, instance = snip) except WikiSnip.DoesNotExist: #SnipForm = forms.models.form_for_model(WikiSnip, form = CaptchaEditBaseForm) form = WikiSnipForm(data) snip = WikiSnip( name = snipName, group = group ) #snip = None if not snip.has_edit_permission(): raise PermissionDenied() #SnipForm.base_fields['body'].widget.attrs['cols'] = 80 #SnipForm.base_fields['body'].widget.attrs['rows'] = 30 changemessage = "" if request.method == 'POST': if 'type' in request.POST and request.POST['type'] == 'preview': return HttpResponse( unicode(WikiSnip(body = request.POST['body']).render() )) changemessage = request.POST['message'] #form = SnipForm(request.POST) if form.is_valid(): old_title = None old_body = None change_type = 0 if snip.id: old_title = snip.title old_body = snip.body snip = form.save(commit=False) snip.group = group snip.name = snipName if request.user.is_authenticated(): snip.editor = request.user else: snip.editor = None snip.save() if old_body is not None: if snip.body != old_body: change_type |= 1 if snip.title != old_title: change_type |= 2 else: # if a snip is new, everything has changed .. change_type = 1 | 2 | 4 data = form.cleaned_data if tag_set_labels( snip, data['tags'] ): change_type |= 4 change = WikiSnipChange( snip = snip, #editor = request.user, editor = snip.editor, edited = datetime.today(), message = request.POST['message'], title = snip.title, body = snip.body, change_type = change_type, ) change.save() tag_set_labels( change, data['tags'] ) return HttpResponseRedirect( snip.get_absolute_url() ) else: #form = SnipForm() if snip is not None: form.fields['tags'].initial = tag_get_labels(snip) pass if version: from sphene.community.templatetags.sph_extras import sph_date changemessage = ugettext('Reverted to revision of %(editdate)s') % \ { 'editdate': sph_date( version.edited ) } t = loader.get_template( 'sphene/sphwiki/editSnip.html' ) return HttpResponse( t.render( RequestContext( request, { 'form': form, 'snip': snip, 'version': version, 'changemessage': changemessage } ) ) )
def editSnip(request, group, snipName, versionId=None): version = None data = request.method == 'POST' and request.POST or None try: snip = WikiSnip.objects.get(group=group, name__exact=snipName) if versionId is not None: version = WikiSnipChange.objects.get(pk=versionId) if not version or version.snip != snip: # TODO: raise a 404 instead raise PermissionDenied() snip.body = version.body #SnipForm = forms.models.form_for_instance(snip, form = CaptchaEditBaseForm) form = WikiSnipForm(data, instance=snip) except WikiSnip.DoesNotExist: #SnipForm = forms.models.form_for_model(WikiSnip, form = CaptchaEditBaseForm) form = WikiSnipForm(data) snip = WikiSnip(name=snipName, group=group) #snip = None if not snip.has_edit_permission(): raise PermissionDenied() #SnipForm.base_fields['body'].widget.attrs['cols'] = 80 #SnipForm.base_fields['body'].widget.attrs['rows'] = 30 changemessage = "" if request.method == 'POST': if 'type' in request.POST and request.POST['type'] == 'preview': return HttpResponse( unicode(WikiSnip(body=request.POST['body']).render())) changemessage = request.POST['message'] #form = SnipForm(request.POST) if form.is_valid(): old_title = None old_body = None change_type = 0 if snip.id: old_title = snip.title old_body = snip.body snip = form.save(commit=False) snip.group = group snip.name = snipName if request.user.is_authenticated(): snip.editor = request.user else: snip.editor = None snip.save() if old_body is not None: if snip.body != old_body: change_type |= 1 if snip.title != old_title: change_type |= 2 else: # if a snip is new, everything has changed .. change_type = 1 | 2 | 4 data = form.cleaned_data if tag_set_labels(snip, data['tags']): change_type |= 4 change = WikiSnipChange( snip=snip, #editor = request.user, editor=snip.editor, edited=datetime.today(), message=request.POST['message'], title=snip.title, body=snip.body, change_type=change_type, ) change.save() tag_set_labels(change, data['tags']) return HttpResponseRedirect(snip.get_absolute_url()) else: #form = SnipForm() if snip is not None: form.fields['tags'].initial = tag_get_labels(snip) pass if version: from sphene.community.templatetags.sph_extras import sph_date changemessage = ugettext('Reverted to revision of %(editdate)s') % \ { 'editdate': sph_date( version.edited ) } t = loader.get_template('sphene/sphwiki/editSnip.html') return HttpResponse( t.render( RequestContext( request, { 'form': form, 'snip': snip, 'version': version, 'changemessage': changemessage })))