Run a school from the admin panel: the structure (schools, academic years, classes, subjects, rooms), the people (students, guardians, teachers, staff), and everything that happens between them: enrollments, attendance, grades, exams, assignments, the timetable, behavior, health records, documents, fees and messages. Families follow their own children through a portal on the front end.
One Record per Person
A student, a guardian, a teacher and a staff member are all user accounts with a role. Their identity lives once, in the core user table, and the school data hangs off it.
An Academic Year That Holds
Terms, classes, enrollments, exams and grades all hang off an academic year, so last year’s figures stay exactly where you left them.
The Student File
One page per student gathering guardians, enrollments, attendance, grades, behavior, health, documents and fees.
A Portal for Families
Guardians sign in and see only their own children: attendance, published grades, the report card, assignments, the timetable and their messages.
Use Cases
A primary or secondary school
The case everything here was shaped around.
- Build the structure once: grade levels, classes, subjects, rooms.
- Enroll each student into a class for the year and take attendance from the class register.
- Publish grades and the report card only when they are ready, and let parents read them from home.
A group of schools under one roof
Several campuses, one installation.
- Each school carries its own academic years, grade levels, subjects, rooms, students and staff.
- Reports and lists filter by school, so a campus head sees their own numbers.
- People and documents stay attached to the school they belong to.
A training centre or university department
Short programmes with the same moving parts under different names.
- Use grade levels for cohorts and classes for groups.
- Weight exams and assignments against each other for the final mark.
- Invoice tuition through the Billing add-on and follow what is still outstanding.
A school that wants parents to stop phoning
Most of what a parent calls about is already in the system.
- Attendance, grades, assignments and the timetable are one sign-in away.
- Documents you mark visible (certificates, transcripts, reports) are downloadable from the portal.
- Announcements go out to a class, a grade level or the whole school in one message.
Requirements
- Larapen CMS v1.0.0 or later
- PHP 8.3+
- MySQL 8.0+
- Front-end user accounts enabled, guardians sign in to reach the portal
- The public storage symlink (
php artisan storage:link), standard on every install, for photos, documents and attachments
Installation
Step 1: Upload the Add-on
In the admin panel, go to Admin → Extensions → Add-ons and click the Upload Add-on button. Select the add-on’s ZIP file: the system extracts it automatically and the add-on appears in the installed add-ons list.
Step 2: Activate the Add-on
Find School Management in the list and click Activate. Its migrations run,
its permissions are registered, and the student, teacher, staff and
guardian roles are created if they do not already exist. You are asked for the purchase code
the first time.
Step 3: Run Migrations
Activation runs the add-on’s migrations for you. If you installed the files by hand, or an update ships new tables, run them from the project root:
php artisan migrate
Pending migrations run once and are skipped on later calls.
Step 4: Clear Caches
php artisan config:clear php artisan route:clear php artisan view:clear
Purchase Code (License Key)
School Management is sold as a separate product, so it has its own purchase code (license key), distinct from the purchase code of the main application and from the one of every other add-on. You are asked for it when you activate School Management in Admin panel → Add-ons.
Our products are sold on three platforms. The way you receive a purchase code depends on where you bought the product.
| Platform / Marketplace | How you get the purchase code | Where to find it again |
|---|---|---|
| bedigit.com Store In-site purchase (Shop) |
Generated automatically when the order is paid, then sent by email, either in its own license email, or inside the order confirmation email. | My Account → My Licenses on bedigit.com |
| Gumroad | Created as soon as Gumroad notifies us of the sale, then sent in a separate email, in addition to the Gumroad receipt. | The license email, your Gumroad Library, and My Account → My Licenses on bedigit.com |
| Envato Market CodeCanyon |
Issued by Envato, not by us, and never sent by email: you download it yourself from your Envato account. | Envato account → Downloads → License certificate & purchase code |
1. bedigit.com Store (in-site purchase)
- As soon as the order’s payment status becomes Paid, a license key is generated automatically for every licensed item in the order (one key per purchased unit: buying 3 units gives 3 distinct keys).
- It is emailed to the address used on the order, either in a dedicated license email or inside the order confirmation email. Check your inbox and your spam / junk folder.
- The key stays available in your account under My Account → My Licenses. Keys are masked in the list; open the license detail page to reveal and copy the full key, see the domains it is activated on, and deactivate a domain to free an activation slot.
- The matching invoice is under My Account → My Orders.
2. Gumroad
- A Gumroad purchase produces two separate emails: the Gumroad receipt (sent by Gumroad, giving access to the files) and a license key email (sent by bedigit.com) that contains your purchase code.
- The license key email is generated as soon as Gumroad notifies us of the sale, so it normally arrives within seconds of the payment. Here too, check your inbox and your spam / junk folder.
- When the Gumroad product uses Gumroad’s own license-key feature, the same key also appears in your Gumroad receipt and under Library → your purchase on gumroad.com.
- Use the same email address on bedigit.com as on Gumroad: your keys are then linked to your account automatically and listed under My Account → My Licenses, even if you register after the purchase. You can also add a Gumroad key manually from My Account → My Gumroad Licenses.
3. Envato Market (CodeCanyon)
- Envato purchase codes are issued and delivered by Envato Market, never emailed by us, so there is nothing to look for in your spam folder: you retrieve the code from your Envato account.
- Log in to your Envato / CodeCanyon account, open the Downloads page, find the item, and choose License certificate & purchase code from the Download dropdown. The code is written in that certificate.
- An Envato purchase code looks like
12345678-90ab-cdef-1234-567890abcdef(8-4-4-4-12 characters). It never changes, and renewing item support does not issue a new one. - Official Envato article: Where Is My Purchase Code?
Quick Start
Ten minutes to a school you can take attendance in. Everything below is under Admin → School.
- Create the school. Structure → Schools → Add. Name, code, address and contact details.
- Open an academic year. Structure → Academic Years. Give it a name (“2026–2027”), a start and an end date, and mark it current.
- Add its terms. Structure → Terms. One row per trimester, semester or quarter.
- Describe the levels. Structure → Grade Levels, then Classes: one class per group of students for the year.
- List the subjects and the rooms. Structure → Subjects and Rooms.
- Add a teacher. Teachers → Add. A user account is created for them with the
teacherrole. - Add a student. Students → Add. An admission number is generated if you leave it empty.
- Link a guardian. Guardians → Add, then link the student to them and say what the relationship is.
- Enroll the student. Enrollments → Add: student, class, academic year.
- Take attendance. Attendance → Take attendance: pick the class and the date, and tick the register.
Schools
Admin → School → Structure → Schools. A school is the top-level container: academic years, grade levels, subjects, rooms, students, teachers and staff all belong to one.
| Field | What it is for |
|---|---|
| Name | Shown everywhere a school is named. A slug is derived from it. |
| Code | A short identifier of your own (up to 32 characters), handy on reports and exports. |
| Logo | Used on the school’s own pages. |
| Address, city, state, country, postal code | The postal address. |
| Phone, email, website | Contact details. |
| Active | An inactive school stays in the database with all its data, and is kept out of the pickers. |
| Position | Orders the list when you run several schools. |
Running a single school is the common case: create it once and never look at this screen again. Several schools are supported for groups and campuses; every list that can be filtered by school offers the filter.
Academic Years & Terms
Structure → Academic Years and Structure → Terms.
Academic years
An academic year belongs to a school and carries a name, a start date, an end date and a status (planned, active or closed). Exactly one year per school is the current one: use Set as current on the row to move it. Names are unique within a school, so “2026–2027” can exist once per campus.
Classes, enrollments, exams and grades all reference an academic year. That is what keeps last year’s register readable after this year has started: nothing is overwritten, it simply belongs to another year.
Terms
A term belongs to an academic year and has a name, a start and an end date, a position, and a current flag. Terms are what grades, exams and assignments are grouped by on the report card, so create them before you start recording marks. Trimesters, semesters and quarters are all just terms with different names.
Grade Levels & Classes
Grade levels
Structure → Grade Levels. A grade level is a stage of schooling (Year 7, Grade 3, Sixième, Freshman) with a translatable name, a short code, an optional minimum and maximum age, and a position that orders them. They belong to a school, so two campuses can name their levels differently.
Classes
Structure → Classes. A class is one group of students, for one academic year, at one grade level.
| Field | What it is for |
|---|---|
| Academic year | The year the class runs in. A new year means new classes. |
| Grade level | The stage this class sits at. |
| Name and code | “7A”, “Grade 3: Blue”, and a short code for lists. |
| Homeroom teacher | The teacher who owns the class. Optional. |
| Room | The room the class is based in. Optional. |
| Capacity | How many students the class is meant to hold. |
| Active | Keeps a finished class out of the pickers without deleting it. |
Teachers are attached to classes per subject, so the same teacher can take mathematics in three classes and physics in one.
Subjects & Rooms
Subjects
Structure → Subjects. A subject has a translatable name, a code, a colour used in the timetable, a core subject flag and an active flag. Subjects belong to a school and are what grades, exams, assignments and timetable slots are recorded against.
Rooms
Structure → Rooms. A room has a name, a code, a building, a capacity and a type: classroom, laboratory, gym, library, auditorium, office or other. Rooms are used by classes and by timetable slots.
How People Work
Students, guardians, teachers and staff are user accounts. The identity (first name, last name, email, phone, gender, date of birth, photo and address) lives once on the user record; the school profile holds only what is specific to the school.
That has three consequences worth knowing before you start typing:
- A role is assigned automatically. Creating a student gives their account the
studentrole; a guardian getsguardian, a teacherteacher, a staff memberstaff. That is what the portal and the admin permissions key off. - An email address is optional. Leave it empty and a placeholder address is generated so the record can exist. A person with a placeholder address cannot sign in: give a guardian a real address when you want them on the portal.
- Deleting a person deletes their account. Removing a student, teacher, guardian or staff member removes the underlying user and everything that hangs off it. Use the status field instead when someone has simply left.
Students
Admin → School → Students. Beyond the identity fields, a student carries:
| Field | Notes |
|---|---|
| Admission number | Unique. Generated automatically when you leave it empty, as prefix, year and a running number: STU-2026-0001. The prefix is set under Settings → Defaults. |
| School | The campus the student belongs to. |
| Admission date | When they joined. |
| Graduation date | When they left, for alumni. |
| Place of birth, nationality, religion, blood group | Optional record-keeping fields. |
| Status | active, inactive, graduated, transferred or withdrawn. |
| Notes | Free text for the office. |
The list can be searched by name, email or admission number, and filtered by school, status and gender. Each row opens the student file.
Guardians
Admin → School → Guardians. A guardian is a parent or legal representative. Their profile holds a default relationship, an occupation, an employer, a status and notes.
A guardian is linked to one or more students from their own page (Link student), and each link carries its own settings:
| Link setting | What it means |
|---|---|
| Relationship | father, mother, grandparent, legal guardian, sibling or other. |
| Primary contact | The person the school calls first. |
| Emergency contact | Shown on the student file as an emergency number. |
| Can pick up | Whether this person is allowed to collect the child. |
| Can view records | Recorded on the link for your own reference. |
A student can have several guardians and a guardian several children: siblings in the same school share one parent account.
Teachers
Admin → School → Teachers. A teacher record adds an employee number, a qualification, a specialization, a hire date, an optional salary, a status (active, inactive, on leave, terminated) and notes.
Teachers are attached to subjects they can teach and to classes per subject. Those links are what fills the pickers when you build the timetable, create an assignment or record a grade. The teacher detail page gathers their classes, their subjects and their timetable.
Staff
Admin → School → Staff. Everybody who works at the school without teaching: the office, the nurse, the librarian, maintenance. A staff record carries an employee number, a job title, a department, a hire date, a status and notes.
Enrollments
Admin → School → Enrollments. An enrollment puts one student in one class for one academic year. It is the hinge of the whole add-on: attendance, grades and assignment submissions are recorded against the enrollment, not against the student, which is why they stay attached to the right year and the right class forever.
| Field | Notes |
|---|---|
| Student, class, academic year | The three keys. One enrollment per student and academic year. |
| Enrollment date | Defaults to today when left empty. |
| Roll number | The student’s number inside the class, if you use one. |
| Status | enrolled, withdrawn, transferred or completed. New enrollments default to enrolled. |
| Exit date and reason | Filled in when a student leaves the class during the year. |
Attendance
Admin → School → Attendance. One record per enrollment and per day, with four statuses:
| Status | Counts as present? |
|---|---|
| Present | Yes |
| Late | Yes: the student was there |
| Absent | No |
| Excused | No |
Taking the register
Attendance → Take attendance is the screen you use every morning. Pick a class and a date, today by default, and the enrolled students appear as a register. Mark each one, add a remark where it matters, and save. Opening the same class and date again loads what was recorded so you can correct it: there is one record per student and per day, so re-saving updates rather than duplicates.
The attendance list
The main list shows every record, filterable by class, by date and by status, with bulk delete for a day recorded in error. Who recorded each line is stored with it.
The attendance rate a parent sees on the portal is present + late, over the total number of records, for the student’s current enrollment.
Grades
Admin → School → Grades. A grade is a score for one enrollment, in one subject, for one term. It can stand on its own, or be attached to an exam or an assignment.
| Field | Notes |
|---|---|
| Enrollment | Which student, in which class, in which year. |
| Subject and term | What the mark is for, and when. |
| Exam or assignment | Optional: links the grade to the piece of work it came from. |
| Score and maximum score | The mark and what it is out of. |
| Grade letter | An optional letter or short code (up to 4 characters) that you type yourself: A, B+, 12/20, whatever your school uses. |
| Remarks | A comment for the report card. |
| Published | Unpublished grades are invisible on the parent portal. |
Who graded a line and when is stored with it. The portal shows published grades grouped by subject, with the average per subject and an overall average.
Exams
Admin → School → Exams. An exam is a scheduled assessment in one subject, for one academic year and term, sat by one or more classes.
| Field | Notes |
|---|---|
| Name and description | What it is. |
| Subject, academic year, term | Where it belongs. |
| Classes | One exam can be sat by several classes. |
| Date, start time, end time | When it happens. |
| Type | test, quiz, midterm, final or other. |
| Maximum score | What the exam is out of. |
| Weight | How much this exam counts against the others in the term. |
| Published | Publish the exam once its results are ready to be seen. |
The exam detail page lists the classes sitting it and the grades recorded against it, so you can enter a whole batch of marks from one screen. Publish on the row is the shortcut for releasing it.
Assignments
Admin → School → Assignments. An assignment is homework or coursework given to one class, in one subject, by one teacher, for one term.
| Field | Notes |
|---|---|
| Title and description | What the students have to do. |
| Class, subject, teacher, term | Where it belongs. |
| Attachment | A brief, a worksheet or a template to download. |
| Due date | When it has to be in. |
| Maximum score and weight | What it is out of, and how much it counts. |
| Published | Only published assignments appear on the parent portal. |
The assignment detail page shows its submissions: each one carries the student’s enrollment, an uploaded file or typed text, the moment it was submitted, a score, feedback and a status. Grading a submission is what produces the grade attached to the assignment.
Timetable
Admin → School → Timetable. The weekly grid, one class at a time. A slot is a subject, taught by a teacher, in a room, on a day of the week, between a start and an end time.
Slots carry a week type so a fortnightly rotation works: A, B or all weeks. Subject colours, set on the subject, are what make the grid readable at a glance.
The same grid, filtered to one student’s class, is what a parent sees on the portal.
Behavior
Admin → School → Behavior. A behavior record is an incident, good or bad, attached to a student.
| Field | Notes |
|---|---|
| Student and date | Who and when. |
| Type | positive or negative. Merit and demerit both live here. |
| Category | Your own wording: punctuality, uniform, helpfulness, disruption… |
| Description | What happened. |
| Action taken | What the school did about it. |
| Severity | low, medium or high. |
| Visible to parent | Off keeps the record internal. |
Who reported the incident is stored with it. Records appear on the student file, newest first.
Health Records
Admin → School → Health. The medical file the nurse and the office need at hand.
| Field | Notes |
|---|---|
| Student and date | Who and when. |
| Type | allergy, medication, condition, visit, vaccination or other. |
| Title and description | What it is. |
| Severity | low, medium or high. |
| Doctor | The practitioner, where relevant. |
| Attachment | A certificate, a prescription, a vaccination card. |
| Visible to parent | Off keeps the record internal. |
school.health.* permissions only to the people
who need them, and remember that visible to parent decides what the family reads from home.
The blood group lives on the student record itself, not here.
Documents
Admin → School → Documents. Files attached to a student, a teacher, a staff member or a guardian.
| Field | Notes |
|---|---|
| Owner | The student, teacher, staff member or guardian the document belongs to. |
| Category | birth certificate, ID, passport, vaccination, transcript, diploma, contract or other. |
| Name and description | How it is listed. |
| File | The upload itself. Its type and size are recorded. |
| Expiry date | For papers that go out of date, such as an ID or a medical certificate. |
| Visible to parent | Only documents marked visible appear on the portal, and only to the guardians of that student. |
Documents are downloaded through the add-on rather than from a public URL, so the permission check happens on every download.
Fees & Invoicing
Admin → School → Fees. A fee links a student to a billing invoice. The school side holds the context (which student, which school, which academic year, which term, a label, a currency and notes) and Billing holds the money: the line items, the totals, the status and the payments.
Creating a fee
- Pick the student, the academic year and the term, and give the fee a label (“Tuition: Term 1”, “Bus pass”).
- Add the line items. They become the invoice lines.
- Save it as a draft, or send it straight away: the invoice is created with the matching status and the due date follows your Billing payment terms.
Following the money
- The fee list filters by invoice status, so “what is still unpaid” is one click.
- Mark as paid on a row settles the underlying invoice.
- The School dashboard shows the outstanding total across draft, sent, partial and overdue invoices.
- Deleting a fee deletes the invoice behind it.
Guardians see their children’s fees on the portal, with the invoice detail and what is left to pay.
Messages
Admin → School → Messages. Announcements and direct messages from the school to families, delivered to the portal inbox.
| Recipient type | Who receives it |
|---|---|
| Individual | The people you pick, one by one. |
| Class | The guardians of every student enrolled in that class. |
| Grade level | The guardians of every student at that level. |
| School | Everybody attached to that school. |
| Role | Everyone holding a role: all teachers, all guardians. |
A message has a subject, a body and optional attachments. The recipient list is resolved when you send it and stored with the message, so a class list that changes later does not rewrite who received what. Read and archive state is tracked per recipient.
Guardians read their messages under Portal → Messages, and can reply from there.
The Parent Portal
The front-end area where families follow their children, at /portal (and
/<locale>/portal in every other language). It is reachable from the account menu once the
add-on is active, and every page requires a signed-in user.
Giving a Parent Access
- Create the guardian with a real email address: a generated placeholder address cannot sign in.
- Link the student to that guardian and set the relationship.
- Tell the parent to use the site’s ordinary forgotten password flow to set their own password: accounts created from the admin panel have a random one and are already email-verified.
A signed-in user with no guardian record, or a guardian with no linked child, is shown a short “not linked yet” page rather than an error.
What Parents See
| Page | What is on it |
|---|---|
| Dashboard | One card per child, with the attendance rate, the published grade average and what is outstanding on the fees. |
| Child file | The child’s class, their enrollment and the shortcuts to everything below. |
| Attendance | Every record with its status, plus the totals for the year. |
| Grades | Published grades grouped by subject, with a per-subject and an overall average. |
| Report card | The current term’s published grades, subject by subject. |
| Assignments | Published assignments with their due dates and attachments. |
| Timetable | The weekly grid of the child’s class. |
| Behavior | Incidents marked visible to parents. |
| Health | Health records marked visible to parents. |
| Documents | Documents marked visible to parents, downloadable. |
| Fees | Invoices and what is left to pay. Only when the Billing add-on is active. |
| Messages | The inbox, a message view, and a reply form. |
| Profile | The guardian’s own details. |
Controlling Visibility
Visibility works at two levels.
Per record, set where the record is created:
- Published on a grade: unpublished grades are invisible, and are left out of the averages.
- Published on an assignment: drafts stay in the admin panel.
- Visible to parent on a behavior record, a health record and a document.
Nothing else is filtered at this level: attendance, the timetable, fees and messages are shown as they are recorded.
Per section, under School → Settings → Parent Portal: a switch for each of Attendance, Grades, Report card, Assignments, Timetable, Behavior, Health, Documents, Fees and Messages. A hidden section leaves the child file and its page answers “page not found”. Turning off a module under Features removes its portal section too.
Notifications
The add-on tells families what happened without anyone having to phone them. Six notices are sent by email and to the recipient’s in-app inbox:
| Notice | Goes to | Sent when |
|---|---|---|
| Student absence | The child’s guardians | You save the register with the student marked absent. Saving the same register again does not send a second one; correcting a student to present and back to absent does. |
| New grade published | The child’s guardians | A grade is published. Correcting a grade that is already published sends nothing. |
| New assignment | The guardians of every student in the class | An assignment is published. |
| Behavior incident | The child’s guardians | An incident is marked visible to parent. |
| Message received | Everyone the message is addressed to | You send a message. The sender is never notified of their own message. |
| New student admission | Administrators | A student is added. |
Switch them on and off under Admin → Settings → Notifications, where they sit in their own School group alongside the rest of the site’s emails. Each recipient can also turn off their own, per notice and per channel, from their notification preferences.
The Student File
The page you open from a student row in the admin panel. It gathers, for one student:
- their identity, photo, school and admission details;
- their guardians, with the relationship and the primary and emergency flags;
- every enrollment, with its class, grade level and academic year, and which one is current;
- their documents, health records and behavior incidents;
- their fees and the invoices behind them, when the Billing add-on is active.
It is the page to have open when a parent is on the phone.
Dashboard Widgets
Besides its own dashboard at Admin → School → Dashboard, the add-on contributes three cards to the main admin dashboard, so the school shows up next to everything else the site runs:
| Card | What is on it |
|---|---|
| School Overview | Active students, teachers, classes, and how many students were admitted this month. |
| Attendance Today | Today’s attendance rate and the count of present, absent, late and excused. |
| Recent Admissions | The five most recent admissions, each linking to the student file. |
Recent Admissions is shown by default; the other two start hidden. Add, remove and reorder them from the customise control on the admin dashboard: the layout is saved per user, so everyone arranges their own. A card only appears for people whose role grants the matching permission.
Settings
Admin → School → Settings. Three tabs.
Features
One switch per module: Attendance, Grades, Exams, Assignments, Timetable, Fees, Messages, Documents, Health, Behavior and Parent portal.
Switching a module off hides it everywhere: its entry leaves the School menu, its admin pages answer “page not found”, and it disappears from the parent portal. Nothing is deleted: switch it back on and every record is where you left it. This is the switch to use for a module your school does not run at all; use roles and permissions when the module matters but only some people should reach it.
Parent portal is the master switch for the front end: with it off, /portal
answers “page not found” and the portal link leaves the account menu.
Parent Portal
One switch per portal section: Attendance, Grades, Report card, Assignments, Timetable, Behavior, Health, Documents, Fees and Messages. A hidden section disappears from the child file and its page answers “page not found”.
A section also follows the module behind it; if Grades is off under Features, the portal shows neither grades nor the report card, whatever these switches say.
Defaults
| Setting | What it does |
|---|---|
| Admission number prefix | The letters admission numbers start with. STU gives STU-2026-0001, STU-2026-0002, and so on. Letters and digits only; numbers already issued are never renamed. |
| Default currency | The currency fees are expressed in when nothing more specific applies. |
| Timezone | The timezone dates and times are read in. Falls back to the application timezone. |
Roles & Permissions
Activating the add-on registers a permission per section and action (school.students.view,
school.grades.create, school.attendance.edit and so on) and creates the four
roles it works with.
| Role | What it can reach |
|---|---|
| admin | Everything, as always. |
| staff | Broad school management: every section except creating, editing and deleting the schools themselves. |
| teacher | Teaching duties: attendance, grades, exams and assignments (create and edit), plus read access to students, classes, subjects, the timetable, behavior, health and documents. |
| guardian | No admin access at all: the portal only. |
| student | No admin access at all. |
Permissions are assigned additively, so a role never loses something it holds from elsewhere. Adjust any of it under Admin → Users → Roles: the defaults above are a starting point, not a constraint.
Multi-Language
Every label in the admin panel and on the portal goes through the translation files, and the add-on ships 30 locales. Grade level names and subject names are translatable per language, so a school running two languages names them once per language.
To adjust a wording, edit extensions/addons/school/resources/lang/<locale>/school.php.
Change the values, never the keys. English is the reference file; locales that have not been translated yet
carry the English strings as placeholders.
Updating
- Download the latest ZIP of the add-on.
- Go to Admin panel → Add-ons and click Upload.
- Select or drag the ZIP into the upload area. A prompt shows the current and the new version number: click Replace.
- Run the pending migrations:
php artisan migrate
- Clear the caches:
php artisan config:clear php artisan route:clear php artisan view:clear
Your data and your settings live in the database and are untouched by a file replacement.
Uninstallation
Switching an add-on off without losing anything is a deactivation: go to Admin panel → Add-ons, find School Management and click Deactivate.
- Its routes, views, admin menu entries and permissions stop being registered, and the parent portal stops answering.
- Its database tables and all the data they hold are kept, and its files stay under
extensions/addons/school/. Nothing is deleted. - The purchase code recorded at activation is kept too, so activating the add-on again does not ask for it.
- Deactivation is refused while another active add-on depends on this one: deactivate that add-on first.
Click Activate on the same card to switch it back on. Pending migrations are re-run, assets are republished, and the add-on picks up exactly where it left off.
Removing
Removing is permanent and destroys the add-on's data. The Remove button only appears on a deactivated add-on, so removal is always two steps:
- Deactivate School Management (see Uninstallation).
- Click Remove on its card and confirm the prompt.
The admin panel then, in one pass:
- runs the add-on's uninstall hook, if it ships one, while its code is still on disk;
- revokes the permissions declared in its
addon.json; - rolls back its migrations (this drops its database tables and every row they hold) and purges its entries from the
migrationstable, so a later reinstall migrates from scratch; - deletes its published assets:
public/addons/school/,public/vendor/school/andstorage/app/public/addons/school/; - deletes the add-on directory
extensions/addons/school/; - deletes its row in the
addonstable (the recorded purchase code goes with it) and clears the application cache.
Removal is refused, with an explanatory message and before anything is destroyed, when the add-on is still active, when another active add-on depends on it, or when the web server (PHP) user cannot delete extensions/addons/school/. In that last case, give that user write permission on the directory and on its parent, then try again.
Deleting the folder over FTP or SSH is not equivalent: the add-on's tables, its entries in the migrations table and its addons row are all left behind, and its card stays in the list. Use Remove in the admin panel instead.
Troubleshooting
The Fees menu entry is missing
- Fees are billing invoices: the section is only registered when the Billing add-on is installed and active.
- Activate Billing, then clear the route cache (
php artisan route:clear) and reload the admin panel.
A parent signs in and sees “not linked yet”
- The signed-in user has no guardian record, or the guardian has no student linked to them.
- Open Guardians, find the person, and use Link student.
- Check the guardian’s account is the one they actually signed in with: a guardian created without an email address gets a placeholder that nobody can log in as.
A parent cannot sign in at all
- Accounts created from the admin panel get a random password. Send the parent through the site’s forgotten password flow.
- Make sure the guardian has a real email address on their record, not a generated
@school.localplaceholder.
Grades are recorded but the portal shows nothing
- Only published grades are shown, and only for the student’s current enrollment.
- Check the student has an enrollment with the status enrolled in the current academic year.
A student appears in two classes
- Only one enrollment per student and academic year can be enrolled; creating a new enrolled record completes the previous one automatically.
- If two rows are both enrolled, they belong to two different academic years: check the year column.
Attendance saved twice for the same day
- It cannot: there is one record per enrollment and per day, and saving the register again updates it.
- What looks like a duplicate is usually the same student in two enrollments. Complete the old one.
The Settings page returns a 403
- The account needs the school.settings.view permission to open the page and school.settings.edit to save it. Administrators and the staff role hold both by default.
- Grant them under Admin → Users → Roles if you have customised the roles.
A whole section vanished from the School menu
- Its module is switched off under School → Settings → Features. Switch it back on, nothing was deleted.
A parent says a portal page is missing
- Check the section under School → Settings → Parent Portal, then the module it depends on under Features: hiding Grades also hides the report card.
- If every page is missing, the Parent portal switch itself is off.
Parents are not getting absence or grade emails
- Check the master switch and the individual types under Admin → Settings → Notifications.
- A guardian with a generated placeholder address will never receive anything: give them a real email address.
- A grade notifies when it is published, not when it is entered; an assignment when it is published; a behavior incident when it is marked visible to parent. Re-saving the same register does not send a second absence alert.
Photos and documents do not display
- Run
php artisan storage:linkfrom the project root: uploads are served through the public storage symlink. - Check the web server user can write to
storage/app/public/.
School Management v1.0.0: Part of the Larapen CMS platform.
© BeDigit. All rights reserved.