'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 '';
}
echo '';
echo ''.get_string('attendreport','block_autoattend');
if (!$printing) {
echo helpbutton('studentview', get_string('attendreport','block_autoattend'),
'block_autoattend', true, false, '', true);
}
echo ' | ';
echo '
';
echo '';
if (!$printing) {
echo '';
print_user_picture($user->id, $course->id, $user->picture, true);
echo ' | ';
}
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;?> |
|
';
echo ' |
';
echo '
';
}
}
//
// 個人のサマリーを返す 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");
}
?>