def render(self, request): """Don't actually render, but calls a process which returns a deferred. Callbacks on the deferred do the rendering, which is actually achieved through redirection. """ #natasha convert # turn form into simple dictionary, dropping multiple values. reqargs = request.args self.assignedstages = reqargs.get('assigned') form = dict([(k, v[0]) for k,v in request.args.iteritems()]) # natasha: added prefix value prefix = '' try: self.mediatype = form.pop('type', None) if not self.mediatype in self.mediatypes: raise UpstageError('Not a real kind of thing: %s' % self.mediatype) self.media_dict = self.mediatypes[self.mediatype] #self.media_dict = self.collections #change to starswith 'avcontents' if self.mediatype == 'avatar': prefix = 'av' # self.media_dict = self.collection.avatars elif self.mediatype == 'prop': prefix = 'pr' elif self.mediatype == 'backdrop': prefix = 'bk' elif self.mediatype == 'audio': #remem audio not included as things prefix = 'au' #imgs = [ (k, v) for k, v in form.iteritems() if k.startswith('contents') and v ] contentname = prefix + 'contents' imgs = [ (k, v) for k, v in form.iteritems() if k.startswith(prefix + 'contents') and v ] imgs.sort() # save input files in /tmp, also save file names tfns = [ save_tempfile(x[1]) for x in imgs ] # Alan (12/09/07) ==> Gets the size of image files using the previously created temp filenames. #natasha getfilesize fileSizes = getFileSizes(tfns) # imported from misc.py swf = new_filename(suffix='.swf') thumbnail = swf.replace('.swf', '.jpg') swf_full = os.path.join(config.MEDIA_DIR, swf) thumbnail_full = os.path.join(config.THUMBNAILS_DIR, thumbnail) except UpstageError, e: return errorpage(request, e, 500)
def render(self, request): """Don't actually render, but calls a process which returns a deferred. Callbacks on the deferred do the rendering, which is actually achieved through redirection. """ # natasha convert # turn form into simple dictionary, dropping multiple values. reqargs = request.args self.assignedstages = reqargs.get('assigned') form = dict([(k, v[0]) for k,v in request.args.iteritems()]) # DEBUG: print form sent by request for key in form.iterkeys(): if 'contents' in key: value = "[ binary data: %s Bytes ]" % len(form[key]) else: value = form[key] if(len(value)>256): value = value[:256] + " ... " # limit length to 256 chars value = "'" + value + "'" log.msg("SwfConversionWrapper render(): form: '%s' = %s" % (key, value)) # FIXME: trim spaces from form values? (#104) # handle kind of images: upload or library: imagetype = form.get('imagetype','unknown') # handle upload imagetype if imagetype == 'upload': log.msg('SwfConversionWrapper: render(): imagetype UPLOAD') # natasha: added prefix value prefix = '' try: self.mediatype = form.pop('type', None) if not self.mediatype in self.mediatypes: raise UpstageError('Not a real kind of thing: %s' % self.mediatype) self.media_dict = self.mediatypes[self.mediatype] #self.media_dict = self.collections # change to starswith 'avcontents' if self.mediatype == 'avatar': prefix = 'av' # self.media_dict = self.collection.avatars elif self.mediatype == 'prop': prefix = 'pr' elif self.mediatype == 'backdrop': prefix = 'bk' elif self.mediatype == 'audio': # remem audio not included as things prefix = 'au' # imgs = [ (k, v) for k, v in form.iteritems() if k.startswith('contents') and v ] contentname = prefix + 'contents' imgs = [ (k, v) for k, v in form.iteritems() if k.startswith(contentname) and v ] imgs.sort() # DEBUG: #log.msg("SwfConversionWrapper: imgs = %s" % imgs); # save input files in /tmp, also save file names tfns = [ save_tempfile(x[1]) for x in imgs ] # Alan (12/09/07) ==> Gets the size of image files using the previously created temp filenames. # natasha getfilesize fileSizes = getFileSizes(tfns) swf = unique_custom_string(suffix='.swf') if form.get('mode', '') == 'replace': oldfile = form.get('oldfile') try: self.media_dict.deleteFile(oldfile) except KeyError: log.msg('the file does not exist. nothing was deleted.') request.write(errorpage(request, 'The file you want to replace does not exist. Accidentally pressed the back button? Tut, tut..', 'mediaedit')) request.finish() thumbnail = swf.replace('.swf', '.jpg') # FIXME: see #20 (Uploaded media is not converted to JPEG) swf_full = os.path.join(config.MEDIA_DIR, swf) thumbnail_full = os.path.join(config.THUMBNAILS_DIR, thumbnail) except UpstageError, e: return errorpage(request, e, 'mediaupload') """ Alan (13/09/07) ==> Check the file sizes of avatar frame """ # natasha continue conversion if not (fileSizes is None): if validSizes(fileSizes, self.player.can_upload_big_file()): # call the process with swf filename and temp image filenames d = getProcessValue(config.IMG2SWF_SCRIPT, args=[swf_full, thumbnail_full] + tfns) args = (swf, thumbnail, form, request) d.addCallbacks(self.success_upload, self.failure_upload, args, {}, args, {}) d.addBoth(self.cleanup_upload, tfns) d.setTimeout(config.MEDIA_TIMEOUT, timeoutFunc=d.errback) d.addErrback(log.err) # Make sure errors get logged - TODO is this working? else: redirect = 'mediaupload' if form.get('mode', '') == 'replace': redirect = 'mediaedit' self.media_dict.restoreOldFile(form.get('oldfile')) ''' Send new avatar page back containing error message ''' self.player.set_setError(True) self.cleanup_upload(None, tfns) request.write(errorpage(request, 'You do not have the permission to upload a file over 1MB in size.', redirect)) # request.redirect('/admin/new/%s' %(self.mediatype)) request.finish()
def render(self, request): #XXX not checking rights. args = request.args # Natasha - get assigned stages self.assignedstages = request.args.get('assigned') name = args.pop('name',[''])[0] audio = args.pop('aucontents0', [''])[0] #was 'audio' before, aucontents0 is the name of the mp3 file field type = args.pop('audio_type', [''])[0] mediatype = args.pop('type',['audio'])[0] self.message = 'Audio file uploaded & registered as %s, called %s. ' % (type, name) #Corey, Heath, Karena 24/08/2011 - Added to store tags for this audiothing self.tags = args.pop('tags',[''])[0] # PQ & EB Added 13.10.07 # Chooses a thumbnail image depending on type (adds to audios.xml file) if type == 'sfx': thumbnail = config.SFX_ICON_IMAGE_URL else: thumbnail = config.MUSIC_ICON_IMAGE_URL self.media_dict = self.mediatypes[mediatype] mp3name = new_filename(suffix=".mp3") the_url = config.AUDIO_DIR +"/"+ mp3name file = open(the_url, 'wb') file.write(audio) file.close() filenames = [the_url] # Alan (09/05/08) ==> Gets the size of audio files using the previously created temp filenames. fileSizes = getFileSizes(filenames) if not (fileSizes is None): if (validSizes(fileSizes, self.player.can_su()) or self.player.can_unlimited()): now = datetime.datetime.now() # AC () - Unformated datetime value self.media_dict.add(url='%s/%s' % (config.AUDIO_SUBURL, mp3name), #XXX dodgy? (windows safe?) file=mp3name, name=name, voice="", thumbnail=thumbnail, # PQ: 13.10.07 was "" medium="%s" %(type), # AC (14.08.08) - Passed values to be added to media XML files. uploader=self.player.name, dateTime=(now.strftime("%d/%m/%y @ %I:%M %p")), tags=self.tags)#Corey, Heath, Karena 24/08/2011 - Added for media tagging set the tags to self.tags if self.assignedstages is not None: for x in self.assignedstages: self.media_dict.set_media_stage(x, mp3name) request.write(successpage(request, 'Your Media "' + name + '" has uploaded successfully')) request.finish() else: try: ''' Send new audio page back containing error message ''' """ self.player.set_setError(True) os.remove(the_url) request.redirect('/admin/new/%s' %(mediatype)) request.finish() """ AdminError.errorMsg = 'File over 1MB' #Change error message to file exceed - Gavin request.write(errorpage(request, 'Media uploads are limited to files of 1MB or less, to help ensure that unnecessarily large files do not cause long loading times for your stage. Please make your file smaller or, if you really need to upload a larger file, contact the administrator of this server to ask for permission.')) request.finish() except OSError, e: log.err("Error removing temp file %s (already gone?):\n %s" % (tfn, e))
def render(self, request): #XXX not checking rights. args = request.args # FIXME see SwfConversionWrapper: prepare form data # FIXME: trim spaces from form values? (#104) # Natasha - get assigned stages self.assignedstages = request.args.get('assigned') name = args.pop('name',[''])[0] audio = args.pop('aucontents0', [''])[0] #was 'audio' before, aucontents0 is the name of the mp3 file field type = args.pop('audio_type', [''])[0] mediatype = args.pop('type',['audio'])[0] self.message = 'Audio file uploaded & registered as %s, called %s. ' % (type, name) #Corey, Heath, Karena 24/08/2011 - Added to store tags for this audiothing self.tags = args.pop('tags',[''])[0] # PQ & EB Added 13.10.07 # Chooses a thumbnail image depending on type (adds to audios.xml file) if type == 'sfx': thumbnail = config.SFX_ICON_IMAGE_URL else: thumbnail = config.MUSIC_ICON_IMAGE_URL self.media_dict = self.mediatypes[mediatype] mp3name = unique_custom_string(suffix=".mp3") mode = args.pop('mode', [''])[0] oldfile = args.pop('oldfile', [''])[0] if mode == 'replace': key = args.pop('key')[0] try: self.media_dict.deleteFile(oldfile) except KeyError: log.msg('the file does not exist. nothing was deleted.') request.write(errorpage(request, 'The file you want to replace does not exist. Accidentally pressed the back button? Tut, tut..', 'mediaedit')) request.finish() the_url = config.AUDIO_DIR +"/"+ mp3name file = open(the_url, 'wb') file.write(audio) file.close() filenames = [the_url] # Alan (09/05/08) ==> Gets the size of audio files using the previously created temp filenames. fileSizes = getFileSizes(filenames) from mad import MadFile duration = MadFile(the_url).total_time() if not (fileSizes is None and duration > 0): if validSizes(fileSizes, self.player.can_upload_big_file()): now = datetime.datetime.now() # AC () - Unformated datetime value duration = str(duration/float(1000)) success_message = '' if mode == 'replace': media = self.media_dict[key] media.setUrl(mp3name) setattr(media, 'file', mp3name) setattr(media, 'width', duration) # Ing - width attribute is already there setattr(media, 'uploader', self.player.name) setattr(media, 'dateTime', now.strftime("%d/%m/%y @ %I:%M %p")) self.media_dict.save() success_message = 'Your Media "' + name + '" has been replaced successfully! ' # refresh assigned stages stages = args.pop('stages', [''])[0] if stages: success_message += 'The following stage(s) has been reloaded:<strong> ' + stages +'</strong>.<br />' reloadStagesInList(self.stages, stages.split(', '), media.url) success_message += 'Redirecting back to <a href="admin/workshop/mediaedit">Media Management...</a>' redirectTo = 'mediaedit' else: key = unique_custom_string(prefix='audio_', suffix='') while self.name_is_used(name): name += random.choice('1234567890') # upload new assets self.media_dict.add(url='%s/%s' % (config.AUDIO_SUBURL, mp3name), #XXX dodgy? (windows safe?) file=mp3name, name=name, voice="", thumbnail=thumbnail, # PQ: 13.10.07 was "" medium="%s" %(type), # AC (14.08.08) - Passed values to be added to media XML files. uploader=self.player.name, dateTime=(now.strftime("%d/%m/%y @ %I:%M %p")), tags=self.tags, #Corey, Heath, Karena 24/08/2011 - Added for media tagging set the tags to self.tags key=key, width=duration) # Ing - width attribute is already there, width-length-length-width, kinda similar ;p if self.assignedstages is not None: for x in self.assignedstages: self.media_dict.set_media_stage(x, key) redirectTo = 'mediaupload' success_message = 'Your Media "' + name + '" has uploaded successfully' request.write(successpage(request, success_message, redirect=redirectTo)) request.finish() else: try: ''' Send new audio page back containing error message ''' """ self.player.set_setError(True) os.remove(the_url) request.redirect('/admin/new/%s' %(mediatype)) request.finish() """ errMsg = 'File over 1MB' #Change error message to file exceed - Gavin if mode == 'replace': errMsg += ' Your media was not replaced.' # restore old file self.media_dict.restoreOldFile(oldfile) AdminError.errorMsg = errMsg request.write(errorpage(request, 'Media uploads are limited to files of 1MB or less, \ to help ensure that unnecessarily large files do not cause long loading times for your stage. \ Please make your file smaller or, if you really need to upload a larger file, \ contact the administrator of this server to ask for permission.', 'mediaupload')) request.finish() except OSError, e: log.err("Error removing temp file %s (already gone?):\n %s" % (tfn, e))