From: zuber Date: Tue, 25 Aug 2009 14:44:52 +0000 (+0200) Subject: Dodanie formularza z panelem DublinCore. X-Git-Url: https://git.mdrn.pl/redakcja.git/commitdiff_plain/25880e3bcf289743113655c7ec2fff4fd1587c2f?ds=inline;hp=-c Dodanie formularza z panelem DublinCore. --- 25880e3bcf289743113655c7ec2fff4fd1587c2f diff --git a/apps/explorer/forms.py b/apps/explorer/forms.py index edb7ea6c..e648aa5f 100644 --- a/apps/explorer/forms.py +++ b/apps/explorer/forms.py @@ -1,5 +1,8 @@ from django import forms +from lxml import etree +from librarian import dcparser + from explorer import models @@ -15,3 +18,50 @@ class ImageFoldersForm(forms.Form): super(ImageFoldersForm, self).__init__(*args, **kwargs) self.fields['folders'].choices = [('', '-- Wybierz folder z obrazkami --')] + [(fn, fn) for fn in models.get_image_folders()] + +class DublinCoreForm(forms.Form): + wiki_url = forms.URLField(verify_exists=False) + author = forms.CharField() + title = forms.CharField() + epoch = forms.CharField() + kind = forms.CharField() + genre = forms.CharField() + created_at = forms.DateField() + released_to_public_domain_at = forms.DateField() + translator = forms.CharField(required=False) + technical_editor = forms.CharField(required=False) + publisher = forms.CharField() + source_name = forms.CharField(widget=forms.Textarea) + source_url = forms.URLField(verify_exists=False) + url = forms.URLField(verify_exists=False) + parts = forms.CharField(widget=forms.Textarea, required=False) + license = forms.CharField(required=False) + license_description = forms.CharField(widget=forms.Textarea, required=False) + + def __init__(self, *args, **kwargs): + text = None + if 'text' in kwargs: + text = kwargs.pop('text') + + super(DublinCoreForm, self).__init__(*args, **kwargs) + + 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).data() + 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, unicode(etree.tostring(doc), 'utf-8')) + diff --git a/apps/explorer/views.py b/apps/explorer/views.py index eeac7b65..b8cfe3a5 100644 --- a/apps/explorer/views.py +++ b/apps/explorer/views.py @@ -65,11 +65,30 @@ def htmleditor_panel(request, path): }) +def dceditor_panel(request, path): + if request.method == 'POST': + form = forms.DublinCoreForm(request.POST) + if form.is_valid(): + form.save(repo, path) + repo.commit(message='%s: DublinCore edited' % path) + else: + text = repo.get_file(path).data() + form = forms.DublinCoreForm(text=text) + + return direct_to_template(request, 'explorer/panels/dceditor.html', extra_context={ + 'form': form, + }) + + +# ================= +# = Utility views = +# ================= def folder_images(request, folder): return direct_to_template(request, 'explorer/folder_images.html', extra_context={ 'images': models.get_images_from_folder(folder), }) + def _add_references(message, issues): return message + " - " + ", ".join(map(lambda issue: "Refs #%d" % issue['id'], issues)) diff --git a/project/static/css/master.css b/project/static/css/master.css index caeddda8..68ba1006 100644 --- a/project/static/css/master.css +++ b/project/static/css/master.css @@ -258,6 +258,23 @@ label { cursor: default; } +/* =========================== */ +/* = DublinCore Editor panel = */ +/* =========================== */ +.panel-dceditor { + padding: 10px; +} + +.panel-dceditor label { + font-size: 12px; + margin-top: 10px; + color: #666; + font-weight: bold; +} + +.panel-dceditor input, .panel-dceditor textarea { + width: 400px; +} div.isection { margin: 1em auto; diff --git a/project/templates/explorer/file_xml.html b/project/templates/explorer/file_xml.html index 7f910223..484f54d9 100644 --- a/project/templates/explorer/file_xml.html +++ b/project/templates/explorer/file_xml.html @@ -19,7 +19,8 @@ @@ -33,6 +34,7 @@ + diff --git a/project/templates/explorer/panels/dceditor.html b/project/templates/explorer/panels/dceditor.html new file mode 100644 index 00000000..ee5146cd --- /dev/null +++ b/project/templates/explorer/panels/dceditor.html @@ -0,0 +1,21 @@ +
+
+ {{ form }} +

+
+
+ diff --git a/project/urls.py b/project/urls.py index 1ba97d65..05fe1b4c 100644 --- a/project/urls.py +++ b/project/urls.py @@ -17,6 +17,7 @@ urlpatterns = patterns('', url(r'^editor/(?P[^/]+)/panels/xmleditor/$', 'explorer.views.xmleditor_panel', name='xmleditor_panel'), url(r'^editor/(?P[^/]+)/panels/gallery/$', 'explorer.views.gallery_panel', name='gallery_panel'), url(r'^editor/(?P[^/]+)/panels/htmleditor/$', 'explorer.views.htmleditor_panel', name='htmleditor_panel'), + url(r'^editor/(?P[^/]+)/panels/dceditor/$', 'explorer.views.dceditor_panel', name='dceditor_panel'), # Admin panel url(r'^admin/doc/', include('django.contrib.admindocs.urls')),