Pierwsza implementacja DocumentModel.{merge|update}. Zmiana sposobu generowania URLi...
[redakcja.git] / apps / explorer / views.py
index 52ff963..eca439c 100644 (file)
@@ -22,6 +22,8 @@ from toolbar import models as toolbar_models
 
 from django.forms.util import ErrorList
 
+import wlrepo
+
 #
 # Some useful decorators
 
@@ -36,7 +38,7 @@ def file_path(fileid):
 def with_repo(view):
     """Open a repository for this view"""
     def view_with_repo(request, *args, **kwargs):          
-        kwargs['repo'] = hg.Repository(settings.REPOSITORY_PATH)
+        kwargs['repo'] = wlrepo.MercurialLibrary(settings.REPOSITORY_PATH)
         return view(request, *args, **kwargs)
     return view_with_repo
 
@@ -55,20 +57,18 @@ def ajax_login_required(view):
 # View all files
 #
 @with_repo
-def file_list(request, repo):
-    #
-    latest_default = repo.get_branch_tip('default')
-
-    fl = []
-    for file in repo.repo[latest_default]:
-        m = re.match(u'^pub_([\\w\\$0-9_-]+).xml$', file.decode('utf-8'), re.UNICODE)
-        if m is not None:
-            fl.append(m.group(1))
-            
-    bookform = forms.BookUploadForm()
+def file_list(request, repo):   
+    import api.forms
+    from api.resources import library_resource
+
+    bookform = api.forms.DocumentUploadForm()
 
+    # short-circut the api document list
+    doctree = library_resource.handler.read(request)
+    print doctree['documents']
+        
     return direct_to_template(request, 'explorer/file_list.html', extra_context={
-        'files': fl, 'bookform': bookform,
+        'filetree': doctree['documents'], 'bookform': bookform,
     })
 
 @permission_required('explorer.can_add_files')
@@ -307,7 +307,7 @@ def file_commit(request, path, repo):
 @with_repo
 def file_dc(request, path, repo):
     errors = None
-    rpath = file_path(fileid)
+    rpath = file_path(path)
 
     if request.method == 'POST':
         form = forms.DublinCoreForm(request.POST)
@@ -355,27 +355,26 @@ def file_dc(request, path, repo):
 # Display the main editor view
 
 @login_required
-@with_repo
-def display_editor(request, path, repo):    
-
+# @with_repo
+def display_editor(request, path):    
     # this is the only entry point where we create an autobranch for the user
     # if it doesn't exists. All other views SHOULD fail.
-    def ensure_branch_exists():
-        parent = repo.get_branch_tip('default')
-        repo._create_branch(file_branch(path, request.user), parent)
+    #def ensure_branch_exists():
+    #    parent = repo.get_branch_tip('default')
+    #    repo._create_branch(file_branch(path, request.user), parent)
         
-    try:
-        repo.with_wlock(ensure_branch_exists)
+#    try:
+    #    repo.with_wlock(ensure_branch_exists)
         
-        return direct_to_template(request, 'explorer/editor.html', extra_context={
-            'fileid': path,
-            'panel_list': ['lewy', 'prawy'],
-            'availble_panels': models.EditorPanel.objects.all(),
-            'scriptlets': toolbar_models.Scriptlet.objects.all()
-        })
-    except KeyError:
-        return direct_to_template(request, 'explorer/nofile.html', \
-            extra_context = { 'fileid': path })
+    return direct_to_template(request, 'explorer/editor.html', extra_context={
+        'fileid': path,
+        'panel_list': ['lewy', 'prawy'],
+        'availble_panels': models.EditorPanel.objects.all(),
+        # 'scriptlets': toolbar_models.Scriptlet.objects.all()
+    })
+#    except KeyError:
+#        return direct_to_template(request, 'explorer/nofile.html', \
+#            extra_context = { 'fileid': path })
 
 # ===============
 # = Panel views =
@@ -422,7 +421,9 @@ class panel_view(object):
         rpath = file_path(path)
         user_branch = file_branch(path, request.user)
         try:
-            return {'html': html.transform(repo.get_file(rpath, user_branch), is_file=False)}
+            result = html.transform(repo.get_file(rpath, user_branch), is_file=False)
+            print "HTML: %r" % result
+            return {'html': result}
         except (ParseError, ValidationError), e:
             return direct_to_template(request, 'explorer/panels/parse_error.html', extra_context={
             'fileid': path, 'exception_type': type(e).__name__, 'exception': e,
@@ -474,11 +475,12 @@ def split_text(request, path):
         print "validating sform"
         if sform.is_valid():
             valid = True
-            if sform.cleaned_data['autoxml']:
-                print "validating dcform"                
-                valid = dcform.is_valid()        
+#            if sform.cleaned_data['autoxml']:
+#                print "validating dcform"
+#                valid = dcform.is_valid()
 
         print "valid is ", valid
+
         if valid:
             uri = path + '$' + sform.cleaned_data['partname']
             child_rpath = file_path(uri)
@@ -494,7 +496,7 @@ def split_text(request, path):
                                         
                 fulltext = sform.cleaned_data['fulltext']               
                 fulltext = fulltext.replace(u'<include-tag-placeholder />',
-                    librarian.xinclude_forURI('wlrepo://'+uri) )               
+                    librarian.xinclude_forURI(u'wlrepo://'+uri) )
 
                 repo._write_file(rpath, fulltext.encode('utf-8'))
 
@@ -502,7 +504,7 @@ def split_text(request, path):
                 if sform.cleaned_data['autoxml']:
                     # this is a horrible hack - really
                     bi = dcparser.BookInfo.from_element(librarian.DEFAULT_BOOKINFO.to_etree())
-                    bi.update(dcform.cleaned_data)
+                    bi.update(dcform.data)
 
                     newtext = librarian.wrap_text(newtext, \
                         unicode(date.today()), bookinfo=bi )
@@ -514,8 +516,10 @@ def split_text(request, path):
 
             if repo.in_branch(split_action, file_branch(path, request.user)):
                 # redirect to success
+                import urllib
+                uri = urllib.quote( unicode(uri).encode('utf-8'))
                 return HttpResponseRedirect( reverse('split-success',\
-                    kwargs={'path': path})+'?child='+uri)
+                    kwargs={'path': path})+'?child='+uri )
     else:
         try: # to read the current DC
             repo = hg.Repository(settings.REPOSITORY_PATH)