def create_reply(self, content, attachments = None): result = None if attachments: #cheap way of dealing with the attachments #just insert them inline, however it might #be useful to keep track of the uploaded files separately #and deal with them as with resources of their own value for att in attachments: file_storage, file_name, file_url = store_file(att) chunk = '[%s](%s) ' % (att.name, file_url) if att.name.endswith('png') or att.name.endswith('jpg'): chunk = '!' + chunk#todo: this is a hack - use content type content += chunk if self.post.post_type == 'answer': result = self.user.post_comment(self.post, content) elif self.post.post_type == 'question': wordcount = len(content)/6#this is a simplistic hack if wordcount > askbot_settings.MIN_WORDS_FOR_ANSWER_BY_EMAIL: result = self.user.post_answer(self.post, content) else: result = self.user.post_comment(self.post, content) elif self.post.post_type == 'comment': result = self.user.post_comment(self.post.parent, content) result.thread.invalidate_cached_data() self.used_at = datetime.now() self.save() return result
def process_attachment(attachment): """will save a single attachment and return link to file in the markdown format and the file storage object """ file_storage, file_name, file_url = store_file(attachment) markdown_link = '[%s](%s) ' % (attachment.name, file_url) file_extension = os.path.splitext(attachment.name)[1] #todo: this is a hack - use content type if file_extension.lower() in ('.png', '.jpg', '.jpeg', '.gif'): markdown_link = '!' + markdown_link return markdown_link, file_storage
def upload(request):#ajax upload file to a question or answer """view that handles file upload via Ajax """ # check upload permission result = '' error = '' new_file_name = '' try: #may raise exceptions.PermissionDenied result, error, file_url, orig_file_name = None, '', None, None if request.user.is_anonymous(): msg = _('Sorry, anonymous users cannot upload files') raise exceptions.PermissionDenied(msg) request.user.assert_can_upload_file() #todo: build proper form validation file_name_prefix = request.POST.get('file_name_prefix', '') if file_name_prefix not in ('', 'group_logo_'): raise exceptions.PermissionDenied('invalid upload file name prefix') #todo: check file type uploaded_file = request.FILES['file-upload']#take first file orig_file_name = uploaded_file.name #todo: extension checking should be replaced with mimetype checking #and this must be part of the form validation file_extension = os.path.splitext(orig_file_name)[1].lower() if False: if not file_extension in settings.ASKBOT_ALLOWED_UPLOAD_FILE_TYPES: file_types = "', '".join(settings.ASKBOT_ALLOWED_UPLOAD_FILE_TYPES) msg = _("allowed file types are '%(file_types)s'") % \ {'file_types': file_types} raise exceptions.PermissionDenied(msg) # generate new file name and storage object file_storage, new_file_name, file_url = store_file( uploaded_file, file_name_prefix ) # check file size # byte size = file_storage.size(new_file_name) if size > settings.ASKBOT_MAX_UPLOAD_FILE_SIZE: file_storage.delete(new_file_name) msg = _("maximum upload file size is %(file_size)sK") % \ {'file_size': settings.ASKBOT_MAX_UPLOAD_FILE_SIZE} raise exceptions.PermissionDenied(msg) except exceptions.PermissionDenied, e: error = unicode(e)
def upload(request): #ajax upload file to a question or answer """view that handles file upload via Ajax """ # check upload permission result = '' error = '' new_file_name = '' try: #may raise exceptions.PermissionDenied result, error, file_url, orig_file_name = None, '', None, None if request.user.is_anonymous(): msg = _('Sorry, anonymous users cannot upload files') raise exceptions.PermissionDenied(msg) request.user.assert_can_upload_file() #todo: build proper form validation file_name_prefix = request.POST.get('file_name_prefix', '') if file_name_prefix not in ('', 'group_logo_'): raise exceptions.PermissionDenied( 'invalid upload file name prefix') #todo: check file type uploaded_file = request.FILES['file-upload'] #take first file orig_file_name = uploaded_file.name #todo: extension checking should be replaced with mimetype checking #and this must be part of the form validation file_extension = os.path.splitext(orig_file_name)[1].lower() if not file_extension in settings.ASKBOT_ALLOWED_UPLOAD_FILE_TYPES: file_types = "', '".join(settings.ASKBOT_ALLOWED_UPLOAD_FILE_TYPES) msg = _("allowed file types are '%(file_types)s'") % \ {'file_types': file_types} raise exceptions.PermissionDenied(msg) # generate new file name and storage object file_storage, new_file_name, file_url = store_file( uploaded_file, file_name_prefix) # check file size # byte size = file_storage.size(new_file_name) if size > settings.ASKBOT_MAX_UPLOAD_FILE_SIZE: file_storage.delete(new_file_name) msg = _("maximum upload file size is %(file_size)sK") % \ {'file_size': settings.ASKBOT_MAX_UPLOAD_FILE_SIZE} raise exceptions.PermissionDenied(msg) except exceptions.PermissionDenied, e: error = unicode(e)
def process_attachments(attachments): """saves file attachments and adds cheap way of dealing with the attachments just insert them inline, however it might be useful to keep track of the uploaded files separately and deal with them as with resources of their own value""" if attachments: content = '' for att in attachments: file_storage, file_name, file_url = store_file(att) chunk = '[%s](%s) ' % (att.name, file_url) file_extension = os.path.splitext(att.name)[1] #todo: this is a hack - use content type if file_extension.lower() in ('.png', '.jpg', '.gif'): chunk = '\n\n!' + chunk content += '\n\n' + chunk return content else: return ''
def upload(request):#ajax upload file to a question or answer """view that handles file upload via Ajax """ # check upload permission result = '' error = '' new_file_name = '' try: #may raise exceptions.PermissionDenied if request.user.is_anonymous(): msg = _('Sorry, anonymous users cannot upload files') raise exceptions.PermissionDenied(msg) request.user.assert_can_upload_file() # check file type f = request.FILES['file-upload'] #todo: extension checking should be replaced with mimetype checking #and this must be part of the form validation file_extension = os.path.splitext(f.name)[1].lower() if not file_extension in settings.ASKBOT_ALLOWED_UPLOAD_FILE_TYPES: file_types = "', '".join(settings.ASKBOT_ALLOWED_UPLOAD_FILE_TYPES) msg = _("allowed file types are '%(file_types)s'") % \ {'file_types': file_types} raise exceptions.PermissionDenied(msg) # generate new file name and storage object file_storage, new_file_name, file_url = store_file(f) # check file size # byte size = file_storage.size(new_file_name) if size > settings.ASKBOT_MAX_UPLOAD_FILE_SIZE: file_storage.delete(new_file_name) msg = _("maximum upload file size is %(file_size)sK") % \ {'file_size': settings.ASKBOT_MAX_UPLOAD_FILE_SIZE} raise exceptions.PermissionDenied(msg) except exceptions.PermissionDenied, e: error = unicode(e)
def upload(request):#ajax upload file to a question or answer """view that handles file upload via Ajax """ # check upload permission result = '' error = '' new_file_name = '' try: #may raise exceptions.PermissionDenied result, error, file_url, orig_file_name = None, '', None, None if request.user.is_anonymous(): msg = _('Sorry, anonymous users cannot upload files') raise exceptions.PermissionDenied(msg) request.user.assert_can_upload_file() #todo: build proper form validation file_name_prefix = request.POST.get('file_name_prefix', '') if file_name_prefix not in ('', 'group_logo_'): raise exceptions.PermissionDenied('invalid upload file name prefix') #todo: check file type uploaded_file = request.FILES['file-upload']#take first file orig_file_name = uploaded_file.name #todo: extension checking should be replaced with mimetype checking #and this must be part of the form validation file_extension = os.path.splitext(orig_file_name)[1].lower() if not file_extension in settings.ASKBOT_ALLOWED_UPLOAD_FILE_TYPES: file_types = "', '".join(settings.ASKBOT_ALLOWED_UPLOAD_FILE_TYPES) msg = _("allowed file types are '%(file_types)s'") % \ {'file_types': file_types} raise exceptions.PermissionDenied(msg) # generate new file name and storage object file_storage, new_file_name, file_url = store_file( uploaded_file, file_name_prefix ) # check file size # byte size = file_storage.size(new_file_name) if size > settings.ASKBOT_MAX_UPLOAD_FILE_SIZE: file_storage.delete(new_file_name) msg = _("maximum upload file size is %(file_size)sK") % \ {'file_size': settings.ASKBOT_MAX_UPLOAD_FILE_SIZE} raise exceptions.PermissionDenied(msg) except exceptions.PermissionDenied as e: error = unicode(e) except Exception as e: logging.critical(unicode(e)) error = _('Error uploading file. Please contact the site administrator. Thank you.') if error == '': result = 'Good' else: result = '' file_url = '' #data = simplejson.dumps({ # 'result': result, # 'error': error, # 'file_url': file_url #}) #return HttpResponse(data, content_type='application/json') xml_template = "<result><msg><![CDATA[%s]]></msg><error><![CDATA[%s]]></error><file_url>%s</file_url><orig_file_name><![CDATA[%s]]></orig_file_name></result>" xml = xml_template % (result, error, file_url, orig_file_name) return HttpResponse(xml, content_type="application/xml")
def upload(request): #ajax upload file to a question or answer """view that handles file upload via Ajax """ # check upload permission result = '' error = '' new_file_name = '' try: #may raise exceptions.PermissionDenied result, error, file_url, orig_file_name = None, '', None, None if request.user.is_anonymous(): msg = _('Sorry, anonymous users cannot upload files') raise exceptions.PermissionDenied(msg) request.user.assert_can_upload_file() #todo: build proper form validation file_name_prefix = request.POST.get('file_name_prefix', '') if file_name_prefix not in ('', 'group_logo_'): raise exceptions.PermissionDenied( 'invalid upload file name prefix') #todo: check file type uploaded_file = request.FILES['file-upload'] #take first file orig_file_name = uploaded_file.name #todo: extension checking should be replaced with mimetype checking #and this must be part of the form validation file_extension = os.path.splitext(orig_file_name)[1].lower() if not file_extension in settings.ASKBOT_ALLOWED_UPLOAD_FILE_TYPES: file_types = "', '".join(settings.ASKBOT_ALLOWED_UPLOAD_FILE_TYPES) msg = _("allowed file types are '%(file_types)s'") % \ {'file_types': file_types} raise exceptions.PermissionDenied(msg) # generate new file name and storage object file_storage, new_file_name, file_url = store_file( uploaded_file, file_name_prefix) # check file size # byte size = file_storage.size(new_file_name) if size > settings.ASKBOT_MAX_UPLOAD_FILE_SIZE: file_storage.delete(new_file_name) msg = _("maximum upload file size is %(file_size)sK") % \ {'file_size': settings.ASKBOT_MAX_UPLOAD_FILE_SIZE} raise exceptions.PermissionDenied(msg) except exceptions.PermissionDenied as e: error = unicode(e) except Exception as e: logging.critical(unicode(e)) error = _( 'Error uploading file. Please contact the site administrator. Thank you.' ) if error == '': result = 'Good' else: result = '' file_url = '' #data = simplejson.dumps({ # 'result': result, # 'error': error, # 'file_url': file_url #}) #return HttpResponse(data, content_type='application/json') xml_template = "<result><msg><![CDATA[%s]]></msg><error><![CDATA[%s]]></error><file_url>%s</file_url><orig_file_name><![CDATA[%s]]></orig_file_name></result>" xml = xml_template % (result, error, file_url, orig_file_name) return HttpResponse(xml, content_type="application/xml")