示例#1
0
文件: mixins.py 项目: scsi110/mes-1
 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)
示例#3
0
 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
     )
示例#5
0
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")
示例#6
0
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")
示例#7
0
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)
示例#8
0
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)