Esempio n. 1
0
def managedivision(request):
	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))
	
	
	division = findDivisionsCorrespondingCoordinator(request.user.email)[0]	

	
	if request.method == 'POST' and 'submit' in request.POST:
		form = DivisionGroupForm(request.POST, email=request.user.email)
		if form.is_valid():
			thedivision = Division.objects.get(pk=form.cleaned_data['division'])
			thedivision.mozillian_group = form.cleaned_data['mozilliangroup']
			thedivision.save()			
	
	try:
		testgroups = getMozillianGroupsbyUser(request.user.email)
		
	except Exception as e:
		error = "Cannot retrieve groups from Mozillian. Check to see if Mozillian is up."
		form = ""
		return render_to_response('matchmaker/templates/managedivision.html', {'form': form, 'division': division, 'error':error, 'role':role}, context_instance=RequestContext(request))

	form = DivisionGroupForm(initial={'division':division.pk}, email=request.user.email)
		
	return render_to_response('matchmaker/templates/managedivision.html', {'form': form, 'division': division, 'role':role}, context_instance=RequestContext(request))
Esempio n. 2
0
def myprojects(request):
    role = findUserRole(request.user.email)
    if role == "":
        return redirect('/entrance/register/',
                        context_instance=RequestContext(request))

    if role == "mentor":
        myprojectslist = Project.objects.filter(
            mentor_id__user_id__email=request.user.email)
    elif role == "mentee":
        myprojectslist = Project.objects.filter(
            mentee_id__user_id__email=request.user.email)
    elif role == "coordinator":
        divisionList = findDivisionsCorrespondingCoordinator(
            request.user.email)
        myprojectslist = Project.objects.filter(division_id__in=divisionList)

        if request.method == 'POST' and "approveproject" in request.POST:
            p = Project.objects.get(pk=request.POST['project'])
            c = Coordinator.objects.get(user_id__email=request.user.email)
            p.approved = True
            p.approved_by = c
            p.save()

    return render_to_response('matchmaker/templates/myprojects.html', {
        'myprojectslist': myprojectslist,
        'role': role
    },
                              context_instance=RequestContext(request))
Esempio n. 3
0
def managedivision(request):
	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))
	
	
	division = findDivisionsCorrespondingCoordinator(request.user.email)[0]	

	
	if request.method == 'POST' and 'submit' in request.POST:
		form = DivisionGroupForm(request.POST, email=request.user.email)
		if form.is_valid():
			thedivision = Division.objects.get(pk=form.cleaned_data['division'])
			thedivision.mozillian_group = form.cleaned_data['mozilliangroup']
			thedivision.save()			
	
	try:
		testgroups = getMozillianGroupsbyUser(request.user.email)
		
	except Exception as e:
		error = "Cannot retrieve groups from Mozillian. Check to see if Mozillian is up."
		form = ""
		return render_to_response('matchmaker/templates/managedivision.html', {'form': form, 'division': division, 'error':error, 'role':role}, context_instance=RequestContext(request))

	form = DivisionGroupForm(initial={'division':division.pk}, email=request.user.email)
		
	return render_to_response('matchmaker/templates/managedivision.html', {'form': form, 'division': division, 'role':role}, context_instance=RequestContext(request))
Esempio n. 4
0
def myprojects(request):
	role = findUserRole(request.user.email)	
	if role == "":
		return redirect('/entrance/register/', context_instance=RequestContext(request))
	
	if role == "mentor":
		myprojectslist = Project.objects.filter(mentor_id__user_id__email=request.user.email)
	elif role == "mentee":
		myprojectslist = Project.objects.filter(mentee_id__user_id__email=request.user.email)
	elif role == "coordinator":
		divisionList = findDivisionsCorrespondingCoordinator(request.user.email)
		myprojectslist = Project.objects.filter(division_id__in = divisionList)
		
		if request.method == 'POST' and "approveproject" in request.POST:
			p = Project.objects.get(pk=request.POST['project'])
			c = Coordinator.objects.get(user_id__email=request.user.email)
			p.approved= True
			p.approved_by = c
			p.save()

	return render_to_response('matchmaker/templates/myprojects.html', {'myprojectslist': myprojectslist, 'role': role}, context_instance=RequestContext(request))	
