libdir.'/blocklib.php'); require_once('locallib.php'); define('USER_SMALL_CLASS', 20); // Below this is considered small define('USER_LARGE_CLASS', 200); // Above this is considered large define('DEFAULT_PAGE_SIZE', 20); $id = required_param('id', PARAM_INT); $group = optional_param('group', -1, PARAM_INT); // Group to show $view = optional_param('view', 'weeks', PARAM_ALPHA); // which page to show $current = optional_param('current', 0, PARAM_INT); $sort = optional_param('sort', 'lastname', PARAM_ALPHA); if ($id) { if (! $cm = get_record('course_modules', 'id', $id)) { error('Course Module ID was incorrect'); } if (! $course = get_record('course', 'id', $cm->course)) { error('Course is misconfigured'); } if (! $attforblock = get_record('attforblock', 'id', $cm->instance)) { error("Course module is incorrect"); } } require_login($course->id); if (! $user = get_record('user', 'id', $USER->id) ) { error("No such user in this course"); } if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { print_error('badcontext'); } require_capability('mod/attforblock:viewreports', $context); //add info to log add_to_log($course->id, 'attendance', 'report displayed', 'mod/attforblock/report.php?id='.$id, $user->lastname.' '.$user->firstname); /// Print headers $navlinks[] = array('name' => $attforblock->name, 'link' => "view.php?id=$id", 'type' => 'activity'); $navlinks[] = array('name' => get_string('report', 'attforblock'), 'link' => null, 'type' => 'activityinstance'); $navigation = build_navigation($navlinks); print_header("$course->shortname: ".$attforblock->name.' - ' .get_string('report','attforblock'), $course->fullname, $navigation, "", "", true, " ", navmenu($course)); show_tabs($cm, $context, 'report'); $sort = $sort == 'firstname' ? 'firstname' : 'lastname'; if(!count_records('attendance_sessions', 'courseid', $course->id)) { // no session exists for this course redirect("sessions.php?id=$cm->id&action=add"); } else { // display attendance report /// find out current groups mode $groupmode = groups_get_activity_groupmode($cm); $currentgroup = groups_get_activity_group($cm, true); if ($groupmode == VISIBLEGROUPS || ($groupmode && has_capability('moodle/site:accessallgroups', $context))) { groups_print_activity_menu($cm, "report.php?id=$id&sort=$sort"); } echo '
'.helpbutton ('report', get_string('help'), 'attforblock', true, true, '', true).'
'; if ($currentgroup) { $students = get_users_by_capability($context, 'moodle/legacy:student', '', "u.$sort ASC", '', '', $currentgroup, '', false); } else { $students = get_users_by_capability($context, 'moodle/legacy:student', '', "u.$sort ASC", '', '', '', '', false); } // display date interval selector $rec = get_record_sql("SELECT MIN(sessdate) AS min, MAX(sessdate) AS max FROM {$CFG->prefix}attendance_sessions WHERE courseid=$course->id AND sessdate >= $course->startdate"); $firstdate = $rec->min; $lastdate = $rec->max; $now = time(); $current = $current == 0 ? $now : $current; list(,,,$wday, $syear, $smonth, $sday) = array_values(usergetdate($firstdate)); $wday = $wday == 0 ? 7 : $wday; //////////////////////////////////////////////////// Нужна проверка настройки календаря $startdate = make_timestamp($syear, $smonth, $sday-$wday+1); //GMT timestamp but for local midnight of monday $options['all'] = get_string('alltaken','attforblock'); $options['weeks'] = get_string('weeks','attforblock'); $options['months'] = get_string('months','attforblock'); echo '
'.helpbutton ('display', get_string('display','attforblock'), 'attforblock', true, false, '', true).get_string('display','attforblock').': '; if (isset($_GET['view'])) //{ set_current_view($course->id, $_GET['view']); $view = get_current_view($course->id); popup_form("report.php?id=$id&sort=$sort&view=", $options, 'viewmenu', $view, ''); $out = ''; $list = array(); if ($view === 'weeks') { $format = get_string('strftimedm', 'attforblock'); for ($i = 0, $monday = $startdate; $monday <= $lastdate; $i++, $monday += ONE_WEEK) { if (count_records_select('attendance_sessions', "courseid={$course->id} AND sessdate >= ".$monday." AND sessdate < ".($monday + ONE_WEEK))) { $list[] = $monday; } } } elseif ($view === 'months') { $startdate = make_timestamp($syear, $smonth, 1); $format = '%B'; for ($i = 0, $month = $startdate; $month <= $lastdate; $i++, $month = make_timestamp($syear, $smonth+$i, 1)) { if (count_records_select('attendance_sessions', "courseid={$course->id} AND sessdate >= ".$month." AND sessdate < ".make_timestamp($syear, $smonth+$i+1, 1))) { $list[] = $month; } } } $found = false; for ($i = count($list)-1; $i >= 0; $i--) { if ($list[$i] <= $current && !$found) { $found = true; $current = $list[$i]; $out = ''.userdate($list[$i], $format).' / '.$out; } else { $out = "\n".userdate($list[$i], $format)." / ".$out; } } echo substr($out, 0, -2)."
\n"; $statuses = get_statuses($course->id); $allstatuses = get_statuses($course->id, false); if ($view === 'weeks') { $where = "courseid={$course->id} AND sessdate >= $course->startdate AND sessdate >= $current AND sessdate < ".($current + ONE_WEEK); } elseif ($view === 'months') { list(,,,, $syear, $smonth, $sday) = array_values(usergetdate($current)); $where = "courseid={$course->id} AND sessdate >= $course->startdate AND sessdate >= $current AND sessdate < ".make_timestamp($syear, $smonth+1, 1); } else { $where = "courseid={$course->id} AND sessdate >= $course->startdate AND sessdate <= ".time(); } if ($students and ($course_sess = get_records_select('attendance_sessions', $where, 'sessdate ASC'))) { $firstname = "".get_string('firstname').''; $lastname = "".get_string('lastname').''; if ($CFG->fullnamedisplay == 'lastname firstname') { // for better view (dlnsk) $fullnamehead = "$lastname / $firstname"; } else { $fullnamehead = "$firstname / $lastname"; } $table->head[] = ''; $table->align[] = ''; $table->size[] = '1px'; $table->head[] = $fullnamehead; $table->align[] = 'left'; $table->size[] = ''; $allowtake = has_capability('mod/attforblock:takeattendances', $context); $allowchange = has_capability('mod/attforblock:changeattendances', $context); foreach($course_sess as $sessdata) { if (count_records('attendance_log', 'sessionid', $sessdata->id)) { if ($allowchange) { $table->head[] = "id}\">". userdate($sessdata->sessdate, get_string('strftimedm', 'attforblock').'
('.get_string('strftimehm', 'attforblock').')'). '
'; } else { $table->head[] = userdate($sessdata->sessdate, get_string('strftimedm', 'attforblock').'
('.get_string('strftimehm', 'attforblock').')'); } } else { if ($allowtake) { $table->head[] = "id}\">". userdate($sessdata->sessdate, get_string('strftimedm', 'attforblock').'
('.get_string('strftimehm', 'attforblock').')'). '
'; } else { $table->head[] = userdate($sessdata->sessdate, get_string('strftimedm', 'attforblock').'
('.get_string('strftimehm', 'attforblock').')'); } } $table->align[] = 'center'; $table->size[] = '1px'; } for ($i=0; $i<5; $i++) { $table->align[] = 'center'; $table->size[] = '1px'; } foreach($statuses as $st) { $table->head[] = $st->acronym; } $table->head[] = get_string('grade');//.' / '.$maxgrade; $table->align[] = 'right'; $table->size[] = '1px'; $table->head[] = '%'; foreach($students as $student) { $table->data[$student->id][] = print_user_picture($student->id, $course->id, $student->picture, 20, true, true); $table->data[$student->id][] = "id}\">".fullname($student).''; foreach($course_sess as $sessdata) { if ($att = get_record('attendance_log', 'sessionid', $sessdata->id, 'studentid', $student->id)) { if (isset($statuses[$att->statusid])) { $table->data[$student->id][] = $statuses[$att->statusid]->acronym; } else { $table->data[$student->id][] = ''.$allstatuses[$att->statusid]->acronym.''; } } else { $table->data[$student->id][] = '-'; } } foreach($statuses as $st) { $table->data[$student->id][] = get_attendance($student->id, $course, $st->id); } $table->data[$student->id][] = get_grade($student->id, $course).' / '.get_maxgrade($student->id, $course); $table->data[$student->id][] = get_percent($student->id, $course).'%'; } echo '
'; print_table($table); } else { print_heading(get_string('nothingtodisplay'), 'center'); } echo get_string('status','attforblock').':
'; foreach($statuses as $st) { echo $st->acronym.' - '.$st->description.'
'; } } print_footer($course); exit; ?>