Modifications in order to download the thumbnail picture and put it as default picture when creating youtube, dailymotion or vimeo contents
authorgrandjoncl
Mon, 24 Sep 2012 11:01:39 +0200
changeset 792 e4180c2d11eb
parent 791 12ba862f33fa
child 793 87598228cfbb
Modifications in order to download the thumbnail picture and put it as default picture when creating youtube, dailymotion or vimeo contents
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/picture.html
src/ldt/ldt/ldt_utils/urls.py
src/ldt/ldt/ldt_utils/views/content.py
src/ldt/ldt/static/ldt/css/style.css
src/ldt/ldt/static/ldt/js/projectscontents.js
src/ldt/ldt/user/forms.py
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html	Thu Sep 20 12:43:02 2012 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html	Mon Sep 24 11:01:39 2012 +0200
@@ -37,6 +37,7 @@
 							"{% url ldt.ldt_utils.views.content.get_duration %}");
 		
 	});
+	// the function stopRKey prevents from the validation of the form if the user tape enter button while entering a field 
 	function stopRKey(evt) {
 		  var evt = (evt) ? evt : ((event) ? event : null);
 		  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
@@ -51,11 +52,19 @@
 
 {% block css_import %}
 	{{ block.super }}
-	{#{ content_form.media.css }#}
+	{{ content_form.media.css }}
 	<link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/ldtform.css" />
+	<link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/style.css" />
+	<link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/blueprint/screen.css" type="text/css" media="screen, projection" />
+	<link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/blueprint/print.css" type="text/css" media="print" />
+	<link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}/css/workspace.css" type="text/css"/>
+	
+	
 {% endblock %}
 
 {% block content %}
+
+	
 	{% if media_form.errors %}
 	<div id="media-form-error">
 		<p>{% trans "The operation could not be performed because one or more error(s) occurred.<br />Please resubmit the media form after making the following changes:" %}</p>
@@ -74,6 +83,7 @@
 	<div id="add_content" class="span-18 last">
 	<div class="projectscontentstitle">{% trans "Create content" %}</div>
 	<form action="{{create_content_action}}" enctype="multipart/form-data" id="my_form" method="POST" enctype="multipart/form-data" >
+	
 	<div id="contentformhidden">
 		{% csrf_token %}
 		<input type="hidden" name="form_status" value="{{form_status}}" id="content_form_status" />
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/picture.html	Thu Sep 20 12:43:02 2012 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/picture.html	Mon Sep 24 11:01:39 2012 +0200
@@ -33,6 +33,7 @@
         </td>
         <td>
             <input type="file" name="image" id="id_image" accept="image/jpeg, image/png" />
+             <input type="hidden" name="url_image" id="id_url_image" />
             {% for error in profile_picture_form.image.errors %}
             <span class="error">
                 {{ error }}                 
--- a/src/ldt/ldt/ldt_utils/urls.py	Thu Sep 20 12:43:02 2012 +0200
+++ b/src/ldt/ldt/ldt_utils/urls.py	Mon Sep 24 11:01:39 2012 +0200
@@ -25,7 +25,7 @@
     url(r'^update/(?P<ldt_id>.*)$', 'views.project.update_project'),
     url(r'^cljson/id/(?P<id>.*)$', 'views.json.project_json_id', name="projectjson_id"),
     url(r'^cljson/externalid/(?P<id>.*)$', 'views.json.project_json_externalid', name="projectjson_externalid"),
-    url(r'cljson/idcutting/(?P<id>.*)/(?P<cutting_id>.*)$', 'views.json.project_json_cutting_id'),
+    url(r'^cljson/idcutting/(?P<id>.*)/(?P<cutting_id>.*)$', 'views.json.project_json_cutting_id'),
     url(r'^rdf/id/(?P<ldt_id>.*)$', 'views.rdf.project_annotations_rdf'),
     url(r'^workspace/?$', "views.workspace.home", name="root-view"),
     url(r'^filterprojects/_(?P<filter>[\w\%\_\-\+]*?)/(?P<is_owner>true|false)/(?P<status>\d)$', "views.project.projects_filter",),
--- a/src/ldt/ldt/ldt_utils/views/content.py	Thu Sep 20 12:43:02 2012 +0200
+++ b/src/ldt/ldt/ldt_utils/views/content.py	Mon Sep 24 11:01:39 2012 +0200
@@ -3,6 +3,8 @@
 from django.contrib.auth.models import Group
 from django.core.urlresolvers import reverse
 from django.forms.models import model_to_dict
+from django.core.files import File
+#from django.core.files.temp import NamedTemporaryFile
 from django.forms.util import ErrorList
 from django.http import HttpResponse
 from django.shortcuts import render_to_response, redirect
@@ -18,7 +20,7 @@
 import ldt.utils.path as ldt_utils_path
 import logging
 import mimetypes
-import os
+import os, stat
 import urllib2
 import subprocess
 import re
@@ -26,8 +28,9 @@
 import math
 import requests
 import django.utils.simplejson as simplejson
-import urlparse   
-    
+import urlparse  
+import tempfile 
+
 def write_content_base(request, iri_id=None): 
     if iri_id:        
         instance_content = Content.safe_objects.get(iri_id=iri_id) #@UndefinedVariable
@@ -60,7 +63,7 @@
         
         content_instance_val = add_prefix(content_instance_val, "content")
         media_instance_val= add_prefix(media_instance_val, "media")    
-        src_video=request.POST.get('media-src')
+                
         for k in request.POST.keys():
             value = request.POST.get(k)
             content_instance_val[k] = value
@@ -73,8 +76,9 @@
         
         content_form = ContentForm(content_instance_val, prefix="content", instance=instance_content)
         media_form = MediaForm(media_instance_val, request.FILES, prefix="media", instance=instance_media)
+        logging.debug("loulou : POST : "+str(request.POST)+" FILES : "+str(request.FILES))
         picture_form = PictureForm(None, request.POST, request.FILES)
-        
+        logging.debug(str(picture_form.fields['image'])+" poissonrouge")
         
         if request.user.is_staff:
             content_form.fields['front_project'].queryset = Project.objects.filter(contents__in=[instance_content])
@@ -83,8 +87,15 @@
         media_valid = media_form.is_valid()
         content_valid = content_form.is_valid()
         picture_valid = picture_form.is_valid()
-        
-        logging.debug("write_content_base : valid form: for instance : " + repr(instance_media) + " -> media " + str(media_valid) + " content : for instance : " + repr(instance_content) + " : " + str(content_valid)) #@UndefinedVariable
+        lien_image=request.POST.get('url_image')
+        if picture_valid and lien_image!='':
+            r=requests.get(lien_image)
+            img_temp=tempfile.NamedTemporaryFile(suffix='.png')
+            if img_temp:
+                img_temp.write(r.content)
+                img_temp.flush()
+                picture_form.cleaned_data["image"]=File(img_temp) 
+        logging.debug("write_content_base : valid form: for instance : " + repr(instance_media) + " -> media " + str(media_valid) + " content : for instance : " + repr(instance_content) + " : " + str(content_valid) + "picture : valid :" +str(picture_valid)+" loulou") #@UndefinedVariable
         
         if media_valid and content_valid and picture_valid:
 
@@ -271,7 +282,6 @@
 
 @login_required
 def write_content(request, iri_id=None):  
-    case=0  
     submit_action = request.REQUEST.get("submit_button", False) 
     member_list = admin_list = []
     current_front_project = None
@@ -296,7 +306,6 @@
     else:
         content_form, media_form, picture_form, form_status, current_front_project = write_content_base(request, iri_id)
         if iri_id:
-            case=2
             member_list, admin_list = get_userlist_model(Content.objects.get(iri_id=iri_id), request.user)
             
     if iri_id:
@@ -306,7 +315,6 @@
     else:        
         create_content_action = reverse('ldt.ldt_utils.views.content.write_content')
         img_container = ''
-        case=1
     
     session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]
     cookie_name = settings.SESSION_COOKIE_NAME
