def add_members_to_project(users_id, project_id): member_ref = ref.child('members') users_ref = ref.child('users') print(users_id) print(project_id) try: for user_id in users_id: user = users_ref.child(user_id).get() name = user['name'] image_url = user['image_url'] print(name) print(image_url) member_ref.push({ 'user_id': user_id, 'name': name, 'project_id': project_id, 'role_id': '', 'image_url': image_url }) print("ADDED") return 'INFO: Members added.' except: print("ERROR") return 'ERROR: Members were not added.'
def does_user_admin_of_project(user_id, project_id): members_ref = ref.child("members").get() for member_id in members_ref: member = members_ref[member_id] if (member["project_id"] == project_id and member["user_id"] == user_id): member_role = member["role_id"] roles_ref = ref.child("roles").get() for role in roles_ref: if (role == member_role) and (roles_ref[role]["level"] == "admin"): return True projects_ref = ref.child("projects") project = projects_ref.child(project_id).get() if (project["creator_id"] == user_id): return True return False
def get_data(project_id): data = dict() project_ref = ref.child('projects') users_ref = ref.child('users') roles_ref = ref.child('roles') # Get info about project itself project = project_ref.get() project = project[project_id] project['project_id'] = project_id # Get base info about members of project # (User's names, roles in project) users = [] members_list = get_members_of_project(project_id) for member in members_list: user = users_ref.get() user = user[member['user_id']] user['user_id'] = member['user_id'] user_role = roles_ref.get() user_role = user_role[member['role_id']] user['role_name'] = user_role['rolename'] user['role_level'] = user_role['level'] users.append(user) # Get tasks of this project with assigned users tasks = get_tasks_of_project(project_id) result_tasks = [] for task in tasks: users_on_task = get_users_on_task(task['task_id']) task['members'] = [] for user in users: if user['user_id'] in users_on_task: task['members'].append({ 'name': user['name'], 'user_id': user['user_id'] }) result_tasks.append(task) tasks = result_tasks # Get list of attachments attachments = get_attachments_of_project(project_id) data['project_info'] = project data['users_info'] = users data['tasks_info'] = result_tasks data['attachments_info'] = attachments return data
def make_unfavorite(user_id, project_id): if (not (favorite_project_exists(user_id, project_id))): return "ERROR: The project is not favorite" favorites_ref = ref.child('favorite_project').get() for favorite_id in favorites_ref: if (favorites_ref[favorite_id]["user_id"] == user_id and favorites_ref[favorite_id]["project_id"] == project_id): ref.child('favorite_project').child(favorite_id).delete() return "OK"
def make_favorite(user_id, project_id): if (favorite_project_exists(user_id, project_id)): favorites_ref_2 = ref.child('favorite_project').get() for favorite_id_2 in favorites_ref_2: if (favorites_ref_2[favorite_id_2]["user_id"] == user_id and favorites_ref_2[favorite_id_2]["project_id"] == project_id): ref.child('favorite_project').child(favorite_id_2).delete() return "OK" favorites_ref = ref.child('favorite_project') favorites_ref.push().set({'user_id': user_id, 'project_id': project_id}) return "OK"
def get_list_of_projects_implementation(user_id): projects_ref = ref.child('projects/') projects_list = [] projects = projects_ref.get() for project_id in projects: if (projects[project_id]["creator_id"] == user_id): projects_list.append(project_id) members_ref = ref.child('members/') members = members_ref.get() for member in members: if (members[member]["user_id"] == user_id and not (members[member]["project_id"] in projects_list)): projects_list.append(members[member]["project_id"]) response_list = [] for project in projects_list: certain_project_item = {} certain_project_item.update({"id": project}) certain_project = projects_ref.child(project).get() certain_project_item.update({"title": certain_project["title"]}) certain_project_item.update({"deadline": certain_project["deadline"]}) certain_project_item.update({"imageUrl": certain_project["image_url"]}) certain_project_item.update( {"lastModified": certain_project["last_modified"]}) certain_project_item.update( {"isFavorite": favorite_project_exists(user_id, project)}) certain_project_item.update( {"isMediaAvailable": certain_project["is_media_available"]}) certain_project_item.update({"isShared": certain_project["is_shared"]}) certain_project_item.update({"keywords": certain_project["key_words"]}) certain_project_item.update({ "isOwner": True if certain_project["creator_id"] == user_id else False }) members_list = [] for member in members: if (members[member]["user_id"] != user_id and members[member]["project_id"] == project): members_list.append(members[member]["user_id"]) members_data_list = [] users_ref = ref.child('users/').get() for m in members_list: user = users_ref[m] members_data_list.append({"id": m, "imageUrl": user["image_url"]}) certain_project_item.update({"members": members_data_list}) response_list.append(certain_project_item) return response_list
def add_projects(): project_ref = ref.child('projects') for i in range(0, 3): title = randomString() # if not object_exists('projects', title): is_shared = True key_words = [{ 'key_word_1': True }, { 'key_word_2': True }, { 'key_word_3': True }] creator_id = 'u001' deadline = '01/01/2020' description = 'some default description' image_url = 'link_to_icon.com/project_id/icon' last_modified = 'date' is_media_available = True project_ref.push().set({ 'title': title, 'is_shared': is_shared, 'key_words': key_words, 'creator_id': creator_id, 'deadline': deadline, 'description': description, 'image_url': image_url, 'last_modified': last_modified, 'is_media_available': is_media_available })
def add_tasks(): tasks_ref = ref.child('tasks') for i in range(0, 3): now = datetime.now() dt_string = now.strftime("%d/%m/%Y %H:%M:%S") taskname = 'taskname' + str(i) project_id = 'prjct_id' creator_id = 'creator_id' description = 'description' + str(i) status = 'status' + str(i) createdAt = dt_string deadline = '01/01/2020' tasks_ref.push().set({ 'project_id': project_id, 'creator_id': creator_id, 'assignee_id': creator_id, 'description': description, 'status': status, 'createdAt': createdAt, 'deadline': deadline })
def add_attachment(project_id, name='default_attachment_name', attachment_url='/attachments', attachment_type='image'): attachments_ref = ref.child('attachments') try: now = datetime.now() dt_string = now.strftime("%d/%m/%Y %H:%M:%S") attachments_ref.push({ 'name': name, 'project_id': project_id, 'attachment_type': attachment_type, 'attachment_url': attachment_url, 'creation_time': dt_string }) update_project(project_id, 'is_media_available', True) return 'INFO: Attachment added.' except: return 'ERROR: Attachment was not added.'
def create_project(title='default_project_title', is_shared=True, key_words=[{ 'key_word_1': True }, { 'key_word_2': True }, { 'key_word_3': True }], creator_id='default_author_id', deadline='01/01/1970', description='default_description', image_url='link_to_icon.com/project_id/icon', last_modified='date', is_media_available=True): project_ref = ref.child('projects') project_key = project_ref.push({ 'title': title, 'is_shared': is_shared, 'key_words': key_words, 'creator_id': creator_id, 'deadline': deadline, 'description': description, 'image_url': image_url, 'last_modified': last_modified, 'is_media_available': is_media_available }) return project_key.key
def search_for_project_implementation(project_id): project = ref.child('projects/' + project_id).get() response_list = [] response_list.append({project_id: project}) return response_list
def return_certain_user(user_id): user_ref = ref.child('users') users = user_ref.get() user = users[user_id] user['id'] = user_id return user
def return_all_users(): users = ref.child('users').get() response_list = [] for user_id in users: list_of_projects_user_in = [] temp_dict = users[user_id] temp_dict.update({"id": user_id}) temp_dict.update({"imageUrl": temp_dict["image_url"]}) members_dict = ref.child('members').get() for member_id in members_dict: if (members_dict[member_id]["user_id"] == user_id): list_of_projects_user_in.append( members_dict[member_id]["project_id"]) temp_dict.update({"projects": list_of_projects_user_in}) response_list.append(temp_dict) return response_list
def delete_project(project_id): #delete project project_ref = ref.child('projects') project_ref.child(project_id).delete() #delete members members_ref = ref.child('members') members_dict = ref.child('members').get() for member_id in members_dict: if (members_dict[member_id]["project_id"] == project_id): members_ref.child(member_id).delete() #delete tasks tasks_ref = ref.child('tasks') tasks_dict = ref.child('tasks').get() list_of_tasks = [] for tasks_id in tasks_dict: if (tasks_dict[tasks_id]["project_id"] == project_id): tasks_ref.child(tasks_id).delete() list_of_tasks.append(tasks_id) #delete task_to_user task_to_user_ref = ref.child('task_to_user') task_to_user_dict = ref.child('task_to_user').get() for task_to_user_id in task_to_user_dict: if (task_to_user_dict[task_to_user_id]["task_id"] in list_of_tasks): task_to_user_ref.child(task_to_user_id).delete() return 'INFO: project {} deleted'.format(project_id)
def verify_user(uid): users_ref = ref.child('users').get() for user in users_ref: if (user == uid): return True return False
def add_roles(): roles_ref = ref.child('roles') for i in range(0, 3): rolename = 'role_name' + str(i) level = 'role_level' roles_ref.push().set({'rolename': rolename, 'level': level})
def does_user_in_project(user_id, project_id): members_ref = ref.child("members").get() for member_id in members_ref: member = members_ref[member_id] if (member["project_id"] == project_id and member["user_id"] == user_id): return True project_ref = ref.child("projects").get() for project in project_ref: if (project == project_id and project_ref[project]["creator_id"] == user_id): return True return False
def create_user(uid, name, email, image_url=""): users_ref = ref.child('users') user_ref = users_ref.child(uid).set({ "email": email, "image_url": image_url, "name": name }) return True
def user_is_unique(username): users = ref.child('users').get() for user_id in users: user = users[user_id] if user['name'] == username: return False return True
def assign_task_to_users(task_id, *user_ids): ''' Assign a task to a user(s) by given project ID and task ID. Create a row in table task_to_user with task_id and user_id. ''' task_to_user_ref = ref.child('task_to_user') for user_id in user_ids: task_to_user_ref.push({'task_id': task_id, 'user_id': user_id})
def add_task_to_user_link(): tasks_to_user_ref = ref.child('task_to_user') for i in range(0, 3): task_id = 'taskid' + str(i) user_id = 'user_id' tasks_to_user_ref.push().set({'task_id': task_id, 'user_id': user_id})
def email_is_unique(email): users = ref.child('users').get() for user_id in users: user = users[user_id] if user['email'] == email: return False return True
def favorite_project_exists(user_id, project_id): favorites_ref = ref.child('favorite_project').get() for favorite_id in favorites_ref: if (favorites_ref[favorite_id]["user_id"] == user_id and favorites_ref[favorite_id]["project_id"] == project_id): return True return False
def registration_token_is_unique(registration_token): users = ref.child('users').get() for user_id in users: user = users[user_id] if user['registration_token'] == registration_token: return False return True
def add_favorite_project(): favorites_ref = ref.child('favorite_project') for i in range(0, 3): user_id = 'user' + str(i) project_id = 'lol' favorites_ref.push().set({ 'user_id': user_id, 'project_id': project_id })
def get_users_by_id(users_id): res = [] users_ref = ref.child('users') users = users_ref.get() for user_id in users: user = users[user_id] if user_id in users_id: res.append(user) return res
def get_users_on_task(task_id): users_on_task = [] tasks_to_user_ref = ref.child('task_to_user') records_dict = tasks_to_user_ref.get() for record_id in records_dict: record = records_dict[record_id] if record['task_id'] == task_id: users_on_task.append(record['user_id']) return users_on_task
def get_attachments_of_project(project_id): attachments = [] attachments_ref = ref.child('attachments') attachments_dict = attachments_ref.get() for attachments_record_id in attachments_dict: attachments_record = attachments_dict[attachments_record_id] if attachments_record['project_id'] == project_id: attachments_record['id'] = attachments_record_id attachments.append(attachments_record) return attachments
def object_exists(object_type='default_object', object_value="dafault_name", object_parameter='name'): object_ref = ref.child(object_type) all_objects = object_ref.get() for object_id in all_objects: if object_value == all_objects[object_id][object_parameter]: # user exists return True # user not found return False
def update_project(project_id, param_name, param_value): try: project_ref = ref.child('projects') project = project_ref.child(project_id) fields = project.get() project.update({param_name: param_value}) return True except: return False