--- a/src/ldt/ldt/ldt_utils/forms.py Mon Nov 28 15:48:28 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/forms.py Tue Nov 29 12:08:11 2011 +0100
@@ -49,6 +49,7 @@
iriurl = forms.CharField(max_length=1024, widget=forms.HiddenInput, required=False)
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)
def clean_iri_id(self):
data = self.cleaned_data.get('iri_id')
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html Mon Nov 28 15:48:28 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html Tue Nov 29 12:08:11 2011 +0100
@@ -20,9 +20,11 @@
{% block css_import %}
{{ block.super }}
{{ content_form.media.css }}
- <link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/ldt.css" />
+ <!-- <link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/ldt.css" />-->
<link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/ldtform.css" />
+ <link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/workspace.css" />
<link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/jq-css/themes/base/jquery-ui.css" />
+
{% endblock %}
@@ -112,7 +114,10 @@
<div id="media_field_create" class="media_fields">{{ media_form.src.errors }}{{ media_form.src.label_tag }}{{ media_form.src }}</div>
</div>
</div>
+
+ {% include "ldt/ldt_utils/partial/permissions.html" %}
</div>
+
<div id="submitcontent" class="span-18 last">
<div id="submitcontent-loader" class="span-10">
<div id="submitcontent-loader-img" class="submitcontent-loader-content span-10 last"><img alt="loader" src="{{LDT_MEDIA_PREFIX}}img/ajax-loader-220x19.gif"/></div>
@@ -125,6 +130,7 @@
<button type="submit" value="write" name="submit_button" id="submit_button_write">{% trans "write" %}</button>
</div>
</div>
+
</form>
</div>
{% endblock %}
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html Mon Nov 28 15:48:28 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html Tue Nov 29 12:08:11 2011 +0100
@@ -21,25 +21,6 @@
{% block js_declaration %}
{{ block.super }}
<script type="text/javascript">
- function check_uncheck_all(name) {
- var check_all = '{% trans "check all" %}';
- var uncheck_all = '{% trans "uncheck all" %}';
- var id_name = "#global_checkbox_" + name;
-
- $(id_name).attr('title', uncheck_all);
-
- $(id_name).change(function () {
- var checkbox_names = ".checkbox_" + name;
- if ($(id_name).is(":checked")) {
- $(checkbox_names).prop('checked', true);
- $(id_name).attr('title', uncheck_all );
- } else {
- $(checkbox_names).prop('checked', false);
- $(id_name).attr('title', check_all);
- }
- $(checkbox_names).trigger("change");
- });
- }
function activate_initial_permissions() {
$("#grouplist tr").each(function (e) {
@@ -80,8 +61,8 @@
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
- width: "430",
- plugins : "autoresize"
+ width: "630",
+ height: "150"
});
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/groups.html Mon Nov 28 15:48:28 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/groups.html Tue Nov 29 12:08:11 2011 +0100
@@ -28,7 +28,7 @@
input_list_init = [
{'input_selector':"#searchprojectsinput", 'container_selector':"#projectslistcontainer", 'url':project_filter_url}
];
-
+
searchFieldInit(input_list_init);
init_events(document);
@@ -39,7 +39,7 @@
$(".update_group_projects").live("click", function(){
//alert("group id = " + $(this).attr('id') + ", url = " + get_group_projects_url);
- id_group = $(this).attr('id');
+ var id_group = $(this).attr('id');
// Remove icons from all the lines
$(".next_icon, td .grouplink").hide();
// Display icons from the good line
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/permissions.html Mon Nov 28 15:48:28 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/permissions.html Tue Nov 29 12:08:11 2011 +0100
@@ -64,9 +64,9 @@
{{ management_form }}
<tr class="projectscontentsheader last" id="contentslistheader">
- <td class="cellcheckbox">
+ <td class="cellcheckbox">
{% if groups|length > 1 %}
- <input class="selectallgroups" id="global_checkbox_group" type="checkbox" checked="true"/>
+ <input class="selectallgroups" id="global_checkbox_group" type="checkbox" />
{% endif %}
</td>
<td class="projectcontentsheadertitle">{% trans "nom" %}</td>
@@ -86,8 +86,8 @@
{{ form.perms }}
{{ form.group }}
</tr>
- {% endfor %}
-
+ {% endfor %}
+
</tbody>
</table>
</div>
--- a/src/ldt/ldt/ldt_utils/views.py Mon Nov 28 15:48:28 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/views.py Tue Nov 29 12:08:11 2011 +0100
@@ -23,7 +23,7 @@
from guardian.shortcuts import assign, remove_perm, get_perms, get_objects_for_group
from ldt.ldt_utils.models import Content
from ldt.ldt_utils.utils import boolean_convert, LdtUtils, LdtSearch
-from ldt.security.utils import assign_project_to_groups, set_forbidden_stream, add_change_attr
+from ldt.security.utils import assign_object_to_groups, set_forbidden_stream, add_change_attr
from lxml.html import fragment_fromstring
from models import Media, Project
from projectserializer import ProjectSerializer
@@ -446,7 +446,7 @@
p = Project.create_project(title=form.cleaned_data['title'], user=user, contents=form.cleaned_data['contents'],
description=form.cleaned_data['description'])
- assign_project_to_groups(p, group_form.cleaned_data)
+ assign_object_to_groups(p, group_form.cleaned_data)
form_status = "saved"
contents = []
else:
@@ -833,7 +833,7 @@
return HttpResponseRedirect(reverse('index_project_full', args=[project.ldt_id]))
else:
return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))
- assign_project_to_groups(project, group_form.cleaned_data)
+ assign_object_to_groups(project, group_form.cleaned_data)
else:
form = AddProjectForm()
perm_list = []
@@ -891,7 +891,7 @@
project.ldt = lxml.etree.tostring(ldt, pretty_print=True)
project.save()
- assign_project_to_groups(project, group_form.cleaned_data)
+ assign_object_to_groups(project, group_form.cleaned_data)
else:
form = AddProjectForm({'title':unicode(project.title), 'description':unicode(project.get_description())})
@@ -978,15 +978,19 @@
content_instance_val[k] = value
media_instance_val[k] = value
+
+ permission_formset = formset_factory(PermissionForm, extra=0)
content_form = ContentForm(content_instance_val, prefix="content", instance=instance_content)
media_form = MediaForm(media_instance_val, request.FILES, prefix="media", instance=instance_media)
+ group_form = permission_formset(request.POST)
media_valid = media_form.is_valid()
content_valid = content_form.is_valid()
+ group_valid = group_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
- if media_valid and content_valid :
+ if media_valid and content_valid and group_valid:
# see if media must be created
cleaned_data = {}
@@ -1109,11 +1113,13 @@
content_defaults.update(content_form.cleaned_data)
content_defaults['media_obj'] = media
del content_defaults["media_input_type"]
+ del content_defaults['groups']
content, created = Content.safe_objects.get_or_create(iri_id=content_form.cleaned_data['iri_id'], defaults=content_defaults) #@UndefinedVariable
- if created:
- assign('change_content', request.user, content)
- assign('view_content', request.user, content)
- else:
+
+ assign('change_content', request.user, content)
+ assign('view_content', request.user, content)
+ assign_object_to_groups(content, group_form.cleaned_data)
+ if not created:
for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media_obj'):
setattr(content, attribute, content_defaults[attribute])
content.save()
@@ -1138,7 +1144,9 @@
def write_content(request, iri_id=None):
submit_action = request.REQUEST.get("submit_button", False)
-
+ groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
+ permission_formset = formset_factory(PermissionForm, extra=0)
+
if submit_action == "prepare_delete":
errors, titles = prepare_delete_content(request, iri_id)
if errors and len(errors) > 0:
@@ -1153,8 +1161,27 @@
form_status = "deleted"
content_form = ContentForm()
media_form = MediaForm()
+ management_form = group_form = None
else:
content_form, media_form, form_status = write_content_base(request, iri_id)
+
+ perm_list = []
+ content = Content.safe_objects.get(iri_id=iri_id) if iri_id else None
+
+ for group in groups:
+ group_perms = get_perms(group, content) if content else []
+ share = False
+ perm = None
+ if 'view_content' in group_perms:
+ share = True
+ perm = 'read'
+ if 'change_content' in group_perms:
+ perm = 'write'
+
+ perm_list.append({'share': share, 'perms': perm, 'group': group.id })
+ permission = permission_formset(initial=perm_list)
+ management_form = permission.management_form
+ group_form = zip(permission, groups)
if iri_id:
create_content_action = reverse('ldt.ldt_utils.views.write_content', kwargs={'iri_id':iri_id})
@@ -1164,7 +1191,8 @@
session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]
cookie_name = settings.SESSION_COOKIE_NAME
- 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, 'iri_id': iri_id, 'session_key':session_key, 'cookie_name':cookie_name}, 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,
+ 'management_form': management_form, 'group_form': group_form, 'iri_id': iri_id, 'session_key':session_key, 'cookie_name':cookie_name}, context_instance=RequestContext(request))
@login_required
def prepare_delete_content(request, iri_id=None):
--- a/src/ldt/ldt/security/utils.py Mon Nov 28 15:48:28 2011 +0100
+++ b/src/ldt/ldt/security/utils.py Tue Nov 29 12:08:11 2011 +0100
@@ -101,14 +101,15 @@
return obj_list
-def assign_project_to_groups(project, permissions):
+def assign_object_to_groups(object, permissions):
+ name = object.__class__.__name__.lower()
for elem in permissions:
group = Group.objects.get(id=elem['group'])
if elem['share']:
- assign('view_project', group, project)
+ assign('view_%s' % name, group, object)
if elem['perms'] == 'write':
- assign('change_project', group, project)
+ assign('change_%s' % name, group, object)
else:
- remove_perm('view_project', group, project)
- remove_perm('change_project', group, project)
+ remove_perm('view_%s' % name, group, object)
+ remove_perm('change_%s' % name, group, object)
\ No newline at end of file
--- a/src/ldt/ldt/static/ldt/css/ldtform.css Mon Nov 28 15:48:28 2011 +0100
+++ b/src/ldt/ldt/static/ldt/css/ldtform.css Tue Nov 29 12:08:11 2011 +0100
@@ -8,7 +8,6 @@
padding: 10px;
}
-
#add_content input, #add_content textarea, #add_content select,
#add_contribution input, #add_contribution textarea, #add_contribution select
{
@@ -20,6 +19,9 @@
width: auto;
}
+#add_content input[type="checkbox"] {
+ width: 15px;
+}
#add_content textarea {
height : 125px;
@@ -29,13 +31,17 @@
list-style: none;
}
+#add_content td, #add_content th {
+ vertical-align: baseline;
+ border: none;
+}
label {
display: block;
margin-top: 0.5em;
}
-#add_content .vDateField,#add_content .vTimeField {
+#add_content .vDateField, #add_content .vTimeField {
width: 90px;
float: left;
}
@@ -65,12 +71,10 @@
display: none;
}
-
#submitcontent-loader-msg {
padding-left: 6px;
}
-
#submitcontent-buttons input[type="submit"], #submitcontent-buttons button, #submitcontent-buttons-login input[type="submit"], #submitcontent-buttons-login button {
background-color: #656565;
color: white;
--- a/src/ldt/ldt/templates/ldt/ldt_raw_base.html Mon Nov 28 15:48:28 2011 +0100
+++ b/src/ldt/ldt/templates/ldt/ldt_raw_base.html Tue Nov 29 12:08:11 2011 +0100
@@ -13,6 +13,27 @@
<title>{% block title %}{% trans "page_title" %}{% endblock %}</title>
{% block js_import %}
<script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery.min.js"></script>
+ <script type="text/javascript">
+ function check_uncheck_all(name) {
+ var check_all = '{% trans "check all" %}';
+ var uncheck_all = '{% trans "uncheck all" %}';
+ var id_name = "#global_checkbox_" + name;
+
+ $(id_name).attr('title', uncheck_all);
+
+ $(id_name).change(function () {
+ var checkbox_names = ".checkbox_" + name;
+ if ($(id_name).is(":checked")) {
+ $(checkbox_names).prop('checked', true);
+ $(id_name).attr('title', uncheck_all );
+ } else {
+ $(checkbox_names).prop('checked', false);
+ $(id_name).attr('title', check_all);
+ }
+ $(checkbox_names).trigger("change");
+ });
+ }
+ </script>
{% endblock %}
{% block css_declaration %}