=== TradeSchool Manager ===
Contributors: cburleigh, cjswebservice
Donate link: https://tradeschoolmanager.com/
Tags: lms, school, gradebook, students, attendance
Requires at least: 5.8
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.1.20
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A complete LMS built for trade schools and vocational programs: students, classes, gradebook, attendance, school years, portals, PDFs and CSV.

== Description ==

**TradeSchool Manager** is a purpose-built student-information and gradebook plugin for trade schools, vocational programs, certification academies, apprenticeships, and hands-on training providers. Everything runs inside your own WordPress install  -  no SaaS accounts, no per-student fees, no monthly subscriptions for the free core.

Built and maintained by **CJs Web Service** ([cjswebservice.com](https://cjswebservice.com/)). Product home, demos, and documentation live at [tradeschoolmanager.com](https://tradeschoolmanager.com/).

= Why TradeSchool Manager? =

Most school plugins are built for K-12 or higher-ed and bury trade-school workflows under features you'll never use. TradeSchool Manager starts from the trade-school workflow:

* Cohort-based **programs** that run across **school years**, with a one-click rollover that copies class definitions and assignments into the new year while preserving every prior year's grades, rosters, and attendance untouched.
* A **gradebook** that supports points, weighted categories, **and pass/fail** (because hands-on competencies aren't a percentage).
* A global **Active School Year** switcher so dashboards, rosters, and gradebooks always reflect the year you're actually working in.
* Admin-side, branded, print-ready **PDF report cards and class rosters** out of the box.
* **Student and teacher portals** as front-end shortcodes you drop onto any WordPress page  -  no separate app to host.

= What's in the free core =

* **Students & Teachers**  -  Profiles with photos, emergency contacts, and portal credentials.
* **Sponsors & Authorized Contacts** - Optional accounts for family members, employers, sponsors, or other approved contacts linked to one or more students.
* **Programs & School Years**  -  Multi-year programs with enrollment, GPA computation, year rollover, and historical preservation.
* **Classes & Gradebook**  -  Points-based, weighted-category, or pass/fail grading; assignment categories; extra credit; teacher-scoped views.
* **Attendance**  -  Daily attendance tracking with per-class and per-student reports.
* **Announcements**  -  Post school-wide or class-specific announcements visible in the portals.
* **Student, Teacher, and Sponsor Portals** - Front-end shortcodes for grades, assignments, rosters, payments, and linked-student access.
* **CSV Import/Export**  -  Move students, classes, and assignments without lock-in.
* **Admin PDF Reports**  -  Unified PDF engine renders administrator report cards, class rosters, and statements on your school letterhead.
* **Active School Year context**  -  One global switcher scopes every list, dashboard, and gradebook.
* **Email delivery via Brevo**  -  Built-in, optional. 300 transactional emails/day on Brevo's free plan; automatic fallback to native `wp_mail()` if the daily cap is reached. You can also skip Brevo entirely and use whatever SMTP plugin you already run.

= Optional paid add-ons =

The free core is fully functional on its own. These capabilities ship as separate add-on plugins from [tradeschoolmanager.com](https://tradeschoolmanager.com/) and are detected at runtime  -  any UI tied to an add-on stays hidden when that add-on isn't installed.

* **Certificates**  -  Auto-issued PDF certificates of completion with reminder emails.
* **Reports & Transcripts**  -  Multi-year transcripts, summary report cards, GPA, credits.
* **Workshops**  -  Short-form, year-agnostic courses with their own gradebook and completion certificates.
* **Applications**  -  Public application forms and an admissions pipeline.
* **Invoicing & Contracts**  -  Tuition invoicing, payment plans, e-sign contracts, and optional Stripe checkout.
* **Custom Fields & Student Documents**  -  Per-program metadata plus audit-logged document uploads for government compliance.

= Who it's for =

* Trade schools (electrical, plumbing, HVAC, welding, automotive, construction)
* Cosmetology, esthetics, and barbering schools
* CDL, heavy-equipment, and aviation training
* Allied health, nursing assistant, and phlebotomy programs
* Coding bootcamps and short-form vocational programs
* Apprenticeship and union training programs
* Anyone running cohort-based, hands-on training out of WordPress

= External services =

The free plugin makes **no calls to external services** until you opt in to Brevo email delivery (which requires a free Brevo account and an API key). Optional add-ons may integrate with Stripe (payments); those add-ons are downloaded separately and have their own privacy disclosures.

* Brevo (optional, free core): Transactional email via the Brevo HTTP API. Only the message payload (to/from/subject/body) is sent, and only when you supply an API key in **TradeSchool > Settings > Email**. Brevo terms: [brevo.com/legal/termsofuse](https://www.brevo.com/legal/termsofuse/). Privacy: [brevo.com/legal/privacypolicy](https://www.brevo.com/legal/privacypolicy/).

= Support & contributing =

* Product site, demos, docs: [tradeschoolmanager.com](https://tradeschoolmanager.com/)
* Author: CJs Web Service  -  [cjswebservice.com](https://cjswebservice.com/)
* Issues and feature requests: through the WordPress.org support forum for this plugin

== Installation ==

1. Upload the plugin via **Plugins > Add New > Upload Plugin**, or extract to `/wp-content/plugins/tradeschool-manager/`.
2. Activate **TradeSchool Manager** through the **Plugins** screen.
3. Visit **TradeSchool > Settings** to set your school name, logo, currency, and email-from address.
4. Create your first **School Year**, then your first **Program** and **Classes**.
5. Create dedicated WordPress pages for the portals and add the shortcodes (see **TradeSchool > About** for the full list):
   * `[tsm_student_portal]`
   * `[tsm_teacher_portal]`
   * `[tsm_parent_portal]`

== Frequently Asked Questions ==

= Does the free plugin require a license key or external account? =

No. The free plugin runs entirely on your own WordPress install with no key validation and no calls home. Email via Brevo is opt-in and requires only a free Brevo account.

= Can I migrate to a new school year without losing history? =

Yes. The Year Rollover tool copies class definitions and assignments into a new year while preserving the source year's roster, grades, and attendance exactly as they were. Prior-year report cards and reports continue to render correctly forever.

= Can students see only their own data? =

Yes. The student portal authenticates against the student record and scopes every query to that student. Teachers similarly only see their assigned classes. Sponsors and authorized contacts only see students they're linked to.

= Does it support pass/fail grading? =

Yes. Each class can use points, weighted categories, or pass/fail. Pass/fail classes with no graded work display " - " rather than a misleading "Fail".

= How do I take payments or issue tuition invoices? =

Install the optional **Invoicing & Contracts** add-on from [tradeschoolmanager.com](https://tradeschoolmanager.com/). The free plugin does not handle invoicing or payments.

= Where are student documents stored? =

Document uploads ship in the optional **Custom Fields & Student Documents** add-on. When installed, files are stored in a private `tsm-private/student-docs/` directory inside `wp-content/uploads`, protected by an `.htaccess` deny rule and SHA-prefixed filenames, with a full upload/download/delete audit log for government chain-of-custody.

= Does it work with my theme? =

Yes. The portals render inside your active theme via shortcodes and inherit your theme's colors and typography. Optional portal-theme polish is built in and can be disabled per page.

= Is it translation-ready? =

Yes. All user-facing strings use the `tradeschool-manager` text domain. WordPress 4.6+ auto-loads translations hosted on WordPress.org.

== Screenshots ==

1. Admin dashboard with class averages and active-school-year context.
2. Student profile management with enrollment, class, and portal account details.
3. Gradebook entry with weighted categories and extra credit.
4. Program setup with schedule, passing percentage, and tuition defaults.
5. Attendance session history with roster status details.
6. Student portal payments and profile overview in the focused portal layout.
7. Teacher portal class assignment view with workshop access and grading actions.

== Changelog ==

= 1.1.20 =
* Normalized line endings in the student portal shortcode file for WordPress.org repository checks.
* Maintenance release for update packaging.
* Student Portal assignments now expand to show descriptions.
* Portal buttons override theme restrictions.
* Teachers can now edit assignments on the front end.

= 1.1.19 =
* Fixed PDF generation when the saved school logo URL cannot be read by TCPDF on the server.
* Shared PDF headers now resolve Media Library images to local upload paths and fall back to the school name when needed.
* Added admin download buttons for core report-card PDFs and class roster PDFs under Gradebook > Class Reports.
* Kept student-facing report-card downloads reserved for the Reports & Transcripts add-on.

= 1.1.18 =
* Reordered the branded admin sidebar into Manage, Add-ons, and System sections.
* Added core fallback sidebar entries for installed add-ons so Certificates and Applications appear consistently.
* Hid the default WordPress admin footer on TradeSchool Manager screens.

= 1.1.17 =
* Fixed student portal tab actions so links and panels initialize reliably in the focused portal layout.
* Fixed teacher portal subtab initialization timing for class and add-on views.

= 1.1.16 =
* Converted remaining first-party inline portal, sponsor, email, add-on, and admin UI assets to WordPress enqueue APIs.
* Updated extension hook names and uninstall cleanup symbols to the long `tradeschool_manager_` prefix for Plugin Check.
* Updated bundled Chart.js to 4.5.1 and TCPDF to 6.11.3.
* Kept first-run and add-on notices limited to TradeSchool Manager admin screens.

= 1.1.15 =
* Limited first-run and add-on data notices to TradeSchool Manager admin screens.
* Converted reviewer-named inline portal/theme, feedback, attendance, page-title, and focus-mode assets to WordPress enqueue APIs.
* Sanitized grade, class, student, and program hook payloads before passing data to extension hooks.
* Sanitized preserved active-year request values before reuse.
* Added the requested WordPress.org contributor username to the readme.

= 1.1.14 =
* Added narrow PHPCS suppressions for intentional public extension hooks that Plugin Check does not accept through its inferred prefix.

= 1.1.13 =
* Updated custom extension hooks to start with the literal `tradeschool-manager` plugin slug used by Plugin Check.
* Scoped uninstall cleanup variables inside a local closure so the uninstall routine does not declare temporary globals.

= 1.1.12 =
* Updated extension hook names and uninstall helper names to the long `tradeschoolmanager_` prefix used for Plugin Check inference.

= 1.1.11 =
* Renamed core extension hooks to a registered plugin prefix for WordPress Plugin Check compliance.
* Cleaned uninstall-only variable and helper names so the uninstall routine passes prefix checks.

= 1.1.10 =
* Updated the Add-ons settings screen to use stable Freemius license routes for Reports & Transcripts and Workshops.

= 1.1.9 =
* Resolved WordPress Plugin Check naming warnings for core teacher portal and grade-save hooks.
* Cleaned uninstall helper naming to use the full TradeSchool Manager prefix.
* Normalized the main plugin file line endings for repository checks.

= 1.1.8 =
* Added invoice context fields so add-ons can link invoices to a specific workshop instance or other future record.

= 1.1.7 =
* Moved the core class report into a Gradebook tab.
* The dedicated Reports navigation now appears only when the Reports & Transcripts add-on is installed.

= 1.1.6 =
* Added teacher portal extension hooks for add-ons.
* Enables the Workshops add-on to show assigned workshop dashboards inside the teacher portal.

= 1.1.5 =
* Improved the shared PDF engine so add-ons can render wide reports in landscape layout.
* Aligned the plugin header version and runtime version constant.

= 1.1.4 =
* Moved Stripe setup out of core Settings navigation and pointed administrators to Invoicing > Stripe.

= 1.1.3 =
* Updated the Add-ons settings screen to use Freemius license popup triggers for inactive registered add-ons, matching the working Plugins screen activation flow.

= 1.1.2 =
* Improved the Add-ons settings screen so inactive Freemius add-ons point to license-key activation and show the correct inactive state.

= 1.1.1 =
* Updated the Add-ons dashboard to use stable add-on license management pages instead of direct Freemius account URLs.

= 1.1.0 =
* Stable launch release of TradeSchool Manager.
* Students, teachers, classes, programs, school years, and year rollover.
* Status-driven gradebook with weighted categories, bonus, late penalty, and per-assignment entry screens (admin + teacher portal).
* Student, teacher, and sponsor portals with branded layouts, password management, and portal page setup.
* Attendance, assignments, announcements, and built-in PDF engine for report cards and transcripts.
* CSV import/export for students, classes, and grades.
* Email notifications with native wp_mail() delivery settings, sender identity controls, template review, and activity logging.
* Setup Checklist, in-admin Documentation, and Shortcodes reference on the About page.
* Add-on framework for optional Certificates, Reports & Transcripts, Workshops, Applications, Invoicing & Contracts, and Custom Fields & Student Documents.

== Upgrade Notice ==

= 1.1.20 =
Maintenance update that resolves the remaining repository check line-ending warning.

= 1.1.19 =
Fixes shared PDF logo handling and adds clear admin report-card and roster PDF downloads under Gradebook > Class Reports.

= 1.1.18 =
Improves the branded admin sidebar order, add-on visibility, and footer polish.

= 1.1.17 =
Restores reliable student portal and teacher portal tab behavior after the enqueued inline asset changes.

= 1.1.16 =
Addresses WordPress.org review concerns around scoped notices, enqueued assets, sanitized hook payloads, prefixed hooks/uninstall cleanup, contributors, and bundled library versions.

= 1.1.15 =
Addresses the main WordPress.org review concerns around admin notices, named inline assets, contributor metadata, and hook payload sanitization.

= 1.1.14 =
Suppresses false positive Plugin Check prefix warnings on intentional public extension hooks.

= 1.1.13 =
Corrects Plugin Check prefix warnings for custom hooks and uninstall cleanup.

= 1.1.12 =
Uses long plugin-derived prefixes for the remaining Plugin Check naming warnings.

= 1.1.11 =
Repository-check cleanup for core extension hooks and uninstall naming.

= 1.1.10 =
Improves license management routing for Reports & Transcripts and Workshops from the core Add-ons screen.

= 1.1.9 =
Repository-check cleanup for hook names, uninstall helper naming, and main file line endings.

= 1.1.8 =
Adds the shared invoice context fields used by workshop instance billing.

= 1.1.7 =
The built-in class report now lives under Gradebook > Class Reports, and the Reports menu is reserved for the Reports & Transcripts add-on.

= 1.1.6 =
Adds teacher portal hooks needed by the Workshops add-on teacher workflow.

= 1.1.5 =
Shared PDF reports can now use landscape layout for wider report tables.

= 1.1.4 =
Stripe setup is now managed from Invoicing > Stripe instead of the core Settings tabs.

= 1.1.3 =
Inactive registered add-ons now open the Freemius license popup from Settings > Add-ons instead of sending administrators to a blocked account URL.

= 1.1.2 =
Inactive Freemius add-ons now show the correct Add-ons dashboard state and route administrators to the license-key screen.

= 1.1.1 =
Uses stable add-on license management pages from Settings > Add-ons.

= 1.1.0 =
Stable launch release.
