code: def new_application(request):
      
      # Note default kgapplications/index.html will display error if user logged
      # in.
      if not settings.ALLOW_REGISTRATIONS:
          return render(
              template_name='kgapplications/project_common_disabled.html',
              context={},
              request=request)
  
      roles = {'is_applicant', 'is_authorised'}
  
      if not request.user.is_authenticated:
          attrs, _ = saml.parse_attributes(request)
          defaults = {'email': attrs['email']}
          form = forms.UnauthenticatedInviteUserApplicationForm(
              request.POST or None, initial=defaults)
          if request.method == 'POST':
              if form.is_valid():
                  email = form.cleaned_data['email']
                  applicant, existing_person = get_applicant_from_email(email)
  
                  # If applicant is None then there were multiple persons found.
                  # This should never happen as the
                  # UnauthenticatedInviteUserApplicationForm form disallows
                  # existing users applying unauthenticated.
                  assert applicant is not None
                  # Similarly existing_person should always be False here.
                  assert not existing_person
  
                  application = ProjectApplication()
                  application.applicant = applicant
                  application.save()
  
                  state_machine = get_application_state_machine()
                  state_machine.start(request, application, roles)
                  # we do not show unauthenticated users the application at this
                  # stage.
                  url = reverse('index')
                  return HttpResponseRedirect(url)
          return render(
              template_name='kgapplications/'
              'project_common_invite_unauthenticated.html',
              context={'form': form, },
              request=request)
      else:
          if request.method == 'POST':
              person = request.user
  
              application = ProjectApplication()
              application.applicant = person
              application.save()
  
              state_machine = get_application_state_machine()
              response = state_machine.start(request, application, roles)
              return response
          return render(
              template_name='kgapplications/'
              'project_common_invite_authenticated.html',
              context={},
              request=request)
docs: A new application by a user to start a new project.