Beispiel #1
0
def show_group_management(request, group_info_id):
    """
    show management page of a group
    """
    # to int
    group_info_id = int(group_info_id)
    group_info = get_object_or_404(GroupInfo, id=group_info_id)
    group = group_info.group

    # process form
    if request.method == "POST":
        form_group_name = GroupNameHandlerForm(request.POST)
        form_group_description = GroupDescriptionHandlerForm(request.POST)
        form_add_user = AddUserForm(request.POST, prefix="normal")
        form_add_manager = AddUserForm(request.POST, prefix="manager")

        if form_group_name.is_valid():
            # update group info, short-circuit
            group_name = form_group_name.cleaned_data["group_name"]
            group_info.name = group_name
            group_info.save()
            return redirect("group_management_page", group_info_id=group_info_id)

        # deal with the situation of empty description
        if form_group_description.is_valid():
            # add user
            group_description = form_group_description.cleaned_data["group_description"]
            group_info.description = group_description
            group_info.save()
            return redirect("group_management_page", group_info_id=group_info_id)

        if form_add_user.is_valid():
            username = form_add_user.cleaned_data["username"]
            user = get_object_or_404(User, username=username)
            group.user_set.add(user)
            return redirect("group_management_page", group_info_id=group_info_id)

        if form_add_manager.is_valid():
            username = form_add_manager.cleaned_data["username"]
            user = get_object_or_404(User, username=username)
            if not group.user_set.filter(username=user.username):
                form_add_manager._errors = {"username": ["{} not in the group!".format(username)]}
            else:
                group_info.manager.add(user)
                return redirect("group_management_page", group_info_id=group_info_id)

    else:
        form_group_name = GroupNameHandlerForm()
        form_group_description = GroupDescriptionHandlerForm()
        form_add_user = AddUserForm(prefix="normal")
        form_add_manager = AddUserForm(prefix="manager")

    # process link
    # manager
    remove_manager_url = reverse("delete_manager_from_group")
    manager_set = group_info.manager.all()
    group_manager = {}
    for manager in manager_set:
        query = {"group_info_id": group_info_id, "user_info_id": manager.id}
        group_manager[manager.username] = url_with_querystring(remove_manager_url, **query)
    # user
    remove_user_url = reverse("delete_user_from_group")
    group_user = {}
    for user in group.user_set.all():
        query = {"group_info_id": group_info_id, "user_info_id": user.userinfo.id}
        group_user[user.username] = url_with_querystring(remove_user_url, **query)
    # exclusive operation
    for name, remove_url in group_manager.items():
        if name in group_user:
            group_user[name] = None
    # forbid remove if there's only one manager in the group
    if len(group_manager) == 1:
        for name in group_manager:
            group_manager[name] = None

    # rendering
    render_data_dict = {
        "form_group_name": form_group_name,
        "form_group_description": form_group_description,
        "form_add_user": form_add_user,
        "group_info_id": group_info_id,
        "form_add_manager": form_add_manager,
        "group_manager": group_manager,
        "group_user": group_user,
    }
    return render(request, "group_info/group_management_page.html", render_data_dict)
Beispiel #2
0
def show_project_management_page(request, project_id):
    project_id = int(project_id)
    project = get_object_or_404(Project, id=project_id)

    if request.method == 'POST':
        form_project_name = ProjectNameHandlerForm(request.POST)
        form_project_description = ProjectDescriptionHandlerForm(request.POST)
        form_add_group = AddGroupForm(request.POST)
        
        if form_project_name.is_valid():
            project_name = form_project_name.cleaned_data['project_name']
            project.name = project_name
            project.save()
            return redirect('project_management_page',
                            project_id=project_id)
        #if form_project_description.is_valid() \
        #        and 'project_description' in request.POST:
        if form_project_description.is_valid():
            project_description = \
                    form_project_description.cleaned_data['project_description']
            project.description = project_description
            project.save()
            return redirect('project_management_page',
                            project_id=project_id)
        if form_add_group.is_valid():
            group_name = form_add_group.cleaned_data['group_name']
            group = get_object_or_404(Group, name=group_name)
            # add to attended group
            project.attended_group.add(group)
            # real group isolation
            unique_project_group_name = \
                    "".join('[project][attended_group]', 
                            request.user.username, 
                            datetime.now())
            project_group = Group(name=unique_project_group_name)
            project_group.save()
            for user in group.user_set.all():
                project_group.user_set.add(user)
            project.normal_group.add(project_group)
            # group info
            project_group_info = GroupInfo(name='[attended]'+group_name,
                                           group=project_group,
                                           real_flag=False)

            return redirect('project_management_page',
                            project_id=project_id)
        
    else:
        form_project_name = ProjectNameHandlerForm()
        form_project_description = ProjectDescriptionHandlerForm()
        form_add_group = AddGroupForm()
        
    # rendering
    display_project_normal_group = \
            {group.name: {
                           'group_info_id': group.groupinfo.id,
                           'remove_url': url_with_querystring(
                                           reverse('delete_group_from_project'),
                                           project_id=project_id,
                                           group_info_id=group.groupinfo.id)
                } \
                for group in project.normal_group.all() \
                    if group.real_flag}
    render_data_dict = {
            'form_project_name': form_project_name,
            'form_project_description': form_project_description,
            'form_add_group': form_add_group,
            'project_normal_group': display_project_normal_group,       
            'project_id': project_id,
    }
    return render(request,
                  'project/project_management_page.html',
                  render_data_dict)
