예제 #1
0
    def clean(self, value):
        if isinstance(value, Person):
            return self.__check_email(value)
        else:
            if not self.required and not value:
                return None

            try:
                return self.__check_email(Person.objects.get(emplid=value))
            except (ValueError, Person.DoesNotExist):
                # try to find the emplid in SIMS if they are missing from our DB
                if not value:
                    raise forms.ValidationError("Could not find this emplid.")

                if not value.isdigit(
                ):  # doesn't look like an emplid: try it as a userid
                    try:
                        return self.__check_email(
                            Person.objects.get(userid=value))
                    except Person.DoesNotExist:
                        value = userid_to_emplid(value)
                        if not value:
                            raise forms.ValidationError(
                                "Could not find this emplid.")

                try:
                    persondata = find_person(value)
                except SIMSProblem as e:
                    raise forms.ValidationError(
                        "Problem locating person in SIMS: " + str(e))
                if not persondata:
                    raise forms.ValidationError("Could not find this emplid.")

                # we found this emplid in SIMS: raise validation error, but offer to add next time.
                confirm = self.fieldname + '_confirm'
                checkemplid = self.fieldname + '_emplid'
                if confirm in self.formdata and checkemplid in self.formdata and self.formdata[
                        checkemplid] == value:
                    # new person was presented in the form last time, and they confirmed import
                    p = add_person(value)
                    return self.__check_email(p)
                else:
                    self.widget.found_sims = True
                    self.widget.sims_data = persondata
                    raise forms.ValidationError(
                        "Person is new to this system: please confirm their import."
                    )
예제 #2
0
파일: views.py 프로젝트: avacariu/coursys
def XXX_sims_person_search(request):
    # check permissions
    roles = Role.all_roles(request.user.username)
    allowed = set(['ADVS', 'ADMN', 'GRAD', 'FUND'])
    if not(roles & allowed):
        # doesn't have any allowed roles
        return ForbiddenResponse(request, "Not permitted to do person search.")
    
    if 'emplid' not in request.GET:
        return ForbiddenResponse(request, "Must provide 'emplid' query.")
    emplid = request.GET['emplid']
    response = HttpResponse(content_type='application/json')

    data = find_person(emplid)
    
    json.dump(data, response, indent=1)
    return response
예제 #3
0
def XXX_sims_person_search(request):
    # check permissions
    roles = Role.all_roles(request.user.username)
    allowed = set(['ADVS', 'ADMN', 'GRAD', 'FUND'])
    if not (roles & allowed):
        # doesn't have any allowed roles
        return ForbiddenResponse(request, "Not permitted to do person search.")

    if 'emplid' not in request.GET:
        return ForbiddenResponse(request, "Must provide 'emplid' query.")
    emplid = request.GET['emplid']
    response = HttpResponse(content_type='application/json')

    data = find_person(emplid)

    json.dump(data, response, indent=1)
    return response
예제 #4
0
파일: views.py 프로젝트: avacariu/coursys
def sims_search(request):
    emplid = request.GET.get('emplid', None)
    data = None
    if emplid:
        try:
            emplid = int(emplid.strip())
            try:
                data = find_person(emplid)
            except SIMSProblem as e:
                data = {'error': unicode(e)}
        except ValueError:
            # not an integer, so not an emplid to search for
            data = None

    if not data:
        data = {'error': 'could not find person in SIMS database'}

    response = HttpResponse(content_type='application/json')
    json.dump(data, response)
    return response
예제 #5
0
파일: forms.py 프로젝트: avacariu/coursys
    def clean(self, value):
        if isinstance(value, Person):
            return value
        else:
            if not self.required and not value:
                return None

            try:
                return Person.objects.get(emplid=value)
            except (ValueError, Person.DoesNotExist):
                # try to find the emplid in SIMS if they are missing from our DB
                if not value:
                    raise forms.ValidationError, "Could not find this emplid."

                if not value.isdigit(): # doesn't look like an emplid: try it as a userid
                    try:
                        return Person.objects.get(userid=value)
                    except Person.DoesNotExist:
                        value = userid_to_emplid(value)
                        if not value:
                            raise forms.ValidationError, "Could not find this emplid."

                try:
                    persondata = find_person(value)
                except SIMSProblem, e:
                    raise forms.ValidationError, "Problem locating person in SIMS: " + unicode(e)
                if not persondata:
                    raise forms.ValidationError, "Could not find this emplid."
                
                # we found this emplid in SIMS: raise validation error, but offer to add next time.
                confirm = self.fieldname+'_confirm'
                checkemplid = self.fieldname+'_emplid'
                if confirm in self.formdata and checkemplid in self.formdata and self.formdata[checkemplid] == value:
                    # new person was presented in the form last time, and they confirmed import
                    p = add_person(value)
                    return p
                else:
                    self.widget.found_sims = True
                    self.widget.sims_data = persondata
                    raise forms.ValidationError, "Person is new to this system: please confirm their import."