{"id":282827,"date":"2026-02-28T12:44:18","date_gmt":"2026-02-28T12:44:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tutor-tools-lite\/"},"modified":"2026-02-28T12:53:55","modified_gmt":"2026-02-28T12:53:55","slug":"marivya-lesson-planner","status":"publish","type":"plugin","link":"https:\/\/eu.wordpress.org\/plugins\/marivya-lesson-planner\/","author":23412687,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.4.2","stable_tag":"1.4.2","tested":"6.9.4","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"Marivya Lesson Planner","header_author":"marivya","header_description":"Lightweight lesson planner & student portal for private teachers (students, lessons, materials, and a simple portal page).","assets_banners_color":"371c74","last_updated":"2026-02-28 12:53:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":252,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.4.2":{"tag":"1.4.2","author":"marivya","date":"2026-02-28 12:53:55"}},"upgrade_notice":{"1.4.2":"<p>WordPress-compatibility hardening + cleaner admin messages. Portal link uses the saved Portal URL.<\/p>","1.4.1":"<p>Calendar fixes + student filter, improved notifications timezone handling, and portal URL setting.<\/p>","1.0.0":"<p>First public release of Marivya Lesson Planner.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3471722,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3471722,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3471722,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3471722,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.2"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Students list and student edit screen","2":"Lesson editor with date\/time\/duration","3":"Materials attached to a student","4":"Student Portal access (magic link \/ PIN)","5":"Calendar view (moving lessons via drag &amp; drop)","6":"Student Portal (student view)"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[416,18364,5883,4538,17659],"plugin_category":[40],"plugin_contributors":[256791],"plugin_business_model":[],"class_list":["post-282827","plugin","type-plugin","status-publish","hentry","plugin_tags-calendar","plugin_tags-lessons","plugin_tags-planner","plugin_tags-portal","plugin_tags-students","plugin_category-calendar-and-events","plugin_contributors-marivya","plugin_committers-marivya"],"banners":{"banner":"https:\/\/ps.w.org\/marivya-lesson-planner\/assets\/banner-772x250.png?rev=3471722","banner_2x":"https:\/\/ps.w.org\/marivya-lesson-planner\/assets\/banner-1544x500.png?rev=3471722","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/marivya-lesson-planner\/assets\/icon-128x128.png?rev=3471722","icon_2x":"https:\/\/ps.w.org\/marivya-lesson-planner\/assets\/icon-256x256.png?rev=3471722","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Marivya Lesson Planner<\/strong> helps private teachers keep track of their students, lessons and shared materials.\nIt includes a minimal <strong>Student Portal<\/strong> that students can open via a <strong>magic link<\/strong> (token) or <strong>PIN<\/strong>, so they can see upcoming lessons and notes without creating an account.<\/p>\n\n<p><strong>Highlights<\/strong>\n- Custom post types for <strong>Students<\/strong>, <strong>Lessons<\/strong>, and <strong>Materials<\/strong>\n- Calendar-friendly lesson data (date, time, duration, status)\n- Materials linked to a student or global\n- <strong>Student Portal<\/strong> access via magic link (token) or PIN\n- Rate-limited PIN attempts and HMAC-signed session cookie\n- Admin AJAX for moving lessons on a calendar\n- WordPress privacy integration: personal data <strong>exporter<\/strong> and <strong>eraser<\/strong>\n- No telemetry. No external services required.<\/p>\n\n<p><strong>Pro (optional add-on)<\/strong>\n- Recurring lessons, advanced reminders, templates, richer student portal, and more.\n- A gentle \u201cPro\u201d upsell is shown only on plugin screens (no global banners).<\/p>\n\n<blockquote>\n  <p>This plugin is independent and not affiliated with any LMS vendor.<\/p>\n<\/blockquote>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Create a <strong>Student<\/strong> and start adding <strong>Lessons<\/strong> (date, time, duration, notes, homework).<\/li>\n<li>Optionally attach <strong>Materials<\/strong> to a student.<\/li>\n<li>Open a student and use the <strong>Student Portal access<\/strong> box to:\n\n<ul>\n<li>Generate a <strong>magic link<\/strong> (time-limited token) and copy\/send it,<\/li>\n<li>Or set a <strong>PIN<\/strong> (hashed and never emailed).<\/li>\n<\/ul><\/li>\n<li>Students access the portal from the link or by PIN. A secure session cookie keeps them logged in for 30 days.<\/li>\n<\/ol>\n\n<h4>Privacy<\/h4>\n\n<ul>\n<li>Includes a <strong>personal data exporter<\/strong> and <strong>eraser<\/strong> (<code>Tools \u2192 Export\/Erase Personal Data<\/code>).<\/li>\n<li>Student portal session cookie: <code>marivya_lp_portal<\/code> (HTTP-only, SameSite=Lax, Secure on HTTPS), expires in 30 days.<\/li>\n<li>Magic links expire after a chosen number of days (default 7).<\/li>\n<li>No personal data is sent to third parties.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/marivya-lesson-planner\/<\/code> directory or install via <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>A <strong>Student Portal<\/strong> page is created automatically (you can change the URL later).<\/li>\n<li>Go to <strong>Students<\/strong> and create your first student. Add lessons\/materials as needed.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20send%20a%20magic%20link%20to%20a%20student%3F\"><h3>How do I send a magic link to a student?<\/h3><\/dt>\n<dd><p>Open a <strong>Student<\/strong> in the admin and use the <strong>Student Portal access<\/strong> box to generate and copy the link, or send it via email from the same screen.<\/p><\/dd>\n<dt id=\"can%20i%20use%20a%20pin%20instead%20of%20a%20link%3F\"><h3>Can I use a PIN instead of a link?<\/h3><\/dt>\n<dd><p>Yes. Set a PIN in the same <strong>Student Portal access<\/strong> box. PIN attempts are rate-limited and the PIN is stored as a hash.<\/p><\/dd>\n<dt id=\"where%20is%20the%20portal%20page%20url%20set%3F\"><h3>Where is the portal page URL set?<\/h3><\/dt>\n<dd><p>A portal page is created on activation. You can change the base URL used in student access links in <strong>Marivya Lesson Planner \u2192 Settings \u2192 Student Portal<\/strong>.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20add%20a%20frontend%20login%20or%20user%20accounts%3F\"><h3>Does the plugin add a frontend login or user accounts?<\/h3><\/dt>\n<dd><p>No. Students access their portal via a time-limited token link or a PIN; no WP user accounts are created.<\/p><\/dd>\n<dt id=\"how%20do%20i%20export%20or%20erase%20personal%20data%3F\"><h3>How do I export or erase personal data?<\/h3><\/dt>\n<dd><p>Use WordPress tools: <strong>Tools \u2192 Export Personal Data<\/strong> \/ <strong>Tools \u2192 Erase Personal Data<\/strong>. The plugin registers its own exporter\/eraser.<\/p><\/dd>\n<dt id=\"does%20uninstall%20remove%20all%20data%3F\"><h3>Does uninstall remove all data?<\/h3><\/dt>\n<dd><p>By default, options and sensitive portal metadata are removed, while CPT content (students\/lessons\/materials) is preserved.\nYou can force full removal via:\n    define( 'MARIVYA_LP_DELETE_ALL_DATA_ON_UNINSTALL', true );\nor by hooking:\n    add_filter( 'marivya_lp_uninstall_remove_content', '__return_true' );<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>Improved WordPress compatibility (standard i18n loading, clearer security\/permissions messages).<\/li>\n<li>Portal link now uses your saved Portal URL setting.<\/li>\n<li>Portal \"page created\" notice is shown once after activation.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Fix: calendar navigation and AJAX config.<\/li>\n<li>New: click an empty calendar slot to create a lesson (prefills date\/time + student).<\/li>\n<li>New: student filter in weekly calendar.<\/li>\n<li>Improved: status styling in calendar (planned\/done\/cancelled).<\/li>\n<li>Improved: notification scheduling uses site timezone; added \u201csend to teacher email\u201d; ICS export includes student name + meeting URL.<\/li>\n<li>New: Student Portal URL setting.<\/li>\n<li>Hardening: improved sanitization for emails\/URLs.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<li>Students, Lessons, Materials CPTs.<\/li>\n<li>Student Portal with magic link and PIN.<\/li>\n<li>AJAX endpoints for calendar events and moving lessons.<\/li>\n<li>Privacy exporter\/eraser integration.<\/li>\n<li>Gentle Pro upsell.<\/li>\n<\/ul>","raw_excerpt":"Lightweight toolkit for private teachers: manage students, lessons, and materials \u2014 with a simple student portal (magic link or PIN). GDPR-friendly.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/282827","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=282827"}],"author":[{"embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/marivya"}],"wp:attachment":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=282827"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=282827"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=282827"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=282827"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=282827"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=282827"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}