Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,014 changes: 637 additions & 377 deletions assets/vue/components/chat/DockedChat.vue

Large diffs are not rendered by default.

81 changes: 81 additions & 0 deletions public/main/inc/lib/add_course.lib.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,28 @@
class AddCourse
{
public const FIRST_EXPIRATION_DATE = 31536000; // 365 days in seconds
/**
* Platform -> course_setting default propagation for NEW courses.
* Extend this map later for other categories/features.
*/
private const PLATFORM_TO_COURSE_SETTING_DEFAULTS = [
'ai_helpers' => [
'enable' => 'enable_ai_helpers',
'keys' => [
'learning_path_generator',
'exercise_generator',
'open_answers_grader',
'tutor_chatbot',
'task_grader',
'content_analyser',
'image_generator',
'glossary_terms_generator',
'video_generator',
'course_analyser',
],
'course_category' => 'ai_helpers',
],
];

/**
* Defines the four needed keys to create a course based on several parameters.
Expand Down Expand Up @@ -324,6 +346,9 @@ private static function insertCourseSettings(Course $course): void
);
$counter++;
}

// Apply platform defaults for this new course (AI helpers, etc.)
self::applyPlatformDefaultsToCourseSettings($course);
}

/**
Expand Down Expand Up @@ -990,4 +1015,60 @@ public static function generateToolId($courseId)

return $newIdResultData['new_id'] > 0 ? $newIdResultData['new_id'] : 1;
}

/**
* Apply platform defaults into legacy course_setting for a newly created course.
* Inserts missing rows only (does not overwrite existing rows).
*/
private static function applyPlatformDefaultsToCourseSettings(Course $course, int $accessUrlId = 0): void
{
$courseId = (int) $course->getId();
if ($courseId <= 0) {
return;
}

$table = Database::get_course_table(TABLE_COURSE_SETTING);

foreach (self::PLATFORM_TO_COURSE_SETTING_DEFAULTS as $platformCategory => $cfg) {
$enableKey = (string) ($cfg['enable'] ?? '');
if ('' === $enableKey) {
continue;
}

// Gate: if the main switch is off, do nothing
if ('true' !== (string) api_get_setting($platformCategory.'.'.$enableKey)) {
continue;
}

$courseCategory = (string) ($cfg['course_category'] ?? 'course');
$keys = (array) ($cfg['keys'] ?? []);

foreach ($keys as $var) {
$var = (string) $var;
if ('' === $var) {
continue;
}

// Only propagate helpers enabled at platform-level
if ('true' !== (string) api_get_setting($platformCategory.'.'.$var)) {
continue;
}

$varEsc = Database::escape_string($var);
$catEsc = Database::escape_string($courseCategory);

// Insert only if missing (portable SQL)
$sql = "
INSERT INTO $table (c_id, title, variable, value, category)
SELECT $courseId, '', '$varEsc', 'true', '$catEsc'
WHERE NOT EXISTS (
SELECT 1 FROM $table
WHERE c_id = $courseId AND variable = '$varEsc'
LIMIT 1
)
";
Database::query($sql);
}
}
}
}
Loading
Loading