'Sun','1'=>'Mon','2'=>'Tue','3'=>'Wed','4'=>'Thu','5'=>'Fri','6'=>'Sat'); // // データのダウンロード Excel or Text // function autoattend_download($courseid, $format, $attsid='all') { global $CFG; require_once("../../lib/excel/Worksheet.php"); require_once("../../lib/excel/Workbook.php"); //check for individual session if($attsid != 'all') { $indsess = ' and id='.$attsid; } else { $indsess = ''; } // $module = autoattend_to_localcode(get_string('autoattend','block_autoattend')); if($format == 'xls') { header("Content-type: application/vnd.ms-excel"); $downloadfilename = $module; header("Content-Disposition: attachment; filename=\"$downloadfilename.xls\""); /// Creating a workbook $workbook = new Workbook("-"); $myxls =& $workbook->add_worksheet($module); //define column heading $i = 0; if ($CFG->fullnamedisplay == 'lastname firstname') { $myxls->write_string(0, $i++, autoattend_to_localcode(get_string('lastname'))); $myxls->write_string(0, $i++, autoattend_to_localcode(get_string('firstname'))); } else { $myxls->write_string(0, $i++, autoattend_to_localcode(get_string('firstname'))); $myxls->write_string(0, $i++, autoattend_to_localcode(get_string('lastname'))); } $myxls->write_string(0, $i++, autoattend_to_localcode(get_string('Cstatefull', 'block_autoattend'))); $myxls->write_string(0, $i++, autoattend_to_localcode(get_string('Pacronymfull', 'block_autoattend'))); $myxls->write_string(0, $i++, autoattend_to_localcode(get_string('Xacronymfull', 'block_autoattend'))); $myxls->write_string(0, $i++, autoattend_to_localcode(get_string('Lacronymfull', 'block_autoattend'))); $myxls->write_string(0, $i++, autoattend_to_localcode(get_string('Eacronymfull', 'block_autoattend'))); $myxls->write_string(0, $i++, autoattend_to_localcode(get_string('attendpercent','block_autoattend'))); $myxls->write_string(0, $i++, autoattend_to_localcode(get_string('attendgrade', 'block_autoattend'))); $qry = "select * from {$CFG->prefix}autoattend_sessions where courseid=".$courseid.$indsess. " and state='C' order by sessdate, starttime asc"; $courseses = array(); if ($sess = get_records_sql($qry)) { foreach($sess as $id=>$dsess) { $myxls->write_string(0,$i++,strftime(get_string('strftimedmy','block_autoattend'),$dsess->sessdate)); $courseses[] = $dsess->id; } } /// Print all the lines of data. $i = 1; $j = 0; $students = get_course_students($courseid); foreach($students as $userid=>$student) { $j = 0; if ($CFG->fullnamedisplay == 'lastname firstname') { $myxls->write_string($i, $j++, autoattend_to_localcode($student->lastname)); $myxls->write_string($i, $j++, autoattend_to_localcode($student->firstname)); } else { $myxls->write_string($i, $j++, autoattend_to_localcode($student->firstname)); $myxls->write_string($i, $j++, autoattend_to_localcode($student->lastname)); } $summary = autoattend_get_usersummary($courseid, $student->id); $myxls->write_string($i, $j++, $summary['complete']); $myxls->write_string($i, $j++, $summary['P']); $myxls->write_string($i, $j++, $summary['X']); $myxls->write_string($i, $j++, $summary['L']); $myxls->write_string($i, $j++, $summary['E']); $myxls->write_string($i, $j++, $summary['percent']); $myxls->write_string($i, $j++, $summary['grade']); foreach ($courseses as $sid) { if ($rec = get_record('autoattend_students', 'attsid', $sid, 'studentid', $student->id)) { $desc = autoattend_to_localcode(get_string($rec->status.'acronymfull','block_autoattend')); $myxls->write_string($i, $j++ ,$desc); } else { $myxls->write_string($i,$j++,'-'); } } $i++; } $workbook->close(); } else if($format == 'txt') { header("Content-Type: application/download\n"); $downloadfilename = $module; header("Content-Disposition: attachment; filename=\"$downloadfilename.txt\""); /// Print names of all the fields if ($CFG->fullnamedisplay == 'lastname firstname') { echo autoattend_to_localcode(get_string('lastname'))."\t"; echo autoattend_to_localcode(get_string('firstname'))."\t"; } else { echo autoattend_to_localcode(get_string('firstname'))."\t"; echo autoattend_to_localcode(get_string('lastname'))."\t"; } echo autoattend_to_localcode(get_string('Cstatefull', 'block_autoattend'))."\t"; echo autoattend_to_localcode(get_string('Pacronymfull', 'block_autoattend'))."\t"; echo autoattend_to_localcode(get_string('Xacronymfull', 'block_autoattend'))."\t"; echo autoattend_to_localcode(get_string('Lacronymfull', 'block_autoattend'))."\t"; echo autoattend_to_localcode(get_string('Eacronymfull', 'block_autoattend'))."\t"; echo autoattend_to_localcode(get_string('attendpercent','block_autoattend'))."\t"; echo autoattend_to_localcode(get_string('attendgrade', 'block_autoattend'))."\t"; $qry = "select * from {$CFG->prefix}autoattend_sessions where courseid=".$courseid.$indsess. " and state='C' order by sessdate, starttime asc"; $courseses = array(); if ($sess = get_records_sql($qry)) { foreach($sess as $id=>$dsess) { echo strftime(get_string('strftimedmy', 'block_autoattend'),$dsess->sessdate)."\t"; $courseses[] = $dsess->id; } echo "\r\n"; } $students = get_course_students($courseid); foreach($students as $userid=>$student) { $summary = autoattend_get_usersummary($courseid, $student->id); $settings = $summary['settings']; if ($CFG->fullnamedisplay == 'lastname firstname') { echo autoattend_to_localcode($student->lastname). "\t"; echo autoattend_to_localcode($student->firstname)."\t"; } else { echo autoattend_to_localcode($student->firstname)."\t"; echo autoattend_to_localcode($student->lastname). "\t"; } echo $summary['complete']."\t"; echo $summary['P']."\t"; echo $summary['X']."\t"; echo $summary['L']."\t"; echo $summary['E']."\t"; echo $summary['percent']."\t"; echo $summary['grade']."\t"; foreach ($courseses as $sid) { if ($rec = get_record('autoattend_students', 'attsid', $sid, 'studentid', $student->id)) { echo autoattend_to_localcode(get_string($rec->status.'acronymfull','block_autoattend'))."\t"; } else { echo "-\t"; } } echo "\r\n"; } } exit(); } // getting settings for course function autoattend_get_settings($courseid) { if (!$result = get_records('autoattend_settings', 'courseid', $courseid, 'id')) { $result = get_records('autoattend_settings', 'courseid', 0); // use default } $settings = array(); foreach ($result as $res) { $settings[$res->status] = $res; } return $settings; } // 出席や欠席の回数を返す function autoattend_get_status_num($userid, $courseid, $status) { global $CFG; $qry = "select count(*) as cnt from {$CFG->prefix}autoattend_students std ,{$CFG->prefix}autoattend_sessions ses where std.attsid = ses.id and ses.courseid = ".$courseid ." and std.studentid = ".$userid. " and std.status = '".$status."'"; $data = get_record_sql($qry); return $data->cnt; } // 出席点を返す function autoattend_get_grade($userid, $courseid) { if (!$vars = get_records('autoattend_settings', 'courseid', $courseid, 'id')) { $vars = get_records('autoattend_settings', 'courseid', 0); // use default } $grade = 0; foreach ($vars as $setting) { $count = autoattend_get_status_num($userid,$courseid, $setting->status); $grade = $grade + $count * $setting->grade; } return $grade; } // そのコースの現在の最高出席点を返す function autoattend_get_maxgrade($courseid) { if (!$vars = get_records('autoattend_settings', 'courseid', $courseid, 'id')) { $vars = get_records('autoattend_settings', 'courseid', 0); // use defaut } foreach ($vars as $setting) { $point[$setting->status] = $setting->grade; } $max = max($point); $maxgrade = 0; if ($sescount = count_records_select('autoattend_sessions', "courseid=$courseid AND state<>'N'")) { $maxgrade = $max * $sescount; } return $maxgrade; } // 出席率を返す function autoattend_get_percent($userid, $courseid) { if (!$vars = get_records('autoattend_settings', 'courseid', $courseid, 'id')) { $vars = get_records('autoattend_settings', 'courseid', 0); // use default } foreach ($vars as $setting) { $point[$setting->status] = $setting->grade; } $max = max($point); $maxgrade = 0; if ($sescount = count_records_select('autoattend_sessions', "courseid=$courseid AND state<>'N'")) { $maxgrade = $max * $sescount; } $grade = 0; foreach ($vars as $setting) { $count = autoattend_get_status_num($userid,$courseid, $setting->status); $grade = $grade + $count * $setting->grade; } if ($maxgrade == 0) { return 0; } else { return 100 * $grade / $maxgrade; } } function autoattend_set_current_view($courseid, $view) { global $SESSION; return $SESSION->currentattview[$courseid] = $view; } function autoattend_get_current_view($courseid) { global $SESSION; if (isset($SESSION->currentattview[$courseid])) { return $SESSION->currentattview[$courseid]; } else { return 'all'; } } function autoattend_print_row($left, $right) { echo "\n$left $right\n"; } // // 1ユーザの出欠レポートを表示する // function autoattend_print_user($user, $course, $printing = null) { $summary = autoattend_get_usersummary($course->id, $user->id); if(!$summary) { notice(get_string('attendnotstarted','block_autoattend')); } else { $complete = $summary['complete']; $percent = $summary['percent'].' %'; $grade = $summary['grade']; $maxgrade = $summary['maxgrade']; $settings = $summary['settings']; if (!$printing) { echo ''; echo ''; echo ''; echo ''; } else { echo '
'. "id}&student={$user->id} &printing=yes\" target=\"_blank\">[". get_string('versionforprinting','block_autoattend').']
'; } echo ''; echo ''; echo ''; echo ''; if (!$printing) { echo ''; } echo ''; echo ''; echo '

