I’m working with a university that needs students to apply for themselves, without a parent or family. This has come up before: arman’s recent thread Admissions and billing for adult students, and in 2020 Gibbon with no parents and fee invoices to students, where Ross mentioned he’d welcome an implementation. Before proposing any code, I wanted to share what I found and ask how you’d like it to fit with your plans for the Admissions module.
What works today with configuration alone (v30.0.01)
A copy of the Sample Application Form with the Family/Parent pages removed and Create Parents turned off submits and accepts cleanly. Create Student, Create Family (it names the family after the student), Create Invoicee and the acceptance email all work without parent fields.
Where the parent assumption remains
- Processing fee:
PayProcessingFee::verify()requiresparent1email, so it can never run on a student-only form. - Submission email: template data only uses Parent 1’s names, so a student-only form greets the applicant “Dear ,”.
- Form Builder requires a Parent Acceptance Template, even on forms with no parent fields.
- Acceptance only ever links the admissions account to Parent 1, so a student’s account stays linked to nobody (or only to a family with no adults).
- Finance: invoice recipients come only from family adults, company emails or CC Self. The student is never a candidate, so invoices to a student with no family have nobody to go to. The Company workaround works, but it duplicates the student’s own details into four required fields.
What I built and tested on v30 (offered as evidence, not as a finished design)
The rule throughout: new behaviour only applies when the form has no parent fields, so parent forms behave as before.
- Phase 1: the processing fee and submission email use the student when there is no parent; the parent template is optional; “inform parents” only appears on forms with parent fields.
- Phase 2: on acceptance, the admissions account is linked to the student, and the student’s email is pre-filled from the account email. The account’s person is never treated as Parent 1 when the form has no parent fields and that person is a Student. Without that guard, a returning student would be recorded as their own parent.
- Tested end to end on the v30.0.01 release bundle, including control runs on stock v30. Parent-form regression checks pass in all runs.
Findings, patches and tests: GitHub - tiekubd/gibbon-student-self-application: Letting students apply for themselves in Gibbon: findings and tested patches for v30.0.01 · GitHub
Questions for you
- The roadmap mentions pre-application and post-application forms. How should “applying as a student” fit with that design?
- In May 2025 you mentioned making the admissions account email optional. Is that still the direction? Our changes simply do nothing when there’s no account email.
- A student’s second application currently creates a second student record. Would you welcome reusing the linked student on acceptance, the way returning parents are handled?
- Finance: would an
invoiceTo = 'Student'option, reading name, address and email live fromgibbonPerson, be acceptable? Or would you prefer another approach? (The invoice queries also require a form group, which is a separate question.)
What I’m offering
To rework this against the development branch to your structure (for example, a single gateway query, as you suggested on #2121), split into small PRs. Anything with new strings would naturally target v32.
Separately, a small bug I hit along the way: in SendSubmissionEmail, AddAddress($formData->has('parent1email')) passes true instead of the address, so Parent 1 doesn’t receive the confirmation copy when they aren’t the account email. It’s still in the development branch. I’m happy to send a one-line PR. (I also noticed the house assignment issue, already fixed in #2121. Thanks!)
Thanks,
Tieku