{"id":330798,"date":"2026-08-03T15:36:48","date_gmt":"2026-08-03T15:36:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/classflow-lms\/"},"modified":"2026-08-03T15:36:36","modified_gmt":"2026-08-03T15:36:36","slug":"unified-private-class-lms","status":"publish","type":"plugin","link":"https:\/\/fi.wordpress.org\/plugins\/unified-private-class-lms\/","author":18510023,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.0","stable_tag":"1.5.0","tested":"7.0.4","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Unified Private Class LMS","header_author":"Janindu Hansaka","header_description":"A private tutoring and class-management system: teacher and student dashboards, recurring scheduling with optional Zoom meetings, and optional Stripe weekly subscriptions.","assets_banners_color":"","last_updated":"2026-08-03 15:36:36","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wpteacher.me\/private-class-lms\/","header_author_uri":"https:\/\/www.wpteacher.me","rating":0,"author_block_rating":0,"active_installs":0,"downloads":83,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.5.0":{"tag":"1.5.0","author":"janinduhansaka","date":"2026-08-03 15:36:36"}},"upgrade_notice":{"1.5.0":"<p>Front-end assets are now served locally instead of from a CDN, and a new Contact \/ Sign-up URL setting controls the link on the sign-in screen.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.5.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2195,268,5349,274354,853],"plugin_category":[40,45],"plugin_contributors":[274355],"plugin_business_model":[],"class_list":["post-330798","plugin","type-plugin","status-publish","hentry","plugin_tags-lms","plugin_tags-scheduling","plugin_tags-stripe","plugin_tags-tutoring","plugin_tags-zoom","plugin_category-calendar-and-events","plugin_category-ecommerce","plugin_contributors-janinduhansaka","plugin_committers-janinduhansaka"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/unified-private-class-lms.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Unified Private Class LMS is a lightweight learning-management and class-administration plugin built for private tutors, small academies, and one-to-one teaching businesses. It gives you a dedicated <strong>teacher dashboard<\/strong> and <strong>student dashboard<\/strong> on the front end of your site, so neither group ever needs to touch wp-admin.<\/p>\n\n<p>Teachers create classes, enrol students, schedule recurring weekly sessions, share materials, and track payments. Students sign in to a branded dashboard to see their upcoming classes, join links, schedule calendar, course materials, and billing history.<\/p>\n\n<p>Two integrations are <strong>optional<\/strong> and only activate when you add credentials in the settings screen:<\/p>\n\n<ul>\n<li><strong>Zoom<\/strong> \u2014 when configured, creating a class automatically provisions a recurring weekly Zoom meeting, and the join link appears on the student dashboard shortly before each session.<\/li>\n<li><strong>Stripe<\/strong> \u2014 when configured, a class can carry a weekly subscription. Students pay through Stripe's hosted Checkout, and a webhook keeps their access in sync with their payment status.<\/li>\n<\/ul>\n\n<p>If you do not configure Zoom or Stripe, the plugin works as a standalone scheduling and class-management tool.<\/p>\n\n<h4>Key features<\/h4>\n\n<ul>\n<li>Front-end <strong>Teacher Dashboard<\/strong> \u2014 overview, students, classes, payments, meetings, and a full schedule calendar.<\/li>\n<li>Front-end <strong>Student Dashboard<\/strong> \u2014 my classes, schedule calendar, payment history, course materials, and account settings.<\/li>\n<li>Two custom roles (Teacher and Student) with no public self-registration \u2014 teachers create student accounts.<\/li>\n<li>Recurring <strong>weekly session generation<\/strong> with automatic status updates and session reminders via WP-Cron.<\/li>\n<li>Optional <strong>Zoom<\/strong> recurring meetings (Server-to-Server OAuth).<\/li>\n<li>Optional <strong>Stripe<\/strong> weekly subscriptions with hosted Checkout, a customer billing portal, and webhook-driven access control.<\/li>\n<li>HTML email notifications (welcome, class confirmation, payment receipt\/failure, reminders) with editable templates.<\/li>\n<li>A branded, self-contained sign-in screen that keeps students and teachers out of wp-admin.<\/li>\n<\/ul>\n\n<h4>Privacy &amp; third-party services<\/h4>\n\n<p>This plugin does <strong>not<\/strong> phone home, and it does not collect, share, or transmit any data on its own. Data is only ever sent to a third-party service when <strong>you<\/strong> enable and configure that integration, and only the data required to perform the action you requested.<\/p>\n\n<p><strong>Zoom (optional, only when Zoom credentials are entered)<\/strong>\nWhen enabled, the plugin communicates with the Zoom API to create and manage the meetings tied to your classes. Data sent includes the class title\/agenda, schedule (day, time, duration, timezone) and recurrence. This happens server-to-server using the Server-to-Server OAuth credentials you provide.<\/p>\n\n<ul>\n<li>Zoom API endpoints: https:\/\/zoom.us\/oauth\/token and https:\/\/api.zoom.us\/v2<\/li>\n<li>Zoom Terms of Service: https:\/\/www.zoom.com\/en\/trust\/terms\/<\/li>\n<li>Zoom Privacy Statement: https:\/\/www.zoom.com\/en\/trust\/privacy\/<\/li>\n<\/ul>\n\n<p><strong>Stripe (optional, only when Stripe credentials are entered)<\/strong>\nWhen enabled, the plugin communicates with the Stripe API to create customers, prices, subscriptions, and Checkout\/Billing-Portal sessions, and it receives Stripe webhooks. Data sent includes the student's name and email and the class price\/currency. When a student pays, their browser is redirected to Stripe's hosted Checkout page. The plugin bundles the official, unmodified Stripe PHP SDK (MIT licensed).<\/p>\n\n<ul>\n<li>Stripe API endpoint: https:\/\/api.stripe.com (via the Stripe PHP SDK), plus the hosted https:\/\/checkout.stripe.com Checkout page<\/li>\n<li>Stripe Services Agreement: https:\/\/stripe.com\/legal\/ssa<\/li>\n<li>Stripe Privacy Policy: https:\/\/stripe.com\/privacy<\/li>\n<\/ul>\n\n<p>All front-end assets (the FullCalendar library and the Plus Jakarta Sans web font) are bundled with the plugin and served from your own site \u2014 nothing is loaded from an external CDN.<\/p>\n\n<p><em>Zoom and Stripe are trademarks of their respective owners. This plugin is an independent integration and is not endorsed by, certified by, or affiliated with Zoom Video Communications, Inc. or Stripe, Inc.<\/em><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>unified-private-class-lms<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP from <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen. Activation creates the custom roles, database tables, scheduled events, and the two dashboard pages automatically.<\/li>\n<li>Go to <strong>Unified Private Class LMS \u2192 Settings<\/strong> and configure:\n\n<ul>\n<li><strong>General:<\/strong> default timezone and currency, the optional contact\/sign-up URL, and the email templates.<\/li>\n<li><strong>Zoom (optional):<\/strong> Account ID, Client ID, and Client Secret from a Server-to-Server OAuth app.<\/li>\n<li><strong>Stripe (optional):<\/strong> Secret Key, Publishable Key, and Webhook Signing Secret.<\/li>\n<li><strong>Pages:<\/strong> confirm the student and teacher dashboard pages.<\/li>\n<\/ul><\/li>\n<li>If you use Stripe, add a webhook endpoint in your Stripe dashboard pointing to <code>https:\/\/your-site.com\/wp-json\/classflow\/v1\/stripe-webhook<\/code>, subscribe it to the checkout\/invoice\/subscription events, and paste its signing secret into <strong>Settings \u2192 Stripe<\/strong>.<\/li>\n<\/ol>\n\n<p>The teacher and student dashboards are rendered by the <code>[classflow_teacher_dashboard]<\/code> and <code>[classflow_student_dashboard]<\/code> shortcodes, which are placed on the auto-created pages.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20have%20to%20use%20zoom%20and%20stripe%3F\"><h3>Do I have to use Zoom and Stripe?<\/h3><\/dt>\n<dd><p>No. Both are optional. With no credentials entered, Unified Private Class LMS works as a standalone class scheduling and management tool. Add Zoom credentials to auto-create meetings, and\/or Stripe credentials to bill weekly subscriptions.<\/p><\/dd>\n<dt id=\"can%20students%20or%20teachers%20access%20wp-admin%3F\"><h3>Can students or teachers access wp-admin?<\/h3><\/dt>\n<dd><p>No. Users with the Student or Teacher role are redirected to their front-end dashboard and the admin bar is hidden for them. Administrators are unaffected.<\/p><\/dd>\n<dt id=\"can%20students%20register%20themselves%3F\"><h3>Can students register themselves?<\/h3><\/dt>\n<dd><p>No. There is no public self-registration. Teachers create student accounts, which keeps your roster private.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20my%20data%20anywhere%3F\"><h3>Does the plugin send my data anywhere?<\/h3><\/dt>\n<dd><p>Only to the integrations you explicitly configure (Zoom and\/or Stripe), and only the data needed for the action you requested. The plugin does not track users or call home. See the Privacy &amp; third-party services section above.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20when%20i%20uninstall%3F\"><h3>What happens to my data when I uninstall?<\/h3><\/dt>\n<dd><p>Roles, options, and the cached Zoom token are removed on uninstall. Your class, session, and billing tables are preserved by default to avoid accidental loss of financial records. Define the constant <code>CLASSFLOW_LMS_DROP_TABLES<\/code> as <code>true<\/code> before uninstalling if you want the tables dropped too.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Bundled the FullCalendar library and the Plus Jakarta Sans web font locally (no external CDN requests).<\/li>\n<li>Added a configurable Contact \/ Sign-up URL setting for the sign-in screen.<\/li>\n<li>Documented Zoom and Stripe data flows for transparency.<\/li>\n<li>Housekeeping: more complete uninstall cleanup.<\/li>\n<\/ul>","raw_excerpt":"Private tutoring and class management: teacher &amp; student dashboards, recurring scheduling, optional Zoom meetings, and optional Stripe weekly billing.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/330798","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fi.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fi.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=330798"}],"author":[{"embeddable":true,"href":"https:\/\/fi.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/janinduhansaka"}],"wp:attachment":[{"href":"https:\/\/fi.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=330798"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=330798"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=330798"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=330798"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=330798"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=330798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}