Changeset db5fb504210b8c67cc4c99c27c91aafd4de5aafa

Show
Ignore:
Timestamp:
06/04/10 03:16:30 (3 months ago)
Author:
Jim Garrison <jim@…>
Children:
36ff2e8580af1bb1edc1386c3bd89dd5dc45ebcb
Parents:
f62d769ef9f30a1aa3d51cb70d64ec05c6d6088c
git-committer:
Jim Garrison <jim@jimgarrison.org> / 2010-06-04T00:16:30Z-0700
Message:

Fixed #11. implemented copying (forking) of resources on the wiki

Location:
ductus/wiki
Files:
1 added
2 modified

Legend:

Unmodified
Added
Removed
  • ductus/wiki/__init__.py

    ra6150a6 rdb5fb50  
    3737    """Used by 'edit' views to say that an edit or fork has led to a new URN 
    3838    """ 
     39 
     40    handled = False 
    3941 
    4042    def __init__(self, urn): 
  • ductus/wiki/views.py

    ra6150a6 rdb5fb50  
    2626from django.utils.encoding import iri_to_uri 
    2727from django.utils.http import urlquote 
     28from django.utils.translation import ugettext_lazy, ugettext as _ 
    2829from django.conf import settings 
    2930 
     
    168169    # the underlying page has been modified, so we should take note of that 
    169170    # and save its new location 
     171 
     172    if response.handled: 
     173        return response 
     174    response.handled = True 
    170175 
    171176    check_edit_permission(request, page.name) 
     
    263268        return _handle_successful_wikiedit(request, response, page) 
    264269    return response 
     270 
     271@register_view(None, 'copy') 
     272def view_copy_resource(request): 
     273    """Copies/forks the resource to a new location on the wiki 
     274    """ 
     275 
     276    from django import forms 
     277 
     278    class CopyPageForm(forms.Form): 
     279        source_urn = forms.CharField(widget=forms.HiddenInput()) 
     280        target_pagename = forms.CharField(help_text=_('wiki location of the new resource')) 
     281 
     282        def clean_source_urn(self): 
     283            source_urn = self.cleaned_data['source_urn'] 
     284            try: 
     285                source_resource = get_resource_database().get_resource_object(source_urn) 
     286            except Exception: # fixme: some day we should just be able to catch KeyError here, or something 
     287                raise forms.ValidationError(_('source resource does not exist')) 
     288            else: 
     289                return source_urn 
     290 
     291        def clean_target_pagename(self): 
     292            target_pagename = self.cleaned_data['target_pagename'] 
     293            if not user_has_edit_permission(request.user, target_pagename): 
     294                raise forms.ValidationError(_('you do not have permission to create/write to this resource'))  
     295            return target_pagename 
     296 
     297    if request.method == 'POST': 
     298        form = CopyPageForm(request.POST) 
     299        if form.is_valid(): 
     300            source_urn = form.cleaned_data['source_urn'] 
     301            source_resource = get_resource_database().get_resource_object(source_urn) 
     302            target_pagename = form.cleaned_data['target_pagename'] 
     303            page, page_created = WikiPage.objects.get_or_create(name=target_pagename) 
     304            if page_created: 
     305                page.save() 
     306            response = SuccessfulEditRedirect(source_urn) 
     307            return _handle_successful_wikiedit(request, response, page) 
     308    else: 
     309        form = CopyPageForm(initial={'source_urn': request.ductus.resource.urn}) 
     310 
     311    return render_to_response('wiki/copy.html', { 
     312        'form': form, 
     313    }, RequestContext(request)) 
    265314 
    266315@register_view(None, 'xml')