def graph_collaborators(request, graph_slug): # Only graph owner should be able to do this graph = get_object_or_404(Graph, slug=graph_slug) if request.user != graph.owner: return redirect('%s?next=%s' % (reverse("signin"), request.path)) users = User.objects.all().exclude(pk=settings.ANONYMOUS_USER_ID) all_collaborators = guardian.get_users_with_perms(graph) collaborators = list( all_collaborators.exclude( id__in=[request.user.id, settings.ANONYMOUS_USER_ID])) if request.POST: data = request.POST.copy() form = AddCollaboratorForm(data=data, graph=graph, collaborators=collaborators) if form.is_valid(): user_id = form.cleaned_data["new_collaborator"] user = get_object_or_404(User, id=user_id) guardian.assign('view_graph', user, graph) collaborators.append(user) else: form = AddCollaboratorForm(graph=graph, collaborators=collaborators) graph_permissions = guardian.get_perms_for_model(graph) permissions_list = [] permissions_table = [] aux = (('graph', graph), ('schema', graph.schema), ('data', graph.data)) for item in aux: for p in PERMISSIONS[item[0]].values(): permissions_list.append(p) for user in collaborators: permission_row = {} permission_row['user_id'] = user.id permission_row['user_name'] = user.username permission_row['perms'] = [] for item_str, item_obj in aux: user_permissions = guardian.get_perms(user, item_obj) for p in PERMISSIONS[item_str].keys(): if p in user_permissions: permission_row['perms'].append((item_str, p, True)) else: permission_row['perms'].append((item_str, p, False)) permissions_table.append(permission_row) #users = [u for u in users if u != graph.owner and u not in collaborators] return render_to_response('graphs_collaborators.html', { "graph": graph, "permissions": permissions_list, "permissions_table": permissions_table, "form": form }, context_instance=RequestContext(request))
def graph_collaborators(request, graph_slug): # Only graph owner should be able to do this graph = get_object_or_404(Graph, slug=graph_slug) if request.user != graph.owner: return redirect('%s?next=%s' % (reverse("signin"), request.path)) # users = User.objects.all().exclude(pk=settings.ANONYMOUS_USER_ID) all_collaborators = guardian.get_users_with_perms(graph) collaborators = all_collaborators.exclude(id__in=[request.user.id, settings.ANONYMOUS_USER_ID]) collaborators = list(collaborators) if request.POST: data = request.POST.copy() form = AddCollaboratorForm(data=data, graph=graph, collaborators=collaborators) if form.is_valid(): user_id = form.cleaned_data["new_collaborator"] user = get_object_or_404(User, id=user_id) guardian.assign('view_graph', user, graph) collaborators.append(user) else: form = AddCollaboratorForm(graph=graph, collaborators=collaborators) # graph_permissions = guardian.get_perms_for_model(graph) permissions_list = [] permissions_table = [] aux = (('graph', graph), ('schema', graph.schema), ('data', graph.data)) for item in aux: for p in PERMISSIONS[item[0]].values(): permissions_list.append(p) for user in collaborators: permission_row = {} permission_row['user_id'] = user.id permission_row['user_name'] = user.username permission_row['perms'] = [] for item_str, item_obj in aux: user_permissions = guardian.get_perms(user, item_obj) for p in PERMISSIONS[item_str].keys(): if p in user_permissions: permission_row['perms'].append((item_str, p, True)) else: permission_row['perms'].append((item_str, p, False)) permissions_table.append(permission_row) #users = [u for u in users if u != graph.owner and u not in collaborators] return render_to_response('graphs_collaborators.html', {"graph": graph, "permissions": permissions_list, "permissions_table": permissions_table, "form": form}, context_instance=RequestContext(request))
def graph_collaborators(request, graph_slug): graph = get_object_or_404(Graph, slug=graph_slug) # Only graph owner was able to change collaborators # if request.user != graph.owner: # return redirect('%s?next=%s' % (reverse("signin"), request.path)) # users = User.objects.all().exclude(pk=settings.ANONYMOUS_USER_ID) all_collaborators = guardian.get_users_with_perms(graph) collaborators = all_collaborators.exclude( id__in=[graph.owner.id, request.user.id, settings.ANONYMOUS_USER_ID] ) collaborators = list(collaborators) if request.POST: data = request.POST.copy() form = AddCollaboratorForm(data=data, graph=graph) if form.is_valid(): new_collaborator = form.cleaned_data["new_collaborator"] guardian.assign_perm('view_graph', new_collaborator, graph) collaborators.append(new_collaborator) as_modal = bool(data.get("asModal", False)) else: form = AddCollaboratorForm(graph=graph) as_modal = bool(request.GET.get("asModal", False)) # graph_permissions = guardian.get_perms_for_model(graph) permissions_list = [] permissions_table = [] aux = (('graph', graph), ('schema', graph.schema), ('data', graph.data)) for item in aux: for p in PERMISSIONS[item[0]].values(): permissions_list.append(p) for user in collaborators: permission_row = {} permission_row['user_id'] = user.id permission_row['user_name'] = user.username permission_row['perms'] = [] for item_str, item_obj in aux: user_permissions = guardian.get_perms(user, item_obj) for p in PERMISSIONS[item_str].keys(): if p in user_permissions: permission_row['perms'].append((item_str, p, True)) else: permission_row['perms'].append((item_str, p, False)) permissions_table.append(permission_row) #users = [u for u in users if u != graph.owner and u not in collaborators] ''' For the modal mini-framework, this view always returns an HTML, because after click in 'Add collaborator' it goes again the same page. ''' if as_modal: base_template = 'empty.html' render = render_to_string else: base_template = 'base.html' render = render_to_response add_url = reverse("graph_collaborators", args=[graph_slug]) broader_context = {"graph": graph, "permissions": permissions_list, "permissions_table": permissions_table, "form": form, "base_template": base_template, "as_modal": as_modal, "add_url": add_url} response = render('graphs_collaborators.html', broader_context, context_instance=RequestContext(request)) if as_modal: response = {'type': 'html', 'action': 'collaborators', 'html': response} return HttpResponse(json.dumps(response), status=200, content_type='application/json') else: return response
def graph_collaborators(request, graph_slug): graph = get_object_or_404(Graph, slug=graph_slug) # Only graph owner was able to change collaborators # if request.user != graph.owner: # return redirect('%s?next=%s' % (reverse("signin"), request.path)) # users = User.objects.all().exclude(pk=settings.ANONYMOUS_USER_ID) all_collaborators = guardian.get_users_with_perms(graph) collaborators = all_collaborators.exclude( id__in=[graph.owner.id, request.user.id, settings.ANONYMOUS_USER_ID] ) collaborators = list(collaborators) if request.POST: data = request.POST.copy() form = AddCollaboratorForm(data=data, graph=graph) if form.is_valid(): new_collaborator = form.cleaned_data["new_collaborator"] guardian.assign_perm('view_graph', new_collaborator, graph) collaborators.append(new_collaborator) as_modal = bool(data.get("asModal", False)) else: form = AddCollaboratorForm(graph=graph) as_modal = bool(request.GET.get("asModal", False)) # graph_permissions = guardian.get_perms_for_model(graph) permissions_list = [] permissions_table = [] aux = (('graph', graph), ('schema', graph.schema), ('data', graph.data), ('reports', graph), ('queries', graph), ('analytics', graph)) for item in aux: for p in PERMISSIONS[item[0]].values(): permissions_list.append(p) for user in collaborators: permission_row = {} permission_row['user_id'] = user.id permission_row['user_name'] = user.username permission_row['perms'] = [] for item_str, item_obj in aux: user_permissions = guardian.get_perms(user, item_obj) for p in PERMISSIONS[item_str].keys(): if p in user_permissions: permission_row['perms'].append((item_str, p, True)) else: permission_row['perms'].append((item_str, p, False)) permissions_table.append(permission_row) # users = [u for u in users if u != graph.owner and u not in collaborators] ''' For the modal mini-framework, this view always returns an HTML, because after click in 'Add collaborator' it goes again the same page. ''' if as_modal: base_template = 'empty.html' render = render_to_string else: base_template = 'base.html' render = render_to_response add_url = reverse("graph_collaborators", args=[graph_slug]) broader_context = {"graph": graph, "permissions": permissions_list, "permissions_table": permissions_table, "form": form, "base_template": base_template, "as_modal": as_modal, "add_url": add_url} response = render('graphs_collaborators.html', broader_context, context_instance=RequestContext(request)) if as_modal: response = {'type': 'html', 'action': 'collaborators', 'html': response} return HttpResponse(json.dumps(response), status=200, content_type='application/json') else: return response