--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cm/views/create.py Mon Nov 23 15:14:29 2009 +0100
@@ -0,0 +1,144 @@
+from cm.cm_settings import VALID_EMAIL_FOR_PUBLISH, SITE_NAME
+from cm.converters import convert_from_mimetype
+from cm.converters.pandoc_converters import pandoc_convert
+from cm.models import Text, TextVersion, Attachment
+from cm.utils.files import remove_extension
+from cm.utils.mail import EmailMessage
+from cm.views import get_text_by_keys_or_404
+from django import forms
+from cm.message import display_message
+from django.conf import settings
+from django.core.urlresolvers import reverse
+from django.forms import ModelForm
+from django.forms.util import ErrorList
+from django.http import HttpResponse, HttpResponseRedirect
+from django.shortcuts import render_to_response
+from django.template import RequestContext
+from django.template.loader import render_to_string
+from django.utils.translation import ugettext as _, ugettext_lazy
+from mimetypes import guess_type
+from cm.activity import register_activity
+from cm.security import has_global_perm
+import os
+
+class CreateTextUploadForm(ModelForm):
+ file = forms.FileField(required=False,
+ label=ugettext_lazy("Upload file (optional)"),
+ help_text=ugettext_lazy("Upload a file from your computer instead of using the direct input above"),)
+
+ title = forms.CharField(required=False,
+ label=ugettext_lazy("Title"))
+ class Meta:
+ model = TextVersion
+ fields = ('title', 'format', 'tags') #, 'note'
+
+ def clean(self):
+ cleaned_data = self.cleaned_data
+ if not cleaned_data.get('file', None) :
+ msg = _("You should specify a file to upload.")
+ self._errors["file"] = ErrorList([msg])
+
+ return cleaned_data
+
+class CreateTextContentForm(ModelForm):
+ title = forms.CharField(required=True,
+ label=ugettext_lazy("Title"),
+ help_text=ugettext_lazy("The title of your text"),
+ widget=forms.TextInput)
+
+ class Meta:
+ model = TextVersion
+ fields = ('title', 'format', 'content','tags') #, 'note'
+
+@has_global_perm('can_create_text')
+def text_create_content(request):
+ return _text_create_content(request, CreateTextContentForm)
+
+def redirect_post_create(text) :
+ return HttpResponseRedirect(reverse('text-view', args=[text.key]))
+
+def _text_create_content(request, createForm):
+# CreateForm = CreateTextContentForm
+ document = ""
+
+ if request.method == 'POST':
+ form = createForm(request.POST)
+ if form.is_valid():
+ text = create_text(request.user, form.cleaned_data)
+
+ register_activity(request, "text_created", text)
+
+ display_message(request, _(u'Text "%(text_title)s" has been created' %{"text_title":text.get_latest_version().title}))
+ return redirect_post_create(text)
+ else:
+ form = createForm()
+
+ return render_to_response('site/text_create_content.html', {'document':document, 'form' : form}, context_instance=RequestContext(request))
+
+def _text_create_upload(request, createForm):
+
+# CreateForm = CreateTextUploadForm if request.user.is_authenticated() else CreateTextUploadFormAnon
+
+ if request.method == 'POST':
+ form = createForm(request.POST, request.FILES)
+ if form.is_valid():
+ # should convert?
+ if form.cleaned_data['file']:
+ try:
+ uploaded_file = form.cleaned_data['file']
+ content, attachs = convert_from_mimetype(uploaded_file.temporary_file_path(),
+ uploaded_file.content_type,
+ format=form.cleaned_data['format'],
+ )
+ form.cleaned_data['content'] = content
+ form.cleaned_data['attachs'] = attachs
+
+ # set title if not present
+ if not form.cleaned_data.get('title', None):
+ form.cleaned_data['title'] = remove_extension(uploaded_file.name)
+
+ del form.cleaned_data['file']
+ except:
+ raise
+
+ text = create_text(request.user, form.cleaned_data)
+
+ register_activity(request, "text_created", text)
+
+ display_message(request, _(u'Text "%(text_title)s" has been created' %{"text_title":text.get_latest_version().title}))
+ return redirect_post_create(text)
+
+ else:
+ form = createForm()
+
+ return render_to_response('site/text_create_upload.html', {'form' : form}, context_instance=RequestContext(request))
+
+@has_global_perm('can_create_text')
+def text_create_upload(request):
+ return _text_create_upload(request, CreateTextUploadForm)
+
+def create_text(user, data):
+ text_content = data['content']
+ text = Text.objects.create_text(title=data['title'],
+ format=data['format'],
+ content=text_content,
+ note=data.get('note', None),
+ name=data.get('name', None),
+ email=data.get('email', None),
+ tags=data.get('tags', None),
+ user=user
+ )
+ text.update_denorm_fields()
+ text_version = text.get_latest_version()
+
+ for attach_file in data.get('attachs', []):
+ attach_data = file(attach_file, 'rb').read()
+ filename = os.path.basename(attach_file)
+ attachment = Attachment.objects.create_attachment(filename=filename, data=attach_data, text_version=text_version)
+ attach_url = reverse('text-attach', args=[text.key, attachment.key])
+ text_content = text_content.replace(filename, attach_url)
+
+ # save updated (attach links) text content
+ text_version.content = text_content
+ text_version.save()
+ return text
\ No newline at end of file