WP Manifestindependent plugin directory
manifest / unclassified / basic-lms-wp-plugin

Basic LMS (Single-Vendor)

Single-tutor LMS — student registration, course/module/lesson management, hybrid learning (Zoom/Meet + recorded video with resume playback), PayHere/WebXPay/Bank-Slip payments, watermarked videos, device limit, smart discovery, completion analytics.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/esupporttechnology/basic-lms-wp-plugin/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

A single-tutor Learning Management System with course management, hybrid learning (live + recorded), resume playback, Sri Lankan payment gateways, device limit, and watermarked videos.

Features

  • Student registration & login (with optional 2FA + forgot password)
  • Single tutor — manages everything from WP admin (no teacher onboarding/approval)
  • Course → Module → Lesson hierarchy
  • Lesson types: Video (MP4/streaming), PDF, External Link, Live Session (Zoom/Meet)
  • Resume playback — videos remember where the student left off; auto-marks complete at 90% watched
  • Multiple Sri Lankan payment gateways: PayHere, WebXPay, plus Bank Slip upload
  • Manual enrollment — tutor can enroll a student directly by email
  • Device limit (default 2 per student)
  • Watermark overlay — student email + phone, drifts across corners to prevent simple cover-ups
  • Smart discovery: filter by Year / Subject / Topic, keyword search with autosuggest
  • Analytics: active users (30d), course completion rates, revenue by month, recent payments
  • Broadcast notifications — email all enrolled students of a course (course updates, live class reminders)

Installation

  1. Upload to /wp-content/plugins/ and activate
  2. Go to LMS → Settings and configure:
    • Currency, device limit, video save interval
    • PayHere merchant ID & secret (start in sandbox)
    • WebXPay public key & endpoint (after you sign up)
    • Bank account details for the Bank Slip option
    • Watermark text (default: {email} {phone} — placeholders also support {name}, {id})
  3. Create six pages, each containing one shortcode:
    • [blms_login] — login + 2FA + forgot password
    • [blms_register] — student signup
    • [blms_student_dashboard] — student dashboard (courses, notifications, devices)
    • [blms_courses] — public course catalog with filters
    • [blms_course] — course detail (uses ?slug=course-slug)
    • [blms_lesson] — lesson player with resume (uses ?slug=course-slug&lesson=ID)
  4. In LMS → Settings → Pages, assign each page to its slot

Tutor Workflow

The tutor is the WordPress administrator. They use:

  • LMS → Courses — create/edit/delete courses, manage modules and lessons, schedule live sessions
  • LMS → Enrollments — view all enrollments, manually enroll a student by email
  • LMS → Payments — review bank slip uploads, approve/reject them
  • LMS → Analytics — active users, course completion rates, revenue by month
  • Edit Course → Broadcast Notification — email all enrolled students with course updates or live class reminders

Payment Notes

PayHere: works out of the box. Use sandbox during testing. Notify URL is /wp-admin/admin-ajax.php?action=blms_payhere_notify — set this in your PayHere dashboard if asked.

WebXPay: WebXPay's checkout uses RSA-encrypted payment payloads. This plugin ships with a working scaffold. After signup, paste your public key in settings. You may need to adjust the request fields and the webxpay_notify() handler in class-blms-payments.php to match WebXPay's exact response format.

Bank Slip: students upload a transfer receipt; appears in LMS → Payments for admin review. Approving auto-enrolls them.

Manual enrollment: in LMS → Enrollments, enter the student's email and pick a course. No payment is collected, but a payment record is created with gateway=manual for audit purposes.

Resume Playback

When a student watches a video:

  • The plugin saves position every N seconds (configurable in Settings → Video Position Save Interval)
  • Position is also saved when the video is paused or the page is closed
  • On reload, playback resumes from the saved position
  • When watched ≥90% of the duration, the lesson is auto-marked complete

Limitations & Known Roughness

This is a fast-built scaffold covering the full spec. Production hardening still needed:

  • Watermark is client-side CSS overlay. A determined user can remove it with browser dev tools or by screen-recording. Server-side per-student video transcoding (FFmpeg) is the only piracy-proof option but adds infra cost.
  • Device limit uses a long-lived cookie + UA hash. Clearing cookies bypasses it. FingerprintJS would be stronger.
  • Live sessions are link-based — paste Zoom/Meet URL manually. No OAuth integration.
  • No video hosting included — paste MP4/HLS URLs from your own host (S3, Bunny, Cloudflare Stream).
  • No refunds workflow — handle manually via the payments admin.
  • No CSV bulk import.

Changelog

1.0.0

Initial release.