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
Beispiel #7
0
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
        })
Beispiel #8
0
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
Beispiel #16
0
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})
Beispiel #21
0
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
Beispiel #25
0
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
Beispiel #29
0
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