diff --git a/custompages/url-images/README b/custompages/url-images/README new file mode 100644 index 0000000000..543a49d0c2 --- /dev/null +++ b/custompages/url-images/README @@ -0,0 +1,5 @@ +Custom Pages : URL Images + +This features allows each access URL to have a number of images (currently three) specific to this URL. This allows easier customization of landing pages by access URL. + +You can access a URL's images by calling the static function CustomPages::getURLImages() in your custom page. diff --git a/main/admin/access_url_edit.php b/main/admin/access_url_edit.php old mode 100755 new mode 100644 index a987024ea6..49d2e293f5 --- a/main/admin/access_url_edit.php +++ b/main/admin/access_url_edit.php @@ -43,6 +43,19 @@ if( $form->validate()) { } else { UrlManager::udpate($url_id, $url.'/', $description, $active); } + // URL Images + $url_images_dir = api_get_path(SYS_PATH).'custompages/url-images/'; + $image_fields = array("url_image_1", "url_image_2", "url_image_3"); + foreach ($image_fields as $image_field) { + if ($_FILES[$image_field]['error'] == 0) { + // Hardcoded: only PNG files allowed + if (end(explode('.', $_FILES[$image_field]['name'])) == 'png') { + move_uploaded_file($_FILES[$image_field]['tmp_name'], $url_images_dir.$url_id.'_'.$image_field.'.png'); + } + // else fail silently + } + // else fail silently + } $url_to_go='access_urls.php'; $message=get_lang('URLEdited'); } else { @@ -61,6 +74,21 @@ if( $form->validate()) { $url_to_go='access_url_edit.php'; $message = get_lang('URLAlreadyAdded'); } + // URL Images + $url .= (substr($url,strlen($url)-1, strlen($url))=='/') ? '' : '/'; + $url_id = UrlManager::get_url_id($url); + $url_images_dir = api_get_path(SYS_PATH).'custompages/url-images/'; + $image_fields = array("url_image_1", "url_image_2", "url_image_3"); + foreach ($image_fields as $image_field) { + if ($_FILES[$image_field]['error'] == 0) { + // Hardcoded: only PNG files allowed + if (end(explode('.', $_FILES[$image_field]['name'])) == 'png') { + move_uploaded_file($_FILES[$image_field]['tmp_name'], $url_images_dir.$url_id.'_'.$image_field.'.png'); + } + // else fail silently + } + // else fail silently + } } Security::clear_token(); $tok = Security::get_token(); @@ -122,6 +150,11 @@ if (isset ($_GET['action'])) { } } +// URL Images +$form->addElement('file','url_image_1','URL Image 1 (PNG)'); +$form->addElement('file','url_image_2','URL Image 2 (PNG)'); +$form->addElement('file','url_image_3','URL Image 3 (PNG)'); + // Submit button $form->addElement('style_submit_button', 'submit', $submit_name, 'class="add"'); $form->display(); diff --git a/main/auth/conditional_login/first_login.php b/main/auth/conditional_login/first_login.php new file mode 100644 index 0000000000..f4ab71fd75 --- /dev/null +++ b/main/auth/conditional_login/first_login.php @@ -0,0 +1,37 @@ + + + + + + + +

First login

+

This is your first login please complete those fields :

