Ejemplo n.º 1
0
        $nb_assignments = null;
        $nb_posts = null;
    }
} else {
    // Sessions.
    $visibility = api_get_session_visibility($session_id);
    if ($visibility == SESSION_INVISIBLE) {
        Display::display_warning_message(get_lang('NotAvailable'));
        Display::display_footer();
    }
    $courses = Tracking::get_courses_followed_by_coach($user_id, $session_id);
    //If is drh
    if ($is_drh) {
        $courses_of_the_platform = CourseManager::get_courses_followed_by_drh($user_id);
        $courses = array();
        $courses_from_session = SessionManager::get_course_list_by_session_id($session_id);
        foreach ($courses_from_session as $course_item) {
            if (isset($courses_of_the_platform[$course_item['code']])) {
                $courses[$course_item['code']] = $course_item['code'];
            }
        }
        if (empty($courses)) {
            Display::display_warning_message(get_lang('NoResults'));
        }
    }
    //Courses for the user
    $count_courses = count($courses);
    //Sessions for the user
    $count_sessions = count($sessions);
}
if ($count_courses || $count_sessions) {
 /**
  * Get the count of approved induction sessions by a user
  * @param int $userId The user id
  * @return int The count of approved sessions
  */
 private function getApprovedInductionSessions($userId)
 {
     $tSession = Database::get_main_table(TABLE_MAIN_SESSION);
     $tSessionField = Database::get_main_table(TABLE_EXTRA_FIELD);
     $tSessionFieldValues = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
     $tSessionUser = Database::get_main_table(TABLE_MAIN_SESSION_USER);
     $extraFieldType = \Chamilo\CoreBundle\Entity\ExtraField::SESSION_FIELD_TYPE;
     $sql = "SELECT s.id FROM {$tSession} AS s\n            INNER JOIN {$tSessionFieldValues} AS sfv ON s.id = sfv.item_id\n            INNER JOIN {$tSessionField} AS sf ON sfv.field_id = sf.id\n            INNER JOIN {$tSessionUser} AS su ON s.id = su.session_id\n            WHERE\n                sf.extra_field_type = {$extraFieldType} AND\n                sf.variable = 'is_induction_session' AND\n                su.relation_type = 0 AND\n                su.user_id = " . intval($userId);
     $result = Database::query($sql);
     if ($result === false) {
         return 0;
     }
     $numberOfApproved = 0;
     while ($session = Database::fetch_assoc($result)) {
         $numberOfApprovedCourses = 0;
         $courses = SessionManager::get_course_list_by_session_id($session['id']);
         foreach ($courses as $course) {
             $courseCategories = Category::load(null, null, $course['code'], null, null, $session['id'], false);
             if (count($courseCategories) > 0 && Category::userFinishedCourse($userId, $courseCategories[0])) {
                 $numberOfApprovedCourses++;
             }
         }
         if ($numberOfApprovedCourses === count($courses)) {
             $numberOfApproved++;
         }
     }
     return $numberOfApproved;
 }
$page = isset($_GET['page']) ? intval($_GET['page']) : null;
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null;
$default_sort = api_sort_by_first_name() ? 'firstname' : 'lastname';
$sort = isset($_GET['sort']) && in_array($_GET['sort'], array('lastname', 'firstname', 'username')) ? $_GET['sort'] : $default_sort;
$idChecked = isset($_GET['idChecked']) && (is_array($_GET['idChecked']) ? $_GET['idChecked'] : (is_array($_POST['idChecked']) ? $_POST['idChecked'] : null));
$direction = isset($_GET['direction']) && in_array($_GET['direction'], array('desc', 'asc')) ? $_GET['direction'] : 'desc';
if (is_array($idChecked)) {
    $my_temp = array();
    foreach ($idChecked as $id) {
        $my_temp[] = intval($id);
        // forcing the intval
    }
    $idChecked = $my_temp;
}
$session_info = SessionManager::fetch($id_session);
$courses = SessionManager::get_course_list_by_session_id($id_session);
if (!isset($courses[$course_info['real_id']])) {
    header('Location: session_course_list.php?id_session=' . $id_session);
    exit;
}
switch ($action) {
    case 'delete':
        SessionManager::unsubscribe_user_from_course_session($id_session, $idChecked, $courseId);
        header('Location: ' . api_get_self() . '?id_session=' . $id_session . '&course_code=' . urlencode($course_code) . '&sort=' . $sort);
        exit;
        break;
    case 'add':
        SessionManager::subscribe_users_to_session_course($idChecked, $id_session, $courseId);
        header('Location: ' . api_get_self() . '?id_session=' . $id_session . '&course_code=' . urlencode($course_code) . '&sort=' . $sort);
        exit;
        break;
Ejemplo n.º 4
0
     }
     $result = ExerciseLib::get_exam_results_hotpotatoes_data($start, $limit, $sidx, $sord, $hotpot_path, $whereCondition);
     break;
 case 'get_sessions_tracking':
     if (api_is_drh()) {
         $sessions = SessionManager::get_sessions_followed_by_drh(api_get_user_id(), $start, $limit, false, false, false, null, $keyword, $description);
     } else {
         // Sessions for the coach
         $sessions = Tracking::get_sessions_coached_by_user(api_get_user_id(), $start, $limit, false, $keyword, $description);
     }
     $columns = array('name', 'date', 'course_per_session', 'student_per_session', 'details');
     $result = array();
     if (!empty($sessions)) {
         foreach ($sessions as $session) {
             if (api_drh_can_access_all_session_content()) {
                 $count_courses_in_session = count(SessionManager::get_course_list_by_session_id($session['id']));
             } else {
                 $count_courses_in_session = count(Tracking::get_courses_followed_by_coach($user_id, $session['id']));
             }
             $count_users_in_session = count(SessionManager::get_users_by_session($session['id'], 0));
             $session_date = array();
             if (!empty($session['access_start_date']) && $session['access_start_date'] != '0000-00-00') {
                 $session_date[] = get_lang('From') . ' ' . api_format_date($session['access_start_date'], DATE_FORMAT_SHORT);
             }
             if (!empty($session['access_end_date']) && $session['access_end_date'] != '0000-00-00') {
                 $session_date[] = get_lang('Until') . ' ' . api_format_date($session['access_end_date'], DATE_FORMAT_SHORT);
             }
             if (empty($session_date)) {
                 $session_date_string = '-';
             } else {
                 $session_date_string = implode(' ', $session_date);
    $global = false;
}
$global = true;
$course_list = $course_select_list = array();
$course_select_list[0] = get_lang('None');
$htmlHeadXtra[] = '
<script type="text/javascript">
function load_courses() {
	document.search_simple.submit();
}
</script>	';
$session_id = intval($_REQUEST['session_id']);
if (empty($session_id)) {
    $temp_course_list = CourseManager::get_courses_list();
} else {
    $temp_course_list = SessionManager::get_course_list_by_session_id($session_id);
}
foreach ($temp_course_list as $temp_course_item) {
    $course_item = CourseManager::get_course_information($temp_course_item['code']);
    $course_list[] = array('db_name' => $course_item['db_name'], 'code' => $course_item['code'], 'title' => $course_item['title'], 'visual_code' => $course_item['visual_code']);
    $course_select_list[$temp_course_item['code']] = $course_item['title'];
}
//Get session list
$session_list = SessionManager::get_sessions_list(array(), array('name'));
$my_session_list = array();
$my_session_list[0] = get_lang('None');
foreach ($session_list as $sesion_item) {
    $my_session_list[$sesion_item['id']] = $sesion_item['name'];
}
$form = new FormValidator('search_simple', 'POST', '', '', null, false);
$form->addElement('select', 'session_id', get_lang('Sessions'), $my_session_list, array('id' => 'session_id', 'onchange' => 'load_courses();'));
Ejemplo n.º 6
0
            $result = Database::query($sql_query);
            while ($survey = Database::fetch_assoc($result)) {
                $survey['title'] .= $survey['anonymous'] == 1 ? ' (' . get_lang('Anonymous') . ')' : '';
                $data[] = array('id' => $survey['id'], 'text' => strip_tags(html_entity_decode($survey['title'])));
            }
            if (!empty($data)) {
                echo json_encode($data);
            } else {
                echo json_encode(array());
            }
        }
        break;
    case 'display_sessions_courses':
        $sessionId = intval($_GET['session']);
        $userTable = Database::get_main_table(TABLE_MAIN_USER);
        $coursesData = SessionManager::get_course_list_by_session_id($sessionId);
        $courses = array();
        foreach ($coursesData as $courseId => $course) {
            $coachData = SessionManager::getCoachesByCourseSession($sessionId, $course['code']);
            $coachName = '';
            if (!empty($coachData)) {
                $userResult = Database::select('lastname,firstname', $userTable, array('where' => array('user_id = ?' => $coachData[0])), 'first');
                $coachName = api_get_person_name($userResult['firstname'], $userResult['lastname']);
            }
            $courses[] = array('id' => $courseId, 'name' => $course['title'], 'coachName' => $coachName);
        }
        echo json_encode($courses);
        break;
    default:
        echo '';
}
 /**
  * Changes the user from one session to another due a reason
  * @params int user_id
  * @params int old session id
  * @params int new session id
  * @params int see SessionManager::get_session_change_user_reasons()
  */
 static function change_user_session($user_id, $old_session_id, $new_session_id, $reason_id)
 {
     if (!empty($user_id) && !empty($old_session_id) && !empty($new_session_id)) {
         $user_id = intval($user_id);
         $old_session_id = intval($old_session_id);
         $new_session_id = intval($new_session_id);
         $reason_id = intval($reason_id);
         $tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
         $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
         $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
         // Update number of users
         $update_sql = "UPDATE {$tbl_session} SET nbr_users = nbr_users - 1 WHERE id = '{$old_session_id}' ";
         Database::query($update_sql);
         // Get the list of courses related to this session
         $course_list = SessionManager::get_course_list_by_session_id($old_session_id);
         if (!empty($course_list)) {
             foreach ($course_list as $course) {
                 $courseId = $course['id'];
                 // Delete user from course
                 //Database::query("DELETE FROM $tbl_session_rel_course_rel_user WHERE id_session='$session_id' AND course_code='$course_code' AND id_user='******'");
                 //if (Database::affected_rows()) {
                 // Update number of users in this relation
                 $sql = "UPDATE {$tbl_session_rel_course} SET nbr_users = nbr_users - 1 WHERE id_session = '{$old_session_id}' AND c_id='{$courseId}'";
                 Database::query($sql);
                 //}
             }
         }
         //Deal with reasons
         switch ($reason_id) {
             case self::SESSION_CHANGE_USER_REASON_SCHEDULE:
             case self::SESSION_CHANGE_USER_REASON_CLASSROOM:
             case self::SESSION_CHANGE_USER_REASON_LOCATION:
                 //Adding to the new session
                 self::suscribe_users_to_session($new_session_id, array($user_id), null, false);
                 //Setting move_to if session was provided
                 $sql = "UPDATE {$tbl_session_rel_user} SET moved_to = '{$new_session_id}'\n                            WHERE id_session = '{$old_session_id}' AND id_user ='******'";
                 Database::query($sql);
                 break;
             case self::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION:
                 UserManager::deactivate_users(array($user_id));
                 break;
         }
         $now = api_get_utc_datetime();
         //Setting the moved_status
         $sql = "UPDATE {$tbl_session_rel_user} SET moved_status = {$reason_id}, moved_at = '{$now}'\n                    WHERE id_session = '{$old_session_id}' AND id_user ='******'";
         Database::query($sql);
         return true;
     }
     return;
 }
Ejemplo n.º 8
0
                }
                if (count($certificateStudent['certificates']) > 0) {
                    $certificateStudents[] = $certificateStudent;
                }
            }
        }
    }
} elseif ($searchStudentOnly) {
    $selectedStudentInfo = api_get_user_info($selectedStudent);
    if (empty($selectedStudentInfo)) {
        Session::write('reportErrorMessage', get_lang('NoUser'));
        Header::location($selfUrl);
    }
    $sessionList = SessionManager::getSessionsFollowedByUser($selectedStudent);
    foreach ($sessionList as $session) {
        $sessionCourseList = SessionManager::get_course_list_by_session_id($session['id']);
        foreach ($sessionCourseList as $sessionCourse) {
            $gradebookCategories = Category::load(null, null, $sessionCourse['code'], null, false, $session['id']);
            $gradebook = null;
            if (!empty($gradebookCategories)) {
                $gradebook = current($gradebookCategories);
            }
            if (!is_null($gradebook)) {
                $sessionName = $session['name'];
                $courseName = $sessionCourse['title'];
                $certificateStudent = ['fullName' => $selectedStudentInfo['complete_name'], 'sessionName' => $sessionName, 'courseName' => $courseName, 'certificates' => []];
                $studentCertificates = GradebookUtils::get_list_gradebook_certificates_by_user_id($selectedStudent, $gradebook->get_id());
                if (!is_array($studentCertificates) || empty($studentCertificates)) {
                    continue;
                }
                foreach ($studentCertificates as $certificate) {
        $coaches = CourseManager::get_coachs_from_course($session['id'], $course['real_id']);
        if ($coaches) {
            foreach ($coaches as $coach) {
                $totalTime = UserManager::getTimeSpentInCourses($coach['user_id'], $course['real_id'], $session['id'], $selectedFrom, $selectedUntil);
                $formattedTime = api_format_time($totalTime);
                $timeReport->data[] = array('session' => array('id' => $session['id'], 'name' => $session['name']), 'course' => array('id' => $course['real_id'], 'name' => $course['title']), 'coach' => array('userId' => $coach['user_id'], 'lastname' => $coach['lastname'], 'firstname' => $coach['firstname'], 'username' => $coach['username'], 'completeName' => api_get_person_name($coach['firstname'], $coach['lastname'])), 'totalTime' => $formattedTime);
            }
        }
    }
}
if (!empty($selectedSession)) {
    $withFilter = true;
    $session = api_get_session_info($selectedSession);
    $sessionData = array('id' => $session['id'], 'name' => $session['name']);
    $reportTitle = sprintf(get_lang('TimeReportForSessionX'), $session['name']);
    $courses = SessionManager::get_course_list_by_session_id($selectedSession);
    foreach ($courses as $course) {
        $courseData = array('id' => $course['id'], 'name' => $course['title']);
        $coaches = CourseManager::get_coachs_from_course($selectedSession, $course['id']);
        if ($coaches) {
            foreach ($coaches as $coach) {
                $totalTime = UserManager::getTimeSpentInCourses($coach['user_id'], $course['id'], $selectedSession, $selectedFrom, $selectedUntil);
                $formattedTime = api_format_time($totalTime);
                $timeReport->data[] = array('session' => $sessionData, 'course' => $courseData, 'coach' => array('userId' => $coach['user_id'], 'lastname' => $coach['lastname'], 'firstname' => $coach['firstname'], 'username' => $coach['username'], 'completeName' => api_get_person_name($coach['firstname'], $coach['lastname'])), 'totalTime' => $formattedTime);
            }
        }
    }
}
if (!empty($selectedTeacher)) {
    $withFilter = true;
    $teacher = api_get_user_info();
function searchCourses($idSession, $type)
{
    $xajaxResponse = new xajaxResponse();
    $return = null;
    $courseCode = api_get_course_id();
    if (!empty($type)) {
        $idSession = intval($idSession);
        $courseList = SessionManager::get_course_list_by_session_id($idSession);
        $return .= '<select id="destination" name="SessionCoursesListDestination[]" style="width:380px;" >';
        foreach ($courseList as $course) {
            $course_list_destination[] = $course['code'];
            if ($course['code'] != $courseCode) {
                continue;
            }
            $courseTitle = str_replace("'", "\\'", $course['title']);
            $return .= '<option value="' . $course['code'] . '" title="' . @htmlspecialchars($course['title'] . ' (' . $course['visual_code'] . ')', ENT_QUOTES, api_get_system_encoding()) . '">' . $course['title'] . ' (' . $course['visual_code'] . ')</option>';
        }
        $return .= '</select>';
        Session::write('course_list_destination', $course_list_destination);
        // Send response by ajax
        $xajaxResponse->addAssign('ajax_list_courses_destination', 'innerHTML', api_utf8_encode($return));
    }
    return $xajaxResponse;
}
Ejemplo n.º 11
0
                 $title = $courseInfo['title'];
                 if (!empty($courseInfo['category_code'])) {
                     $parents = getParentsToString($courseInfo['category_code']);
                     $title = $parents . $courseInfo['title'];
                 }
                 $results[] = array('id' => $courseInfo['id'], 'text' => $title);
             }
             echo json_encode($results);
         } else {
             echo json_encode(array());
         }
     }
     break;
 case 'search_course_by_session':
     if (api_is_platform_admin()) {
         $results = SessionManager::get_course_list_by_session_id($_GET['session_id'], $_GET['q']);
         //$results = SessionManager::get_sessions_list(array('s.name LIKE' => "%".$_REQUEST['q']."%"));
         $results2 = array();
         if (!empty($results)) {
             foreach ($results as $item) {
                 $item2 = array();
                 foreach ($item as $id => $internal) {
                     if ($id == 'id') {
                         $item2[$id] = $internal;
                     }
                     if ($id == 'title') {
                         $item2['text'] = $internal;
                     }
                 }
                 $results2[] = $item2;
             }
$data['termsRejected'] = isset($_REQUEST['r']) ? intval($_REQUEST['r']) : 0;
// Init template
$tpl = new Template($plugin->get_lang('plugin_title'));
$isAllowToDoRequest = $plugin->isAllowedToDoRequest($data['studentUserId'], $data, true);
if (!$isAllowToDoRequest) {
    $tpl->assign('errorMessages', $plugin->getErrorMessages());
}
if (!empty($data['sessionId']) && !empty($data['studentUserId']) && api_get_plugin_setting('courselegal', 'tool_enable')) {
    $lastMessageId = $plugin->getLastMessageId($data['studentUserId'], $data['sessionId']);
    if ($lastMessageId !== false) {
        // Render mail
        $url = $plugin->getRenderMailUrl(array('queueId' => $lastMessageId));
        header('Location: ' . $url);
        exit;
    }
    $courses = SessionManager::get_course_list_by_session_id($data['sessionId']);
    $course = current($courses);
    $data['courseId'] = $course['id'];
    $legalEnabled = api_get_plugin_setting('courselegal', 'tool_enable');
    if ($legalEnabled) {
        $courseLegal = CourseLegalPlugin::create();
        $termsAndConditions = $courseLegal->getData($data['courseId'], $data['sessionId']);
        $termsAndConditions = $termsAndConditions['content'];
        $termFiles = $courseLegal->getCurrentFile($data['courseId'], $data['sessionId']);
    } else {
        $termsAndConditions = $plugin->get('terms_and_conditions');
        $termFiles = '';
    }
    $data['session'] = api_get_session_info($data['sessionId']);
    $data['student'] = api_get_user_info($data['studentUserId']);
    $data['course'] = api_get_course_info_by_id($data['courseId']);
Ejemplo n.º 13
0
 /**
  * Get the number of stars achieved for an user in a session
  * @param int $sessionId The session ID
  * @param int $userId The user ID
  *
  * @return int The number of stars
  */
 public static function getSessionStars($sessionId, $userId)
 {
     $totalStars = 0;
     $courses = SessionManager::get_course_list_by_session_id($sessionId);
     if (empty($courses)) {
         return 0;
     }
     foreach ($courses as $course) {
         $learnPathListObject = new LearnpathList($userId, $course['code'], $sessionId);
         $learnPaths = $learnPathListObject->get_flat_list();
         if (empty($learnPaths)) {
             continue;
         }
         $stars = 0;
         foreach ($learnPaths as $learnPathId => $learnPathInfo) {
             if (empty($learnPathInfo['seriousgame_mode'])) {
                 continue;
             }
             $learnPath = new learnpath($course['code'], $learnPathId, $userId);
             $stars += $learnPath->getCalculateStars($sessionId);
         }
         $totalStars += round($stars / count($learnPaths));
     }
     return round($totalStars / count($courses));
 }
Ejemplo n.º 14
0
 /**
  * Gives a list of courses for the given user in the given session
  * @param integer $user_id
  * @return array  list of statuses (session_id-course_code => status)
  */
 public static function get_courses_list_by_session($user_id, $session_id)
 {
     // Database Table Definitions
     $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
     $tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
     $user_id = intval($user_id);
     $session_id = intval($session_id);
     //we filter the courses from the URL
     $join_access_url = $where_access_url = '';
     if (api_get_multiple_access_url()) {
         $access_url_id = api_get_current_access_url_id();
         if ($access_url_id != -1) {
             $tbl_url_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
             $join_access_url = " ,  {$tbl_url_session} url_rel_session ";
             $where_access_url = " AND access_url_id = {$access_url_id} AND url_rel_session.session_id = {$session_id} ";
         }
     }
     $personal_course_list = array();
     $courses = array();
     // this query is very similar to the above query, but it will check the session_rel_course_user table if there are courses registered to our user or not
     $personal_course_list_sql = "SELECT DISTINCT scu.c_id as id\n                                    FROM {$tbl_session_course_user} as scu {$join_access_url}\n                                    WHERE scu.id_user = {$user_id} AND scu.id_session = {$session_id} {$where_access_url}\n                                    ORDER BY c_id";
     $course_list_sql_result = Database::query($personal_course_list_sql);
     if (Database::num_rows($course_list_sql_result) > 0) {
         while ($result_row = Database::fetch_array($course_list_sql_result)) {
             $result_row['status'] = 5;
             if (!in_array($result_row['id'], $courses)) {
                 $personal_course_list[] = $result_row;
                 $courses[] = $result_row['id'];
             }
         }
     }
     if (api_is_allowed_to_create_course()) {
         $personal_course_list_sql = "SELECT DISTINCT scu.c_id as id\n                                        FROM {$tbl_session_course_user} as scu, {$tbl_session} as s {$join_access_url}\n                                        WHERE s.id = {$session_id} AND scu.id_session = s.id AND ((scu.id_user={$user_id} AND scu.status=2) OR s.id_coach = {$user_id})\n                                        {$where_access_url}\n                                        ORDER BY c_id";
         $course_list_sql_result = Database::query($personal_course_list_sql);
         if (Database::num_rows($course_list_sql_result) > 0) {
             while ($result_row = Database::fetch_array($course_list_sql_result)) {
                 $result_row['status'] = 2;
                 if (!in_array($result_row['id'], $courses)) {
                     $personal_course_list[] = $result_row;
                     $courses[] = $result_row['id'];
                 }
             }
         }
     }
     if (api_is_drh()) {
         $session_list = SessionManager::get_sessions_followed_by_drh($user_id);
         $session_list = array_keys($session_list);
         if (in_array($session_id, $session_list)) {
             $course_list = SessionManager::get_course_list_by_session_id($session_id);
             if (!empty($course_list)) {
                 foreach ($course_list as $course) {
                     $personal_course_list[] = $course;
                 }
             }
         }
     } else {
         //check if user is general coach for this session
         $s = api_get_session_info($session_id);
         if ($s['id_coach'] == $user_id) {
             $course_list = SessionManager::get_course_list_by_session_id($session_id);
             if (!empty($course_list)) {
                 foreach ($course_list as $course) {
                     if (!in_array($course['id'], $courses)) {
                         $personal_course_list[] = $course;
                     }
                 }
             }
         }
     }
     return $personal_course_list;
 }
Ejemplo n.º 15
0
 /**
  * get courses followed by user
  * @param   int $user_id
  * @param   int $status
  * @param   int $from
  * @param   int $limit
  * @param   string $column
  * @param   string $direction
  * @param   boolean $getCount
  * @param   string $keyword
  * @param   int $sessionId
  * @param   boolean $showAllAssignedCourses
  * @return  array   courses
  */
 public static function getCoursesFollowedByUser($user_id, $status = null, $from = null, $limit = null, $column = null, $direction = null, $getCount = false, $keyword = null, $sessionId = null, $showAllAssignedCourses = false)
 {
     // Database Table Definitions
     $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
     $tbl_course_rel_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
     $tbl_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
     $sessionId = intval($sessionId);
     $user_id = intval($user_id);
     $select = "SELECT DISTINCT *, c.id as real_id ";
     if ($getCount) {
         $select = "SELECT COUNT(DISTINCT c.id) as count";
     }
     $whereConditions = null;
     switch ($status) {
         case COURSEMANAGER:
             $whereConditions .= " AND cru.user_id = '{$user_id}'";
             if (!$showAllAssignedCourses) {
                 $whereConditions .= " AND status = " . COURSEMANAGER;
             } else {
                 $whereConditions .= " AND relation_type = " . COURSE_RELATION_TYPE_COURSE_MANAGER;
             }
             break;
         case DRH:
             $whereConditions .= " AND\n                    cru.user_id = '{$user_id}' AND\n                    status = " . DRH . " AND\n                    relation_type = '" . COURSE_RELATION_TYPE_RRHH . "'\n                ";
             break;
     }
     $keywordCondition = null;
     if (!empty($keyword)) {
         $keyword = Database::escape_string($keyword);
         $keywordCondition = " AND (c.code LIKE '%{$keyword}%' OR c.title LIKE '%{$keyword}%' ) ";
     }
     $orderBy = null;
     $extraInnerJoin = null;
     if (!empty($sessionId)) {
         if (!empty($sessionId)) {
             $courseList = SessionManager::get_course_list_by_session_id($sessionId);
             if (!empty($courseList)) {
                 $courseListToString = implode("','", array_keys($courseList));
                 $whereConditions .= " AND c.id IN ('" . $courseListToString . "')";
             }
             $tableSessionRelCourse = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
             $orderBy = ' ORDER BY position';
             $extraInnerJoin = " INNER JOIN {$tableSessionRelCourse} src\n                                    ON (c.id = src.c_id AND session_id = {$sessionId}) ";
         }
     }
     $whereConditions .= $keywordCondition;
     $sql = "{$select}\n                FROM {$tbl_course} c\n                    INNER JOIN {$tbl_course_rel_user} cru ON (cru.c_id = c.id)\n                    INNER JOIN {$tbl_course_rel_access_url} a ON (a.c_id = c.id)\n                    {$extraInnerJoin}\n                WHERE\n                    access_url_id = " . api_get_current_access_url_id() . "\n                    {$whereConditions}\n                {$orderBy}\n                ";
     if (isset($from) && isset($limit)) {
         $from = intval($from);
         $limit = intval($limit);
         $sql .= " LIMIT {$from}, {$limit}";
     }
     $result = Database::query($sql);
     if ($getCount) {
         $row = Database::fetch_array($result);
         return $row['count'];
     }
     $courses = array();
     if (Database::num_rows($result) > 0) {
         while ($row = Database::fetch_array($result)) {
             $courses[$row['code']] = $row;
         }
     }
     return $courses;
 }
 static function transaction_36($original_data, $web_service_details)
 {
     global $data_list;
     $data = Migration::soap_call($web_service_details, 'asistenciaDetalles', array('uididpersona' => $original_data['item_id'], 'uididprograma' => $original_data['orig_id'], 'uididfecha' => $original_data['info'], 'intIdSede' => $original_data['branch_id']));
     if ($data['error'] == false) {
         $uidIdPrograma = $original_data['orig_id'];
         $uidIdPersona = $original_data['item_id'];
         $attendance_date = $data['date_assist'];
         $attendance_user_status = $data['status'];
         // modified in the asistenciaDetalles function
         $session_id = self::get_session_id_by_programa_id($uidIdPrograma, $data_list);
         $user_id = self::get_user_id_by_persona_id($uidIdPersona, $data_list);
         if (empty($user_id)) {
             return array('message' => "User does not exists in DB: {$uidIdPersona}", 'status_id' => self::TRANSACTION_STATUS_FAILED);
         }
         if (empty($session_id)) {
             return array('message' => "Session does not exists {$uidIdPrograma}", 'status_id' => self::TRANSACTION_STATUS_FAILED);
         }
         $course_list = SessionManager::get_course_list_by_session_id($session_id);
         if (!empty($course_list)) {
             $course_data = current($course_list);
             if (isset($course_data['code'])) {
                 //Check if user exist in the session
                 $status = SessionManager::get_user_status_in_course_session($user_id, $course_data['id'], $session_id);
                 if ($status === false) {
                     return array('message' => "User #{$user_id} is not registered in course code: {$course_data['code']} - session_id: {$session_id}", 'status_id' => self::TRANSACTION_STATUS_FAILED);
                 }
                 $time = self::get_horario_value($session_id);
                 $attendance_date .= " {$time}:00";
                 $attendance = new Attendance();
                 $course_info = api_get_course_info($course_data['code']);
                 $attendance->set_course_id($course_info['code']);
                 $attendance->set_course_int_id($course_info['real_id']);
                 $attendance->set_session_id($session_id);
                 $attendance_list = $attendance->get_attendances_list($course_info['real_id'], $session_id);
                 if (empty($attendance_list)) {
                     return array('message' => "Attendance not found for course code: {$course_info['code']} - session_id: {$session_id}", 'status_id' => self::TRANSACTION_STATUS_FAILED);
                     //only 1 course per session
                 } else {
                     $attendance_data = current($attendance_list);
                     $attendance_id = $attendance_data['id'];
                     error_log("Attendance found in attendance_id = {$attendance_id} - course code: {$course_info['code']} - session_id: {$session_id} - {$attendance_date}");
                 }
                 $cal_info = $attendance->get_attendance_calendar_data_by_date($attendance_id, $attendance_date);
                 if ($cal_info && isset($cal_info['id'])) {
                     $cal_id = $cal_info['id'];
                 } else {
                     //Creating the attendance date
                     $attendance->set_date_time($attendance_date);
                     $cal_id = $attendance->attendance_calendar_add($attendance_id, true);
                     error_log("Creating a new calendar item {$cal_id}");
                     /*
                                             return array(
                                                 'message' => "Attendance calendar does not exist for date: $attendance_date in attendance_id = $attendance_id - course code: {$course_info['code']} - session_id: $session_id",
                                                 'status_id' => self::TRANSACTION_STATUS_FAILED
                                             );*/
                 }
                 $users_present = array($user_id => $attendance_user_status);
                 $attendance_sheet_before = $attendance->attendance_sheet_get_info($cal_id, $user_id);
                 $result = $attendance->attendance_sheet_add($cal_id, $users_present, $attendance_id, false, true);
                 $attendance_sheet_after = $attendance->attendance_sheet_get_info($cal_id, $user_id);
                 if ($result) {
                     return array('entity' => 'attendance_sheet', 'before' => $attendance_sheet_before, 'after' => $attendance_sheet_after, 'message' => "Attendance sheet edited with", 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL);
                 } else {
                     return array('message' => "Attendance sheet can't be edited attendance_id: {$attendance_id} - cal_id: {$cal_id} - user_id: {$user_id} - course: {$course_info['code']} - session_id: {$session_id} ", 'status_id' => self::TRANSACTION_STATUS_FAILED);
                 }
             } else {
                 $message = "Course is not set";
             }
         } else {
             $message = "NO course found for session id: {$session_id}";
         }
         return array('message' => $message, 'status_id' => self::TRANSACTION_STATUS_FAILED);
     } else {
         return $data;
     }
 }
Ejemplo n.º 17
0
 /**
  * @param int $start
  * @param int $end
  * @param int $sessionId
  * @param int $userId
  * @param string $color
  *
  * @return array
  */
 public function getSessionEvents($start, $end, $sessionId = 0, $userId = 0, $color = '')
 {
     $courses = SessionManager::get_course_list_by_session_id($sessionId);
     if (!empty($courses)) {
         foreach ($courses as $course) {
             //if (api_is_coach($sessionId, $course['real_id'])) {
             $this->getCourseEvents($start, $end, $course, 0, $sessionId, 0, $color);
             //}
         }
     }
 }
Ejemplo n.º 18
0
function search_courses($id_session, $type)
{
    global $tbl_course, $tbl_session_rel_course, $course_list;
    $xajax_response = new xajaxResponse();
    $select_destination = '';
    $return = null;
    if (!empty($type)) {
        $id_session = intval($id_session);
        if ($type == 'origin') {
            $course_list = SessionManager::get_course_list_by_session_id($id_session);
            $temp_course_list = array();
            $return .= '<select id="origin" name="SessionCoursesListOrigin[]" class="form-control" onclick="javascript: checkSelected(this.id,\'copy_option_2\',\'title_option2\',\'destination\');">';
            foreach ($course_list as $course) {
                $temp_course_list[] = "'{$course['code']}'";
                $return .= '<option value="' . $course['code'] . '" title="' . @htmlspecialchars($course['title'] . ' (' . $course['visual_code'] . ')', ENT_QUOTES, api_get_system_encoding()) . '">' . $course['title'] . ' (' . $course['visual_code'] . ')</option>';
            }
            $return .= '</select>';
            $_SESSION['course_list'] = $temp_course_list;
            $_SESSION['session_origin'] = $id_session;
            // Build select for destination sessions where is not included current session from select origin
            if (!empty($id_session)) {
                $sessions = SessionManager::get_sessions_list(array(), array('name', 'ASC'));
                $select_destination .= '<select name="sessions_list_destination" class="form-control" onchange = "javascript: xajax_search_courses(this.value,\'destination\');">';
                $select_destination .= '<option value = "0">-- ' . get_lang('SelectASession') . ' --</option>';
                foreach ($sessions as $session) {
                    if ($id_session == $session['id']) {
                        continue;
                    }
                    if (!empty($session['category_name'])) {
                        $session['category_name'] = ' (' . $session['category_name'] . ') ';
                    }
                    $select_destination .= '<option value="' . $session['id'] . '">' . $session['name'] . ' ' . $session['category_name'] . '</option>';
                }
                $select_destination .= '</select>';
                $xajax_response->addAssign('ajax_sessions_list_destination', 'innerHTML', api_utf8_encode($select_destination));
            } else {
                $select_destination .= '<select name="sessions_list_destination" class="form-control" onchange = "javascript: xajax_search_courses(this.value,\'destination\');">';
                $select_destination .= '<option value = "0">' . get_lang('ThereIsNotStillASession') . '</option>';
                $select_destination .= '</select>';
                $xajax_response->addAssign('ajax_sessions_list_destination', 'innerHTML', api_utf8_encode($select_destination));
            }
            // Select multiple destination empty
            $select_multiple_empty = '<select id="destination" name="SessionCoursesListDestination[]" class="form-control"></select>';
            // Send response by ajax
            $xajax_response->addAssign('ajax_list_courses_origin', 'innerHTML', api_utf8_encode($return));
            $xajax_response->addAssign('ajax_list_courses_destination', 'innerHTML', api_utf8_encode($select_multiple_empty));
        } else {
            //Left Select - Destination
            $list_courses_origin = implode(',', $_SESSION['course_list']);
            $session_origin = $_SESSION['session_origin'];
            // Search courses by id_session where course codes is include en courses list destination
            $sql = "SELECT c.code, c.visual_code, c.title, src.session_id\n                    FROM {$tbl_course} c, {$tbl_session_rel_course} src\n                    WHERE src.c_id = c.id\n                    AND src.session_id = '" . intval($id_session) . "'";
            //AND c.code IN ($list_courses_origin)";
            $rs = Database::query($sql);
            $course_list_destination = array();
            $return .= '<select id="destination" name="SessionCoursesListDestination[]" class="form-control">';
            while ($course = Database::fetch_array($rs)) {
                $course_list_destination[] = $course['code'];
                $return .= '<option value="' . $course['code'] . '" title="' . @htmlspecialchars($course['title'] . ' (' . $course['visual_code'] . ')', ENT_QUOTES, api_get_system_encoding()) . '">' . $course['title'] . ' (' . $course['visual_code'] . ')</option>';
            }
            $return .= '</select>';
            $_SESSION['course_list_destination'] = $course_list_destination;
            // Send response by ajax
            $xajax_response->addAssign('ajax_list_courses_destination', 'innerHTML', api_utf8_encode($return));
        }
    }
    return $xajax_response;
}
Ejemplo n.º 19
0
 /**
  * Gives a list of courses for the given user in the given session
  * @param integer $user_id
  * @param integer $session_id
  * @return array  list of statuses (session_id-course_code => status)
  */
 public static function get_courses_list_by_session($user_id, $session_id)
 {
     // Database Table Definitions
     $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
     $tableCourse = Database::get_main_table(TABLE_MAIN_COURSE);
     $tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
     $tbl_session_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
     $user_id = intval($user_id);
     $session_id = intval($session_id);
     //we filter the courses from the URL
     $join_access_url = $where_access_url = '';
     if (api_get_multiple_access_url()) {
         $urlId = api_get_current_access_url_id();
         if ($urlId != -1) {
             $tbl_url_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
             $join_access_url = " ,  {$tbl_url_session} url_rel_session ";
             $where_access_url = " AND access_url_id = {$urlId} AND url_rel_session.session_id = {$session_id} ";
         }
     }
     $personal_course_list = array();
     $courses = array();
     /* This query is very similar to the query below, but it will check the
        session_rel_course_user table if there are courses registered
        to our user or not */
     $sql = "SELECT DISTINCT\n                    c.visibility,\n                    c.id as real_id\n                FROM {$tbl_session_course_user} as scu\n                INNER JOIN {$tbl_session_course} sc\n                ON (scu.session_id = sc.session_id AND scu.c_id = sc.c_id)\n                INNER JOIN {$tableCourse} as c\n                ON (scu.c_id = c.id)\n                {$join_access_url}\n                WHERE\n                    scu.user_id = {$user_id} AND\n                    scu.session_id = {$session_id}\n                    {$where_access_url}\n                ORDER BY sc.position ASC";
     $result = Database::query($sql);
     if (Database::num_rows($result) > 0) {
         while ($result_row = Database::fetch_array($result, 'ASSOC')) {
             $result_row['status'] = 5;
             if (!in_array($result_row['real_id'], $courses)) {
                 $personal_course_list[] = $result_row;
                 $courses[] = $result_row['real_id'];
             }
         }
     }
     if (api_is_allowed_to_create_course()) {
         $sql = "SELECT DISTINCT\n                        c.visibility, c.id as real_id\n                    FROM {$tbl_session_course_user} as scu\n                    INNER JOIN {$tbl_session} as s\n                    ON (scu.session_id = s.id)\n                    INNER JOIN {$tbl_session_course} sc\n                    ON (scu.session_id = sc.session_id AND scu.c_id = sc.c_id)\n                    INNER JOIN {$tableCourse} as c\n                    ON (scu.c_id = c.id)\n                    {$join_access_url}\n                    WHERE\n                      s.id = {$session_id} AND\n                      (\n                        (scu.user_id={$user_id} AND scu.status=2) OR\n                        s.id_coach = {$user_id}\n                      )\n                    {$where_access_url}\n                    ORDER BY sc.position ASC";
         $result = Database::query($sql);
         if (Database::num_rows($result) > 0) {
             while ($result_row = Database::fetch_array($result, 'ASSOC')) {
                 $result_row['status'] = 2;
                 if (!in_array($result_row['real_id'], $courses)) {
                     $personal_course_list[] = $result_row;
                     $courses[] = $result_row['real_id'];
                 }
             }
         }
     }
     if (api_is_drh()) {
         $session_list = SessionManager::get_sessions_followed_by_drh($user_id);
         $session_list = array_keys($session_list);
         if (in_array($session_id, $session_list)) {
             $course_list = SessionManager::get_course_list_by_session_id($session_id);
             if (!empty($course_list)) {
                 foreach ($course_list as $course) {
                     $personal_course_list[] = $course;
                 }
             }
         }
     } else {
         //check if user is general coach for this session
         $s = api_get_session_info($session_id);
         if ($s['id_coach'] == $user_id) {
             $course_list = SessionManager::get_course_list_by_session_id($session_id);
             if (!empty($course_list)) {
                 foreach ($course_list as $course) {
                     if (!in_array($course['id'], $courses)) {
                         $personal_course_list[] = $course;
                     }
                 }
             }
         }
     }
     return $personal_course_list;
 }
Ejemplo n.º 20
0
 }
 $registrationAllowed = api_get_setting('session.catalog_allow_session_auto_subscription');
 if ($registrationAllowed === 'true') {
     $entityManager = Database::getManager();
     $repository = $entityManager->getRepository('ChamiloCoreBundle:SequenceResource');
     $sequences = $repository->getRequirements($sessionId, SequenceResource::SESSION_TYPE);
     if (count($sequences) > 0) {
         $requirementsData = SequenceResourceManager::checkRequirementsForUser($sequences, SequenceResource::SESSION_TYPE, $userId);
         $continueWithSubscription = SequenceResourceManager::checkSequenceAreCompleted($requirementsData);
         if (!$continueWithSubscription) {
             header('Location: ' . api_get_path(WEB_CODE_PATH) . 'auth/courses.php');
             exit;
         }
     }
     SessionManager::suscribe_users_to_session($_GET['session_id'], array($userId), SESSION_VISIBLE_READ_ONLY, false);
     $coursesList = SessionManager::get_course_list_by_session_id($_GET['session_id']);
     $count = count($coursesList);
     $url = '';
     if ($count <= 0) {
         // no course in session -> return to catalog
         $url = api_get_path(WEB_CODE_PATH) . 'auth/courses.php';
     } elseif ($count == 1) {
         // only one course, so redirect directly to this course
         foreach ($coursesList as $course) {
             $url = api_get_path(WEB_COURSE_PATH) . $course['directory'] . '/index.php?id_session=' . intval($_GET['session_id']);
         }
     } else {
         $url = api_get_path(WEB_CODE_PATH) . 'session/index.php?session_id=' . intval($_GET['session_id']);
     }
     header('Location: ' . $url);
     exit;
Ejemplo n.º 21
0
 /**
  * Get the progress of a exercise
  * @param   int $sessionId  The session ID (session.id)
  * @param   int $courseId   The course ID (course.id)
  * @param   int $exerciseId The quiz ID (c_quiz.id)
  * @param   int $answer     The answer status (0 = incorrect, 1 = correct, 2 = both)
  * @param   array   $options    An array of options you can pass to the query (limit, where and order)
  * @return array An array with the data of exercise(s) progress
  */
 public static function get_exercise_progress($sessionId = 0, $courseId = 0, $exerciseId = 0, $date_from = null, $date_to = null, $options = array())
 {
     $sessionId = intval($sessionId);
     $courseId = intval($courseId);
     $exerciseId = intval($exerciseId);
     $date_from = Database::escape_string($date_from);
     $date_to = Database::escape_string($date_to);
     /*
      * This method gets the data by blocks, as previous attempts at one single
      * query made it take ages. The logic of query division is described below
      */
     // Get tables names
     $tuser = Database::get_main_table(TABLE_MAIN_USER);
     $tquiz = Database::get_course_table(TABLE_QUIZ_TEST);
     $tquiz_answer = Database::get_course_table(TABLE_QUIZ_ANSWER);
     $tquiz_question = Database::get_course_table(TABLE_QUIZ_QUESTION);
     $tquiz_rel_question = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
     $ttrack_exercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);
     $ttrack_attempt = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
     $sessions = array();
     $courses = array();
     // if session ID is defined but course ID is empty, get all the courses
     // from that session
     if (!empty($sessionId) && empty($courseId)) {
         // $courses is an array of course int id as index and course details hash as value
         $courses = SessionManager::get_course_list_by_session_id($sessionId);
         $sessions[$sessionId] = api_get_session_info($sessionId);
     } elseif (empty($sessionId) && !empty($courseId)) {
         // if, to the contrary, course is defined but not sessions, get the sessions that include this course
         // $sessions is an array like: [0] => ('id' => 3, 'name' => 'Session 35'), [1] => () etc;
         $course = api_get_course_info_by_id($courseId);
         $sessionsTemp = SessionManager::get_session_by_course($courseId);
         $courses[$courseId] = $course;
         foreach ($sessionsTemp as $sessionItem) {
             $sessions[$sessionItem['id']] = $sessionItem;
         }
     } elseif (!empty($courseId) && !empty($sessionId)) {
         //none is empty
         $course = api_get_course_info_by_id($courseId);
         $courses[$courseId] = array($course['code']);
         $courses[$courseId]['code'] = $course['code'];
         $sessions[$sessionId] = api_get_session_info($sessionId);
     } else {
         //both are empty, not enough data, return an empty array
         return array();
     }
     // Now we have two arrays of courses and sessions with enough data to proceed
     // If no course could be found, we shouldn't return anything.
     // Sessions can be empty (then we only return the pure-course-context results)
     if (count($courses) < 1) {
         return array();
     }
     $data = array();
     // The following loop is less expensive than what it seems:
     // - if a course was defined, then we only loop through sessions
     // - if a session was defined, then we only loop through courses
     // - if a session and a course were defined, then we only loop once
     foreach ($courses as $courseIdx => $courseData) {
         $where = '';
         $whereParams = array();
         $whereSessionParams = '';
         if (count($sessions > 0)) {
             foreach ($sessions as $sessionIdx => $sessionData) {
                 if (!empty($sessionIdx)) {
                     $whereSessionParams .= $sessionIdx . ',';
                 }
             }
             $whereSessionParams = substr($whereSessionParams, 0, -1);
         }
         if (!empty($exerciseId)) {
             $exerciseId = intval($exerciseId);
             $where .= ' AND q.id = %d ';
             $whereParams[] = $exerciseId;
         }
         /*
          * This feature has been disabled for now, to avoid having to
          * join two very large tables
         //2 = show all questions (wrong and correct answered)
         if ($answer != 2) {
             $answer = intval($answer);
             //$where .= ' AND qa.correct = %d';
             //$whereParams[] = $answer;
         }
         */
         $limit = '';
         if (!empty($options['limit'])) {
             $limit = " LIMIT " . $options['limit'];
         }
         if (!empty($options['where'])) {
             $where .= ' AND ' . Database::escape_string($options['where']);
         }
         $order = '';
         if (!empty($options['order'])) {
             $order = " ORDER BY " . $options['order'];
         }
         if (!empty($date_to) && !empty($date_from)) {
             $where .= sprintf(" AND (te.start_date BETWEEN '%s 00:00:00' AND '%s 23:59:59')", $date_from, $date_to);
         }
         $sql = "SELECT\n                te.session_id,\n                ta.id as attempt_id,\n                te.exe_user_id as user_id,\n                te.exe_id as exercise_attempt_id,\n                ta.question_id,\n                ta.answer as answer_id,\n                ta.tms as time,\n                te.exe_exo_id as quiz_id,\n                CONCAT ('c', q.c_id, '_e', q.id) as exercise_id,\n                q.title as quiz_title,\n                qq.description as description\n                FROM {$ttrack_exercises} te\n                INNER JOIN {$ttrack_attempt} ta ON ta.exe_id = te.exe_id\n                INNER JOIN {$tquiz} q ON q.id = te.exe_exo_id\n                INNER JOIN {$tquiz_rel_question} rq ON rq.exercice_id = q.id AND rq.c_id = q.c_id\n                INNER JOIN {$tquiz_question} qq\n                ON\n                    qq.id = rq.question_id AND\n                    qq.c_id = rq.c_id AND\n                    qq.position = rq.question_order AND\n                    ta.question_id = rq.question_id\n                WHERE\n                    te.c_id = {$courseIdx} " . (empty($whereSessionParams) ? '' : "AND te.session_id IN ({$whereSessionParams})") . "\n                    AND q.c_id = {$courseIdx}\n                    {$where} {$order} {$limit}";
         $sql_query = vsprintf($sql, $whereParams);
         // Now browse through the results and get the data
         $rs = Database::query($sql_query);
         $userIds = array();
         $questionIds = array();
         $answerIds = array();
         while ($row = Database::fetch_array($rs)) {
             //only show if exercise is visible
             if (api_get_item_visibility($courseData, 'quiz', $row['exercise_id'])) {
                 $userIds[$row['user_id']] = $row['user_id'];
                 $questionIds[$row['question_id']] = $row['question_id'];
                 $answerIds[$row['question_id']][$row['answer_id']] = $row['answer_id'];
                 $row['session'] = $sessions[$row['session_id']];
                 $data[] = $row;
             }
         }
         // Now fill questions data. Query all questions and answers for this test to avoid
         $sqlQuestions = "SELECT tq.c_id, tq.id as question_id, tq.question, tqa.id_auto,\n                            tqa.answer, tqa.correct, tq.position, tqa.id_auto as answer_id\n                            FROM {$tquiz_question} tq, {$tquiz_answer} tqa\n                            WHERE\n                                tqa.question_id = tq.id AND\n                                tqa.c_id = tq.c_id AND\n                                tq.c_id = {$courseIdx} AND\n                                tq.id IN (" . implode(',', $questionIds) . ")";
         $resQuestions = Database::query($sqlQuestions);
         $answer = array();
         $question = array();
         while ($rowQuestion = Database::fetch_assoc($resQuestions)) {
             $questionId = $rowQuestion['question_id'];
             $answerId = $rowQuestion['answer_id'];
             $answer[$questionId][$answerId] = array('position' => $rowQuestion['position'], 'question' => $rowQuestion['question'], 'answer' => $rowQuestion['answer'], 'correct' => $rowQuestion['correct']);
             $question[$questionId]['question'] = $rowQuestion['question'];
         }
         // Now fill users data
         $sqlUsers = "SELECT user_id, username, lastname, firstname\n                         FROM {$tuser}\n                         WHERE user_id IN (" . implode(',', $userIds) . ")";
         $resUsers = Database::query($sqlUsers);
         while ($rowUser = Database::fetch_assoc($resUsers)) {
             $users[$rowUser['user_id']] = $rowUser;
         }
         foreach ($data as $id => $row) {
             $rowQuestId = $row['question_id'];
             $rowAnsId = $row['answer_id'];
             $data[$id]['session'] = $sessions[$row['session_id']]['name'];
             $data[$id]['firstname'] = $users[$row['user_id']]['firstname'];
             $data[$id]['lastname'] = $users[$row['user_id']]['lastname'];
             $data[$id]['username'] = $users[$row['user_id']]['username'];
             $data[$id]['answer'] = $answer[$rowQuestId][$rowAnsId]['answer'];
             $data[$id]['correct'] = $answer[$rowQuestId][$rowAnsId]['correct'] == 0 ? get_lang('No') : get_lang('Yes');
             $data[$id]['question'] = $question[$rowQuestId]['question'];
             $data[$id]['question_id'] = $rowQuestId;
             $data[$id]['description'] = $row['description'];
         }
         /*
         The minimum expected array structure at the end is:
         attempt_id,
         session name,
         exercise_id,
         quiz_title,
         username,
         lastname,
         firstname,
         time,
         question_id,
         question,
         answer,
         */
     }
     return $data;
 }
Ejemplo n.º 22
0
 /**
  * @param int $userId
  * @return array
  */
 public static function getAllCoursesFromAllSessionFromDrh($userId)
 {
     $sessions = SessionManager::get_sessions_followed_by_drh($userId);
     $coursesFromSession = array();
     if (!empty($sessions)) {
         foreach ($sessions as $session) {
             $courseList = SessionManager::get_course_list_by_session_id($session['id']);
             foreach ($courseList as $course) {
                 $coursesFromSession[] = $course['code'];
             }
         }
     }
     return $coursesFromSession;
 }
Ejemplo n.º 23
0
 $combinations = $_SESSION['combination'];
 $combination_result = $combinations[$_REQUEST['unique_id']];
 if (empty($combination_result)) {
     echo get_lang('ThereWasAnError');
 } else {
     $origin_course_code = $combination_result['course_code'];
     $origin_session_id = intval($combination_result['session_id']);
     $new_session_id = intval($_REQUEST['session_id']);
     //if (!isset($_REQUEST['view_stat'])) {
     if ($origin_session_id == $new_session_id) {
         echo get_lang('CantMoveToTheSameSession');
         exit;
     }
     //}
     $user_id = intval($_REQUEST['user_id']);
     $new_course_list = SessionManager::get_course_list_by_session_id($new_session_id);
     $course_founded = false;
     foreach ($new_course_list as $course_item) {
         if ($origin_course_code == $course_item['code']) {
             $course_founded = true;
         }
     }
     $result_message = array();
     $result_message_compare = array();
     $update_database = true;
     if (isset($_REQUEST['view_stat']) && $_REQUEST['view_stat'] == 1) {
         $update_database = false;
     }
     //Check if the same course exist in the session destination
     if ($course_founded) {
         //Check if the user is registered in the session otherwise we will add it
Ejemplo n.º 24
0
 /**
  * Get the achieved certificates for a user in course sessions
  * @param int $userId The user id
  * @param type $includeNonPublicCertificates Whether include the non-plublic certificates
  * @return array
  */
 public static function getUserCertificatesInSessions($userId, $includeNonPublicCertificates = true)
 {
     $userId = intval($userId);
     $sessionList = [];
     $sessions = SessionManager::get_sessions_by_user($userId);
     foreach ($sessions as $session) {
         if (empty($session['courses'])) {
             continue;
         }
         $sessionCourses = SessionManager::get_course_list_by_session_id($session['session_id']);
         foreach ($sessionCourses as $course) {
             if (!$includeNonPublicCertificates) {
                 $allowPublicCertificates = api_get_course_setting('allow_public_certificates', $course['code']);
                 if (empty($allowPublicCertificates)) {
                     continue;
                 }
             }
             $courseGradebookCategory = Category::load(null, null, $course['code'], null, null, $session['session_id']);
             if (empty($courseGradebookCategory)) {
                 continue;
             }
             $courseGradebookId = $courseGradebookCategory[0]->get_id();
             $certificateInfo = GradebookUtils::get_certificate_by_user_id($courseGradebookId, $userId);
             if (empty($certificateInfo)) {
                 continue;
             }
             $sessionList[] = ['session' => $session['session_name'], 'course' => $course['title'], 'score' => $certificateInfo['score_certificate'], 'date' => api_format_date($certificateInfo['created_at'], DATE_FORMAT_SHORT), 'link' => api_get_path(WEB_PATH) . "certificates/index.php?id={$certificateInfo['id']}"];
         }
     }
     return $sessionList;
 }
Ejemplo n.º 25
0
        $promotion = new Promotion();
        // Getting all promotions
        $promotions = $promotion->get_all_promotions_by_career_id($career_item['id'], 'name DESC');
        $career_content = '';
        $promotion_array = array();
        if (!empty($promotions)) {
            foreach ($promotions as $promotion_item) {
                if (!$promotion_item['status']) {
                    continue;
                    //avoid status = 0
                }
                // Getting all sessions from this promotion
                $sessions = SessionManager::get_all_sessions_by_promotion($promotion_item['id']);
                $session_list = array();
                foreach ($sessions as $session_item) {
                    $course_list = SessionManager::get_course_list_by_session_id($session_item['id']);
                    $session_list[] = array('data' => $session_item, 'courses' => $course_list);
                }
                $promotion_array[$promotion_item['id']] = array('name' => $promotion_item['name'], 'sessions' => $session_list);
            }
        }
        $career_array[$career_item['id']] = array('name' => $career_item['name'], 'promotions' => $promotion_array);
    }
}
echo '<table class="data_table">';
if (!empty($career_arrayer)) {
    foreach ($career_array as $career_id => $data) {
        $career = $data['name'];
        $promotions = $data['promotions'];
        $career = Display::url($career, 'careers.php?action=edit&id=' . $career_id);
        $career = Display::tag('h4', $career);
Ejemplo n.º 26
0
    /**
     * Gives a list of courses for the given user in the given session
     * @param integer $user_id
     * @param integer $session_id
     * @return array  list of statuses (session_id-course_code => status)
     */
    public static function get_courses_list_by_session($user_id, $session_id)
    {
        // Database Table Definitions
        $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
        $tableCourse = Database :: get_main_table(TABLE_MAIN_COURSE);
        $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
        $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);

        $user_id = intval($user_id);
        $session_id = intval($session_id);
        //we filter the courses from the URL
        $join_access_url = $where_access_url = '';

        if (api_get_multiple_access_url()) {
            $access_url_id = api_get_current_access_url_id();
            if ($access_url_id != -1) {
                $tbl_url_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
                $join_access_url = " ,  $tbl_url_session url_rel_session ";
                $where_access_url = " AND access_url_id = $access_url_id AND url_rel_session.session_id = $session_id ";
            }
        }

        $personal_course_list = array();
        $courses = array();

        /* This query is very similar to the above query,but it will check the
        session_rel_course_user table if there are courses registered
        to our user or not*/

        $sql = "SELECT DISTINCT
                    scu.course_code as code, c.visibility, c.id as real_id
                FROM $tbl_session_course_user as scu
                INNER JOIN $tbl_session_course sc
                ON (scu.id_session = sc.id_session AND scu.course_code = sc.course_code)
                INNER JOIN $tableCourse as c
                ON (scu.course_code = c.code)
                $join_access_url
                WHERE
                    scu.id_user = $user_id AND
                    scu.id_session = $session_id
                    $where_access_url";

        $orderBy = " ORDER BY code ";
        if (SessionManager::orderCourseIsEnabled()) {
            $orderBy =  ' ORDER BY position';
        }
        $sql .= $orderBy;

        $result = Database::query($sql);

        if (Database::num_rows($result) > 0) {
            while ($result_row = Database::fetch_array($result)) {
                $result_row['status'] = 5;
                if (!in_array($result_row['code'], $courses)) {
                    $personal_course_list[] = $result_row;
                    $courses[] = $result_row['code'];
                }
            }
        }

        if (api_is_allowed_to_create_course()) {
            $sql = "SELECT DISTINCT
                        scu.course_code as code, c.visibility, c.id as real_id
                    FROM $tbl_session_course_user as scu
                    INNER JOIN $tbl_session as s
                    ON (scu.id_session = s.id)
                    INNER JOIN $tbl_session_course sc
                    ON (scu.id_session = sc.id_session AND scu.course_code = sc.course_code)
                    INNER JOIN $tableCourse as c
                    ON (scu.course_code = c.code)
                    $join_access_url
                    WHERE
                      s.id = $session_id AND
                      (
                        (scu.id_user=$user_id AND scu.status=2) OR
                        s.id_coach = $user_id
                      )
                    $where_access_url
                    $orderBy";
            $result = Database::query($sql);

            if (Database::num_rows($result) > 0) {
                while ($result_row = Database::fetch_array($result)) {
                    $result_row['status'] = 2;
                    if (!in_array($result_row['code'], $courses)) {
                        $personal_course_list[] = $result_row;
                        $courses[] = $result_row['code'];
                    }
                }
            }
        }

        if (api_is_drh()) {
            $session_list = SessionManager::get_sessions_followed_by_drh($user_id);
            $session_list = array_keys($session_list);
            if (in_array($session_id, $session_list)) {
                $course_list = SessionManager::get_course_list_by_session_id($session_id);
                if (!empty($course_list)) {
                    foreach ($course_list as $course) {
                        $personal_course_list[] = $course;
                    }
                }
            }
        } else {
            //check if user is general coach for this session
            $s = api_get_session_info($session_id);
            if ($s['id_coach'] == $user_id) {
                $course_list = SessionManager::get_course_list_by_session_id($session_id);
                if (!empty($course_list)) {
                    foreach ($course_list as $course) {
                        if (!in_array($course['code'], $courses)) {
                            $personal_course_list[] = $course;
                        }
                    }
                }
            }
        }

        return $personal_course_list;
    }