diff --git a/main/admin/event_type.php b/main/admin/event_type.php index 3152736186..84a2653dec 100644 --- a/main/admin/event_type.php +++ b/main/admin/event_type.php @@ -4,17 +4,21 @@ $language_file = array('admin','events'); $cidReset = true; require_once '../inc/global.inc.php'; +require_once '../inc/conf/events.conf.php'; $this_section = SECTION_PLATFORM_ADMIN; api_protect_admin_script(); $interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); -$tool_name = get_lang('EventsTitle'); +$tool_name = get_lang('events_title'); $action = isset($_POST['action'])?$_POST['action']:null; -$eventId = isset($_POST['eventId'])?$_POST['eventId']:null; +//$eventId = isset($_POST['eventId'])?$_POST['eventId']:null; +$eventName = isset($_POST['eventList'])?$_POST['eventList']:null; $eventUsers = isset($_POST['eventUsers'])?$_POST['eventUsers']:null; $eventMessage = isset($_POST['eventMessage'])?$_POST['eventMessage']:null; $eventSubject = isset($_POST['eventSubject'])?$_POST['eventSubject']:null; +$eventMessageLanguage = isset($_POST['languages'])?$_POST['languages']:null; +$activated = isset($_POST['activated'])?$_POST['activated']:0; if($action == 'modEventType') { if($eventUsers) { @@ -23,39 +27,39 @@ if($action == 'modEventType') { else { $users = array(); } - - eventType_mod($eventId,$users,$eventMessage,$eventSubject); + + save_event_type_message($eventName,$users,$eventMessage,$eventSubject, $eventMessageLanguage, $activated); + // echo mysql_error(); header('location: event_type.php'); exit; } -$ets = eventType_getAll(); +$ets = get_all_event_types(); +$languages = api_get_languages(); $ajaxPath = api_get_path(WEB_CODE_PATH).'inc/ajax/events.ajax.php'; $htmlHeadXtra[] = ''; Display::display_header($tool_name); +$key_lang = get_lang('unsaved_changes'); + +$users = UserManager::get_user_list(); + ?> -
+ + + diff --git a/main/admin/index.php b/main/admin/index.php index d8bdd74e13..ac3320dab0 100644 --- a/main/admin/index.php +++ b/main/admin/index.php @@ -7,7 +7,7 @@ */ // Language files that need to be included. -$language_file = array('admin', 'tracking','coursebackup'); +$language_file = array('admin', 'tracking','coursebackup', 'events'); // Resetting the course id. $cidReset = true; @@ -151,6 +151,10 @@ if (api_is_platform_admin()) { $items[] = array('url'=>'configure_homepage.php', 'label' => get_lang('ConfigureHomePage')); $items[] = array('url'=>'configure_inscription.php', 'label' => get_lang('ConfigureInscription')); $items[] = array('url'=>'statistics/index.php', 'label' => get_lang('Statistics')); + + /* event settings */ + $items[] = array('url'=>'event_type.php', 'label' => get_lang('events_title')); + if (!empty($_configuration['multiple_access_urls'])) { if (api_is_global_platform_admin()) { diff --git a/main/auth/inscription.php b/main/auth/inscription.php index 35d15e8caf..caa267c8b8 100644 --- a/main/auth/inscription.php +++ b/main/auth/inscription.php @@ -15,6 +15,7 @@ if (!empty($_POST['language'])) { //quick hack to adapt the registration form re require_once '../inc/global.inc.php'; require_once api_get_path(CONFIGURATION_PATH).'profile.conf.php'; require_once api_get_path(LIBRARY_PATH).'mail.lib.inc.php'; +require_once api_get_path(LIBRARY_PATH).'events_dispatcher.lib.php'; if (!empty($_SESSION['user_language_choice'])) { $user_selected_language = $_SESSION['user_language_choice']; @@ -504,4 +505,4 @@ if ($form->validate()) { $form->display(); } } -Display :: display_footer(); \ No newline at end of file +Display :: display_footer(); diff --git a/main/inc/ajax/events.ajax.php b/main/inc/ajax/events.ajax.php index 8dbe13cefe..62db49136a 100644 --- a/main/inc/ajax/events.ajax.php +++ b/main/inc/ajax/events.ajax.php @@ -1,34 +1,35 @@ Reworked 2010 * @desc Record result of user when an exercice was done */ -function update_event_exercice($exeid, $exo_id, $score, $weighting,$session_id,$learnpath_id=0, $learnpath_item_id=0, $learnpath_item_view_id = 0, $duration, $question_list, $status = '', $remind_list = array()) { +function update_event_exercice($exeid, $exo_id, $score, $weighting,$session_id,$learnpath_id=0, $learnpath_item_id=0, $learnpath_item_view_id = 0, $duration) { require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php'; - if ($exeid != '') { + if ($exeid!='') { // Validation in case of fraud with actived control time if (!exercise_time_control_is_valid($exo_id)) { $score = 0; } - - /* start_date wouldn't be updated - $start_date_condition = ''; + $now = time(); //Validation in case of wrong start_date if (isset($_SESSION['exercice_start_date'])) { $start_date = $_SESSION['exercice_start_date']; $diff = abs($start_date - $now); if ($diff > 14400) { // 14400 = 4h*60*60 more than 4h of diff $start_date = $now - 1800; // Now - 30min - } - }*/ - - if (!isset($status) || empty($status)) { - $status = ''; - } else { - $status = Database::escape_string($status); + } } $TABLETRACK_EXERCICES = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); - $question_list = array_map('intval', $question_list); - - if (!empty($remind_list)) { - $remind_list = array_map('intval', $remind_list); - $remind_list = array_filter($remind_list); - $remind_list = implode(",", $remind_list); - } else { - $remind_list = ''; - } $sql = "UPDATE $TABLETRACK_EXERCICES SET - exe_exo_id = '".Database::escape_string($exo_id)."', - exe_result = '".Database::escape_string($score)."', - exe_weighting = '".Database::escape_string($weighting)."', - session_id = '".Database::escape_string($session_id)."', - orig_lp_id = '".Database::escape_string($learnpath_id)."', - orig_lp_item_id = '".Database::escape_string($learnpath_item_id)."', - orig_lp_item_view_id = '".Database::escape_string($learnpath_item_view_id)."', - exe_duration = '".Database::escape_string($duration)."', - exe_date = '".api_get_utc_datetime()."', - status = '".$status."', - questions_to_check = '".$remind_list."', - data_tracking = '".implode(',', $question_list)."' + exe_exo_id = '".Database::escape_string($exo_id)."', + exe_result = '".Database::escape_string($score)."', + exe_weighting = '".Database::escape_string($weighting)."', + session_id = '".Database::escape_string($session_id)."', + orig_lp_id = '".Database::escape_string($learnpath_id)."', + orig_lp_item_id = '".Database::escape_string($learnpath_item_id)."', + orig_lp_item_view_id = '".Database::escape_string($learnpath_item_view_id)."', + exe_duration = '".Database::escape_string($duration)."', + exe_date = '".api_get_utc_datetime()."', + status = '', + start_date = '".api_get_utc_datetime($start_date)."' WHERE exe_id = '".Database::escape_string($exeid)."'"; - $res = Database::query($sql); - - if ($debug) error_log('update_event_exercice called '); - if ($debug) error_log("$sql"); + $res = @Database::query($sql); //Deleting control time session track - //exercise_time_control_delete($exo_id); - return $res; - } else { + exercise_time_control_delete($exo_id); + //error_log('update_event_exercice'); + //error_log($sql); + return $res; + + } else return false; - } } /** @@ -398,11 +384,9 @@ function create_event_exercice($exo_id) { $tbl_exe = Database::get_course_table(TABLE_QUIZ_TEST); $now = api_get_utc_datetime(); $uid = api_get_user_id(); - - $course_id = api_get_course_int_id(); // First, check the exercise exists - $sql_exe_id="SELECT exercises.id FROM $tbl_exe as exercises WHERE c_id = $course_id AND exercises.id=$exo_id"; + $sql_exe_id="SELECT exercises.id FROM $tbl_exe as exercises WHERE exercises.id=$exo_id"; $res_exe_id=Database::query($sql_exe_id); if ($res_exe_id === false) { return false; } //sql error if (Database::num_rows($res_exe_id)<1) { return false;} //exe not found @@ -447,70 +431,51 @@ function create_event_exercice($exo_id) { * @param integer Position * @return boolean Result of the insert query */ -function exercise_attempt($score, $answer, $question_id, $exe_id, $position, $exercise_id = 0, $nano = null) { +function exercise_attempt($score, $answer, $quesId, $exeId, $j, $exercise_id = 0) { + global $_configuration; require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php'; - global $debug; - $score = Database::escape_string($score); - $answer = Database::escape_string($answer); - $question_id = Database::escape_string($question_id); - $exe_id = Database::escape_string($exe_id); - $position = Database::escape_string($position); - $now = api_get_utc_datetime(); - $user_id = api_get_user_id(); + $score = Database::escape_string($score); + $answer = Database::escape_string($answer); + $quesId = Database::escape_string($quesId); + $exeId = Database::escape_string($exeId); + $j = Database::escape_string($j); $TBL_TRACK_ATTEMPT = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); - - if ($debug) error_log("----- entering exercise_attempt function ------"); - - if ($debug) error_log("answer: $answer"); - if ($debug) error_log("score: $score"); - if ($debug) error_log("question_id : $question_id"); - if ($debug) error_log("position: $position"); - //Validation in case of fraud with actived control time + //Validation in case of fraud with actived control time + if (!exercise_time_control_is_valid($exercise_id)) { - if ($debug) error_log("exercise_time_control_is_valid is false"); $score = 0; - $answer = 0; + $answer = 0; + $j = 0; } - - + $reallyNow = api_get_utc_datetime(); + $user_id = api_get_user_id(); if (!empty($user_id)) { $user_id = "'".$user_id."'"; } else { // anonymous $user_id = api_get_anonymous_id(); - } - - $file = ''; - if (isset($nano)) { - $file = Database::escape_string(basename($nano->load_filename_if_exists(false))); } - $sql = "INSERT INTO $TBL_TRACK_ATTEMPT (exe_id, user_id, question_id, answer, marks, course_code, session_id, position, tms, filename) + $sql = "INSERT INTO $TBL_TRACK_ATTEMPT (exe_id, user_id, question_id, answer, marks, course_code, session_id, position, tms ) VALUES ( - ".$exe_id.", + ".$exeId.", ".$user_id.", - '".$question_id."', + '".$quesId."', '".$answer."', '".$score."', '".api_get_course_id()."', '".api_get_session_id()."', - '".$position."', - '".$now."', - '".$file."' - )"; - - if ($debug) error_log("Saving question attempt: "); - if ($debug) error_log($sql); - if ($debug) error_log(""); - - if (!empty($question_id) && !empty($exe_id) && !empty($user_id)) { + '".$j."', + '".$reallyNow."' + )"; + //error_log($sql); + if (!empty($quesId) && !empty($exeId) && !empty($user_id)) { $res = Database::query($sql); if (defined('ENABLED_LIVE_EXERCISE_TRACKING')){ $recording_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING); - if ($debug) error_log("Saving e attempt recording "); - $recording_changes = "INSERT INTO $recording_table (exe_id, question_id, marks, insert_date, author, session_id) VALUES ('$exe_id','$question_id','$score','".api_get_utc_datetime()."','', '".api_get_session_id()."') "; + $recording_changes = "INSERT INTO $recording_table (exe_id, question_id, marks, insert_date, author, session_id) VALUES ('$exeId','$quesId','$score','".api_get_utc_datetime()."','', '".api_get_session_id()."') "; Database::query($recording_changes); } return $res; @@ -558,108 +523,51 @@ function exercise_attempt_hotspot($exe_id, $question_id, $answer_id, $correct, $ * @param integer User ID (defaults to null) * @param string Course code (defaults to null) */ -function event_system($event_type, $event_value_type, $event_value, $datetime = null, $user_id = null, $course_code = null) { +function event_system($event_type, $event_value_type, $event_value, $timestamp = null, $user_id=null, $course_code=null) { + global $_configuration; + global $_user; global $TABLETRACK_DEFAULT; - $event_type = Database::escape_string($event_type); - $event_value_type = Database::escape_string($event_value_type); - - //Clean the user_info - if ($event_value_type == LOG_USER_OBJECT) { - if (is_array($event_value)) { - unset($event_value['complete_name']); - unset($event_value['firstName']); - unset($event_value['lastName']); - unset($event_value['avatar_small']); - unset($event_value['avatar']); - unset($event_value['password']); - unset($event_value['lastLogin']); - unset($event_value['picture_uri']); - $event_value = serialize($event_value); - } - } - - $event_value = Database::escape_string($event_value); - $course_info = api_get_course_info($course_code); - - if (!empty($course_info)) { - $course_id = $course_info['real_id']; - $course_code = $course_info['code']; - $course_code = Database::escape_string($course_code); - } else { - $course_id = null; - $course_code = null; - } + $event_type = Database::escape_string($event_type); + $event_value_type = Database::escape_string($event_value_type); + $event_value = Database::escape_string($event_value); + $timestamp = Database::escape_string($timestamp); + $user_id = Database::escape_string($user_id); + $course_code = Database::escape_string($course_code); - if (!isset($datetime)) { - $datetime = api_get_utc_datetime(); + if(!isset($timestamp)) { + $timestamp = api_get_utc_datetime(); } - - $datetime = Database::escape_string($datetime); - - if (!isset($user_id)) { - $user_id = api_get_user_id(); + if(!isset($user_id)) { + $user_id = 0; + } + if(!isset($course_code)) { + $course_code = ''; } - - $user_id = intval($user_id); - $sql = "INSERT INTO $TABLETRACK_DEFAULT (default_user_id, default_cours_code, - c_id, default_date, default_event_type, default_value_type, default_value ) - VALUES('$user_id.', + VALUES + ('$user_id.', '$course_code', - '$course_id', - '$datetime', + '$timestamp', '$event_type', '$event_value_type', '$event_value')"; $res = Database::query($sql); - - //Sending notifications to users @todo check this - $send_event_setting = api_get_setting('activate_send_event_by_mail'); - if (!empty($send_event_setting) && $send_event_setting == 'true') { - global $language_file; - - //prepare message - list($message, $subject) = get_event_message_and_subject($event_type); - $mail_body=$message; - if (is_array($notification_infos)) { - foreach ($notification_infos as $variable => $value) { - $mail_body = str_replace('%'.$variable.'%',$value,$mail_body); - } - } - - //prepare mail common variables - if (empty($subject)) { - $subject = $event_type; - } - $mail_subject = '['.api_get_setting('siteName').'] '.$subject; - $sender_name = api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'), null, PERSON_NAME_EMAIL_ADDRESS); - $email_admin = api_get_setting('emailAdministrator'); - $emailfromaddr = api_get_setting('emailAdministrator'); - $emailfromname = api_get_setting('siteName'); - - //Send mail to all subscribed users - $users_arr = get_users_subscribed_to_event($event_type); - foreach ($users_arr as $user) { - $recipient_name = api_get_person_name($user['firstname'], $user['lastname']); - $email = $user['email']; - @api_mail($recipient_name, $email, $mail_subject, $mail_body, $sender_name, $email_admin); - } - } + return true; } function get_event_message_and_subject($event_name){ $event_name = Database::escape_string($event_name); $sql = 'SELECT m.message, m.subject FROM '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE).' e,' - .Database::get_main_table(TABLE_MAIN_EVENT_TYPE_MESSAGE).' m + .Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' m WHERE m.event_type_id = e.id '. "AND e.name = '$event_name'"; @@ -682,20 +590,29 @@ function get_event_message_and_subject($event_name){ return $ret; } -function eventType_getAll($etId=0) { +/** + * Gets every record from event_type_message + * + * @param type $etId + * @return type + */ +function get_all_event_types($etId=0) +{ + global $event_config; $etId = intval($etId); - $sql = 'SELECT et.id, et.name, et.desc_lang_var, et.name_lang_var, em.message,em.subject FROM '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE).' et - LEFT JOIN '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE_MESSAGE).' em ON em.event_type_id = et.id'; - //WHERE em.language_id = 10 - //'; + $sql = 'SELECT etm.id, event_type_name, activated, language_id, message, subject, dokeos_folder + FROM '.Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' etm + INNER JOIN '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' l + ON etm.language_id = l.id; + '; $eventsTypes = Database::store_result(Database::query($sql),'ASSOC'); // echo $sql; $to_return = array(); foreach ($eventsTypes as $et){ - $et['nameLangVar'] = get_lang($et['name_lang_var']); - $et['descLangVar'] = get_lang($et['desc_lang_var']); + $et['nameLangVar'] = get_lang($event_config[$et["event_type_name"]]["name_lang_var"]); + $et['descLangVar'] = get_lang($event_config[$et["event_type_name"]]["desc_lang_var"]); $to_return[] = $et; } return $to_return; @@ -713,13 +630,13 @@ function get_users_subscribed_to_event($event_name){ return Database::store_result(Database::query($sql),'ASSOC'); } -function eventType_getUsers($etId) { +function get_event_users($event_name) +{ $etId = intval($etId); $sql = 'SELECT user.* FROM '.Database::get_main_table(TABLE_MAIN_USER).' user JOIN '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE_REL_USER).' relUser ON relUser.user_id = user.user_id - JOIN '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE).' et ON relUser.event_type_id = et.id - WHERE et.id = '.$etId.' + WHERE relUser.event_type_name = "'.$event_name.'" '; $eventsTypes = Database::store_result(Database::query($sql),'ASSOC'); @@ -727,32 +644,72 @@ function eventType_getUsers($etId) { return $eventsTypes; } -function eventType_mod($etId,$users,$message,$subject) { +/** + * Save the new message for one event and for one language + * + * @param type $etId + * @param type $users + * @param type $message + * @param type $subject + * @param type $eventMessageLanguage + */ +function save_event_type_message($eventName,$users,$message,$subject, $eventMessageLanguage, $activated) +{ $etId = intval($etId); + // Deletes then re-adds the users linked to the event $sql = 'DELETE FROM '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE_REL_USER).' - WHERE event_type_id = '.$etId.' + WHERE event_type_name = "'.$eventName.'" '; - Database::query($sql); foreach($users as $user) { $sql = 'INSERT INTO '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE_REL_USER).' - (user_id,event_type_id) - VALUES('.intval($user).','.$etId.') + (user_id,event_type_name) + VALUES('.intval($user).',"'. Database::escape_string($eventName).'") '; - Database::query($sql); } - $sql = 'UPDATE '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE_MESSAGE).' - SET message = "'.Database::escape_string($message).'", - subject = "'.Database::escape_string($subject).'" - WHERE event_type_id = '.$etId.' - '; - - - Database::query($sql); + // check if this template in this language already exists or not + $sql = 'SELECT COUNT(id) as total FROM '.Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' + WHERE event_type_name = "'.$eventName.'" AND language_id = (SELECT id FROM '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' + WHERE dokeos_folder = "'.$eventMessageLanguage.'") + '; + $sql = Database::store_result(Database::query($sql),'ASSOC'); + + if($sql[0]["total"] > 0) // if already exists, we update + { + $sql = 'UPDATE '.Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' + SET message = "'.Database::escape_string($message).'", + subject = "'.Database::escape_string($subject).'", + activated = '.$activated.' + WHERE event_type_name = "'.Database::escape_string($eventName).'" AND language_id = (SELECT id FROM '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' + WHERE dokeos_folder = "'.$eventMessageLanguage.'") + '; + Database::query($sql); + } + else // else we create a new record + { + // gets the language_-_id + $lang_id = '(SELECT id FROM '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' + WHERE dokeos_folder = "'.$eventMessageLanguage.'")'; + $lang_id = Database::store_result(Database::query($lang_id),'ASSOC'); + + $sql = 'INSERT INTO '.Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' + (event_type_name, language_id, message, subject, activated) + VALUES("'.Database::escape_string($eventName).'", '.$lang_id[0]["id"].', "'.Database::escape_string($message).'", + "'.Database::escape_string($subject).'", '.$activated.') + '; + Database::query($sql); + } + + // set activated at every save + $sql = 'UPDATE '.Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' + SET activated = '.$activated.' + WHERE event_type_name = "'.Database::escape_string($eventName).'" + '; + Database::query($sql); } @@ -788,19 +745,13 @@ function get_attempt_count($user_id, $exerciseId, $lp_id, $lp_item_id,$lp_item_v $lp_item_id = intval($lp_item_id); $lp_item_view_id= intval($lp_item_view_id); - $sql = "SELECT count(*) as count FROM $stat_table WHERE - exe_exo_id = $exerciseId AND - exe_user_id = $user_id AND - status != 'incomplete' AND - orig_lp_id = $lp_id AND - orig_lp_item_id = $lp_item_id AND - orig_lp_item_view_id = $lp_item_view_id AND - exe_cours_id = '".api_get_course_id()."' AND - session_id = '" . api_get_session_id() . "'"; + $sql = "SELECT count(*) as count FROM $stat_table WHERE exe_exo_id = '$exerciseId' + AND exe_user_id = '$user_id' AND status != 'incomplete' + AND orig_lp_id = $lp_id AND orig_lp_item_id = $lp_item_id AND orig_lp_item_view_id = $lp_item_view_id AND exe_cours_id = '".api_get_course_id()."' AND session_id = '" . api_get_session_id() . "'"; $query = Database::query($sql); if (Database::num_rows($query) > 0 ) { - $attempt = Database :: fetch_array($query,'ASSOC'); + $attempt = Database :: fetch_array($query,'ASSOC'); return $attempt['count']; } else { return 0; @@ -808,43 +759,10 @@ function get_attempt_count($user_id, $exerciseId, $lp_id, $lp_item_id,$lp_item_v } - -function get_attempt_count_not_finished($user_id, $exerciseId, $lp_id, $lp_item_id) { - $stat_table = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); - $user_id = intval($user_id); - $exerciseId = intval($exerciseId); - $lp_id = intval($lp_id); - $lp_item_id = intval($lp_item_id); - $lp_item_view_id= intval($lp_item_view_id); - - $sql = "SELECT count(*) as count FROM $stat_table WHERE - exe_exo_id = $exerciseId AND - exe_user_id = $user_id AND - status != 'incomplete' AND - orig_lp_id = $lp_id AND - orig_lp_item_id = $lp_item_id AND - exe_cours_id = '".api_get_course_id()."' AND - session_id = '" . api_get_session_id() . "'"; - - $query = Database::query($sql); - if (Database::num_rows($query) > 0 ) { - $attempt = Database :: fetch_array($query,'ASSOC'); - return $attempt['count']; - } else { - return 0; - } -} - - - function delete_student_lp_events($user_id, $lp_id, $course, $session_id) { - $lp_view_table = Database::get_course_table(TABLE_LP_VIEW); - $lp_item_view_table = Database::get_course_table(TABLE_LP_ITEM_VIEW); - $course_id = $course['real_id']; - if (empty($course_id)) { - $course_id = api_get_course_int_id(); - } + $lp_view_table = Database::get_course_table(TABLE_LP_VIEW, $course['dbName']); + $lp_item_view_table = Database::get_course_table(TABLE_LP_ITEM_VIEW, $course['dbName']); $track_e_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $track_attempts = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); @@ -855,18 +773,15 @@ function delete_student_lp_events($user_id, $lp_id, $course, $session_id) { $session_id = intval($session_id); //make sure we have the exact lp_view_id - $sqlview = "SELECT id FROM $lp_view_table WHERE c_id = $course_id AND user_id = $user_id AND lp_id = $lp_id AND session_id = $session_id "; + $sqlview = "SELECT id FROM $lp_view_table WHERE user_id = $user_id AND lp_id = $lp_id AND session_id = $session_id "; $resultview = Database::query($sqlview); + $view = Database::fetch_array($resultview, 'ASSOC'); + $lp_view_id = $view['id']; - if (Database::num_rows($sqlview)) { - $view = Database::fetch_array($resultview, 'ASSOC'); - $lp_view_id = $view['id']; - - $sql_delete = "DELETE FROM $lp_item_view_table WHERE c_id = $course_id AND lp_view_id = $lp_view_id "; - $result = Database::query($sql_delete); - } + $sql_delete = "DELETE FROM $lp_item_view_table WHERE lp_view_id = $view_id "; + $result = Database::query($sql_delete); - $sql_delete = "DELETE FROM $lp_view_table WHERE c_id = $course_id AND user_id = $user_id AND lp_id= $lp_id AND session_id= $session_id "; + $sql_delete = "DELETE FROM $lp_view_table WHERE user_id = $user_id AND lp_id= $lp_id AND session_id= $session_id "; $result = Database::query($sql_delete); $select_all_attempts = "SELECT exe_id FROM $track_e_exercises WHERE exe_user_id = $user_id AND session_id= $session_id AND exe_cours_id = '{$course['code']}' AND orig_lp_id = $lp_id"; @@ -917,26 +832,23 @@ function delete_all_incomplete_attempts($user_id, $exercise_id, $course_code, $s * @return array with the results * */ -function get_all_exercise_results($exercise_id, $course_code, $session_id = 0, $load_question_list = true) { +function get_all_exercise_results($exercise_id, $course_code, $session_id = 0) { $TABLETRACK_EXERCICES = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $TBL_TRACK_ATTEMPT = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); $course_code = Database::escape_string($course_code); $exercise_id = intval($exercise_id); $session_id = intval($session_id); - $sql = "SELECT * FROM $TABLETRACK_EXERCICES - WHERE status = '' AND exe_cours_id = '$course_code' AND exe_exo_id = '$exercise_id' AND session_id = $session_id AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id"; + $sql = "SELECT * FROM $TABLETRACK_EXERCICES WHERE status = '' AND exe_cours_id = '$course_code' AND exe_exo_id = '$exercise_id' AND session_id = $session_id AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id"; $res = Database::query($sql); $list = array(); while($row = Database::fetch_array($res,'ASSOC')) { $list[$row['exe_id']] = $row; - if ($load_question_list) { - $sql = "SELECT * FROM $TBL_TRACK_ATTEMPT WHERE exe_id = {$row['exe_id']}"; - $res_question = Database::query($sql); - while($row_q = Database::fetch_array($res_question,'ASSOC')) { - $list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q; - } - } + $sql = "SELECT * FROM $TBL_TRACK_ATTEMPT WHERE exe_id = {$row['exe_id']}"; + $res_question = Database::query($sql); + while($row_q = Database::fetch_array($res_question,'ASSOC')) { + $list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q; + } } return $list; } @@ -944,6 +856,7 @@ function get_all_exercise_results($exercise_id, $course_code, $session_id = 0, $ /** * Gets all exercise results (NO Exercises in LPs ) from a given exercise id, course, session + * @param int exercise id * @param string course code * @param int session id * @return array with the results @@ -959,7 +872,7 @@ function get_all_exercise_results_by_course($course_code, $session_id = 0, $get_ if ($get_count) { $select = 'count(*) as count'; } - $sql = "SELECT $select FROM $table_track_exercises WHERE status = '' AND exe_cours_id = '$course_code' AND session_id = $session_id AND orig_lp_id = 0 AND orig_lp_item_id = 0 ORDER BY exe_id"; + $sql = "SELECT $select FROM $table_track_exercises WHERE status = '' AND exe_cours_id = '$course_code' AND session_id = $session_id AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id"; $res = Database::query($sql); if ($get_count) { $row = Database::fetch_array($res,'ASSOC'); @@ -978,131 +891,37 @@ function get_all_exercise_results_by_course($course_code, $session_id = 0, $get_ } } -/** -* Gets all exercise results (NO Exercises in LPs) from a given exercise id, course, session -* @param int exercise id -* @param string course code -* @param int session id -* @return array with the results -* -*/ -function get_all_exercise_results_by_user($user_id, $course_code, $session_id = 0) { - $table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); - $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); - $course_code = Database::escape_string($course_code); - $exercise_id = intval($exercise_id); - $session_id = intval($session_id); - $user_id = intval($user_id); - - $sql = "SELECT * FROM $table_track_exercises WHERE status = '' AND exe_user_id = $user_id AND exe_cours_id = '$course_code' AND session_id = $session_id AND orig_lp_id = 0 AND orig_lp_item_id = 0 ORDER by exe_id"; - - $res = Database::query($sql); - $list = array(); - while($row = Database::fetch_array($res,'ASSOC')) { - $list[$row['exe_id']] = $row; - $sql = "SELECT * FROM $table_track_attempt WHERE exe_id = {$row['exe_id']}"; - $res_question = Database::query($sql); - while($row_q = Database::fetch_array($res_question,'ASSOC')) { - $list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q; - } - } - //echo ''; print_r($list);
- return $list;
-}
-
-/**
-* Gets exercise results (NO Exercises in LPs) from a given exercise id, course, session
-* @param int exercise id
-* @param string course code
-* @param int session id
-* @return array with the results
-*
-*/
-function get_exercise_results_by_attempt($exe_id) {
- $table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
- $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
- $table_track_attempt_recording = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING);
- $exe_id = intval($exe_id);
-
- $sql = "SELECT * FROM $table_track_exercises WHERE status = '' AND exe_id = $exe_id";
- $res = Database::query($sql);
- $list = array();
- if (Database::num_rows($res)) {
- $row = Database::fetch_array($res,'ASSOC');
-
- //Checking if this attempt was revised by a teacher
- $sql_revised = 'SELECT exe_id FROM ' . $table_track_attempt_recording . ' WHERE author != "" AND exe_id = '.$exe_id.' LIMIT 1';
- $res_revised = Database::query($sql_revised);
- $row['attempt_revised'] = 0;
- if (Database::num_rows($res_revised) > 0) {
- $row['attempt_revised'] = 1;
- }
- $list[$exe_id] = $row;
- $sql = "SELECT * FROM $table_track_attempt WHERE exe_id = $exe_id ORDER BY tms ASC";
- $res_question = Database::query($sql);
- while ($row_q = Database::fetch_array($res_question,'ASSOC')) {
- $list[$exe_id]['question_list'][$row_q['question_id']] = $row_q;
- }
- }
- // echo ''; print_r($list); echo "
";
- return $list;
-}
/**
- * Gets exercise results (NO Exercises in LPs) from a given user, exercise id, course, session, lp_id, lp_item_id
- * @param int user id
+ * Gets all exercise results (NO Exercises in LPs) from a given exercise id, course, session
* @param int exercise id
* @param string course code
* @param int session id
- * @param int lp id
- * @param int lp item id
- * @param string order asc or desc
* @return array with the results
*
*/
-function get_exercise_results_by_user($user_id, $exercise_id, $course_code, $session_id = 0, $lp_id = 0, $lp_item_id = 0, $order = null) {
+function get_all_exercise_results_by_user($user_id, $exercise_id, $course_code, $session_id = 0) {
$table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
$table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
- $table_track_attempt_recording = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING);
- $course_code = Database::escape_string($course_code);
- $exercise_id = intval($exercise_id);
- $session_id = intval($session_id);
- $user_id = intval($user_id);
- $lp_id = intval($lp_id);
- $lp_item_id = intval($lp_item_id);
-
- if (!in_array(strtolower($order), array('asc', 'desc'))) {
- $order = 'asc';
- }
+ $course_code = Database::escape_string($course_code);
+ $exercise_id = intval($exercise_id);
+ $session_id = intval($session_id);
+ $user_id = intval($user_id);
- $sql = "SELECT * FROM $table_track_exercises
- WHERE status = '' AND
- exe_user_id = $user_id AND
- exe_cours_id = '$course_code' AND
- exe_exo_id = $exercise_id AND
- session_id = $session_id AND
- orig_lp_id = $lp_id AND
- orig_lp_item_id = $lp_item_id
- ORDER by exe_id $order ";
+ $sql = "SELECT * FROM $table_track_exercises WHERE status = '' AND exe_user_id = $user_id AND exe_cours_id = '$course_code' AND exe_exo_id = $exercise_id AND session_id = $session_id AND orig_lp_id = 0 AND orig_lp_item_id = 0 ORDER by exe_id";
$res = Database::query($sql);
$list = array();
while($row = Database::fetch_array($res,'ASSOC')) {
- //Checking if this attempt was revised by a teacher
- $sql_revised = 'SELECT exe_id FROM ' . $table_track_attempt_recording . ' WHERE author != "" AND exe_id = '.$row['exe_id'].' LIMIT 1';
- $res_revised = Database::query($sql_revised);
- $row['attempt_revised'] = 0;
- if (Database::num_rows($res_revised) > 0) {
- $row['attempt_revised'] = 1;
- }
$list[$row['exe_id']] = $row;
$sql = "SELECT * FROM $table_track_attempt WHERE exe_id = {$row['exe_id']}";
$res_question = Database::query($sql);
- while ($row_q = Database::fetch_array($res_question,'ASSOC')) {
+ while($row_q = Database::fetch_array($res_question,'ASSOC')) {
$list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q;
}
- }
+ }
+ //echo ''; print_r($list);
return $list;
}
@@ -1124,8 +943,8 @@ function count_exercise_attempts_by_user($user_id, $exercise_id, $course_code, $
$session_id = intval($session_id);
$user_id = intval($user_id);
- $sql = "SELECT count(*) as count FROM $TABLETRACK_EXERCICES
- WHERE status = '' AND exe_user_id = '$user_id' AND exe_cours_id = '$course_code' AND exe_exo_id = '$exercise_id' AND session_id = $session_id AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id";
+ $sql = "SELECT count(*) as count FROM $TABLETRACK_EXERCICES WHERE status = '' AND exe_user_id = '$user_id' AND exe_cours_id = '$course_code' AND exe_exo_id = '$exercise_id' AND session_id = $session_id AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id";
+
$res = Database::query($sql);
$result = 0;
if (Database::num_rows($res) > 0 ) {
@@ -1141,7 +960,6 @@ function count_exercise_attempts_by_user($user_id, $exercise_id, $course_code, $
* @param string course code
* @param int session id
* @return array with the results
- * @todo rename this function
*
*/
function get_best_exercise_results_by_user($exercise_id, $course_code, $session_id = 0) {
@@ -1162,7 +980,11 @@ function get_best_exercise_results_by_user($exercise_id, $course_code, $session_
while($row_q = Database::fetch_array($res_question,'ASSOC')) {
$list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q;
}
- }
+ }
+ /*
+ echo count($list);
+ echo '
';
+ echo ''; print_r($list);*/
//Getting the best results of every student
$best_score_return = array();
@@ -1173,80 +995,13 @@ function get_best_exercise_results_by_user($exercise_id, $course_code, $session_
if ($current_best_score[$user_id] > $best_score_return[$user_id]['exe_result']) {
$best_score_return[$user_id] = $student_result;
}
- }
+ }
+ /*
+ echo count($best_score_return);
+ echo ''; print_r($best_score_return);*/
return $best_score_return;
}
-function get_best_attempt_exercise_results_per_user($user_id, $exercise_id, $course_code, $session_id = 0) {
- $table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
- $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
- $course_code = Database::escape_string($course_code);
- $exercise_id = intval($exercise_id);
- $session_id = intval($session_id);
- $user_id = intval($user_id);
-
- $sql = "SELECT * FROM $table_track_exercises
- WHERE status = '' AND
- exe_cours_id = '$course_code' AND
- exe_exo_id = '$exercise_id' AND
- session_id = $session_id AND
- exe_user_id = $user_id AND
- orig_lp_id =0 AND
- orig_lp_item_id = 0
- ORDER BY exe_id";
-
- $res = Database::query($sql);
- $list = array();
- while($row = Database::fetch_array($res,'ASSOC')) {
- $list[$row['exe_id']] = $row; /*
- $sql = "SELECT * FROM $table_track_attempt WHERE exe_id = {$row['exe_id']}";
- $res_question = Database::query($sql);
- while($row_q = Database::fetch_array($res_question,'ASSOC')) {
- $list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q;
- } */
- }
- //Getting the best results of every student
- $best_score_return = array();
- $best_score_return['exe_result'] = 0;
-
- foreach($list as $result) {
- $current_best_score = $result;
- if ($current_best_score['exe_result'] > $best_score_return['exe_result']) {
- $best_score_return = $result;
- }
- }
- if (!isset($best_score_return['exe_weighting'])) {
- $best_score_return = array();
- }
- return $best_score_return;
-}
-
-
-
-function count_exercise_result_not_validated($exercise_id, $course_code, $session_id = 0) {
- $table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
- $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING);
- $course_code = Database::escape_string($course_code);
- $session_id = intval($session_id);
- $exercise_id = intval($exercise_id);
-
- $status = Database::escape_string($status);
-
- $sql = "SELECT count(e.exe_id) as count FROM $table_track_exercises e LEFT JOIN $table_track_attempt a ON e.exe_id = a.exe_id
- WHERE exe_exo_id = $exercise_id AND
- exe_cours_id = '$course_code' AND
- e.session_id = $session_id AND
- orig_lp_id = 0 AND
- marks IS NULL AND
- status = '' AND
- orig_lp_item_id = 0 ORDER BY e.exe_id";
- $res = Database::query($sql);
- $row = Database::fetch_array($res,'ASSOC');
-
- return $row['count'];
-
-}
-
/**
* Gets all exercise BEST results attempts (NO Exercises in LPs ) from a given exercise id, course, session per user
@@ -1262,7 +1017,7 @@ function get_count_exercises_attempted_by_course($course_code, $session_id = 0)
$course_code = Database::escape_string($course_code);
$session_id = intval($session_id);
- $sql = "SELECT DISTINCT exe_exo_id, exe_user_id FROM $table_track_exercises WHERE status = '' AND exe_cours_id = '$course_code' AND session_id = $session_id AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id";
+ $sql = "SELECT DISTINCT exe_exo_id, exe_user_id FROM $table_track_exercises WHERE status = '' AND exe_cours_id = '$course_code' AND session_id = $session_id AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id";
$res = Database::query($sql);
$count = 0;
if (Database::num_rows($res) > 0) {
@@ -1284,7 +1039,8 @@ function get_all_exercise_event_from_lp($exercise_id, $course_code, $session_id
$table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
$course_code = Database::escape_string($course_code);
$exercise_id = intval($exercise_id);
- $session_id = intval($session_id);
+ $session_id = intval($session_id);
+
$sql = "SELECT * FROM $table_track_exercises WHERE status = '' AND exe_cours_id = '$course_code' AND exe_exo_id = '$exercise_id' AND session_id = $session_id AND orig_lp_id !=0 AND orig_lp_item_id != 0";
@@ -1300,13 +1056,34 @@ function get_all_exercise_event_from_lp($exercise_id, $course_code, $session_id
}
return $list;
}
+/*
+function get_all_exercise_event_from_lp($exercise_id, $course_db, $session_id ) {
+ $lp_item_table = Database :: get_course_table(TABLE_LP_ITEM,$course_db);
+ $lp_item_view_table = Database :: get_course_table(TABLE_LP_ITEM_VIEW,$course_db);
+ $lp_view_table = Database :: get_course_table(TABLE_LP_VIEW,$course_db);
+
+ $exercise_id = intval($exercise_id);
+ $session_id = intval($session_id);
+
+ $sql = "SELECT title, user_id, score , iv.max_score, status, session_id
+ FROM $lp_item_table as i INNER JOIN $lp_item_view_table iv ON (i.id = iv.lp_item_id ) INNER JOIN $lp_view_table v ON iv.lp_view_id = v.id
+ WHERE path = $exercise_id AND status ='completed' AND session_id = $session_id";
+ $res = Database::query($sql);
+ $list = array();
+
+ while($row = Database::fetch_array($res,'ASSOC')) {
+ $list[$row['exe_id']]['question_list'][$row['question_id']] = $row;
+ }
+ //echo ''; print_r($list);
+ return $list;
+}*/
+
-function get_all_exercises_from_lp($lp_id, $course_id) {
- $lp_item_table = Database :: get_course_table(TABLE_LP_ITEM);
- $course_id = intval($course_id);
+function get_all_exercises_from_lp($lp_id, $course_db) {
+ $lp_item_table = Database :: get_course_table(TABLE_LP_ITEM,$course_db);
$lp_id = intval($lp_id);
- $sql = "SELECT * FROM $lp_item_table WHERE c_id = $course_id AND lp_id = '".$lp_id."' ORDER BY parent_item_id, display_order";
+ $sql = "SELECT * FROM $lp_item_table WHERE lp_id = '".$lp_id."' ORDER BY parent_item_id, display_order";
$res = Database::query($sql);
$my_exercise_list = array();
while($row = Database::fetch_array($res,'ASSOC')) {
@@ -1333,66 +1110,3 @@ function get_comments($id,$question_id) {
return $comm;
}
-
-function get_all_exercise_event_by_exe_id($exe_id) {
- $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
- $exe_id = intval($exe_id);
- $list = array();
-
- $sql = "SELECT * FROM $table_track_attempt WHERE exe_id = $exe_id ORDER BY position";
- $res_question = Database::query($sql);
- if (Database::num_rows($res_question))
- while($row_q = Database::fetch_array($res_question,'ASSOC')) {
- $list[$row_q['question_id']][] = $row_q;
- }
- return $list;
-}
-
-
-function delete_attempt($exe_id, $user_id, $course_code, $session_id, $question_id) {
- $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
-
- $exe_id = intval($exe_id);
- $user_id = intval($user_id);
- $course_code = Database::escape_string($course_code);
- $session_id = intval($session_id);
- $question_id = intval($question_id);
-
- $sql = "DELETE FROM $table_track_attempt WHERE exe_id = $exe_id AND user_id = $user_id AND course_code = '$course_code' AND session_id = $session_id AND question_id = $question_id ";
- Database::query($sql);
-}
-
-function delete_attempt_hotspot($exe_id, $user_id, $course_code, $question_id) {
- $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_HOTSPOT);
-
- $exe_id = intval($exe_id);
- $user_id = intval($user_id);
- $course_code = Database::escape_string($course_code);
- //$session_id = intval($session_id);
- $question_id = intval($question_id);
-
- $sql = "DELETE FROM $table_track_attempt WHERE hotspot_exe_id = $exe_id AND hotspot_user_id = $user_id AND hotspot_course_code = '$course_code' AND hotspot_question_id = $question_id ";
- Database::query($sql);
-}
-
-/**
- * User logs in for the first time to a course
- */
-function event_course_login($course_code, $user_id, $session_id) {
- global $course_tracking_table;
-
- //@todo use api_get_utc_datetime
- $time = api_get_datetime();
-
- $course_code = Database::escape_string($course_code);
- $user_id = Database::escape_string($user_id);
- $session_id = Database::escape_string($session_id);
-
- $sql = "INSERT INTO $course_tracking_table(course_code, user_id, login_course_date, logout_course_date, counter, session_id)
- VALUES('".$course_code."', '".$user_id."', '$time', '$time', '1', '".$session_id."')";
- Database::query($sql);
-
-
- //Course catalog stats modifications see #4191
- CourseManager::update_course_ranking(null, null, null, null, true, false);
-}
diff --git a/main/inc/lib/events_dispatcher.lib.php b/main/inc/lib/events_dispatcher.lib.php
new file mode 100644
index 0000000000..35e8b36b2b
--- /dev/null
+++ b/main/inc/lib/events_dispatcher.lib.php
@@ -0,0 +1,48 @@
+
diff --git a/main/inc/lib/events_email.lib.php b/main/inc/lib/events_email.lib.php
new file mode 100644
index 0000000000..3c96abae4c
--- /dev/null
+++ b/main/inc/lib/events_email.lib.php
@@ -0,0 +1,252 @@
+", $message);
+ @api_mail_html($recipient_name, $user_info["mail"], $subject, $message, $sender_name, $email_admin, null, array($values['certificate_pdf_file']));
+ }
+ else
+ {
+ @api_mail($recipient_name, $user_info["mail"], $subject, $message, $sender_name, $email_admin);
+ }
+
+ // If the mail only need to be send once (we know that thanks to the events.conf, we log it in the table
+ if($event_config[$event_name]["sending_mail_once"])
+ {
+ $sql = 'INSERT INTO ' . Database::get_main_table(TABLE_EVENT_SENT) . '
+ (user_from, user_to, event_type_name)
+ VALUES ('.$event_data["user_id"].', '.$id.' ,"'.Database::escape_string($event_name).'");
+ ';
+ Database::query($sql);
+ }
+ }
+ }
+
+ // Second, we send to people linked to the event ========================================================
+ // So, we get everyone
+ $sql = 'SELECT u.user_id, u.language, u.email, u.firstname, u.lastname FROM ' . Database::get_main_table(TABLE_MAIN_EVENT_TYPE_REL_USER) . ' ue
+ INNER JOIN '.Database::get_main_table(TABLE_MAIN_USER).' u ON u.user_id = ue.user_id
+ WHERE event_type_name = "' . $event_name . '"';
+ $result = Database::store_result(Database::query($sql), 'ASSOC');
+
+ foreach ($result as $key => $value) // for each of the linked users
+ {
+ // we get the language
+ if ($event_data["prior_lang"] != null) // if $lang is not null, we use that lang
+ {
+ $language = $event_data["prior_lang"];
+ }
+ else // else we get the user's lang
+ {
+ $sql = 'SELECT language FROM '.Database::get_main_table(TABLE_MAIN_USER).'
+ where user_id = '.$value["user_id"].' ';
+ $result = Database::store_result(Database::query($sql), 'ASSOC');
+
+ $language = $result[0]["language"];
+ }
+
+ // we get the message in the correct language (or in english if doesn't exist)
+ $result = self::getMessage($event_name, $language);
+ $message = "";
+ $subject = "";
+ self::getCorrectMessage($message, $subject, $language, $result);
+
+ // replace the keycodes used in the message
+ self::formatMessage($message, $subject, $event_config, $event_name, $event_data);
+
+ // we send the mail
+ $recipient_name = api_get_person_name($value['firstname'], $value['lastname']);
+
+ @api_mail($recipient_name, $value["email"], $subject, $message, $sender_name, $email_admin);
+
+ // If the mail only need to be send once (we know that thanks to the events.conf, we log it in the table
+ if($event_config[$event_name]["sending_mail_once"])
+ {
+ $sql = 'INSERT INTO ' . Database::get_main_table(TABLE_EVENT_SENT) . '
+ (user_from, user_to, event_type_name)
+ VALUES ('.$event_data["user_id"].', '.$value["user_id"].' , "'.Database::escape_string($event_name).'");
+ ';
+ Database::query($sql);
+ }
+ }
+ }
+
+ /**
+ * Checks if a message in a language exists, if the event is activated
+ * and if "manage event" is checked in admin panel.
+ * If yes to three, we can use this class, else we still use api_mail.
+ */
+ public static function check_if_using_class($event_name)
+ {
+ if(api_get_setting('activate_email_template') === 'false')
+ {
+ return false;
+ }
+
+ $sql = 'SELECT COUNT(*) as total FROM ' . Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE) . ' em
+ INNER JOIN ' . Database::get_main_table(TABLE_MAIN_LANGUAGE) . ' l on em.language_id = l.id
+ WHERE em.event_type_name = "' . $event_name . '" and l.dokeos_folder = "english" and em.activated = 1
+ ';
+
+ $exists = Database::store_result(Database::query($sql), 'ASSOC');
+
+ if ($exists[0]["total"])
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Get the record containing the good message and subject
+ *
+ * @param type $event_name
+ * @param type $language
+ * @return type
+ */
+ private static function getMessage($event_name, $language)
+ {
+ $sql = 'SELECT message, subject, l.dokeos_folder FROM ' . Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE) . ' em
+ INNER JOIN ' . Database::get_main_table(TABLE_MAIN_LANGUAGE) . ' l on em.language_id = l.id
+ WHERE em.event_type_name = "' . $event_name . '" and (l.dokeos_folder = "' . $language . '" OR l.dokeos_folder = "english") and em.message <> ""
+ ';
+ return Database::store_result(Database::query($sql), 'ASSOC');
+ }
+
+ /**
+ * Get the correct message, meaning in the specified language or in english if previous one doesn't exist
+ *
+ * @param type $message
+ * @param type $subject
+ * @param type $language
+ * @param type $result
+ */
+ private static function getCorrectMessage(&$message, &$subject, $language, $result)
+ {
+ foreach ($result as $msg)
+ {
+ if ($msg["dokeos_folder"] == $language)
+ {
+ $message = $msg["message"];
+ $subject = $msg["subject"];
+ break;
+ }
+ else if ($msg["dokeos_folder"] == "english")
+ {
+ $message = $msg["message"];
+ $subject = $msg["subject"];
+ }
+ }
+ }
+
+ /**
+ * Replaces the %key% by the good values
+ *
+ * @param type $message
+ * @param type $subject
+ * @param type $event_config
+ * @param type $event_name
+ */
+ private static function formatMessage(&$message, &$subject, $event_config, $event_name, &$event_data)
+ {
+ foreach ($event_config[$event_name]["available_keyvars"] as $key => $word)
+ {
+ $message = str_replace('((' . $key . '))', $event_data[$word], $message);
+ $subject = str_replace('((' . $key . '))', $event_data[$word], $subject);
+ }
+ }
+
+}
+
+?>
diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php
index ca1dfbce7d..0adba99fcc 100644
--- a/main/inc/lib/usermanager.lib.php
+++ b/main/inc/lib/usermanager.lib.php
@@ -164,8 +164,28 @@ class UserManager {
} else {
$emailbody = get_lang('Dear')." ".stripslashes(api_get_person_name($firstName, $lastName)).",\n\n".get_lang('YouAreReg')." ".api_get_setting('siteName') ." ".get_lang('WithTheFollowingSettings')."\n\n".get_lang('Username')." : ". $loginName ."\n". get_lang('Pass')." : ".stripslashes($original_password)."\n\n" .get_lang('Address') ." ". api_get_setting('siteName') ." ". get_lang('Is') ." : ". $_configuration['root_web'] ."\n\n". get_lang('Problem'). "\n\n". get_lang('Formula').",\n\n".api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'))."\n". get_lang('Manager'). " ".api_get_setting('siteName')."\nT. ".api_get_setting('administratorTelephone')."\n" .get_lang('Email') ." : ".api_get_setting('emailAdministrator');
}
- @api_mail_html($recipient_name, $email, $emailsubject, $emailbody, $sender_name, $email_admin);
- }
+
+
+ /* MANAGE EVENT WITH MAIL */
+ if(EventsMail::check_if_using_class('user_registration'))
+ {
+ $values["about_user"] = $return;
+ $values["portal"] = $_configuration['root_web'];
+ $values["password"] = $original_password;
+
+ $values["send_to"] = array($return);
+ $values["prior_lang"] = null;
+
+ EventsDispatcher::events('user_registration', $values);
+ }
+ else
+ {
+ @api_mail_html($recipient_name, $email, $emailsubject, $emailbody, $sender_name, $email_admin);
+ }
+
+ }
+ /* ENDS MANAGE EVENT WITH MAIL */
+
// Add event to system log
$user_id_manager = api_get_user_id();
diff --git a/main/lang/english/events.inc.php b/main/lang/english/events.inc.php
new file mode 100644
index 0000000000..59c67493ea
--- /dev/null
+++ b/main/lang/english/events.inc.php
@@ -0,0 +1,28 @@
+
diff --git a/main/lang/french/events.inc.php b/main/lang/french/events.inc.php
index abe2f22c0b..4a92f8c5b9 100644
--- a/main/lang/french/events.inc.php
+++ b/main/lang/french/events.inc.php
@@ -16,7 +16,15 @@ $sessionDeletedTitle ='Suppression d\'une session';
$sessionCategoryCreatedTitle = 'Création d\'une catégorie de session';
$sessionCategoryDeletedTitle = 'Suppression d\'une catégorie de session';
$settingsChangedTitle = 'Changement d\'un paramètre de configuration';
-$userSubscribedTitle = 'Inscription d\'un utilisateur';
+$userRegistrationTitle = 'Inscription d\'un utilisateur';
$userUnsubscribedTitle = 'Désinscription d\'un utilisateur';
+$allCoursesPassedTitle = 'Huit cours réussis';
+$notifManagerTitle = 'Envoi du mail au n+1';
+$subscribeUserToCourseTitle = 'Inscription de l\'utilisateur à un cours';
+
+$availables_keys = 'Clés disponibles. Utilisez-les entre (( )).';
+$checkbox_activated = 'Activé ?';
+
+$unsaved_changes = 'Voulez-vous abandonner les changements que vous avez faits ?';
?>