Poprawiony blad w zapisywaniu DC.
authorŁukasz Rekucki <lrekucki@gmail.com>
Mon, 31 Aug 2009 15:15:04 +0000 (17:15 +0200)
committerŁukasz Rekucki <lrekucki@gmail.com>
Mon, 31 Aug 2009 15:15:04 +0000 (17:15 +0200)
apps/explorer/forms.py
apps/explorer/views.py
lib/hg.py
project/static/js/editor.js

index aa6b48a..af1534e 100644 (file)
@@ -3,8 +3,10 @@ from django import forms
 from lxml import etree
 from librarian import dcparser
 
 from lxml import etree
 from librarian import dcparser
 
+
 from explorer import models
 
 from explorer import models
 
+
 class BookForm(forms.Form):
     content = forms.CharField(widget=forms.Textarea)
     commit_message = forms.CharField(required=False)
 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)
     
     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:
     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():
         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
index dbf5f3a..585edcc 100644 (file)
@@ -1,6 +1,9 @@
 from librarian import html
 import hg, urllib2, time
 from librarian import html
 import hg, urllib2, time
+
 from django.utils import simplejson as json
 from django.utils import simplejson as json
+from lxml import etree
+from librarian import dcparser
 
 from django.views.generic.simple import direct_to_template
 
 
 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.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
 
 
 from explorer import forms, models
 
@@ -40,7 +43,7 @@ def ajax_login_required(view):
 #
 @with_repo
 def file_list(request, repo):
 #
 @with_repo
 def file_list(request, repo):
-    paginator = Paginator( repo.file_list(), 100);
+    paginator = Paginator( repo.file_list('default'), 100);
     bookform = forms.BookUploadForm()
 
     try:
     bookform = forms.BookUploadForm()
 
     try:
@@ -57,14 +60,20 @@ def file_list(request, repo):
         'files': files, 'page': page, 'bookform': bookform,
     })
 
         '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']        
 @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',
         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)
 def file_dc(request, path, repo):
     if request.method == 'POST':
         form = forms.DublinCoreForm(request.POST)
+        
         if form.is_valid():
         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" 
             result = "ok"
         else:
             result = "error" 
index 29229dd..9e08e51 100644 (file)
--- 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)
         
             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])
     
         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)
     
         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):
         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):
         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)
 
         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)
         wlock = self.repo.wlock()
         try:
             old = self._switch_to_branch(bname)
index f9f0900..6e63eb0 100644 (file)
@@ -207,7 +207,7 @@ Editor.prototype.saveToBranch = function(msg)
        var self = this;
        $.log('Saving to local branch - panel:', changed_panel);
 
        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.');
 
        if( changed_panel.length == 0) {
                $.log('Nothing to save.');
@@ -220,7 +220,13 @@ Editor.prototype.saveToBranch = function(msg)
        }
 
        saveInfo = changed_panel.data('ctrl').saveInfo();
        }
 
        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,
 
        $.ajax({
                url: saveInfo.url,
@@ -242,7 +248,7 @@ Editor.prototype.saveToBranch = function(msg)
             self.showPopup('save-error');
                },
                type: 'POST',
             self.showPopup('save-error');
                },
                type: 'POST',
-               data: saveInfo.postData
+               data: postData
        });
 
     return true;
        });
 
     return true;