Beispiel #3
0
def show_project_management_page(request, project_id):
    project_id = int(project_id)
    project = get_object_or_404(Project, id=project_id)

    if request.method == 'POST':
        form_project_name = ProjectNameHandlerForm(request.POST)
        form_project_description = ProjectDescriptionHandlerForm(request.POST)
        form_add_group = AddGroupForm(request.POST)

        if form_project_name.is_valid():
            project_name = form_project_name.cleaned_data['project_name']
            project.name = project_name
            project.save()
            return redirect('project_management_page', project_id=project_id)
        #if form_project_description.is_valid() \
        #        and 'project_description' in request.POST:
        if form_project_description.is_valid():
            project_description = \
                    form_project_description.cleaned_data['project_description']
            project.description = project_description
            project.save()
            return redirect('project_management_page', project_id=project_id)
        if form_add_group.is_valid():
            group_name = form_add_group.cleaned_data['group_name']
            group = get_object_or_404(Group, name=group_name)
            # add to attended group
            project.attended_group.add(group)
            # real group isolation
            unique_project_group_name = \
                    "".join('[project][attended_group]',
                            request.user.username,
                            datetime.now())
            project_group = Group(name=unique_project_group_name)
            project_group.save()
            for user in group.user_set.all():
                project_group.user_set.add(user)
            project.normal_group.add(project_group)
            # group info
            project_group_info = GroupInfo(name='[attended]' + group_name,
                                           group=project_group,
                                           real_flag=False)

            return redirect('project_management_page', project_id=project_id)

    else:
        form_project_name = ProjectNameHandlerForm()
        form_project_description = ProjectDescriptionHandlerForm()
        form_add_group = AddGroupForm()

    # rendering
    display_project_normal_group = \
            {group.name: {
                           'group_info_id': group.groupinfo.id,
                           'remove_url': url_with_querystring(
                                           reverse('delete_group_from_project'),
                                           project_id=project_id,
                                           group_info_id=group.groupinfo.id)
                } \
                for group in project.normal_group.all() \
                    if group.real_flag}
    render_data_dict = {
        'form_project_name': form_project_name,
        'form_project_description': form_project_description,
        'form_add_group': form_add_group,
        'project_normal_group': display_project_normal_group,
        'project_id': project_id,
    }
    return render(request, 'project/project_management_page.html',
                  render_data_dict)
Beispiel #4
0
def show_group_management(request, group_info_id):
    """
    show management page of a group
    """
    # to int
    group_info_id = int(group_info_id)
    group_info = get_object_or_404(GroupInfo, id=group_info_id)
    group = group_info.group

    # process form
    if request.method == 'POST':
        form_group_name = GroupNameHandlerForm(request.POST)
        form_group_description = GroupDescriptionHandlerForm(request.POST)
        form_add_user = AddUserForm(request.POST, prefix='normal')
        form_add_manager = AddUserForm(request.POST, prefix='manager')

        if form_group_name.is_valid():
            # update group info, short-circuit
            group_name = form_group_name.cleaned_data['group_name']
            group_info.name = group_name
            group_info.save()
            return redirect('group_management_page',
                            group_info_id=group_info_id)

        # deal with the situation of empty description
        if form_group_description.is_valid():
            # add user
            group_description = \
                    form_group_description.cleaned_data['group_description']
            group_info.description = group_description
            group_info.save()
            return redirect('group_management_page',
                            group_info_id=group_info_id)

        if form_add_user.is_valid():
            username = form_add_user.cleaned_data['username']
            user = get_object_or_404(User, username=username)
            group.user_set.add(user)
            return redirect('group_management_page',
                            group_info_id=group_info_id)

        if form_add_manager.is_valid():
            username = form_add_manager.cleaned_data['username']
            user = get_object_or_404(User, username=username)
            if not group.user_set.filter(username=user.username):
                form_add_manager._errors = {
                    'username': [u'{} not in the group!'.format(username)],
                }
            else:
                group_info.manager.add(user)
                return redirect('group_management_page',
                                group_info_id=group_info_id)

    else:
        form_group_name = GroupNameHandlerForm()
        form_group_description = GroupDescriptionHandlerForm()
        form_add_user = AddUserForm(prefix='normal')
        form_add_manager = AddUserForm(prefix='manager')

    # process link
    # manager
    remove_manager_url = reverse('delete_manager_from_group')
    manager_set = group_info.manager.all()
    group_manager = {}
    for manager in manager_set:
        query = {
            'group_info_id': group_info_id,
            'user_info_id': manager.id,
        }
        group_manager[manager.username] = url_with_querystring(
            remove_manager_url, **query)
    # user
    remove_user_url = reverse('delete_user_from_group')
    group_user = {}
    for user in group.user_set.all():
        query = {
            'group_info_id': group_info_id,
            'user_info_id': user.userinfo.id,
        }
        group_user[user.username] = url_with_querystring(
            remove_user_url, **query)
    # exclusive operation
    for name, remove_url in group_manager.items():
        if name in group_user:
            group_user[name] = None
    # forbid remove if there's only one manager in the group
    if len(group_manager) == 1:
        for name in group_manager:
            group_manager[name] = None

    # rendering
    render_data_dict = {
        'form_group_name': form_group_name,
        'form_group_description': form_group_description,
        'form_add_user': form_add_user,
        'group_info_id': group_info_id,
        'form_add_manager': form_add_manager,
        'group_manager': group_manager,
        'group_user': group_user,
    }
    return render(request, 'group_info/group_management_page.html',
                  render_data_dict)