version 1.59, 2001/09/01 20:38:52
|
version 1.72, 2001/10/22 15:03:22
|
Line 6
|
Line 6
|
# 01/01/01,02/01,03/01,19/01,20/01,22/01, |
# 01/01/01,02/01,03/01,19/01,20/01,22/01, |
# 03/05,03/08,03/10,03/12,03/13,03/15,03/17, |
# 03/05,03/08,03/10,03/12,03/13,03/15,03/17, |
# 03/19,03/20,03/21,03/27,04/05,04/09, |
# 03/19,03/20,03/21,03/27,04/05,04/09, |
# 07/09,07/14,07/21,09/01 Gerd Kortemeyer |
# 07/09,07/14,07/21,09/01,09/10,9/11,9/12,9/13,9/14,9/17, |
|
# 10/16,10/17,10/20 Gerd Kortemeyer |
|
|
package Apache::lonspreadsheet; |
package Apache::lonspreadsheet; |
|
|
Line 670 sub rown {
|
Line 671 sub rown {
|
my ($safeeval,$n)=@_; |
my ($safeeval,$n)=@_; |
my $defaultbg; |
my $defaultbg; |
my $rowdata=''; |
my $rowdata=''; |
|
my $dataflag=0; |
unless ($n eq '-') { |
unless ($n eq '-') { |
$defaultbg=((($n-1)/5)==int(($n-1)/5))?'#E0E0':'#FFFF'; |
$defaultbg=((($n-1)/5)==int(($n-1)/5))?'#E0E0':'#FFFF'; |
} else { |
} else { |
$defaultbg='#E0FF'; |
$defaultbg='#E0FF'; |
} |
} |
if ((($n-1)/25)==int(($n-1)/25)) { |
unless ($ENV{'form.showcsv'}) { |
my $what='Student'; |
$rowdata.="\n<tr><td><b><font size=+1>$n</font></b></td>"; |
if (&gettype($safeeval) eq 'assesscalc') { |
} else { |
$what='Item'; |
$rowdata.="\n".'"'.$n.'"'; |
} elsif (&gettype($safeeval) eq 'studentcalc') { |
|
$what='Assessment'; |
|
} |
|
$rowdata.="</table>\n<br><table border=2>". |
|
'<tr><td> <td>'.$what.'</td>'; |
|
map { |
|
$rowdata.='<td>'.$_.'</td>'; |
|
} ('A','B','C','D','E','F','G','H','I','J','K','L','M', |
|
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', |
|
'a','b','c','d','e','f','g','h','i','j','k','l','m', |
|
'n','o','p','q','r','s','t','u','v','w','x','y','z'); |
|
$rowdata.='</tr>'; |
|
} |
} |
$rowdata.="\n<tr><td><b><font size=+1>$n</font></b></td>"; |
|
my $showf=0; |
my $showf=0; |
my $proc; |
my $proc; |
my $maxred; |
my $maxred; |
if (&gettype($safeeval) eq 'studentcalc') { |
my $sheettype=&gettype($safeeval); |
|
if ($sheettype eq 'studentcalc') { |
$proc='&outrowassess'; |
$proc='&outrowassess'; |
$maxred=26; |
$maxred=26; |
} else { |
} else { |
$proc='&outrow'; |
$proc='&outrow'; |
} |
} |
if (&gettype($safeeval) eq 'assesscalc') { |
if ($sheettype eq 'assesscalc') { |
$maxred=1; |
$maxred=1; |
} else { |
} else { |
$maxred=26; |
$maxred=26; |
} |
} |
if ($n eq '-') { $proc='&templaterow'; $n=-1; } |
if ($n eq '-') { $proc='&templaterow'; $n=-1; $dataflag=1; } |
map { |
map { |
my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD'); |
my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD'); |
my ($fm,$vl)=split(/\_\_\_eq\_\_\_/,$_); |
my ($fm,$vl)=split(/\_\_\_eq\_\_\_/,$_); |
|
if ((($vl ne '') || ($vl eq '0')) && |
|
(($showf==1) || ($sheettype ne 'studentcalc'))) { $dataflag=1; } |
if ($showf==0) { $vl=$_; } |
if ($showf==0) { $vl=$_; } |
|
unless ($ENV{'form.showcsv'}) { |
if ($showf<=$maxred) { $bgcolor='#FFDDDD'; } |
if ($showf<=$maxred) { $bgcolor='#FFDDDD'; } |
if (($n==0) && ($showf<=26)) { $bgcolor='#CCCCFF'; } |
if (($n==0) && ($showf<=26)) { $bgcolor='#CCCCFF'; } |
if (($showf>$maxred) || ((!$n) && ($showf>0))) { |
if (($showf>$maxred) || ((!$n) && ($showf>0))) { |
Line 724 sub rown {
|
Line 717 sub rown {
|
} else { |
} else { |
$rowdata.='<td bgcolor='.$bgcolor.'> '.$vl.' </td>'; |
$rowdata.='<td bgcolor='.$bgcolor.'> '.$vl.' </td>'; |
} |
} |
|
} else { |
|
$rowdata.=',"'.$vl.'"'; |
|
} |
$showf++; |
$showf++; |
} $safeeval->reval($proc.'('.$n.')'); |
} $safeeval->reval($proc.'('.$n.')'); |
return $rowdata.'</tr>'; |
if ($ENV{'form.showall'} || ($dataflag)) { |
|
return $rowdata.($ENV{'form.showcsv'}?'':'</tr>'); |
|
} else { |
|
return ''; |
|
} |
} |
} |
|
|
# ------------------------------------------------------------- Print out sheet |
# ------------------------------------------------------------- Print out sheet |
Line 746 sub outsheet {
|
Line 746 sub outsheet {
|
$realm='Course'; |
$realm='Course'; |
} |
} |
my $maxyellow=52-$maxred; |
my $maxyellow=52-$maxred; |
my $tabledata= |
my $tabledata; |
|
unless ($ENV{'form.showcsv'}) { |
|
$tabledata= |
'<table border=2><tr><th colspan=2 rowspan=2><font size=+2>'. |
'<table border=2><tr><th colspan=2 rowspan=2><font size=+2>'. |
$realm.'</font></th>'. |
$realm.'</font></th>'. |
'<td bgcolor=#FFDDDD colspan='.$maxred. |
'<td bgcolor=#FFDDDD colspan='.$maxred. |
Line 766 sub outsheet {
|
Line 768 sub outsheet {
|
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', |
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', |
'a','b','c','d','e','f','g','h','i','j','k','l','m', |
'a','b','c','d','e','f','g','h','i','j','k','l','m', |
'n','o','p','q','r','s','t','u','v','w','x','y','z'); |
'n','o','p','q','r','s','t','u','v','w','x','y','z'); |
$tabledata.='</tr>'; |
$tabledata.='</tr>'.&rown($safeeval,'-').&rown($safeeval,0); |
|
} else { $tabledata='<pre>'; } |
|
|
|
$r->print($tabledata); |
|
|
my $row; |
my $row; |
my $maxrow=&getmaxrow($safeeval); |
my $maxrow=&getmaxrow($safeeval); |
$tabledata.=&rown($safeeval,'-'); |
|
$r->print($tabledata); |
my @sortby=(); |
for ($row=0;$row<=$maxrow;$row++) { |
my @sortidx=(); |
$r->print(&rown($safeeval,$row)); |
for ($row=1;$row<=$maxrow;$row++) { |
|
$sortby[$row-1]=$safeeval->reval('$f{"A'.$row.'"}'); |
|
$sortidx[$row-1]=$row-1; |
} |
} |
$r->print('</table>'); |
@sortidx=sort { $sortby[$a] cmp $sortby[$b]; } @sortidx; |
|
|
|
my $what='Student'; |
|
if (&gettype($safeeval) eq 'assesscalc') { |
|
$what='Item'; |
|
} elsif (&gettype($safeeval) eq 'studentcalc') { |
|
$what='Assessment'; |
|
} |
|
|
|
my $n=0; |
|
for ($row=0;$row<$maxrow;$row++) { |
|
my $thisrow=&rown($safeeval,$sortidx[$row]+1); |
|
if ($thisrow) { |
|
if (($n/25==int($n/25)) && (!$ENV{'form.showcsv'})) { |
|
$r->print("</table>\n<br>\n"); |
|
$r->rflush(); |
|
$r->print('<table border=2><tr><td> <td>'.$what.'</td>'); |
|
map { |
|
$r->print('<td>'.$_.'</td>'); |
|
} ('A','B','C','D','E','F','G','H','I','J','K','L','M', |
|
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', |
|
'a','b','c','d','e','f','g','h','i','j','k','l','m', |
|
'n','o','p','q','r','s','t','u','v','w','x','y','z'); |
|
$r->print('</tr>'); |
|
} |
|
$n++; |
|
$r->print($thisrow); |
|
} |
|
} |
|
$r->print($ENV{'form.showcsv'}?'</pre>':'</table>'); |
} |
} |
|
|
# |
# |
Line 1025 sub parmval {
|
Line 1062 sub parmval {
|
# ----------------------------------------------------- Cascading lookup scheme |
# ----------------------------------------------------- Cascading lookup scheme |
my $rwhat=$what; |
my $rwhat=$what; |
$what=~s/^parameter\_//; |
$what=~s/^parameter\_//; |
$what=~s/\_/\./; |
$what=~s/\_([^\_]+)$/\.$1/; |
|
|
my $symbparm=$symb.'.'.$what; |
my $symbparm=$symb.'.'.$what; |
my $mapparm=$mapname.'___(all).'.$what; |
my $mapparm=$mapname.'___(all).'.$what; |
Line 1116 sub updateclasssheet {
|
Line 1153 sub updateclasssheet {
|
my ($sname,$sdom)=split(/\:/,$name); |
my ($sname,$sdom)=split(/\:/,$name); |
my $ssec=&Apache::lonnet::usection($sdom,$sname,$cid); |
my $ssec=&Apache::lonnet::usection($sdom,$sname,$cid); |
if ($ssec==-1) { |
if ($ssec==-1) { |
|
unless ($ENV{'form.showcsv'}) { |
$rowlabel='<font color=red>Data not available: '.$name. |
$rowlabel='<font color=red>Data not available: '.$name. |
'</font>'; |
'</font>'; |
|
} else { |
|
$rowlabel='ERROR","'.$name. |
|
'","Data not available","","","'; |
|
} |
} else { |
} else { |
my %reply=&Apache::lonnet::idrget($sdom,$sname); |
my %reply=&Apache::lonnet::idrget($sdom,$sname); |
my $reply=&Apache::lonnet::reply('get:'.$sdom.':'.$sname. |
my $reply=&Apache::lonnet::reply('get:'.$sdom.':'.$sname. |
':environment:firstname&middlename&lastname&generation', |
':environment:firstname&middlename&lastname&generation', |
&Apache::lonnet::homeserver($sname,$sdom)); |
&Apache::lonnet::homeserver($sname,$sdom)); |
|
unless ($ENV{'form.showcsv'}) { |
$rowlabel='<a href="/adm/studentcalc?uname='.$sname. |
$rowlabel='<a href="/adm/studentcalc?uname='.$sname. |
'&udom='.$sdom.'">'. |
'&udom='.$sdom.'">'. |
$ssec.' '.$reply{$sname}.'<br>'; |
$ssec.' '.$reply{$sname}.'<br>'; |
Line 1130 sub updateclasssheet {
|
Line 1173 sub updateclasssheet {
|
$rowlabel.=&Apache::lonnet::unescape($_).' '; |
$rowlabel.=&Apache::lonnet::unescape($_).' '; |
} split(/\&/,$reply); |
} split(/\&/,$reply); |
$rowlabel.='</a>'; |
$rowlabel.='</a>'; |
|
} else { |
|
$rowlabel=$ssec.'","'.$reply{$sname}.'"'; |
|
my $ncount=0; |
|
map { |
|
$rowlabel.=',"'.&Apache::lonnet::unescape($_).'"'; |
|
$ncount++; |
|
} split(/\&/,$reply); |
|
unless ($ncount==4) { $rowlabel.=',""'; } |
|
$rowlabel=~s/\"$//; |
|
} |
} |
} |
$currentlist{&Apache::lonnet::unescape($name)}=$rowlabel; |
$currentlist{&Apache::lonnet::unescape($name)}=$rowlabel; |
} |
} |
Line 1190 sub updatestudentassesssheet {
|
Line 1243 sub updatestudentassesssheet {
|
|
|
my %allkeys=('timestamp' => |
my %allkeys=('timestamp' => |
'Timestamp of Last Transaction<br>timestamp'); |
'Timestamp of Last Transaction<br>timestamp'); |
my %allassess=(); |
|
|
|
my $adduserstr=''; |
my $adduserstr=''; |
if ((&getuname($safeeval) ne $ENV{'user.name'}) || |
if ((&getuname($safeeval) ne $ENV{'user.name'}) || |
Line 1199 sub updatestudentassesssheet {
|
Line 1251 sub updatestudentassesssheet {
|
'&udom='.&getudom($safeeval); |
'&udom='.&getudom($safeeval); |
} |
} |
|
|
|
my %allassess=('_feedback' => |
|
'<a href="/adm/assesscalc?usymb=_feedback'.$adduserstr. |
|
'">Feedback</a>', |
|
'_evaluation' => |
|
'<a href="/adm/assesscalc?usymb=_evaluation'.$adduserstr. |
|
'">Evaluation</a>', |
|
'_tutoring' => |
|
'<a href="/adm/assesscalc?usymb=_tutoring'.$adduserstr. |
|
'">Tutoring</a>' |
|
); |
|
|
map { |
map { |
if ($_=~/^src\_(\d+)\.(\d+)$/) { |
if ($_=~/^src\_(\d+)\.(\d+)$/) { |
my $mapid=$1; |
my $mapid=$1; |
Line 1513 sub loadassessment {
|
Line 1576 sub loadassessment {
|
# ----------------- now courseopt, useropt initialized for this user and course |
# ----------------- now courseopt, useropt initialized for this user and course |
# (used by parmval) |
# (used by parmval) |
|
|
|
# |
|
# Load keys for this assessment only |
|
# |
|
my %thisassess=(); |
|
my ($symap,$syid,$srcf)=split(/\_\_\_/,$symb); |
|
|
|
map { |
|
$thisassess{$_}=1; |
|
} split(/\,/,&Apache::lonnet::metadata($srcf,'keys')); |
|
# |
|
# Load parameters |
|
# |
my %c=(); |
my %c=(); |
|
|
if (tie(%parmhash,'GDBM_File', |
if (tie(%parmhash,'GDBM_File', |
Line 1522 sub loadassessment {
|
Line 1597 sub loadassessment {
|
if ($_=~/^A/) { |
if ($_=~/^A/) { |
unless ($f{$_}=~/^\!/) { |
unless ($f{$_}=~/^\!/) { |
if ($f{$_}=~/^parameter/) { |
if ($f{$_}=~/^parameter/) { |
|
if ($thisassess{$f{$_}}) { |
my $val=&parmval($f{$_},$safeeval); |
my $val=&parmval($f{$_},$safeeval); |
$c{$_}=$val; |
$c{$_}=$val; |
$c{$f{$_}}=$val; |
$c{$f{$_}}=$val; |
|
} |
} else { |
} else { |
my $key=$f{$_}; |
my $key=$f{$_}; |
my $ckey=$key; |
my $ckey=$key; |
$key=~s/^stores\_/resource\./; |
$key=~s/^stores\_/resource\./; |
$key=~s/\_/\./; |
$key=~s/\_/\./g; |
$c{$_}=$returnhash{$key}; |
$c{$_}=$returnhash{$key}; |
$c{$ckey}=$returnhash{$key}; |
$c{$ckey}=$returnhash{$key}; |
} |
} |
Line 1860 $tmpdir=$r->dir_config('lonDaemons').'/t
|
Line 1937 $tmpdir=$r->dir_config('lonDaemons').'/t
|
} |
} |
} (split(/&/,$ENV{'QUERY_STRING'})); |
} (split(/&/,$ENV{'QUERY_STRING'})); |
|
|
|
if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'})) { |
|
$ENV{'form.ufn'}='default_'.$1; |
|
} |
|
|
# -------------------------------------- Interactive loading of specific sheet? |
# -------------------------------------- Interactive loading of specific sheet? |
if (($ENV{'form.load'}) && ($ENV{'form.loadthissheet'} ne 'Default')) { |
if (($ENV{'form.load'}) && ($ENV{'form.loadthissheet'} ne 'Default')) { |
$ENV{'form.ufn'}=$ENV{'form.loadthissheet'}; |
$ENV{'form.ufn'}=$ENV{'form.loadthissheet'}; |
Line 1973 ENDSCRIPT
|
Line 2054 ENDSCRIPT
|
# ---------------------------------------------------------------- Course title |
# ---------------------------------------------------------------- Course title |
|
|
$r->print('<h1>'. |
$r->print('<h1>'. |
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}.'</h1>'); |
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}. |
|
'</h1><h3>'.localtime().'</h3>'); |
|
|
# ---------------------------------------------------- See if user can see this |
# ---------------------------------------------------- See if user can see this |
|
|
Line 2096 ENDSCRIPT
|
Line 2178 ENDSCRIPT
|
|
|
&tmpwrite($asheet); |
&tmpwrite($asheet); |
|
|
|
if (&gettype($asheet) eq 'studentcalc') { |
|
$r->print('<br>Show rows with empty A column: '); |
|
} else { |
|
$r->print('<br>Show empty rows: '); |
|
} |
|
$r->print('<input type=checkbox name=showall onClick="submit()"'); |
|
if ($ENV{'form.showall'}) { $r->print(' checked'); } |
|
$r->print('>'); |
|
if (&gettype($asheet) eq 'classcalc') { |
|
$r->print( |
|
' Output CSV format: <input type=checkbox name=showcsv onClick="submit()"'); |
|
if ($ENV{'form.showcsv'}) { $r->print(' checked'); } |
|
$r->print('>'); |
|
} |
# ------------------------------------------------------------- Print out sheet |
# ------------------------------------------------------------- Print out sheet |
|
|
&outsheet($r,$asheet); |
&outsheet($r,$asheet); |