diff --git a/django/contrib/admin/media/js/row_level_permission.js b/django/contrib/admin/media/js/row_level_permission.js index 66e9d395be..ac01e34295 100644 --- a/django/contrib/admin/media/js/row_level_permission.js +++ b/django/contrib/admin/media/js/row_level_permission.js @@ -1,160 +1,245 @@ -/** - * @author clong - */ - //dojo.require("dojo.io.*"); - //dojo.require("dojo.event.*"); - //dojo.require("dojo.lfx.*"); - //dojo.require("dojo.widget.*"); - //dojo.require("dojo.json"); +var add_row_level_permission = { + init: function() { + // Grab the elements we’ll need. + add_row_level_permission.form = document.getElementById("addRLPForm"); + add_row_level_permission.results_div = document.getElementById("rlpResults"); -function addButtonPressed(obj_ct, obj_id) -{ - return; - dojo.io.bind({ - url: "/rlp/add/"+obj_ct+"/"+obj_id+"/ajax/", - handler: addCallback, - formNode: dojo.byId('addRLPForm') - }); -} + // This is so we can fade it in later. + YAHOO.util.Dom.setStyle(add_row_level_permission.results_div, "opacity", 0); + + // Hijack the form. + YAHOO.util.Event.addListener(add_row_level_permission.form, "submit", add_row_level_permission.submit_func); + }, + + submit_func: function(e) { + YAHOO.util.Event.preventDefault(e); + + //TODO: Remove any error messages here + + YAHOO.util.Connect.setForm(add_row_level_permission.form); + + //Temporarily disable the form. + for(var i=0; i {% if new_rlp_form %} -

{% trans "Row Level Permissions" %}

-
+
{% include "admin/row_level_permission.html" %}
{% endif %} diff --git a/django/contrib/admin/templates/admin/row_level_permission.html b/django/contrib/admin/templates/admin/row_level_permission.html index b73f1e99a2..ae097a7031 100644 --- a/django/contrib/admin/templates/admin/row_level_permission.html +++ b/django/contrib/admin/templates/admin/row_level_permission.html @@ -1,8 +1,38 @@ {% load i18n admin_modify %} -{% include_admin_script "js/ajax/prototype.js" %} -{% include_admin_script "js/ajax/scriptaculous.js" %} +{% include_admin_script "js/lib/YahooUI/yahoo/yahoo-debug.js" %} +{% include_admin_script "js/lib/YahooUI/event/event-debug.js" %} +{% include_admin_script "js/lib/YahooUI/connection/connection-debug.js" %} +{% include_admin_script "js/lib/YahooUI/dom/dom-debug.js" %} +{% include_admin_script "js/lib/YahooUI/animation/animation-debug.js" %} +{% include_admin_script "js/lib/YahooUI/logger/logger-debug.js" %} {% include_admin_script "js/row_level_permission.js" %} - + + + + + +

{% trans "Row Level Permissions" %}

+
+
+

{% trans "Add Permissions" %}

+ +
- - - - +
{% trans "Owner" %} @@ -17,12 +47,6 @@ {% trans "Options" %}
-{% trans "Add Permissions" %} -
@@ -44,38 +68,88 @@
- - -{% trans "Current Permissions" %} + +

{% trans "Current Permissions" %}