Esempio n. 5
0
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))
Esempio n. 6
0
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))
Esempio n. 7
0
def submitproject(request):
    role = findUserRole(request.user.email)
    if role == "":
        return redirect('/entrance/register/',
                        context_instance=RequestContext(request))
    # presenting and inputing forms
    if role == "coordinator":
        if request.method == 'POST':
            submitform = CoordinatorProjectForm(request.POST)
            if submitform.is_valid():
                # assigning all values from form to the object newproject
                newproject = submitform.save(commit=False)

                # allow coordinator to approve during submission
                if ("approved" in request.POST):
                    currcoordinator = Coordinator.objects.get(
                        user_id__email=request.user.email)
                    newproject.approved_by = currcoordinator

                # ASSUMPTION that terms have been agreed on already
                newproject.terms_agree = True

                newproject.save()
                return redirect('/matchmaker/',
                                context_instance=RequestContext(request))
        else:
            submitform = CoordinatorProjectForm()
            # ASSUMPTION: coordinators can only submit projects to the division they are coordinating for
            divisionlist = findDivisionsCorrespondingCoordinator(
                request.user.email)
            submitform.fields["division_id"].queryset = divisionlist

            # ASSUMPTION: parent project must be not completed, so user can only select from a list of non-completed projectsZ
            parentprojectlist = Project.objects.exclude(
                project_status_id__status="completed")
            submitform.fields["parent_project_id"].queryset = parentprojectlist

    else:
        if request.method == 'POST':
            submitform = MentorMenteeProjectForm(request.POST)
            if submitform.is_valid():
                # assigning all values from form to the object newproject
                newproject = submitform.save(commit=False)

                # setting default status as submitted
                defaultProjectstatus = Projectstatus.objects.get(
                    status="submitted")
                newproject.project_status_id = defaultProjectstatus

                # setting default mentor if logged in user is a mentor
                if role == "mentor":
                    mentor = Mentor.objects.get(
                        user_id__email=request.user.email)
                    newproject.mentor_id = mentor
                elif role == "mentee":
                    mentee = Mentee.objects.get(
                        user_id__email=request.user.email)
                    newproject.mentee_id = mentee

                newproject.save()
                return redirect('/matchmaker/',
                                context_instance=RequestContext(request))
        else:
            submitform = MentorMenteeProjectForm()
            # ASSUMPTION: mentor can only submit projects to a division with mozillian group they belong to, if they do not belong to a group, they cannot submit a project yet
            if role == "mentor":
                divisionlist = findDivisionsCorrespondingMentorMentee(
                    request.user.email)

                if len(divisionlist) > 0:
                    submitform.fields["division_id"].queryset = divisionlist
                else:
                    return render_to_response(
                        'matchmaker/templates/submitproject.html', {
                            'submitform': submitform,
                            'cannotsubmit': 1,
                            'role': role,
                        },
                        context_instance=RequestContext(request))

            # ASSUMPTION: parent project must be not completed, so user can only select from a list of non-completed projects, but parent projects can be from any division
            parentprojectlist = Project.objects.exclude(
                project_status_id__status="completed")
            submitform.fields["parent_project_id"].queryset = parentprojectlist

    return render_to_response('matchmaker/templates/submitproject.html', {
        'submitform': submitform,
        'role': role,
    },
                              context_instance=RequestContext(request))
Esempio n. 8
0
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))
Esempio n. 9
0
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))
Esempio n. 10
0
def submitproject(request):
	role = findUserRole(request.user.email)	
	if role == "":
		return redirect('/entrance/register/', context_instance=RequestContext(request))
	# presenting and inputing forms
	if role == "coordinator":
		if request.method == 'POST':
			submitform = CoordinatorProjectForm(request.POST)
			if submitform.is_valid():
				# assigning all values from form to the object newproject
				newproject = submitform.save(commit=False)
				
				# allow coordinator to approve during submission
				if ("approved" in request.POST):
					currcoordinator = Coordinator.objects.get(user_id__email=request.user.email)
					newproject.approved_by = currcoordinator
				
				# ASSUMPTION that terms have been agreed on already
				newproject.terms_agree = True
				
				newproject.save()
				return redirect('/matchmaker/', context_instance=RequestContext(request))		
		else:
			submitform = CoordinatorProjectForm()
			# ASSUMPTION: coordinators can only submit projects to the division they are coordinating for
			divisionlist = findDivisionsCorrespondingCoordinator(request.user.email)
			submitform.fields["division_id"].queryset = divisionlist
			
			# ASSUMPTION: parent project must be not completed, so user can only select from a list of non-completed projectsZ
			parentprojectlist = Project.objects.exclude(project_status_id__status="completed")
			submitform.fields["parent_project_id"].queryset = parentprojectlist
			
	else:
		if request.method == 'POST':
			submitform = MentorMenteeProjectForm(request.POST)
			if submitform.is_valid():
				# assigning all values from form to the object newproject
				newproject = submitform.save(commit=False)
				
				# setting default status as submitted
				defaultProjectstatus = Projectstatus.objects.get(status="submitted")
				newproject.project_status_id = defaultProjectstatus
				
				
				# setting default mentor if logged in user is a mentor		
				if role == "mentor":
					mentor = Mentor.objects.get(user_id__email=request.user.email)				
					newproject.mentor_id = mentor
				elif role == "mentee":
					mentee = Mentee.objects.get(user_id__email=request.user.email)
					newproject.mentee_id = mentee
								
				newproject.save()
				return redirect('/matchmaker/', context_instance=RequestContext(request))
		else:
			submitform = MentorMenteeProjectForm()
			# ASSUMPTION: mentor can only submit projects to a division with mozillian group they belong to, if they do not belong to a group, they cannot submit a project yet
			if role == "mentor":
				divisionlist = findDivisionsCorrespondingMentorMentee(request.user.email)
				
				if len(divisionlist) > 0: 	
					submitform.fields["division_id"].queryset = divisionlist
				else:
					return render_to_response('matchmaker/templates/submitproject.html', {'submitform': submitform, 'cannotsubmit': 1, 'role':role,}, context_instance=RequestContext(request))

			# ASSUMPTION: parent project must be not completed, so user can only select from a list of non-completed projects, but parent projects can be from any division
			parentprojectlist = Project.objects.exclude(project_status_id__status="completed")
			submitform.fields["parent_project_id"].queryset = parentprojectlist
			
	return render_to_response('matchmaker/templates/submitproject.html', {'submitform': submitform, 'role':role,}, context_instance=RequestContext(request))