Esempio n. 1
0
/**
 * 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;
}
Esempio n. 2
0
/**
 * 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);
}
Esempio n. 3
0
 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();
 }
Esempio n. 4
0
    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();
Esempio n. 5
0
/**
 * 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;
    }
}