From 70f40902039374237390366dd06319fed5c45ee7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C5=81ukasz=20Rekucki?= Date: Mon, 31 Aug 2009 17:15:04 +0200 Subject: [PATCH] Poprawiony blad w zapisywaniu DC. --- apps/explorer/forms.py | 22 +++++---------------- apps/explorer/views.py | 39 +++++++++++++++++++++++++++++++------ lib/hg.py | 10 +++++----- project/static/js/editor.js | 12 +++++++++--- 4 files changed, 52 insertions(+), 31 deletions(-) diff --git a/apps/explorer/forms.py b/apps/explorer/forms.py index aa6b48a6..af1534e9 100644 --- a/apps/explorer/forms.py +++ b/apps/explorer/forms.py @@ -3,8 +3,10 @@ from django import forms from lxml import etree from librarian import dcparser + from explorer import models + class BookForm(forms.Form): content = forms.CharField(widget=forms.Textarea) commit_message = forms.CharField(required=False) @@ -39,6 +41,8 @@ class DublinCoreForm(forms.Form): license = forms.CharField(required=False) license_description = forms.CharField(widget=forms.Textarea, required=False) + commit_message = forms.CharField(required=False) + def __init__(self, *args, **kwargs): text = None if 'text' in kwargs: @@ -49,20 +53,4 @@ class DublinCoreForm(forms.Form): if text is not None: book_info = dcparser.BookInfo.from_string(text) for name, value in book_info.to_dict().items(): - self.fields[name].initial = value - - def save(self, repository, path): - file_contents = repository.get_file(path) - doc = etree.fromstring(file_contents) - - book_info = dcparser.BookInfo() - for name, value in self.cleaned_data.items(): - if value is not None and value != '': - setattr(book_info, name, value) - rdf = etree.XML(book_info.to_xml()) - - old_rdf = doc.getroottree().find('//{http://www.w3.org/1999/02/22-rdf-syntax-ns#}RDF') - old_rdf.getparent().remove(old_rdf) - doc.insert(0, rdf) - repository.add_file(path, etree.tostring(doc, pretty_print=True, encoding=unicode)) - + self.fields[name].initial = value \ No newline at end of file diff --git a/apps/explorer/views.py b/apps/explorer/views.py index dbf5f3a1..585edccb 100644 --- a/apps/explorer/views.py +++ b/apps/explorer/views.py @@ -1,6 +1,9 @@ from librarian import html import hg, urllib2, time + from django.utils import simplejson as json +from lxml import etree +from librarian import dcparser from django.views.generic.simple import direct_to_template @@ -10,7 +13,7 @@ from django.http import HttpResponseRedirect, HttpResponse from django.core.urlresolvers import reverse from django.core.paginator import Paginator, InvalidPage, EmptyPage -from django.contrib.auth.decorators import login_required +from django.contrib.auth.decorators import login_required, permission_required from explorer import forms, models @@ -40,7 +43,7 @@ def ajax_login_required(view): # @with_repo def file_list(request, repo): - paginator = Paginator( repo.file_list(), 100); + paginator = Paginator( repo.file_list('default'), 100); bookform = forms.BookUploadForm() try: @@ -57,14 +60,20 @@ def file_list(request, repo): 'files': files, 'page': page, 'bookform': bookform, }) -@login_required +@permission_required('explorer.can_add_files') @with_repo def file_upload(request, repo): form = forms.BookUploadForm(request.POST, request.FILES) if form.is_valid(): f = request.FILES['file'] - print 'Adding file: %s' % f.name - repo.add_file(f.name, f.read().decode('utf-8')) + + def upload_action(): + print 'Adding file: %s' % f.name + repo._add_file(f.name, f.read().decode('utf-8')) + repo._commit(message="File %s uploaded from platform by %s" % + (f.name, request.user.username), user=request.user.username) + + repo.in_branch(upload_action, 'default') return HttpResponseRedirect( reverse('editor_view', kwargs={'path': f.name}) ) return direct_to_template(request, 'explorer/file_upload.html', @@ -104,8 +113,26 @@ def file_xml(request, repo, path): def file_dc(request, path, repo): if request.method == 'POST': form = forms.DublinCoreForm(request.POST) + if form.is_valid(): - form.save(repo, path) + def save_action(): + file_contents = repo._get_file(path) + doc = etree.fromstring(file_contents) + + book_info = dcparser.BookInfo() + for name, value in form.cleaned_data.items(): + if value is not None and value != '': + setattr(book_info, name, value) + rdf = etree.XML(book_info.to_xml()) + + old_rdf = doc.getroottree().find('//{http://www.w3.org/1999/02/22-rdf-syntax-ns#}RDF') + old_rdf.getparent().remove(old_rdf) + doc.insert(0, rdf) + repo._add_file(path, etree.tostring(doc, pretty_print=True, encoding=unicode)) + repo._commit(message=(form.cleaned_data['commit_message'] or 'Lokalny zapis platformy.'), user=request.user.username) + + repo.in_branch(save_action, models.user_branch(request.user) ) + result = "ok" else: result = "error" diff --git a/lib/hg.py b/lib/hg.py index 29229dd2..9e08e516 100644 --- a/lib/hg.py +++ b/lib/hg.py @@ -35,19 +35,19 @@ class Repository(object): return localrepo.localrepository(self.ui, path, create=1) raise RepositoryDoesNotExist("Repository %s does not exist." % path) - def file_list(self, branch='default'): + def file_list(self, branch): return self.in_branch(lambda: self._file_list(), branch) def _file_list(self): return list(self.repo[None]) - def get_file(self, path, branch='default'): + def get_file(self, path, branch): return self.in_branch(lambda: self._get_file(path), branch) def _get_file(self, path): return self.repo.wread(path) - def add_file(self, path, value, branch='default'): + def add_file(self, path, value, branch): return self.in_branch(lambda: self._add_file(path, value), branch) def _add_file(self, path, value): @@ -56,10 +56,10 @@ class Repository(object): def _commit(self, message, user=None): return self.repo.commit(text=message, user=user) - def commit(self, message, user=None, branch='default'): + def commit(self, message, branch, user=None): return self.in_branch(lambda: self._commit(message, key=key, user=user), branch) - def in_branch(self, action, bname='default'): + def in_branch(self, action, bname): wlock = self.repo.wlock() try: old = self._switch_to_branch(bname) diff --git a/project/static/js/editor.js b/project/static/js/editor.js index f9f09003..6e63eb08 100644 --- a/project/static/js/editor.js +++ b/project/static/js/editor.js @@ -207,7 +207,7 @@ Editor.prototype.saveToBranch = function(msg) var self = this; $.log('Saving to local branch - panel:', changed_panel); - if(!msg) msg = "Zapis z edytora platformy."; + if(!msg) msg = "Zapis z edytora platformy."; if( changed_panel.length == 0) { $.log('Nothing to save.'); @@ -220,7 +220,13 @@ Editor.prototype.saveToBranch = function(msg) } saveInfo = changed_panel.data('ctrl').saveInfo(); - $.extend(saveInfo.postData, {'commit_message': msg}); + var postData = '' + if(saveInfo.postData instanceof Object) + postData = $.param(saveInfo.postData); + else + postData = saveInfo.postData; + + postData += '&' + $.param({'commit_message': msg}) $.ajax({ url: saveInfo.url, @@ -242,7 +248,7 @@ Editor.prototype.saveToBranch = function(msg) self.showPopup('save-error'); }, type: 'POST', - data: saveInfo.postData + data: postData }); return true; -- 2.20.1