Example #1
0
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))
Example #2
0
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) )
Example #3
0
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 } ) ) )
Example #4
0
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
                })))