Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions locking/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class LockableAdmin(admin.ModelAdmin):

class Media:
js = (
'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js',
'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js',
_s.STATIC_URL + 'locking/js/jquery.url.packed.js',
_s.ADMIN_URL + "ajax/variables.js",
_s.STATIC_URL + "locking/js/admin.locking.js?v=1"
Expand All @@ -30,23 +30,23 @@ def get_form(self, request, obj=None, *args, **kwargs):
return form

def changelist_view(self, request, extra_context=None):
# we need the request objects in a few places where it's usually not present,
# we need the request objects in a few places where it's usually not present,
# so we're tacking it on to the LockableAdmin class
self.request = request
return super(LockableAdmin, self).changelist_view(request,
extra_context)

def save_model(self, request, obj, form, change, *args, **kwargs):

super(LockableAdmin, self).save_model(request, obj, form, change,
*args, **kwargs)

try:
# object creation doesn't need/have locking in place
content_type = ContentType.objects.get_for_model(obj)
obj = Lock.objects.get(entry_id=obj.id,
obj = Lock.objects.filter(entry_id=obj.id,
app=content_type.app_label,
model=content_type.model)
model=content_type.model)[0]
obj.unlock_for(request.user)
obj.save()
except:
Expand All @@ -66,21 +66,21 @@ def get_lock_for_admin(self_obj, obj):

content_type = ContentType.objects.get_for_model(obj)
try:
lock = Lock.objects.get(entry_id=obj.id,
lock = Lock.objects.filter(entry_id=obj.id,
app=content_type.app_label,
model=content_type.model)
model=content_type.model)[0]
class_name = 'locked'
locked_by = lock.locked_by.username
output = str(obj.id)
except Lock.DoesNotExist:
except:
return ''

if lock.is_locked:
seconds_remaining = lock.lock_seconds_remaining
minutes_remaining = seconds_remaining/60
minutes_remaining = seconds_remaining / 60
locked_until = _("Still locked for %s more minute(s) by %s.") \
% (minutes_remaining, lock.locked_by)
if self_obj.request.user == lock.locked_by:
if self_obj.request.user == lock.locked_by:
locked_until_self = _(
"You have a lock on this content for %s more minute(s)."
) % (minutes_remaining)
Expand All @@ -95,7 +95,7 @@ def get_lock_for_admin(self_obj, obj):
<img src="%slocking/img/lock.png" title="%s" />'''\
% (_s.STATIC_URL, locked_until)
full_name = "%s %s" % (
lock.locked_by.first_name,lock.locked_by.last_name)
lock.locked_by.first_name, lock.locked_by.last_name)
return u'''
<a href="#" id=%s class="lock-status %s"
title="Locked By: %s">%s%s</a>''' % (output, class_name,
Expand Down
6 changes: 3 additions & 3 deletions locking/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ def clean(self):
self.cleaned_data = super(LockingForm, self).clean()
try:
content_type = ContentType.objects.get_for_model(self.obj)
lock = Lock.objects.get(entry_id=self.obj.id, app=content_type.app_label, model=content_type.model)
lock = Lock.objects.filter(entry_id=self.obj.id, app=content_type.app_label, model=content_type.model)[0]
except:
return self.cleaned_data
if lock.is_locked:
if lock.locked_by != self.request.user and lock.lock_type == 'hard':
raise forms.ValidationError('You cannot save this object because it is locked by user %s for roughly %s more minute(s).' % (lock.locked_by.username, lock.lock_seconds_remaining/60))
return self.cleaned_data
raise forms.ValidationError('You cannot save this object because it is locked by user %s for roughly %s more minute(s).' % (lock.locked_by.username, lock.lock_seconds_remaining / 60))
return self.cleaned_data
12 changes: 6 additions & 6 deletions locking/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
def lock(request, app, model, id):
if request.user and id and app and model:
try:
obj = Lock.objects.get(entry_id=id, app=app, model=model)
obj = Lock.objects.filter(entry_id=id, app=app, model=model)[0]
obj.lock_for(request.user)
obj.save()
return HttpResponse(status=200)
Expand All @@ -29,7 +29,7 @@ def lock(request, app, model, id):
obj = Lock()
obj.entry_id = id
obj.app = app
obj.model= model
obj.model = model
obj.lock_for(request.user)
obj.save()
return HttpResponse(status=200)
Expand All @@ -47,12 +47,12 @@ def unlock(request, app, model, id):
# Users who don't have exclusive access to an object anymore may still
# request we unlock an object. This happens e.g. when a user navigates
# away from an edit screen that's been open for very long.
# When this happens, LockableModel.unlock_for will throw an exception,
# When this happens, LockableModel.unlock_for will throw an exception,
# and we just ignore the request.
# That way, any new lock that may since have been put in place by another
# That way, any new lock that may since have been put in place by another
# user won't get accidentally overwritten.
try:
obj = Lock.objects.get(entry_id=id, app=app, model=model)
obj = Lock.objects.filter(entry_id=id, app=app, model=model)[0]
obj.delete()

return HttpResponse(status=200)
Expand All @@ -64,7 +64,7 @@ def unlock(request, app, model, id):
@is_lockable
def is_locked(request, app, model, id):
try:
obj = Lock.objects.get(entry_id=id, app=app, model=model)
obj = Lock.objects.filter(entry_id=id, app=app, model=model)[0]
response = simplejson.dumps({
"is_active": obj.is_locked,
"for_user": getattr(obj.locked_by, 'username', None),
Expand Down