def show_group_list(request, object_type='projects', identity=None, return_message=None): """ The landing page in the "profile" section of Local Ground, where the user gets to view the projects/views to which s/he is authorized. """ from localground.account.models import Project, View context = RequestContext(request) r = request.GET or request.POST object_list, object_name = None, None ModelClass = Form_LU.get(object_type).get('model_class') if request.POST: return_message = _batch_update(request, ModelClass, identity) object_list = ModelClass.objects.get_objects_with_counts(identity, ordering='id') group_object = ModelClass() context.update({ 'username': identity.username if identity is not None else 'all', 'object_list': object_list, 'group_object': group_object, 'raw_url': '/profile/%s/' % object_type, #todo: deprecate 'url': '/profile/%s/' % object_type, 'url_raw': '/profile/%s/' % object_type, #todo: deprecate 'object_type': object_type }) if return_message is not None: context.update({ 'return_message': return_message }) if request.user.is_superuser or context.get('is_impersonation'): context.update({'users': Project.get_users()}) context.update(prep_paginator(request, object_list)) return render_to_response('groups.html', context)
def get_objects(request, object_type, identity=None, project=None, return_message=None): context = RequestContext(request) r = request.GET or request.POST is_barcoded = (object_type == 'map-image' or object_type == 'attachment') objects = None class_name, template_name = _get_object_variables(object_type) if class_name is None: return HttpResponse('object_type "%s" is invalid' % (object_type)) #update form values, if form post: if request.POST: return_message = _batch_update(request, object_type, class_name, identity) ordering_field = None #'-id' if project is not None: objects = class_name.objects.by_project(project, ordering_field=ordering_field) else: objects = class_name.objects.get_all(ordering_field=ordering_field, user=identity) #if identity is not None: # objects = objects.filter(owner=identity) username = identity.username if identity is not None else 'all' projects = Project.objects.get_objects(identity) if request.user.is_superuser and username == 'all': projects = Project.objects.all().order_by('name') project_id = 'all' if project is not None: project_id = str(project.id) context.update({ 'username': username, 'url': '/profile/%s/?a=a' % object_type, #'project_url': '/profile/%s/?alias=%s' % (object_type, username), #'user_url': '/profile/%s/?project_id=%s' % (object_type, project_id), 'raw_url': '/profile/%s/' % (object_type), 'projects': projects, 'selected_project': project, 'selected_project_id': project_id, 'object_type': object_type.replace('-', ' ') }) if is_barcoded: context.update({ 'statuses': StatusCode.objects.all().order_by('id') }) if return_message is not None: context.update({ 'return_message': return_message }) if request.user.is_superuser or context.get('is_impersonation'): context.update({'users': Project.get_users()}) context.update(prep_paginator(request, objects)) return render_to_response(template_name, context)
def get_objects(request, identity=None, project=None, return_message=None, format_type='table'): context = RequestContext(request) r = request.GET or request.POST objects = None object_type = 'tables' template_name = 'profile/tables.html' is_blank = r.get('is_blank', False) in ['1', 'True', 'true'] #query for user, forms, and projects: username = identity.username if identity is not None else 'all' forms, projects = None, None if request.user.is_superuser and username == 'all': projects = Project.objects.all().order_by('name') forms = Form.objects.all_forms() else: projects = Project.objects.get_objects(identity) forms = Form.objects.my_forms(user=identity) project_id = 'all' if project is not None: project_id = str(project.id) form_id = int( r.get('form_id', request.COOKIES.get('form_id_' + request.user.username, -1))) form = None try: if form_id != -1: form = Form.objects.get(id=form_id) except Form.DoesNotExist: form = None #context.update(dict(message='Form ID #%s not found' % form_id)) if form is None and len(forms) > 0: form = forms[0] records = [] if form is not None: attachment = None if r.get('attachment_id') is not None: try: attachment = Attachment.objects.get( id=int(r.get('attachment_id'))) except: attachment = None records = form.get_data(project=project, identity=identity, is_blank=is_blank, has_geometry=False, attachment=attachment) #build urls (for restful interface): url = '/profile/%s/?is_blank=%s&format_type=%s' % (object_type, is_blank, format_type) context.update({ 'username': username, 'url': url, 'raw_url': '/profile/%s/' % (object_type), 'projects': list(projects), 'form': form, 'forms': list(forms), 'selected_project': project, 'selected_project_id': project_id, 'object_type': 'table', 'format_type': format_type, 'is_blank': is_blank, 'style': r.get('style', request.COOKIES.get('style_' + request.user.username, 'default')) }) if return_message is not None: context.update({'return_message': return_message}) if request.user.is_superuser: context.update({'users': Project.get_users()}) context.update(prep_paginator(request, records)) return render_to_response(template_name, context)
def wrapper(request, *args, **kwargs): from localground.account.models import Project r = request.GET or request.POST cookies = request.COOKIES project = None user = request.user alias = kwargs.get('identity', None) #inner method to get most recent project if default selection isn't valid def get_default_project(alias): projects = Project.objects.filter( owner=alias).order_by('-time_stamp') if len(projects) > 0: return projects[0] return None # 1) if anonymous request, return error: if user.is_anonymous(): return HttpResponse( json.dumps({ 'code': 'failure', 'message': 'User cannot be anonymous' })) # 2) order matters (defer to request param before cookie) project_id = r.get('project_id') or cookies.get('project_id_' + user.username) if project_id is not None: if project_id in ['all', 'all#', '']: project = None elif project_id in ['add', 'add#']: project_name = r.get('project_name', None) if project_name is None: project = None else: #create a new project from localground.account.models import UserProfile import time profile = UserProfile.objects.get(user=request.user) project = Project() project.name = project_name project.owner = user project.slug = '%s-%s' % (project_name, int(time.time())) project.access_authority = profile.default_view_authority project.save() else: try: project = Project.objects.get(id=int(project_id)) except ValueError: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: return HttpResponse( json.dumps({ 'code': 'failure', 'message': 'The project_id parameter must be an integer. \ You submitted: \'' + project_id + '\'' })) except Project.DoesNotExist: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: return HttpResponse( json.dumps({ 'code': 'failure', 'message': 'Project #"' + project_id + '" does not exist' })) #is user authorized? #if project is not None and project.owner != user and not user.is_superuser: if project.can_view(user) == False: #if project id defined in cookies, pick the most recently updated project: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: return HttpResponse(json.dumps({ 'code': 'failure', 'message': 'Not authorized to view information for %s' \ % project.name })) else: #if no project id defined, pick the most recently updated project: project = get_default_project(alias) # 3) update kwargs dict to return 'identity' entry to calling function: if kwargs is None: kwargs = {} kwargs.update({'project': project}) return function(request, *args, **kwargs)
def get_objects(request, identity=None, project=None, return_message=None, format_type='table'): context = RequestContext(request) r = request.GET or request.POST objects = None object_type = 'tables' template_name = 'profile/tables.html' is_blank = r.get('is_blank', False) in ['1', 'True', 'true'] #query for user, forms, and projects: username = identity.username if identity is not None else 'all' forms, projects = None, None if request.user.is_superuser and username == 'all': projects = Project.objects.all().order_by('name') forms = Form.objects.all_forms() else: projects = Project.objects.get_objects(identity) forms = Form.objects.my_forms(user=identity) project_id = 'all' if project is not None: project_id = str(project.id) form_id = int(r.get('form_id', request.COOKIES.get('form_id_' + request.user.username, -1))) form = None try: if form_id != -1: form = Form.objects.get(id=form_id) except Form.DoesNotExist: form = None #context.update(dict(message='Form ID #%s not found' % form_id)) if form is None and len(forms) > 0: form = forms[0] records = [] if form is not None: attachment = None if r.get('attachment_id') is not None: try: attachment = Attachment.objects.get(id=int(r.get('attachment_id'))) except: attachment = None records = form.get_data(project=project, identity=identity, is_blank=is_blank, has_geometry=False, attachment=attachment) #build urls (for restful interface): url = '/profile/%s/?is_blank=%s&format_type=%s' % (object_type, is_blank, format_type) context.update({ 'username': username, 'url': url, 'raw_url': '/profile/%s/' % (object_type), 'projects': list(projects), 'form': form, 'forms': list(forms), 'selected_project': project, 'selected_project_id': project_id, 'object_type': 'table', 'format_type': format_type, 'is_blank': is_blank, 'style': r.get('style', request.COOKIES.get('style_' + request.user.username, 'default')) }) if return_message is not None: context.update({ 'return_message': return_message }) if request.user.is_superuser: context.update({'users': Project.get_users()}) context.update(prep_paginator(request, records)) return render_to_response(template_name, context)
def wrapper(request, *args, **kwargs): from localground.account.models import Project r = request.GET or request.POST cookies = request.COOKIES project = None user = request.user alias = kwargs.get('identity', None) #inner method to get most recent project if default selection isn't valid def get_default_project(alias): projects = Project.objects.filter(owner=alias).order_by('-time_stamp') if len(projects) > 0: return projects[0] return None # 1) if anonymous request, return error: if user.is_anonymous(): return HttpResponse(json.dumps({ 'code': 'failure', 'message': 'User cannot be anonymous' })) # 2) order matters (defer to request param before cookie) project_id = r.get('project_id') or cookies.get('project_id_' + user.username) if project_id is not None: if project_id in ['all', 'all#', '']: project = None elif project_id in ['add', 'add#']: project_name = r.get('project_name', None) if project_name is None: project = None else: #create a new project from localground.account.models import UserProfile import time profile = UserProfile.objects.get(user=request.user) project = Project() project.name = project_name project.owner = user project.slug = '%s-%s' % (project_name, int(time.time())) project.access_authority = profile.default_view_authority project.save() else: try: project = Project.objects.get(id=int(project_id)) except ValueError: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: return HttpResponse(json.dumps({ 'code': 'failure', 'message': 'The project_id parameter must be an integer. \ You submitted: \'' + project_id + '\'' })) except Project.DoesNotExist: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: return HttpResponse(json.dumps({ 'code': 'failure', 'message': 'Project #"' + project_id + '" does not exist' })) #is user authorized? #if project is not None and project.owner != user and not user.is_superuser: if project.can_view(user) == False: #if project id defined in cookies, pick the most recently updated project: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: return HttpResponse(json.dumps({ 'code': 'failure', 'message': 'Not authorized to view information for %s' \ % project.name })) else: #if no project id defined, pick the most recently updated project: project = get_default_project(alias) # 3) update kwargs dict to return 'identity' entry to calling function: if kwargs is None: kwargs = {} kwargs.update({'project': project}) return function(request, *args, **kwargs)