Binary file web/franceculture/locale/fr/LC_MESSAGES/django.mo has changed
--- a/web/franceculture/locale/fr/LC_MESSAGES/django.po Wed Sep 22 18:43:32 2010 +0200
+++ b/web/franceculture/locale/fr/LC_MESSAGES/django.po Thu Sep 23 18:21:16 2010 +0200
@@ -30,11 +30,11 @@
#: templates/base.html:46
msgid "indexation projects"
-msgstr "Créer un projet"
+msgstr "Projets d'indexation"
#: templates/base.html:47
msgid "accounts"
-msgstr "Créer un compte"
+msgstr "Liste des comptes"
#: templates/base.html:48
msgid "Profiles"
@@ -86,7 +86,7 @@
#: templates/franceculture/partial/contentslist.html:21
#: templates/ldt/ldt_utils/create_content.html:61
msgid "Create content"
-msgstr "Créer un compte"
+msgstr "Créer un Contenu"
#: templates/franceculture/partial/projectslist.html:14
msgid "Project published, click to unpublish"
@@ -109,7 +109,6 @@
msgstr "Ouvrir le lecteur augmenté"
#: templates/franceculture/partial/projectslist.html:31
-#, fuzzy
msgid "Create project"
msgstr "Créer un projet"
@@ -134,7 +133,6 @@
#: templates/ldt/ldt_utils/create_ldt.html:23
-#, fuzzy
msgid "Create your project"
msgstr "Créer un projet"
--- a/web/franceculture/templates/base.html Wed Sep 22 18:43:32 2010 +0200
+++ b/web/franceculture/templates/base.html Thu Sep 23 18:21:16 2010 +0200
@@ -42,10 +42,10 @@
{% url ldt.user.views.profile as profile_url %}
<ul class="tabs">
<li class='{% active request "active" workspace_url %}'><a href="{{ workspace_url }}" >{% trans "home" %}</a></li>
- <li class='{% active request "active" content_url %}'><a href="{{ content_url }}">{% trans "contents" %}</a></li>
+ <!--li class='{% active request "active" content_url %}'><a href="{{ content_url }}">{% trans "contents" %}</a></li>
<li class='{% active request "active" space_url %}'><a href="{{ space_url }}">{% trans "indexation projects" %}</a></li>
<li class='{% active request "active" "" %}'><a href="#">{% trans "accounts" %}</a></li>
- <li class='{% active request "active" profile_url %}'><a href="{{ profile_url }}" >{% trans "Profiles" %}</a> </li>
+ <li class='{% active request "active" profile_url %}'><a href="{{ profile_url }}" >{% trans "Profiles" %}</a> </li-->
</ul>
{% endif %}
</div>
--- a/web/franceculture/templates/franceculture/partial/contentslist.html Wed Sep 22 18:43:32 2010 +0200
+++ b/web/franceculture/templates/franceculture/partial/contentslist.html Thu Sep 23 18:21:16 2010 +0200
@@ -10,7 +10,7 @@
<tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}">
<td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/document_add.gif" title="{% trans 'create project' %}" alt="{% trans 'create project' %}" href="{% url ldt.ldt_utils.views.create_project content.iri_id %}" class="ldt_link_create"/></div></td>
<td class="cellimg"><div class="cellimgdiv"><img alt="{% trans 'preview media'%}" title="{% trans 'preview media'%}" src="{{MEDIA_URL}}/img/control_play.gif" href="{% url ldt.ldt_utils.views.index content.iri_id %}" class="ldt_link"/></div></td>
- <td class="contenttitle"><a class="contenttitlelink" href="{% url ldt.ldt_utils.views.write_content id=content.id %}">{{ content.title }}</a></td>
+ <td class="contenttitle"><a class="contenttitlelink" href="{% url ldt.ldt_utils.views.write_content iri_id=content.iri_id %}">{{ content.title }}</a></td>
</tr>
{% endfor %}
</tbody>
--- a/web/franceculture/templates/franceculture/workspace.html Wed Sep 22 18:43:32 2010 +0200
+++ b/web/franceculture/templates/franceculture/workspace.html Thu Sep 23 18:21:16 2010 +0200
@@ -12,12 +12,15 @@
<script type="text/javascript">
var content_filter_url = "{% url franceculture.views.contentsfilter filter='__FILTER__' %}";
-var project_filter_url = "{% url franceculture.views.projectsfilter filter='__FILTER__' is_owner='false' %}";
+var project_filter_url = "{% url franceculture.views.projectsfilter filter='__FILTER__' is_owner='false' status='0' %}";
+var publish_project_url = "{% url ldt.ldt_utils.views.publish '__PROJECT_ID__' 'false' %}";
+var unpublish_project_url = "{% url ldt.ldt_utils.views.unpublish '__PROJECT_ID__' 'false' %}";
+
function init_events(base_node) {
- init_events_contents(base_node, "{% url franceculture.views.popup_embed %}");
-
+ init_events_all(base_node, "{% url franceculture.views.popup_embed %}", content_filter_url, project_filter_url, publish_project_url, unpublish_project_url);
+
}
$(document).ready(function(){
--- a/web/franceculture/templates/ldt/ldt_utils/content_list.html Wed Sep 22 18:43:32 2010 +0200
+++ b/web/franceculture/templates/ldt/ldt_utils/content_list.html Thu Sep 23 18:21:16 2010 +0200
@@ -14,7 +14,7 @@
function init_events(base_node) {
- init_events_contents(base_node, "{% url franceculture.views.popup_embed %}");
+ init_events_contents(base_node, "{% url franceculture.views.popup_embed %}", content_filter_url);
}
$(document).ready(function(){
--- a/web/franceculture/templates/ldt/ldt_utils/create_content.html Wed Sep 22 18:43:32 2010 +0200
+++ b/web/franceculture/templates/ldt/ldt_utils/create_content.html Thu Sep 23 18:21:16 2010 +0200
@@ -74,6 +74,8 @@
<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/web/franceculture/templates/ldt/ldt_utils/ldt_list.html Wed Sep 22 18:43:32 2010 +0200
+++ b/web/franceculture/templates/ldt/ldt_utils/ldt_list.html Thu Sep 23 18:21:16 2010 +0200
@@ -11,7 +11,7 @@
{{block.super}}
<script type="text/javascript">
-searchprojectfilterurl = "{% url franceculture.views.projectsfilter filter='__FILTER__' is_owner='true' %}";
+searchprojectfilterurl = "{% url franceculture.views.projectsfilter filter='__FILTER__' is_owner='true' status='0' %}";
publishprojecturl = "{% url ldt.ldt_utils.views.publish '__PROJECT_ID__' 'false' %}";
unpublishprojecturl = "{% url ldt.ldt_utils.views.unpublish '__PROJECT_ID__' 'false' %}";
--- a/web/franceculture/urls.py Wed Sep 22 18:43:32 2010 +0200
+++ b/web/franceculture/urls.py Thu Sep 23 18:21:16 2010 +0200
@@ -23,7 +23,7 @@
(r'^accounts/', include('registration.backends.simple.urls')),
url(r'^/?$', "franceculture.views.workspace", name="root-view"),
- url(r'^filterprojects/(?P<filter>\w*)/(?P<is_owner>true|false)/$', "franceculture.views.projectsfilter", ),
+ url(r'^filterprojects/(?P<filter>\w*)/(?P<is_owner>true|false)/(?P<status>\d)$', "franceculture.views.projectsfilter", ),
url(r'^filtercontents/(?P<filter>\w*)/$', "franceculture.views.contentsfilter", ),
(r'^embedpopup/?$', "franceculture.views.popup_embed"),
)
--- a/web/franceculture/views.py Wed Sep 22 18:43:32 2010 +0200
+++ b/web/franceculture/views.py Thu Sep 23 18:21:16 2010 +0200
@@ -6,6 +6,7 @@
from ldt.ldt_utils.models import Content, Project, Owner
from ldt.ldt_utils.utils import boolean_convert
from django.http import HttpResponseServerError
+from django.db.models import Q
@login_required
@@ -15,7 +16,7 @@
content_list = Content.objects.all()
# get list of projects
- project_list = Project.objects.filter(state=2)
+ project_list = Project.objects.all()
# render list
return render_to_response("franceculture/workspace.html",
@@ -23,10 +24,12 @@
context_instance=RequestContext(request))
@login_required
-def projectsfilter(request, filter, is_owner=False):
+def projectsfilter(request, filter, is_owner=False, status=0):
project_list = None
is_owner = boolean_convert(is_owner)
+ status = int(status)
+ query = Q()
if is_owner:
owner = None
@@ -34,14 +37,16 @@
owner = Owner.objects.get(user=request.user)
except:
return HttpResponseServerError("<h1>User not found</h1>")
-
- project_list = Project.objects.filter(owner=owner)
- else:
- project_list = Project.objects.filter(state=2)
+ query &= Q(owner=owner)
+
+ if status > 0:
+ query &= Q(state=status)
if filter:
- project_list = project_list.filter(title__icontains=filter)
-
+ query &= Q(title__icontains=filter)
+
+ project_list = Project.objects.filter(query)
+
return render_to_response("franceculture/partial/projectslist.html",
{'projects': project_list},
context_instance=RequestContext(request))
@@ -49,6 +54,8 @@
@login_required
def contentsfilter(request, filter):
+ if filter == "_":
+ filter = ""
if filter:
content_list = Content.objects.filter(title__icontains=filter)
else:
--- a/web/ldt/ldt_utils/models.py Wed Sep 22 18:43:32 2010 +0200
+++ b/web/ldt/ldt_utils/models.py Thu Sep 23 18:21:16 2010 +0200
@@ -34,6 +34,29 @@
title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('title'))
src = models.CharField(max_length=1024, unique=True, verbose_name=_('media.src'))
+ def stream_src():
+
+ def fget(self):
+ res_src = self.src.rstrip()
+ if self.videopath and self.videopath.startswith("rtmp://"):
+ extension = res_src.split(".")[-1]
+ res_src = {
+ 'flv': lambda s: s,
+ 'mp3': lambda s: "%s:%s" %("mp3",res_src[:-4]),
+ 'mp4': lambda s: "%s:%s" %("mp4",res_src[:-4]),
+ 'f4v': lambda s: "%s:%s" %("mp4",res_src[:-4]),
+ }.get(extension, lambda s:s)(res_src)
+ return res_src
+
+ return locals()
+
+ stream_src = property(**stream_src())
+
+ def save(self, *args, **kwargs):
+ super(Media, self).save(*args, **kwargs)
+ for content in self.content_set.all():
+ content.sync_iri_file()
+
def __unicode__(self):
strings = []
if self.title:
@@ -44,6 +67,7 @@
strings.append(unicode(self.external_id))
return "|".join(strings)
+
class Content(models.Model):
iri_id = models.CharField(max_length=1024, unique=True, default=generate_uuid, verbose_name=_('content.iri_id'))
iriurl = models.CharField(max_length=1024, verbose_name=_('content.iriurl'))
@@ -71,9 +95,7 @@
writer.deleteDocuments(lucene.Term("iri_id", self.iri_id))
writer.commit()
- #TODO: better manage the change in .iri name and error scenario (save in temp file + rename
- def save(self, *args, **kwargs):
-
+ def sync_iri_file(self):
# create iri file if needed
created = False
try:
@@ -95,6 +117,11 @@
os.remove(iri_file_path)
raise e
+
+ #TODO: better manage the change in .iri name and error scenario (save in temp file + rename
+ def save(self, *args, **kwargs):
+
+ self.sync_iri_file()
# update it
super(Content, self).save(*args, **kwargs)
@@ -122,6 +149,18 @@
return None
+ def stream_src():
+
+ def fget(self):
+ if self.media_obj is not None:
+ return self.media_obj.stream_src
+ else:
+ return None
+
+ return locals()
+
+ stream_src = property(**stream_src())
+
def videopath(): #@NoSelf
doc = """simulate videopath""" #@UnusedVariable
--- a/web/ldt/ldt_utils/urls.py Wed Sep 22 18:43:32 2010 +0200
+++ b/web/ldt/ldt_utils/urls.py Thu Sep 23 18:21:16 2010 +0200
@@ -31,7 +31,7 @@
urlpatterns += patterns('ldt.ldt_utils',
url(r'^space/content/$', 'views.list_content'),
url(r'^space/content/create/$', 'views.write_content'),
- url(r'^space/content/update/(?P<id>\d+)$', 'views.write_content'),
+ url(r'^space/content/update/(?P<iri_id>[\w-]+)$', 'views.write_content'),
url(r'^space/ldt/$', 'views.list_ldt'),
url(r'^space/ldt/indexproject/(?P<id>.*)$', 'views.indexProject'),
url(r'^space/ldt/init/(?P<method>.*)/(?P<url>.+)$', 'views.init', name='space_ldt_init'),
--- a/web/ldt/ldt_utils/utils.py Wed Sep 22 18:43:32 2010 +0200
+++ b/web/ldt/ldt_utils/utils.py Thu Sep 23 18:21:16 2010 +0200
@@ -315,7 +315,7 @@
writer.startElement(u"medias")
writer.startElement(u"media", attributes={u'id':u'video'})
- writer.simpleElement(u'video', attributes={u'src':unicode(content.src),u'id':unicode(content.iri_id),u'dur':unicode(content.duration),u'begin':u'0'})
+ writer.simpleElement(u'video', attributes={u'src':unicode(content.stream_src),u'id':unicode(content.iri_id),u'dur':unicode(content.duration),u'begin':u'0'})
writer.endElement(u"media")
writer.startElement(u"media", attributes={u'id':u'tool'})
@@ -361,7 +361,7 @@
if len(res) > 0:
video_node = res[0]
- video_node.set(u'src', unicode(content.src))
+ video_node.set(u'src', unicode(content.stream_src))
video_node.set(u'dur', unicode(content.duration))
video_node.set(u'id', unicode(content.iri_id))
# update video
--- a/web/ldt/ldt_utils/views.py Wed Sep 22 18:43:32 2010 +0200
+++ b/web/ldt/ldt_utils/views.py Thu Sep 23 18:21:16 2010 +0200
@@ -369,12 +369,14 @@
return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
-def write_content_base(request, id=None):
+def write_content_base(request, iri_id=None):
- if id:
- instance_content = Content.objects.get(id=id)
- instance_media = instance_content.media_obj
+ if iri_id:
+ instance_content = Content.objects.get(iri_id=iri_id)
+ instance_media = instance_content.media_obj
+ logging.debug("write_content_base : valid form: for instance : media -> " + repr(instance_media) + " content : for instance : " + repr(instance_content) )
else:
+ logging.debug("No iri_id")
instance_content = None
instance_media = None
@@ -384,6 +386,9 @@
media_form = MediaForm(request.POST, request.FILES, prefix="media", instance= instance_media)
media_valid = media_form.is_valid()
content_valid = content_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))
+
if media_valid and content_valid :
# see if media must be created
@@ -392,8 +397,6 @@
media_input_type = content_form.cleaned_data["media_input_type"]
- logging.debug("write_content_base : POST media_input_type:" + media_input_type)
-
if media_input_type == "none":
media = None
elif media_input_type == "link":
@@ -488,17 +491,28 @@
form_status = 'error'
else:
form_status = 'empty'
- content_form = ContentForm(prefix="content", instance=instance_content)
+ initial = { 'media_input_type':"link"}
+
+ content_form = ContentForm(prefix="content", instance=instance_content, initial = initial )
media_form = MediaForm(prefix="media", instance=instance_media)
+
+ if instance_content is not None:
+ content_form.media_input_type = "link"
return content_form, media_form, form_status
-def write_content(request, id=None):
+def write_content(request, iri_id=None):
+
+ logging.debug("write_content : " + str(iri_id) )
+ content_form, media_form, form_status = write_content_base(request, iri_id)
- content_form, media_form, form_status = write_content_base(request, id)
+ if iri_id:
+ create_content_action = reverse(write_content, kwargs={'iri_id':iri_id})
+ else:
+ create_content_action = reverse(write_content)
- return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'media_form': media_form,'form_status': form_status,'create_content_action': reverse(write_content)}, context_instance=RequestContext(request))
+ return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'media_form': media_form,'form_status': form_status,'create_content_action': create_content_action}, context_instance=RequestContext(request))
\ No newline at end of file
Binary file web/ldt/locale/en/LC_MESSAGES/django.mo has changed
--- a/web/ldt/locale/en/LC_MESSAGES/django.po Wed Sep 22 18:43:32 2010 +0200
+++ b/web/ldt/locale/en/LC_MESSAGES/django.po Thu Sep 23 18:21:16 2010 +0200
@@ -29,9 +29,8 @@
msgstr ""
#: ldt_utils/forms.py:44
-#, fuzzy
msgid "content.media_input_type"
-msgstr "Documentation"
+msgstr "Media source type"
#: ldt_utils/forms.py:44
msgid "file_upload"
@@ -85,7 +84,7 @@
#: ldt_utils/models.py:31
#, fuzzy
msgid "media.duration"
-msgstr "Documentation"
+msgstr "duration"
#: ldt_utils/models.py:32
msgid "media.creator"
@@ -127,18 +126,16 @@
msgstr ""
#: ldt_utils/models.py:55
-#, fuzzy
msgid "content.description"
-msgstr "Login"
+msgstr "description"
#: ldt_utils/models.py:57
msgid "content.authors"
-msgstr ""
+msgstr "authors"
#: ldt_utils/models.py:58
-#, fuzzy
msgid "content.duration"
-msgstr "Documentation"
+msgstr "duration"
#: ldt_utils/models.py:209
msgid "created by"
@@ -173,20 +170,18 @@
#: ldt_utils/templates/ldt/ldt_utils/content_list.html:59
msgid "Contents"
-msgstr ""
+msgstr "Contents"
#: ldt_utils/templates/ldt/ldt_utils/content_list.html:63
-#, fuzzy
msgid "Create new content"
-msgstr "Create new project"
+msgstr "Create new content"
#: ldt_utils/templates/ldt/ldt_utils/content_list.html:66
msgid "Content"
-msgstr ""
+msgstr "Content"
#: ldt_utils/templates/ldt/ldt_utils/content_list.html:70
#: ldt_utils/templates/ldt/ldt_utils/content_list.html:77
-#, fuzzy
msgid "create project"
msgstr "Create new project"
@@ -204,9 +199,8 @@
msgstr "Copy"
#: ldt_utils/templates/ldt/ldt_utils/create_content.html:22
-#, fuzzy
msgid "Create content"
-msgstr "create account"
+msgstr "Create content"
#: ldt_utils/templates/ldt/ldt_utils/create_ldt.html:11
msgid "Create your project"
Binary file web/ldt/locale/fr/LC_MESSAGES/django.mo has changed
--- a/web/ldt/locale/fr/LC_MESSAGES/django.po Wed Sep 22 18:43:32 2010 +0200
+++ b/web/ldt/locale/fr/LC_MESSAGES/django.po Thu Sep 23 18:21:16 2010 +0200
@@ -30,7 +30,7 @@
#: ldt_utils/forms.py:44
msgid "content.media_input_type"
-msgstr "Documentation"
+msgstr "Source du média"
#: ldt_utils/forms.py:44
msgid "file_upload"
--- a/web/static/css/workspace.css Wed Sep 22 18:43:32 2010 +0200
+++ b/web/static/css/workspace.css Thu Sep 23 18:21:16 2010 +0200
@@ -45,7 +45,7 @@
}
.searchclear {
- /*visibility: hidden;*/
+ display: none;
float: right;
}
@@ -155,6 +155,7 @@
.searchajaxloader {
display: none;
float: right;
+ z-index: +1;
}
a.content_link_create:link, a.content_link_create:visited,
--- a/web/static/js/projectscontents.js Wed Sep 22 18:43:32 2010 +0200
+++ b/web/static/js/projectscontents.js Thu Sep 23 18:21:16 2010 +0200
@@ -119,6 +119,9 @@
timeout = typeof(timeout) != 'undefined' ? timeout : 0;
var target = $(target);
+ // remove all qtip
+ $(".qtip").remove();
+
if(target.realVal().length > 0) {
target.nextAll(".searchclear").show();
}
@@ -130,6 +133,10 @@
target.attr('timer',setTimeout(function() {
target.next(".searchajaxloader").show();
target.nextAll(".searchclear").hide();
+ var realVal = target.realVal();
+ if(realVal.length == 0) {
+ realVal = "_";
+ }
url = url.replace('__FILTER__',escape(target.realVal()));
$(container_selector).load(url, null, function() {
target.next(".searchajaxloader").hide();
@@ -144,7 +151,7 @@
};
-function init_events_contents(base_node, embed_url) {
+function init_events_contents(base_node, embed_url, content_filter_url) {
init_events_base(base_node, embed_url);
@@ -193,6 +200,56 @@
}
+function init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) {
+
+ $('.publishedproject', base_node).click(function(e) {
+ e.preventDefault();
+ var target = $(e.target);
+ var project_id = target.attr('id').replace('project_','');
+ var url = unpublishprojecturl.replace('__PROJECT_ID__', project_id);
+ $.ajax({
+ url: url,
+ type: 'POST',
+ dataType: 'json',
+ success: function(json, textStatus, XMLHttpRequest){
+ if(json.res) {
+ searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
+ }
+ }
+ });
+ });
+
+ $('.unpublishedproject', base_node).click(function(e) {
+ e.preventDefault();
+ var target = $(e.target);
+ var project_id = target.attr('id').replace('project_','');
+ var url = publishprojecturl.replace('__PROJECT_ID__', project_id);
+ $.ajax({
+ url: url,
+ type: 'POST',
+ dataType: 'json',
+ success: function(json, textStatus, XMLHttpRequest){
+ if(json.res) {
+ searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
+ }
+ }
+ });
+ });
+
+}
+
+function init_events_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) {
+
+ init_events_base(base_node, embed_url);
+ init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl);
+}
+
+function init_events_all(base_node, embed_url, searchcontentfilterurl, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) {
+
+ init_events_contents(base_node, embed_url, searchcontentfilterurl);
+ init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl);
+}
+
function searchFieldInit(input_list_init) {
@@ -225,7 +282,7 @@
box.toggleClass("searchfieldinput");
}
});
-
+
});
$.each(input_list_init, function(index, value) {
@@ -240,7 +297,6 @@
box.addClass("searchfieldinput");
box.blur();
box.keyup();
- $(e.target).hide();
});
$('.searchclear').each(function(i) {