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)
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)
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)
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)