/** * Install module databases at course creation */ function install_module_at_course_creation($moduleLabel, $courseDbName, $language, $courseDirectory) { $sqlPath = get_module_path($moduleLabel) . '/setup/course_install.sql'; $phpPath = get_module_path($moduleLabel) . '/setup/course_install.php'; if (file_exists($sqlPath)) { if (!execute_sql_at_course_creation($sqlPath, $courseDbName)) { return false; } } if (file_exists($phpPath)) { // include the language file with all language variables language::load_translation($language); language::load_locale_settings($language); language::load_module_translation($moduleLabel, $language); // define tables to use in php install scripts $courseDbName = get_conf('courseTablePrefix') . $courseDbName . get_conf('dbGlu'); $moduleCourseTblList = claro_sql_get_course_tbl($courseDbName); /* * @todo select database should not be needed if the setup scripts are * well written ! */ if (!get_conf('singleDbEnabled')) { claro_sql_select_db($courseDbName); } require_once $phpPath; } return true; }
/** * Uninstall a specific module to the platform * * @param integer $moduleId the id of the module to uninstall * @return array( backlog, boolean ) * backlog object * boolean true if the uninstall process suceeded, false otherwise * @todo remove the need of the Backlog and use Exceptions instead */ function uninstall_module($moduleId, $deleteModuleData = true) { $success = true; $backlog = new Backlog(); //first thing to do : deactivate the module // deactivate_module($moduleId); $moduleInfo = get_module_info($moduleId); if ($moduleInfo['type'] == 'tool' && $moduleId) { // 2- delete the module in the cours_tool table, used for every course creation list($backlog2, $success2) = unregister_module_from_courses($moduleId); if ($success2) { $backlog->success(get_lang('Module uninstalled in all courses')); } else { $backlog->append($backlog2); } } //Needed tables and vars $tbl = claro_sql_get_main_tbl(); $backlog = new Backlog(); // 0- find info about the module to uninstall $sql = "SELECT `label`\n FROM `" . $tbl['module'] . "`\n WHERE `id` = " . (int) $moduleId; $module = claro_sql_query_get_single_row($sql); if ($module == false) { $backlog->failure(get_lang("No module to uninstall")); $success = false; } else { // 1- Include the local 'uninstall.sql' and 'uninstall.php' file of the module if they exist // call uninstall.php first in case it requires module database schema to run if (isset($uninstallPhpScript)) { unset($uninstallPhpScript); } $uninstallPhpScript = get_module_path($module['label']) . '/setup/uninstall.php'; if (file_exists($uninstallPhpScript)) { language::load_translation(); language::load_locale_settings(); language::load_module_translation($module['label']); load_module_config($module['label']); require $uninstallPhpScript; $backlog->info(get_lang('Module uninstallation script called')); } if (isset($uninstallSqlScript)) { unset($uninstallSqlScript); } $uninstallSqlScript = get_module_path($module['label']) . '/setup/uninstall.sql'; if ($deleteModuleData && file_exists($uninstallSqlScript)) { $sql = file_get_contents($uninstallSqlScript); if (!empty($sql)) { $sql = str_replace('__CL_MAIN__', get_conf('mainTblPrefix'), $sql); if (false !== claro_sql_multi_query($sql)) { $backlog->success(get_lang('Database uninstallation succeeded')); } else { $backlog->failure(get_lang('Database uninstallation failed')); $success = false; } } } elseif (!$deleteModuleData && file_exists($uninstallSqlScript)) { $backlog->info(get_lang('Database uninstallation skipped')); } // 2- delete related files and folders $modulePath = get_module_path($module['label']); if (file_exists($modulePath)) { if (claro_delete_file($modulePath)) { $backlog->success(get_lang('Delete scripts of the module')); } else { $backlog->failure(get_lang('Error while deleting the scripts of the module')); $success = false; } } // delete the module in the cours_tool table, used for every course creation //retrieve this module_id first $sql = "SELECT id as tool_id FROM `" . $tbl['tool'] . "`\n WHERE claro_label = '" . $module['label'] . "'"; $tool_to_delete = claro_sql_query_get_single_row($sql); $tool_id = $tool_to_delete['tool_id']; $sql = "DELETE FROM `" . $tbl['tool'] . "`\n WHERE claro_label = '" . $module['label'] . "'\n "; claro_sql_query($sql); // 3- delete related entries in main DB $sql = "DELETE FROM `" . $tbl['module'] . "`\n WHERE `id` = " . (int) $moduleId; claro_sql_query($sql); $sql = "DELETE FROM `" . $tbl['module_info'] . "`\n WHERE `module_id` = " . (int) $moduleId; claro_sql_query($sql); $sql = "DELETE FROM `" . $tbl['module_contexts'] . "`\n WHERE `module_id` = " . (int) $moduleId; claro_sql_query($sql); // 4-Manage right - Delete read action $action = new RightToolAction(); $action->setName('read'); $action->setToolId($tool_id); $action->delete(); // Manage right - Delete edit action $action = new RightToolAction(); $action->setName('edit'); $action->setToolId($tool_id); $action->delete(); // 5- remove all docks entries in which the module displays // TODO FIXME handle failure remove_module_dock($moduleId, 'ALL'); // 6- cache file with the module's include must be renewed after uninstallation of the module if (!generate_module_cache()) { $backlog->failure(get_lang('Module cache update failed')); $success = false; } else { $backlog->success(get_lang('Module cache update succeeded')); } } return array($backlog, $success); }
public function __construct() { // HACK : force loading translation here to avoid having to rewrite the kernel ! language::load_translation(); language::load_locale_settings(); language::load_module_translation(); $this->header = ClaroHeader::getInstance(); }
if ($sourceCourse->sourceCourseId) { claro_die(get_lang('You cannot create a course session from another course session')); } $course->categories = $sourceCourse->categories; } if ($adminContext && claro_is_platform_admin()) { // From admin, add param to form $course->addHtmlParam('adminContext', '1'); } if (claro_is_platform_admin() || get_conf('courseCreationAllowed', true)) { if ($cmd == 'exEdit') { $course->handleForm(); if ($course->validate()) { if ($course->save()) { // include the platform language file with all language variables language::load_translation(); language::load_locale_settings(); $course->mailAdministratorOnCourseCreation($thisUser['firstName'], $thisUser['lastName'], $thisUser['mail']); $dialogBox->success(get_lang('You have just created the course website') . ' : ' . '<strong>' . $course->officialCode . '</strong>'); $display = DISP_COURSE_CREATION_SUCCEED; } else { $dialogBox->error($course->backlog->output()); $display = DISP_COURSE_CREATION_FAILED; } } else { $dialogBox->error($course->backlog->output()); $display = DISP_COURSE_CREATION_FAILED; } } if ($cmd == 'rqProgress') { $course->handleForm();
/** * Execute module initialization script in the given course * @param string $moduleLabel * @param string $courseId */ function install_module_script_in_course($moduleLabel, $courseId) { $phpPath = get_module_path($moduleLabel) . '/setup/course_install.php'; if (file_exists($phpPath)) { $courseDirectory = claro_get_current_course_data('path'); $moduleCourseTblList = $courseTbl = claro_sql_get_course_tbl(); // include the language file with all language variables language::load_translation(); language::load_locale_settings(); language::load_module_translation($moduleLabel); load_module_config($moduleLabel); require_once $phpPath; } }