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.

Guardians, not students, are the portal audience in this version. The portal is built around the guardian → child link: a signed-in guardian sees the children they are linked to. Students have user accounts and a role of their own, which is what the teacher and staff areas of the admin panel use, but they do not get a portal of their own yet.

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
Optional: the Billing add-on. Fees are invoices, and the School add-on does not keep an invoicing engine of its own: it creates and updates billing invoices. Without Billing, the Fees menu entry and its routes are simply not registered, and everything else works normally. Parent-portal pages are rendered by the active theme, so a theme that ships School templates gives the portal its own design; a theme that does not falls back to the add-on’s own views.

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
Check your spam folder. For both bedigit.com Store and Gumroad purchases, the purchase code is delivered by email. Automated license emails are very often filtered, so if the message is not in your inbox, look in your spam / junk folder before contacting support, and add our sender address to your contacts or allow list.

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?
Lost your purchase code? Search your mailbox (spam folder included) for “license” or “purchase code”, then check My Account → My Licenses on bedigit.com for Store and Gumroad purchases, or Downloads → License certificate on Envato. If it is still missing, open a ticket on our Help Center with your order number (Store), Gumroad sale ID or buyer email (Gumroad), or Envato username and item name (Envato).

Quick Start

Ten minutes to a school you can take attendance in. Everything below is under Admin → School.

  1. Create the school. Structure → Schools → Add. Name, code, address and contact details.
  2. Open an academic year. Structure → Academic Years. Give it a name (“2026–2027”), a start and an end date, and mark it current.
  3. Add its terms. Structure → Terms. One row per trimester, semester or quarter.
  4. Describe the levels. Structure → Grade Levels, then Classes: one class per group of students for the year.
  5. List the subjects and the rooms. Structure → Subjects and Rooms.
  6. Add a teacher. Teachers → Add. A user account is created for them with the teacher role.
  7. Add a student. Students → Add. An admission number is generated if you leave it empty.
  8. Link a guardian. Guardians → Add, then link the student to them and say what the relationship is.
  9. Enroll the student. Enrollments → Add: student, class, academic year.
  10. Take attendance. Attendance → Take attendance: pick the class and the date, and tick the register.
Order matters at the start. A class needs a grade level and an academic year; an enrollment needs a class; attendance needs an enrollment. Build the structure first and the rest falls into place.

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.

FieldWhat it is for
NameShown everywhere a school is named. A slug is derived from it.
CodeA short identifier of your own (up to 32 characters), handy on reports and exports.
LogoUsed on the school’s own pages.
Address, city, state, country, postal codeThe postal address.
Phone, email, websiteContact details.
ActiveAn inactive school stays in the database with all its data, and is kept out of the pickers.
PositionOrders 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.

FieldWhat it is for
Academic yearThe year the class runs in. A new year means new classes.
Grade levelThe stage this class sits at.
Name and code“7A”, “Grade 3: Blue”, and a short code for lists.
Homeroom teacherThe teacher who owns the class. Optional.
RoomThe room the class is based in. Optional.
CapacityHow many students the class is meant to hold.
ActiveKeeps 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 student role; a guardian gets guardian, a teacher teacher, a staff member staff. 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:

FieldNotes
Admission numberUnique. Generated automatically when you leave it empty, as prefix, year and a running number: STU-2026-0001. The prefix is set under Settings → Defaults.
SchoolThe campus the student belongs to.
Admission dateWhen they joined.
Graduation dateWhen they left, for alumni.
Place of birth, nationality, religion, blood groupOptional record-keeping fields.
Statusactive, inactive, graduated, transferred or withdrawn.
NotesFree 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 settingWhat it means
Relationshipfather, mother, grandparent, legal guardian, sibling or other.
Primary contactThe person the school calls first.
Emergency contactShown on the student file as an emergency number.
Can pick upWhether this person is allowed to collect the child.
Can view recordsRecorded 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.

FieldNotes
Student, class, academic yearThe three keys. One enrollment per student and academic year.
Enrollment dateDefaults to today when left empty.
Roll numberThe student’s number inside the class, if you use one.
Statusenrolled, withdrawn, transferred or completed. New enrollments default to enrolled.
Exit date and reasonFilled in when a student leaves the class during the year.
Moving a student to another class mid-year. Create the new enrollment with the status enrolled: the previous enrolled record for that student and that academic year is switched to completed automatically, so the student is never in two classes at once. The old register, with its attendance and its grades, stays exactly as it was.

Attendance

Admin → School → Attendance. One record per enrollment and per day, with four statuses:

StatusCounts as present?
PresentYes
LateYes: the student was there
AbsentNo
ExcusedNo

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.

FieldNotes
EnrollmentWhich student, in which class, in which year.
Subject and termWhat the mark is for, and when.
Exam or assignmentOptional: links the grade to the piece of work it came from.
Score and maximum scoreThe mark and what it is out of.
Grade letterAn optional letter or short code (up to 4 characters) that you type yourself: A, B+, 12/20, whatever your school uses.
RemarksA comment for the report card.
PublishedUnpublished grades are invisible on the parent portal.
Publishing is the switch parents feel. A grade stays private to the admin panel until it is marked published. Record marks as you correct them, publish the whole batch when the term is closed.

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.

FieldNotes
Name and descriptionWhat it is.
Subject, academic year, termWhere it belongs.
ClassesOne exam can be sat by several classes.
Date, start time, end timeWhen it happens.
Typetest, quiz, midterm, final or other.
Maximum scoreWhat the exam is out of.
WeightHow much this exam counts against the others in the term.
PublishedPublish 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.