+
+ Téléphone : + +
+ + + diff --git a/main/img/gamepad.gif b/main/img/gamepad.gif new file mode 100644 index 0000000000..81a0c0ec9f Binary files /dev/null and b/main/img/gamepad.gif differ diff --git a/main/inc/lib/add_course.lib.inc.php b/main/inc/lib/add_course.lib.inc.php index cff103de9e..694a1ff25a 100644 --- a/main/inc/lib/add_course.lib.inc.php +++ b/main/inc/lib/add_course.lib.inc.php @@ -1218,8 +1218,9 @@ function update_Db_course($course_db_name) { "author varchar(255) not null default '', " . // stores the theme of the LP "session_id int unsigned not null default 0, " . // the session_id "prerequisite int unsigned not null default 0," . // pre requisite for next lp - "hide_toc_frame tinyint NOT NULL DEFAULT 0,". - "use_max_score int unsigned not null default 1, " . // max scores for scorm packages + "hide_toc_frame tinyint NOT NULL DEFAULT 0". + "seriousgame_mode tinyint NOT NULL DEFAULT 0". + "use_max_score int unsigned not null default 1, " . "autolunch int unsigned not null default 0, " . // auto lunch LP "created_on DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', " . // auto lunch LP "modified_on DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', " . // auto lunch LP diff --git a/main/inc/lib/custompages.lib.php b/main/inc/lib/custompages.lib.php index 7f1804a737..57425934cd 100644 --- a/main/inc/lib/custompages.lib.php +++ b/main/inc/lib/custompages.lib.php @@ -3,6 +3,8 @@ // Used to implement the loading of custom pages // 2011, Jean-Karim Bockstael +require_once api_get_path(LIBRARY_PATH).'urlmanager.lib.php'; + class CustomPages { public static function displayPage($page_name) { @@ -16,5 +18,20 @@ class CustomPages { error_log('CustomPages::displayPage : could not read file '.$file_name); } } + + public static function getURLImages($url_id = null) { + if (is_null($url_id)) { + $url = 'http://'.$_SERVER['HTTP_HOST'].'/'; + $url_id = UrlManager::get_url_id($url); + } + $url_images_dir = api_get_path(SYS_PATH).'custompages/url-images/'; + $images = array(); + for ($img_id = 1; $img_id <= 3; $img_id++) { + if (file_exists($url_images_dir.$url_id.'_url_image_'.$img_id.'.png')) { + $images[] = api_get_path(WEB_PATH).'custompages/url-images/'.$url_id.'_url_image_'.$img_id.'.png'; + } + } + return $images; + } } ?> diff --git a/main/install/db_main.sql b/main/install/db_main.sql index 0aad9d09ac..56cbc2799b 100644 --- a/main/install/db_main.sql +++ b/main/install/db_main.sql @@ -841,11 +841,11 @@ VALUES ('teacher_autosubscribe', NULL, 'textfield', 'Platform', '', 'TeacherAutosubscribeTitle', 'TeacherAutosubscribeComment', NULL, NULL, 0), ('DRH_autosubscribe', NULL, 'textfield', 'Platform', '', 'DRHAutosubscribeTitle', 'DRHAutosubscribeComment', NULL, NULL, 0), ('sessionadmin_autosubscribe', NULL, 'textfield', 'Platform', '', 'SessionadminAutosubscribeTitle', 'SessionadminAutosubscribeComment', NULL, NULL, 0), -('show_tabs', 'custom_tab_1', 'checkbox', 'Platform', 'false', 'ShowTabsTitle', 'ShowTabsComment', NULL, 'TabsCustom1', 1), +('show_tabs', 'custom_tab_1', 'checkbox', 'Platform', 'true', 'ShowTabsTitle', 'ShowTabsComment', NULL, 'TabsCustom1', 1), ('show_tabs', 'custom_tab_2', 'checkbox', 'Platform', 'false', 'ShowTabsTitle', 'ShowTabsComment', NULL, 'TabsCustom2', 1), ('show_tabs', 'custom_tab_3', 'checkbox', 'Platform', 'false', 'ShowTabsTitle', 'ShowTabsComment', NULL, 'TabsCustom3', 1), -('custom_tab_1_name', NULL, 'textfield', 'Platform', '', 'CustomTab1NameTitle', 'CustomTab1NameComment', NULL, NULL, 0), -('custom_tab_1_url', NULL, 'textfield', 'Platform', '', 'CustomTab1URLTitle', 'CustomTab1URLComment', NULL, NULL, 0), +('custom_tab_1_name', NULL, 'textfield', 'Platform', 'Reports', 'CustomTab1NameTitle', 'CustomTab1NameComment', NULL, NULL, 0), +('custom_tab_1_url', NULL, 'textfield', 'Platform', '/main/reports/', 'CustomTab1URLTitle', 'CustomTab1URLComment', NULL, NULL, 0), ('custom_tab_2_name', NULL, 'textfield', 'Platform', '', 'CustomTab2NameTitle', 'CustomTab2NameComment', NULL, NULL, 0), ('custom_tab_2_url', NULL, 'textfield', 'Platform', '', 'CustomTab2URLTitle', 'CustomTab2URLComment', NULL, NULL, 0), ('custom_tab_3_name', NULL, 'textfield', 'Platform', '', 'CustomTab3NameTitle', 'CustomTab3NameComment', NULL, NULL, 0), @@ -855,8 +855,11 @@ VALUES ('languagePriority3', NULL, 'radio', 'Languages','user_selected_lang', 'LanguagePriority3Title', 'LanguagePriority3Comment', NULL, NULL, 0), ('languagePriority4', NULL, 'radio', 'Languages', 'platform_lang','LanguagePriority4Title', 'LanguagePriority4Comment', NULL, NULL, 0), ('activate_send_event_by_mail', NULL, 'radio', 'Platform', 'false', 'ActivateSendEventByMailTitle', 'ActivateSendEventByMailComment', NULL, NULL, 0), +('scorm_cumulative_session_time', NULL, 'radio', 'Course', 'true', 'ScormCumulativeSessionTimeTitle', 'ScormCumulativeSessionTimeComment', NULL, NULL, 0), ('chamilo_database_version',NULL,'textfield',NULL, '1.8.8.14519','DokeosDatabaseVersion','', NULL, NULL, 0); + + UNLOCK TABLES; /*!40000 ALTER TABLE settings_current ENABLE KEYS */; @@ -1148,8 +1151,9 @@ VALUES ('languagePriority4','user_selected_lang','UserSelectedLanguage'), ('languagePriority4','course_lang','CourseLanguage'), ('activate_send_event_by_mail', 'true', 'Yes'), -('activate_send_event_by_mail', 'false', 'No'); - +('activate_send_event_by_mail', 'false', 'No'), +('scorm_cumulative_session_time','true','Yes'), +('scorm_cumulative_session_time','false','No'); UNLOCK TABLES; diff --git a/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql b/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql index 61d882f169..f8d1bad733 100644 --- a/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql +++ b/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql @@ -22,7 +22,7 @@ ALTER TABLE session_rel_user ADD COLUMN relation_type int NOT NULL default 0; ALTER TABLE course_rel_user ADD COLUMN relation_type int NOT NULL default 0; INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url, access_url_changeable) VALUES ('course_create_active_tools','notebook','checkbox','Tools','true','CourseCreateActiveToolsTitle','CourseCreateActiveToolsComment',NULL,'Notebook',1,0); -ALTER TABLE course DROP PRIMARY KEY , ADD UNIQUE KEY code (code); +ALTER TABLE course DROP PRIMARY KEY , ADD UNIQUE KEY code (code); ALTER TABLE course ADD id int NOT NULL auto_increment PRIMARY KEY FIRST; CREATE TABLE block (id INT NOT NULL auto_increment, name VARCHAR(255) NULL, description TEXT NULL, path VARCHAR(255) NOT NULL, controller VARCHAR(100) NOT NULL, active TINYINT NOT NULL default 1, PRIMARY KEY(id)); ALTER TABLE block ADD UNIQUE(path); @@ -88,16 +88,84 @@ INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_user INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('show_link_bug_notification', NULL, 'radio', 'Platform', 'true', 'ShowLinkBugNotificationTitle', 'ShowLinkBugNotificationComment', NULL, NULL, 0); INSERT INTO settings_options (variable, value, display_text) VALUES ('show_link_bug_notification', 'true', 'Yes'); INSERT INTO settings_options (variable, value, display_text) VALUES ('show_link_bug_notification', 'false', 'No'); +-- CAS +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_activate', NULL, 'radio', 'CAS', 'false', 'CasMainActivateTitle', 'CasMainActivateComment', NULL, NULL, 0); +INSERT INTO settings_options (variable, value, display_text) values ('cas_activate', 'true', 'Yes'); +INSERT INTO settings_options (variable, value, display_text) values ('cas_activate', 'false', 'No'); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_server', NULL, 'textfield', 'CAS', '', 'CasMainServerTitle', 'CasMainServerComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_server_uri', NULL, 'textfield', 'CAS', '', 'CasMainServerURITitle', 'CasMainServerURIComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_port', NULL, 'textfield', 'CAS', '', 'CasMainPortTitle', 'CasMainPortComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_protocol', NULL, 'radio', 'CAS', '', 'CasMainProtocolTitle', 'CasMainProtocolComment', NULL, NULL, 0); +INSERT INTO settings_options (variable, value, display_text) values ('cas_protocol', 'CAS1', 'CAS1Text'); +INSERT INTO settings_options (variable, value, display_text) values ('cas_protocol', 'CAS2', 'CAS2Text'); +INSERT INTO settings_options (variable, value, display_text) values ('cas_protocol', 'SAML', 'SAMLText'); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_add_user_activate', NULL, 'radio', 'CAS', '', 'CasUserAddActivateTitle', 'CasUserAddActivateComment', NULL, NULL, 0); +INSERT INTO settings_options (variable, value, display_text) values ('cas_add_user_activate', 'true', 'Yes'); +INSERT INTO settings_options (variable, value, display_text) values ('cas_add_user_activate', 'false', 'No'); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_add_user_login_attr', NULL, 'textfield', 'CAS', '', 'CasUserAddLoginAttributeTitle', 'CasUserAddLoginAttributeComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_add_user_email_attr', NULL, 'textfield', 'CAS', '', 'CasUserAddEmailAttributeTitle', 'CasUserAddEmailAttributeComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_add_user_firstname_attr', NULL, 'textfield', 'CAS', '', 'CasUserAddFirstnameAttributeTitle', 'CasUserAddFirstnameAttributeComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_add_user_lastname_attr', NULL, 'textfield', 'CAS', '', 'CasUserAddLastnameAttributeTitle', 'CasUserAddLastnameAttributeComment', NULL, NULL, 0); +-- Custom Pages +INSERT INTO settings_options (variable, value, display_text) VALUES ('use_custom_pages', 'true', 'Yes'), ('use_custom_pages', 'false', 'No'); +INSERT INTO settings_current (variable, type, category, selected_value, title, comment, scope) VALUES ('use_custom_pages','radio','Platform','false','UseCustomPages','UseCustomPagesComment', 'platform'); ALTER TABLE gradebook_score_display ADD category_id int NOT NULL DEFAULT 0; ALTER TABLE gradebook_score_display ADD INDEX (category_id); ALTER TABLE gradebook_score_display ADD score_color_percent float unsigned NOT NULL DEFAULT 0; +-- CBlue custom +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('student_page_after_login', NULL, 'textfield', 'Platform', '', 'StudentPageAfterLoginTitle', 'StudentPageAfterLoginComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('teacher_page_after_login', NULL, 'textfield', 'Platform', '', 'TeacherPageAfterLoginTitle', 'TeacherPageAfterLoginComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('DRH_page_after_login', NULL, 'textfield', 'Platform', '', 'DRHPageAfterLoginTitle', 'DRHPageAfterLoginComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('sessionadmin_page_after_login', NULL, 'textfield', 'Platform', '', 'SessionAdminPageAfterLoginTitle', 'SessionAdminPageAfterLoginComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('student_autosubscribe', NULL, 'textfield', 'Platform', '', 'StudentAutosubscribeTitle', 'StudentAutosubscribeComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('teacher_autosubscribe', NULL, 'textfield', 'Platform', '', 'TeacherAutosubscribeTitle', 'TeacherAutosubscribeComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('DRH_autosubscribe', NULL, 'textfield', 'Platform', '', 'DRHAutosubscribeTitle', 'DRHAutosubscribeComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('sessionadmin_autosubscribe', NULL, 'textfield', 'Platform', '', 'SessionadminAutosubscribeTitle', 'SessionadminAutosubscribeComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('show_tabs', 'custom_tab_1', 'checkbox', 'Platform', 'true', 'ShowTabsTitle', 'ShowTabsComment', NULL, 'TabsCustom1', 1); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('show_tabs', 'custom_tab_2', 'checkbox', 'Platform', 'false', 'ShowTabsTitle', 'ShowTabsComment', NULL, 'TabsCustom2', 1); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('show_tabs', 'custom_tab_3', 'checkbox', 'Platform', 'false', 'ShowTabsTitle', 'ShowTabsComment', NULL, 'TabsCustom3', 1); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('custom_tab_1_name', NULL, 'textfield', 'Platform', 'Reports', 'CustomTab1NameTitle', 'CustomTab1NameComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('custom_tab_1_url', NULL, 'textfield', 'Platform', '/main/reports/', 'CustomTab1URLTitle', 'CustomTab1URLComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('custom_tab_2_name', NULL, 'textfield', 'Platform', '', 'CustomTab2NameTitle', 'CustomTab2NameComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('custom_tab_2_url', NULL, 'textfield', 'Platform', '', 'CustomTab2URLTitle', 'CustomTab2URLComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('custom_tab_3_name', NULL, 'textfield', 'Platform', '', 'CustomTab3NameTitle', 'CustomTab3NameComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('custom_tab_3_url', NULL, 'textfield', 'Platform', '', 'CustomTab3URLTitle', 'CustomTab3URLComment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('scorm_cumulative_session_time', NULL, 'radio', 'Course', 'true', 'ScormCumulativeSessionTimeTitle', 'ScormCumulativeSessionTimeComment', NULL, NULL, 0); +INSERT INTO settings_options (variable, value, display_text) VALUES ('scorm_cumulative_session_time','true','Yes'), ('scorm_cumulative_session_time','false','No'); + +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('activate_send_event_by_mail', NULL, 'radio', 'Platform', 'false', 'ActivateSendEventByMailTitle', 'ActivateSendEventByMailComment', NULL, NULL, 0); +INSERT INTO settings_options (variable, value, display_text) VALUES ('activate_send_event_by_mail', 'true', 'Yes'),('activate_send_event_by_mail', 'false', 'No'); +CREATE TABLE `event_type` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `name_lang_var` varchar(40) NOT NULL, `desc_lang_var` varchar(50) NOT NULL, PRIMARY KEY (`id`)); +CREATE TABLE `event_type_message` (`id` int(11) NOT NULL AUTO_INCREMENT, `event_type_id` int(11) NOT NULL,`language_id` int(11) NOT NULL, `message` varchar(200) NOT NULL, `subject` varchar(60) NOT NULL, PRIMARY KEY (`id`)); +CREATE TABLE `user_rel_event_type` (`id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `event_type_id` int(11) NOT NULL, PRIMARY KEY (`id`)); +INSERT INTO `event_type` VALUES (1, 'course_deleted','courseDeletedTitle','courseDeletedComment'),(2,'course_created','courseCreatedTitle','courseCreatedComment'),(3,'user_deleted','userDeletedTitle','userDeletedComment'),(4,'user_created','userCreatedTitle','userCreatedComment'), (5, 'session_created','sessionCreatedTitle','sessionCreatedComment'), (6,'session_deleted','sessionDeletedTitle','sessionDeletedComment'), (7,'session_category_created','sessionCategoryCreatedTitle','sessionCategoryCreatedComment'),(8,'session_category_deleted','sessionCategoryDeletedTitle','sessionCategoryDeletedComment'),(9,'settings_changed','settingsChangedTitle','settingsChangedComment'),(10,'user_subscribed','userSubscribedTitle','userSubscribedComment'), (11,'user_unsubscribed','userUnsubscribedTitle','userUnsubscribedComment'); +INSERT INTO `event_type_message` (`id`,`event_type_id`, `language_id`, `message`,`subject`) VALUES (1,4,10,'Bonjour, \r\n\r\nL\'utilisateur %username% (%firstname% %lastname%) a été créé.\r\nEmail : %mail%\r\n\r\nBien à vous.',''),(2,1,10,'Delete formation',''),(3,2,10,'Create formation',''),(4,3,10,'Bonjour, \r\n\r\nL\'utilisateur %username% (%firstname% %lastname%) a été supprimé.\r\n\r\nBien à vous.',''),(6,5,10,'Create session test',''),(7,6,10,'Delete session',''),(8,7,10,'Create category session',''),(9,8,10,'Delete category session',''),(10,9,10,'Change setting',''),(11,10,10,'Subscribe',''),(12,11,10,'Unsubscribe',''); +INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable) values (1, 'already_logged_in','Already logged in',0,0); +CREATE TABLE announcement_rel_group (group_id int NOT NULL, announcement_id int NOT NULL, PRIMARY KEY (group_id, announcement_id)); + +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('languagePriority1', NULL, 'radio', 'Languages', 'course_lang', 'LanguagePriority1Title', 'LanguagePriority1Comment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('languagePriority2', NULL, 'radio', 'Languages', 'user_profil_lang', 'LanguagePriority2Title', 'LanguagePriority2Comment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('languagePriority3', NULL, 'radio', 'Languages', 'user_selected_lang', 'LanguagePriority3Title', 'LanguagePriority3Comment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('languagePriority4', NULL, 'radio', 'Languages', 'platform_lang', 'LanguagePriority4Title', 'LanguagePriority4Comment', NULL, NULL, 0); +INSERT INTO settings_options (variable, value, display_text) VALUES ('languagePriority1','platform_lang','PlatformLanguage'), ('languagePriority1','user_profil_lang','UserLanguage'), ('languagePriority1','user_selected_lang','UserSelectedLanguage'), ('languagePriority1','course_lang','CourseLanguage'), ('languagePriority2','platform_lang','PlatformLanguage'), ('languagePriority2','user_profil_lang','UserLanguage'), ('languagePriority2','user_selected_lang','UserSelectedLanguage'), ('languagePriority2','course_lang','CourseLanguage'), ('languagePriority3','platform_lang','PlatformLanguage'), ('languagePriority3','user_profil_lang','UserLanguage'), ('languagePriority3','user_selected_lang','UserSelectedLanguage'), ('languagePriority3','course_lang','CourseLanguage'), ('languagePriority4','platform_lang','PlatformLanguage'), ('languagePriority4','user_profil_lang','UserLanguage'), ('languagePriority4','user_selected_lang','UserSelectedLanguage'), ('languagePriority4','course_lang','CourseLanguage'); + + +-- +-- Table structure for LP custom storage API +-- +CREATE TABLE stored_values (user_id INT NOT NULL, sco_id INT NOT NULL, course_id CHAR(40) NOT NULL, sv_key CHAR(64) NOT NULL, sv_value TEXT NOT NULL ); +ALTER TABLE stored_values ADD KEY (user_id, sco_id, course_id, sv_key); +ALTER TABLE stored_values ADD UNIQUE (user_id, sco_id, course_id, sv_key); +CREATE TABLE stored_values_stack (user_id INT NOT NULL, sco_id INT NOT NULL, stack_order INT NOT NULL, course_id CHAR(40) NOT NULL, sv_key CHAR(64) NOT NULL, sv_value TEXT NOT NULL ); +ALTER TABLE stored_values_stack ADD KEY (user_id, sco_id, course_id, sv_key, stack_order); +ALTER TABLE stored_values_stack ADD UNIQUE (user_id, sco_id, course_id, sv_key, stack_order); -- xxSTATSxx CREATE TABLE track_e_item_property(id int NOT NULL auto_increment PRIMARY KEY, course_id int NOT NULL, item_property_id int NOT NULL, title varchar(255), content text, progress int NOT NULL default 0, lastedit_date datetime NOT NULL default '0000-00-00 00:00:00', lastedit_user_id int NOT NULL, session_id int NOT NULL default 0); ALTER TABLE track_e_item_property ADD INDEX (course_id, item_property_id, session_id); ALTER TABLE track_e_access ADD access_session_id INT NOT NULL DEFAULT 0; -ALTER TABLE track_e_access ADD INDEX (access_session_id); +ALTER TABLE track_e_access ADD INDEX (access_session_id); ALTER TABLE track_e_course_access ADD session_id INT NOT NULL DEFAULT 0; ALTER TABLE track_e_course_access ADD INDEX (session_id); ALTER TABLE track_e_downloads ADD down_session_id INT NOT NULL DEFAULT 0; @@ -114,6 +182,11 @@ ALTER TABLE track_e_attempt_recording ADD session_id INT NOT NULL DEFAULT 0; ALTER TABLE track_e_attempt_recording ADD INDEX (question_id); ALTER TABLE track_e_attempt_recording ADD INDEX (session_id); ALTER TABLE track_e_online ADD COLUMN access_url_id INT NOT NULL DEFAULT 1; +-- Groups can have subgroups +CREATE TABLE group_rel_group ( id int NOT NULL AUTO_INCREMENT, group_id int NOT NULL, subgroup_id int NOT NULL, relation_type int NOT NULL, PRIMARY KEY (id)); +ALTER TABLE group_rel_group ADD INDEX ( group_id ); +ALTER TABLE group_rel_group ADD INDEX ( subgroup_id ); +ALTER TABLE group_rel_group ADD INDEX ( relation_type ); -- xxUSERxx @@ -137,9 +210,9 @@ ALTER TABLE lp_view ADD INDEX(session_id); INSERT INTO course_setting (variable,value,category) VALUES ('allow_user_view_user_list',1,'user'); ALTER TABLE tool_intro ADD COLUMN session_id INT NOT NULL DEFAULT 0 AFTER intro_text, DROP PRIMARY KEY, ADD PRIMARY KEY USING BTREE(id, session_id); CREATE TABLE thematic (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR( 255 ) NOT NULL, content TEXT NULL, display_order int unsigned not null default 0, active TINYINT NOT NULL default 0, session_id INT NOT NULL DEFAULT 0); -ALTER TABLE thematic ADD INDEX (active, session_id); -CREATE TABLE thematic_plan (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, thematic_id INT NOT NULL, title VARCHAR(255) NOT NULL, description TEXT NULL, description_type INT NOT NULL); -ALTER TABLE thematic_plan ADD INDEX (thematic_id, description_type); +ALTER TABLE thematic ADD INDEX (active, session_id); +CREATE TABLE thematic_plan (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, thematic_id INT NOT NULL, title VARCHAR(255) NOT NULL, description TEXT NULL, description_type INT NOT NULL); +ALTER TABLE thematic_plan ADD INDEX (thematic_id, description_type); CREATE TABLE thematic_advance (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, thematic_id INT NOT NULL, attendance_id INT NOT NULL DEFAULT 0, content TEXT NOT NULL, start_date DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', duration INT NOT NULL DEFAULT 0, done_advance tinyint NOT NULL DEFAULT 0); ALTER TABLE thematic_advance ADD INDEX (thematic_id); INSERT INTO course_setting (variable,value,category) VALUES ('display_info_advance_inside_homecourse',1,'thematic_advance'); @@ -149,3 +222,8 @@ ALTER TABLE student_publication MODIFY COLUMN description TEXT DEFAULT NULL; ALTER TABLE student_publication ADD COLUMN user_id INTEGER NOT NULL AFTER session_id; INSERT INTO course_setting(variable,value,category) VALUES ('email_alert_students_on_new_homework',0,'work'); ALTER TABLE course_setting DROP INDEX unique_setting; +-- CBlue custom +ALTER TABLE lp ADD COLUMN hide_toc_frame TINYINT NOT NULL DEFAULT 0; +ALTER TABLE lp ADD COLUMN seriousgame_mode TINYINT NOT NULL DEFAULT 0; + +alter table lp_item_view modify column suspend_data longtext; diff --git a/main/lang/english/admin.inc.php b/main/lang/english/admin.inc.php index 7789e9dc92..54a9613549 100644 --- a/main/lang/english/admin.inc.php +++ b/main/lang/english/admin.inc.php @@ -1531,4 +1531,6 @@ $ChooseRelationType = 'Choose a relation type'; $UserListInGroup = 'Users subscribed to this group'; $ActivateSendEventByMailTitle='Activates the send events by mail feature'; $ActivateSendEventByMailComment = ''; +$ScormCumulativeSessionTimeTitle = 'Cumulative incerementation of session_time in scorm contents'; +$ScormCumulativeSessionTimeComment = '' ?> \ No newline at end of file diff --git a/main/lang/french/admin.inc.php b/main/lang/french/admin.inc.php index baba04cc03..83c24e8051 100644 --- a/main/lang/french/admin.inc.php +++ b/main/lang/french/admin.inc.php @@ -1323,6 +1323,8 @@ $ActivateSendEventByMailTitle='Activer les envois d\'évènements par email'; $ActivateSendEventByMailComment = ''; $AllowUsersCopyFilesTitle = "Permet aux utilisateurs de copier des fichiers à partir d'un cours de votre dossier personnel"; $AllowUsersCopyFilesComment = "Permet aux utilisateurs de copier des fichiers à partir d'un cours de votre dossier personnel, visible à travers les réseaux sociaux ou par l'intermédiaire de l'éditeur HTML lorsqu'ils ne font pas partis d'un cours"; +$ScormCumulativeSessionTimeTitle = 'La valeur session_time est incrémentée de manière cumulative dans les contenus scorm'; +$ScormCumulativeSessionTimeComment = ''; $ReviewCourseRequests = "Réviser les demandes de cours"; $AcceptedCourseRequests = "Demandes de cours acceptées"; $RejectedCourseRequests = "Demandes de cours rejetées"; diff --git a/main/newscorm/learnpath.class.php b/main/newscorm/learnpath.class.php index d8be30e37f..f39aa53cb5 100644 --- a/main/newscorm/learnpath.class.php +++ b/main/newscorm/learnpath.class.php @@ -49,6 +49,8 @@ class learnpath { public $prevent_reinit = 1; // Describes the mode of progress bar display. + public $seriousgame_mode = 0; + public $progress_bar_mode = '%'; // Percentage progress as saved in the db. @@ -135,6 +137,7 @@ class learnpath { $this->theme = $row['theme']; $this->maker = $row['content_maker']; $this->prevent_reinit = $row['prevent_reinit']; + $this->seriousgame_mode = $row['seriousgame_mode']; $this->license = $row['content_license']; $this->scorm_debug = $row['debug']; $this->js_lib = $row['js_lib']; @@ -4438,6 +4441,135 @@ class learnpath { return -1; } + /** + * Determine the attempt_mode thanks to prevent_reinit and seriousgame_mode db flag + * + * @return string 'single', 'multi' or 'seriousgame' + * @author ndiechburg + **/ + public function get_attempt_mode() + { + if (!isset($this->seriousgame_mode)) { //Set default value for seriousgame_mode + $this->seriousgame_mode=0; + } + if (!isset($this->prevent_reinit)) { // Set default value for prevent_reinit + $this->prevent_reinit =1; + } + if ($this->seriousgame_mode == 1 && $this->prevent_reinit == 1) { + return 'seriousgame'; + } + if ($this->seriousgame_mode == 0 && $this->prevent_reinit == 1) { + return 'single'; + } + if ($this->seriousgame_mode == 0 && $this->prevent_reinit == 0) { + return 'multiple'; + } + return 'single'; + } + + /** + * Register the attempt mode into db thanks to flags prevent_reinit and seriousgame_mode flags + * + * @param string 'seriousgame', 'single' or 'multiple' + * @return boolean + * @author ndiechburg + **/ + public function set_attempt_mode($mode) + { + switch ($mode) { + case 'seriousgame' : + $sg_mode = 1; + $prevent_reinit = 1; + break; + case 'single' : + $sg_mode = 0; + $prevent_reinit = 1; + break; + case 'multiple' : + $sg_mode = 0; + $prevent_reinit = 0; + break; + default : + $sg_mode = 0; + $prevent_reinit = 0; + break; + } + $this->prevent_reinit = $prevent_reinit; + $this->seriousgame_mode = $sg_mode; + $lp_table = Database :: get_course_table(TABLE_LP_MAIN); + $sql = "UPDATE $lp_table SET prevent_reinit = $prevent_reinit , seriousgame_mode = $sg_mode WHERE id = " . $this->get_id(); + $res = Database::query($sql); + if ($res) { + return true; + } + else { + return false; + } + } + + /** + * switch between multiple attempt, single attempt or serious_game mode (only for scorm) + * + * @return boolean + * @author ndiechburg + **/ + public function switch_attempt_mode() + { + if ($this->debug > 0) { + error_log('New LP - In learnpath::switch_attempt_mode()', 0); + } + $mode = $this->get_attempt_mode(); + switch ($mode) { + case 'single' : + $next_mode = 'multiple'; + break; + case 'multiple' : + $next_mode = 'seriousgame'; + break; + case 'seriousgame' : + $next_mode = 'single'; + break; + default : + $next_mode = 'single'; + break; + } + $this->set_attempt_mode($next_mode); + } + + /** + * Swithc the lp in ktm mode. This is a special scorm mode with unique attempt but possibility to do again a completed item. + * + * @return boolean true if seriousgame_mode has been set to 1, false otherwise + * @author ndiechburg + **/ + public function set_seriousgame_mode() + { + if ($this->debug > 0) { + error_log('New LP - In learnpath::set_seriousgame_mode()', 0); + } + $lp_table = Database :: get_course_table(TABLE_LP_MAIN); + $sql = "SELECT * FROM $lp_table WHERE id = " . $this->get_id(); + $res = Database::query($sql); + if (Database :: num_rows($res) > 0) { + $row = Database :: fetch_array($res); + $force = $row['seriousgame_mode']; + if ($force == 1) { + $force = 0; + } elseif ($force == 0) { + $force = 1; + } + $sql = "UPDATE $lp_table SET seriousgame_mode = $force WHERE id = " . $this->get_id(); + $res = Database::query($sql); + $this->seriousgame_mode = $force; + return $force; + } else { + if ($this->debug > 2) { + error_log('New LP - Problem in set_seriousgame_mode() - could not find LP ' . $this->get_id() . ' in DB', 0); + } + } + return -1; + + } /** * Updates the "scorm_debug" value that shows or hide the debug window * @return boolean True if scorm_debug has been set to 'on', false otherwise (or 1 or 0 in this case) diff --git a/main/newscorm/learnpathItem.class.php b/main/newscorm/learnpathItem.class.php index 11d118510a..25922f74e3 100644 --- a/main/newscorm/learnpathItem.class.php +++ b/main/newscorm/learnpathItem.class.php @@ -49,6 +49,7 @@ class learnpathItem { public $prereqs = array(); public $previous; public $prevent_reinit = 1; // 0 = multiple attempts 1 = one attempt + public $seriousgame_mode; public $ref; public $save_on_close = true; public $search_did = null; @@ -56,6 +57,8 @@ class learnpathItem { public $title; public $type; // This attribute can contain chapter|link|student_publication|module|quiz|document|forum|thread public $view_id; + //var used if absolute session time mode is used + private $last_scorm_session_time =0; const debug = 0; // Logging parameter. @@ -103,6 +106,7 @@ class learnpathItem { } $this->save_on_close = true; $this->db_id = $id; + $this->seriousgame_mode = $this->get_seriousgame_mode(); // Get search_did. if (api_get_setting('search_enabled')=='true') { @@ -634,6 +638,37 @@ class learnpathItem { } /** + * Returns 1 if seriousgame_mode is activated, 0 otherwise + * + * @return int (0 or 1) + * @author ndiechburg + **/ + public function get_seriousgame_mode() + { + if(self::debug>2){error_log('New LP - In learnpathItem::get_seriousgame_mode()',0);} + if(!isset($this->seriousgame_mode)){ + if(!empty($this->lp_id)){ + $db = Database::get_course_table(TABLE_LP_MAIN); + $sql = "SELECT * FROM $db WHERE id = ".$this->lp_id; + $res = @Database::query($sql); + if(Database::num_rows($res)<1) + { + $this->error = "Could not find parent learnpath in learnpath table"; + if(self::debug>2){error_log('New LP - End of learnpathItem::get_seriousgame_mode() - Returning false',0);} + return false; + }else{ + $row = Database::fetch_array($res); + $this->seriousgame_mode = isset($row['seriousgame_mode'])? $row['seriousgame_mode'] : 0; + } + }else{ + $this->seriousgame_mode = 0; //SeriousGame mode is always off by default + } + } + if(self::debug>2){error_log('New LP - End of learnpathItem::get_seriousgame_mode() - Returned '.$this->seriousgame_mode,0);} + return $this->seriousgame_mode; + } + + /** * Gets the item's reference column * @return string The item's reference field (generally used for SCORM identifiers) */ @@ -1119,7 +1154,7 @@ class learnpathItem { // If status is not attempted or incomplete, authorize retaking (of the same) anyway. Otherwise: if ($mystatus != $this->possible_status[0] && $mystatus != $this->possible_status[1]) { $restart = -1; - } else { + }else{ //status incompleted or not attempted $restart = 0; } } else { @@ -1577,7 +1612,18 @@ class learnpathItem { */ public function restart() { if (self::debug > 0) { error_log('New LP - In learnpathItem::restart()', 0); } + if ($this->type == 'sco') { //If this is a sco, chamilo can't update the time without explicit scorm call + $this->current_start_time = 0; + $this->current_stop_time = 0; //Those 0 value have this effect + $this->last_scorm_session_time = 0; + } $this->save(); + //For serious game : We reuse same attempt_id + if ($this->get_seriousgame_mode() == 1 && $this->type == 'sco') { + $this->current_start_time = 0; + $this->current_stop_time = 0; + return true; + } $allowed = $this->is_restart_allowed(); if ($allowed === -1) { // Nothing allowed, do nothing. @@ -1606,6 +1652,8 @@ class learnpathItem { $this->current_data = ''; $this->status = $this->possible_status[0]; $this->interactions_count = $this->get_interactions_count(true); + if ($this->type == 'sco') + $this->scorm_init_time(); } return true; } @@ -1995,10 +2043,10 @@ class learnpathItem { $sec = $res[3]; // Getting total number of seconds spent. $total_sec = $hour*3600 + $min*60 + $sec; - $this->update_time($total_sec); + $this->scorm_update_time($total_sec); } } elseif ($format == 'int') { - $this->update_time($scorm_time); + $this->scorm_update_time($scorm_time); } } } @@ -2087,6 +2135,47 @@ class learnpathItem { } /** + * Special scorm update time function. This function will update time directly into db for scorm objects + **/ + public function scorm_update_time($total_sec=0){ + //Step 1 : get actual total time stored in db + $item_view_table = Database::get_course_table(TABLE_LP_ITEM_VIEW); + $get_view_sql='SELECT total_time, status FROM '.$item_view_table.' WHERE lp_item_id="'.$this->db_id.'" AND lp_view_id="'.$this->view_id.'" AND view_count="'.$this->attempt_id.'" ;'; + $result=Database::query($get_view_sql); + $row=Database::fetch_array($result); + if (!isset($row['total_time'])) { + $total_time = 0; + } + else { + $total_time = $row['total_time']; + } + + //Step 2.1 : if normal mode total_time = total_time + total_sec + if (api_get_setting('scorm_cumulative_session_time') != 'false'){ + $total_time +=$total_sec; + //$this->last_scorm_session_time = $total_sec; + } + //Step 2.2 : if not cumulative mode total_time = total_time - last_update + total_sec + else{ + $total_time = $total_time - $this->last_scorm_session_time + $total_sec; + $this->last_scorm_session_time = $total_sec; + } + //Step 3 update db only if status != completed, passed, browsed or seriousgamemode not activated + $case_completed=array('completed','passed','browsed'); //TODO COMPLETE + if ($this->seriousgame_mode!=1 || !in_array($row['status'], $case_completed)){ + $update_view_sql='UPDATE '.$item_view_table." SET total_time =$total_time".' WHERE lp_item_id="'.$this->db_id.'" AND lp_view_id="'.$this->view_id.'" AND view_count="'.$this->attempt_id.'" ;'; + $result=Database::query($update_view_sql); + } + } + /** + * Set the total_time to 0 into db + **/ + public function scorm_init_time(){ + $item_view_table = Database::get_course_table(TABLE_LP_ITEM_VIEW); + $update_view_sql='UPDATE '.$item_view_table.' SET total_time = 0, start_time='.time().' WHERE lp_item_id="'.$this->db_id.'" AND lp_view_id="'.$this->view_id.'" AND view_count="'.$this->attempt_id.'" ;'; + $result=Database::query($update_view_sql); + } + /** * Write objectives to DB. This method is separate from write_to_db() because otherwise * objectives are lost as a side effect to AJAX and session concurrent access * @return boolean True or false on error @@ -2171,9 +2260,10 @@ class learnpathItem { $save = true; } - if (($save === false && $this->type == 'sco') ||(($this->type == 'sco') && ($credit == 'no-credit' OR $mode == 'review' OR $mode == 'browse'))) { - // This info shouldn't be saved as the credit or lesson mode info prevent it. - if (self::debug > 1) { error_log('New LP - In learnpathItem::write_to_db() - credit('.$credit.') or lesson_mode('.$mode.') prevent recording!', 0); } + if ((($save===false && $this->type == 'sco') ||(($this->type == 'sco') && ($credit == 'no-credit' OR $mode == 'review' OR $mode == 'browse'))) && ($this->seriousgame_mode!=1 && $this->type == 'sco')) + { + //this info shouldn't be saved as the credit or lesson mode info prevent it + if(self::debug>1){error_log('New LP - In learnpathItem::write_to_db() - credit('.$credit.') or lesson_mode('.$mode.') prevent recording!',0);} } else { // Check the row exists. $inserted = false; @@ -2293,8 +2383,12 @@ class learnpathItem { // This is a array containing values finished $case_completed = array('completed', 'passed', 'browsed'); - if ($this->get_prevent_reinit() == 1) { - // Multiple attempts are prevented. + //is not multiple attempts + if ($this->seriousgame_mode==1 && $this->type=='sco') { + $total_time =" total_time = total_time +".$this->get_total_time().", "; + $my_status = " status = '".$this->get_status(false)."' ,"; + } elseif ($this->get_prevent_reinit()==1) { + // process of status verified into data base // Process of status verified into data base. $sql_verified = 'SELECT status FROM '.$item_view_table.' WHERE lp_item_id="'.$this->db_id.'" AND lp_view_id="'.$this->view_id.'" AND view_count="'.$this->attempt_id.'" ;'; @@ -2357,6 +2451,20 @@ class learnpathItem { }*/ } + + if ($this->type == 'sco'){ //IF scorm scorm_update_time has already updated total_tim in db + $sql = "UPDATE $item_view_table " . + " SET ".//start_time = ".$this->get_current_start_time().", " . //scorm_init_time does it + " score = ".$this->get_score().", " . + $my_status. + " max_score = '".$this->get_max()."'," . + " suspend_data = '".Database::escape_string($this->current_data)."'," . + //" max_time_allowed = '".$this->get_max_time_allowed()."'," . + " lesson_location = '".$this->lesson_location."' " . + "WHERE lp_item_id = ".$this->db_id." " . + "AND lp_view_id = ".$this->view_id." " . + "AND view_count = ".$this->attempt_id; + } else { $sql = "UPDATE $item_view_table " . "SET " .$total_time. " start_time = ".$this->get_current_start_time().", " . @@ -2369,6 +2477,7 @@ class learnpathItem { "WHERE lp_item_id = ".$this->db_id." " . "AND lp_view_id = ".$this->view_id." " . "AND view_count = ".$this->attempt_id; + } $this->current_start_time = time(); } diff --git a/main/newscorm/learnpathList.class.php b/main/newscorm/learnpathList.class.php index 40507d7605..923b570057 100644 --- a/main/newscorm/learnpathList.class.php +++ b/main/newscorm/learnpathList.class.php @@ -114,6 +114,7 @@ class learnpathList { 'lp_visibility' => $vis, 'lp_published' => $pub, 'lp_prevent_reinit' => $row['prevent_reinit'], + 'seriousgame_mode' => $row['seriousgame_mode'], 'lp_scorm_debug' => $row['debug'], 'lp_display_order' => $row['display_order'], 'lp_preview_image' => stripslashes($row['preview_image']), diff --git a/main/newscorm/lp_controller.php b/main/newscorm/lp_controller.php index 470b68a111..987e6a4196 100644 --- a/main/newscorm/lp_controller.php +++ b/main/newscorm/lp_controller.php @@ -841,12 +841,27 @@ switch ($action) { $_SESSION['oLP']->update_default_scorm_commit(); require 'lp_list.php'; break; - + /* Those 2 switches have been replaced by switc_attempt_mode switch case 'switch_reinit': if ($debug > 0) error_log('New LP - switch_reinit action triggered', 0); if (!$lp_found) { error_log('New LP - No learnpath given for switch', 0); require 'lp_list.php'; } $_SESSION['refresh'] = 1; $_SESSION['oLP']->update_reinit(); + require 'lp_list.php'; + break; + case 'switch_seriousgame_mode': + if($debug>0) error_log('New LP - switch_seriousgame_mode action triggered',0); + if(!$lp_found){ error_log('New LP - No learnpath given for switch',0); require 'lp_list.php'; } + $_SESSION['refresh'] = 1; + $_SESSION['oLP']->set_seriousgame_mode(); + require 'lp_list.php'; + break; + */ + case 'switch_attempt_mode': + if($debug>0) error_log('New LP - switch_reinit action triggered',0); + if(!$lp_found){ error_log('New LP - No learnpath given for switch',0); require 'lp_list.php'; } + $_SESSION['refresh'] = 1; + $_SESSION['oLP']->switch_attempt_mode(); require 'lp_list.php'; break; diff --git a/main/newscorm/lp_list.php b/main/newscorm/lp_list.php index 7890b74f75..c20b1fea63 100644 --- a/main/newscorm/lp_list.php +++ b/main/newscorm/lp_list.php @@ -350,16 +350,26 @@ if (is_array($flat_list)) { $dsp_publish = Display::return_icon('lp_publish_na.png', get_lang('_no_publish'),'','22'); } - /* MULTIPLE ATTEMPTS */ + /* MULTIPLE ATTEMPTS OR SERIOUS GAME MODE */ if ($current_session == $details['lp_session']) { - if ($details['lp_prevent_reinit'] == 1) { - $dsp_reinit = '' . + if ($details['seriousgame_mode'] == 1 && $details['lp_prevent_reinit'] == 1) { //seriousgame mode | next = single + dir('serious'); Display::return_icon('reload_na.png', get_lang('AllowMultipleAttempts'),'','22').''; - } else { - $dsp_reinit = '' . - Display::return_icon('reload.png', get_lang('PreventMultipleAttempts'),'','22').''; - } + 'Prevent reinit' . + ' '; + } + if ($details['seriousgame_mode'] == 0 && $details['lp_prevent_reinit'] == 1) { //single mode | next = multiple + $dsp_reinit = '' . + 'Allow reinit' . + ' '; + } + if ($details['seriousgame_mode'] == 0 && $details['lp_prevent_reinit'] == 0) { //multiple mode | next = seriousgame + $dsp_reinit = '' . + 'Serious game mode' . + ' '; + ' '; + } } else { $dsp_reinit = Display::return_icon('reload_na.png', get_lang('AllowMultipleAttempts'),'','22'); }