Commit Louise :
Récupération du temps titre et thumbnails avec les API pour vimeo, dailymotion et youtube.
Retrait des champs url_extern et id_extern dans le formulaire d'ajout de content
Modification du css pour adapter le nouveau formulaire
Mise à "True" par défaut du champ is_public dans content : more option
--- a/src/ldt/ldt/ldt_utils/forms.py Tue Sep 18 15:16:39 2012 +0900
+++ b/src/ldt/ldt/ldt_utils/forms.py Tue Sep 18 15:26:46 2012 +0200
@@ -52,7 +52,7 @@
content_creation_date = forms.SplitDateTimeField(widget=ldt_widgets.LdtSplitDateTime, required=False, label=_("content.content_creation_date"))
media_input_type = forms.ChoiceField(required=False, label=_("content.media_input_type"), choices=(("upload", _("file_upload")), ("url", _("url")), ("link", _("existing_media")), ("create", _("create_media")), ("none", _("none_media"))))
groups = forms.ModelMultipleChoiceField(Group.objects.all(), required=False)
- is_public = forms.BooleanField(required=False)
+ is_public = forms.BooleanField(required=False, initial=True)
front_project = forms.ModelChoiceField(queryset=Project.objects.none(), required=False, label=_("content.front_project"))
duration = forms.IntegerField(required=True)
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html Tue Sep 18 15:16:39 2012 +0900
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html Tue Sep 18 15:26:46 2012 +0200
@@ -5,9 +5,9 @@
{% block js_import %}
{{ block.super }}
- <script type="text/javascript" src="{{ADMIN_MEDIA_PREFIX}}js/core.js" ></script>
<script type="text/javascript" src="{% url ldt.jsi18n packages='ldt' %}" ></script>
<script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/projectscontents.js"></script>
+ <script type="text/javascript" src="{{ADMIN_MEDIA_PREFIX}}js/core.js" ></script>
<script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery.nyroModal.min.js"></script>
<script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery.textchange.min.js"></script>
<script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery-ui.min.js"></script>
@@ -97,8 +97,6 @@
<div>{{ content_form.videopath.errors }}{{ content_form.videopath.label_tag }}{{content_form.videopath}}</div>
<div>{{ content_form.title.errors }}{{ content_form.title.label_tag }}{{content_form.title}}</div>
<div>{{ content_form.description.errors }}{{ content_form.description.label_tag }}{{content_form.description}}</div>
- <div>{{ media_form.external_id.errors }}{{ media_form.external_id.label_tag }}{{media_form.external_id}}</div>
- <div>{{ media_form.external_publication_url.errors }}{{ media_form.external_publication_url.label_tag }}{{media_form.external_publication_url}}</div>
</div>
<div id="contentright" class="span-9 last" >
<div>{{ content_form.external_id.errors }}{{ content_form.external_id.label_tag }}{{content_form.external_id}}</div>
--- a/src/ldt/ldt/ldt_utils/views/content.py Tue Sep 18 15:16:39 2012 +0900
+++ b/src/ldt/ldt/ldt_utils/views/content.py Tue Sep 18 15:26:46 2012 +0200
@@ -25,9 +25,11 @@
import re
import datetime
import math
+import requests
+import django.utils.simplejson as simplejson
+import urlparse
def write_content_base(request, iri_id=None):
-
if iri_id:
instance_content = Content.safe_objects.get(iri_id=iri_id) #@UndefinedVariable
instance_media = instance_content.media_obj
@@ -42,7 +44,12 @@
form_status = 'none'
if request.method == "POST":
-
+ if request.POST.get('content-duration')!='':
+ logging.debug("petitchienmalade il y a duration")
+ else:
+ logging.debug("petitchienmalade il y a pas de duration")
+
+ logging.debug("on est dans POST")
if instance_content is not None:
content_instance_val = model_to_dict(instance_content, exclude=ContentForm.Meta.exclude)
else:
@@ -61,7 +68,8 @@
add_prefix(content_instance_val, "content")
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
@@ -69,7 +77,7 @@
content_instance_val['read_list'] = request.POST.getlist('read_list')
content_instance_val['write_list'] = request.POST.getlist('write_list')
- content_instance_val['share'] = request.POST.get('share', False)
+ content_instance_val['share'] = request.POST.get('share', True)
content_form = ContentForm(content_instance_val, prefix="content", instance=instance_content)
media_form = MediaForm(media_instance_val, request.FILES, prefix="media", instance=instance_media)
@@ -86,7 +94,7 @@
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
if media_valid and content_valid and picture_valid:
-
+ logging.debug("on est dans media_valid, content_valif, picture_valid")
# see if media must be created
cleaned_data = {}
cleaned_data.update(media_form.cleaned_data)
@@ -195,6 +203,7 @@
if media and not created:
+ logging.debug("creation media")
for attribute in ('external_id', 'external_permalink', 'external_publication_url', 'external_src_url', 'media_creation_date', 'videopath', 'duration', 'description', 'title', 'front_project'):
setattr(media, attribute, cleaned_data.get(attribute))
mimetype = cleaned_data.get('mimetype_field', None)
@@ -233,9 +242,11 @@
if media:
assign_perm_to_obj(media, content_form.cleaned_data['read_list'], content_form.cleaned_data['write_list'], request.user)
if not created:
- for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media_obj'):
+ logging.debug("on cree le media")
+ for attribute in ('iriurl', 'title', 'description', 'content_creation_date', 'duration', 'tags', 'media_obj'):
setattr(content, attribute, content_defaults[attribute])
-
+
+
if request.user.is_staff and content_defaults.has_key('front_project'):
content.front_project = content_defaults['front_project']
@@ -255,7 +266,7 @@
if instance_content:
initial['is_public'] = instance_content.is_public
else:
- initial['is_public'] = False
+ initial['is_public'] = True
content_form = ContentForm(prefix="content", instance=instance_content, initial=initial)
media_form = MediaForm(prefix="media", instance=instance_media)
@@ -271,6 +282,7 @@
@login_required
def write_content(request, iri_id=None):
+ logging.debug("test write_content test")
submit_action = request.REQUEST.get("submit_button", False)
member_list = admin_list = []
current_front_project = None
@@ -292,6 +304,7 @@
picture_form = PictureForm()
else:
content_form, media_form, picture_form, form_status, current_front_project = write_content_base(request, iri_id)
+ logging.debug("fin test dans write_content")
if iri_id:
member_list, admin_list = get_userlist_model(Content.objects.get(iri_id=iri_id), request.user)
@@ -444,3 +457,43 @@
return Tag.objects.cloud_for_model(Content, steps=steps)
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
+ elif 'vimeo' in src_video:
+ duration=data[0]['duration']*1000
+ else:
+ duration=data['duration']*1000
+ return duration
+
+def get_title_json(src_video, data):
+ if 'youtube' in src_video:
+ title=data['data']['title']
+ elif 'vimeo' in src_video:
+ title=data[0]['title']
+ else:
+ title=data['title']
+ return title
+
\ No newline at end of file
--- a/src/ldt/ldt/static/ldt/css/ldtform.css Tue Sep 18 15:16:39 2012 +0900
+++ b/src/ldt/ldt/static/ldt/css/ldtform.css Tue Sep 18 15:26:46 2012 +0200
@@ -24,7 +24,7 @@
}
#add_content textarea {
- height : 125px;
+ height : 220px;
}
#add_content li {
--- a/src/ldt/ldt/static/ldt/js/projectscontents.js Tue Sep 18 15:16:39 2012 +0900
+++ b/src/ldt/ldt/static/ldt/js/projectscontents.js Tue Sep 18 15:26:46 2012 +0200
@@ -736,11 +736,73 @@
results = url.match("[\\?&]v=([^&#]*)");
vid = ( results === null ) ? url : results[1].substring(0,11);
if(vid.length===11){
- //$('#id_content-description').val($('#media_field_create') + '<img src="http://img.youtube.com/vi/'+vid+'/default.jpg" alt="Youtube Thumbnail"/>');
- $('#media_field_create').append('<img id="external_thumbnail" src="http://img.youtube.com/vi/'+vid+'/default.jpg" alt="Youtube Thumbnail"/>');
- $('#media_fields_div').height(150);
+ var jsonp_url = 'https://gdata.youtube.com/feeds/api/videos/'+vid+'?v=2';
+ $.ajax({
+ type: "GET",
+ url: jsonp_url,
+ dataType: "jsonp",
+ cache : false,
+ data : {"alt" : "json-in-script"},
+ jsonpCallback : 'dude',
+ jsonp : 'callback',
+ success: function(data, status, request) {
+ $('#id_content-duration').val(data.entry.media$group.media$content[0].duration*1000);
+ if(($('#id_content-title').val())==""){
+ $('#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);
+ }
+ });
+
}
}
+ else if(url.match("vimeo")){
+ var match = /vimeo.*\/(\d+)/i.exec( url );
+ if (match){
+ vid=match[1];
+ var jsonp_url="http://vimeo.com/api/v2/video/"+vid+".json";
+ $.ajax({
+ type: "GET",
+ url: jsonp_url,
+ dataType: "jsonp",
+ cache : false,
+ jsonpCallback : 'dude',
+ jsonp : 'callback',
+ success: function(data, status, request) {
+ $('#id_content-duration').val(data[0].duration*1000);
+ if(($('#id_content-title').val())==""){
+ $('#id_content-title').val(data[0].title);
+ }
+ $('#media_field_create').append('<img id="external_thumbnail" src="'+data[0].thumbnail_small+'" />');
+ $('#media_fields_div').height(150);
+ }
+ });
+ }
+ }
+ else if(url.match("dailymotion")){
+ id = url.substr(url.search("video/")+6);
+ tableau=id.split("_");
+ vid=tableau[0];
+ jsonp_url= "https://api.dailymotion.com/video/"+vid;
+ $.ajax({
+ type: "GET",
+ data : {"fields" : "id,duration,title,thumbnail_medium_url"},
+ url: jsonp_url,
+ dataType: "jsonp",
+ cache : false,
+ jsonp : 'callback',
+ jsonpCallback : 'dude',
+ success: function(data, status, request) {
+ $('#id_content-duration').val(data.duration*1000);
+ if(($('#id_content-title').val())==""){
+ $('#id_content-title').val(data.title);
+ }
+ $('#media_field_create').append('<img id="external_thumbnail" src="'+data.thumbnail_medium_url+'" />');
+ $('#media_fields_div').height(190);
+ }
+ });
+ }
}
function check_uncheck_all(name) {