$strreports = get_string('courseStandard1', 'block_report_module');
$PAGE->set_title($strreports);
$PAGE->set_heading($strreports);
$PAGE->navbar->add(get_string('reportModuleTitle', 'block_report_module'));
$PAGE->navbar->add($strreports);
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('courseStandardStoreDisplay', 'block_report_module'));
$courseID = optional_param('courseID', 0, PARAM_INT);
if (!($course = $DB->get_record('course', array('id' => $courseID)))) {
    error(get_string('selectRightCourseName1', 'block_report_module'));
}
$context = get_context_instance(CONTEXT_COURSE, $course->id);
if (!has_capability('moodle/grade:viewall', $context)) {
    error(get_string('NoModifyCourseStandardAuth', 'block_report_module'));
}
$courseAction = getCourseActionItem($courseID);
$courseStandardArray = array();
$courseStandardArray['course'] = array();
$courseStandardArray['course']['timeCheck'] = optional_param('courseTimeCheck', 0, PARAM_INT);
$courseStandardArray['course']['time'] = optional_param('courseTime', 0, PARAM_NUMBER);
$courseStandardArray['course']['scoreCheck'] = optional_param('courseScoreCheck', 0, PARAM_INT);
$courseStandardArray['course']['score'] = optional_param('courseScore', 0, PARAM_NUMBER);
foreach ($courseAction as $courseActionOne) {
    $courseStandardArray[$courseActionOne->id] = array();
    $courseStandardArray[$courseActionOne->id]['timeCheck'] = optional_param('actionTimeCheck' . $courseActionOne->id, 0, PARAM_INT);
    $courseStandardArray[$courseActionOne->id]['time'] = optional_param('actionTime' . $courseActionOne->id, 0, PARAM_NUMBER);
    $courseStandardArray[$courseActionOne->id]['scoreCheck'] = optional_param('actionScoreCheck' . $courseActionOne->id, 0, PARAM_INT);
    $courseStandardArray[$courseActionOne->id]['score'] = optional_param('actionScore' . $courseActionOne->id, 0, PARAM_NUMBER);
}
$courseStandardString = serialize($courseStandardArray);
if (!($reportmodule = $DB->get_record('reportmodule', array('courseid' => $courseID)))) {
function produceSimpleCourseUserArray($userID, $courseID, $courseUserLogData, &$userPass)
{
    //relating function produceUserCourseLog
    //use produceUserCourseLog's return as input $courseUserLogData
    global $DB;
    if (!($user = $DB->get_record('user', array('id' => $userID)))) {
        return false;
        //error('不正確的學員名稱!');
    }
    if (!($courseusers = get_course_students($courseID))) {
        return false;
        //error('這門課程目前沒有學生參加!');
    }
    if (!($courseActionItem = getCourseActionItem($courseID))) {
        return false;
        //error('課程未有活動!');
    }
    if (!($courseStandardArray = getReportModuleConfig($courseID))) {
        return false;
        //error('課程尚未設定!');
    }
    //compare time or score
    //compare course action course
    if ($courseStandardArray['course']['timeCheck']) {
        //compare time
        $courseTime = calculateInteTime($courseUserLogData);
        $courseTimeStandard = $courseStandardArray['course']['time'] ? $courseStandardArray['course']['time'] : "0";
        $courseTimePass = $courseTime >= $courseTimeStandard ? true : false;
        //compare score
        $courseScorePass = true;
    } else {
        //compare time
        $courseTimePass = true;
        //compare score
        $courseScorePass = true;
    }
    //include course action data
    $courseUserArray = array();
    //$courseUserArray['course' or 'modID']['timeCheck' or 'score' ...]
    $courseUserArray['course'] = array('timePass' => $courseTimePass, 'scorePass' => $courseScorePass);
    //user pass array edit
    if (!($courseUserArray['course']['timePass'] and $courseUserArray['course']['scorePass'])) {
        return false;
    }
    //compare action item
    foreach ($courseActionItem as $courseActionItemOne) {
        //switch action item
        if (!($courseActionItemOne = courseActionItemCheck($courseActionItemOne))) {
            //if not need action item break the count
            break;
        }
        //setup action time
        switch ($courseActionItemOne->itemmodule) {
            case 'lesson':
                //單元課程
                //compare mod time action mod id
                if ($courseStandardArray[$courseActionItemOne->id]['timeCheck']) {
                    //compare time
                    $courseActionTime = 0;
                    //setup action time
                    $lessonID = $courseActionItemOne->iteminstance;
                    if ($lessonTime = caculateLessonTime($userID, $courseID, $lessonID)) {
                        $courseActionTime = $lessonTime;
                    }
                    //read action time standard
                    $courseActionTimeStandard = $courseStandardArray[$courseActionItemOne->id]['time'] ? $courseStandardArray[$courseActionItemOne->id]['time'] : "0";
                    $courseActionTimePass = $courseActionTime >= $courseActionTimeStandard ? true : false;
                } else {
                    //compare time
                    $courseActionTimePass = true;
                }
                //compare mod score action mod id
                if ($courseStandardArray[$courseActionItemOne->id]['scoreCheck']) {
                    //compare score
                    $courseActionScore = 0;
                    $courseActionScore = getCourseActionScore($courseActionItemOne->id, $userID);
                    $courseActionScore = round($courseActionScore->finalgrade, 2);
                    //read action score standard
                    $courseActionScoreStandard = $courseStandardArray[$courseActionItemOne->id]['score'] ? $courseStandardArray[$courseActionItemOne->id]['score'] : "0";
                    $courseActionScorePass = $courseActionScore >= $courseActionScoreStandard ? true : false;
                } else {
                    //compare score
                    $courseActionScorePass = true;
                }
                break;
            case 'assignment':
                //作業
                //compare mod time action mod id
                if ($courseStandardArray[$courseActionItemOne->id]['timeCheck']) {
                    //compare time
                    $courseActionTimePass = true;
                } else {
                    //compare time
                    $courseActionTimePass = true;
                }
                //compare mod score action mod id
                if ($courseStandardArray[$courseActionItemOne->id]['scoreCheck']) {
                    //compare score
                    $courseActionScore = 0;
                    $courseActionScore = getCourseActionScore($courseActionItemOne->id, $userID);
                    $courseActionScore = round($courseActionScore->finalgrade, 2);
                    //read action score standard
                    $courseActionScoreStandard = $courseStandardArray[$courseActionItemOne->id]['score'] ? $courseStandardArray[$courseActionItemOne->id]['score'] : "0";
                    $courseActionScorePass = $courseActionScore >= $courseActionScoreStandard ? true : false;
                } else {
                    //compare score
                    $courseActionScorePass = true;
                }
                break;
            case 'quiz':
                //考試
                //compare mod time action mod id
                if ($courseStandardArray[$courseActionItemOne->id]['timeCheck']) {
                    //compare time
                    $courseActionTime = 0;
                    //setup action time
                    $quizID = $courseActionItemOne->iteminstance;
                    if ($quizTime = caculateQuizTime($userID, $courseID, $quizID)) {
                        $courseActionTime = $quizTime;
                    }
                    //read action time standard
                    $courseActionTimeStandard = $courseStandardArray[$courseActionItemOne->id]['time'] ? $courseStandardArray[$courseActionItemOne->id]['time'] : "0";
                    $courseActionTimePass = $courseActionTime >= $courseActionTimeStandard ? true : false;
                } else {
                    //compare time
                    $courseActionTimePass = true;
                }
                //compare mod score action mod id
                if ($courseStandardArray[$courseActionItemOne->id]['scoreCheck']) {
                    //compare score
                    $courseActionScore = 0;
                    $courseActionScore = getCourseActionScore($courseActionItemOne->id, $userID);
                    $courseActionScore = round($courseActionScore->finalgrade, 2);
                    //read action score standard
                    $courseActionScoreStandard = $courseStandardArray[$courseActionItemOne->id]['score'] ? $courseStandardArray[$courseActionItemOne->id]['score'] : "0";
                    $courseActionScorePass = $courseActionScore >= $courseActionScoreStandard ? true : false;
                } else {
                    //compare score
                    $courseActionScorePass = true;
                }
                break;
            case 'hotpot':
                //hot potato test
                //compare mod time action mod id
                if ($courseStandardArray[$courseActionItemOne->id]['timeCheck']) {
                    //compare time
                    $courseActionTime = 0;
                    //setup action time
                    $hotpotID = $courseActionItemOne->iteminstance;
                    if ($hotpotTime = caculateHotPotTime($userID, $courseID, $hotpotID)) {
                        $courseActionTime = $hotpotTime;
                    }
                    //read action time standard
                    $courseActionTimeStandard = $courseStandardArray[$courseActionItemOne->id]['time'] ? $courseStandardArray[$courseActionItemOne->id]['time'] : "0";
                    $courseActionTimePass = $courseActionTime >= $courseActionTimeStandard ? true : false;
                } else {
                    //compare time
                    $courseActionTimePass = true;
                }
                //compare mod score action mod id
                if ($courseStandardArray[$courseActionItemOne->id]['scoreCheck']) {
                    //compare score
                    $courseActionScore = 0;
                    $courseActionScore = getCourseActionScore($courseActionItemOne->id, $userID);
                    $courseActionScore = round($courseActionScore->finalgrade, 2);
                    //read action score standard
                    $courseActionScoreStandard = $courseStandardArray[$courseActionItemOne->id]['score'] ? $courseStandardArray[$courseActionItemOne->id]['score'] : "0";
                    $courseActionScorePass = $courseActionScore >= $courseActionScoreStandard ? true : false;
                } else {
                    //compare score
                    $courseActionScorePass = true;
                }
                break;
            case 'scorm':
                //compare mod time action mod id
                if ($courseStandardArray[$courseActionItemOne->id]['timeCheck']) {
                    //compare time
                    $courseActionTime = 0;
                    //setup action time
                    $scormID = $courseActionItemOne->iteminstance;
                    if ($scormTime = caculateScormTime($userID, $courseID, $scormID)) {
                        $courseActionTime = $scormTime;
                    }
                    //read action time standard
                    $courseActionTimeStandard = $courseStandardArray[$courseActionItemOne->id]['time'] ? $courseStandardArray[$courseActionItemOne->id]['time'] : "0";
                    $courseActionTimePass = $courseActionTime >= $courseActionTimeStandard ? true : false;
                } else {
                    //compare time
                    $courseActionTimePass = true;
                }
                //compare mod score action mod id
                if ($courseStandardArray[$courseActionItemOne->id]['scoreCheck']) {
                    //compare score
                    $courseActionScorePass = true;
                } else {
                    //compare score
                    $courseActionScorePass = true;
                }
                break;
        }
        $courseUserArray[$courseActionItemOne->id] = array('timePass' => $courseActionTimePass, 'scorePass' => $courseActionScorePass);
        //user pass array edit
        if (!($courseUserArray[$courseActionItemOne->id]['timePass'] and $courseUserArray[$courseActionItemOne->id]['scorePass'])) {
            return false;
        }
    }
    return true;
}
                $timeDifferent = getTimeDifferent($dateform);
                $courseUserLogData = produceUserCourseLog($userID, $courseID, $timeDifferent);
                $courseUserArray[$courseID] = produceCourseUserArray($userID, $courseID, $courseUserLogData, $userPass);
                $userPassArray[$courseID] = $userPass;
            } else {
                error(get_string('pleaseSelectRightCourseName6', 'block_report_module'));
            }
        }
    } else {
        $courses = reportmycoursesdata($userID);
        foreach ($courses as $theCourseID => $theCourseName) {
            if (get_course_students($theCourseID)) {
                //!the course no student
                if ($DB->get_record('reportmodule', array('courseid' => $theCourseID))) {
                    //!the course don't setup stardard
                    if ($courseActionItem = getCourseActionItem($theCourseID)) {
                        //!the course no action
                        $userPass = true;
                        $timeDifferent = getTimeDifferent($dateform);
                        $courseUserLogData = produceUserCourseLog($userID, $theCourseID, $timeDifferent);
                        $courseUserArray[$theCourseID] = produceCourseUserArray($userID, $theCourseID, $courseUserLogData, $userPass);
                        $userPassArray[$theCourseID] = $userPass;
                    }
                }
            }
        }
        if (!$courseUserArray) {
            error(get_string('allCourseUnsetup6', 'block_report_module'));
        }
    }
}
         echo $coursePassRate . "%";
     } else {
         echo get_string('pleaseSelectRightCourseName', 'block_report_module');
     }
 } else {
     $courses = coursesdata($categoryID);
     $courseUserPassArray = array();
     foreach ($courses as $courseID => $courseName) {
         if ($course = $DB->get_record('course', array('id' => $courseID))) {
             $tempErrorMessage = false;
             if (!($courseusers = get_course_students($courseID))) {
                 //echo '這門課程目前沒有學生參加!';
                 //exit;
                 $tempErrorMessage = true;
             }
             if (!($courseActionItem = getCourseActionItem($courseID))) {
                 //echo '課程未有活動!';
                 //exit;
                 $tempErrorMessage = true;
             }
             if (!($courseStandardArray = getReportModuleConfig($courseID))) {
                 //echo '課程尚未設定!';
                 //exit;
                 $tempErrorMessage = true;
             }
             if (!$tempErrorMessage) {
                 $userPassArray = array();
                 foreach ($courseusers as $theUserID => $theStudentObj) {
                     $courseUserLogData = produceUserCourseLog($theUserID, $courseID);
                     $userPassArray[$theUserID] = produceSimpleCourseUserArray($theUserID, $courseID, $courseUserLogData, $userPass);
                 }