def redirect_to_login(self): return handle_redirect_to_login( self.request, redirect_field_name=self.redirect_field_name, login_url=self.get_login_url(), next_url=self.get_next_url(), )
def _wrapped_view(request, *args, **kwargs): if request.user.is_authenticated(): return view_func(request, *args, **kwargs) return handle_redirect_to_login( request, redirect_field_name=redirect_field_name, login_url=login_url)
def _wrapped_view(request, *args, **kwargs): if request.user.is_authenticated(): return view_func(request, *args, **kwargs) return handle_redirect_to_login( request, redirect_field_name=redirect_field_name, login_url=login_url )
def check_team_allowed(request): allowed = [ r"^/teams/[\w-]+/account/login/$", r"^/teams/[\w-]+/account/signup/", r"^/teams/[\w-]+/ajax/username-validation/", r"^/teams/[\w-]+/account/password/reset/", ] for allow_re in allowed: if re.search(allow_re, request.path): return None return handle_redirect_to_login(request, redirect_field_name="next")
def task_view(request, task_id): # Получить контекст запроса context = RequestContext(request) try: task = get_object_or_404(Task, pk=task_id) user_can_comment = False user_can_work = False user_can_admin = False user_comment_actions = {} ual = task.project.user_access_level(request.user) if ual == PROJECT_ACCESS_NONE: # если пользователь не авторизован, то доступ только к открытым проектам и только на просмотр if (request.user is None) or (not request.user.is_authenticated): return handle_redirect_to_login( request, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None) else: raise Http404() else: if ual == PROJECT_ACCESS_WORK: user_can_work = True user_can_comment = True else: if ual == PROJECT_ACCESS_ADMIN: user_can_work = True user_can_admin = True user_can_comment = True else: if ual == PROJECT_ACCESS_VIEW and task.get_opened( ) and request.user.is_authenticated: user_can_comment = True # user has an access, so go close all unreaded notifications about this task if (not request.user is None) and (request.user.is_authenticated): task_type = ContentType.objects.get(app_label='project', model='task') Close_All_Unread_Notifications_For_Task_For_One_User( request.user, task_type, task.id) comments = task.get_comments() # user should see only available tasks - to prevent 404 if attempting to follow the link subtasks = TaskLink.objects.filter(maintask=task).filter( subtask__project__in=GetAvailableProjectList(request.user)) maintasks = TaskLink.objects.filter(subtask=task) task_checklist = TaskCheckList.objects.filter(parenttask=task) profiles = task.get_profiles().order_by('profile__profile_type') domains = Task2Domain.objects.filter(task=task) if task.state == TASK_STATE_NEW: user_comment_actions = TASK_OPEN_DETAIL_STATE_TITLES else: user_comment_actions = {} wanted_detailed_task_state = 0 # доступ списку коментов открыт, а форму показывать не надо if request.user.is_authenticated: if request.method == "POST": if 'submit' in request.POST: # добавить коментарий wanted_task_state = TASK_STATE_NEW else: if 'submit_and_close' in request.POST: wanted_task_state = TASK_STATE_CLOSED else: if 'submit_and_reopen' in request.POST: wanted_task_state = TASK_STATE_NEW else: # анализ подвидов состояний some_state_found = False for s in TASK_OPEN_DETAIL_STATE_TITLES: if str(s) in request.POST: some_state_found = True wanted_task_state = TASK_STATE_NEW wanted_detailed_task_state = s if not some_state_found: raise Exception("Inknown task state!") task_comment_form = TaskCommentForm(request.POST) if task_comment_form.is_valid(): c = task_comment_form.save(commit=False) c.parenttask = task if (strip_tags(c.comment) == '') and (wanted_detailed_task_state > 0): c.comment = TASK_OPEN_DETAIL_STATE_TITLES[ wanted_detailed_task_state] with transaction.atomic(), reversion.create_revision(): reversion.set_user(request.user) c.set_change_user(request.user) c.save() if (wanted_task_state != task.state) or (wanted_detailed_task_state > 0): task.set_task_state(request.user, wanted_task_state, wanted_detailed_task_state) return HttpResponseRedirect(task.get_absolute_url()) else: task_comment_form = TaskCommentForm() else: task_comment_form = None # Записать список в словарь context_dict = { 'task': task, 'comments': comments, 'subtasks': subtasks, 'profiles': profiles, 'domains': domains, 'maintasks': maintasks, 'task_checklist': task_checklist, 'task_comment_form': task_comment_form, 'user_can_work': user_can_work, 'user_can_admin': user_can_admin, 'user_can_comment': user_can_comment, 'user_comment_actions': user_comment_actions, } except Task.DoesNotExist: # На случай, если объекта нет - ничего не делаем, пусть об этом думает шаблон pass # Рендерить ответ return render(request, 'project/task.html', context_dict)
def get_project_view(request, project_id, arg_task_filter=TASK_FILTER_OPEN, arg_page=PROJECT_PAGE_TITLE, arg_domain_id=None): # Получить контекст запроса context = RequestContext(request) project = get_object_or_404(Project, pk=project_id) user_can_work = False user_can_admin = False user_can_join = False show_file_page = VCS_Configured() ual = project.user_access_level(request.user) if ual == PROJECT_ACCESS_NONE: # если пользователь не авторизован, то доступ только к открытым проектам и только на просмотр if (request.user is None) or (not request.user.is_authenticated): return handle_redirect_to_login( request, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None) else: raise Http404() else: if ual == PROJECT_ACCESS_WORK: user_can_work = True else: if ual == PROJECT_ACCESS_ADMIN: user_can_work = True user_can_admin = True user_can_join = project.can_join(request.user) milestones = None repo_info = None repo_list = None repo_server_is_configured = False members = None filter_type = '' task_filter = None tasks = None repo_rel_path = None domains = None selected_domain = None last_actions = None if arg_page == PROJECT_PAGE_MILESTONES: milestones = Get_Milestone_Report_for_Project(project) if arg_page == PROJECT_PAGE_FILES: if VCS_Configured(): repo_server_is_configured = True # относительный путь - какую папку смотрим repo_rel_path = request.GET.get('path', '') if project.have_repo(): s = project.repo_name res_info = Get_Info_For_Repo_Name( s, settings.REPO_SVN.get('SVN_ADMIN_USER'), settings.REPO_SVN.get('SVN_ADMIN_PASSWORD')) if res_info[0] == VCS_REPO_SUCCESS: repo_info = res_info[1] res_list = Get_List_For_Repo_Name( s, repo_rel_path, settings.REPO_SVN.get('SVN_ADMIN_USER'), settings.REPO_SVN.get('SVN_ADMIN_PASSWORD')) if res_list[0] == VCS_REPO_SUCCESS: repo_list = res_list[1] # после обращения - добавим / для построения списка нижележащих путей if repo_rel_path: repo_rel_path = repo_rel_path + '/' else: messages.error(request, "Can't connect to repo!") else: messages.error(request, "Repo server is not configured!") # prepare tasks only for title page if arg_page == PROJECT_PAGE_TITLE: base_tasks = project.Get_Tasks() if arg_task_filter == TASK_FILTER_OPEN: tasks = base_tasks.filter(state=TASK_STATE_NEW) else: if arg_task_filter == TASK_FILTER_CLOSED: filter_type = 'filter_task_closed' tasks = base_tasks.filter(state=TASK_STATE_CLOSED) else: if arg_task_filter == TASK_FILTER_SEARCH: filter_type = 'filter_task_search' task_filter = TaskFilter(request.GET, queryset=base_tasks) task_filter.filters[ 'milestone'].queryset = Milestone.objects.filter( project=project) p_list = project.GetFullMemberProfiles() task_filter.filters['holder'].queryset = p_list if task_filter.Search_is_new(): tasks = None else: tasks = task_filter.qs else: if arg_task_filter == TASK_FILTER_BY_DOMAIN: filter_type = 'filter_task_by_domain' if arg_domain_id: tasks = base_tasks.filter( task2domain__taskdomain=arg_domain_id) selected_domain = int(arg_domain_id) else: # without domains tasks = base_tasks.filter( task2domain__taskdomain=None) selected_domain = None domains = TaskDomain.objects.all() else: if arg_task_filter == TASK_FILTER_ASSIGNED: filter_type = 'filter_task_assigned' tasks = base_tasks.filter( state=TASK_STATE_NEW ).filter( profile2task__priority= TASK_PROFILE_PRIORITY_RESPONSIBLE).distinct() else: if arg_task_filter == TASK_FILTER_UNASSIGNED: filter_type = 'filter_task_unassigned' tasks = base_tasks.filter( state=TASK_STATE_NEW).exclude( profile2task__priority= TASK_PROFILE_PRIORITY_RESPONSIBLE) else: raise Http404 if arg_page == PROJECT_PAGE_MEMBERS: members = project.GetMemberList() if arg_page == PROJECT_PAGE_LAST_ACTIONS: last_actions = TaskComment.objects.filter( parenttask__project=project).order_by('-modified_at')[:10] if arg_page == PROJECT_PAGE_REPORTS: pass # Записать список в словарь context_dict = { 'project': project, 'members': members, 'milestones': milestones, 'tasks': tasks, 'filter': task_filter, 'filter_type': filter_type, 'user_can_work': user_can_work, 'user_can_join': user_can_join, 'user_can_admin': user_can_admin, 'show_page': PROJECT_PAGE_FILTER[arg_page], 'repo_server_is_configured': repo_server_is_configured, 'repo_info': repo_info, 'repo_list': repo_list, 'repo_rel_path': repo_rel_path, 'show_file_page': show_file_page, 'domains': domains, 'selected_domain': selected_domain, 'last_actions': last_actions, } # Рендерить ответ return render(request, 'project/project.html', context_dict)