'', 'CourseDb' => '', 'CourseDir' => ''); $limit_numb_try = 100; $keys_are_unique = false; $try_new_fsc_id = $try_new_fsc_db = $try_new_fsc_dir = 0; while (!$keys_are_unique) { $keys_course_id = $prefix_for_all . $unique_prefix . $wanted_code . $final_suffix['CourseId']; //$keys_course_db_name = $prefix_for_base_name . $unique_prefix . strtoupper($keys_course_id) . $final_suffix['CourseDb']; $keys_course_repository = $prefix_for_path . $unique_prefix . $wanted_code . $final_suffix['CourseDir']; $keys_are_unique = true; // Check whether they are unique. $query = "SELECT 1 FROM ".$course_table." WHERE code='".$keys_course_id."' LIMIT 0,1"; $result = Database::query($query); if (Database::num_rows($result)) { $keys_are_unique = false; $try_new_fsc_id ++; $final_suffix['CourseId'] = substr(md5(uniqid(rand())), 0, 4); } if (file_exists(api_get_path(SYS_COURSE_PATH).$keys_course_repository)) { $keys_are_unique = false; $try_new_fsc_dir ++; $final_suffix['CourseDir'] = substr(md5(uniqid(rand())), 0, 4); } if (($try_new_fsc_id + $try_new_fsc_db + $try_new_fsc_dir) > $limit_numb_try) { return $keys; } } $keys['currentCourseCode'] = $keys_course_code; $keys['currentCourseId'] = $keys_course_id; $keys['currentCourseRepository'] = $keys_course_repository; return $keys; } /** * Initializes a file repository for a newly created course. * @param string Course repository * @param string Course code * @return int 0 * @assert (null,null) === false */ public static function prepare_course_repository($course_repository, $course_code) { $perm = api_get_permissions_for_new_directories(); $perm_file = api_get_permissions_for_new_files(); $htmlpage = "\n\n \n \n Not authorized\n \n \n \n"; $cp = api_get_path(SYS_COURSE_PATH) . $course_repository; //Creating document folder mkdir($cp, $perm); mkdir($cp . '/document', $perm); $cpt = $cp . '/document/index.html'; $fd = fopen($cpt, 'w'); fwrite($fd, $htmlpage); fclose($fd); /* @chmod($cpt, $perm_file); @copy($cpt, $cp . '/document/index.html'); mkdir($cp . '/document/images', $perm); @copy($cpt, $cp . '/document/images/index.html'); mkdir($cp . '/document/images/gallery/', $perm); @copy($cpt, $cp . '/document/images/gallery/index.html'); mkdir($cp . '/document/shared_folder/', $perm); @copy($cpt, $cp . '/document/shared_folder/index.html'); mkdir($cp . '/document/audio', $perm); @copy($cpt, $cp . '/document/audio/index.html'); mkdir($cp . '/document/flash', $perm); @copy($cpt, $cp . '/document/flash/index.html'); mkdir($cp . '/document/video', $perm); @copy($cpt, $cp . '/document/video/index.html'); */ //Creatind dropbox folder mkdir($cp . '/dropbox', $perm); $cpt = $cp . '/dropbox/index.html'; $fd = fopen($cpt, 'w'); fwrite($fd, $htmlpage); fclose($fd); @chmod($cpt, $perm_file); mkdir($cp . '/group', $perm); @copy($cpt, $cp . '/group/index.html'); mkdir($cp . '/page', $perm); @copy($cpt, $cp . '/page/index.html'); mkdir($cp . '/scorm', $perm); @copy($cpt, $cp . '/scorm/index.html'); mkdir($cp . '/upload', $perm); @copy($cpt, $cp . '/upload/index.html'); mkdir($cp . '/upload/forum', $perm); @copy($cpt, $cp . '/upload/forum/index.html'); mkdir($cp . '/upload/forum/images', $perm); @copy($cpt, $cp . '/upload/forum/images/index.html'); mkdir($cp . '/upload/test', $perm); @copy($cpt, $cp . '/upload/test/index.html'); mkdir($cp . '/upload/blog', $perm); @copy($cpt, $cp . '/upload/blog/index.html'); mkdir($cp . '/upload/learning_path', $perm); @copy($cpt, $cp . '/upload/learning_path/index.html'); mkdir($cp . '/upload/learning_path/images', $perm); @copy($cpt, $cp . '/upload/learning_path/images/index.html'); mkdir($cp . '/upload/calendar', $perm); @copy($cpt, $cp . '/upload/calendar/index.html'); mkdir($cp . '/upload/calendar/images', $perm); @copy($cpt, $cp . '/upload/calendar/images/index.html'); mkdir($cp . '/work', $perm); @copy($cpt, $cp . '/work/index.html'); mkdir($cp . '/upload/announcements', $perm); @copy($cpt, $cp . '/upload/announcements/index.html'); mkdir($cp . '/upload/announcements/images', $perm); @copy($cpt, $cp . '/upload/announcements/images/index.html'); //Oral expression question type mkdir($cp . '/exercises', $perm); @copy($cpt, $cp . '/exercises/index.html'); // Create .htaccess in the dropbox directory. $fp = fopen($cp . '/dropbox/.htaccess', 'w'); fwrite( $fp, "AuthName AllowLocalAccess AuthType Basic order deny,allow deny from all php_flag zlib.output_compression off" ); fclose($fp); // Build index.php of the course. /*$fd = fopen($cp . '/index.php', 'w'); // str_replace() removes \r that cause squares to appear at the end of each line //@todo fix the harcoded include $string = str_replace( "\r", "", "" ); fwrite($fd, $string); @chmod($cp . '/index.php', $perm_file);*/ return 0; } /** * Gets an array with all the course tables (deprecated?) * @return string[] * @assert (null) !== null */ public static function get_course_tables() { $tables = array(); $tables[] = 'item_property'; $tables[] = 'tool'; $tables[] = 'tool_intro'; $tables[] = 'group_info'; $tables[] = 'group_category'; $tables[] = 'group_rel_user'; $tables[] = 'group_rel_tutor'; $tables[] = 'userinfo_content'; $tables[] = 'userinfo_def'; $tables[] = 'course_description'; $tables[] = 'calendar_event'; $tables[] = 'calendar_event_repeat'; $tables[] = 'calendar_event_repeat_not'; $tables[] = 'calendar_event_attachment'; $tables[] = 'announcement'; $tables[] = 'announcement_attachment'; $tables[] = 'resource'; $tables[] = 'student_publication'; $tables[] = 'student_publication_assignment'; $tables[] = 'document'; $tables[] = 'forum_category'; $tables[] = 'forum_forum'; $tables[] = 'forum_thread'; $tables[] = 'forum_post'; $tables[] = 'forum_mailcue'; $tables[] = 'forum_attachment'; $tables[] = 'forum_notification'; $tables[] = 'forum_thread_qualify'; $tables[] = 'forum_thread_qualify_log'; $tables[] = 'link'; $tables[] = 'link_category'; $tables[] = 'online_connected'; $tables[] = 'online_link'; $tables[] = 'chat_connected'; $tables[] = 'quiz'; $tables[] = 'quiz_rel_question'; $tables[] = 'quiz_question'; $tables[] = 'quiz_answer'; $tables[] = 'quiz_question_option'; $tables[] = 'quiz_question_category'; $tables[] = 'quiz_question_rel_category'; $tables[] = 'dropbox_post'; $tables[] = 'dropbox_file'; $tables[] = 'dropbox_person'; $tables[] = 'dropbox_category'; $tables[] = 'dropbox_feedback'; $tables[] = 'lp'; $tables[] = 'lp_item'; $tables[] = 'lp_view'; $tables[] = 'lp_item_view'; $tables[] = 'lp_iv_interaction'; $tables[] = 'lp_iv_objective'; $tables[] = 'blog'; $tables[] = 'blog_comment'; $tables[] = 'blog_post'; $tables[] = 'blog_rating'; $tables[] = 'blog_rel_user'; $tables[] = 'blog_task'; $tables[] = 'blog_task_rel_user'; $tables[] = 'blog_attachment'; $tables[] = 'permission_group'; $tables[] = 'permission_user'; $tables[] = 'permission_task'; $tables[] = 'role'; $tables[] = 'role_group'; $tables[] = 'role_permissions'; $tables[] = 'role_user'; $tables[] = 'survey'; $tables[] = 'survey_question'; $tables[] = 'survey_question_option'; $tables[] = 'survey_invitation'; $tables[] = 'survey_answer'; $tables[] = 'survey_group'; $tables[] = 'wiki'; $tables[] = 'wiki_conf'; $tables[] = 'wiki_discuss'; $tables[] = 'wiki_mailcue'; $tables[] = 'course_setting'; $tables[] = 'glossary'; $tables[] = 'notebook'; $tables[] = 'attendance'; $tables[] = 'attendance_sheet'; $tables[] = 'attendance_calendar'; $tables[] = 'attendance_result'; $tables[] = 'attendance_sheet_log'; $tables[] = 'thematic'; $tables[] = 'thematic_plan'; $tables[] = 'thematic_advance'; return $tables; } /** * Executed only before create_course_tables() * @return void * @assert (null) === null */ public static function drop_course_tables() { $list = self::get_course_tables(); foreach ($list as $table) { $sql = "DROP TABLE IF EXISTS " . DB_COURSE_PREFIX . $table; Database::query($sql); } } /** * Returns a list of all files in the given course directory. The requested * directory will be checked against a "checker" directory to avoid access to * protected/unauthorized files * @param string Complete path to directory we want to list * @param array A list of files to which we want to add the files found * @param string Type of base directory from which we want to recover the files * @param string $path * @param string $media * @return array * @assert (null,null,null) === false * @assert ('abc',array(),'') === array() */ public static function browse_folders($path, $files, $media) { if ($media == 'images') { $code_path = api_get_path( SYS_CODE_PATH ) . 'default_course_document/images/'; } if ($media == 'audio') { $code_path = api_get_path( SYS_CODE_PATH ) . 'default_course_document/audio/'; } if ($media == 'flash') { $code_path = api_get_path( SYS_CODE_PATH ) . 'default_course_document/flash/'; } if ($media == 'video') { $code_path = api_get_path( SYS_CODE_PATH ) . 'default_course_document/video/'; } if ($media == 'certificates') { $code_path = api_get_path( SYS_CODE_PATH ) . 'default_course_document/certificates/'; } if (is_dir($path)) { $handle = opendir($path); while (false !== ($file = readdir($handle))) { if (is_dir($path . $file) && strpos($file, '.') !== 0) { $files[]['dir'] = str_replace( $code_path, '', $path . $file . '/' ); $files = self::browse_folders( $path . $file . '/', $files, $media ); } elseif (is_file($path . $file) && strpos($file, '.') !== 0) { $files[]['file'] = str_replace( $code_path, '', $path . $file ); } } } return $files; } /** * Sorts pictures by type (used?) * @param array List of files (sthg like array(0=>array('png'=>1))) * @param string File type * @param string $type * @return array The received array without files not matching type * @assert (array(),null) === array() */ public static function sort_pictures($files, $type) { $pictures = array(); foreach ($files as $key => $value) { if (isset($value[$type]) && $value[$type] != '') { $pictures[][$type] = $value[$type]; } } return $pictures; } /** * Function to convert a string from the language files to a string ready * to insert into the database (escapes single quotes) * @author Bart Mollet (bart.mollet@hogent.be) * @param string $string The string to convert * @return string The string converted to insert into the database * @assert ('a\'b') === 'ab' */ public static function lang2db($string) { $string = str_replace("\\'", "'", $string); $string = Database::escape_string($string); return $string; } /** * Fills the course database with some required content and example content. * @param int Course (int) ID * @param string Course directory name (e.g. 'ABC') * @param string Language used for content (e.g. 'spanish') * @param bool Whether to fill the course with example content * @return bool False on error, true otherwise * @version 1.2 * @assert (null, '', '', null) === false * @assert (1, 'ABC', null, null) === false * @assert (1, 'TEST', 'spanish', true) === true */ public static function fill_db_course( $course_id, $course_repository, $language, $fill_with_exemplary_content = null ) { if (is_null($fill_with_exemplary_content)) { $fill_with_exemplary_content = api_get_setting( 'example_material_course_creation' ) != 'false'; } $course_id = intval($course_id); if (empty($course_id)) { return false; } $courseInfo = api_get_course_info_by_id($course_id); $now = api_get_utc_datetime(time()); $tbl_course_homepage = Database::get_course_table(TABLE_TOOL_LIST); $TABLEINTROS = Database::get_course_table(TABLE_TOOL_INTRO); $TABLEGROUPCATEGORIES = Database::get_course_table( TABLE_GROUP_CATEGORY ); $TABLEITEMPROPERTY = Database::get_course_table(TABLE_ITEM_PROPERTY); $TABLETOOLAGENDA = Database::get_course_table(TABLE_AGENDA); $TABLETOOLANNOUNCEMENTS = Database::get_course_table( TABLE_ANNOUNCEMENT ); $TABLETOOLDOCUMENT = Database::get_course_table(TABLE_DOCUMENT); $TABLETOOLLINK = Database::get_course_table(TABLE_LINK); $TABLEQUIZ = Database::get_course_table(TABLE_QUIZ_TEST); $TABLEQUIZQUESTION = Database::get_course_table( TABLE_QUIZ_TEST_QUESTION ); $TABLEQUIZQUESTIONLIST = Database::get_course_table( TABLE_QUIZ_QUESTION ); $TABLEQUIZANSWERSLIST = Database::get_course_table(TABLE_QUIZ_ANSWER); $TABLESETTING = Database::get_course_table(TABLE_COURSE_SETTING); $TABLEFORUMCATEGORIES = Database::get_course_table( TABLE_FORUM_CATEGORY ); $TABLEFORUMS = Database::get_course_table(TABLE_FORUM); $TABLEFORUMTHREADS = Database::get_course_table(TABLE_FORUM_THREAD); $TABLEFORUMPOSTS = Database::get_course_table(TABLE_FORUM_POST); $TABLEGRADEBOOK = Database::get_main_table( TABLE_MAIN_GRADEBOOK_CATEGORY ); $TABLEGRADEBOOKLINK = Database::get_main_table( TABLE_MAIN_GRADEBOOK_LINK ); $TABLEGRADEBOOKCERT = Database::get_main_table( TABLE_MAIN_GRADEBOOK_CERTIFICATE ); include_once api_get_path(SYS_CODE_PATH) . 'lang/english/trad4all.inc.php'; $file_to_include = api_get_path(SYS_CODE_PATH) . 'lang/' . $language . '/trad4all.inc.php'; if (file_exists($file_to_include)) { include_once $file_to_include; } $visible_for_all = 1; $visible_for_course_admin = 0; $visible_for_platform_admin = 2; /* Course tools */ Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 1, '" . TOOL_COURSE_DESCRIPTION . "','course_description/','info.gif','" . self::string2binary( api_get_setting( 'course_create_active_tools', 'course_description' ) ) . "','0','squaregrey.gif', 0,'_self','authoring','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 2, '" . TOOL_CALENDAR_EVENT . "','calendar/agenda.php','agenda.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'agenda') ) . "','0','squaregrey.gif',0,'_self','interaction','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 3, '" . TOOL_DOCUMENT . "','document/document.php','folder_document.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'documents') ) . "','0','squaregrey.gif',0,'_self','authoring','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 4, '" . TOOL_LEARNPATH . "','newscorm/lp_controller.php','scorms.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'learning_path') ) . "','0','squaregrey.gif',0,'_self','authoring','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 5, '" . TOOL_LINK . "','link/link.php','links.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'links') ) . "','0','squaregrey.gif',0,'_self','authoring','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 6, '" . TOOL_QUIZ . "','exercice/exercice.php','quiz.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'quiz') ) . "','0','squaregrey.gif',0,'_self','authoring','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 7, '" . TOOL_ANNOUNCEMENT . "','announcements/announcements.php','valves.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'announcements') ) . "','0','squaregrey.gif', 0,'_self','authoring','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 8, '" . TOOL_FORUM . "','forum/index.php','forum.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'forums') ) . "','0','squaregrey.gif',0,'_self','interaction','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 9, '" . TOOL_DROPBOX . "','dropbox/index.php','dropbox.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'dropbox') ) . "','0','squaregrey.gif',0,'_self','interaction','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 10, '" . TOOL_USER . "','user/user.php','members.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'users') ) . "','0','squaregrey.gif',0,'_self','interaction','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 11, '" . TOOL_GROUP . "','group/group.php','group.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'groups') ) . "','0','squaregrey.gif',0,'_self','interaction','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 12, '" . TOOL_CHAT . "','chat/chat.php','chat.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'chat') ) . "','0','squaregrey.gif',0,'_self','interaction','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 13, '" . TOOL_STUDENTPUBLICATION . "','work/work.php','works.gif','" . self::string2binary( api_get_setting( 'course_create_active_tools', 'student_publications' ) ) . "','0','squaregrey.gif',0,'_self','interaction','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 14, '" . TOOL_SURVEY . "','survey/survey_list.php','survey.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'survey') ) . "','0','squaregrey.gif',0,'_self','interaction','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 15, '" . TOOL_WIKI . "','wiki/index.php','wiki.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'wiki') ) . "','0','squaregrey.gif',0,'_self','interaction','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 16, '" . TOOL_GRADEBOOK . "','gradebook/index.php','gradebook.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'gradebook') ) . "','0','squaregrey.gif',0,'_self','authoring','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 17, '" . TOOL_GLOSSARY . "','glossary/index.php','glossary.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'glossary') ) . "','0','squaregrey.gif',0,'_self','authoring','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 18, '" . TOOL_NOTEBOOK . "','notebook/index.php','notebook.gif','" . self::string2binary( api_get_setting('course_create_active_tools', 'notebook') ) . "','0','squaregrey.gif',0,'_self','interaction','0')" ); $setting = intval(self::string2binary( api_get_setting('course_create_active_tools', 'attendances') )); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 19, '" . TOOL_ATTENDANCE . "','attendance/index.php','attendance.gif','" . $setting. "','0','squaregrey.gif',0,'_self','authoring','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 20, '" . TOOL_COURSE_PROGRESS . "','course_progress/index.php','course_progress.gif','" . self::string2binary( intval(api_get_setting('course_create_active_tools', 'course_progress')) ) . "','0','squaregrey.gif',0,'_self','authoring','0')" ); if (api_get_setting('service_visio', 'active') == 'true') { $mycheck = api_get_setting('service_visio', 'visio_host'); if (!empty($mycheck)) { Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 21, '" . TOOL_VISIO_CONFERENCE . "','conference/index.php?type=conference','visio_meeting.gif','1','0','squaregrey.gif','NO','_self','interaction','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 22, '" . TOOL_VISIO_CLASSROOM . "','conference/index.php?type=classroom','visio.gif','1','0','squaregrey.gif','NO','_self','authoring','0')" ); } } if (api_get_setting('search_enabled') == 'true') { Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 23, '" . TOOL_SEARCH . "','search/','info.gif','" . self::string2binary( api_get_setting( 'course_create_active_tools', 'enable_search' ) ) . "','0','search.gif',0,'_self','authoring','0')" ); } $sql = "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 24,'" . TOOL_BLOGS . "','blog/blog_admin.php','blog_admin.gif','" . intval(self::string2binary( api_get_setting('course_create_active_tools', 'blogs')) ) . "','1','squaregrey.gif',0,'_self','admin','0')"; Database::query($sql); /* Course homepage tools for course admin only */ Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 25, '" . TOOL_TRACKING . "','tracking/courseLog.php','statistics.gif','$visible_for_course_admin','1','', 0,'_self','admin','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 26, '" . TOOL_COURSE_SETTING . "','course_info/infocours.php','reference.gif','$visible_for_course_admin','1','', 0,'_self','admin','0')" ); Database::query( "INSERT INTO $tbl_course_homepage (c_id, id, name, link, image, visibility, admin, address, added_tool, target, category, session_id) VALUES ($course_id, 27, '" . TOOL_COURSE_MAINTENANCE . "','course_info/maintenance.php','backup.gif','$visible_for_course_admin','1','',0,'_self', 'admin','0')" ); $defaultEmailExerciseAlert = 1; $alert = api_get_setting('email_alert_manager_on_new_quiz'); if ($alert === 'true') { $defaultEmailExerciseAlert = 1; } else { $defaultEmailExerciseAlert = 0; } /* course_setting table (courseinfo tool) */ $settings = [ 'email_alert_manager_on_new_doc' => ['title' => '', 'default' => 0, 'category' => 'work'], 'email_alert_on_new_doc_dropbox' => ['default' => 0, 'category' => 'dropbox'], 'allow_user_edit_agenda' => ['default' => 0, 'category' => 'agenda'], 'allow_user_edit_announcement' => ['default' => 0, 'category' => 'announcement'], 'email_alert_manager_on_new_quiz' => ['default' => $defaultEmailExerciseAlert, 'category' => 'quiz'], 'allow_user_image_forum' => ['default' => 1, 'category' => 'forum'], 'course_theme' => ['default' => '', 'category' => 'theme'], 'allow_learning_path_theme' => ['default' => 1, 'category' => 'theme'], 'allow_open_chat_window' => ['default' => 1, 'category' => 'chat'], 'email_alert_to_teacher_on_new_user_in_course' => ['default' => 0, 'category' =>'registration'], 'allow_user_view_user_list' => ['default' =>1, 'category' =>'user'], 'display_info_advance_inside_homecourse' => ['default' => 1, 'category' =>'thematic_advance'], 'email_alert_students_on_new_homework' => ['default' => 0, 'category' =>'work'], 'enable_lp_auto_launch' => ['default' => 0, 'category' =>'learning_path'], 'pdf_export_watermark_text' => ['default' =>'', 'category' =>'learning_path'], 'allow_public_certificates' => [ 'default' => api_get_setting('allow_public_certificates') === 'true' ? 1 : '', 'category' =>'certificates' ], 'documents_default_visibility' => ['default' =>'visible', 'category' =>'document'] ]; $counter = 1; foreach ($settings as $variable => $setting) { $title = isset($setting['title']) ? $setting['title'] : ''; Database::query( "INSERT INTO $TABLESETTING (id, c_id, title, variable, value, category) VALUES ($counter, $course_id, '".$title."', '".$variable."', '".$setting['default']."', '".$setting['category']."')" ); $counter++; } /* Course homepage tools for platform admin only */ /* Group tool */ Database::query( "INSERT INTO $TABLEGROUPCATEGORIES (c_id, id, title , description, max_student, self_reg_allowed, self_unreg_allowed, groups_per_user, display_order, doc_state,calendar_state, work_state ,announcements_state, forum_state, wiki_state, chat_state) VALUES ($course_id, '2', '" . self::lang2db(get_lang('DefaultGroupCategory')) . "', '', '8', '0', '0', '0', '0', 1, 1 ,1 ,1 ,1, 1, 1);" ); /* Example Material */ global $language_interface; $language_interface = !empty($language_interface) ? $language_interface : api_get_setting( 'platformLanguage' ); // Example material should be in the same language as the course is. $language_interface_original = $language_interface; $language_interface = $language; $now = api_get_utc_datetime(); $files = [ ['path' => '/shared_folder', 'title' => get_lang('UserFolders'), 'filetype' => 'folder', 'size' => 0], ['path' => '/chat_files', 'title' => get_lang('ChatFiles'), 'filetype' => 'folder', 'size' => 0], ]; $counter = 1; foreach ($files as $file) { self::insertDocument($course_id, $counter, $file); $counter++; } $sys_course_path = api_get_path(SYS_COURSE_PATH); $perm = api_get_permissions_for_new_directories(); $perm_file = api_get_permissions_for_new_files(); $chat_path = $sys_course_path . $course_repository . '/document/chat_files'; if (!is_dir($chat_path)) { @mkdir($chat_path, api_get_permissions_for_new_directories()); } /* Documents */ if ($fill_with_exemplary_content) { $files = [ ['path' => '/images', 'title' => get_lang('Images'), 'filetype' => 'folder', 'size' => 0], ['path' => '/images/gallery', 'title' => get_lang('DefaultCourseImages'), 'filetype' => 'folder', 'size' => 0], ['path' => '/audio', 'title' => get_lang('Audio'), 'filetype' => 'folder', 'size' => 0], ['path' => '/flash', 'title' => get_lang('Flash'), 'filetype' => 'folder', 'size' => 0], ['path' => '/video', 'title' => get_lang('Video'), 'filetype' => 'folder', 'size' => 0], ['path' => '/certificates', 'title' => get_lang('Certificates'), 'filetype' => 'folder', 'size' => 0] ]; foreach ($files as $file) { self::insertDocument($course_id, $counter, $file); $counter++; } // FILL THE COURSE DOCUMENT WITH DEFAULT COURSE PICTURES $folders_to_copy_from_default_course = array( 'images', 'audio', 'flash', 'video', 'certificates', ); $default_course_path = api_get_path(SYS_CODE_PATH) . 'default_course_document/'; $default_document_array = array(); foreach ($folders_to_copy_from_default_course as $folder) { $default_course_folder_path = $default_course_path . $folder . '/'; $files = self::browse_folders( $default_course_folder_path, array(), $folder ); $sorted_array = self::sort_pictures($files, 'dir'); $sorted_array = array_merge( $sorted_array, self::sort_pictures($files, 'file') ); $default_document_array[$folder] = $sorted_array; } //echo '
'; print_r($default_document_array);exit;

            //Light protection (adding index.html in every document folder)
            $htmlpage = "\n\n \n \n Not authorized\n  \n  \n  \n";

            $example_cert_id = 0;
            if (is_array($default_document_array) && count(
                    $default_document_array
                ) > 0
            ) {
                foreach ($default_document_array as $media_type => $array_media) {
                    $path_documents = "/$media_type/";

                    //hack until feature #5242 is implemented
                    if ($media_type == 'images') {
                        $media_type = 'images/gallery';
                        $images_folder = $sys_course_path . $course_repository . "/document/images/";

                        if (!is_dir($images_folder)) {
                            //Creating index.html
                            mkdir($images_folder, $perm);
                            $fd = fopen($images_folder . 'index.html', 'w');
                            fwrite($fd, $htmlpage);
                            @chmod($images_folder . 'index.html', $perm_file);
                        }
                    }

                    $course_documents_folder = $sys_course_path . $course_repository . "/document/$media_type/";
                    $default_course_path = api_get_path(SYS_CODE_PATH) . 'default_course_document' . $path_documents;

                    if (!is_dir($course_documents_folder)) {
                        // Creating index.html
                        mkdir($course_documents_folder, $perm);
                        $fd = fopen(
                            $course_documents_folder . 'index.html',
                            'w'
                        );
                        fwrite($fd, $htmlpage);
                        @chmod(
                            $course_documents_folder . 'index.html',
                            $perm_file
                        );
                    }

                    if (is_array($array_media) && count($array_media) > 0) {
                        foreach ($array_media as $key => $value) {
                            if (isset($value['dir']) && !empty($value['dir'])) {
                                if (!is_dir($course_documents_folder . $value['dir'])) {
                                    //Creating folder
                                    mkdir(
                                        $course_documents_folder . $value['dir'],
                                        $perm
                                    );

                                    //Creating index.html (for light protection)
                                    $index_html = $course_documents_folder . $value['dir'] . '/index.html';
                                    $fd = fopen($index_html, 'w');
                                    fwrite($fd, $htmlpage);
                                    @chmod($index_html, $perm_file);

                                    //Inserting folder in the DB
                                    $folder_path = substr(
                                        $value['dir'],
                                        0,
                                        strlen($value['dir']) - 1
                                    );
                                    $temp = explode('/', $folder_path);
                                    $title = $temp[count($temp) - 1];

                                    //hack until feature #5242 is implemented
                                    if ($title == 'gallery') {
                                        $title = get_lang(
                                            'DefaultCourseImages'
                                        );
                                    }

                                    if ($media_type == 'images/gallery') {
                                        $folder_path = 'gallery/' . $folder_path;
                                    }

                                    Database::query(
                                        "INSERT INTO $TABLETOOLDOCUMENT (c_id, path,title,filetype,size)
                                        VALUES ($course_id,'$path_documents" . $folder_path . "','" . $title . "','folder','0')"
                                    );
                                    $image_id = Database:: insert_id();

                                    Database::insert(
                                        $TABLEITEMPROPERTY,
                                        [
                                            'c_id' => $course_id,
                                            'tool' => 'document',
                                            'insert_user_id' => api_get_user_id(),
                                            'insert_date' => $now,
                                            'lastedit_date' => $now,
                                            'ref' => $image_id,
                                            'lastedit_type' => 'DocumentAdded',
                                            'lastedit_user_id' => api_get_user_id(),
                                            'to_group_id' => null,
                                            'to_user_id' =>  null,
                                            'visibility' => 0
                                        ]
                                    );
                                }
                            }

                            if (isset($value['file']) && !empty($value['file'])) {
                                if (!file_exists(
                                    $course_documents_folder . $value['file']
                                )
                                ) {
                                    //Copying file
                                    copy(
                                        $default_course_path . $value['file'],
                                        $course_documents_folder . $value['file']
                                    );
                                    chmod(
                                        $course_documents_folder . $value['file'],
                                        $perm_file
                                    );
                                    //echo $default_course_path.$value['file']; echo ' - '; echo $course_documents_folder.$value['file']; echo '
'; $temp = explode('/', $value['file']); $file_size = filesize( $course_documents_folder . $value['file'] ); //hack until feature #5242 is implemented if ($media_type == 'images/gallery') { $value["file"] = 'gallery/' . $value["file"]; } //Inserting file in the DB Database::query( "INSERT INTO $TABLETOOLDOCUMENT (c_id, path,title,filetype,size) VALUES ($course_id,'$path_documents" . $value["file"] . "','" . $temp[count($temp) - 1] . "','file','$file_size')" ); $image_id = Database:: insert_id(); if ($image_id) { $sql = "UPDATE $TABLETOOLDOCUMENT SET id = iid WHERE iid = $image_id"; Database::query($sql); if ($path_documents . $value['file'] == '/certificates/default.html') { $example_cert_id = $image_id; } $docId = Database::insert( $TABLEITEMPROPERTY, [ 'c_id' => $course_id, 'tool' => 'document', 'insert_user_id' => api_get_user_id(), 'insert_date' => $now, 'lastedit_date' => $now, 'ref' => $image_id, 'lastedit_type' => 'DocumentAdded', 'lastedit_user_id' => api_get_user_id(), 'to_group_id' => null, 'to_user_id' => null, 'visibility' => 1 ] ); if ($docId) { $sql = "UPDATE $TABLEITEMPROPERTY SET id = iid WHERE iid = $docId"; Database::query($sql); } } } } } } } } $agenda = new Agenda(); $agenda->setType('course'); $agenda->set_course($courseInfo); $agenda->addEvent( $now, $now, 0, get_lang('AgendaCreationTitle'), get_lang('AgendaCreationContenu') ); /* Links tool */ $link = new Link(); $link->setCourse($courseInfo); $links = [ [ 'c_id' => $course_id, 'url' => 'http://www.google.com', 'title' => 'Google', 'description' => get_lang('Google') , 'category_id' => 0, 'on_homepage' => 0, 'target' => '_self', 'session_id' => 0 ], [ 'c_id' => $course_id, 'url' => 'http://www.wikipedia.org', 'title' => 'Wikipedia', 'description' => get_lang('Wikipedia') , 'category_id' => 0, 'on_homepage' => 0, 'target' => '_self', 'session_id' => 0 ] ]; foreach($links as $params) { $link->save($params); } /* Announcement tool */ AnnouncementManager::add_announcement( get_lang('AnnouncementExampleTitle'), get_lang('AnnouncementEx'), ['everyone' => 'everyone'], null, null, $now ); $manager = Database::getManager(); /* Introduction text */ $intro_text = '

Mr. Chamilo

' . self::lang2db(get_lang('IntroductionText')) . '

'; $toolIntro = new Chamilo\CourseBundle\Entity\CToolIntro(); $toolIntro ->setCId($course_id) ->setId(TOOL_COURSE_HOMEPAGE) ->setSessionId(0) ->setIntroText($intro_text); $manager->persist($toolIntro); $toolIntro = new Chamilo\CourseBundle\Entity\CToolIntro(); $toolIntro ->setCId($course_id) ->setId(TOOL_STUDENTPUBLICATION) ->setSessionId(0) ->setIntroText(get_lang('IntroductionTwo')); $manager->persist($toolIntro); $toolIntro = new Chamilo\CourseBundle\Entity\CToolIntro(); $toolIntro ->setCId($course_id) ->setId(TOOL_WIKI) ->setSessionId(0) ->setIntroText(get_lang('IntroductionWiki')); $manager->persist($toolIntro); $manager->flush(); /* Exercise tool */ $exercise = new Exercise($course_id); $exercise->exercise = get_lang('ExerciceEx'); $html = '
' . get_lang('Antique') . '
'; $exercise->type = 1; $exercise->setRandom(0); $exercise->active = 1; $exercise->results_disabled = 0; $exercise->description = $html; $exercise->save(); $exercise_id = $exercise->id; $question = new MultipleAnswer(); $question->question = get_lang('SocraticIrony'); $question->description = get_lang('ManyAnswers'); $question->weighting = 10; $question->position = 1; $question->course = $courseInfo; $question->save($exercise_id); $questionId = $question->id; $answer = new Answer($questionId, $courseInfo['real_id']); $answer->createAnswer(get_lang('Ridiculise'), 0, get_lang('NoPsychology'), -5, 1); $answer->createAnswer(get_lang('AdmitError'), 0, get_lang('NoSeduction'), -5, 2); $answer->createAnswer(get_lang('Force'), 1, get_lang('Indeed'), 5, 3); $answer->createAnswer(get_lang('Contradiction'), 1, get_lang('NotFalse'), 5, 4); $answer->save(); /* Forum tool */ require_once api_get_path(SYS_CODE_PATH).'forum/forumfunction.inc.php'; $params = [ 'forum_category_title' => get_lang('ExampleForumCategory'), 'forum_category_comment' => '' ]; $forumCategoryId = store_forumcategory($params, $courseInfo, false); $params = [ 'forum_category' => $forumCategoryId, 'forum_title' => get_lang('ExampleForum'), 'forum_comment' => '', 'default_view_type_group' => ['default_view_type' => 'flat'], ]; $forumId = store_forum($params, $courseInfo, true); $forumInfo = get_forum_information($forumId, $courseInfo['real_id']); $params = [ 'post_title' => get_lang('ExampleThread'), 'forum_id' => $forumId, 'post_text' => get_lang('ExampleThreadContent'), 'calification_notebook_title' => '', 'numeric_calification' => '', 'weight_calification' => '', 'forum_category' => $forumCategoryId, 'thread_peer_qualify' => 0, ]; store_thread($forumInfo, $params, $courseInfo, false); /* Gradebook tool */ $course_code = $courseInfo['code']; // father gradebook Database::query( "INSERT INTO $TABLEGRADEBOOK (name, description, user_id, course_code, parent_id, weight, visible, certif_min_score, session_id, document_id) VALUES ('$course_code','',1,'$course_code',0,100,0,75,NULL,$example_cert_id)" ); $gbid = Database:: insert_id(); Database::query( "INSERT INTO $TABLEGRADEBOOK (name, description, user_id, course_code, parent_id, weight, visible, certif_min_score, session_id, document_id) VALUES ('$course_code','',1,'$course_code',$gbid,100,1,75,NULL,$example_cert_id)" ); $gbid = Database:: insert_id(); Database::query( "INSERT INTO $TABLEGRADEBOOKLINK (type, ref_id, user_id, course_code, category_id, created_at, weight, visible, locked) VALUES (1,$exercise_id,1,'$course_code',$gbid,'$now',100,1,0)" ); } //Installing plugins in course $app_plugin = new AppPlugin(); $app_plugin->install_course_plugins($course_id); $language_interface = $language_interface_original; return true; } /** * @param int $course_id * @param int $counter * @param array $file */ public static function insertDocument($course_id, $counter, $file) { $tableItem = Database::get_course_table(TABLE_ITEM_PROPERTY); $tableDocument = Database::get_course_table(TABLE_DOCUMENT); $now = api_get_utc_datetime(); $sql = "INSERT INTO $tableDocument (id, c_id, path,title,filetype,size, readonly, session_id) VALUES ($counter, $course_id, '".$file['path']."', '".$file['title']."', '".$file['filetype']."', '".$file['size']."', 0, 0)"; Database::query($sql); $docId = Database:: insert_id(); if ($docId) { $sql = "UPDATE $tableDocument SET id = iid WHERE iid = $docId"; Database::query($sql); $id = Database::insert( $tableItem, [ 'id' => $counter, 'c_id' => $course_id, 'tool' => 'document', 'insert_user_id' => api_get_user_id(), 'insert_date' => $now, 'lastedit_date' => $now, 'ref' => $docId, 'lastedit_type' => 'DocumentAdded', 'lastedit_user_id' => api_get_user_id(), 'to_group_id' => null, 'to_user_id' => null, 'visibility' => 0 ] ); if ($id) { $sql = "UPDATE $tableItem SET id = iid WHERE iid = $id"; Database::query($sql); } } } /** * string2binary converts the string "true" or "false" to the boolean true false (0 or 1) * This is used for the Chamilo Config Settings as these store true or false as string * and the api_get_setting('course_create_active_tools') should be 0 or 1 (used for * the visibility of the tool) * @param string $variable * @author Patrick Cool, patrick.cool@ugent.be * @assert ('true') === true * @assert ('false') === false */ public static function string2binary($variable) { if ($variable == 'true') { return true; } if ($variable == 'false') { return false; } } /** * Function register_course to create a record in the course table of the main database * @param array Course details (see code for details) * @return int Created course ID * @todo use an array called $params instead of lots of params * @assert (null) === false */ public static function register_course($params) { global $error_msg, $firstExpirationDelay; $title = $params['title']; $code = $params['code']; $visual_code = $params['visual_code']; $directory = $params['directory']; $tutor_name = isset($params['tutor_name']) ? $params['tutor_name'] : null; //$description = $params['description']; $category_code = isset($params['course_category']) ? $params['course_category'] : ''; $course_language = isset($params['course_language']) && !empty($params['course_language']) ? $params['course_language'] : api_get_setting( 'platformLanguage' ); $user_id = empty($params['user_id']) ? api_get_user_id() : intval($params['user_id']); $department_name = isset($params['department_name']) ? $params['department_name'] : null; $department_url = isset($params['department_url']) ? $params['department_url'] : null; $disk_quota = isset($params['disk_quota']) ? $params['disk_quota'] : null; if (!isset($params['visibility'])) { $default_course_visibility = api_get_setting( 'courses_default_creation_visibility' ); if (isset($default_course_visibility)) { $visibility = $default_course_visibility; } else { $visibility = COURSE_VISIBILITY_OPEN_PLATFORM; } } else { $visibility = $params['visibility']; } $subscribe = isset($params['subscribe']) ? intval( $params['subscribe'] ) : ($visibility == COURSE_VISIBILITY_OPEN_PLATFORM ? 1 : 0); $unsubscribe = isset($params['unsubscribe']) ? intval( $params['unsubscribe'] ) : 0; $expiration_date = isset($params['expiration_date']) ? $params['expiration_date'] : null; $teachers = isset($params['teachers']) ? $params['teachers'] : null; $status = isset($params['status']) ? $params['status'] : null; $TABLECOURSE = Database:: get_main_table(TABLE_MAIN_COURSE); $TABLECOURSUSER = Database:: get_main_table(TABLE_MAIN_COURSE_USER); $ok_to_register_course = true; // Check whether all the needed parameters are present. if (empty($code)) { $error_msg[] = 'courseSysCode is missing'; $ok_to_register_course = false; } if (empty($visual_code)) { $error_msg[] = 'courseScreenCode is missing'; $ok_to_register_course = false; } if (empty($directory)) { $error_msg[] = 'courseRepository is missing'; $ok_to_register_course = false; } if (empty($title)) { $error_msg[] = 'title is missing'; $ok_to_register_course = false; } if (empty($expiration_date)) { $expiration_date = api_get_utc_datetime( time() + $firstExpirationDelay ); } else { $expiration_date = api_get_utc_datetime($expiration_date); } if ($visibility < 0 || $visibility > 4) { $error_msg[] = 'visibility is invalid'; $ok_to_register_course = false; } if (empty($disk_quota)) { $disk_quota = api_get_setting('default_document_quotum'); } $time = api_get_utc_datetime(); if (stripos($department_url, 'http://') === false && stripos( $department_url, 'https://' ) === false ) { $department_url = 'http://' . $department_url; } //just in case if ($department_url == 'http://') { $department_url = ''; } $course_id = 0; if ($ok_to_register_course) { // Here we must add 2 fields. $sql = "INSERT INTO " . $TABLECOURSE . " SET code = '".Database:: escape_string($code)."', directory = '".Database:: escape_string($directory)."', course_language = '".Database:: escape_string($course_language)."', title = '".Database:: escape_string($title)."', description = '".self::lang2db(get_lang('CourseDescription'))."', category_code = '".Database:: escape_string($category_code)."', visibility = '" . $visibility . "', show_score = '1', disk_quota = '" . intval($disk_quota) . "', creation_date = '$time', expiration_date = '" . $expiration_date . "', last_edit = '$time', last_visit = NULL, tutor_name = '" . Database:: escape_string($tutor_name) . "', department_name = '" . Database:: escape_string($department_name) . "', department_url = '" . Database:: escape_string($department_url) . "', subscribe = '" . intval($subscribe) . "', unsubscribe = '" . intval($unsubscribe) . "', visual_code = '" . Database:: escape_string($visual_code) . "'"; Database::query($sql); $course_id = Database::insert_id(); if ($course_id) { $sort = api_max_sort_value('0', api_get_user_id()); // Default true $addTeacher = isset($params['add_user_as_teacher']) ? $params['add_user_as_teacher'] : true; if ($addTeacher) { $i_course_sort = CourseManager:: userCourseSort( $user_id, $code ); if (!empty($user_id)) { $sql = "INSERT INTO " . $TABLECOURSUSER . " SET c_id = '" . $course_id . "', user_id = '" . intval($user_id) . "', status = '1', is_tutor = '0', sort = '" . ($i_course_sort) . "', relation_type = 0, user_course_cat = '0'"; Database::query($sql); } } if (!empty($teachers)) { if (!is_array($teachers)) { $teachers = array($teachers); } foreach ($teachers as $key) { //just in case if ($key == $user_id) { continue; } if (empty($key)) { continue; } $sql = "INSERT INTO " . $TABLECOURSUSER . " SET c_id = '" . Database::escape_string($course_id) . "', user_id = '" . Database::escape_string($key) . "', status = '1', is_tutor = '0', sort = '" . ($sort + 1) . "', relation_type = 0, user_course_cat = '0'"; Database::query($sql); } } // Adding the course to an URL. if (api_is_multiple_url_enabled()) { $url_id = 1; if (api_get_current_access_url_id() != -1) { $url_id = api_get_current_access_url_id(); } UrlManager::add_course_to_url($course_id, $url_id); } else { UrlManager::add_course_to_url($course_id, 1); } // Add event to the system log. $user_id = api_get_user_id(); Event::addEvent( LOG_COURSE_CREATE, LOG_COURSE_CODE, $code, api_get_utc_datetime(), $user_id, $course_id ); $send_mail_to_admin = api_get_setting( 'send_email_to_admin_when_create_course' ); // @todo Improve code to send to all current portal administrators. if ($send_mail_to_admin == 'true') { $siteName = api_get_setting('siteName'); $recipient_email = api_get_setting('emailAdministrator'); $recipient_name = api_get_person_name( api_get_setting('administratorName'), api_get_setting('administratorSurname') ); $iname = api_get_setting('Institution'); $subject = get_lang( 'NewCourseCreatedIn' ) . ' ' . $siteName . ' - ' . $iname; $message = get_lang( 'Dear' ) . ' ' . $recipient_name . ",\n\n" . get_lang( 'MessageOfNewCourseToAdmin' ) . ' ' . $siteName . ' - ' . $iname . "\n"; $message .= get_lang('CourseName') . ' ' . $title . "\n"; $message .= get_lang( 'Category' ) . ' ' . $category_code . "\n"; $message .= get_lang('Tutor') . ' ' . $tutor_name . "\n"; $message .= get_lang('Language') . ' ' . $course_language; $userInfo = api_get_user_info($user_id); $additionalParameters = array( 'smsType' => SmsPlugin::NEW_COURSE_BEEN_CREATED, 'userId' => $user_id, 'courseName' => $title, 'creatorUsername' => $userInfo['username'] ); api_mail_html( $recipient_name, $recipient_email, $subject, $message, $siteName, $recipient_email, null, null, null, $additionalParameters ); } } } return $course_id; } /** * Generate a new id for c_tool table * @param int $courseId The course id * @return int the new id */ public static function generateToolId($courseId) { $newIdResultData = Database::select( 'id + 1 AS new_id', Database::get_course_table(TABLE_TOOL_LIST), [ 'where' => ['c_id = ?' => intval($courseId)], 'order' => 'id', 'limit' => 1 ], 'first' ); if ($newIdResultData === false) { return 1; } return $newIdResultData['new_id'] > 0 ? $newIdResultData['new_id'] : 1; } }