def _get_projects(query, request_user=None): projects = Project.objects.filter(query) if not request_user.is_project_admin(): membs = request_user.projectmembership_set.any_accepted() memb_projects = membs.values_list("project", flat=True) is_memb = Q(id__in=memb_projects) owned = (Q(application__owner=request_user) | Q(application__applicant=request_user)) active = Project.o_state_q(Project.O_ACTIVE) projects = projects.filter(is_memb | owned | active) return projects.select_related( "application", "application__owner", "application__applicant")
def project_search(request): q = request.GET.get('q', '') form = ProjectSearchForm() q = q.strip() if request.method == "POST": form = ProjectSearchForm(request.POST) if form.is_valid(): q = form.cleaned_data['q'].strip() else: q = None if q is None: projects = Project.objects.none() else: accepted = request.user.projectmembership_set.filter( state__in=ProjectMembership.ACCEPTED_STATES).values_list('project', flat=True) projects = Project.objects.search_by_name(q) projects = projects.filter(Project.o_state_q(Project.O_ACTIVE)) projects = projects.exclude(id__in=accepted).select_related( 'application', 'application__owner', 'application__applicant') table = get_user_projects_table(projects, user=request.user, prefix="my_projects_") if request.method == "POST": table.caption = _('SEARCH RESULTS') else: table.caption = _('ALL PROJECTS') return object_list(request, projects, template_name='im/projects/project_list.html', extra_context={ 'form': form, 'is_search': True, 'q': q, 'table': table })
def project_search(request): q = request.GET.get('q', '') form = ProjectSearchForm() q = q.strip() if request.method == "POST": form = ProjectSearchForm(request.POST) if form.is_valid(): q = form.cleaned_data['q'].strip() else: q = None if q is None: projects = Project.objects.none() else: accepted = request.user.projectmembership_set.filter( state__in=ProjectMembership.ACCEPTED_STATES).values_list( 'project', flat=True) projects = Project.objects.search_by_name(q) projects = projects.filter(Project.o_state_q(Project.O_ACTIVE)) projects = projects.exclude(id__in=accepted).select_related( 'application', 'application__owner', 'application__applicant') table = get_user_projects_table(projects, user=request.user, prefix="my_projects_") if request.method == "POST": table.caption = _('SEARCH RESULTS') else: table.caption = _('ALL PROJECTS') return object_list( request, projects, template_name='im/projects/project_list.html', extra_context={ 'form': form, 'is_search': True, 'q': q, 'table': table })
def _project_state_query(val): if isinstance(val, list): states = [_get_project_state(v) for v in val] return Project.o_states_q(states) return Project.o_state_q(_get_project_state(val))