@@ -456,27 +464,6 @@
     else :
         return Tag.objects.cloud_for_model(Content, steps=steps)[:limit]
         
-def get_json(src_video):
-    if 'youtube' in src_video:
-        url_data=urlparse.urlparse(src_video)
-        query=urlparse.parse_qs(url_data.query)
-        video_id=query['v'][0]
-        lien='http://gdata.youtube.com/feeds/api/videos/'+video_id+'?v=2&alt=jsonc'
-    elif 'vimeo' in src_video:
-        url_data=urlparse.urlparse(src_video)
-        url_path=url_data.path
-        video_id=(url_path.split('/'))[1]
-        lien='http://vimeo.com/api/v2/video/'+video_id+'.json'
-    elif 'dailymotion' in src_video:
-        url_data=urlparse.urlparse(src_video)
-        video_path=url_data.path
-        split_path=(video_path.split('/'))[2]
-        video_id=(split_path.split('_'))[0]
-        lien='https://api.dailymotion.com/video/'+video_id+'?fields=id,duration,title'
-    resp=requests.get(lien)
-    data=simplejson.loads(resp.content)
-    return data
-
 def get_duration_json(src_video, data):
     if 'youtube' in src_video:
         duration=data['data']['duration']*1000
@@ -495,11 +482,33 @@
         title=data['title']
     return title
 
