From: Ɓukasz Rekucki Date: Mon, 31 Aug 2009 15:31:24 +0000 (+0200) Subject: Merge branch 'master' of git@stigma:platforma X-Git-Url: https://git.mdrn.pl/redakcja.git/commitdiff_plain/92e5a00682baeaa5a8c293351d270acee6e72a69?hp=20bd2492d8bd211816c5120595b19a0a828b9f0c Merge branch 'master' of git@stigma:platforma --- 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/models.py b/apps/explorer/models.py index 10491f6a..9a5e0ffa 100644 --- a/apps/explorer/models.py +++ b/apps/explorer/models.py @@ -5,7 +5,6 @@ from django.contrib.auth.models import User from django.conf import settings from django.utils.translation import gettext_lazy as _ - class PanelSettings(models.Model): user = models.ForeignKey(User) left_panel = models.CharField(blank=True, max_length=80) @@ -18,6 +17,12 @@ class PanelSettings(models.Model): def __unicode__(self): return u"Panel settings for %s" % self.user.name +class Book(models.Model): + class Meta: + permissions = ( + ("can_add_files", "Can do hg add."), + ) + pass class PullRequest(models.Model): comitter = models.ForeignKey(User) # the user who request the pull 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/apps/toolbar/admin.py b/apps/toolbar/admin.py index 2c8cd28c..a03f3936 100644 --- a/apps/toolbar/admin.py +++ b/apps/toolbar/admin.py @@ -1,25 +1,8 @@ from django.contrib import admin from django.utils.translation import ugettext_lazy as _ -from toolbar import models +from explorer import models - -class ButtonGroupAdmin(admin.ModelAdmin): - list_display = ('name', 'slug', 'position',) - search_fields = ('name', 'slug',) - prepopulated_fields = {'slug': ('name',)} - list_editable = ('position',) - -admin.site.register(models.ButtonGroup, ButtonGroupAdmin) - - -class ButtonAdmin(admin.ModelAdmin): - list_display = ('label', 'slug', 'tag', 'key', 'position',) - list_filter = ('group',) - search_fields = ('label', 'slug', 'tag', 'key',) - prepopulated_fields = {'slug': ('label',)} - filter_horizontal = ('group',) - list_editable = ('position',) - -admin.site.register(models.Button, ButtonAdmin) +admin.site.register(models.Book) +admin.site.register(models.PullRequest) 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;