networkrailbusinesssystems / laravel-moodle
一个用于验证Moodle并检索课程数据的Laravel软件包
Requires
- php: ^8
- doctrine/dbal: ^3
- spatie/data-transfer-object: ^2
Requires (Dev)
README
一个用于与Moodle进行验证并检索课程信息的Laravel软件包。
安装
composer require networkrailbusinesssystems/laravel-moodle
该软件包应自动注册服务提供者。
迁移
该软件包包含一个迁移,将密码列设置为可空,并在用户表中添加一个用户名字段。
php artisan migrate
配置
可选地,发布配置文件。如果您想自定义从Moodle同步到用户模型的字段,则需要此操作。
php artisan vendor:publish
更新您的 auth.php 配置文件,在 providers > users > drivers 中将 moodle
设置为
更新 .env 文件,将 MOODLE_BASE_URL
设置为您的Moodle安装的URL,并将 MOODLE_ADMIN_TOKEN
设置为具有搜索现有用户权限的现有用户的令牌。
用户模型
当用户第一次登录时,他们的电子邮件、用户名和ID将从Moodle设置在用户模型中。如果您想自定义同步的字段,则发布 laravel-moodle
配置文件并更新 sync_attributes 数组。
您要同步的任何字段都需要添加到您的 User 模型中的 protected $fillable
数组。
如果您想使用与 App\User
不同的模型,则更新 laravel-moodle
配置文件中的 user_model
。
凭证
该软件包期望来自 LoginController 的凭证是一个包含 username
和 password
的数组,但如果您想使用 username
,则将 MOODLE_LOGIN_ATTRIBUTE=username
添加到您的 .env 文件中。
Moodle中的网站管理员将无法使用LaravelMoodle登录,直到他们根据以下第5步手动为其账户生成令牌。
中间件
该软件包包含一个中间件,您可以使用它来检查用户是否在他们的会话中有Moodle令牌。如果没有,它将注销用户的Laravel会话并将用户重定向到登录页面。
要在全局范围内使用,请将 NetworkRailBusinessSystems\LaravelMoodle\Middleware\MoodleToken::class
列在 app/Http/Kernel.php
的 $middleware
属性中。
要在特定路由上使用,请将 'laravel-moodle' => \NetworkRailBusinessSystems\LaravelMoodle\Middleware\MoodleToken::class
添加到 app/Http/Kernel.php
的 $routeMiddleware
中,然后将其添加到您的路由中。
Route::get('/', function () {})->middleware('laravel-moodle');
Moodle配置
为了访问Moodle中的数据,需要首先进行配置,因为默认情况下已禁用Web服务功能。
- 为移动设备启用Web服务
- 网站管理 > 移动应用程序 > 移动设置
- 为移动设备启用Web服务 - 是
- 保存更改
- 再次启用Web服务(是的)
- 网站管理 > 高级功能
- 启用Web服务 - 是
- 保存更改
- 创建新的Web服务
- 网站管理 > 插件 > Web服务 > 外部服务
- 添加自定义服务或使用现有的自定义服务
- 名称:Web服务
- 短名称:web_service
- 启用:true
- 仅授权用户:false
- 可以下载文件:true
- 保存更改
- 在新的Moodle Web服务中启用以下功能
- 网站管理 > 插件 > Web服务 > 外部服务
- 在新建的Web服务上,点击功能并添加以下内容
- core_badges_get_user_badges
- core_calendar_get_calendar_monthly_view
- core_completion_get_activities_completion_status
- core_completion_get_course_completion_status
- core_course_get_categories
- core_course_get_contents
- core_course_get_course_module
- 核心课程获取课程
- 通过字段获取课程
- 搜索课程
- 获取已注册用户
- 获取用户
- 手动注册用户
- 手动取消用户注册
- 用户自我注册
- 获取课程成绩概览
- 获取作业
- 获取提交
- 获取提交状态
- 保存提交
- 通过课程获取页面
- 查看页面
- 通过课程获取资源
- 查看资源
- 通过课程获取书籍
- 获取SCORM学习对象
- 通过课程获取SCORM
- 为管理员用户创建令牌(用于Laravel .env文件)
- 网站管理 > 插件 > 网络服务 > 管理令牌
- 点击添加
- 搜索您要使用的管理员用户
- 选择您的网络服务
- 保存更改
- 允许用户为新的网络服务创建令牌,以便他们在登录时创建令牌
- 网站管理 > 用户 > 定义角色
- 编辑认证用户
- 能力 > 创建网络服务令牌 > 允许
- 保存
端点
使用LaravelMoodle外观来访问网络服务数据。
use NetworkRailBusinessSystems\LaravelMoodle\LaravelMoodle as LaravelMoodle;
该包使用Spatie数据传输对象将响应格式化为对象。
获取课程
返回课程集合。
$data = LaravelMoodle::getCourses(); foreach ($data->courses as $course) { echo $course->fullname; // My First Course } echo $data->courses[0]->fullname; // My First Course
要过滤课程列表,请传入术语和字段。您可以使用id、ids、shortname和类别ID。
// Get course with id 3 $data = LaravelMoodle::getCourses('2', 'id'); // Get courses with ids 2 & 3 $data = LaravelMoodle::getCourses('2,3', 'ids');
通过ID获取课程
一旦知道了课程ID(int),您就可以获取特定的课程。
$course = LaravelMoodle::getCourse(2); echo $course->fullname; // My First Course
搜索课程
将搜索词作为第一个参数(字符串)传入。
$searchResults = LaravelMoodle::searchCourses('search term'); echo $searchResults->total; // 1 echo $searchResults->courses[0]->fullname; // My First Course
可选地传入页码(整数)和每页(整数)。
$searchResults = LaravelMoodle::searchCourses('search term', 2, 15);
您还可以通过指定第四个参数为1来限制搜索仅限于已注册课程。
$searchResults = LaravelMoodle::searchCourses('search term', 2, 15, 1);
通过ID获取课程内容
一旦知道了课程ID,您就可以获取特定课程的内容。
$courseContents = LaravelMoodle::getCourseContents(1); echo $courseContents[0]->name; // Topic name echo $courseContents[0]->modules[0]->name; // Activity name
通过ID获取课程模块
一旦知道了课程内容中的模块ID,您就可以获取有关模块的更多详细信息。
$module = LaravelMoodle::getCourseModule(11); echo $module->cm->name; // Topic name
获取课程页面
一旦知道了课程ID,您就可以获取课程的页面。
$pages = LaravelMoodle::getCoursePages(1); echo $pages->pages[0]->name; // Page name
获取课程页面
通过模块ID获取特定课程页面。
$page = LaravelMoodle::getCoursePage($courseId, $moduleId);
获取课程SCORM
一旦知道了课程ID,您就可以获取课程的SCORM。
$scorms = LaravelMoodle::getCourseScorms(1); echo $scorms->scorms[0]->name; // Example scorm
获取课程SCORM
通过模块ID获取特定课程SCORM。
$scorm = LaravelMoodle::getCourseScorm($courseId, $moduleId);
获取课程资源
一旦知道了课程ID,您就可以获取资源。
$resources = LaravelMoodle::getCourseResources(1); echo $resources->resources[0]->name;
获取课程资源
通过模块ID获取特定课程资源。
$resource = LaravelMoodle::getCourseResource($courseId, $moduleId);
获取课程完成情况
您可以通过传入用户ID和课程ID来获取课程完成状态。
$completion = LaravelMoodle::getCourseCompletion(2, 2);
获取课程活动完成情况
您可以通过传入用户ID和课程ID来获取课程活动完成的详细信息。
$activities = LaravelMoodle::getCourseActivitiesCompletion(2, 2); echo $activities->statuses[0]->state;
获取课程作业
通过传入课程ID获取特定课程的作业。
$data = LaravelMoodle::getCourseAssignments(2); echo $data->courses[0]->assignments[0]->name; echo $data->courses[0]->assignments[0]->id;
获取课程作业
通过模块ID获取特定课程作业。
$assignment = LaravelMoodle::getCourseAssignment($courseId, $moduleId);
获取作业提交状态
提供有关作业先前尝试的信息。用户ID是可选的,默认为当前用户。
LaravelMoodle::getAssignmentSubmissionStatus($assignmentId, $userId);
保存课程作业
提交特定作业的在线文本。成功时返回true。
$submit = LaravelMoodle::saveCourseAssignment($assignmentId, 'The content'); echo $submit; // true
如果有问题提交,则返回包含错误详细信息的项目和消息的警告数组。
$submit = LaravelMoodle::saveCourseAssignment($assignmentId, ''); echo $submit[0]->item; // Nothing was submitted echo $submit[0]->message; // Could not save submission
获取用户成绩
获取用户的成绩。默认为0为当前登录用户。
$grades = LaravelMoodle::getUserGrades(); echo $grades->grades[0]->courseid; // 2 echo $grades->grades[0]->grade; // A
获取用户课程成绩
获取特定课程的用户成绩。默认为当前登录用户的0分。如果未找到课程,则返回null。
$grade = LaravelMoodle::getCourseGrade(2); echo $grade->courseid; // 2 echo $grade->grade; // A
搜索用户
搜索用户。如果未提供,默认搜索字段为用户名。
// Defaults to searching by username $users = LaravelMoodle::searchUsers('testuser'); // Override to search by email address $users = LaravelMoodle::searchUsers('test.user@fake.email', 'email'); echo $users->users[0]->fullname; // Test User
在课程中注册用户
您可以通过指定用户ID然后是课程ID来将用户注册到课程中。默认角色为学生,但您可以指定角色ID。
执行此调用的用户必须是Moodle中的管理员或经理,或者课程中的教师。
成功时,Moodle返回一个null
响应,但enrolUserOnCourse在成功时返回true
,在失败时返回MoodleException。
// Defaults role to student LaravelMoodle::enrolUserOnCourse(2, 2); // Override role to editing teacher LaravelMoodle::enrolUserOnCourse(2, 2, 3);
在课程中取消用户注册
您可以在课程中取消用户的注册。不需要角色ID。它将默认为学生角色。
LaravelMoodle::unenrolUserOnCourse($userId, $courseId, $roleId);
获取课程注册用户
您可以获取注册在课程中的用户集合。这些是Moodle用户,而不是Laravel用户模型。
$enrolledUsers = LaravelMoodle::getEnrolledUsersForCourse(2); echo $enrolledUsers[0]->fullname; // Test User echo $enrolledUsers[0]->roles[0]->shortname; // Student
获取类别
获取所有类别。
$categories = LaravelMoodle::getCategories(); echo $categories[0]->name; // Category name
搜索类别
搜索类别。如果未传递第二个参数,则默认搜索名称。搜索词是精确匹配。
$categories = LaravelMoodle::searchCategories('Business Briefing System'); echo $categories[0]->name; // Business Briefing System
查看页面事件
触发活动自动完成的查看页面事件。传入页面ID。如果成功则返回true,如果失败则返回MoodleException。
$pageViewed = LaravelMoodle::viewPageEvent(1); dd($pageViewed); // true
HasDates 特性
该包具有一个HasDates特性,可以添加到FlexibleDataTransferObjects中,以将Moodle的时间戳转换为Carbon实例,以便更容易地进行格式化以供展示。
$data = LaravelMoodle::getCourses(); $data->courses[0]->asDate('startdate')->format('d/m/Y'); $data->courses[0]->dates()->startdate->format('d/m/Y'); $data->courses[0]->dates()->enddate->format('d/m/Y');