+
+def get_json(src_video):
+    if 'youtube' in src_video:
+        url_data=urlparse.urlparse(src_video)
+        query=urlparse.parse_qs(url_data.query)
+        video_id=query['v'][0]
+        lien='http://gdata.youtube.com/feeds/api/videos/'+video_id+'?v=2&alt=jsonc'
+    elif 'vimeo' in src_video:
+        url_data=urlparse.urlparse(src_video)
+        url_path=url_data.path
+        video_id=(url_path.split('/'))[1]
+        lien='http://vimeo.com/api/v2/video/'+video_id+'.json'
+    elif 'dailymotion' in src_video:
+        url_data=urlparse.urlparse(src_video)
+        video_path=url_data.path
+        split_path=(video_path.split('/'))[2]
+        video_id=(split_path.split('_'))[0]
+        lien='https://api.dailymotion.com/video/'+video_id+'?fields=id,duration,title,thumbnail_medium_url'
+    resp=requests.get(lien)
+    data=simplejson.loads(resp.content)
+    return data
+    
 def get_image_json(src_video, data):
     if 'youtube' in src_video:
         lien=data['data']['thumbnail']['sqDefault']
         filename=""+data['data']['id']+".jpg"
-        download_path=settings.MEDIA_ROOT+"thumbnails/contents/"
+        download_path=settings.MEDIA_ROOT+"thumbnails\contents"
         file_path = "%s\%s" % (download_path, filename)
         video_thumbnail = file(file_path, "wb")
         image_web=urllib2.urlopen(lien)
@@ -510,6 +519,8 @@
             video_thumbnail.write(buf)
         video_thumbnail.close()
         image_web.close()
+        fileAtt=os.stat(file_path)[0]
+        if (not fileAtt & stat.S_IWRITE):
+            os.chmod(file_path, stat.S_IWRITE)
     return file_path
         
-
--- a/src/ldt/ldt/static/ldt/css/style.css	Thu Sep 20 12:43:02 2012 +0200
+++ b/src/ldt/ldt/static/ldt/css/style.css	Mon Sep 24 11:01:39 2012 +0200
@@ -50,6 +50,7 @@
     padding: 0px;
     padding-left: 1em;
     height: 55px;
+    background: #FFF;
 }
 
 #header a
--- a/src/ldt/ldt/static/ldt/js/projectscontents.js	Thu Sep 20 12:43:02 2012 +0200
+++ b/src/ldt/ldt/static/ldt/js/projectscontents.js	Mon Sep 24 11:01:39 2012 +0200
@@ -684,7 +684,8 @@
                          $('#id_content-title').val(data.entry.title.$t);
                     }
                     $('#media_field_create').append('<img id="external_thumbnail" src="'+data.entry.media$group.media$thumbnail[0].url+'" alt="Youtube Thumbnail"/>');
-                    $('#media_fields_div').height(150);                   
+                    $('#media_fields_div').height(150);  
+                    $('#id_url_image').val(data.entry.media$group.media$thumbnail[0].url)
                 }
             });
         }
@@ -708,6 +709,7 @@
                     }
                     $('#media_field_create').append('<img id="external_thumbnail" src="'+data[0].thumbnail_small+'" />');
                     $('#media_fields_div').height(150);
+                    $('#id_url_image').val(data[0].thumbnail_small);
                 }
             });
         }
@@ -732,6 +734,7 @@
                 }
                 $('#media_field_create').append('<img id="external_thumbnail" src="'+data.thumbnail_medium_url+'" />');
                 $('#media_fields_div').height(190);
+                $('#id_url_image').val(data.thumbnail_medium_url)
             }
         });
     }
--- a/src/ldt/ldt/user/forms.py	Thu Sep 20 12:43:02 2012 +0200
+++ b/src/ldt/ldt/user/forms.py	Mon Sep 24 11:01:39 2012 +0200
@@ -120,7 +120,8 @@
         
            
 class PictureForm(forms.Form):
-    image = forms.ImageField(label=_("Profile picture"), required=False)
+    image=forms.ImageField(label=_("Profile picture"), required=False)
+    url_image=forms.CharField(max_length=1024, required=False)
     
     def __init__(self, model=None, *args, **kwargs):
         self.model = model