'.get_string('attendreport','block_autoattend'); if (!$printing) { echo helpbutton('studentview', get_string('attendreport','block_autoattend'), 'block_autoattend', true, false, '', true); } echo '

'; print_user_picture($user->id, $course->id, $user->picture, true); echo ''; echo ''.fullname($user, isteacher($course->id)).'
'; echo ''; autoattend_print_row(get_string('sessionscompleted','block_autoattend').':', "$complete"); foreach($settings as $set) { $desc = get_string($set->status.'acronymfull', 'block_autoattend'); autoattend_print_row($desc.': ', ''.$summary[$set->status].''); } autoattend_print_row(get_string('attendpercent','block_autoattend').':', "$percent"); autoattend_print_row(get_string('attendgrade','block_autoattend').':', "$grade / $maxgrade"); autoattend_print_row(' ', ' '); echo '
'; if (isteacher($course->id) && !$printing) { ?>
#
sessdate);?>
starttime);?>
endtime);?>
status.'acronymfull','block_autoattend');?>
'.get_string($att->called.'methodfull', "block_autoattend");?>
remarks;?>
 
'; } } // // 個人のサマリーを返す by Fumi.Iseki // attitems, complete, percent, grade, maxgrade, settings, P, X, L, E, Y // function autoattend_get_usersummary($courseid, $userid) { global $CFG; $stqry = "select * from {$CFG->prefix}autoattend_students std, {$CFG->prefix}autoattend_sessions ses where attsid=ses.id and ses.courseid=$courseid and std.studentid=$userid order by sessdate,starttime asc"; $attitems = get_records_sql($stqry); if (!$attitems) return false; $summary = array(); $summary['userid'] = $userid; $summary['courseid'] = $courseid; $summary['attitems'] = $attitems; $complete = 0; if ($attitems) { foreach($attitems as $att) { if ($att->status!='Y') $complete++; } } $summary['complete'] = $complete; $summary['settings'] = autoattend_get_settings($course->id); foreach($summary['settings'] as $set) { $summary[$set->status] = 0; foreach($summary['attitems'] as $att) { if ($set->status==$att->status) $summary[$set->status]++; } } $maxpoint = 0; $grade = 0; foreach($summary['settings'] as $set) { $maxpoint = $maxpoint >= $set->grade ? $maxpoint : $set->grade; $grade += $set->grade * $summary[$set->status]; } $maxgrade = 0; if ($sescount = count_records_select('autoattend_sessions', "courseid=$courseid AND state<>'N'")) { $maxgrade = $maxpoint * $sescount; } if ($maxgrade!=0) $percent = sprintf("%0.1f", 100*$grade/$maxgrade); else $percent = 0.0; $summary['grade'] = $grade; $summary['maxgrade'] = $maxgrade; $summary['percent'] = $percent; return $summary; } // from UTF-8 to Local Character Code // Edit this function for your character code!! // by Fumi.Iseki function autoattend_to_localcode($message) { return mb_convert_encoding($message, "SJIS", "auto"); } ?>