본문 바로가기

ORBIT ORIGINAL GUIDE

LMS 릴리스 노트

cms-orbit/lms 릴리스 노트. 코스·레슨·퀴즈·수강 모델, 마켓플레이스 수익화, 리뷰·Q&A·과제·이수증, 드립 콘텐츠, 이수증 GUI 빌더의 단계별 도입 내역.

최종 수정 2026년 10월 10일

cms-orbit/lms는 TutorLMS 방식의 학습 관리 패키지입니다. 코스·섹션·레슨·퀴즈·수강 신청을 Orbit 관리자 엔티티로 제공하고, 공개 프런트엔드는 스타터킷처럼 호스트로 게시해 호스트가 소유합니다. 강사와 수강생은 일반 Orbit 사용자를 참조하므로(config('lms.user_model')) 순정 Laravel 호스트에서도 동작합니다.

composer require cms-orbit/lms:^4.6php artisan migratephp artisan orbit:frontend-syncphp artisan lms:install-frontend   # 공개 프런트엔드를 호스트로 게시 (선택)

4.6.1 — 2026-09-22

  • 이수증 빌더를 registerFields로 등록해 FieldComponentProps 계약과 레지스트리 타입을 일치시켰습니다. LMS 프런트엔드를 포함한 호스트의 TypeScript 검사 오류를 수정했습니다.
  • README의 core 요구 버전을 Composer 선언과 일치시켰습니다.

4.6.0 — 2026-09-08

  • core ^4.6(OrbitAccess, PostgreSQL 500·strict mode·OrbitProvider 미등록 수정 포함).
  • GitHub Actions ci.yml·release-guard.yml 추가, pint 포맷 정규화. 위성 패키지 CI는 Packagist에 게시된 core와 이 패키지의 제약이 함께 해석되는지까지 검증합니다.

4.5.0 — 2026-08-31

  • Laravel ^13.0 전용, core ^4.5. Laravel 11·12 호스트는 업그레이드가 필요합니다.

4.4.0 — 2026-08-31

  • PHP ^8.4, core ^4.4. 운영 의존은 바뀌지 않았습니다.

4.3.1 — 2026-08-28

  • PHP 제약 ^8.3 복구, laravel/pint ^1.30, 릴리스 파이프라인 도입.

4.3.0 — 2026-07-24

  • 이수증 GUI 빌더를 Orbit 관리자로 이관했습니다. CertificateTemplateEntity의 편집 화면에 커스텀 ReactField(lms-certificate-builder)를 추가해 관리자에서 캔버스에 텍스트와 플레이스홀더를 드래그 배치합니다. 컴포넌트는 패키지가 소유하고 frontend.json의 registrations로 자동 등록되므로 호스트 파일을 수동 편집할 필요가 없습니다(core ^4.0.12, orbit:frontend-sync 필요).
  • 공개 스토어프론트의 빌더 페이지·컨트롤러·라우트를 제거했습니다. 학생용 이수증 보기·인쇄(/certificates/{id})는 스토어프론트에 남습니다.
  • 패키지의 관리자·백엔드 기능은 게시된 스토어프론트와 무관하게 동작합니다. 호스트가 스토어프론트 게시물을 삭제해도 관리자 CRUD와 이수증 빌더는 그대로 작동합니다.

4.2.0 — 2026-07-24

드립 콘텐츠와 플레이어 옵션

  • 코스 드립 콘텐츠: drip_enabled와 drip_type(off/after_days/by_date/sequential/prerequisite), 레슨별 drip_days·drip_date·drip_prerequisite_id.
  • Lesson::isUnlockedFor(Enrollment)/unlockDateFor(): 드립 규칙에 따른 레슨 잠금 판정. 무료 미리보기는 항상 열립니다.
  • 코스 플레이어 옵션: player_disable_seek, player_disable_fastforward, player_autoplay, player_require_completion과 Course::playerSettings().

이수증 템플릿

  • CertificateTemplate(이름·방향·크기·배경·요소 JSON·기본값)과 관리자 CRUD.
  • CertificateService: 완료 수강에 이수증을 멱등하게 발급하고, {{student_name}}·{{course_title}}·{{instructor_name}}·{{issued_date}}·{{serial}} 치환으로 인쇄·PDF용 HTML을 렌더합니다.

강사 대시보드와 프런트엔드 확장

  • InstructorDashboardService: 강사별 코스·수강생·수강 수·매출(총·정산 가능·정산 완료)·최근 리뷰·최근 Q&A 집계.
  • lms:install-frontend가 강사 대시보드(/instructor), 이수증 보기·인쇄(/certificates/{id})를 추가로 게시하고, 강의 플레이어에 드립 잠금 표시와 옵션에 따른 빨리감기·탐색 제한(네이티브 비디오 기준)을 적용합니다.

4.1.0 — 2026-07-24

Phase 2 — 오픈마켓형 수익화

  • 코스 가격 필드(is_free, price, sale_price, currency, commission_rate).
  • 마켓플레이스 모델 Coupon, Order, OrderItem, Earning, Payout과 열거형.
  • CheckoutService: 주문 생성 → 강사·플랫폼 수익 분배 → 결제 시 수강 등록. 무료 코스 즉시 등록, 쿠폰 할인, 환불(수익 회수·수강 취소)을 지원합니다. 커미션 기본값은 lms.marketplace.commission_rate(기본 80%).
  • 관리자 엔티티 Orders·Coupons·Earnings·Payouts(Marketplace 섹션).

Phase 3 — 참여 기능

  • Review(별점·승인), CourseQuestion/CourseAnswer, Assignment/AssignmentSubmission(과제·채점), Certificate(시리얼 자동 발급).
  • 관리자 엔티티 Reviews·Q&A·Assignments·Certificates(Engagement 섹션), Course::averageRating()/reviewsCount().

Phase 4 — 공개 프런트엔드 스캐폴딩

  • php artisan lms:install-frontend: 코스 카탈로그·상세·강의 플레이어·체크아웃·학생 대시보드 페이지(React/Inertia)와 공개 컨트롤러·라우트를 호스트로 게시합니다. 게시 후에는 호스트가 소유하고 자유롭게 수정하며, --force로 덮어씁니다. routes/lms.php를 routes/web.php에 한 번 등록합니다.

4.0.0 — 2026-07-24

Phase 1 — Core LMS

  • 학습 도메인 모델 Course, CourseSection, Lesson, Quiz, QuizQuestion, Enrollment, LessonProgress(모두 lms_ 접두사 테이블).
  • 코스·섹션·레슨·퀴즈·퀴즈 문항·수강 신청 관리자 CRUD 엔티티. LmsServiceProvider auto-discovery로 자동 등록되며 Learning 메뉴 섹션과 lms.entities.* 권한을 함께 등록합니다.
  • 열거형 CourseStatus, CourseLevel, LessonType, QuestionType, EnrollmentStatus.
  • Enrollment::recalculateProgress(): 레슨 완료 수를 전체 레슨 수와 비교해 진도율을 산출하고 100%가 되면 자동 완료 처리합니다.
  • QuizQuestion::isAnswerCorrect(): 제출 답안을 정답 집합과 순서 무관하게 비교합니다.
  • 한국어 번역과 Boost 가이드라인.