def searchmentee(request): # currently restricted to be used only by only used by coordinators or mentors # ASSUMPTION all mentees that are looking for projects is searchable (since mentees are not necessariy vouched and have not necessarily joined a group yet) role = findUserRole(request.user.email) if role == "": return redirect('/entrance/register/', context_instance=RequestContext(request)) if role == "mentee": return redirect('/matchmaker/myprojects', context_instance=RequestContext(request)) project ="" if request.method == 'POST': project = request.POST['project'] if request.method == 'POST' and 'searchterm' in request.POST: searched = 1; form = SearchMenteeForm(request.POST) if form.is_valid(): project = form.cleaned_data['project'] searchterm = form.cleaned_data['searchterm'] resultmenteeslist = Mentee.objects.filter(user_id__email__icontains=searchterm, is_looking=True) # advanced option: show mentees whose skills matches the projects' needs (warning, if user have not entered skills in mozillian, user will not be included in this search) if form.cleaned_data['matchskills']: projectskills = Project.objects.filter(pk=project)[0].skills_required #check each mentee to see if they have a single skill that matches one of the project's for mentee in resultmenteeslist: numskillsmatched = 0 try: for skill in getMozillianSkillsByUser(mentee.user_id.email): print skill if projectskills.lower().find(skill.lower()) != -1: numskillsmatched = numskillsmatched + 1 if numskillsmatched < 1: resultmenteeslist = resultmenteeslist.exclude(pk=mentee.pk) except Exception as e: error = "Skills from Mozillian currently not available. Showing search results not filtered by skills." return render_to_response('matchmaker/templates/menteefinder.html', {'resultmenteeslist': resultmenteeslist, 'form': form, 'searched': searched, 'error': error, 'project': project}, context_instance=RequestContext(request)) return render_to_response('matchmaker/templates/menteefinder.html', {'resultmenteeslist': resultmenteeslist, 'form': form, 'searched': searched, 'project': project}, context_instance=RequestContext(request)) if request.method =='POST' and 'selectedmentee' in request.POST: p = Project.objects.get(pk=request.POST['project']) m = Mentee.objects.get(user_id__email=request.POST['selectedmentee']) p.mentee_id = m p.save() return render_to_response('matchmaker/templates/menteefindersuccess.html', {'mentee': request.POST['selectedmentee'], 'project_name': p.project_name}, context_instance=RequestContext(request)) searched = 0; form = SearchMenteeForm(initial={'project': project}) resultmenteeslist = Mentee.objects.filter(is_looking=True) return render_to_response('matchmaker/templates/menteefinder.html', {'resultmenteeslist': resultmenteeslist, 'form': form, 'searched': searched, 'project': project}, context_instance=RequestContext(request))
def searchproject(request): # ASSUMPTION: By default, everyone can search and see everyone else's project (unless advanced search options/filters are used) role = findUserRole(request.user.email) if role == "": return redirect('/entrance/register/', context_instance=RequestContext(request)) if request.method == 'POST': searched = 1 form = SearchForm(request.POST) if form.is_valid(): searchterm = form.cleaned_data['searchterm'] if searchterm == '': resultprojectslist = Project.objects.all() else: resultprojectslist = Project.objects.filter( Q(division_id__division_name__icontains=searchterm) | Q(project_name__icontains=searchterm) | Q(project_description__icontains=searchterm) | Q(skills_required__icontains=searchterm) | Q(parent_project_id__project_name__icontains=searchterm)) divisionerror = "" skillserror = "" # advanced option: refine by if only in user's group (warning: if user is not in group, will return no results) if form.cleaned_data['mozilliangroups']: if role == 'coordinator': division = findDivisionsCorrespondingCoordinator( request.user.email)[0] resultprojectslist = resultprojectslist.filter( division_id=division.pk) else: try: userdivision = findDivisionsCorrespondingMentorMentee( request.user.email) resultprojectslist = resultprojectslist.filter( division_id__in=[item.pk for item in userdivision]) except Exception as e: divisionerror = "<li>Search result does not filter by divisions related to your Mozillian groups</li>" # advanced option: refine by showing non completed projects (default checked) if form.cleaned_data['noncompleted']: resultprojectslist = resultprojectslist.exclude( project_status_id__status="completed") # advanced option: only matching user's skills (warning, if user have not entered skills in mozillian, will return no results) if form.cleaned_data['matchskills']: try: filter = Q() for skill in getMozillianSkillsByUser(request.user.email): filter = filter | Q(skills_required__icontains=skill) resultprojectslist = resultprojectslist.filter(filter) except Exception as e: skillserror = "<li>Search result does not filter by your skills.</li>" print skillserror if divisionerror != "" or skillserror != "": error = "Mozillian is currently not available:<ul>" if divisionerror: error = error + divisionerror if skillserror: error = error + skillserror error = error + "</ul>" return render_to_response( 'matchmaker/templates/searchproject.html', { 'resultprojectslist': resultprojectslist, 'role': role, 'form': form, 'error': error, 'searched': searched }, context_instance=RequestContext(request)) return render_to_response( 'matchmaker/templates/searchproject.html', { 'resultprojectslist': resultprojectslist, 'role': role, 'form': form, 'searched': searched }, context_instance=RequestContext(request)) searched = 0 form = SearchForm() return render_to_response('matchmaker/templates/searchproject.html', { 'form': form, 'role': role, 'searched': searched }, context_instance=RequestContext(request))
def searchmentor(request): # currently restricted to be used only by only used by coordinators role = findUserRole(request.user.email) if role == "": return redirect('/entrance/register/', context_instance=RequestContext(request)) if role != "coordinator": return redirect('/matchmaker/myprojects', context_instance=RequestContext(request)) project = "" searched = 0 form = SearchMentorForm() resultmentorslist = Mentor.objects.none divisionmentorlist = Mentor.objects.none divisionslist = findDivisionsCorrespondingCoordinator(request.user.email) for division in divisionslist: try: divisionmentorlist = getVouchedMembersofDivision(division.pk) except Exception as e: error = "Unable to return list of mentors in the group relating to your division. Check if Mozillian is up." return render_to_response( 'matchmaker/templates/mentorfinder.html', { 'resultmentorslist': resultmentorslist, 'form': form, 'error': error, 'searched': searched, 'project': project }, context_instance=RequestContext(request)) if request.method == 'POST': project = request.POST['project'] if request.method == 'POST' and 'searchterm' in request.POST: searched = 1 form = SearchMentorForm(request.POST) if form.is_valid(): project = form.cleaned_data['project'] searchterm = form.cleaned_data['searchterm'] searchedmentorslist = Mentor.objects.filter( user_id__email__icontains=searchterm) # further filter based on only mentors that are in the coordinator's division resultmentorslist = searchedmentorslist.filter( pk__in=[item.pk for item in divisionmentorlist]) # advanced option: show mentors whose skills matches the projects' needs (warning, if user have not entered skills in mozillian, user will not be included in this search) if form.cleaned_data['matchskills']: projectskills = Project.objects.filter( pk=project)[0].skills_required #check each mentor to see if they have a single skill that matches one of the project's for mentor in resultmentorslist: numskillsmatched = 0 mentorskills = getMozillianSkillsByUser( mentor.user_id.email) print mentorskills try: for skill in mentorskills: if projectskills.lower().find(skill.lower()) != -1: numskillsmatched = numskillsmatched + 1 if numskillsmatched < 1: resultmentorslist = resultmentorslist.exclude( pk=mentor.pk) except Exception as e: error = "Skills from Mozillian currently not available. Showing search results not filtered by skills." return render_to_response( 'matchmaker/templates/mentorfinder.html', { 'resultmentorslist': resultmentorslist, 'form': form, 'searched': searched, 'error': error, 'project': project }, context_instance=RequestContext(request)) return render_to_response( 'matchmaker/templates/mentorfinder.html', { 'resultmentorslist': resultmentorslist, 'form': form, 'searched': searched, 'project': project }, context_instance=RequestContext(request)) if request.method == 'POST' and 'selectedmentor' in request.POST: p = Project.objects.get(pk=request.POST['project']) m = Mentor.objects.get(user_id__email=request.POST['selectedmentor']) p.mentor_id = m p.save() return render_to_response( 'matchmaker/templates/mentorfindersuccess.html', { 'mentor': request.POST['selectedmentor'], 'project_name': p.project_name }, context_instance=RequestContext(request)) searched = 0 form = SearchMentorForm(initial={'project': project}) resultmentorslist = divisionmentorlist return render_to_response('matchmaker/templates/mentorfinder.html', { 'resultmentorslist': resultmentorslist, 'form': form, 'searched': searched, 'project': project }, context_instance=RequestContext(request))
def searchproject(request): # ASSUMPTION: By default, everyone can search and see everyone else's project (unless advanced search options/filters are used) role = findUserRole(request.user.email) if role == "": return redirect('/entrance/register/', context_instance=RequestContext(request)) if request.method == 'POST': searched = 1; form = SearchForm(request.POST) if form.is_valid(): searchterm = form.cleaned_data['searchterm'] if searchterm == '': resultprojectslist = Project.objects.all() else: resultprojectslist = Project.objects.filter(Q(division_id__division_name__icontains=searchterm) | Q(project_name__icontains=searchterm) | Q(project_description__icontains=searchterm) | Q(skills_required__icontains=searchterm) | Q(parent_project_id__project_name__icontains=searchterm)) divisionerror = ""; skillserror = ""; # advanced option: refine by if only in user's group (warning: if user is not in group, will return no results) if form.cleaned_data['mozilliangroups']: if role == 'coordinator': division = findDivisionsCorrespondingCoordinator(request.user.email)[0] resultprojectslist = resultprojectslist.filter(division_id = division.pk) else: try: userdivision = findDivisionsCorrespondingMentorMentee(request.user.email) resultprojectslist = resultprojectslist.filter(division_id__in=[item.pk for item in userdivision]) except Exception as e: divisionerror = "<li>Search result does not filter by divisions related to your Mozillian groups</li>" # advanced option: refine by showing non completed projects (default checked) if form.cleaned_data['noncompleted']: resultprojectslist = resultprojectslist.exclude(project_status_id__status = "completed") # advanced option: only matching user's skills (warning, if user have not entered skills in mozillian, will return no results) if form.cleaned_data['matchskills']: try: filter = Q() for skill in getMozillianSkillsByUser(request.user.email): filter = filter | Q(skills_required__icontains = skill) resultprojectslist = resultprojectslist.filter(filter) except Exception as e: skillserror = "<li>Search result does not filter by your skills.</li>" print skillserror if divisionerror != "" or skillserror != "": error = "Mozillian is currently not available:<ul>" if divisionerror: error = error + divisionerror if skillserror: error = error + skillserror error = error + "</ul>" return render_to_response('matchmaker/templates/searchproject.html', {'resultprojectslist': resultprojectslist, 'role':role, 'form': form, 'error': error, 'searched': searched}, context_instance=RequestContext(request)) return render_to_response('matchmaker/templates/searchproject.html', {'resultprojectslist': resultprojectslist, 'role':role, 'form': form, 'searched': searched}, context_instance=RequestContext(request)) searched = 0; form = SearchForm() return render_to_response('matchmaker/templates/searchproject.html', {'form': form, 'role':role, 'searched': searched}, context_instance=RequestContext(request))
def searchmentor(request): # currently restricted to be used only by only used by coordinators role = findUserRole(request.user.email) if role == "": return redirect('/entrance/register/', context_instance=RequestContext(request)) if role != "coordinator": return redirect('/matchmaker/myprojects', context_instance=RequestContext(request)) project = "" searched = 0 form = SearchMentorForm() resultmentorslist = Mentor.objects.none divisionmentorlist = Mentor.objects.none divisionslist = findDivisionsCorrespondingCoordinator(request.user.email) for division in divisionslist: try: divisionmentorlist = getVouchedMembersofDivision(division.pk) except Exception as e: error = "Unable to return list of mentors in the group relating to your division. Check if Mozillian is up." return render_to_response('matchmaker/templates/mentorfinder.html', {'resultmentorslist': resultmentorslist, 'form': form, 'error': error, 'searched': searched, 'project': project}, context_instance=RequestContext(request)) if request.method == 'POST': project = request.POST['project'] if request.method == 'POST' and 'searchterm' in request.POST: searched = 1; form = SearchMentorForm(request.POST) if form.is_valid(): project = form.cleaned_data['project'] searchterm = form.cleaned_data['searchterm'] searchedmentorslist = Mentor.objects.filter(user_id__email__icontains=searchterm) # further filter based on only mentors that are in the coordinator's division resultmentorslist = searchedmentorslist.filter(pk__in = [item.pk for item in divisionmentorlist]) # advanced option: show mentors whose skills matches the projects' needs (warning, if user have not entered skills in mozillian, user will not be included in this search) if form.cleaned_data['matchskills']: projectskills = Project.objects.filter(pk=project)[0].skills_required #check each mentor to see if they have a single skill that matches one of the project's for mentor in resultmentorslist: numskillsmatched = 0 mentorskills = getMozillianSkillsByUser(mentor.user_id.email) print mentorskills; try: for skill in mentorskills: if projectskills.lower().find(skill.lower()) != -1: numskillsmatched = numskillsmatched + 1 if numskillsmatched < 1: resultmentorslist = resultmentorslist.exclude(pk=mentor.pk) except Exception as e: error = "Skills from Mozillian currently not available. Showing search results not filtered by skills." return render_to_response('matchmaker/templates/mentorfinder.html', {'resultmentorslist': resultmentorslist, 'form': form, 'searched': searched, 'error': error, 'project': project}, context_instance=RequestContext(request)) return render_to_response('matchmaker/templates/mentorfinder.html', {'resultmentorslist': resultmentorslist, 'form': form, 'searched': searched, 'project': project}, context_instance=RequestContext(request)) if request.method =='POST' and 'selectedmentor' in request.POST: p = Project.objects.get(pk=request.POST['project']) m = Mentor.objects.get(user_id__email=request.POST['selectedmentor']) p.mentor_id = m p.save() return render_to_response('matchmaker/templates/mentorfindersuccess.html', {'mentor': request.POST['selectedmentor'], 'project_name': p.project_name}, context_instance=RequestContext(request)) searched = 0; form = SearchMentorForm(initial={'project': project}) resultmentorslist = divisionmentorlist return render_to_response('matchmaker/templates/mentorfinder.html', {'resultmentorslist': resultmentorslist, 'form': form, 'searched': searched, 'project': project}, context_instance=RequestContext(request))