def create_moderation_ticket(self): ticket = Ticket() ticket.title = 'Moderate sound %s' % self.original_filename ticket.source = TICKET_SOURCE_NEW_SOUND ticket.status = TICKET_STATUS_NEW ticket.queue = Queue.objects.get(name='sound moderation') ticket.sender = self.user lc = LinkedContent() lc.content_object = self lc.save() ticket.content = lc ticket.save() tc = TicketComment() tc.sender = self.user tc.text = "I've uploaded %s. Please moderate!" % self.original_filename tc.ticket = ticket tc.save()
def describe_sounds(request): sounds_to_process = [] sounds = request.session.get('describe_sounds', False) selected_license = request.session.get('describe_license', False) selected_pack = request.session.get('describe_pack', False) # This is to prevent people browsing to the /home/describe/sounds page # without going through the necessary steps. # selected_pack can be False, but license and sounds have to be picked at least if not (sounds): msg = 'Please pick at least one sound.' messages.add_message(request, messages.WARNING, msg) return HttpResponseRedirect(reverse('accounts-describe')) # So SOUNDS_PER_DESCRIBE_ROUND is available in the template sounds_per_round = SOUNDS_PER_DESCRIBE_ROUND sounds_to_describe = sounds[0:sounds_per_round] forms = [] request.session['describe_sounds_number'] = len(request.session.get('describe_sounds')) # If there are no files in the session redirect to the first describe page if len(sounds_to_describe) <= 0: msg = 'You have finished describing your sounds.' messages.add_message(request, messages.WARNING, msg) return HttpResponseRedirect(reverse('accounts-describe')) if request.method == 'POST': # first get all the data for i in range(len(sounds_to_describe)): prefix = str(i) forms.append({}) forms[i]['sound'] = sounds_to_describe[i] forms[i]['description'] = SoundDescriptionForm(request.POST, prefix=prefix) forms[i]['geotag'] = GeotaggingForm(request.POST, prefix=prefix) forms[i]['pack'] = PackForm(Pack.objects.filter(user=request.user), request.POST, prefix=prefix) forms[i]['license'] = NewLicenseForm(request.POST, prefix=prefix) # validate each form for i in range(len(sounds_to_describe)): for f in ['license', 'geotag', 'pack', 'description']: if not forms[i][f].is_valid(): return render_to_response('accounts/describe_sounds.html', locals(), context_instance=RequestContext(request)) # all valid, then create sounds and moderation tickets dirty_packs = [] for i in range(len(sounds_to_describe)): sound = Sound() sound.user = request.user sound.original_filename = forms[i]['description'].cleaned_data['name'] sound.original_path = forms[i]['sound'].full_path sound.filesize = os.path.getsize(sound.original_path) try: sound.md5 = md5file(forms[i]['sound'].full_path) except IOError: messages.add_message(request, messages.ERROR, 'Something went wrong with accessing the file %s.' % sound.original_path) continue sound.type = get_sound_type(sound.original_path) # check if file exists or not try: existing_sound = Sound.objects.get(md5=sound.md5) msg = 'The file %s is already part of freesound and has been discarded, see <a href="%s">here</a>' % \ (forms[i]['sound'].name, reverse('sound', args=[existing_sound.user.username, existing_sound.id])) messages.add_message(request, messages.WARNING, msg) os.remove(forms[i]['sound'].full_path) continue except Sound.DoesNotExist, e: pass # set the license sound.license = forms[i]['license'].cleaned_data['license'] sound.save() # now move the original orig = os.path.splitext(os.path.basename(sound.original_filename))[0] sound.base_filename_slug = "%d__%s__%s" % (sound.id, slugify(sound.user.username), slugify(orig)) new_original_path = sound.locations("path") if sound.original_path != new_original_path: try: os.makedirs(os.path.dirname(new_original_path)) except OSError: pass try: shutil.move(sound.original_path, new_original_path) #shutil.copy(sound.original_path, new_original_path) except IOError, e: logger.info("failed to move file from %s to %s" % (sound.original_path, new_original_path), e) logger.info("moved original file from %s to %s" % (sound.original_path, new_original_path)) sound.original_path = new_original_path sound.save() # set the pack (optional) pack = forms[i]['pack'].cleaned_data.get('pack', False) new_pack = forms[i]['pack'].cleaned_data.get('new_pack', False) if not pack and new_pack: pack, created = Pack.objects.get_or_create(user=request.user, name=new_pack) if pack: sound.pack = pack dirty_packs.append(sound.pack) # set the geotag (if 'lat' is there, all fields are) data = forms[i]['geotag'].cleaned_data if not data.get('remove_geotag') and data.get('lat'): geotag = GeoTag(user=request.user, lat=data.get('lat'), lon=data.get('lon'), zoom=data.get('zoom')) geotag.save() sound.geotag = geotag # set the tags and descriptions data = forms[i]['description'].cleaned_data sound.description = data.get('description', '') sound.set_tags(data.get('tags')) sound.save() # remember to process the file sounds_to_process.append(sound) if request.user.profile.is_whitelisted: sound.moderation_state = 'OK' sound.save() messages.add_message(request, messages.INFO, 'File <a href="%s">%s</a> has been described and has been added to freesound.' % \ (sound.get_absolute_url(), forms[i]['sound'].name)) else: # create moderation ticket! ticket = Ticket() ticket.title = 'Moderate sound %s' % sound.original_filename ticket.source = TICKET_SOURCE_NEW_SOUND ticket.status = TICKET_STATUS_NEW ticket.queue = Queue.objects.get(name='sound moderation') ticket.sender = request.user lc = LinkedContent() lc.content_object = sound lc.save() ticket.content = lc ticket.save() tc = TicketComment() tc.sender = request.user tc.text = "I've uploaded %s. Please moderate!" % sound.original_filename tc.ticket = ticket tc.save() # add notification that the file was described successfully messages.add_message(request, messages.INFO, 'File <a href="%s">%s</a> has been described and is awaiting moderation.' % \ (sound.get_absolute_url(), forms[i]['sound'].name)) # compute crc # TEMPORARY try: sound.compute_crc() except: pass
#sound.set_tags([t.lower() for t in sound_fields['tags'].split(" ") if t]) # 8.5 set uploaded apiv2 client sound.uploaded_with_apiv2_client = apiv2_client # 9 save! sound.save() # 10 create moderation tickets if needed if user.profile.is_whitelisted: sound.moderation_state = 'OK' sound.save() else: # create moderation ticket! ticket = Ticket() ticket.title = 'Moderate sound %s' % sound.original_filename ticket.source = TICKET_SOURCE_NEW_SOUND ticket.status = TICKET_STATUS_NEW ticket.queue = Queue.objects.get(name='sound moderation') ticket.sender = user lc = LinkedContent() lc.content_object = sound lc.save() ticket.content = lc ticket.save() tc = TicketComment() tc.sender = user tc.text = "I've uploaded %s. Please moderate!" % sound.original_filename tc.ticket = ticket tc.save()
# 8 set description, tags sound.description = sound_fields['description'] sound.set_tags(sound_fields['tags']) #sound.set_tags([t.lower() for t in sound_fields['tags'].split(" ") if t]) # 9 save! sound.save() # 10 create moderation tickets if needed if user.profile.is_whitelisted: sound.moderation_state = 'OK' sound.save() else: # create moderation ticket! ticket = Ticket() ticket.title = 'Moderate sound %s' % sound.original_filename ticket.source = TICKET_SOURCE_NEW_SOUND ticket.status = TICKET_STATUS_NEW ticket.queue = Queue.objects.get(name='sound moderation') ticket.sender = user lc = LinkedContent() lc.content_object = sound lc.save() ticket.content = lc ticket.save() tc = TicketComment() tc.sender = user tc.text = "I've uploaded %s. Please moderate!" % sound.original_filename tc.ticket = ticket tc.save()
# 8 set description, tags sound.description = sound_fields["description"] sound.set_tags([t.lower() for t in sound_fields["tags"].split(" ") if t]) # 9 save! sound.save() # 10 create moderation tickets if needed if user.profile.is_whitelisted: sound.moderation_state = "OK" sound.save() else: # create moderation ticket! ticket = Ticket() ticket.title = "Moderate sound %s" % sound.original_filename ticket.source = TICKET_SOURCE_NEW_SOUND ticket.status = TICKET_STATUS_NEW ticket.queue = Queue.objects.get(name="sound moderation") ticket.sender = user lc = LinkedContent() lc.content_object = sound lc.save() ticket.content = lc ticket.save() tc = TicketComment() tc.sender = user tc.text = "I've uploaded %s. Please moderate!" % sound.original_filename tc.ticket = ticket tc.save()