Fix/course feedback question delete#246
Merged
anupdeveloper merged 2 commits intoFeb 26, 2026
Merged
Conversation
krupa-1926
added a commit
to krupa-1926/tadreeblms
that referenced
this pull request
Mar 6, 2026
* Show course start date and expiry date in courses list table Tadreeb-LMS#109 * Delete Button Not Working for Course Feedback Questions Tadreeb-LMS#145 --------- Co-authored-by: krupa-1926 <[email protected]>
sayanwis06
pushed a commit
that referenced
this pull request
Mar 15, 2026
* General Page with Save Functionality & Additional Fields #205 * Add deployment workflow (#240) Co-authored-by: muneeb <[email protected]> * Fix/course feedback question delete (#246) * Show course start date and expiry date in courses list table #109 * Delete Button Not Working for Course Feedback Questions #145 --------- Co-authored-by: krupa-1926 <[email protected]> * Add Last 10 Created Courses table to admin dashboard (fixes #216) (#251) * feat: Add Last 10 Created Courses table to admin dashboard (fixes #216) Co-authored-by: Cursor <[email protected]> * fix: add missing @endif in dashboard blade --------- Co-authored-by: Cursor <[email protected]> * Fix:Verified Trainee Not Appearing in User List After Signup #249 (#250) * Show course start date and expiry date in courses list table #109 (#245) Co-authored-by: krupa-1926 <[email protected]> * Add Edit Feedback Question #161 * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 --------- Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]>
TadreebLMS
pushed a commit
that referenced
this pull request
Mar 18, 2026
* fix: feat: move course assignment to modal popup (fixes #270) (#277) Co-authored-by: Pangea 3 <[email protected]> * fix: feat: make footer customizable and hide when landing page is disabled (fixes #268) (#278) Co-authored-by: Pangea 3 <[email protected]> * update admin dashboard (#279) * bug fix (#285) * payments module (#281) * fix sylink issue (#292) * Feat/1 white board integration (#288) * WHite board wip * updated config and functionalities * Updated Whiteboard Module and symlink removed * fix(ui): auto-close enroll users modal after successful enrollment (#289) (#295) * Add refresh option for captcha on login page #67 (#266) * General Page with Save Functionality & Additional Fields #205 * Add deployment workflow (#240) Co-authored-by: muneeb <[email protected]> * Fix/course feedback question delete (#246) * Show course start date and expiry date in courses list table #109 * Delete Button Not Working for Course Feedback Questions #145 --------- Co-authored-by: krupa-1926 <[email protected]> * Add Last 10 Created Courses table to admin dashboard (fixes #216) (#251) * feat: Add Last 10 Created Courses table to admin dashboard (fixes #216) Co-authored-by: Cursor <[email protected]> * fix: add missing @endif in dashboard blade --------- Co-authored-by: Cursor <[email protected]> * Fix:Verified Trainee Not Appearing in User List After Signup #249 (#250) * Show course start date and expiry date in courses list table #109 (#245) Co-authored-by: krupa-1926 <[email protected]> * Add Edit Feedback Question #161 * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 --------- Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]> * Fix/#67 merge issues (#304) * fix(external-apps): hide Upload New Module button when no modules installed (#314) Closes #313 When the apps list is empty the top-right 'Upload New Module' button is now hidden; only the 'Upload First Module' button in the empty-state card is shown, removing the redundancy. Also includes marketplace discovery banner from #294. * feat(admin): improve user feedback answer filtering UX (#305) * fix(course-assignments): use authenticated admin for assign_by (#307) * feat(admin): add Excel export for User Feedback Answers (#306) * feat(admin): improve user feedback answer filtering UX * feat(admin): add Excel export for user feedback answers * style(admin): simplify export icon and center it * calender and offline attendence flow (#321) * security: block installer re-run, neutralize phpinfo, protect db_config (#311) * Allow Multiple Videos per Lesson #236 (#293) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 --------- Co-authored-by: krupa-1926 <[email protected]> * Enhc/243 course session on calender (#324) * calender and offline attendence flow * host link for teacher * migration issues fixed * permission issue fix in dev (#326) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue --------- Co-authored-by: muneeb <[email protected]> * signup issue fix (#328) * Feat/google meet (#327) * google meet wip * updated g-meet * Expired Courses Shown as Draft Instead of "Expired" #146 (#276) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 --------- Co-authored-by: krupa-1926 <[email protected]> * updated web routes (#330) * Admin Unable to Edit Course #290 (#298) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 --------- Co-authored-by: krupa-1926 <[email protected]> * fixed conflict issue (#331) * Add Price Field for Paid Courses #283 (#299) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 * Add Price Field for Paid Courses #283 --------- Co-authored-by: krupa-1926 <[email protected]> * Feature/multi course assignment (#302) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Enable multi selection of courses for assignment to users #211 --------- Co-authored-by: krupa-1926 <[email protected]> * free course issue fixed (#333) --------- Co-authored-by: Sebastian Mühlbauer <[email protected]> Co-authored-by: Pangea 3 <[email protected]> Co-authored-by: rohit chauhan <[email protected]> Co-authored-by: imranbeyond <[email protected]> Co-authored-by: Zheyon <[email protected]> Co-authored-by: Krupa Patel <[email protected]> Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]>
TadreebLMS
added a commit
that referenced
this pull request
Apr 2, 2026
* fix: feat: move course assignment to modal popup (fixes #270) (#277) Co-authored-by: Pangea 3 <[email protected]> * fix: feat: make footer customizable and hide when landing page is disabled (fixes #268) (#278) Co-authored-by: Pangea 3 <[email protected]> * update admin dashboard (#279) * bug fix (#285) * payments module (#281) * fix sylink issue (#292) * Feat/1 white board integration (#288) * WHite board wip * updated config and functionalities * Updated Whiteboard Module and symlink removed * fix(ui): auto-close enroll users modal after successful enrollment (#289) (#295) * Add refresh option for captcha on login page #67 (#266) * General Page with Save Functionality & Additional Fields #205 * Add deployment workflow (#240) Co-authored-by: muneeb <[email protected]> * Fix/course feedback question delete (#246) * Show course start date and expiry date in courses list table #109 * Delete Button Not Working for Course Feedback Questions #145 --------- Co-authored-by: krupa-1926 <[email protected]> * Add Last 10 Created Courses table to admin dashboard (fixes #216) (#251) * feat: Add Last 10 Created Courses table to admin dashboard (fixes #216) Co-authored-by: Cursor <[email protected]> * fix: add missing @endif in dashboard blade --------- Co-authored-by: Cursor <[email protected]> * Fix:Verified Trainee Not Appearing in User List After Signup #249 (#250) * Show course start date and expiry date in courses list table #109 (#245) Co-authored-by: krupa-1926 <[email protected]> * Add Edit Feedback Question #161 * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 --------- Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]> * Fix/#67 merge issues (#304) * fix(external-apps): hide Upload New Module button when no modules installed (#314) Closes #313 When the apps list is empty the top-right 'Upload New Module' button is now hidden; only the 'Upload First Module' button in the empty-state card is shown, removing the redundancy. Also includes marketplace discovery banner from #294. * feat(admin): improve user feedback answer filtering UX (#305) * fix(course-assignments): use authenticated admin for assign_by (#307) * feat(admin): add Excel export for User Feedback Answers (#306) * feat(admin): improve user feedback answer filtering UX * feat(admin): add Excel export for user feedback answers * style(admin): simplify export icon and center it * calender and offline attendence flow (#321) * security: block installer re-run, neutralize phpinfo, protect db_config (#311) * Allow Multiple Videos per Lesson #236 (#293) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 --------- Co-authored-by: krupa-1926 <[email protected]> * Enhc/243 course session on calender (#324) * calender and offline attendence flow * host link for teacher * migration issues fixed * permission issue fix in dev (#326) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue --------- Co-authored-by: muneeb <[email protected]> * signup issue fix (#328) * Feat/google meet (#327) * google meet wip * updated g-meet * Expired Courses Shown as Draft Instead of "Expired" #146 (#276) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 --------- Co-authored-by: krupa-1926 <[email protected]> * updated web routes (#330) * Admin Unable to Edit Course #290 (#298) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 --------- Co-authored-by: krupa-1926 <[email protected]> * fixed conflict issue (#331) * Add Price Field for Paid Courses #283 (#299) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 * Add Price Field for Paid Courses #283 --------- Co-authored-by: krupa-1926 <[email protected]> * Feature/multi course assignment (#302) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Enable multi selection of courses for assignment to users #211 --------- Co-authored-by: krupa-1926 <[email protected]> * free course issue fixed (#333) * installation issye fix (#338) * fix ajax error (#339) * Restrict access to sensitive files in .htaccess * Add Post-Creation Confirmation Popup with Course Assignment Redirect #212 (#300) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 * Add Price Field for Paid Courses #283 * Add Post-Creation Confirmation Popup with Course Assignment Redirect #212 --------- Co-authored-by: krupa-1926 <[email protected]> * fix(#286): restore landing page routing for anonymous users (#332) Root cause 1 – HomeController::index() was consuming the query-string parameter ?page= as a CMS page slug. Pagination links at /?page=1 were triggering a DB lookup for slug '1', which resulted in a 404. Fix: accept page as a route parameter only (already provided by the catch-all route /{page?}), so query-string page values are ignored. Root cause 2 – config('theme_layout') could be null or an unsupported string, causing view('frontend.index-') which does not exist. Fix: normalize theme_layout to a string; fall back to '1' if the value is absent or outside the accepted range ['1','2','3','4']; resolve the view through a three-step fallback chain $path.index-N → frontend.index-N → frontend.index-1 to guarantee a valid view is always returned. Root cause 3 – AppServiceProvider::boot() did not share a 'slides' variable when the sliders table was absent during early installation, causing a 'Undefined variable $slides' error in layout templates. Fix: share an empty collection as fallback. Secondary fix – strict comparison (===) and explicit int cast for the toggle value prevent string '0'/'1' edge cases from bypassing the landing-enabled check. Resolves #286 * Fix/sidebar user group under user management (#334) * fix(#286): restore landing page routing for anonymous users Root cause 1 – HomeController::index() was consuming the query-string parameter ?page= as a CMS page slug. Pagination links at /?page=1 were triggering a DB lookup for slug '1', which resulted in a 404. Fix: accept page as a route parameter only (already provided by the catch-all route /{page?}), so query-string page values are ignored. Root cause 2 – config('theme_layout') could be null or an unsupported string, causing view('frontend.index-') which does not exist. Fix: normalize theme_layout to a string; fall back to '1' if the value is absent or outside the accepted range ['1','2','3','4']; resolve the view through a three-step fallback chain $path.index-N → frontend.index-N → frontend.index-1 to guarantee a valid view is always returned. Root cause 3 – AppServiceProvider::boot() did not share a 'slides' variable when the sliders table was absent during early installation, causing a 'Undefined variable $slides' error in layout templates. Fix: share an empty collection as fallback. Secondary fix – strict comparison (===) and explicit int cast for the toggle value prevent string '0'/'1' edge cases from bypassing the landing-enabled check. Resolves #286 * fix: Move 'User Group' under 'User Management' in admin sidebar (fixes #322) - Moved the 'User Group' (department) menu item as a child of 'User Management' (Access) in the admin sidebar - Updated dropdown logic to ensure correct open/active state - No backend or permission changes required Closes #322 * fix: prevent enrollment in expired courses #287 (#340) * Reuse Email After User Deletion #147 (#303) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Enable multi selection of courses for assignment to users #211 * Reuse Email After User Deletion #147 --------- Co-authored-by: krupa-1926 <[email protected]> * Limit Question Marks to Maximum 3 Digits #320 (#341) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Limit Question Marks to Maximum 3 Digits #320 --------- Co-authored-by: krupa-1926 <[email protected]> * new deployment workflow (#351) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation --------- Co-authored-by: muneeb <[email protected]> * removing cache conflict (#353) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation * cache issue --------- Co-authored-by: muneeb <[email protected]> * Add deploy workflow (#354) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation * cache issue * new deployment * cleared --------- Co-authored-by: muneeb <[email protected]> * test commit for auto deployement * fix merge conflict issues (#357) * fix: update create.blade.php for issue #343 (#344) * feat: Certificate Design Upgrade to match TadreebLMS theme (closes #220) (#342) - Complete certificate PDF redesign with TadreebLMS brand identity - Navy/gold color palette, premium A4 landscape layout - Unique certificate IDs (TLMS-YYYY-NNNNNN format) - SHA-256 validation hash + QR code for certificate verification - New CertificateVerificationController with verified/revoked/invalid states - DB migration: adds certificate_id, validation_hash, metadata, revoked_at columns - Fix course name placeholder when metadata is absent (loads from course relation) - Fix AUTHENTICITY VERIFIED text overflow in PDF footer * feat: implement lesson-level quizzes and progression flow (#329) * Page Reload on Invalid Captcha Clears User Input #356 (#359) Co-authored-by: krupa-1926 <[email protected]> * feat: add admin certificate management module (#361) * feat: enhance certificate template customization #233 (#337) * Initialize task: New task * Implementation Done. Here's a summary of what was implemented: - **Route**: `GET admin/settings/certificate-template` → `admin.certificate-template-settings` in [./routes/backend/admin.php](./routes/backend/admin.php) - **Controller method**: `getCertificateTemplateSettings()` added to [./app/Http/Controllers/Backend/Admin/ConfigController.php](./app/Http/Controllers/Backend/Admin/ConfigController.php) - **Blade view**: [./resources/views/backend/settings/certificate-template.blade.php](./resources/views/backend/settings/certificate-template.blade.php) — displays a visually styled "Classic Dark" certificate template preview with gold accents, recipient name, course name, signature blocks, and a decorative seal - **Sidebar menu item**: Added under Settings in [./resources/views/backend/includes/sidebar.blade.php](./resources/views/backend/includes/sidebar.blade.php), with active state detection and a certificate icon * feat: enhance certificate template customization #233 * feat: improve lesson video management and cloning * fix: installer no longer crashes php artisan serve due to missing .env (closes #345) (#366) php artisan serve watches .env via filemtime() and crashes immediately if the file disappears, even for a fraction of a second. The installer had three separate places where this could happen: - install-b.php (start step): deleted .env with unlink() before recreating it from .env.example. Replaced with an atomic write-to-temp + rename() so the file is never absent. - install_ajax.php (check step): called @Unlink($envFile) unconditionally at the beginning of every check run, wiping the file unnecessarily. - install_ajax.php (env step): overwrote .env with a plain file_put_contents() call, which is not atomic. Rewritten to write into a .env.tmp file first, then rename() it into place. Also tightened the DB-value substitution logic to handle passwords with special characters correctly and to append missing keys rather than silently leaving them unset. * Bulk Edit Users for Department, Role, and Confirmation Status #350 (#364) * Page Reload on Invalid Captcha Clears User Input #356 * Bulk Edit Users for Department, Role, and Confirmation Status #350 --------- Co-authored-by: krupa-1926 <[email protected]> * fix(user-form): preserve input and show field-level validation feedback (#378) (#380) * Feat/hrms integration (#384) * hrms wip * hrms wip * fix: resolve 500 error in Send Email Notification module (closes #371) (#373) - Guard EmailCampainUser::insert() against empty array to prevent SQL exception when no import file is provided (root cause of the 500 error) - Fix file input name from 'image' to 'import_users' so the Excel import feature is correctly detected by the controller - Wrap controller logic in try/catch to return a 400 with a descriptive error message instead of a generic 'Something went wrong' on failure * Add required indicator (*) to Marks field across all question types (#374) * fix(messages): prevent count() on array in disabled chat mode (#390) * live course schedulling (#385) * Added toggle between recent courses and latest assignments (#386) * Fix lesson video edit visibility and YouTube preview (#395) * Fix installer checks and lesson video edit flow * Remove installer changes from PR scope * fix(lessons): show explicit upload limit errors (#392) * fix(lessons): persist and preview Vimeo linked videos (#397) * docs: improve README documentation (#375) * Multiple Teachers Can Be Selected While Creating a Course #318 (#379) * Add Course column to Lessons table view #349 * Multiple Teachers Can Be Selected While Creating a Course #318 --------- Co-authored-by: krupa-1926 <[email protected]> * Add Progress Status Filter to Attendance Report #247 (#383) * Add Course column to Lessons table view #349 * Multiple Teachers Can Be Selected While Creating a Course #318 * Add Progress Status Filter to Attendance Report #247 --------- Co-authored-by: krupa-1926 <[email protected]> * updated course model (#401) * feat: add marketplace integration for external apps (#365) Co-authored-by: khema raul <[email protected]> * Revert "feat: add marketplace integration for external apps (#365)" (#402) * Add Course column to Lessons table view #349 (#370) Co-authored-by: krupa-1926 <[email protected]> * feat: add lessons filtering by course and status with security fixes (#405) * Fix/lesson module merge issue (#409) * lesson controller fix * Fixed lessson issue * fix(lessons): clean scoped fix for published null and media handling (#407) (#410) --------- Co-authored-by: Sebastian Mühlbauer <[email protected]> Co-authored-by: Pangea 3 <[email protected]> Co-authored-by: rohit chauhan <[email protected]> Co-authored-by: imranbeyond <[email protected]> Co-authored-by: Zheyon <[email protected]> Co-authored-by: Krupa Patel <[email protected]> Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]> Co-authored-by: TadreebLMS <[email protected]> Co-authored-by: Yadu Krishnan H <[email protected]> Co-authored-by: santichausis <[email protected]> Co-authored-by: Prakhar Gupta <[email protected]> Co-authored-by: Trinath <[email protected]> Co-authored-by: Alhassan Mohammed <[email protected]> Co-authored-by: Khema Chandrakant Raul <[email protected]> Co-authored-by: khema raul <[email protected]> Co-authored-by: Rasagnika <[email protected]>
TadreebLMS
added a commit
that referenced
this pull request
Apr 5, 2026
* fix: feat: move course assignment to modal popup (fixes #270) (#277) Co-authored-by: Pangea 3 <[email protected]> * fix: feat: make footer customizable and hide when landing page is disabled (fixes #268) (#278) Co-authored-by: Pangea 3 <[email protected]> * update admin dashboard (#279) * bug fix (#285) * payments module (#281) * fix sylink issue (#292) * Feat/1 white board integration (#288) * WHite board wip * updated config and functionalities * Updated Whiteboard Module and symlink removed * fix(ui): auto-close enroll users modal after successful enrollment (#289) (#295) * Add refresh option for captcha on login page #67 (#266) * General Page with Save Functionality & Additional Fields #205 * Add deployment workflow (#240) Co-authored-by: muneeb <[email protected]> * Fix/course feedback question delete (#246) * Show course start date and expiry date in courses list table #109 * Delete Button Not Working for Course Feedback Questions #145 --------- Co-authored-by: krupa-1926 <[email protected]> * Add Last 10 Created Courses table to admin dashboard (fixes #216) (#251) * feat: Add Last 10 Created Courses table to admin dashboard (fixes #216) Co-authored-by: Cursor <[email protected]> * fix: add missing @endif in dashboard blade --------- Co-authored-by: Cursor <[email protected]> * Fix:Verified Trainee Not Appearing in User List After Signup #249 (#250) * Show course start date and expiry date in courses list table #109 (#245) Co-authored-by: krupa-1926 <[email protected]> * Add Edit Feedback Question #161 * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 --------- Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]> * Fix/#67 merge issues (#304) * fix(external-apps): hide Upload New Module button when no modules installed (#314) Closes #313 When the apps list is empty the top-right 'Upload New Module' button is now hidden; only the 'Upload First Module' button in the empty-state card is shown, removing the redundancy. Also includes marketplace discovery banner from #294. * feat(admin): improve user feedback answer filtering UX (#305) * fix(course-assignments): use authenticated admin for assign_by (#307) * feat(admin): add Excel export for User Feedback Answers (#306) * feat(admin): improve user feedback answer filtering UX * feat(admin): add Excel export for user feedback answers * style(admin): simplify export icon and center it * calender and offline attendence flow (#321) * security: block installer re-run, neutralize phpinfo, protect db_config (#311) * Allow Multiple Videos per Lesson #236 (#293) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 --------- Co-authored-by: krupa-1926 <[email protected]> * Enhc/243 course session on calender (#324) * calender and offline attendence flow * host link for teacher * migration issues fixed * permission issue fix in dev (#326) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue --------- Co-authored-by: muneeb <[email protected]> * signup issue fix (#328) * Feat/google meet (#327) * google meet wip * updated g-meet * Expired Courses Shown as Draft Instead of "Expired" #146 (#276) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 --------- Co-authored-by: krupa-1926 <[email protected]> * updated web routes (#330) * Admin Unable to Edit Course #290 (#298) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 --------- Co-authored-by: krupa-1926 <[email protected]> * fixed conflict issue (#331) * Add Price Field for Paid Courses #283 (#299) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 * Add Price Field for Paid Courses #283 --------- Co-authored-by: krupa-1926 <[email protected]> * Feature/multi course assignment (#302) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Enable multi selection of courses for assignment to users #211 --------- Co-authored-by: krupa-1926 <[email protected]> * free course issue fixed (#333) * installation issye fix (#338) * fix ajax error (#339) * Restrict access to sensitive files in .htaccess * Add Post-Creation Confirmation Popup with Course Assignment Redirect #212 (#300) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 * Add Price Field for Paid Courses #283 * Add Post-Creation Confirmation Popup with Course Assignment Redirect #212 --------- Co-authored-by: krupa-1926 <[email protected]> * fix(#286): restore landing page routing for anonymous users (#332) Root cause 1 – HomeController::index() was consuming the query-string parameter ?page= as a CMS page slug. Pagination links at /?page=1 were triggering a DB lookup for slug '1', which resulted in a 404. Fix: accept page as a route parameter only (already provided by the catch-all route /{page?}), so query-string page values are ignored. Root cause 2 – config('theme_layout') could be null or an unsupported string, causing view('frontend.index-') which does not exist. Fix: normalize theme_layout to a string; fall back to '1' if the value is absent or outside the accepted range ['1','2','3','4']; resolve the view through a three-step fallback chain $path.index-N → frontend.index-N → frontend.index-1 to guarantee a valid view is always returned. Root cause 3 – AppServiceProvider::boot() did not share a 'slides' variable when the sliders table was absent during early installation, causing a 'Undefined variable $slides' error in layout templates. Fix: share an empty collection as fallback. Secondary fix – strict comparison (===) and explicit int cast for the toggle value prevent string '0'/'1' edge cases from bypassing the landing-enabled check. Resolves #286 * Fix/sidebar user group under user management (#334) * fix(#286): restore landing page routing for anonymous users Root cause 1 – HomeController::index() was consuming the query-string parameter ?page= as a CMS page slug. Pagination links at /?page=1 were triggering a DB lookup for slug '1', which resulted in a 404. Fix: accept page as a route parameter only (already provided by the catch-all route /{page?}), so query-string page values are ignored. Root cause 2 – config('theme_layout') could be null or an unsupported string, causing view('frontend.index-') which does not exist. Fix: normalize theme_layout to a string; fall back to '1' if the value is absent or outside the accepted range ['1','2','3','4']; resolve the view through a three-step fallback chain $path.index-N → frontend.index-N → frontend.index-1 to guarantee a valid view is always returned. Root cause 3 – AppServiceProvider::boot() did not share a 'slides' variable when the sliders table was absent during early installation, causing a 'Undefined variable $slides' error in layout templates. Fix: share an empty collection as fallback. Secondary fix – strict comparison (===) and explicit int cast for the toggle value prevent string '0'/'1' edge cases from bypassing the landing-enabled check. Resolves #286 * fix: Move 'User Group' under 'User Management' in admin sidebar (fixes #322) - Moved the 'User Group' (department) menu item as a child of 'User Management' (Access) in the admin sidebar - Updated dropdown logic to ensure correct open/active state - No backend or permission changes required Closes #322 * fix: prevent enrollment in expired courses #287 (#340) * Reuse Email After User Deletion #147 (#303) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Enable multi selection of courses for assignment to users #211 * Reuse Email After User Deletion #147 --------- Co-authored-by: krupa-1926 <[email protected]> * Limit Question Marks to Maximum 3 Digits #320 (#341) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Limit Question Marks to Maximum 3 Digits #320 --------- Co-authored-by: krupa-1926 <[email protected]> * new deployment workflow (#351) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation --------- Co-authored-by: muneeb <[email protected]> * removing cache conflict (#353) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation * cache issue --------- Co-authored-by: muneeb <[email protected]> * Add deploy workflow (#354) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation * cache issue * new deployment * cleared --------- Co-authored-by: muneeb <[email protected]> * test commit for auto deployement * fix merge conflict issues (#357) * fix: update create.blade.php for issue #343 (#344) * feat: Certificate Design Upgrade to match TadreebLMS theme (closes #220) (#342) - Complete certificate PDF redesign with TadreebLMS brand identity - Navy/gold color palette, premium A4 landscape layout - Unique certificate IDs (TLMS-YYYY-NNNNNN format) - SHA-256 validation hash + QR code for certificate verification - New CertificateVerificationController with verified/revoked/invalid states - DB migration: adds certificate_id, validation_hash, metadata, revoked_at columns - Fix course name placeholder when metadata is absent (loads from course relation) - Fix AUTHENTICITY VERIFIED text overflow in PDF footer * feat: implement lesson-level quizzes and progression flow (#329) * Page Reload on Invalid Captcha Clears User Input #356 (#359) Co-authored-by: krupa-1926 <[email protected]> * feat: add admin certificate management module (#361) * feat: enhance certificate template customization #233 (#337) * Initialize task: New task * Implementation Done. Here's a summary of what was implemented: - **Route**: `GET admin/settings/certificate-template` → `admin.certificate-template-settings` in [./routes/backend/admin.php](./routes/backend/admin.php) - **Controller method**: `getCertificateTemplateSettings()` added to [./app/Http/Controllers/Backend/Admin/ConfigController.php](./app/Http/Controllers/Backend/Admin/ConfigController.php) - **Blade view**: [./resources/views/backend/settings/certificate-template.blade.php](./resources/views/backend/settings/certificate-template.blade.php) — displays a visually styled "Classic Dark" certificate template preview with gold accents, recipient name, course name, signature blocks, and a decorative seal - **Sidebar menu item**: Added under Settings in [./resources/views/backend/includes/sidebar.blade.php](./resources/views/backend/includes/sidebar.blade.php), with active state detection and a certificate icon * feat: enhance certificate template customization #233 * feat: improve lesson video management and cloning * fix: installer no longer crashes php artisan serve due to missing .env (closes #345) (#366) php artisan serve watches .env via filemtime() and crashes immediately if the file disappears, even for a fraction of a second. The installer had three separate places where this could happen: - install-b.php (start step): deleted .env with unlink() before recreating it from .env.example. Replaced with an atomic write-to-temp + rename() so the file is never absent. - install_ajax.php (check step): called @Unlink($envFile) unconditionally at the beginning of every check run, wiping the file unnecessarily. - install_ajax.php (env step): overwrote .env with a plain file_put_contents() call, which is not atomic. Rewritten to write into a .env.tmp file first, then rename() it into place. Also tightened the DB-value substitution logic to handle passwords with special characters correctly and to append missing keys rather than silently leaving them unset. * Bulk Edit Users for Department, Role, and Confirmation Status #350 (#364) * Page Reload on Invalid Captcha Clears User Input #356 * Bulk Edit Users for Department, Role, and Confirmation Status #350 --------- Co-authored-by: krupa-1926 <[email protected]> * fix(user-form): preserve input and show field-level validation feedback (#378) (#380) * Feat/hrms integration (#384) * hrms wip * hrms wip * fix: resolve 500 error in Send Email Notification module (closes #371) (#373) - Guard EmailCampainUser::insert() against empty array to prevent SQL exception when no import file is provided (root cause of the 500 error) - Fix file input name from 'image' to 'import_users' so the Excel import feature is correctly detected by the controller - Wrap controller logic in try/catch to return a 400 with a descriptive error message instead of a generic 'Something went wrong' on failure * Add required indicator (*) to Marks field across all question types (#374) * fix(messages): prevent count() on array in disabled chat mode (#390) * live course schedulling (#385) * Added toggle between recent courses and latest assignments (#386) * Fix lesson video edit visibility and YouTube preview (#395) * Fix installer checks and lesson video edit flow * Remove installer changes from PR scope * fix(lessons): show explicit upload limit errors (#392) * fix(lessons): persist and preview Vimeo linked videos (#397) * docs: improve README documentation (#375) * Multiple Teachers Can Be Selected While Creating a Course #318 (#379) * Add Course column to Lessons table view #349 * Multiple Teachers Can Be Selected While Creating a Course #318 --------- Co-authored-by: krupa-1926 <[email protected]> * Add Progress Status Filter to Attendance Report #247 (#383) * Add Course column to Lessons table view #349 * Multiple Teachers Can Be Selected While Creating a Course #318 * Add Progress Status Filter to Attendance Report #247 --------- Co-authored-by: krupa-1926 <[email protected]> * updated course model (#401) * feat: add marketplace integration for external apps (#365) Co-authored-by: khema raul <[email protected]> * Revert "feat: add marketplace integration for external apps (#365)" (#402) * Add Course column to Lessons table view #349 (#370) Co-authored-by: krupa-1926 <[email protected]> * feat: add lessons filtering by course and status with security fixes (#405) * Fix/lesson module merge issue (#409) * lesson controller fix * Fixed lessson issue * fix(lessons): clean scoped fix for published null and media handling (#407) (#410) * fixed_lessonController_merge_issue (#440) * updated (#441) --------- Co-authored-by: Sebastian Mühlbauer <[email protected]> Co-authored-by: Pangea 3 <[email protected]> Co-authored-by: rohit chauhan <[email protected]> Co-authored-by: imranbeyond <[email protected]> Co-authored-by: Zheyon <[email protected]> Co-authored-by: Krupa Patel <[email protected]> Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]> Co-authored-by: TadreebLMS <[email protected]> Co-authored-by: Yadu Krishnan H <[email protected]> Co-authored-by: santichausis <[email protected]> Co-authored-by: Prakhar Gupta <[email protected]> Co-authored-by: Trinath <[email protected]> Co-authored-by: Alhassan Mohammed <[email protected]> Co-authored-by: Khema Chandrakant Raul <[email protected]> Co-authored-by: khema raul <[email protected]> Co-authored-by: Rasagnika <[email protected]>
TadreebLMS
added a commit
that referenced
this pull request
Apr 5, 2026
* feat: add Completion %% column to Course Assignment table (#367) * Revert "feat: add Completion %% column to Course Assignment table (#367)" (#368) This reverts commit efd315c. * Staging (#431) * fix: feat: move course assignment to modal popup (fixes #270) (#277) Co-authored-by: Pangea 3 <[email protected]> * fix: feat: make footer customizable and hide when landing page is disabled (fixes #268) (#278) Co-authored-by: Pangea 3 <[email protected]> * update admin dashboard (#279) * bug fix (#285) * payments module (#281) * fix sylink issue (#292) * Feat/1 white board integration (#288) * WHite board wip * updated config and functionalities * Updated Whiteboard Module and symlink removed * fix(ui): auto-close enroll users modal after successful enrollment (#289) (#295) * Add refresh option for captcha on login page #67 (#266) * General Page with Save Functionality & Additional Fields #205 * Add deployment workflow (#240) Co-authored-by: muneeb <[email protected]> * Fix/course feedback question delete (#246) * Show course start date and expiry date in courses list table #109 * Delete Button Not Working for Course Feedback Questions #145 --------- Co-authored-by: krupa-1926 <[email protected]> * Add Last 10 Created Courses table to admin dashboard (fixes #216) (#251) * feat: Add Last 10 Created Courses table to admin dashboard (fixes #216) Co-authored-by: Cursor <[email protected]> * fix: add missing @endif in dashboard blade --------- Co-authored-by: Cursor <[email protected]> * Fix:Verified Trainee Not Appearing in User List After Signup #249 (#250) * Show course start date and expiry date in courses list table #109 (#245) Co-authored-by: krupa-1926 <[email protected]> * Add Edit Feedback Question #161 * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 --------- Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]> * Fix/#67 merge issues (#304) * fix(external-apps): hide Upload New Module button when no modules installed (#314) Closes #313 When the apps list is empty the top-right 'Upload New Module' button is now hidden; only the 'Upload First Module' button in the empty-state card is shown, removing the redundancy. Also includes marketplace discovery banner from #294. * feat(admin): improve user feedback answer filtering UX (#305) * fix(course-assignments): use authenticated admin for assign_by (#307) * feat(admin): add Excel export for User Feedback Answers (#306) * feat(admin): improve user feedback answer filtering UX * feat(admin): add Excel export for user feedback answers * style(admin): simplify export icon and center it * calender and offline attendence flow (#321) * security: block installer re-run, neutralize phpinfo, protect db_config (#311) * Allow Multiple Videos per Lesson #236 (#293) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 --------- Co-authored-by: krupa-1926 <[email protected]> * Enhc/243 course session on calender (#324) * calender and offline attendence flow * host link for teacher * migration issues fixed * permission issue fix in dev (#326) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue --------- Co-authored-by: muneeb <[email protected]> * signup issue fix (#328) * Feat/google meet (#327) * google meet wip * updated g-meet * Expired Courses Shown as Draft Instead of "Expired" #146 (#276) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 --------- Co-authored-by: krupa-1926 <[email protected]> * updated web routes (#330) * Admin Unable to Edit Course #290 (#298) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 --------- Co-authored-by: krupa-1926 <[email protected]> * fixed conflict issue (#331) * Add Price Field for Paid Courses #283 (#299) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 * Add Price Field for Paid Courses #283 --------- Co-authored-by: krupa-1926 <[email protected]> * Feature/multi course assignment (#302) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Enable multi selection of courses for assignment to users #211 --------- Co-authored-by: krupa-1926 <[email protected]> * free course issue fixed (#333) * installation issye fix (#338) * fix ajax error (#339) * Restrict access to sensitive files in .htaccess * Add Post-Creation Confirmation Popup with Course Assignment Redirect #212 (#300) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 * Add Price Field for Paid Courses #283 * Add Post-Creation Confirmation Popup with Course Assignment Redirect #212 --------- Co-authored-by: krupa-1926 <[email protected]> * fix(#286): restore landing page routing for anonymous users (#332) Root cause 1 – HomeController::index() was consuming the query-string parameter ?page= as a CMS page slug. Pagination links at /?page=1 were triggering a DB lookup for slug '1', which resulted in a 404. Fix: accept page as a route parameter only (already provided by the catch-all route /{page?}), so query-string page values are ignored. Root cause 2 – config('theme_layout') could be null or an unsupported string, causing view('frontend.index-') which does not exist. Fix: normalize theme_layout to a string; fall back to '1' if the value is absent or outside the accepted range ['1','2','3','4']; resolve the view through a three-step fallback chain $path.index-N → frontend.index-N → frontend.index-1 to guarantee a valid view is always returned. Root cause 3 – AppServiceProvider::boot() did not share a 'slides' variable when the sliders table was absent during early installation, causing a 'Undefined variable $slides' error in layout templates. Fix: share an empty collection as fallback. Secondary fix – strict comparison (===) and explicit int cast for the toggle value prevent string '0'/'1' edge cases from bypassing the landing-enabled check. Resolves #286 * Fix/sidebar user group under user management (#334) * fix(#286): restore landing page routing for anonymous users Root cause 1 – HomeController::index() was consuming the query-string parameter ?page= as a CMS page slug. Pagination links at /?page=1 were triggering a DB lookup for slug '1', which resulted in a 404. Fix: accept page as a route parameter only (already provided by the catch-all route /{page?}), so query-string page values are ignored. Root cause 2 – config('theme_layout') could be null or an unsupported string, causing view('frontend.index-') which does not exist. Fix: normalize theme_layout to a string; fall back to '1' if the value is absent or outside the accepted range ['1','2','3','4']; resolve the view through a three-step fallback chain $path.index-N → frontend.index-N → frontend.index-1 to guarantee a valid view is always returned. Root cause 3 – AppServiceProvider::boot() did not share a 'slides' variable when the sliders table was absent during early installation, causing a 'Undefined variable $slides' error in layout templates. Fix: share an empty collection as fallback. Secondary fix – strict comparison (===) and explicit int cast for the toggle value prevent string '0'/'1' edge cases from bypassing the landing-enabled check. Resolves #286 * fix: Move 'User Group' under 'User Management' in admin sidebar (fixes #322) - Moved the 'User Group' (department) menu item as a child of 'User Management' (Access) in the admin sidebar - Updated dropdown logic to ensure correct open/active state - No backend or permission changes required Closes #322 * fix: prevent enrollment in expired courses #287 (#340) * Reuse Email After User Deletion #147 (#303) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Enable multi selection of courses for assignment to users #211 * Reuse Email After User Deletion #147 --------- Co-authored-by: krupa-1926 <[email protected]> * Limit Question Marks to Maximum 3 Digits #320 (#341) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Limit Question Marks to Maximum 3 Digits #320 --------- Co-authored-by: krupa-1926 <[email protected]> * new deployment workflow (#351) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation --------- Co-authored-by: muneeb <[email protected]> * removing cache conflict (#353) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation * cache issue --------- Co-authored-by: muneeb <[email protected]> * Add deploy workflow (#354) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation * cache issue * new deployment * cleared --------- Co-authored-by: muneeb <[email protected]> * test commit for auto deployement * fix merge conflict issues (#357) * fix: update create.blade.php for issue #343 (#344) * feat: Certificate Design Upgrade to match TadreebLMS theme (closes #220) (#342) - Complete certificate PDF redesign with TadreebLMS brand identity - Navy/gold color palette, premium A4 landscape layout - Unique certificate IDs (TLMS-YYYY-NNNNNN format) - SHA-256 validation hash + QR code for certificate verification - New CertificateVerificationController with verified/revoked/invalid states - DB migration: adds certificate_id, validation_hash, metadata, revoked_at columns - Fix course name placeholder when metadata is absent (loads from course relation) - Fix AUTHENTICITY VERIFIED text overflow in PDF footer * feat: implement lesson-level quizzes and progression flow (#329) * Page Reload on Invalid Captcha Clears User Input #356 (#359) Co-authored-by: krupa-1926 <[email protected]> * feat: add admin certificate management module (#361) * feat: enhance certificate template customization #233 (#337) * Initialize task: New task * Implementation Done. Here's a summary of what was implemented: - **Route**: `GET admin/settings/certificate-template` → `admin.certificate-template-settings` in [./routes/backend/admin.php](./routes/backend/admin.php) - **Controller method**: `getCertificateTemplateSettings()` added to [./app/Http/Controllers/Backend/Admin/ConfigController.php](./app/Http/Controllers/Backend/Admin/ConfigController.php) - **Blade view**: [./resources/views/backend/settings/certificate-template.blade.php](./resources/views/backend/settings/certificate-template.blade.php) — displays a visually styled "Classic Dark" certificate template preview with gold accents, recipient name, course name, signature blocks, and a decorative seal - **Sidebar menu item**: Added under Settings in [./resources/views/backend/includes/sidebar.blade.php](./resources/views/backend/includes/sidebar.blade.php), with active state detection and a certificate icon * feat: enhance certificate template customization #233 * feat: improve lesson video management and cloning * fix: installer no longer crashes php artisan serve due to missing .env (closes #345) (#366) php artisan serve watches .env via filemtime() and crashes immediately if the file disappears, even for a fraction of a second. The installer had three separate places where this could happen: - install-b.php (start step): deleted .env with unlink() before recreating it from .env.example. Replaced with an atomic write-to-temp + rename() so the file is never absent. - install_ajax.php (check step): called @Unlink($envFile) unconditionally at the beginning of every check run, wiping the file unnecessarily. - install_ajax.php (env step): overwrote .env with a plain file_put_contents() call, which is not atomic. Rewritten to write into a .env.tmp file first, then rename() it into place. Also tightened the DB-value substitution logic to handle passwords with special characters correctly and to append missing keys rather than silently leaving them unset. * Bulk Edit Users for Department, Role, and Confirmation Status #350 (#364) * Page Reload on Invalid Captcha Clears User Input #356 * Bulk Edit Users for Department, Role, and Confirmation Status #350 --------- Co-authored-by: krupa-1926 <[email protected]> * fix(user-form): preserve input and show field-level validation feedback (#378) (#380) * Feat/hrms integration (#384) * hrms wip * hrms wip * fix: resolve 500 error in Send Email Notification module (closes #371) (#373) - Guard EmailCampainUser::insert() against empty array to prevent SQL exception when no import file is provided (root cause of the 500 error) - Fix file input name from 'image' to 'import_users' so the Excel import feature is correctly detected by the controller - Wrap controller logic in try/catch to return a 400 with a descriptive error message instead of a generic 'Something went wrong' on failure * Add required indicator (*) to Marks field across all question types (#374) * fix(messages): prevent count() on array in disabled chat mode (#390) * live course schedulling (#385) * Added toggle between recent courses and latest assignments (#386) * Fix lesson video edit visibility and YouTube preview (#395) * Fix installer checks and lesson video edit flow * Remove installer changes from PR scope * fix(lessons): show explicit upload limit errors (#392) * fix(lessons): persist and preview Vimeo linked videos (#397) * docs: improve README documentation (#375) * Multiple Teachers Can Be Selected While Creating a Course #318 (#379) * Add Course column to Lessons table view #349 * Multiple Teachers Can Be Selected While Creating a Course #318 --------- Co-authored-by: krupa-1926 <[email protected]> * Add Progress Status Filter to Attendance Report #247 (#383) * Add Course column to Lessons table view #349 * Multiple Teachers Can Be Selected While Creating a Course #318 * Add Progress Status Filter to Attendance Report #247 --------- Co-authored-by: krupa-1926 <[email protected]> * updated course model (#401) * feat: add marketplace integration for external apps (#365) Co-authored-by: khema raul <[email protected]> * Revert "feat: add marketplace integration for external apps (#365)" (#402) * Add Course column to Lessons table view #349 (#370) Co-authored-by: krupa-1926 <[email protected]> * feat: add lessons filtering by course and status with security fixes (#405) * Fix/lesson module merge issue (#409) * lesson controller fix * Fixed lessson issue * fix(lessons): clean scoped fix for published null and media handling (#407) (#410) --------- Co-authored-by: Sebastian Mühlbauer <[email protected]> Co-authored-by: Pangea 3 <[email protected]> Co-authored-by: rohit chauhan <[email protected]> Co-authored-by: imranbeyond <[email protected]> Co-authored-by: Zheyon <[email protected]> Co-authored-by: Krupa Patel <[email protected]> Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]> Co-authored-by: TadreebLMS <[email protected]> Co-authored-by: Yadu Krishnan H <[email protected]> Co-authored-by: santichausis <[email protected]> Co-authored-by: Prakhar Gupta <[email protected]> Co-authored-by: Trinath <[email protected]> Co-authored-by: Alhassan Mohammed <[email protected]> Co-authored-by: Khema Chandrakant Raul <[email protected]> Co-authored-by: khema raul <[email protected]> Co-authored-by: Rasagnika <[email protected]> * Staging (#442) * fix: feat: move course assignment to modal popup (fixes #270) (#277) Co-authored-by: Pangea 3 <[email protected]> * fix: feat: make footer customizable and hide when landing page is disabled (fixes #268) (#278) Co-authored-by: Pangea 3 <[email protected]> * update admin dashboard (#279) * bug fix (#285) * payments module (#281) * fix sylink issue (#292) * Feat/1 white board integration (#288) * WHite board wip * updated config and functionalities * Updated Whiteboard Module and symlink removed * fix(ui): auto-close enroll users modal after successful enrollment (#289) (#295) * Add refresh option for captcha on login page #67 (#266) * General Page with Save Functionality & Additional Fields #205 * Add deployment workflow (#240) Co-authored-by: muneeb <[email protected]> * Fix/course feedback question delete (#246) * Show course start date and expiry date in courses list table #109 * Delete Button Not Working for Course Feedback Questions #145 --------- Co-authored-by: krupa-1926 <[email protected]> * Add Last 10 Created Courses table to admin dashboard (fixes #216) (#251) * feat: Add Last 10 Created Courses table to admin dashboard (fixes #216) Co-authored-by: Cursor <[email protected]> * fix: add missing @endif in dashboard blade --------- Co-authored-by: Cursor <[email protected]> * Fix:Verified Trainee Not Appearing in User List After Signup #249 (#250) * Show course start date and expiry date in courses list table #109 (#245) Co-authored-by: krupa-1926 <[email protected]> * Add Edit Feedback Question #161 * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 --------- Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]> * Fix/#67 merge issues (#304) * fix(external-apps): hide Upload New Module button when no modules installed (#314) Closes #313 When the apps list is empty the top-right 'Upload New Module' button is now hidden; only the 'Upload First Module' button in the empty-state card is shown, removing the redundancy. Also includes marketplace discovery banner from #294. * feat(admin): improve user feedback answer filtering UX (#305) * fix(course-assignments): use authenticated admin for assign_by (#307) * feat(admin): add Excel export for User Feedback Answers (#306) * feat(admin): improve user feedback answer filtering UX * feat(admin): add Excel export for user feedback answers * style(admin): simplify export icon and center it * calender and offline attendence flow (#321) * security: block installer re-run, neutralize phpinfo, protect db_config (#311) * Allow Multiple Videos per Lesson #236 (#293) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 --------- Co-authored-by: krupa-1926 <[email protected]> * Enhc/243 course session on calender (#324) * calender and offline attendence flow * host link for teacher * migration issues fixed * permission issue fix in dev (#326) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue --------- Co-authored-by: muneeb <[email protected]> * signup issue fix (#328) * Feat/google meet (#327) * google meet wip * updated g-meet * Expired Courses Shown as Draft Instead of "Expired" #146 (#276) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 --------- Co-authored-by: krupa-1926 <[email protected]> * updated web routes (#330) * Admin Unable to Edit Course #290 (#298) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 --------- Co-authored-by: krupa-1926 <[email protected]> * fixed conflict issue (#331) * Add Price Field for Paid Courses #283 (#299) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 * Add Price Field for Paid Courses #283 --------- Co-authored-by: krupa-1926 <[email protected]> * Feature/multi course assignment (#302) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Enable multi selection of courses for assignment to users #211 --------- Co-authored-by: krupa-1926 <[email protected]> * free course issue fixed (#333) * installation issye fix (#338) * fix ajax error (#339) * Restrict access to sensitive files in .htaccess * Add Post-Creation Confirmation Popup with Course Assignment Redirect #212 (#300) * Automatically unpublish courses after expiry date #110 * Add refresh option for captcha on login page #67 * General Page with Save Functionality & Additional Fields #205 * Expired Courses Shown as Draft Instead of Expired #146 * Allow Multiple Videos per Lesson #236 * Admin Unable to Edit Course #290 * Add Price Field for Paid Courses #283 * Add Post-Creation Confirmation Popup with Course Assignment Redirect #212 --------- Co-authored-by: krupa-1926 <[email protected]> * fix(#286): restore landing page routing for anonymous users (#332) Root cause 1 – HomeController::index() was consuming the query-string parameter ?page= as a CMS page slug. Pagination links at /?page=1 were triggering a DB lookup for slug '1', which resulted in a 404. Fix: accept page as a route parameter only (already provided by the catch-all route /{page?}), so query-string page values are ignored. Root cause 2 – config('theme_layout') could be null or an unsupported string, causing view('frontend.index-') which does not exist. Fix: normalize theme_layout to a string; fall back to '1' if the value is absent or outside the accepted range ['1','2','3','4']; resolve the view through a three-step fallback chain $path.index-N → frontend.index-N → frontend.index-1 to guarantee a valid view is always returned. Root cause 3 – AppServiceProvider::boot() did not share a 'slides' variable when the sliders table was absent during early installation, causing a 'Undefined variable $slides' error in layout templates. Fix: share an empty collection as fallback. Secondary fix – strict comparison (===) and explicit int cast for the toggle value prevent string '0'/'1' edge cases from bypassing the landing-enabled check. Resolves #286 * Fix/sidebar user group under user management (#334) * fix(#286): restore landing page routing for anonymous users Root cause 1 – HomeController::index() was consuming the query-string parameter ?page= as a CMS page slug. Pagination links at /?page=1 were triggering a DB lookup for slug '1', which resulted in a 404. Fix: accept page as a route parameter only (already provided by the catch-all route /{page?}), so query-string page values are ignored. Root cause 2 – config('theme_layout') could be null or an unsupported string, causing view('frontend.index-') which does not exist. Fix: normalize theme_layout to a string; fall back to '1' if the value is absent or outside the accepted range ['1','2','3','4']; resolve the view through a three-step fallback chain $path.index-N → frontend.index-N → frontend.index-1 to guarantee a valid view is always returned. Root cause 3 – AppServiceProvider::boot() did not share a 'slides' variable when the sliders table was absent during early installation, causing a 'Undefined variable $slides' error in layout templates. Fix: share an empty collection as fallback. Secondary fix – strict comparison (===) and explicit int cast for the toggle value prevent string '0'/'1' edge cases from bypassing the landing-enabled check. Resolves #286 * fix: Move 'User Group' under 'User Management' in admin sidebar (fixes #322) - Moved the 'User Group' (department) menu item as a child of 'User Management' (Access) in the admin sidebar - Updated dropdown logic to ensure correct open/active state - No backend or permission changes required Closes #322 * fix: prevent enrollment in expired courses #287 (#340) * Reuse Email After User Deletion #147 (#303) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Enable multi selection of courses for assignment to users #211 * Reuse Email After User Deletion #147 --------- Co-authored-by: krupa-1926 <[email protected]> * Limit Question Marks to Maximum 3 Digits #320 (#341) * General Page with Save Functionality & Additional Fields #205 * Add Edit Feedback Question #161 * Limit Question Marks to Maximum 3 Digits #320 --------- Co-authored-by: krupa-1926 <[email protected]> * new deployment workflow (#351) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation --------- Co-authored-by: muneeb <[email protected]> * removing cache conflict (#353) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation * cache issue --------- Co-authored-by: muneeb <[email protected]> * Add deploy workflow (#354) * Add deployment workflow * staging deployment automation * name modified * staging minor change * Add database migration to deployment workflow * added migration workflow * test * prod-automation * prod automation removed * fixed permission issue * new-automation * cache issue * new deployment * cleared --------- Co-authored-by: muneeb <[email protected]> * test commit for auto deployement * fix merge conflict issues (#357) * fix: update create.blade.php for issue #343 (#344) * feat: Certificate Design Upgrade to match TadreebLMS theme (closes #220) (#342) - Complete certificate PDF redesign with TadreebLMS brand identity - Navy/gold color palette, premium A4 landscape layout - Unique certificate IDs (TLMS-YYYY-NNNNNN format) - SHA-256 validation hash + QR code for certificate verification - New CertificateVerificationController with verified/revoked/invalid states - DB migration: adds certificate_id, validation_hash, metadata, revoked_at columns - Fix course name placeholder when metadata is absent (loads from course relation) - Fix AUTHENTICITY VERIFIED text overflow in PDF footer * feat: implement lesson-level quizzes and progression flow (#329) * Page Reload on Invalid Captcha Clears User Input #356 (#359) Co-authored-by: krupa-1926 <[email protected]> * feat: add admin certificate management module (#361) * feat: enhance certificate template customization #233 (#337) * Initialize task: New task * Implementation Done. Here's a summary of what was implemented: - **Route**: `GET admin/settings/certificate-template` → `admin.certificate-template-settings` in [./routes/backend/admin.php](./routes/backend/admin.php) - **Controller method**: `getCertificateTemplateSettings()` added to [./app/Http/Controllers/Backend/Admin/ConfigController.php](./app/Http/Controllers/Backend/Admin/ConfigController.php) - **Blade view**: [./resources/views/backend/settings/certificate-template.blade.php](./resources/views/backend/settings/certificate-template.blade.php) — displays a visually styled "Classic Dark" certificate template preview with gold accents, recipient name, course name, signature blocks, and a decorative seal - **Sidebar menu item**: Added under Settings in [./resources/views/backend/includes/sidebar.blade.php](./resources/views/backend/includes/sidebar.blade.php), with active state detection and a certificate icon * feat: enhance certificate template customization #233 * feat: improve lesson video management and cloning * fix: installer no longer crashes php artisan serve due to missing .env (closes #345) (#366) php artisan serve watches .env via filemtime() and crashes immediately if the file disappears, even for a fraction of a second. The installer had three separate places where this could happen: - install-b.php (start step): deleted .env with unlink() before recreating it from .env.example. Replaced with an atomic write-to-temp + rename() so the file is never absent. - install_ajax.php (check step): called @Unlink($envFile) unconditionally at the beginning of every check run, wiping the file unnecessarily. - install_ajax.php (env step): overwrote .env with a plain file_put_contents() call, which is not atomic. Rewritten to write into a .env.tmp file first, then rename() it into place. Also tightened the DB-value substitution logic to handle passwords with special characters correctly and to append missing keys rather than silently leaving them unset. * Bulk Edit Users for Department, Role, and Confirmation Status #350 (#364) * Page Reload on Invalid Captcha Clears User Input #356 * Bulk Edit Users for Department, Role, and Confirmation Status #350 --------- Co-authored-by: krupa-1926 <[email protected]> * fix(user-form): preserve input and show field-level validation feedback (#378) (#380) * Feat/hrms integration (#384) * hrms wip * hrms wip * fix: resolve 500 error in Send Email Notification module (closes #371) (#373) - Guard EmailCampainUser::insert() against empty array to prevent SQL exception when no import file is provided (root cause of the 500 error) - Fix file input name from 'image' to 'import_users' so the Excel import feature is correctly detected by the controller - Wrap controller logic in try/catch to return a 400 with a descriptive error message instead of a generic 'Something went wrong' on failure * Add required indicator (*) to Marks field across all question types (#374) * fix(messages): prevent count() on array in disabled chat mode (#390) * live course schedulling (#385) * Added toggle between recent courses and latest assignments (#386) * Fix lesson video edit visibility and YouTube preview (#395) * Fix installer checks and lesson video edit flow * Remove installer changes from PR scope * fix(lessons): show explicit upload limit errors (#392) * fix(lessons): persist and preview Vimeo linked videos (#397) * docs: improve README documentation (#375) * Multiple Teachers Can Be Selected While Creating a Course #318 (#379) * Add Course column to Lessons table view #349 * Multiple Teachers Can Be Selected While Creating a Course #318 --------- Co-authored-by: krupa-1926 <[email protected]> * Add Progress Status Filter to Attendance Report #247 (#383) * Add Course column to Lessons table view #349 * Multiple Teachers Can Be Selected While Creating a Course #318 * Add Progress Status Filter to Attendance Report #247 --------- Co-authored-by: krupa-1926 <[email protected]> * updated course model (#401) * feat: add marketplace integration for external apps (#365) Co-authored-by: khema raul <[email protected]> * Revert "feat: add marketplace integration for external apps (#365)" (#402) * Add Course column to Lessons table view #349 (#370) Co-authored-by: krupa-1926 <[email protected]> * feat: add lessons filtering by course and status with security fixes (#405) * Fix/lesson module merge issue (#409) * lesson controller fix * Fixed lessson issue * fix(lessons): clean scoped fix for published null and media handling (#407) (#410) * fixed_lessonController_merge_issue (#440) * updated (#441) --------- Co-authored-by: Sebastian Mühlbauer <[email protected]> Co-authored-by: Pangea 3 <[email protected]> Co-authored-by: rohit chauhan <[email protected]> Co-authored-by: imranbeyond <[email protected]> Co-authored-by: Zheyon <[email protected]> Co-authored-by: Krupa Patel <[email protected]> Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]> Co-authored-by: TadreebLMS <[email protected]> Co-authored-by: Yadu Krishnan H <[email protected]> Co-authored-by: santichausis <[email protected]> Co-authored-by: Prakhar Gupta <[email protected]> Co-authored-by: Trinath <[email protected]> Co-authored-by: Alhassan Mohammed <[email protected]> Co-authored-by: Khema Chandrakant Raul <[email protected]> Co-authored-by: khema raul <[email protected]> Co-authored-by: Rasagnika <[email protected]> --------- Co-authored-by: Bonu Bhavana <[email protected]> Co-authored-by: Sebastian Mühlbauer <[email protected]> Co-authored-by: Pangea 3 <[email protected]> Co-authored-by: rohit chauhan <[email protected]> Co-authored-by: imranbeyond <[email protected]> Co-authored-by: Zheyon <[email protected]> Co-authored-by: Krupa Patel <[email protected]> Co-authored-by: krupa-1926 <[email protected]> Co-authored-by: muneeb siddiquie <[email protected]> Co-authored-by: muneeb <[email protected]> Co-authored-by: Amit Singh Kushwaha <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Abhiraj Marne <[email protected]> Co-authored-by: TadreebLMS <[email protected]> Co-authored-by: Yadu Krishnan H <[email protected]> Co-authored-by: santichausis <[email protected]> Co-authored-by: Prakhar Gupta <[email protected]> Co-authored-by: Trinath <[email protected]> Co-authored-by: Alhassan Mohammed <[email protected]> Co-authored-by: Khema Chandrakant Raul <[email protected]> Co-authored-by: khema raul <[email protected]> Co-authored-by: Rasagnika <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📥 Pull Request Template
🔧 Description
This PR fixes an issue where the delete (trash) icon in the Course Feedback Questions list was not performing any action when clicked.
What problem does this PR solve?
What feature does it add?
What issue does it close (if any)?
Fixes: Bug: Delete Button Not Working for Course Feedback Questions #145
✅ Type of Change
📸 Screenshots
🚀 How Has This Been Tested?
🧪 Steps to Reproduce (for bug fixes)
"Are you sure you want to delete this feedback question?"
🔄 Checklist