require_once '../newscorm/learnpath.class.php'; require_once '../newscorm/learnpathItem.class.php'; require_once '../newscorm/learnpathList.class.php'; require_once '../newscorm/scorm.class.php'; require_once '../newscorm/scormItem.class.php'; require_once api_get_path(LIBRARY_PATH) . 'tracking.lib.php'; require_once api_get_path(LIBRARY_PATH) . 'course.lib.php'; require_once api_get_path(LIBRARY_PATH) . 'usermanager.lib.php'; require_once api_get_path(LIBRARY_PATH) . 'export.lib.inc.php'; require_once api_get_path(LIBRARY_PATH) . 'formvalidator/FormValidator.class.php'; require_once '../scorm_cloud/scorm_cloud.lib.php'; if (isset($_GET['cidReq'])) { $cidReq = Security::remove_XSS($_GET['cidReq']); } $lp_id = intval($_GET['lp_id']); $lp_table = Database::get_course_table_from_code($cidReq, 'lp'); $sql = "SELECT name FROM {$lp_table} WHERE id = {$lp_id}"; $name_res = api_sql_query($sql, __FILE__, __LINE__); $row = Database::fetch_array($name_res); $title = $row['name']; $tbl_scorm_cloud = Database::get_main_table('scorm_cloud'); $sql_cloud_get_course = "Select cloud_course_id from {$tbl_scorm_cloud} " . "WHERE course_code = '{$cidReq}' AND lp_id = {$lp_id} "; $res = api_sql_query($sql_cloud_get_course, __FILE__, __LINE__); if (Database::num_rows($res) > 0) { $row = Database::fetch_array($res); $cloud_courseId = $row['cloud_course_id']; } $nameTools = $title; $ScormService = cloud_getScormEngineService(); $rptService = $ScormService->getReportingService(); $reportageAuth = $rptService->GetReportageAuth('NONAV', false);
function cloud_updateLMSRegistrationResults($regid, $lp_id) { $ScormService = cloud_getScormEngineService(); $regService = $ScormService->getRegistrationService(); $resultXmlString = $regService->GetRegistrationResult($regid, 2, 0); $resXml = simplexml_load_string($resultXmlString); //echo 'xml: '.$resultXmlString.':endXml<br/>'; $course_id = substr($regid, 0, strpos($regid, '_')); $lp_view_id = substr($regid, strpos($regid, '_') + 1); $activity = $resXml->registrationreport->activity[0]; $report = $root_activities[0]; $act_ref = $activity["id"]; $act_title = $activity->title; //required type in order to report score $act_type = 'sco'; $act_start_time = cloud_getCourseLaunchTime($regid); $lp_view_table = Database::get_course_table_from_code($course_id, TABLE_LP_VIEW); $sql = "SELECT user_id FROM {$lp_view_table} WHERE id = {$lp_view_id}"; $view_res = api_sql_query($sql, __FILE__, __LINE__); $userRow = Database::fetch_array($view_res); $user_id = $userRow['user_id']; $act_total_time = cloud_getTotalCourseTime($course_id, $lp_id, $user_id); //echo $act_total_time.'<br/>'; $act_score = cloud_getCourseScore($course_id, $lp_id, $user_id); //get the status $satisfied = $activity->success; $completed = $activity->complete; if ($satisfied == 'true') { $act_status = 'passed'; } elseif ($completed == 'true' && $satisfied == 'false') { $act_status = 'failed'; } else { $act_status = 'incomplete'; } //First add an item if necessary, otherwise get the id $table_lp_item = Database::get_course_table_from_code($course_id, TABLE_LP_ITEM); $sql_check_lp_item = "Select count(*) AS num_items,id FROM {$table_lp_item} WHERE lp_id = {$lp_id}"; $result = api_sql_query($sql_check_lp_item, __FILE__, __LINE__); $num_row = Database::fetch_array($result); //echo $num_row['num_items']; if ($num_row['num_items'] == 0) { $sql_item = "INSERT INTO {$table_lp_item} (lp_id,item_type,ref,title,path,parent_item_id) " . "VALUES({$lp_id},'{$act_type}','{$act_ref}','{$act_title}','',0)"; //echo $sql_item.'<br>'; $res_ins = api_sql_query($sql_item, __FILE__, __LINE__); // $lp_item_id = Database :: get_last_insert_id(); } else { $lp_item_id = $num_row['id']; } $table_lp_item_view = Database::get_course_table_from_code($course_id, TABLE_LP_ITEM_VIEW); $sql_check_lp_item_view = "Select count(*)AS num_items FROM {$table_lp_item_view} WHERE lp_view_id = {$lp_view_id}"; $result_view = api_sql_query($sql_check_lp_item_view, __FILE__, __LINE__); $num_row_view = Database::fetch_array($result_view); if ($num_row_view['num_items'] == 0) { $sql_item_view = "INSERT INTO {$table_lp_item_view} (lp_item_id,lp_view_id,start_time,total_time,score,status) " . "VALUES({$lp_item_id},{$lp_view_id},{$act_start_time},{$act_total_time},{$act_score},'{$act_status}')"; } else { $sql_item_view = "Update {$table_lp_item_view} " . "SET total_time = {$act_total_time}, " . "start_time = {$act_start_time}, " . " score = {$act_score}," . " status = '{$act_status}'" . " WHERE lp_item_id = {$lp_item_id} " . "AND lp_view_id = {$lp_view_id}"; } //echo $sql_item_view.'<br>'; $res_ins = api_sql_query($sql_item_view, __FILE__, __LINE__); $scos = $resXml->xpath('//activity[not(fn:exists(children/activity))]'); //echo $scos[0]->title; $totScos = count($scos); $totCompl = 0; foreach ($scos as $sco) { if ($sco->completed == 'true') { $totCompl++; } } $progress = round($totCompl / $totScos * 100, 2); //echo $progress; $table_lp_view = Database::get_course_table_from_code($course_id, TABLE_LP_VIEW); $sql_update_lp_view = "UPDATE {$table_lp_view} SET progress={$progress} WHERE id={$lp_view_id}"; $res_ins = api_sql_query($sql_update_lp_view, __FILE__, __LINE__); }