version 1.26, 2001/01/01 20:52:10
|
version 1.28, 2001/01/02 16:03:14
|
Line 3
|
Line 3
|
# |
# |
# 11/11,11/15,11/27,12/04,12/05,12/06,12/07, |
# 11/11,11/15,11/27,12/04,12/05,12/06,12/07, |
# 12/08,12/09,12/11,12/12,12/15,12/16,12/18,12/19,12/30, |
# 12/08,12/09,12/11,12/12,12/15,12/16,12/18,12/19,12/30, |
# 01/01/01 Gerd Kortemeyer |
# 01/01/01,02/01 Gerd Kortemeyer |
|
|
package Apache::lonspreadsheet; |
package Apache::lonspreadsheet; |
|
|
Line 18 use HTML::TokeParser;
|
Line 18 use HTML::TokeParser;
|
|
|
# |
# |
# These cache hashes need to be independent of user, resource and course |
# These cache hashes need to be independent of user, resource and course |
# (user and course are in the keys) |
# (user and course can/should be in the keys) |
# |
# |
use vars qw(%spreadsheets %courserdatas %userrdatas); |
use vars qw(%spreadsheets %courserdatas %userrdatas %defaultsheets); |
|
|
# |
# |
# These global hashes are dependent on user, course and resource, |
# These global hashes are dependent on user, course and resource, |
# and need to be initialized every time when a sheet is calculated |
# and need to be initialized every time when a sheet is calculated |
Line 28 use vars qw(%spreadsheets %courserdatas
|
Line 29 use vars qw(%spreadsheets %courserdatas
|
my %courseopt; |
my %courseopt; |
my %useropt; |
my %useropt; |
my %parmhash; |
my %parmhash; |
my $csec; |
|
my $uname; |
# Stuff that only the screen handler can know |
my $udom; |
|
|
my $includedir; |
|
my $tmpdir; |
|
|
# ============================================================================= |
# ============================================================================= |
# ===================================== Implements an instance of a spreadsheet |
# ===================================== Implements an instance of a spreadsheet |
Line 61 sub initsheet {
|
Line 64 sub initsheet {
|
|
|
$maxrow=0; |
$maxrow=0; |
$sheettype=''; |
$sheettype=''; |
|
|
|
# filename/reference of the sheet |
|
|
$filename=''; |
$filename=''; |
|
|
|
# user data |
|
$uname=''; |
|
$uhome=''; |
|
$udom=''; |
|
|
|
# course data |
|
|
|
$csec=''; |
|
$chome=''; |
|
$cnum=''; |
|
$cdom=''; |
|
$cid=''; |
|
|
|
# symb |
|
|
|
$usymb=''; |
|
|
sub mask { |
sub mask { |
my ($lower,$upper)=@_; |
my ($lower,$upper)=@_; |
|
|
Line 382 sub outrow {
|
Line 405 sub outrow {
|
} |
} |
|
|
sub exportrowa { |
sub exportrowa { |
my $rowa=''; |
my @exportarray=(); |
map { |
map { |
$rowa.=$v{$_.'0'}."___;___"; |
$exportarray[$#exportarray+1]=$v{$_.'0'}; |
} ('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'); |
$rowa=~s/\_\_\_\;\_\_\_$//; |
return @exportarray; |
return $rowa; |
|
} |
} |
|
|
# ------------------------------------------- End of "Inside of the safe space" |
# ------------------------------------------- End of "Inside of the safe space" |
Line 439 sub getformulas {
|
Line 461 sub getformulas {
|
return $safeeval->reval('%f'); |
return $safeeval->reval('%f'); |
} |
} |
|
|
# -------------------------------------------------------------------- Set type |
|
|
|
sub settype { |
|
my ($safeeval,$type)=@_; |
|
$safeeval->reval('$sheettype="'.$type.'";'); |
|
} |
|
|
|
# -------------------------------------------------------------------- Get type |
# -------------------------------------------------------------------- Get type |
|
|
sub gettype { |
sub gettype { |
my $safeeval=shift; |
my $safeeval=shift; |
return $safeeval->reval('$sheettype'); |
return $safeeval->reval('$sheettype'); |
} |
} |
|
|
# ------------------------------------------------------------------ Set maxrow |
# ------------------------------------------------------------------ Set maxrow |
|
|
sub setmaxrow { |
sub setmaxrow { |
Line 479 sub getfilename {
|
Line 495 sub getfilename {
|
my $safeeval=shift; |
my $safeeval=shift; |
return $safeeval->reval('$filename'); |
return $safeeval->reval('$filename'); |
} |
} |
|
# --------------------------------------------------------------- Get course ID |
|
|
|
sub getcid { |
|
my $safeeval=shift; |
|
return $safeeval->reval('$cid'); |
|
} |
|
|
|
# ----------------------------------------------------------- Get course number |
|
|
|
sub getcnum { |
|
my $safeeval=shift; |
|
return $safeeval->reval('$cnum'); |
|
} |
|
|
|
# ------------------------------------------------------------- Get course home |
|
|
|
sub getchome { |
|
my $safeeval=shift; |
|
return $safeeval->reval('$chome'); |
|
} |
|
|
|
# ----------------------------------------------------------- Get course domain |
|
|
|
sub getcdom { |
|
my $safeeval=shift; |
|
return $safeeval->reval('$cdom'); |
|
} |
|
|
|
# ---------------------------------------------------------- Get course section |
|
|
|
sub getcsec { |
|
my $safeeval=shift; |
|
return $safeeval->reval('$csec'); |
|
} |
|
|
|
# --------------------------------------------------------------- Get user name |
|
|
|
sub getuname { |
|
my $safeeval=shift; |
|
return $safeeval->reval('$uname'); |
|
} |
|
|
|
# ------------------------------------------------------------- Get user domain |
|
|
|
sub getudom { |
|
my $safeeval=shift; |
|
return $safeeval->reval('$udom'); |
|
} |
|
|
|
# --------------------------------------------------------------- Get user home |
|
|
|
sub getuhome { |
|
my $safeeval=shift; |
|
return $safeeval->reval('$uhome'); |
|
} |
|
|
|
# -------------------------------------------------------------------- Get symb |
|
|
|
sub getusymb { |
|
my $safeeval=shift; |
|
return $safeeval->reval('$usymb'); |
|
} |
|
|
# ------------------------------------------------------------- Export of A-row |
# ------------------------------------------------------------- Export of A-row |
|
|
sub exportrow { |
sub exportdata { |
my $safeeval=shift; |
my $safeeval=shift; |
return $safeeval->reval('&exportrowa()'); |
return $safeeval->reval('&exportrowa()'); |
} |
} |
Line 490 sub exportrow {
|
Line 568 sub exportrow {
|
# ========================================================== End of Spreadsheet |
# ========================================================== End of Spreadsheet |
# ============================================================================= |
# ============================================================================= |
|
|
|
# |
|
# Procedures for screen output |
|
# |
# --------------------------------------------- Produce output row n from sheet |
# --------------------------------------------- Produce output row n from sheet |
|
|
sub rown { |
sub rown { |
Line 600 sub outsheet {
|
Line 680 sub outsheet {
|
$r->print('</table>'); |
$r->print('</table>'); |
} |
} |
|
|
|
# |
|
# -------------------------------------- Read spreadsheet formulas for a course |
|
# |
|
|
|
sub readsheet { |
|
my ($safeeval,$fn)=@_; |
|
my $stype=&gettype($safeeval); |
|
my $cnum=&getcnum($safeeval); |
|
my $cdom=&getcdom($safeeval); |
|
my $chome=&getchome($safeeval); |
|
|
|
# --------- There is no filename. Look for defaults in course and global, cache |
|
|
|
unless($fn) { |
|
unless ($fn=$defaultsheets{$cnum.'_'.$cdom.'_'.$stype}) { |
|
$fn=&Apache::lonnet::reply('get:'.$cdom.':'.$cnum. |
|
':environment:spreadsheet_default_'.$stype, |
|
$chome); |
|
unless (($fn) && ($fn!~/^error\:/)) { |
|
$fn='default_'.$stype; |
|
} |
|
$defaultsheets{$cnum.'_'.$cdom.'_'.$stype}=$fn; |
|
} |
|
} |
|
|
# ------------------------------------- Read spreadsheet formulas from a course |
# ---------------------------------------------------------- fn now has a value |
|
|
sub readsheet { |
&setfilename($safeeval,$fn); |
my ($safeeval,$fn,$r)=@_; |
|
my %f=(); |
# ------------------------------------------------------ see if sheet is cached |
if (($fn eq '') || ($fn=~/^default\_/)) { |
my $fstring=''; |
|
if ($fstring=$spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}) { |
|
&setformulas($safeeval,split(/\_\_\_\;\_\_\_/,$fstring)); |
|
} else { |
|
|
|
# ---------------------------------------------------- Not cached, need to read |
|
|
|
my %f=(); |
|
|
|
if ($fn=~/^default\_/) { |
my $sheetxml=''; |
my $sheetxml=''; |
{ |
{ |
my $fh; |
my $fh; |
if ($fh=Apache::File->new($r->dir_config('lonIncludes'). |
if ($fh=Apache::File->new($includedir. |
'/default.'.&gettype($safeeval))) { |
'/default.'.&gettype($safeeval))) { |
$sheetxml=join('',<$fh>); |
$sheetxml=join('',<$fh>); |
} |
} |
} |
} |
my $parser=HTML::TokeParser->new(\$sheetxml); |
my $parser=HTML::TokeParser->new(\$sheetxml); |
my $token; |
my $token; |
while ($token=$parser->get_token) { |
while ($token=$parser->get_token) { |
if ($token->[0] eq 'S') { |
if ($token->[0] eq 'S') { |
if ($token->[1] eq 'field') { |
if ($token->[1] eq 'field') { |
$f{$token->[2]->{'col'}.$token->[2]->{'row'}}= |
$f{$token->[2]->{'col'}.$token->[2]->{'row'}}= |
Line 629 sub readsheet {
|
Line 741 sub readsheet {
|
$parser->get_text('/template'); |
$parser->get_text('/template'); |
} |
} |
} |
} |
} |
} |
&setfilename($safeeval,'default_'.&gettype($safeeval)); |
} else { |
} else { |
my $sheet=''; |
&setfilename($safeeval,$fn); |
my $reply=&Apache::lonnet::reply('dump:'.$cdom.':'.$cnum.':'.$fn, |
unless ($spreadsheets{$fn}) { |
$chome); |
$spreadsheets{$fn}=''; |
|
my $reply=&Apache::lonnet::reply('dump:'. |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'. |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}.':'.$fn, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.home'}); |
|
unless ($reply=~/^error\:/) { |
unless ($reply=~/^error\:/) { |
$spreadsheets{$fn}=$reply; |
$sheet=$reply; |
} |
} |
|
map { |
|
my ($name,$value)=split(/\=/,$_); |
|
$f{&Apache::lonnet::unescape($name)}= |
|
&Apache::lonnet::unescape($value); |
|
} split(/\&/,$sheet); |
} |
} |
map { |
# --------------------------------------------------------------- Cache and set |
my ($name,$value)=split(/\=/,$_); |
$spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}=join('___;___',%f); |
$f{&Apache::lonnet::unescape($name)}= |
&setformulas($safeeval,%f); |
&Apache::lonnet::unescape($value); |
|
} split(/\&/,$spreadsheets{$fn}); |
|
} |
} |
|
} |
|
|
&setformulas($safeeval,%f); |
# -------------------------------------------------------- Make new spreadsheet |
|
|
|
sub makenewsheet { |
|
my ($uname,$udom,$stype,$usymb)=@_; |
|
my $safeeval=initsheet(); |
|
$safeeval->reval( |
|
'$uname='.$uname. |
|
';$udom='.$udom. |
|
';$sheettype='.$stype. |
|
';$usymb='.$usymb. |
|
';$cid='.$ENV{'request.course.id'}. |
|
';$cnum='.$ENV{'course.'.$ENV{'request.course.id'}.'.num'}. |
|
';$cdom='.$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}. |
|
';$chome='.$ENV{'course.'.$ENV{'request.course.id'}.'.home'}.';'); |
|
return $safeeval; |
} |
} |
|
|
# ------------------------------------------------------------ Save spreadsheet |
# ------------------------------------------------------------ Save spreadsheet |
|
|
sub writesheet { |
sub writesheet { |
my $safeeval=shift; |
my ($safeeval,$makedef)=@_; |
if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { |
my $cid=&getcid($safeeval); |
|
if (&Apache::lonnet::allowed('opa',$cid)) { |
my %f=&getformulas($safeeval); |
my %f=&getformulas($safeeval); |
|
my $stype=&gettype($safeeval); |
|
my $cnum=&getcnum($safeeval); |
|
my $cdom=&getcdom($safeeval); |
|
my $chome=&getchome($safeeval); |
|
my $fn=&getfilename($safeeval); |
|
|
|
# ------------------------------------------------------------- Cache new sheet |
|
$spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}=join('___;___',%f); |
|
# ----------------------------------------------------------------- Write sheet |
my $sheetdata=''; |
my $sheetdata=''; |
map { |
map { |
$sheetdata.=&Apache::lonnet::escape($_).'='. |
$sheetdata.=&Apache::lonnet::escape($_).'='. |
&Apache::lonnet::escape($f{$_}).'&'; |
&Apache::lonnet::escape($f{$_}).'&'; |
} keys %f; |
} keys %f; |
$sheetdata=~s/\&$//; |
$sheetdata=~s/\&$//; |
my $reply=&Apache::lonnet::reply('put:'. |
my $reply=&Apache::lonnet::reply('put:'.$cdom.':'.$cnum.':'.$fn.':'. |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'. |
$sheetdata,$chome); |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}.':'. |
|
&getfilename($safeeval).':'. |
|
$sheetdata, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.home'}); |
|
if ($reply eq 'ok') { |
if ($reply eq 'ok') { |
return &Apache::lonnet::reply('put:'. |
$reply=&Apache::lonnet::reply('put:'.$cdom.':'.$cnum.':'. |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'. |
&stype.'_spreadsheets:'. |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}.':'. |
&Apache::lonnet::escape($fn).'='.$ENV{'user.name'}, |
&gettype($safeeval).'_spreadsheets:'. |
$chome); |
&Apache::lonnet::escape(&getfilename($safeeval)).'='. |
if ($reply eq 'ok') { |
$ENV{'user.name'}, |
if ($makedef) { |
$ENV{'course.'.$ENV{'request.course.id'}.'.home'}); |
return &Apache::lonnet::reply('put:'.$cdom.':'.$cnum. |
|
':environment:spreadsheet_default_'.$stype.'='. |
|
&Apache::lonnet::escape($fn), |
|
$chome); |
|
} else { |
|
return $reply; |
|
} |
|
} else { |
|
return $reply; |
|
} |
} else { |
} else { |
return $reply; |
return $reply; |
} |
} |
Line 687 sub writesheet {
|
Line 827 sub writesheet {
|
} |
} |
|
|
# ----------------------------------------------- Make a temp copy of the sheet |
# ----------------------------------------------- Make a temp copy of the sheet |
|
# "Modified workcopy" - interactive only |
|
# |
|
|
sub tmpwrite { |
sub tmpwrite { |
my ($safeeval,$tmpdir,$symb)=@_; |
my $safeeval=shift; |
my $fn=$uname.'_'.$udom.'_spreadsheet_'.$symb.'_'.&getfilename($safeeval); |
my $fn=$ENV{'user.name'}.'_'. |
|
$ENV{'user.domain'}.'_spreadsheet_'.&getusymb($safeeval).'_'. |
|
&getfilename($safeeval); |
$fn=~s/\W/\_/g; |
$fn=~s/\W/\_/g; |
$fn=$tmpdir.$fn.'.tmp'; |
$fn=$tmpdir.$fn.'.tmp'; |
my $fh; |
my $fh; |
Line 702 sub tmpwrite {
|
Line 846 sub tmpwrite {
|
# ---------------------------------------------------------- Read the temp copy |
# ---------------------------------------------------------- Read the temp copy |
|
|
sub tmpread { |
sub tmpread { |
my ($safeeval,$tmpdir,$symb,$nfield,$nform)=@_; |
my ($safeeval,$nfield,$nform)=@_; |
my $fn=$uname.'_'.$udom.'_spreadsheet_'.$symb.'_'.&getfilename($safeeval); |
my $fn=$ENV{'user.name'}.'_'. |
|
$ENV{'user.domain'}.'_spreadsheet_'.&getusymb($safeeval).'_'. |
|
&getfilename($safeeval); |
$fn=~s/\W/\_/g; |
$fn=~s/\W/\_/g; |
$fn=$tmpdir.$fn.'.tmp'; |
$fn=$tmpdir.$fn.'.tmp'; |
my $fh; |
my $fh; |
Line 721 sub tmpread {
|
Line 867 sub tmpread {
|
&setformulas($safeeval,%fo); |
&setformulas($safeeval,%fo); |
} |
} |
|
|
# --------------------------------------------------------------- Read metadata |
|
|
|
sub readmeta { |
|
my $fn=shift; |
|
unless ($fn=~/\.meta$/) { $fn.='meta'; } |
|
my $content; |
|
my %returnhash=(); |
|
{ |
|
my $fh=Apache::File->new($fn); |
|
$content=join('',<$fh>); |
|
} |
|
my $parser=HTML::TokeParser->new(\$content); |
|
my $token; |
|
while ($token=$parser->get_token) { |
|
if ($token->[0] eq 'S') { |
|
my $entry=$token->[1]; |
|
if (($entry eq 'stores') || ($entry eq 'parameter')) { |
|
my $unikey=$entry; |
|
$unikey.='_'.$token->[2]->{'part'}; |
|
$unikey.='_'.$token->[2]->{'name'}; |
|
$returnhash{$unikey}=$token->[2]->{'display'}; |
|
} |
|
} |
|
} |
|
return %returnhash; |
|
} |
|
|
|
# ================================================================== Parameters |
# ================================================================== Parameters |
# -------------------------------------------- Figure out a cascading parameter |
# -------------------------------------------- Figure out a cascading parameter |
|
# |
|
|
sub parmval { |
sub parmval { |
my ($what,$symb)=@_; |
my ($what,$safeeval)=@_; |
|
my $cid=&getcid($safeeval); |
|
my $csec=&getcsec($safeeval); |
|
my $uname=&getuname($safeeval); |
|
my $udom=&getudom($safeeval); |
|
my $symb=&getusymb($safeeval); |
|
|
unless ($symb) { return ''; } |
unless ($symb) { return ''; } |
my $result=''; |
my $result=''; |
Line 765 sub parmval {
|
Line 890 sub parmval {
|
|
|
my $symbparm=$symb.'.'.$what; |
my $symbparm=$symb.'.'.$what; |
my $mapparm=$mapname.'___(all).'.$what; |
my $mapparm=$mapname.'___(all).'.$what; |
|
my $usercourseprefix=$cid.'_'.$uname.'_'.$udom; |
|
|
my $seclevel= |
my $seclevel= |
$ENV{'request.course.id'}.'.['. |
$usercourseprefix.'.['. |
$csec.'].'.$what; |
$csec.'].'.$what; |
my $seclevelr= |
my $seclevelr= |
$ENV{'request.course.id'}.'.['. |
$usercourseprefix.'.['. |
$csec.'].'.$symbparm; |
$csec.'].'.$symbparm; |
my $seclevelm= |
my $seclevelm= |
$ENV{'request.course.id'}.'.['. |
$usercourseprefix.'.['. |
$csec.'].'.$mapparm; |
$csec.'].'.$mapparm; |
|
|
my $courselevel= |
my $courselevel= |
$ENV{'request.course.id'}.'.'.$what; |
$usercourseprefix.'.'.$what; |
my $courselevelr= |
my $courselevelr= |
$ENV{'request.course.id'}.'.'.$symbparm; |
$usercourseprefix.'.'.$symbparm; |
my $courselevelm= |
my $courselevelm= |
$ENV{'request.course.id'}.'.'.$mapparm; |
$usercourseprefix.'.'.$mapparm; |
|
|
# ---------------------------------------------------------- fourth, check user |
# ---------------------------------------------------------- fourth, check user |
|
|
Line 826 sub parmval {
|
Line 952 sub parmval {
|
|
|
# ---------------------------------------------- Update rows for course listing |
# ---------------------------------------------- Update rows for course listing |
|
|
sub updatestudentrows { |
sub updateclasssheet { |
my $safeeval=shift; |
my $safeeval=shift; |
my $cid=$ENV{'request.course.id'}; |
my $cnum=&getcnum($safeeval); |
|
my $cdom=&getcdom($safeeval); |
|
my $cid=&getcid($safeeval); |
|
my $chome=&getchome($safeeval); |
|
|
|
# ---------------------------------------------- Read class list and row labels |
|
|
my $classlst=&Apache::lonnet::reply |
my $classlst=&Apache::lonnet::reply |
('dump:'.$ENV{'course.'.$cid.'.domain'}.':'. |
('dump:'.$cdom.':'.$cnum.':classlist',$chome); |
$ENV{'course.'.$cid.'.num'}.':classlist', |
|
$ENV{'course.'.$cid.'.home'}); |
|
my %currentlist=(); |
my %currentlist=(); |
my $now=time; |
my $now=time; |
unless ($classlst=~/^error\:/) { |
unless ($classlst=~/^error\:/) { |
Line 844 sub updatestudentrows {
|
Line 974 sub updatestudentrows {
|
if ($active) { |
if ($active) { |
my $rowlabel=''; |
my $rowlabel=''; |
$name=&Apache::lonnet::unescape($name); |
$name=&Apache::lonnet::unescape($name); |
my ($cname,$cdom)=split(/\:/,$name); |
my ($sname,$sdom)=split(/\:/,$name); |
my $csec= |
my $ssec=&Apache::lonnet::usection($sdom,$sname,$cid); |
&Apache::lonnet::usection($cdom,$cname,$ENV{'request.course.id'}); |
if ($ssec==-1) { |
if ($csec==-1) { |
|
$rowlabel='<font color=red>Data not available: '.$name. |
$rowlabel='<font color=red>Data not available: '.$name. |
'</font>'; |
'</font>'; |
} else { |
} else { |
my %reply=&Apache::lonnet::idrget($cdom,$cname); |
my %reply=&Apache::lonnet::idrget($sdom,$sname); |
my $reply=&Apache::lonnet::reply('get:'.$cdom.':'.$cname. |
my $reply=&Apache::lonnet::reply('get:'.$sdom.':'.$sname. |
':environment:firstname&middlename&lastname&generation', |
':environment:firstname&middlename&lastname&generation', |
&Apache::lonnet::homeserver($cname,$cdom)); |
&Apache::lonnet::homeserver($sname,$sdom)); |
$rowlabel=$csec.' '.$reply{$cname}.'<br>'; |
$rowlabel=$ssec.' '.$reply{$sname}.'<br>'; |
map { |
map { |
$rowlabel.=&Apache::lonnet::unescape($_).' '; |
$rowlabel.=&Apache::lonnet::unescape($_).' '; |
} split(/\&/,$reply); |
} split(/\&/,$reply); |
} |
} |
|
|
$currentlist{&Apache::lonnet::unescape($name)}=$rowlabel; |
$currentlist{&Apache::lonnet::unescape($name)}=$rowlabel; |
} |
} |
} split(/\&/,$classlst); |
} split(/\&/,$classlst); |
Line 904 sub updatestudentrows {
|
Line 1032 sub updatestudentrows {
|
return 'Could not access course data'; |
return 'Could not access course data'; |
} |
} |
} |
} |
# ----------------------------------------------------------------- Update rows |
|
|
|
sub updaterows { |
# ----------------------------------- Update rows for student and assess sheets |
|
|
|
sub updatestudentassesssheet { |
my $safeeval=shift; |
my $safeeval=shift; |
my %bighash; |
my %bighash; |
# -------------------------------------------------------------------- Tie hash |
# -------------------------------------------------------------------- Tie hash |
Line 1143 sub rowaassess {
|
Line 1272 sub rowaassess {
|
if ($_=~/^A/) { |
if ($_=~/^A/) { |
unless ($f{$_}=~/^\!/) { |
unless ($f{$_}=~/^\!/) { |
if ($f{$_}=~/^parameter/) { |
if ($f{$_}=~/^parameter/) { |
$c{$_}=&parmval($f{$_},$symb); |
$c{$_}=&parmval($f{$_},$safeeval); |
} else { |
} else { |
my $key=$f{$_}; |
my $key=$f{$_}; |
$key=~s/^stores\_/resource\./; |
$key=~s/^stores\_/resource\./; |
Line 1181 sub selectbox {
|
Line 1310 sub selectbox {
|
return $selout.'</select>'; |
return $selout.'</select>'; |
} |
} |
|
|
|
# =============================================== Update information in a sheet |
|
# |
|
# Add new users or assessments, etc. |
|
# |
|
|
|
sub updatesheet { |
|
my $safeeval=shift; |
|
my $stype=&gettype($safeeval); |
|
if ($stype eq 'classcalc') { |
|
return &updateclasssheet($safeeval); |
|
} else { |
|
return &updatestudentassesssheet($safeeval); |
|
} |
|
} |
|
|
|
# =================================================== Load the rows for a sheet |
|
# |
|
# Import the data for rows |
|
# |
|
|
|
sub loadrows() { |
|
my $safeeval=shift; |
|
my $stype=&gettype($safeeval); |
|
if ($stype eq 'classcalc') { |
|
&loadcourse($thissheet); |
|
} elsif ($stype eq 'studentcalc') { |
|
&loadstudent($thissheet); |
|
} else { |
|
&loadassessment($thissheet); |
|
} |
|
} |
|
|
|
# ============================================================== Export handler |
|
# |
|
# Non-interactive call from with program |
|
# |
|
|
|
sub exportsheet { |
|
my ($uname,$udom,$stype,$usymb,$fn)=@_; |
|
my $thissheet=($uname,$udom,$stype,$usymb); |
|
&readsheet($thissheet,$fn); |
|
&updatesheet($thissheet); |
|
&loadrows($thissheet); |
|
&calcsheet($thissheet); |
|
return &exportdata($thissheet); |
|
} |
|
|
# ================================================================ Main handler |
# ================================================================ Main handler |
|
# |
|
# Interactive call to screen |
|
# |
|
# |
|
|
|
|
sub handler { |
sub handler { |
my $r=shift; |
my $r=shift; |
|
|
$uname=''; |
if ($r->header_only) { |
$udom=''; |
|
$csec=''; |
|
|
|
if ($r->header_only) { |
|
$r->content_type('text/html'); |
$r->content_type('text/html'); |
$r->send_http_header; |
$r->send_http_header; |
return OK; |
return OK; |
} |
} |
|
|
|
# ---------------------------------------------------- Global directory configs |
|
|
|
$includedir=r->dir_config('lonIncludes'); |
|
$tmpdir=$r->dir_config('lonDaemons').'/tmp/'; |
|
|
# ----------------------------------------------------- Needs to be in a course |
# ----------------------------------------------------- Needs to be in a course |
|
|
Line 1279 ENDSCRIPT
|
Line 1461 ENDSCRIPT
|
$ENV{'form.unewfield'},$ENV{'form.unewformula'}); |
$ENV{'form.unewfield'},$ENV{'form.unewformula'}); |
} elsif ($ENV{'form.saveas'}) { |
} elsif ($ENV{'form.saveas'}) { |
&setfilename($sheetone,$ENV{'form.ufn'}); |
&setfilename($sheetone,$ENV{'form.ufn'}); |
&tmpread($sheetone,$r->dir_config('lonDaemons').'/tmp/', |
&tmpread($sheetone,, |
$ENV{'form.usymb'}); |
$ENV{'form.usymb'}); |
} else { |
} else { |
unless ($ENV{'form.ufn'}) { |
unless ($ENV{'form.ufn'}) { |
my $reply=&Apache::lonnet::reply('get:'. |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'. |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}. |
|
':environment:spreadsheet_default_'. |
|
&gettype($sheetone), |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.home'}); |
|
unless (($reply=~/^error\:/) || ($reply eq '')) { |
|
$ENV{'form.ufn'}=$reply; |
|
unless ($reroute) { |
|
$r->print('<p>Using customized default spreadsheet<p>'); |
|
} |
|
} |
|
} |
|
&readsheet($sheetone,$ENV{'form.ufn'},$r); |
|
$ENV{'form.ufn'}=&getfilename($sheetone); |
|
} |
} |
|
|
if (&gettype($sheetone) eq 'classcalc') { |
if (&gettype($sheetone) eq 'classcalc') { |
Line 1402 ENDSCRIPT
|
Line 1569 ENDSCRIPT
|
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
return OK; |
return OK; |
|
|
|
$bombnomatterwhat='yes'; |
} |
} |
|
|
1; |
1; |