该软件包最新版本(0.1.4)没有可用的许可证信息。

一个用于验证Moodle并检索课程数据的Laravel软件包

0.1.4 2024-08-09 10:00 UTC

This package is auto-updated.

Last update: 2024-09-09 10:11:46 UTC


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 的凭证是一个包含 usernamepassword 的数组,但如果您想使用 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服务功能。

  1. 为移动设备启用Web服务
    • 网站管理 > 移动应用程序 > 移动设置
    • 为移动设备启用Web服务 - 是
    • 保存更改
  2. 再次启用Web服务(是的)
    • 网站管理 > 高级功能
    • 启用Web服务 - 是
    • 保存更改
  3. 创建新的Web服务
    • 网站管理 > 插件 > Web服务 > 外部服务
    • 添加自定义服务或使用现有的自定义服务
      • 名称:Web服务
      • 短名称:web_service
      • 启用:true
      • 仅授权用户:false
      • 可以下载文件:true
      • 保存更改
  4. 在新的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
  5. 为管理员用户创建令牌(用于Laravel .env文件)
    • 网站管理 > 插件 > 网络服务 > 管理令牌
    • 点击添加
      • 搜索您要使用的管理员用户
      • 选择您的网络服务
      • 保存更改
  6. 允许用户为新的网络服务创建令牌,以便他们在登录时创建令牌
    • 网站管理 > 用户 > 定义角色
    • 编辑认证用户
    • 能力 > 创建网络服务令牌 > 允许
    • 保存

端点

使用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');