def transfer_zone_to_user(modeladmin, request, queryset): """Action that transfers the zone to another user. This action first displays a page which provides an input box where a username must be set. It checks if the user has change permission. Based on: https://github.com/django/django/blob/1.4.2/django/contrib/admin/actions.py Important --------- In order to work requires some special form fields (see the template). """ opts = modeladmin.model._meta app_label = opts.app_label # Check that the user has change permission for the Domain model if not modeladmin.has_change_permission(request): raise PermissionDenied # The user has selected a new domain type through the # forms.ZoneTransferForm form. Make the changes to the selected # objects and return a None to display the change list view again. #if request.method == 'POST': if request.POST.get('post'): form = ZoneTransferForm(request.POST) if form.is_valid(): transfer_to_username = request.POST.get('transfer_to_username') # Get the user object. Validation has taken place in the form. User = get_user_model() owner = User.objects.get(username=transfer_to_username) n = queryset.count() if n and owner: for obj in queryset: obj.created_by = owner obj.update_serial() obj.save() obj_display = force_unicode(obj) modeladmin.log_change(request, obj, obj_display) messages.info(request, 'Successfully transfered %d domain(s).' % n) # Return None to display the change list page again. return None else: form = ZoneTransferForm() info_dict = { 'form': form, 'queryset': queryset, 'opts': opts, 'app_label': app_label, 'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME, } return render_to_response( 'powerdns_manager/actions/transfer_zone.html', info_dict, context_instance=RequestContext(request))
def zone_transfer_view(request, id_list): """Transfer zones to another user. Accepts a comma-delimited list of Domain object IDs. An intermediate page asking for the username of the target owner is used. """ # Create a list from the provided comma-delimited list of IDs. id_list = id_list.split(',') # Permission check on models. if not request.user.has_perms([ 'powerdns_manager.change_domain', ]): messages.error(request, 'Insufficient permissions for this action.') return HttpResponseRedirect( reverse('admin:powerdns_manager_domain_changelist')) if request.method == 'POST': form = ZoneTransferForm(request.POST) if form.is_valid(): transfer_to_username = request.POST.get('transfer_to_username') # Get the user object of the new owner. # We always have a valid user object as validation has taken place # in the ZoneTransferForm. User = get_user_model() owner = User.objects.get(username=transfer_to_username) owner_display = force_unicode(owner) Domain = get_model('powerdns_manager', 'Domain') for n, zone_id in enumerate(id_list): obj = Domain.objects.get(id=zone_id) obj_display = force_unicode(obj) # Check zone ownership. if request.user != obj.created_by: messages.error( request, 'Permission denied for domain: %s' % obj_display) else: obj.created_by = owner obj.update_serial() obj.save() # Create log entry # LogEntry.objects.log_action( # user_id = request.user.pk, # content_type_id = ContentType.objects.get_for_model(obj).pk, # object_id = obj.pk, # object_repr = obj_display, # action_flag = CHANGE # ) n += 1 if n == 1: messages.info( request, "Successfully transfered domain '%s' to '%s'" % (obj_display, owner_display)) elif n > 1: messages.info(request, 'Successfully transfered %d domains.' % n) # Redirect to the Domain changelist. return HttpResponseRedirect( reverse('admin:powerdns_manager_domain_changelist')) else: form = ZoneTransferForm() info_dict = { 'form': form, 'id_list': id_list, } return render_to_response('powerdns_manager/zone/transfer.html', info_dict, context_instance=RequestContext(request))
def zone_transfer_view(request, id_list): """Transfer zones to another user. Accepts a comma-delimited list of Domain object IDs. An intermediate page asking for the username of the target owner is used. """ # Create a list from the provided comma-delimited list of IDs. id_list = id_list.split(',') # Permission check on models. if not request.user.has_perms([ 'powerdns_manager.change_domain', ]): messages.error(request, 'Insufficient permissions for this action.') return HttpResponseRedirect(reverse('admin:powerdns_manager_domain_changelist')) if request.method == 'POST': form = ZoneTransferForm(request.POST) if form.is_valid(): transfer_to_username = request.POST.get('transfer_to_username') # Get the user object of the new owner. # We always have a valid user object as validation has taken place # in the ZoneTransferForm. User = get_user_model() owner = User.objects.get(username=transfer_to_username) owner_display = force_unicode(owner) Domain = cache.get_model('powerdns_manager', 'Domain') for n, zone_id in enumerate(id_list): obj = Domain.objects.get(id=zone_id) obj_display = force_unicode(obj) # Check zone ownership. if request.user != obj.created_by: messages.error(request, 'Permission denied for domain: %s' % obj_display) else: obj.created_by = owner obj.update_serial() obj.save() # Create log entry # LogEntry.objects.log_action( # user_id = request.user.pk, # content_type_id = ContentType.objects.get_for_model(obj).pk, # object_id = obj.pk, # object_repr = obj_display, # action_flag = CHANGE # ) n += 1 if n == 1: messages.info(request, "Successfully transfered domain '%s' to '%s'" % (obj_display, owner_display)) elif n > 1: messages.info(request, 'Successfully transfered %d domains.' % n) # Redirect to the Domain changelist. return HttpResponseRedirect(reverse('admin:powerdns_manager_domain_changelist')) else: form = ZoneTransferForm() info_dict = { 'form': form, 'id_list': id_list, } return render_to_response( 'powerdns_manager/zone/transfer.html', info_dict, context_instance=RequestContext(request))
def transfer_zone_to_user(modeladmin, request, queryset): """Action that transfers the zone to another user. This action first displays a page which provides an input box where a username must be set. It checks if the user has change permission. Based on: https://github.com/django/django/blob/1.4.2/django/contrib/admin/actions.py Important --------- In order to work requires some special form fields (see the template). """ opts = modeladmin.model._meta app_label = opts.app_label # Check that the user has change permission for the Domain model if not modeladmin.has_change_permission(request): raise PermissionDenied # The user has selected a new domain type through the # forms.ZoneTransferForm form. Make the changes to the selected # objects and return a None to display the change list view again. #if request.method == 'POST': if request.POST.get('post'): form = ZoneTransferForm(request.POST) if form.is_valid(): transfer_to_username = request.POST.get('transfer_to_username') # Get the user object. Validation has taken place in the form. User = get_user_model() owner = User.objects.get(username=transfer_to_username) n = queryset.count() if n and owner: for obj in queryset: obj.created_by = owner obj.update_serial() obj.save() obj_display = force_unicode(obj) modeladmin.log_change(request, obj, obj_display) messages.info(request, 'Successfully transfered %d domain(s).' % n) # Return None to display the change list page again. return None else: form = ZoneTransferForm() info_dict = { 'form': form, 'queryset': queryset, 'opts': opts, 'app_label': app_label, 'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME, } return render_to_response('powerdns_manager/actions/transfer_zone.html', info_dict, context_instance=RequestContext(request))