public static function attempt_force_sessions()
 {
     // Activate Sessions by putting in a false var
     CoursePress_Session::session('coursepress_sessions_active', true);
 }
 public static function _version_2_upgrade($student_id, $course_id, $data)
 {
     if (!is_user_logged_in()) {
         self::_update_version($student_id, $course_id, $data, 2);
         return;
     }
     if (!$course_id || !$student_id) {
         return;
     }
     //Get fresh course_progress. $data object might contain out-dated information from session.
     //$course_progress = get_user_option( '_course_' . $course_id . '_progress', $student_id );
     $course_progress = $data;
     if (!empty($course_progress['unit'])) {
         foreach ($course_progress['unit'] as $unit_key => $unit) {
             if (!empty($unit['gradable_results'])) {
                 foreach ($unit['gradable_results'] as $result_key => $results) {
                     //Remove redundant records. Keep only the amount defined by CP_GRADABLE_RESULTS_HISTORY_LENGTH.
                     $course_progress['unit'][$unit_key]['gradable_results'][$result_key] = array_slice($results, count($results) - CP_GRADABLE_RESULTS_HISTORY_LENGTH);
                 }
             }
         }
     }
     $global_setting = !is_multisite();
     update_user_option($student_id, '_course_' . $course_id . '_progress', $course_progress, $global_setting);
     $session_data[$student_id]['course_completion'][$course_id] = $course_progress;
     CoursePress_Session::session('coursepress_student', $session_data);
     // Record the new version
     self::_update_version($student_id, $course_id, $course_progress, 2);
 }
 public static function get_module_completion_data($unit_id)
 {
     if (empty($unit_id)) {
         return false;
     }
     $session_data = CoursePress_Session::session('coursepress_unit_completion');
     $in_session = isset($session_data[$unit_id]);
     $criteria = array();
     if ($in_session && !empty($session_data[$unit_id]['all_input_ids'])) {
         $criteria = $session_data[$unit_id];
     } else {
         $module_data = self::get_input_module_meta($unit_id);
         $mandatory_array = array();
         $mandatory_gradable_array = array();
         $gradable_array = array();
         $min_grades = array();
         $attempts_array = array();
         $all_input_ids = array();
         if (!empty($module_data)) {
             foreach ($module_data as $module_id => $module) {
                 $all_input_ids[] = $module_id;
                 $mandatory = isset($module['mandatory_answer']) ? $module['mandatory_answer'] == 'yes' ? true : false : false;
                 $gradable = isset($module['gradable_answer']) ? $module['gradable_answer'] == 'yes' ? true : false : false;
                 $limit_attempts = isset($module['limit_attempts']) ? $module['limit_attempts'] == 'yes' ? true : false : false;
                 if ($mandatory) {
                     $mandatory_array[] = $module_id;
                 }
                 if ($gradable) {
                     $gradable_array[] = $module_id;
                     $min_grade = isset($module['minimum_grade_required']) ? $module['minimum_grade_required'] : 0;
                     $min_grades[$module_id] = $min_grade;
                 }
                 if ($gradable && $mandatory) {
                     $mandatory_gradable_array[] = $module_id;
                 }
                 if (($mandatory || $gradable) && $limit_attempts) {
                     $allowed = isset($module['limit_attempts_value']) ? $module['limit_attempts_value'] : false;
                     $attempts_array[$module_id] = $allowed;
                 }
             }
         }
         $in_session = false;
         $criteria = array('mandatory_modules' => $mandatory_array, 'gradable_modules' => $gradable_array, 'mandatory_gradable_modules' => $mandatory_gradable_array, 'minimum_grades' => $min_grades, 'answer_limit' => $attempts_array, 'all_input_ids' => $all_input_ids);
     }
     if (!$in_session) {
         //$_SESSION[ 'coursepress_unit_completion' ][ $unit_id ] = $criteria;
         if (!is_array($session_data)) {
             $session_data = array();
         }
         $session_data[$unit_id] = $criteria;
         CoursePress_Session::session('coursepress_unit_completion', $session_data);
     }
     return $criteria;
 }