{"id":396948,"date":"2026-11-04T11:41:03","date_gmt":"2026-11-04T11:41:03","guid":{"rendered":"https:\/\/en-gb.wordpress.org\/plugins\/em360-school-connector\/"},"modified":"2026-11-04T11:40:48","modified_gmt":"2026-11-04T11:40:48","slug":"em360-educational-management","status":"publish","type":"plugin","link":"https:\/\/br.wordpress.org\/plugins\/em360-educational-management\/","author":23596686,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.28.1","stable_tag":"0.28.1","tested":"7.1.4","requires":"6.6","requires_php":"8.1","requires_plugins":null,"header_name":"EM360 School Connector","header_author":"HarryVille Solutions Ltd","header_description":"Register or connect an EM360 school. Secure owner\/staff sign-in, module navigation and a school overview.","assets_banners_color":"2c5ee6","last_updated":"2026-11-04 11:40:48","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":81,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.28.1":{"tag":"0.28.1","author":"harryvilleit","date":"2026-11-04 11:40:48","revision":3783820}},"upgrade_notice":{"0.28.1":"<p>Activation and documentation improvements. No settings change.<\/p>","0.28.0":"<p>Required by the EM360 Parent Portal add-on, and fixes portal screens that stopped working after opening. No settings change.<\/p>","0.27.2":"<p>Package folder change for new installs. No settings change.<\/p>","0.27.1":"<p>Removes the &quot;not tested&quot; warning on WordPress 7.1.x. No settings change.<\/p>","0.27.0":"<p>If you use the student portal page, install the EM360 Student Portal add-on.<\/p>","0.26.2":"<p>Coding-standards fix. No settings change.<\/p>","0.26.1":"<p>Coding-standards fixes. No settings change.<\/p>","0.26.0":"<p>Restores the dedicated Hostel, Staff and Lesson Notes screens. No settings change.<\/p>","0.25.0":"<p>Rebuilt screens from the public source. No settings change.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3783815,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3783815,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3783815,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3783815,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.28.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[5298,10814,11707,252158,259973],"plugin_category":[47],"plugin_contributors":[290680],"plugin_business_model":[],"class_list":["post-396948","plugin","type-plugin","status-publish","hentry","plugin_tags-education","plugin_tags-learning","plugin_tags-school","plugin_tags-school-management","plugin_tags-staff-portal","plugin_category-education-and-support","plugin_contributors-harryvilleit","plugin_committers-harryvilleit"],"banners":{"banner":"https:\/\/ps.w.org\/em360-educational-management\/assets\/banner-772x250.png?rev=3783815","banner_2x":"https:\/\/ps.w.org\/em360-educational-management\/assets\/banner-1544x500.png?rev=3783815","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/em360-educational-management\/assets\/icon-128x128.png?rev=3783815","icon_2x":"https:\/\/ps.w.org\/em360-educational-management\/assets\/icon-256x256.png?rev=3783815","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>EM360 is a school management platform. This plugin connects a school's WordPress website to its EM360 account, so the school owner and staff can manage the school from the school's own website.<\/p>\n\n<p><strong>Staff portal.<\/strong> School owners and staff sign in with their EM360 account and see only the modules and menus their role allows:<\/p>\n\n<ul>\n<li>User management, roles and permissions, ID cards, consent and visitation<\/li>\n<li>Student and parent records, enrolment and CSV import<\/li>\n<li>Exams and records, results, promotion and broadsheets<\/li>\n<li>Fee management, invoices, payments and payroll<\/li>\n<li>E-learning, timetable, attendance and live classes<\/li>\n<li>Hostel, staff, health records, learner support (SEND), safeguarding and pastoral care<\/li>\n<li>Training, voting, reports and analytics, and the document designer<\/li>\n<\/ul>\n\n<p><strong>How it works.<\/strong><\/p>\n\n<ul>\n<li>The screens are the same React screens as EM360. They run from files inside the plugin, in a frame on your own domain.<\/li>\n<li>Every request goes through the plugin's server-side gateway. It only forwards a fixed list of operations, bound to your school and checked against the signed-in person's permissions.<\/li>\n<li>School records stay in EM360. WordPress stores only the connection settings and encrypted session state.<\/li>\n<li>Sign-in happens on EM360, with the same password, email code and approval screen people already use.<\/li>\n<\/ul>\n\n<p>An EM360 school account is required. A new school can register from the plugin's setup screen.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to EM360, the school management platform operated by HarryVille Solutions Ltd (the plugin's author). It does not work without it.<\/p>\n\n<ul>\n<li><strong>When:<\/strong> while an administrator connects the website, whenever someone signs in to a portal, and on every portal screen that loads or saves school records.<\/li>\n<li><strong>What is sent:<\/strong> the website address and connection request when connecting; sign-in authorisation codes and session credentials; and the school records a signed-in user views, creates or changes (for example student, staff, attendance or fee records), including passwords typed into account-creation or password-reset forms.<\/li>\n<li><strong>Where:<\/strong> the HTTPS EM360 School API address set on the plugin's settings screen, and the EM360 sign-in website (https:\/\/em360s.com) that people are sent to when they sign in.<\/li>\n<\/ul>\n\n<p>Some EM360 screens also load content directly from these services in the visitor's browser:<\/p>\n\n<ul>\n<li><strong>Agora<\/strong> (Agora, Inc.), the real-time video service behind EM360 live classes. It is used only when someone joins a live class. The visitor's browser then sends Agora their camera, microphone and screen-share streams, live-class chat and in-class signals (for example a raised hand), a per-class participant ID, and connection-quality statistics. Agora's SDK also contains an optional diagnostic log upload (to log-collector-query.dc3.agoralab.co); it is off by default and this plugin never turns it on. Terms: https:\/\/www.agora.io\/en\/terms-of-service\/ \u00b7 Privacy: https:\/\/www.agora.io\/en\/privacy-policy\/<\/li>\n<li><strong>Cloudflare Stream<\/strong> (playing and uploading lesson videos the school added). Terms: https:\/\/www.cloudflare.com\/website-terms\/ \u00b7 Privacy: https:\/\/www.cloudflare.com\/privacypolicy\/<\/li>\n<li><strong>YouTube<\/strong> and <strong>Vimeo<\/strong> (lesson videos a teacher linked from those sites). YouTube terms: https:\/\/www.youtube.com\/t\/terms \u00b7 Google privacy: https:\/\/policies.google.com\/privacy \u00b7 Vimeo terms: https:\/\/vimeo.com\/terms \u00b7 Vimeo privacy: https:\/\/vimeo.com\/privacy<\/li>\n<li><strong>Unsplash<\/strong> (placeholder cover images on e-learning class cards). Terms: https:\/\/unsplash.com\/terms \u00b7 Privacy: https:\/\/unsplash.com\/privacy<\/li>\n<\/ul>\n\n<p>The bundled jsPDF library (used to create PDF report cards and invoices in the browser) contains an option that loads a viewer script from cdnjs.cloudflare.com. EM360 never uses that option, so nothing is loaded from there.<\/p>\n\n<p>EM360 legal information: https:\/\/em360s.com\/legal\nPrivacy notice: https:\/\/em360s.com\/legal\/privacy\nAcceptable use: https:\/\/em360s.com\/legal\/acceptable-use\nData deletion: https:\/\/em360s.com\/legal\/data-deletion<\/p>\n\n<h3>Source code and build<\/h3>\n\n<p>The JavaScript and CSS in the versioned folders under <code>assets\/<\/code> (for example <code>assets\/user-management-v016\/<\/code>) are compiled from TypeScript and React. Their complete, human-readable source is public under GPLv2 or later:<\/p>\n\n<ul>\n<li>Repository: https:\/\/github.com\/harryvilleit\/em360-educational-connector<\/li>\n<li>Source of the compiled files: the <code>ui\/<\/code> folder, https:\/\/github.com\/harryvilleit\/em360-educational-connector\/tree\/main\/ui (shared screens in <code>ui\/src\/<\/code>, WordPress code in <code>ui\/wordpress\/<\/code>, build settings in <code>ui\/vite.wordpress.config.ts<\/code>, <code>ui\/vite.wordpress-module.config.ts<\/code> and <code>ui\/vite.wordpress-rebuilt.config.ts<\/code>).<\/li>\n<li><code>ui\/wordpress-bundles.json<\/code> lists every source file behind each compiled folder.<\/li>\n<li>Every compiled file starts with a comment that links to this source.<\/li>\n<\/ul>\n\n<p>Each compiled folder and where its entry point is:<\/p>\n\n<ul>\n<li><code>assets\/user-management-v016\/<\/code>: <code>ui\/wordpress\/index.html<\/code> and <code>ui\/wordpress\/main.tsx<\/code><\/li>\n<li><code>assets\/rebuilt-v0172\/<\/code>: <code>ui\/wordpress\/rebuilt\/<\/code><\/li>\n<li><code>assets\/health-v017\/<\/code>: <code>ui\/wordpress\/health\/<\/code><\/li>\n<li><code>assets\/training-v018\/<\/code>, <code>assets\/learner-support-v019\/<\/code>, <code>assets\/voting-v020\/<\/code>, <code>assets\/reports-v021\/<\/code>, <code>assets\/safeguarding-v022\/<\/code>, <code>assets\/document-designer-v022\/<\/code>: <code>ui\/wordpress\/training\/<\/code>, <code>ui\/wordpress\/learner-support\/<\/code>, <code>ui\/wordpress\/voting\/<\/code>, <code>ui\/wordpress\/reports\/<\/code>, <code>ui\/wordpress\/safeguarding\/<\/code> and <code>ui\/wordpress\/document-designer\/<\/code><\/li>\n<\/ul>\n\n<p>The PHP files, <code>assets\/portal.js<\/code>, <code>assets\/navigation.js<\/code> and <code>assets\/portal.css<\/code> are not compiled.<\/p>\n\n<p>To rebuild the compiled files (Node.js 20 or later), from a clone of the repository:<\/p>\n\n<pre><code>cd ui &amp;&amp; npm ci &amp;&amp; npm run build:wordpress\n<\/code><\/pre>\n\n<p>This writes the compiled folders into <code>plugin\/assets\/<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>EM360<\/strong> in the WordPress admin menu and enter the EM360 service addresses your EM360 contact gave you.<\/li>\n<li>Choose <strong>Register a new school<\/strong> or <strong>Connect an existing school<\/strong>, sign in to EM360 and approve the connection.<\/li>\n<li>Create the school portal page, then add it to your site menu.<\/li>\n<\/ol>\n\n<p>Requirements: HTTPS, a single-site WordPress install, PHP 8.1 or later with OpenSSL, and outbound HTTPS from your server to EM360.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20there%20a%20student%20portal%3F\"><h3>Is there a student portal?<\/h3><\/dt>\n<dd><p>Yes. The free EM360 Student Portal add-on (em360-educational-student-portal) adds a student sign-in page that uses this plugin's school connection. Install it alongside this plugin, then create the student page from the setup screen.<\/p><\/dd>\n<dt id=\"is%20there%20a%20parent%20portal%3F\"><h3>Is there a parent portal?<\/h3><\/dt>\n<dd><p>Yes. The free EM360 Parent Portal add-on (em360-educational-parent-portal) adds a parent sign-in page that uses this plugin's school connection. Parents see only their own children's records, and card payments open the payment provider's checkout in a new tab. Install it alongside this plugin, then create the parent page from the setup screen.<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20em360%20account%3F\"><h3>Do I need an EM360 account?<\/h3><\/dt>\n<dd><p>Yes. The plugin is a connector for EM360 schools. A new school can register from the setup screen.<\/p><\/dd>\n<dt id=\"where%20are%20student%20records%20stored%3F\"><h3>Where are student records stored?<\/h3><\/dt>\n<dd><p>In EM360. WordPress stores only the connection settings and encrypted portal sessions.<\/p><\/dd>\n<dt id=\"should%20the%20portal%20pages%20be%20cached%3F\"><h3>Should the portal pages be cached?<\/h3><\/dt>\n<dd><p>No. Exclude the portal pages, the plugin's REST routes and the sign-in callback from page and CDN caching.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20uninstall%3F\"><h3>What happens when I uninstall?<\/h3><\/dt>\n<dd><p>Disconnect the website first. Uninstalling removes the plugin's settings from WordPress. School records in EM360 and the pages the plugin created are kept.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.28.1<\/h4>\n\n<p>The plugin now always activates. On a multisite network, or when PHP's OpenSSL extension is missing, it stays idle and shows administrators a notice explaining why, instead of stopping the activation. Every compiled JavaScript and CSS file now starts with a link to its public source, and the readme's \"Source code and build\" section maps each compiled folder to its source and build steps.<\/p>\n\n<h4>0.28.0<\/h4>\n\n<p>Adds parent portal support for the new EM360 Parent Portal add-on: a parent sign-in audience kept apart from staff and student sessions, a \"Create parent portal page\" step on the setup screen, and a short notice on <code>[em360_parent_portal]<\/code> pages until the add-on is installed. The extension API now lists the portals it supports (<code>Connector::PORTALS<\/code>). Fixes portal screens that could stop working after they opened: the app's main file was loaded twice (once with a <code>?ver=<\/code> address), which started two copies of React.<\/p>\n\n<h4>0.27.2<\/h4>\n\n<p>The self-hosted package now unpacks to the em360-educational-management folder, the folder the EM360 Student Portal add-on requires, so new installs work with the add-on straight away. Sites installed under another folder name keep it when they update.<\/p>\n\n<h4>0.27.1<\/h4>\n\n<p>Self-hosted updates: \"Compatible up to 7.1\" now covers every 7.1.x release, as on WordPress.org, so WordPress 7.1.4 no longer shows the \"has not been tested\" warning.<\/p>\n\n<h4>0.27.0<\/h4>\n\n<p>The student portal is now the separate EM360 Student Portal add-on, which builds on this plugin's school connection, sessions and gateway through a small extension API (the <code>em360_connector_loaded<\/code> action). Existing student portal pages keep working once the add-on is installed; until then they show a short notice. Self-hosted updates: the \"View details\" window now shows the description, installation steps, FAQ and changelog with the EM360 banner and icon, and updates unpack into the folder the plugin is installed in (for example em360-educational-management), so it stays active.<\/p>\n\n<h4>0.26.2<\/h4>\n\n<p>Portal screens load their script and styles through the WordPress script-module and style queues.<\/p>\n\n<h4>0.26.1<\/h4>\n\n<p>WordPress coding-standards pass for the plugin directory: portal frames are written by an escaped template, request values are unslashed and sanitised, the EM360 sign-in redirect uses wp_safe_redirect, and catalogue files load with wp_json_file_decode. No behaviour change.<\/p>\n\n<h4>0.26.0<\/h4>\n\n<p>School Management edition. Hostel, Staff (with availability) and Lesson Notes run from their own bundle again, and every screen's WordPress behaviour is now in readable source (<code>ui\/wordpress\/overrides\/<\/code>): server-side teacher search and paging, saved result remarks and real result downloads, school-date attendance and timetable defaults, idempotent fee payments and reminders, invoices printed from the portal frame, and payment checkout opened in a new tab. The WordPress.org package leaves out the student sign-in portal.<\/p>\n\n<h4>0.25.0<\/h4>\n\n<p>Every React bundle is now rebuilt from the public source repository. Readme rewritten for site owners; operator deployment notes moved to the source repository. The self-updater is now optional, so the same code ships to WordPress.org without it.<\/p>\n\n<h4>0.24.1<\/h4>\n\n<p>First signed release of 0.24.0. No code changes.<\/p>\n\n<h4>0.24.0<\/h4>\n\n<p>Adds the Student Portal on its own page, using the same React screens as the EM360 student portal: overview, chat, timetable, school calendar, results, subjects, attendance, my support, e-learning (courses, lessons, assignments with voice answers, adaptive practice and live classes), hostel, health record, cafeteria, library, voting and rate school. LifeLab and Tutor Courses open on EM360. Students sign in through EM360; the plugin keeps staff and student sessions apart and the School API binds every student request to the signed-in learner.<\/p>\n\n<h4>0.23.0<\/h4>\n\n<p>Adds one-click updates through Dashboard \u203a Updates for sites installed from an EM360 package.<\/p>\n\n<h4>0.22.0<\/h4>\n\n<p>Adds Safeguarding &amp; Pastoral Care and Document Designer inside WordPress using the original React screens. Every call is a listed gateway operation checked against the screen's menu permission and the connected school (cases, actions, documents, access grants, templates and issued documents). Report a Concern now loads the whole learner list in pages of 100 instead of one oversized request.<\/p>\n\n<h4>0.21.2<\/h4>\n\n<p>Reports no longer substitute sample figures. A source that is restricted (safeguarding without DSL or deputy access, health without the Health Records Overview menu, learner support without SENCO-level access) or fails is left blank with the reason; Library and Cafeteria are shown as not connected. Every report source now uses the same session and term, and the default is the school's current session rather than the newest one created. When the school has not set its base currency, amounts are shown without a currency and the report says how to set it, instead of assuming NGN (WordPress no longer assumes GBP). The API's Reports welfare endpoint now applies safeguarding and learner-support access before returning cases.<\/p>\n\n<h4>0.21.1<\/h4>\n\n<p>Reports &amp; Analytics now loads whole-school student, staff and class lists page by page within the API and gateway limits. Previously the Staff report could not load live data, Enrolment counted at most 100 students, and in WordPress both fell back to sample figures; the Learner Support referral student list was also affected. The staff directory now returns service number, grade level and step, appointment and posting dates, state, LGA and town, so the Staff report roster and records-completeness figures reflect saved staff records.<\/p>\n\n<h4>0.21.0<\/h4>\n\n<p>Adds Reports &amp; Analytics as a native WordPress module built from the original React pages: overview, enrolment, staff, academic, financial, attendance, welfare, operations and My Dashboard. All calls are read-only and go through the school-scoped gateway; each report menu is limited to the data sources its screen uses. Larger report responses (rosters, broadsheets, overviews) are allowed up to 4 MB. Requires the accompanying School API gateway update; no migration.<\/p>\n\n<h4>0.20.0<\/h4>\n\n<p>Adds Voting management as a native WordPress module built from the original React pages: overview, elections, categories, create election, election details and results, and supervised student voting. Calls go through the school-scoped gateway with per-menu permission checks and connected-school checks for elections, categories, sessions, terms, classes and student enrolments. Staff ballots are unchanged. Requires the accompanying School API gateway update; no migration.<\/p>\n\n<h4>0.19.0<\/h4>\n\n<p>Adds Learner Support as a native WordPress module built from the original React pages, including case records and local support settings. Calls go through the school-scoped gateway with per-menu permission checks and connected-school checks for cases, learners, provisions and case owners. Evidence uploads accept PDF, Word, Excel and images. Fixes evidence, contribution, adjustment, provision-log and review forms not clearing after a successful save (also applies to the main EM360 site). Training &amp; Development and Learner Support now share one module frame. Requires the accompanying School API gateway update; no migration.<\/p>\n\n<h4>0.18.0<\/h4>\n\n<p>Adds Training &amp; Development as a native WordPress module built from the original React Training pages: My Training, Course Library, Assignments &amp; Progress and Training Rules. All calls use the shared Training API through the school-scoped gateway with per-menu View\/Create\/Update\/Delete checks and connected-school ownership checks for courses, assignments, rules and assigned staff. Requires the accompanying School API gateway update; no migration.<\/p>\n\n<h4>0.17.1<\/h4>\n\n<p>Uses the full available Health workspace width. Module navigation is sidebar-only. Follow-ups and Access &amp; audit are registered as assignable menus; role-to-user and clinical Health access rules remain in effect. Refreshes retain the screen and open forms, skip hidden tabs and clear data after access loss. Requires the accompanying API menu authorization update and the RegisterHealthSidebarMenus data migration.<\/p>\n\n<h4>0.17.0<\/h4>\n\n<p>Adds the wide responsive Health Records workspace inside WordPress, including paginated histories, incident follow-up and closure, medication status management, immutable administration corrections, linked-guardian contact and portal notification status. Uses shared API records and school-scoped permissions. Requires the corresponding Health API update and migration.<\/p>\n\n<h4>0.16.0<\/h4>\n\n<ul>\n<li>Shared configurable performance templates, review cycles, goals, check-ins and development plans.<\/li>\n<li>Private self-assessment and manager drafts, evidence, approval, acknowledgement and disagreement resolution.<\/li>\n<li>Preserved template snapshots and corrected review revisions; legacy reviews remain read-only.<\/li>\n<li>Responsive WordPress portal screens and original React integration backed by the same API.<\/li>\n<\/ul>\n\n<h4>0.15.0<\/h4>\n\n<ul>\n<li>Shared configurable payroll for React and WordPress: pay items, employee assignments, reviewed drafts, approval, published payslips, CSV import, manual partial payments and reversals.<\/li>\n<li>Payroll cash movements reuse Fee Management bookkeeping. Server totals span all filtered pages and distinguish cash from unpaid face values.<\/li>\n<li>Original salary and payslip history preserved; retired write endpoints cannot bypass the new approval workflow.<\/li>\n<\/ul>\n\n<h4>0.14.0<\/h4>\n\n<ul>\n<li>Reuse the supplied React layouts for all Hostel menus, room details and forms.<\/li>\n<li>Connect floors, student\/bed assignments, CSV assignment previews, supervisors, visitor editing and packages, attendance, damage reports, health records and movement to school-scoped API records.<\/li>\n<li>Retain menu permissions, clinical health permissions and existing subscription requirements; show request failures with retry.<\/li>\n<li>Add the optional visitor package description field and the Class movement reason without changing existing reason values.<\/li>\n<\/ul>\n\n<h4>0.13.1<\/h4>\n\n<ul>\n<li>Restore the original Hostel summary cards, eleven quick actions and occupancy breakdown design.<\/li>\n<li>Keep loading and API failure states explicit; failed counts are not displayed as zero.<\/li>\n<li>Add school-scoped active-supervisor and open-damage counts without capped client-side lists.<\/li>\n<\/ul>\n\n<h4>0.13.0<\/h4>\n\n<ul>\n<li>Staff directory, profiles, ID cards, own roles and weekly availability.<\/li>\n<li>Leave requests, private attachments, approvals, relief assignments, calendar, balance ledger and settings.<\/li>\n<li>Persisted salary versions, deduplicated pay runs, payment references and payslip PDFs.<\/li>\n<li>Persisted performance reviews, staff acknowledgement, development goals and staff voting.<\/li>\n<\/ul>\n\n<h4>0.12.0<\/h4>\n\n<p>Adds Hostel management within WordPress using saved School API records. Includes room\/floor setup, bed allocation, supervisor assignment and reassignment, historical roll calls, restricted resident health details, visitor arrivals\/departures, damage responsibility and audited student movement. Enforces school and menu scope, protects concurrent allocation and preserves legacy movement data.<\/p>\n\n<h4>0.11.0<\/h4>\n\n<p>Adds Attendance inside WordPress: student dashboard, class registers, records and histories; staff self-service and term summaries; school-verified ID-card arrival scanning; early intervention dashboard, risk queue, cases, activities, reviews, referrals and settings. Uses persistent School API records, school timezone dates and menu\/action grants. Fixes partial register totals and detects concurrent writes. Camera and geolocation permissions are delegated to the local portal frame.<\/p>\n\n<h4>0.10.0<\/h4>\n\n<p>Adds the five Timetable menus inside WordPress: overview, weekly class\/assessment scheduling, school calendar, period types and predefined timetable types. Preserves the original period-bank workflow with an accessible Add to week alternative. Adds school-bound CRUD operations, nested period validation, read-only permissions, status toggles, pagination, retry states and first-partial-week scheduling. School records remain in the central School API.<\/p>\n\n<h4>0.9.0<\/h4>\n\n<p>School E-Learning screens run locally in WordPress using existing teacher course workflows, server-side course permissions, resumable Cloudflare uploads and YouTube fallback. Adds persistent lesson notes with revisions and owner review, live-class room permissions, progress-aware document uploads and a school-scoped bridge to the separate E-Learning API for tutor contracts and payments. Requires matching API files, lesson-note migration and tutor bridge configuration.<\/p>\n\n<h4>0.8.0<\/h4>\n\n<p>Fee Management runs inside WordPress using the existing school workflow and central financial records. Adds scoped fee operations, nested financial-record validation, school-bound guardian search, real guardian email reminders, school-branded invoice PDF\/printing, safe provider onboarding links and retry-safe wallet allocation after a payment is recorded. Includes PATCH support for transaction-type activation. Requires matching School API updates; no additional migration from 0.7.0.<\/p>\n\n<h4>0.7.0<\/h4>\n\n<p>Exams and Records runs inside WordPress with the existing school workflows, teacher assignment\/search, grade entry and worksheet approval, results, persistent remarks, report downloads\/printing, promotion and broadsheets. Every operation uses school-bound menu authorization; nested grade and promotion payloads receive additional record checks. Requires the matching API changes and remarks migration.<\/p>\n\n<h4>0.6.0<\/h4>\n\n<p>Parent Portal: seven local management screens; parent registration\/editing, child linking and password reset; academic records, attendance, timetable and calendar; paginated consent and responses; parent invoice\/payment records with PDF export; visitation review; persistent transcript submission, processing, rejection and dispatch. School\/menu\/resource authorization applies to every gateway operation. Requires matching API changes; no additional migration from 0.5.0.<\/p>\n\n<h4>0.5.0<\/h4>\n\n<p>Student Portal module with local React UI, scoped API operations, persistent extended student profiles and school-bound guardian registration, real CSV import with partial results and retries, and API-correct status filters. Requires the included database migration.<\/p>\n\n<h4>0.4.2<\/h4>\n\n<p>Consistent server and browser menu URL matching, menu-ID handoff, no duplicate school prefix, and explicit unsupported-menu errors. Correct user creation to send all selected roles and Staff ID together. Fix public-page links and post-deletion navigation. Additional permission and functional regression tests. Requires the matching API navigation update.<\/p>\n\n<h4>0.4.1<\/h4>\n\n<p>Full-width application layout for dedicated portal pages. Compact school header, React-style sidebar with desktop collapse and accessible mobile drawer, and a module canvas sized to the available viewport. Existing embedded shortcodes can retain the theme layout with layout=\"embedded\". No API, database or central React deployment is required when upgrading from 0.4.0.<\/p>\n\n<h4>0.4.0<\/h4>\n\n<p>Native User Management React application, scoped API gateway, server-side staff search and exact detail loading, school-membership removal\/restoration, correct consent categories and real visitation\/consent activity. Chat refreshes every ten seconds while visible. The original report-card design preference remains browser-local; notification-delivery preferences remain unavailable as in the supplied UI.<\/p>\n\n<h4>0.3.0<\/h4>\n\n<p>New school-product registration with a one-hour setup request, return to owner approval, and exact new-school selection. Module switching, active-module sidebar, menu permission display and permission-checked links to existing EM360 screens.<\/p>\n\n<h4>0.2.0<\/h4>\n\n<p>Rebuilt PHP using typed domain models, focused application services, narrow interfaces, constructor dependency injection and WordPress adapters. Composer PSR-4 autoloading is included; schools do not need Composer. Existing Phase 1 behavior and record formats are preserved.<\/p>\n\n<h4>0.1.0<\/h4>\n\n<p>Initial school-connector foundation: setup, approval, school-scoped sign-in, read-only dashboard and website revocation.<\/p>","raw_excerpt":"Run EM360 school management on your own WordPress website, with the same screens as EM360.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/396948","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=396948"}],"author":[{"embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/harryvilleit"}],"wp:attachment":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=396948"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=396948"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=396948"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=396948"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=396948"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=396948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}