FieldNotes
Title and descriptionWhat the students have to do.
Class, subject, teacher, termWhere it belongs.
AttachmentA brief, a worksheet or a template to download.
Due dateWhen it has to be in.
Maximum score and weightWhat it is out of, and how much it counts.
PublishedOnly 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.

FieldNotes
Student and dateWho and when.
Typepositive or negative. Merit and demerit both live here.
CategoryYour own wording: punctuality, uniform, helpfulness, disruption…
DescriptionWhat happened.
Action takenWhat the school did about it.
Severitylow, medium or high.
Visible to parentOff 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.

FieldNotes
Student and dateWho and when.
Typeallergy, medication, condition, visit, vaccination or other.
Title and descriptionWhat it is.
Severitylow, medium or high.
DoctorThe practitioner, where relevant.
AttachmentA certificate, a prescription, a vaccination card.
Visible to parentOff keeps the record internal.
Health data is sensitive. Give the 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.

FieldNotes
OwnerThe student, teacher, staff member or guardian the document belongs to.
Categorybirth certificate, ID, passport, vaccination, transcript, diploma, contract or other.
Name and descriptionHow it is listed.
FileThe upload itself. Its type and size are recorded.
Expiry dateFor papers that go out of date, such as an ID or a medical certificate.
Visible to parentOnly 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

Requires the Billing add-on. The Fees menu entry and its pages only exist when Billing is installed and active. School Management does not keep an invoicing engine of its own.

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 typeWho receives it
IndividualThe people you pick, one by one.
ClassThe guardians of every student enrolled in that class.
Grade levelThe guardians of every student at that level.
SchoolEverybody attached to that school.
RoleEveryone 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

  1. Create the guardian with a real email address: a generated placeholder address cannot sign in.
  2. Link the student to that guardian and set the relationship.
  3. 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

PageWhat is on it
DashboardOne card per child, with the attendance rate, the published grade average and what is outstanding on the fees.
Child fileThe child’s class, their enrollment and the shortcuts to everything below.
AttendanceEvery record with its status, plus the totals for the year.
GradesPublished grades grouped by subject, with a per-subject and an overall average.
Report cardThe current term’s published grades, subject by subject.
AssignmentsPublished assignments with their due dates and attachments.
TimetableThe weekly grid of the child’s class.
BehaviorIncidents marked visible to parents.
HealthHealth records marked visible to parents.
DocumentsDocuments marked visible to parents, downloadable.
FeesInvoices and what is left to pay. Only when the Billing add-on is active.
MessagesThe inbox, a message view, and a reply form.
ProfileThe guardian’s own details.
A parent can only ever reach their own children. Every child page checks the guardian → student link before it renders and refuses anything else, so a guessed address in the URL bar leads nowhere.

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:

NoticeGoes toSent when
Student absenceThe child’s guardiansYou 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 publishedThe child’s guardiansA grade is published. Correcting a grade that is already published sends nothing.
New assignmentThe guardians of every student in the classAn assignment is published.
Behavior incidentThe child’s guardiansAn incident is marked visible to parent.
Message receivedEveryone the message is addressed toYou send a message. The sender is never notified of their own message.
New student admissionAdministratorsA 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.

Two things stop every notice at once. The master switch on that same page, and a missing email address: a guardian created without one gets a generated placeholder that cannot receive mail. Give guardians who should hear from you a real address.

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:

CardWhat is on it
School OverviewActive students, teachers, classes, and how many students were admitted this month.
Attendance TodayToday’s attendance rate and the count of present, absent, late and excused.
Recent AdmissionsThe 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

SettingWhat it does
Admission number prefixThe 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 currencyThe currency fees are expressed in when nothing more specific applies.
TimezoneThe timezone dates and times are read in. Falls back to the application timezone.
Who sends what is set elsewhere. Absence alerts, grade and assignment announcements, behavior notices, message alerts and new-admission notices are switched on and off under Admin → Settings → Notifications, alongside the rest of the site’s emails. Each recipient can also turn off their own, from their notification preferences.

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.

RoleWhat it can reach
adminEverything, as always.
staffBroad school management: every section except creating, editing and deleting the schools themselves.
teacherTeaching duties: attendance, grades, exams and assignments (create and edit), plus read access to students, classes, subjects, the timetable, behavior, health and documents.
guardianNo admin access at all: the portal only.
studentNo 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

  1. Download the latest ZIP of the add-on.
  2. Go to Admin panel → Add-ons and click Upload.
  3. Select or drag the ZIP into the upload area. A prompt shows the current and the new version number: click Replace.
  4. Run the pending migrations:
    php artisan migrate
  5. 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:

  1. Deactivate School Management (see Uninstallation).
  2. 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 migrations table, so a later reinstall migrates from scratch;
  • deletes its published assets: public/addons/school/, public/vendor/school/ and storage/app/public/addons/school/;
  • deletes the add-on directory extensions/addons/school/;
  • deletes its row in the addons table (the recorded purchase code goes with it) and clears the application cache.
This cannot be undone. Back up your database before removing an add-on whose data you may still need: installing it again later creates empty tables, not your old content. Removing School Management drops every student, guardian, teacher, enrollment, attendance record, grade, exam, assignment, behavior record, health record, document row and message. The user accounts behind those people are not deleted (they live in the core users table), but the school profile that gave them their meaning is.

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.local placeholder.

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:link from 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.

Was this article helpful?

Thank you for your feedback!

Still need help? Create a support ticket

Create a Ticket
Sep 28, 2026