]> git.0d.be Git - django-panik-emissions.git/commitdiff
use jquery file upload to add elements to playlist
authorFrédéric Péters <fpeters@0d.be>
Sun, 15 May 2016 17:17:09 +0000 (19:17 +0200)
committerFrédéric Péters <fpeters@0d.be>
Sun, 15 May 2016 17:17:09 +0000 (19:17 +0200)
emissions/forms.py
emissions/templates/emissions/episode_regie.html
emissions/views.py

index 1e276775cc52deee5f244be96a6526c925d37791..e281baabd1dbb57a0dc3b63ff123a34e395bc499 100644 (file)
@@ -17,7 +17,8 @@ from django.template.loader import render_to_string
 from taggit.forms import TagWidget
 import datetimewidget.widgets
 
-from .models import Emission, Episode, Diffusion, Schedule, SoundFile, NewsItem, Absence
+from .models import (Emission, Episode, Diffusion, Schedule, SoundFile,
+        NewsItem, Absence, PlaylistElement)
 
 
 DATETIME_OPTIONS = {
@@ -359,3 +360,13 @@ class AbsenceForm(forms.ModelForm):
             rerun_absence.datetime = rerun_date
             rerun_absence.save()
         return t
+
+
+class PlaylistElementForm(forms.ModelForm):
+    class Meta:
+        model = PlaylistElement
+        exclude = ('title', 'notes', 'order')
+        widgets = {
+                'episode': forms.HiddenInput(),
+                'sound': JqueryFileUploadInput(),
+        }
index 3f8540275df2c812d47ac34832f09379a0618510..d27430cc88f54f4c875d09548d906fc1c820aca5 100644 (file)
 <h3>Ajouter à la playlist</h3>
 <form id="add-playlist-elements-form" method="POST" action="." enctype="multipart/form-data">
 {% csrf_token %}
-<input type="file" name="playlist-element" multiple>
+{{upload_file_form}}
 </form>
 {% endif %}
 
 {% endblock %}
 
 {% block page-end %}
+<style>
+#add-playlist-elements-form > label { display: none; }
+</style>
 <script>
 $(function() {
   function update_start_end() {
@@ -64,10 +67,10 @@ $(function() {
     return false;
   });
 
-  $('#add-playlist-elements-form input[type=file]').on('change', function() {
-    $('body').addClass('submitting');
-    $(this).parent().submit();
+  $('#add-playlist-elements-form').on('panik:file-upload-complete', function() {
+   $(this).submit();
   });
+
   $('#playlist tbody').sortable({
     handle: '.handle',
     update: function(event, ui) {
index 03dce4f5a9dc6e13a6064f9f8228885e77e1c7cd..5f4fa9990893c6a22adbefcedb59529675f1787a 100644 (file)
@@ -26,7 +26,7 @@ from .models import Emission, Episode, Diffusion, Category, Schedule, \
                     PlaylistElement
 from .forms import EmissionForm, EpisodeForm, EpisodeNewForm, ScheduleForm, \
                    DiffusionForm, SoundFileForm, NewsItemForm, \
-                   SoundFileEditForm, AbsenceForm
+                   SoundFileEditForm, AbsenceForm, PlaylistElementForm
 
 
 __all__ = ['EmissionListView', 'EmissionDetailView', 'EmissionCreateView',
@@ -575,17 +575,18 @@ class EpisodeRegieView(DetailView):
 
     def post(self, request, *args, **kwargs):
         episode = self.get_object()
+        form = PlaylistElementForm(request.POST, request.FILES)
+        if not form.is_valid():
+            messages.error(request, _('Error adding file'))
+            return HttpResponseRedirect('.')
         i = PlaylistElement.objects.filter(episode=episode).count()
-        for upload in request.FILES.getlist('playlist-element'):
-            playlist_element = PlaylistElement(
-                    episode=episode,
-                    title=upload.name,
-                    sound=upload,
-                    order=i+1)
-            playlist_element.save()
-            i += 1
-        messages.info(request, _('%d files uploaded successfully.') %
-                len(request.FILES.getlist('playlist-element')))
+        playlist_element = PlaylistElement(
+                episode=episode,
+                title=os.path.basename(form.cleaned_data['sound'].name),
+                sound=form.cleaned_data['sound'],
+                order=i+1)
+        playlist_element.save()
+        messages.info(request, _('File uploaded successfully.'))
         return HttpResponseRedirect('.')
 
     def get_context_data(self, **kwargs):
@@ -604,6 +605,9 @@ class EpisodeRegieView(DetailView):
             context['can_manage'] = self.request.user.can_manage(self.object)
         except AttributeError:
             pass
+
+        context['upload_file_form'] = PlaylistElementForm(initial={'episode': self.object})
+
         return context
 
 class EpisodeRegieUpdateOrderView(View):