function report($con, $rollno, $comp_name, $c_id, $from, $till, $type, $schedule, $holid, $chart, $p) { $comp_roll = $rollno; $query2 = "\n SELECT timestamp \n FROM attendance \n WHERE userid='{$rollno}'\tAND DATE(timestamp) BETWEEN '{$from}' AND '{$till}' \n\t\t\t\t\t\t"; $result2 = mysqli_query($con, $query2) or die("Error: " . mysqli_error($con)); //array storing student's TimeStamp in the entered window of $from and $till $ts = array(); while ($row2 = mysqli_fetch_array($result2)) { array_push($ts, $row2['timestamp']); } //length of array storing student's timestamp $ts_length = count($ts); //counter $i = 0; // Set timezone date_default_timezone_set('UTC'); // Start date $date = $from; // End date $end_date = $till; //finding total expected classes //outer loop goes from '$from' to '$till' //in each outer loop inner loop goes from '$ts[0]' to '$ts[$ts_length - 1] //if students entry time in '$ts' is between scheduled classes then assign present //no need to asssign absent because it has been done in initialized //holidays are considered while printing //so consider //1.scheduled class //2.extra class //3.cancel class while (strtotime($date) <= strtotime($end_date)) { $dt = new DateTime($date); $day = $dt->format('l'); //day $d = $dt->format('Y-m-d'); //date //counter $i = 0; //will enter the loop only if student is present at-least once while ($i < $ts_length) { $user_timestamp = date_create($ts[$i]); $user_date = date_format($user_timestamp, 'Y-m-d'); $user_time = date_format($user_timestamp, 'H:i:s'); //if only one class on this date //condition = count + date + start_time + finishing_time if ($schedule[$day][0] == 1 and $d == $user_date and $user_time >= $schedule[$day][1] and $user_time <= $schedule[$day][2]) { //in time range of class if (cancel_check($con, $d, $c_id, $schedule[$day][1], $schedule[$day][2])) { //if not cancelled then it's scheduled $chart[$d][5] = "Scheduled"; $chart[$d][6] = $user_time; $chart[$d][7] = "Present"; } else { //if cancelled $chart[$d][5] = "Cancel"; $chart[$d][6] = ""; $chart[$d][7] = ""; } } else { if ($schedule[$day][0] == 1 and $d == $user_date and $user_time <= $schedule[$day][1] || $user_time >= $schedule[$day][2]) { } } //if two classes on this date if ($schedule[$day][0] == 2) { //if first isn't cancelled if (cancel_check($con, $d, $c_id, $schedule[$day][1], $schedule[$day][2])) { if ($d == $user_date and $user_time >= $schedule[$day][1] and $user_time <= $schedule[$day][2]) { //if student entry time is in scheduled class timing $chart[$d][5] = "Scheduled"; $chart[$d][6] = $user_time; $chart[$d][7] = "Present"; } else { if ($d == $user_date and $user_time <= $schedule[$day][1] || $user_time >= $schedule[$day][2]) { } } } else { $chart[$d][5] = "Cancelled"; $chart[$d][6] = " "; $chart[$d][7] = " "; } //if second class of the day isn't cancelled if (cancel_check($con, $d, $c_id, $schedule[$day][3], $schedule[$day][4])) { //if user entry time is between scheduled class if ($d == $user_date and $user_time >= $schedule[$day][3] and $user_time <= $schedule[$day][4]) { $chart[$d][9][0][5] = "Scheduled"; $chart[$d][9][0][6] = $user_time; $chart[$d][9][0][7] = "Present"; } else { if ($d == $user_date and $user_time <= $schedule[$day][3] || $user_time >= $schedule[$day][4]) { } } } else { $chart[$d][9][0][5] = "Cancelled"; $chart[$d][9][0][6] = " "; $chart[$d][9][0][7] = " "; } } //if three classes on this date if ($schedule[$day][0] == 3) { //if first isn't cancelled if (cancel_check($con, $d, $c_id, $schedule[$day][1], $schedule[$day][2])) { if ($d == $user_date and $user_time >= $schedule[$day][1] and $user_time <= $schedule[$day][2]) { //if student entry time is in scheduled class timing $chart[$d][5] = "Scheduled"; $chart[$d][6] = $user_time; $chart[$d][7] = "Present"; } else { if ($d == $user_date and $user_time <= $schedule[$day][1] || $user_time >= $schedule[$day][2]) { } } } else { $chart[$d][5] = "Cancelled"; $chart[$d][6] = " "; $chart[$d][7] = " "; } //if second class of the day isn't cancelled if (cancel_check($con, $d, $c_id, $schedule[$day][3], $schedule[$day][4])) { //if user entry time is between scheduled class if ($d == $user_date and $user_time >= $schedule[$day][3] and $user_time <= $schedule[$day][4]) { $chart[$d][9][0][5] = "Scheduled"; $chart[$d][9][0][6] = $user_time; $chart[$d][9][0][7] = "Present"; } else { if ($d == $user_date and $user_time <= $schedule[$day][3] || $user_time >= $schedule[$day][4]) { } } } else { $chart[$d][9][0][5] = "Cancelled"; $chart[$d][9][0][6] = " "; $chart[$d][9][0][7] = " "; } //if third class of the day isn't cancelled if (cancel_check($con, $d, $c_id, $schedule[$day][6], $schedule[$day][7])) { //if user entry time is between scheduled class if ($d == $user_date and $user_time >= $schedule[$day][6] and $user_time <= $schedule[$day][7]) { $chart[$d][9][1][5] = "Scheduled"; $chart[$d][9][1][6] = $user_time; $chart[$d][9][1][7] = "Present"; } else { if ($d == $user_date and $user_time <= $schedule[$day][6] || $user_time >= $schedule[$day][7]) { } } } else { $chart[$d][9][1][5] = "Cancelled"; $chart[$d][9][1][6] = " "; $chart[$d][9][1][7] = " "; } } //checking for extra classes //add to chart and also decide present or absent $query = "\n SELECT time1_start , time1_end\n FROM alter_class \n WHERE course_id='{$c_id}' AND date='{$d}' AND type='E'\n\t\t\t\t\t\t"; $result = mysqli_query($con, $query) or die("Error: " . mysqli_error($con)); $extra = array(); $count = 0; $chart[$d][8] = 0; while ($row = mysqli_fetch_array($result)) { $chart2[$d][0] = $d; $chart2[$d][1] = $day; $chart2[$d][2] = $row['time1_start']; $chart2[$d][3] = $row['time1_end']; $chart2[$d][4] = "Extra"; $chart2[$d][5] = ""; $chart2[$d][6] = "Absent"; if ($user_time >= $row['time1_start'] and $user_time <= $row['time1_end']) { $chart2[$d][5] = $user_time; $chart2[$d][6] = "Present"; } $extra[$count] = array($chart2[$d][0], $chart2[$d][1], $chart2[$d][2], $chart2[$d][3], $chart2[$d][4], $chart2[$d][5], $chart2[$d][6]); $count = $count + 1; } $chart[$d][10] = $extra; $chart[$d][8] = $count; //next index of $ts[] $i = $i + 1; } //end of inner while loop //for those students whose $ts_length=0 //chart has been initialized as absent for all scheduled class //so add information about only extra classes now if ($ts_length == 0) { //checking for extra classes $query1 = "\n SELECT time1_start , time1_end\n FROM alter_class \n WHERE course_id='{$c_id}' AND date='{$d}' AND type='E'\n\t\t\t\t\t\t"; $result1 = mysqli_query($con, $query1) or die("Error: " . mysqli_error($con)); $extraaa = array(); $counttt = 0; $chart[$d][8] = 0; while ($row = mysqli_fetch_array($result1)) { $chart[$d][8] = 1; $chart2[$d][0] = $d; $chart2[$d][1] = $day; $chart2[$d][2] = $row['time1_start']; $chart2[$d][3] = $row['time1_end']; $chart2[$d][4] = "Extra"; $chart2[$d][5] = ""; $chart2[$d][6] = "Absent"; $extraaa[$counttt] = array($chart2[$d][0], $chart2[$d][1], $chart2[$d][2], $chart2[$d][3], $chart2[$d][4], $chart2[$d][5], $chart2[$d][6]); $counttt = $counttt + 1; } $chart[$d][10] = $extraaa; $chart[$d][8] = $counttt; } //end of ts=0 condition $date = date("Y-m-d", strtotime("+1 day", strtotime($date))); } //outer while loop ends //if user wanted to export this data //variable $_SESSION['Export'] has been set in class_attend file in if(array_exist(export)) if ($_SESSION['Export'] != "Yes") { print_chart($chart, $from, $till, $type, $holid, $comp_name, $comp_roll, $p); } else { export($chart, $from, $till, $type, $holid, $comp_name, $comp_roll, $p); } }
function report($con, $rollno, $c_id, $from, $till, $type, $schedule) { //intialize holiday array //$holid[date] = 1 if holiday or else 0 $holid = array(); $holid = initialize_holid($holid, $from, $till, $con); //$schedule = array(); //$schedule = get_schedule($schedule, $c_id, $con); /* //setting default schedule //setting all values to 00:00:00 //$schedule = array(); //$schedule = initialize_schedule($schedule); //query for expected scheduling and extra classes $query1 = " SELECT count , time1_start , time1_end , time2_start , time2_end , day FROM course_schedule WHERE course_id = '$c_id' "; $result1 = mysqli_query($con, $query1) or die("Error: " . mysqli_error($con)); //scheduled is day wise //so following thing have been saved //0 - count - how many classes ? //1 - time1_start //2 - time1_end //3 - time2_start //4 - time2_end //5 - day while ($row1 = mysqli_fetch_array($result1)) { $schedule[$row1['day']] = array($row1['count'], $row1['time1_start'], $row1['time1_end'], $row1['time2_start'], $row1['time2_end'], $row1['day']); }//scheduled array for all scheduled slots in week stored */ //setting up the chart table //actual report $chart = array(); $chart1 = array(); $chart2 = array(); //chart_initialize $chart = initialize_chart($chart, $chart1, $schedule, $from, $till, $con, $c_id); //timestamp of student in then given interval (independent of all courses) $query2 = "\n\t\t\t\t\t\tSELECT timestamp \n\t\t\t\t\t\tFROM attendance \n\t\t\t\t\t\tWHERE userid='{$rollno}'\tAND DATE(timestamp) BETWEEN '{$from}' AND '{$till}' \n\t\t\t\t\t\t"; $result2 = mysqli_query($con, $query2) or die("Error: " . mysqli_error($con)); //array storing student's timestamp $ts = array(); while ($row2 = mysqli_fetch_array($result2)) { array_push($ts, $row2['timestamp']); } //length of array storing student's timestamp $ts_length = count($ts); echo "ts - {$ts_length}<br>"; //counter $i = 0; // Set timezone date_default_timezone_set('UTC'); // Start date $date = $from; // End date $end_date = $till; //finding total expected classes while (strtotime($date) <= strtotime($end_date)) { //outer loop goes from '$from' to '$till' checking for classes and timestamp in $ts //in ech outer loop inner loop goes from '$ts[0]' to '$ts[$ts_length - 1] //if students entry time in '$ts' is between scheduled classes then assign present $dt = new DateTime($date); $day = $dt->format('l'); //day $d = $dt->format('Y-m-d'); //date //counter $i = 0; //will enter the loop only if student is present atleast once while ($i < $ts_length) { $user_timestamp = date_create($ts[$i]); $user_date = date_format($user_timestamp, 'Y-m-d'); $user_time = date_format($user_timestamp, 'H:i:s'); //if only one class on this date //condition = count + date + start_time + finishing_time if ($schedule[$day][0] == 1 and $d == $user_date and $user_time >= $schedule[$day][1] and $user_time <= $schedule[$day][2]) { //in time range of class if (cancel_check($con, $d, $c_id, $schedule[$day][1], $schedule[$day][2])) { //if not cancelled then it's scheduled $chart[$d][5] = "Scheduled"; $chart[$d][6] = $user_time; $chart[$d][7] = "Present"; } else { //if cancelled $chart[$d][5] = "Cancel"; $chart[$d][6] = ""; $chart[$d][7] = ""; } } else { if ($schedule[$day][0] == 1 and $d == $user_date and $user_time <= $schedule[$day][1] || $user_time >= $schedule[$day][2]) { } } //if two classes on this date if ($schedule[$day][0] == 2) { //if first isn't cancelled if (cancel_check($con, $d, $c_id, $schedule[$day][1], $schedule[$day][2])) { if ($d == $user_date and $user_time >= $schedule[$day][1] and $user_time <= $schedule[$day][2]) { //if student entry time is in scheduled class timing $chart[$d][5] = "Scheduled"; $chart[$d][6] = $user_time; $chart[$d][7] = "Present"; } else { if ($d == $user_date and $user_time <= $schedule[$day][1] || $user_time >= $schedule[$day][2]) { } } } else { $chart[$d][5] = "Cancelled"; $chart[$d][6] = " "; $chart[$d][7] = " "; } //if second class of the day isn't cancelled if (cancel_check($con, $d, $c_id, $schedule[$day][3], $schedule[$day][4])) { //if user entry time is between scheduled class if ($d == $user_date and $user_time >= $schedule[$day][3] and $user_time <= $schedule[$day][4]) { $chart[$d][9][5] = "Scheduled"; $chart[$d][9][6] = $user_time; $chart[$d][9][7] = "Present"; } else { if ($d == $user_date and $user_time <= $schedule[$day][3] || $user_time >= $schedule[$day][4]) { } } } else { $chart[$d][9][5] = "Cancelled"; $chart[$d][9][6] = " "; $chart[$d][9][7] = " "; } } //checking for extra classes $query = "\n SELECT time1_start , time1_end\n FROM alter_class \n WHERE course_id='{$c_id}' AND date='{$d}' AND type='E'\n\t\t\t"; $result = mysqli_query($con, $query) or die("Error: " . mysqli_error($con)); while ($row = mysqli_fetch_array($result)) { $chart[$d][8] = 1; $chart2[$d][0] = $d; $chart2[$d][1] = $day; $chart2[$d][2] = $row['time1_start']; $chart2[$d][3] = $row['time1_end']; $chart2[$d][4] = "Extra"; $chart2[$d][5] = ""; $chart2[$d][6] = "Absent"; if ($user_time >= $row['time1_start'] and $user_time <= $row['time1_end']) { $chart2[$d][5] = $user_time; $chart2[$d][6] = "Present"; } $chart[$d][10] = array($chart2[$d][0], $chart2[$d][1], $chart2[$d][2], $chart2[$d][3], $chart2[$d][4], $chart2[$d][5], $chart2[$d][6]); } //next index of $ts[] $i = $i + 1; } //checking for extra finished //for those students whose $ts_length=0 if ($ts_length == 0) { //checking for extra classes $query1 = "\n SELECT time1_start , time1_end\n FROM alter_class \n WHERE course_id='{$c_id}' AND date='{$d}' AND type='E'\n\t\t\t"; $result1 = mysqli_query($con, $query1) or die("Error: " . mysqli_error($con)); while ($row = mysqli_fetch_array($result1)) { $chart[$d][8] = 1; $chart2[$d][0] = $d; $chart2[$d][1] = $day; $chart2[$d][2] = $row['time1_start']; $chart2[$d][3] = $row['time1_end']; $chart2[$d][4] = "Extra"; $chart2[$d][5] = ""; $chart2[$d][6] = "Absent"; $chart[$d][10] = array($chart2[$d][0], $chart2[$d][1], $chart2[$d][2], $chart2[$d][3], $chart2[$d][4], $chart2[$d][5], $chart2[$d][6]); } } $date = date("Y-m-d", strtotime("+1 day", strtotime($date))); } //while loop ends print_chart($chart, $from, $till, $type, $holid); }