def choose_project(request, token=None): if request.user.is_authenticated(): application = UserApplication() application.applicant = request.user.get_profile() else: application = get_object_or_404(UserApplication, secret_token=token, state__in=[Application.NEW, Application.OPEN], expires__gt=datetime.datetime.now()) institute = application.applicant.institute term_error = leader_list = project_error = project = q_project = leader = None terms = "" project_list = False qs = request.META['QUERY_STRING'] if request.method == 'POST': if 'project' in request.REQUEST: project = Project.objects.get(pk=request.POST['project']) if request.user.is_authenticated(): if request.user.get_profile() in project.users.all(): messages.info(request, "You are already a member of the project %s" % project.pid) return HttpResponseRedirect(reverse('kg_user_profile')) application.project = project application.state = Application.WAITING_FOR_LEADER application.submitted_date = datetime.datetime.now() application.needs_account = True application.save() send_account_request_email(application) return HttpResponseRedirect(reverse('kg_application_done', args=[application.secret_token])) else: return HttpResponseRedirect('%s?%s&error=true' % (reverse('user_choose_project'), qs)) if 'error' in request.REQUEST: project_error = True if 'leader_q' in request.REQUEST: q_project = False try: q_project = Project.active.get(pid__icontains=request.GET['leader_q']) except: pass leader_list = Person.active.filter(institute=institute, leaders__is_active=True).distinct() terms = request.GET['leader_q'].lower() if len(terms) >= 3: query = Q() for term in terms.split(' '): q = Q(user__username__icontains=term) | Q(user__first_name__icontains=term) | Q(user__last_name__icontains=term) query = query & q leader_list = leader_list.filter(query) if leader_list.count() == 1: leader = leader_list[0] project_list = leader.leaders.filter(is_active=True) leader_list = False elif leader_list.count() == 0 and not q_project: term_error = "No projects found." else: term_error = "Please enter at lease three characters for search." leader_list = False if 'leader' in request.REQUEST: leader = Person.objects.get(pk=request.GET['leader']) project_list = leader.leaders.filter(is_active=True) if project_list: if project_list.count() == 1: project = project_list[0] project_list = False return render_to_response( 'applications/choose_project.html', {'term_error': term_error, 'terms': terms, 'leader_list': leader_list, 'project_error': project_error, 'project_list': project_list, 'project': project, 'q_project': q_project, 'leader': leader, 'application': application}, context_instance=RequestContext(request))