diff -r 000000000000 -r 40c8f766c9b8 src/cm/views/create.py --- /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