protected function cheating_core($from_secord, $to_secord) { #$period_secord > 3600s, 1h. #$stepNum for now 60, never > 100. #so, $step_secord > 36s. $stepNum = Variables::getStepNum(); $period_secord = $from_secord - $to_secord; $step_secord = (int) ($period_secord / $stepNum); $now = time(); #_tp means time point. $beforebefore_tp = $now - $from_secord; $before_tp = $now - $to_secord; $res = Variables::chartjs_line_four_inited_with_time($beforebefore_tp, $step_secord, $stepNum, 'try', 'fine', 'cheating', 'other'); $tasks = Task::period3($beforebefore_tp, $before_tp, 4); $cheatings = array(); foreach ($tasks as $tk) { #$task_tp = $tk['time']; #$task_code = $tk['code']; #$task_zid = $tk['zid']; $task_tp = $tk->time; $task_code = $tk->code; $task_zid = $tk->zid; $i = (int) (($task_tp - $beforebefore_tp) / $step_secord); if ($i == $stepNum) { $i -= 1; } if ($task_code == -1) { $res['datasets'][0]['data'][$i] += 1; } elseif ($task_code == 0) { $res['datasets'][1]['data'][$i] += 1; } elseif ($task_code == 1) { $res['datasets'][2]['data'][$i] += 1; $cheatings[] = $task_zid; } else { $res['datasets'][3]['data'][$i] += 1; } } $res = json_encode($res); $url = action('TaskController@ccstep', ['']); return compact('res', 'from_secord', 'to_secord', 'url', 'cheatings'); }