# HG changeset patch # User grandjoncl # Date 1348477299 -7200 # Node ID e4180c2d11ebee44ce28ab8287c84689bd54f803 # Parent 12ba862f33fa3f31fe600ad43dbcfe2313960ba4 Modifications in order to download the thumbnail picture and put it as default picture when creating youtube, dailymotion or vimeo contents diff -r 12ba862f33fa -r e4180c2d11eb src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html --- 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 }} + + + + + + {% endblock %} {% block content %} + + {% if media_form.errors %}

{% trans "The operation could not be performed because one or more error(s) occurred.
Please resubmit the media form after making the following changes:" %}

@@ -74,6 +83,7 @@
{% trans "Create content" %}
+
{% csrf_token %} diff -r 12ba862f33fa -r e4180c2d11eb src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/picture.html --- 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 @@ + {% for error in profile_picture_form.image.errors %} {{ error }} diff -r 12ba862f33fa -r e4180c2d11eb src/ldt/ldt/ldt_utils/urls.py --- 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.*)$', 'views.project.update_project'), url(r'^cljson/id/(?P.*)$', 'views.json.project_json_id', name="projectjson_id"), url(r'^cljson/externalid/(?P.*)$', 'views.json.project_json_externalid', name="projectjson_externalid"), - url(r'cljson/idcutting/(?P.*)/(?P.*)$', 'views.json.project_json_cutting_id'), + url(r'^cljson/idcutting/(?P.*)/(?P.*)$', 'views.json.project_json_cutting_id'), url(r'^rdf/id/(?P.*)$', 'views.rdf.project_annotations_rdf'), url(r'^workspace/?$', "views.workspace.home", name="root-view"), url(r'^filterprojects/_(?P[\w\%\_\-\+]*?)/(?Ptrue|false)/(?P\d)$', "views.project.projects_filter",), diff -r 12ba862f33fa -r e4180c2d11eb src/ldt/ldt/ldt_utils/views/content.py --- 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 - diff -r 12ba862f33fa -r e4180c2d11eb src/ldt/ldt/static/ldt/css/style.css --- 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 diff -r 12ba862f33fa -r e4180c2d11eb src/ldt/ldt/static/ldt/js/projectscontents.js --- 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('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(''); $('#media_fields_div').height(150); + $('#id_url_image').val(data[0].thumbnail_small); } }); } @@ -732,6 +734,7 @@ } $('#media_field_create').append(''); $('#media_fields_div').height(190); + $('#id_url_image').val(data.thumbnail_medium_url) } }); } diff -r 12ba862f33fa -r e4180c2d11eb src/ldt/ldt/user/forms.py --- 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