+ + + + + + + {% if rlp_form_list %} {% load row_level_permission %} {% for o in rlp_form_list %} - - - - - + {% endfor %} {% else %} {% endif %} +
+{% trans "Owner" %} + +{% trans "Permission" %} + +{% trans "Negative" %} + +{% trans "Options" %}
-{{ o.form.owner }} - -{{ o.form.perm }} - -{{ o.form.negative }} - - - -
-{% trans 'Delete' %} | -{% trans 'Copy to New' %} -
+ + + + + + + + +
+ {{ o.form.owner }} + + {{ o.form.perm }} + + {{ o.form.negative }} + + + +
+ + {% trans 'Delete' %} | + {% trans 'Copy to New' %} +
+
No row level permissions
+ + + + +
+
+ + + + + + + +
+ {{ empty_rlp_form.owner }} + + {{ empty_rlp_form.perm }} + + {{ empty_rlp_form.negative }} + + + +
+ {% trans 'Delete' %} | + {% trans 'Copy to New' %} +
+
+
\ No newline at end of file diff --git a/django/contrib/admin/utils.py b/django/contrib/admin/utils.py index e1d408b275..1585e3afb5 100644 --- a/django/contrib/admin/utils.py +++ b/django/contrib/admin/utils.py @@ -103,11 +103,19 @@ if docutils_is_available: #Based off work by Ian Holsman #http://svn.zyons.python-hosting.com/trunk/zilbo/common/utils/misc.py + +import sha +from django.conf import settings +from django.contrib.contenttypes.models import ContentType + def verify_objref_hash( content_type_id, object_id, hash ): - import sha - from django.conf import settings hash_match = sha.new("%s/%s" % (content_type_id, object_id) + settings.SECRET_KEY).hexdigest() if hash == hash_match: return True else: return False + +def create_objref(object): + content_type_id = ContentType.objects.get_for_model( object ).id + object_id = object.id + return "%s/%d/%s" % ( content_type_id, object_id, sha.new("%s/%d" % (content_type_id, object_id) + settings.SECRET_KEY).hexdigest()) \ No newline at end of file diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 6ac7ccb276..58de960d14 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -402,12 +402,13 @@ def change_stage(request, app_label, model_name, object_id): add_rlp_manip = AddRLPManipulator(model_instance, model_ct) edit_rlp_manip = ChangeRLPManipulator(model_ct) new_rlp_form = forms.FormWrapper(add_rlp_manip, rlp_new_data, rlp_errors) + empty_rlp_form = forms.FormWrapper(edit_rlp_manip, rlp_new_data, rlp_errors) rlp_form_list = [] for r in rlp_list: owner_val = str(r.owner_ct)+"-"+str(r.owner_id) data = {'id':r.id, 'owner':owner_val, 'perm':r.permission.id, 'negative':r.negative} rlp_form_list.append({'form':forms.FormWrapper(edit_rlp_manip, data, rlp_errors), 'rlp':r}) - rlp_context = {'new_rlp_form':new_rlp_form, 'rlp_form_list':rlp_form_list,} + rlp_context = {'new_rlp_form':new_rlp_form, 'rlp_form_list':rlp_form_list, 'empty_rlp_form':empty_rlp_form} c.update(rlp_context) return render_change_form(model, manipulator, c, change=True) diff --git a/django/contrib/admin/views/row_level_permissions.py b/django/contrib/admin/views/row_level_permissions.py index 47d441e647..82485e88d8 100644 --- a/django/contrib/admin/views/row_level_permissions.py +++ b/django/contrib/admin/views/row_level_permissions.py @@ -41,7 +41,6 @@ def add_row_level_permission(request, ct_id, obj_id): ct = get_object_or_404(ContentType, pk=ct_id) obj = get_object_or_404(ct.model_class(), pk=obj_id) - if not request.user.has_perm(obj._meta.app_label + '.' + obj._meta.get_change_permission()): raise PermissionDenied @@ -51,6 +50,7 @@ def add_row_level_permission(request, ct_id, obj_id): manip = AddRLPManipulator(obj, ct) new_data = request.POST.copy() + manip.do_html2python(new_data) rlp_list = [] @@ -71,7 +71,8 @@ def add_row_level_permission(request, ct_id, obj_id): resp_list = [] for rlp in rlp_list: - resp_list.append({"id":rlp.id, "permission":rlp.permission.id}) + hash = utils.create_objref(rlp) + resp_list.append({"id":rlp.id, "permission":rlp.permission.id, "hash":hash}) msg["results"]=resp_list return HttpResponse(simplejson.dumps(msg), 'text/javascript')