Poprawki do widoku upload.
[redakcja.git] / apps / explorer / views.py
index 79160f8..251ad21 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 import urllib2
 import hg
 from librarian import html, parser, dcparser, ParseError, ValidationError
@@ -11,7 +12,7 @@ from django.utils import simplejson as json
 from django.views.generic.simple import direct_to_template
 
 from explorer import forms, models
-
+from toolbar import models as toolbar_models
 
 #
 # Some useful decorators
@@ -59,21 +60,43 @@ def file_list(request, repo):
 @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']        
-
-        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}) )
-
+    other_errors = []
+    if request.method == 'POST':
+        form = forms.BookUploadForm(request.POST, request.FILES)
+        if form.is_valid():
+            try:
+                # prepare the data
+                f = request.FILES['file']
+                decoded = 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 \
+                    )
+                    
+                    # end of upload
+
+                repo.in_branch(upload_action, 'default')
+
+                # if everything is ok, redirect to the editor
+                return HttpResponseRedirect( reverse('editor_view',
+                        kwargs={'path': f.name}) )
+
+            except hg.RepositoryException, e:
+                other_errors.append(u'Błąd repozytorium: ' + unicode(e) )
+            except UnicodeDecodeError, e:
+                other_errors.append(u'Niepoprawne kodowanie pliku: ' + e.reason \
+                 + u'. Żądane kodowanie: ' + e.encoding)
+        # invalid form
+
+    # get
+    form = forms.BookUploadForm()
     return direct_to_template(request, 'explorer/file_upload.html',
-        extra_context = {'form' : form)
+        extra_context = {'form' : form, 'other_errors': other_errors})
    
 #
 # Edit the file
@@ -163,7 +186,9 @@ def file_dc(request, path, repo):
 @login_required
 def display_editor(request, path):
     return direct_to_template(request, 'explorer/editor.html', extra_context={
-        'hash': path, 'panel_list': ['lewy', 'prawy'],
+        'hash': path,
+        'panel_list': ['lewy', 'prawy'],
+        'scriptlets': toolbar_models.Scriptlet.objects.all()
     })
 
 # ===============
@@ -209,10 +234,8 @@ def dceditor_panel(request, path, repo):
 
     try:
         doc_text = repo.get_file(path, user_branch)
-
         document = parser.WLDocument.from_string(doc_text)
         form = forms.DublinCoreForm(info=document.book_info)       
-
         return direct_to_template(request, 'explorer/panels/dceditor.html', extra_context={
             'fpath': path,
             'form': form,