def search_org(): org_id = org_model.id_from('name', request.args.get('term')) org = org_model.get(org_id) if not permission_model.permitted(g.user, org_id, PermissionTags.VIEW): org = {} return Response(json.dumps(org), content_type='application/json')
def add_user_to_org(org_id, username): role = request.form['role'] if not (permission_model.permitted(g.user, org_id, PermissionTags.EDIT_USER) and permission_model.role_gte(g.user, org_id, role)): raise InsufficientPermission() user_id = user_model.id_from('email', username) if user_id: org_model.add_user(org_id, user_id, role=role) events.mediator('added_to_project', email=username, project=org_id) else: # Add user to waiting list user_model.add_to_waiting_list(username, org_id, role) events.mediator('invite', email=username, org_id=org_id) org = org_model.get(org_id) return Response(json.dumps(org), status=200, content_type='application/json')
def _task_state(org_id=None): ''' Returns a JSON representation of the user's current tasks and queues, used to render the client-side DOM. For objects a seperate list of their ids is maintained (e.g. tasks and taskmap), this is so we can preserve the order of the objects and still be able to access properties directly if we know the id. { 'tasks': [ 't1', 't2', ... ], 'queues': [ 'q1', 'q2', .... ], 'taskmap': { 'id1': {}, 'id2': {} }, 'queuemap': { 'id1': {}, 'id2': {} }, 'tags': [ 'tag1', 'tag2', ... ] } ''' # Get the user's orgs orgs = list(org_model.get_for_user(g.user)) user_tags = set(tags_model.get_for_user(g.user)) state = { 'orgs': orgs, 'user' : user_model.get(g.user), 'user_tags': list(user_tags), } if org_id: # Get set of assigned tasks org_tasks = list(task_model.get_for_org(org_id)) # Iterate over assigned tasks and build tasks object taskmap = {} for task in org_tasks: retrieved_task = task_model.get(task) if retrieved_task: tags = ','.join(sorted(retrieved_task['tags'].split(','))) retrieved_task['tags'] = tags taskmap[retrieved_task['id']] = retrieved_task else: task_model.remove_from_org(org_id, task) queues = queue_model.get_for_org(org_id) org_tags = set(tags_model.get_for_org(org_id)) filtermap = {filter_id: filter_model.get(filter_id) for filter_id in filter_model.get_for_org(org_id)} state['user']['role'] = permission_model.get_role(g.user, org_id) state['user']['permissions'] = permission_model.all_tags(g.user, org_id) state['user']['lte_roles'] = permission_model.all_lte_roles(g.user, org_id) org_users = list(org_model.get_users(org_id)) users = [] for user_id in org_users: user_data = user_model.get(user_id, include=['name', 'id']) other_role = permission_model.get_role(user_id, org_id) user_data.update({ 'role': other_role }) users.append(user_data) tags = list(org_tags.union(user_tags)) state.update({ 'tasks': org_tasks, 'queues': queues, 'tags': tags, 'taskmap': taskmap, 'users': users, 'preferences': style_rules.get(org_id), 'filtermap': filtermap, 'org': org_model.get(org_id) }) return state