示例#1
0
             $lessonUser = EfrontUserFactory::factory($editedUser->user['login'], false, 'student');
             $lessonUser->completeLesson($currentLesson->lesson['id'], $form->exportValue('score'), $form->exportValue('comments'));
         } else {
             eF_updateTableData("users_to_lessons", array('completed' => 0, 'score' => 0, 'to_timestamp' => null), "users_LOGIN = '******'login'] . "' and lessons_ID=" . $currentLesson->lesson['id']);
             //		        $cacheKey = "user_lesson_status:lesson:".$currentLesson -> lesson['id']."user:"******"tests t, content c", "t.id, c.name", "c.id=t.content_ID and t.active=1 and t.publish=1 and c.ctg_type='tests' and c.lessons_ID=" . $currentLesson->lesson['id']);
 $testNames = array_combine($testNames['id'], $testNames['name']);
 foreach ($doneTests[$_GET['edit_user']] as $key => $value) {
     if (in_array($key, array_keys($testNames))) {
         $userStats['done_tests'][$key] = array('name' => $testNames[$key], 'score' => $value['average_score'], 'last_test_id' => $value['last_test_id'], 'active_test_id' => $value['active_test_id'], 'last_score' => $value['scores'][$value['last_test_id']], 'active_score' => $value['active_score'], 'times_done' => $value['times_done'], 'content_ID' => $value[$value['last_test_id']]['content_ID']);
     }
 }
 foreach ($scormDoneTests as $key => $value) {
     $userStats['scorm_done_tests'][$key] = array('name' => $value['name'], 'score' => $value['score'], 'content_ID' => $key);
示例#2
0
 /**
  * Get user done tests in lesson
  *
  * This function finds the done tests of the specified users.
  * If $users is not specified, then information on all users and/or lessons
  * is calculated.
  * <br/>Example:
  * <code>
  * EfrontStats :: getStudentsDoneTests(3, 'jdoe');                          //Get statistics for user jdoe in lesson 3
  * EfrontStats :: getStudentsDoneTests(3, array('jdoe', 'george'));         //Get statistics for users george and jdoe in lesson 3
  * EfrontStats :: getStudentsDoneTests(3);                                  //Get statistics for all users in lesson 3
  * </code>
  * The resulting array is of the form array(login => array(content id => array(results))):
  * <code>
  * Array
  * (
  *     [jdoe] => Array
  *         (
  *             [30] => Array
  *                 (
  *                     [lessons_ID] => 78
  *                     [name] => Maya History Test
  *                     [content_ID] => 30
  *                     [done_tests_ID] => 1
  *                     [tests_ID] => 2
  *                     [score] => 1
  *                     [comments] =>
  *                     [users_LOGIN] => jdoe
  *                 )
  *             [2] => Array
  *                 (
  *                     [lessons_ID] => 77
  *                     [name] => General concepts test
  *                     [content_ID] => 2
  *                     [done_tests_ID] => 2
  *                     [tests_ID] => 1
  *                     [score] => 0.333333
  *                     [comments] =>
  *                     [users_LOGIN] => jdoe
  *                 )
  *         )
  *     [george] => Array
  *         (
  *             [2] => Array
  *                 (
  *                     [lessons_ID] => 77
  *                     [name] => General concepts test
  *                     [content_ID] => 2
  *                     [done_tests_ID] => 3
  *                     [tests_ID] => 1
  *                     [score] => 1
  *                     [comments] =>
  *                     [users_LOGIN] => george
  *                 )
  *         )
  * )
  * </code>
  *
  * @param mixed $lessons Either the lesson id or an EfrontLesson object, or an array of such
  * @param mixed $users A single user login, an array of user logins or nothing for all users
  * @return array The done tests per user
  * @since 3.5.0
  * @access public
  * @static
  */
 public static function getStudentsDoneTests($lessons = false, $users = false)
 {
     if (!$users) {
         $users = eF_getTableDataFlat("users", "login");
         $users = $users['login'];
     } elseif (!is_array($users)) {
         $users = array($users);
     }
     if ($lessons !== false) {
         if (!is_array($lessons)) {
             $lessons = array($lessons);
         }
         foreach ($lessons as $key => $lesson) {
             $lesson instanceof EfrontLesson ? $lessons[$key] = $lesson->lesson['id'] : null;
         }
         $lessonId = implode(",", $lessons);
     }
     /*
             $usersDoneTests = eF_getTableData("tests t, content c, done_tests dt", "c.lessons_ID, c.name, c.active, t.content_ID, dt.id as done_tests_ID, dt.tests_ID, dt.score, dt.comments, dt.users_LOGIN, dt.timestamp", "dt.tests_ID = t.id and t.content_ID = c.id".($lessonId ? " and c.lessons_ID in ($lessonId)" : ""));
             $doneTests      = array();
             foreach ($usersDoneTests as $doneTest) {
                 if (!$users || in_array($doneTest['users_LOGIN'], $users)) {
                     $doneTests[$doneTest['users_LOGIN']][$doneTest['content_ID']] = $doneTest;
                 }
             }
     */
     $doneTests = array();
     //We create a 10-fold loop for memory efficiency
     for ($i = 0; $i < sizeof($users); $i += 20) {
         $temp = EfrontStats::getDoneTestsPerUser(array_slice($users, $i, 10, true));
     }
     //@todo: This is for compatibility with previous version and should be removed in the future
     foreach ($temp as $user => $value) {
         foreach ($value as $testId => $testData) {
             if (is_array($testData)) {
                 foreach ($testData as $done_tests_ID => $test) {
                     if (is_numeric($done_tests_ID) && $done_tests_ID == $testData['active_test_id']) {
                         //$unit = $test -> getUnit();
                         $stats = array('lessons_ID' => $test['lessons_ID'], 'name' => $test['name'], 'active' => $test['active'], 'content_ID' => $test['content_ID'], 'done_tests_ID' => $done_tests_ID, 'tests_ID' => $test['tests_ID'], 'score' => $test['score'], 'active_score' => $testData['active_score'], 'active_test_id' => $testData['active_test_id'], 'status' => $test['status'], 'users_LOGIN' => $user, 'timestamp' => $test['time_end']);
                         if ($dt['archive'] == 0 && $test['status'] != 'incomplete' && $test['status'] != '' && ($lessons === false || in_array($stats['lessons_ID'], $lessons)) && in_array($stats['users_LOGIN'], $users)) {
                             $doneTests[$user][$test['content_ID']] = $stats;
                         }
                     }
                 }
             }
         }
     }
     $usersDoneScormTests = eF_getTableData("content c, scorm_data sd", "c.lessons_ID, c.name, c.active, sd.masteryscore, sd.lesson_status, sd.content_ID, sd.score, sd.minscore, sd.maxscore, sd.users_LOGIN, sd.timestamp", "sd.lesson_status != 'incomplete' and sd.content_ID = c.id and c.ctg_type = 'scorm_test' and sd.users_LOGIN != ''" . ($lessonId ? " and c.lessons_ID in ({$lessonId})" : ""));
     foreach ($usersDoneScormTests as $doneScormTest) {
         if (!$users || in_array($doneScormTest['users_LOGIN'], $users)) {
             if (is_numeric($doneScormTest['minscore']) && is_numeric($doneScormTest['maxscore'])) {
                 $doneScormTest['score'] = 100 * $doneScormTest['score'] / ($doneScormTest['minscore'] + $doneScormTest['maxscore']);
             } else {
                 $doneScormTest['score'] = $doneScormTest['score'];
             }
             $doneScormTest['active_score'] = $doneScormTest['score'];
             $doneScormTest['status'] = $doneScormTest['lesson_status'];
             $doneScormTest['scorm'] = true;
             $doneTests[$doneScormTest['users_LOGIN']][$doneScormTest['content_ID']] = $doneScormTest;
         }
     }
     return $doneTests;
 }