--- loncom/interface/Attic/lonspreadsheet.pm 2002/08/30 20:56:08 1.105 +++ loncom/interface/Attic/lonspreadsheet.pm 2002/09/01 18:06:52 1.106 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.105 2002/08/30 20:56:08 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.106 2002/09/01 18:06:52 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1194,14 +1194,14 @@ sub rown { my $rowdata=''; my $dataflag=0; unless ($n eq '-') { - $defaultbg=((($n-1)/5)==int(($n-1)/5))?'#E0E0':'#FFFF'; + $defaultbg=((($n-1)/5)==int(($n-1)/5))?'#E0E0':'#FFFF'; } else { - $defaultbg='#E0FF'; + $defaultbg='#E0FF'; } unless ($ENV{'form.showcsv'}) { - $rowdata.="\n$n"; + $rowdata.="\n$n"; } else { - $rowdata.="\n".'"'.$n.'"'; + $rowdata.="\n".'"'.$n.'"'; } my $showf=0; my $proc; @@ -1225,97 +1225,102 @@ sub rown { $dataflag=1; } foreach ($safeeval->reval($proc.'('.$n.')')) { - my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD'); - my ($fm,$vl)=split(/\_\_\_eq\_\_\_/,$_); - if ((($vl ne '') || ($vl eq '0')) && - (($showf==1) || ($sheettype ne 'studentcalc'))) { $dataflag=1; } - if ($showf==0) { $vl=$_; } - unless ($ENV{'form.showcsv'}) { - if ($showf<=$maxred) { $bgcolor='#FFDDDD'; } - if (($n==0) && ($showf<=26)) { $bgcolor='#CCCCFF'; } - if (($showf>$maxred) || ((!$n) && ($showf>0))) { - if ($vl eq '') { - $vl='#'; - } - $rowdata.= - ''.$vl. - ''; - } else { - $rowdata.=' '.$vl.' '; - } - } else { - $rowdata.=',"'.$vl.'"'; - } - $showf++; + my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD'); + my ($fm,$vl)=split(/\_\_\_eq\_\_\_/,$_); + if ((($vl ne '') || ($vl eq '0')) && + (($showf==1) || ($sheettype ne 'studentcalc'))) { $dataflag=1; } + if ($showf==0) { $vl=$_; } + unless ($ENV{'form.showcsv'}) { + if ($showf<=$maxred) { $bgcolor='#FFDDDD'; } + if (($n==0) && ($showf<=26)) { $bgcolor='#CCCCFF'; } + if (($showf>$maxred) || ((!$n) && ($showf>0))) { + if ($vl eq '') { + $vl='#'; + } + $rowdata.=''. + ''.$vl.''; + } else { + $rowdata.=' '.$vl.' '; + } + } else { + $rowdata.=',"'.$vl.'"'; + } + $showf++; } # End of foreach($safeval...) if ($ENV{'form.showall'} || ($dataflag)) { - return $rowdata.($ENV{'form.showcsv'}?'':''); + return $rowdata.($ENV{'form.showcsv'}?'':''); } else { - return ''; + return ''; } } # ------------------------------------------------------------- Print out sheet sub outsheet { - my ($r,$safeeval)=@_; - my $maxred; - my $realm; - if (&gettype($safeeval) eq 'assesscalc') { + my ($r,$safeeval,$sheetdata)=@_; + my $maxred = 26; # The maximum number of cells to show as + # red (uneditable) + # To make student sheets uneditable could we + # set $maxred = 52? + # + my $realm='Course'; # 'assessment', 'user', or 'course' sheet + if ($sheetdata->{'sheettype'} eq 'assesscalc') { $maxred=1; $realm='Assessment'; - } elsif (&gettype($safeeval) eq 'studentcalc') { + } elsif ($sheetdata->{'sheettype'} eq 'studentcalc') { $maxred=26; $realm='User'; - } else { - $maxred=26; - $realm='Course'; } - my $maxyellow=52-$maxred; + # + # Column label my $tabledata; - unless ($ENV{'form.showcsv'}) { - $tabledata= - ''. + if ($ENV{'form.showcsv'}) { + $tabledata='
';
+    } else { 
+        $tabledata='
'. - $realm.'
'. ''. - ''; - my $showf=0; - foreach ('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') { - $showf++; - if ($showf<=$maxred) { - $tabledata.='"; - } - $tabledata.=''.&rown($safeeval,'-').&rown($safeeval,0); - } else { $tabledata='
'; }
-
+        my $showf=0;
+        foreach ('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') {
+            $showf++;
+            if ($showf<=$maxred) { 
+                $tabledata.='
"; + } + $tabledata.=''.&rown($safeeval,'-').&rown($safeeval,0); + } $r->print($tabledata); - + # + # Prepare to output rows my $row; my $maxrow=&getmaxrow($safeeval); - + # my @sortby=(); my @sortidx=(); for ($row=1;$row<=$maxrow;$row++) { - $sortby[$row-1]=$safeeval->reval('$f{"A'.$row.'"}'); - $sortidx[$row-1]=$row-1; + push (@sortby, $safeeval->reval('$f{"A'.$row.'"}')); + push (@sortidx, $row-1); } @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'; - } - + # + # Determine the type of child spreadsheets + my $what='Student'; + if ($sheetdata->{'sheettype'} eq 'assesscalc') { + $what='Item'; + } elsif ($sheetdata->{'sheettype'} eq 'studentcalc') { + $what='Assessment'; + } + # + # Loop through the rows and output them one at a time my $n=0; for ($row=0;$row<$maxrow;$row++) { my $thisrow=&rown($safeeval,$sortidx[$row]+1); @@ -1324,9 +1329,10 @@ sub outsheet { $r->print("
'. + ''.$realm.'ImportCalculations
'; - } else { - $tabledata.=''; - } - $tabledata.="$_
'; + } else { + $tabledata.=''; + } + $tabledata.="$_
\n
\n"); $r->rflush(); $r->print(''); - $r->print('\n"); } $n++; @@ -2436,39 +2442,45 @@ sub handler { return OK; } # Global directory configs - $includedir=$r->dir_config('lonIncludes'); - $tmpdir=$r->dir_config('lonDaemons').'/tmp/'; + $includedir = $r->dir_config('lonIncludes'); + $tmpdir = $r->dir_config('lonDaemons').'/tmp/'; # Needs to be in a course - if ($ENV{'request.course.fn'}) { - # Get query string for limited number of parameters - &Apache::loncommon::get_unprocessed_cgi - ($ENV{'QUERY_STRING'},['uname','udom','usymb','ufn']); - if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'})) { - $ENV{'form.ufn'}='default_'.$1; - } - # Interactive loading of specific sheet? - if (($ENV{'form.load'}) && ($ENV{'form.loadthissheet'} ne 'Default')) { - $ENV{'form.ufn'}=$ENV{'form.loadthissheet'}; - } - # Nothing there? Must be login user - my $aname; - my $adom; - - unless ($ENV{'form.uname'}) { - $aname=$ENV{'user.name'}; - $adom=$ENV{'user.domain'}; - } else { - $aname=$ENV{'form.uname'}; - $adom=$ENV{'form.udom'}; - } - # Open page - $r->content_type('text/html'); - $r->header_out('Cache-control','no-cache'); - $r->header_out('Pragma','no-cache'); - $r->send_http_header; - # Screen output - $r->print('LON-CAPA Spreadsheet'); - $r->print(<uri.":opa:0:0:Cannot modify spreadsheet"; + return HTTP_NOT_ACCEPTABLE; + } + # Get query string for limited number of parameters + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['uname','udom','usymb','ufn']); + if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'})) { + $ENV{'form.ufn'}='default_'.$1; + } + # Interactive loading of specific sheet? + if (($ENV{'form.load'}) && ($ENV{'form.loadthissheet'} ne 'Default')) { + $ENV{'form.ufn'}=$ENV{'form.loadthissheet'}; + } + # + # Determine the user name and domain for the sheet. + my $aname; + my $adom; + unless ($ENV{'form.uname'}) { + $aname=$ENV{'user.name'}; + $adom=$ENV{'user.domain'}; + } else { + $aname=$ENV{'form.uname'}; + $adom=$ENV{'form.udom'}; + } + # + # Open page + $r->content_type('text/html'); + $r->header_out('Cache-control','no-cache'); + $r->header_out('Pragma','no-cache'); + $r->send_http_header; + # Screen output + $r->print('LON-CAPA Spreadsheet'); + $r->print(< function celledit(cn,cf) { @@ -2494,219 +2506,202 @@ sub handler { ENDSCRIPT - $r->print(''.&Apache::loncommon::bodytag('Grades Spreadsheet'). - '
'. - &hiddenfield('uname',$ENV{'form.uname'}). - &hiddenfield('udom',$ENV{'form.udom'}). - &hiddenfield('usymb',$ENV{'form.usymb'}). - &hiddenfield('unewfield',''). - &hiddenfield('unewformula','')); - # Send this out right away - $r->rflush(); - # Full recalc? - if ($ENV{'form.forcerecalc'}) { - $r->print('

Completely Recalculating Sheet ...

'); - undef %spreadsheets; - undef %courserdatas; - undef %userrdatas; - undef %defaultsheets; - undef %updatedata; - } - # Read new sheet or modified worksheet - $r->uri=~/\/(\w+)$/; - my ($asheet,$asheetdata)=&makenewsheet - ($aname,$adom,$1,$ENV{'form.usymb'}); - # If a new formula had been entered, go from work copy - if ($ENV{'form.unewfield'}) { - $r->print('

Modified Workcopy

'); - $ENV{'form.unewformula'}=~s/\'/\"/g; - $r->print('

New formula: '.$ENV{'form.unewfield'}.'='. - $ENV{'form.unewformula'}.'

'); - &setfilename($asheet,$ENV{'form.ufn'}); - &tmpread($asheet, - $ENV{'form.unewfield'},$ENV{'form.unewformula'}); - - } elsif ($ENV{'form.saveas'}) { - &setfilename($asheet,$ENV{'form.ufn'}); - &tmpread($asheet); + $r->print(''.&Apache::loncommon::bodytag('Grades Spreadsheet'). + ''); + $r->print(&hiddenfield('uname',$ENV{'form.uname'}). + &hiddenfield('udom',$ENV{'form.udom'}). + &hiddenfield('usymb',$ENV{'form.usymb'}). + &hiddenfield('unewfield',''). + &hiddenfield('unewformula','')); + $r->rflush(); + # + # Full recalc? + if ($ENV{'form.forcerecalc'}) { + $r->print('

Completely Recalculating Sheet ...

'); + undef %spreadsheets; + undef %courserdatas; + undef %userrdatas; + undef %defaultsheets; + undef %updatedata; + } + # Read new sheet or modified worksheet + $r->uri=~/\/(\w+)$/; + my ($asheet,$asheetdata)=&makenewsheet($aname,$adom,$1,$ENV{'form.usymb'}); + # + # If a new formula had been entered, go from work copy + if ($ENV{'form.unewfield'}) { + $r->print('

Modified Workcopy

'); + $ENV{'form.unewformula'}=~s/\'/\"/g; + $r->print('

New formula: '.$ENV{'form.unewfield'}.'='. + $ENV{'form.unewformula'}.'

'); + &setfilename($asheet,$ENV{'form.ufn'}); + &tmpread($asheet,$ENV{'form.unewfield'},$ENV{'form.unewformula'}); + } elsif ($ENV{'form.saveas'}) { + &setfilename($asheet,$ENV{'form.ufn'}); + &tmpread($asheet); + } else { + &readsheet($asheet,$ENV{'form.ufn'}); + } + # Print out user information + unless ($asheetdata->{'sheettype'} eq 'classcalc') { + $r->print('

User: '.$asheetdata->{'uname'}. + '
Domain: '.$asheetdata->{'udom'}); + if (&getcsec($asheet) eq '-1') { + $r->print('

'. + 'Not a student in this course

'); } else { - &readsheet($asheet,$ENV{'form.ufn'}); + $r->print('
Section/Group: '.$asheetdata->{'csec'}); } - # Print out user information - unless ($asheetdata->{'sheettype'} eq 'classcalc') { - $r->print('

User: '.$asheetdata->{'uname'}. - '
Domain: '.$asheetdata->{'udom'}); - if (&getcsec($asheet) eq '-1') { - $r->print('

'. - 'Not a student in this course

'); - } else { - $r->print('
Section/Group: '.$asheetdata->{'csec'}); + if ($ENV{'form.usymb'}) { + $r->print('
Assessment: '. + $ENV{'form.usymb'}.''); + } + } + # + # Check user permissions + if (($asheetdata->{'sheettype'} eq 'classcalc' ) || + ($asheetdata->{'uname'} ne $ENV{'user.name'} ) || + ($asheetdata->{'udom'} ne $ENV{'user.domain'})) { + unless (&Apache::lonnet::allowed('vgr',$asheetdata->{'cid'})) { + $r->print('

Access Permission Denied

'. + ''); + return OK; + } + } + # Additional options + $r->print('
'. + '

'); + if ($asheetdata->{'sheettype'} eq 'assesscalc') { + $r->print('

'. + ''. + 'Level up: Student Sheet

'); + } + if (($asheetdata->{'sheettype'} eq 'studentcalc') && + (&Apache::lonnet::allowed('vgr',$asheetdata->{'cid'}))) { + $r->print ('

'. + 'Level up: Course Sheet

'); + } + # Save dialog + if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { + my $fname=$ENV{'form.ufn'}; + $fname=~s/\_[^\_]+$//; + if ($fname eq 'default') { $fname='course_default'; } + $r->print(''. + ''. + 'make default:

'); + } + $r->print(&hiddenfield('ufn',&getfilename($asheet))); + # Load dialog + if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { + $r->print('

'. + '

' - ); - if ($asheetdata->{'sheettype'} eq 'assesscalc') { - $r->print('

'. - ''. - 'Level up: Student Sheet

'); - } - if (($asheetdata->{'sheettype'} eq 'studentcalc') && - (&Apache::lonnet::allowed('vgr',$asheetdata->{'cid'}))) { - $r->print ( - '

'. - 'Level up: Course Sheet

'); - } - # Save dialog - if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { - my $fname=$ENV{'form.ufn'}; - $fname=~s/\_[^\_]+$//; - if ($fname eq 'default') { $fname='course_default'; } - $r->print - (''. - ''. - '(make default: )

'); - } - $r->print(&hiddenfield('ufn',&getfilename($asheet))); - # Load dialog - if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { - $r->print('

'. - '

'); - if (&gettype($asheet) eq 'studentcalc') { - &setothersheets($asheet,&othersheets($asheet,'assesscalc')); - } - } - # Cached sheets - &expirationdates(); - undef %oldsheets; - undef %loadedcaches; - if ($asheetdata->{'sheettype'} eq 'classcalc') { - $r->print - ("Loading previously calculated student sheets ...
\n"); - $r->rflush(); - &cachedcsheets(); - } elsif ($asheetdata->{'sheettype'} eq 'studentcalc') { - $r->print - ("Loading previously calculated assessment sheets ...
\n"); - $r->rflush(); - &cachedssheets($asheetdata->{'uname'},$asheetdata->{'udom'}, - $asheetdata->{'uhome'}); + $r->print('>'.$_.''); + } + $r->print('

'); + if (&gettype($asheet) eq 'studentcalc') { + &setothersheets($asheet,&othersheets($asheet,'assesscalc')); } - # Update sheet, load rows - $r->print("Loaded sheet(s), updating rows ...
\n"); - $r->rflush(); - # - &updatesheet($asheet,$asheetdata); - $r->print("Updated rows, loading row data ...
\n"); + } + # Cached sheets + &expirationdates(); + undef %oldsheets; + undef %loadedcaches; + if ($asheetdata->{'sheettype'} eq 'classcalc') { + $r->print("Loading previously calculated student sheets ...\n"); $r->rflush(); - # - &loadrows($asheet,$asheetdata,$r); - $r->print("Loaded row data, calculating sheet ...
\n"); + &cachedcsheets(); + } elsif ($asheetdata->{'sheettype'} eq 'studentcalc') { + $r->print("Loading previously calculated assessment sheets ...\n"); $r->rflush(); - # - my $calcoutput=&calcsheet($asheet); - $r->print('

'.$calcoutput.'

'); - # See if something to save - if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { - my $fname=''; - if ($ENV{'form.saveas'} && ($fname=$ENV{'form.newfn'})) { - $fname=~s/\W/\_/g; - if ($fname eq 'default') { $fname='course_default'; } - $fname.='_'.$asheetdata->{'sheettype'}; - &setfilename($asheet,$fname); - $ENV{'form.ufn'}=$fname; - $r->print('

Saving spreadsheet: '. - &writesheet($asheet,$ENV{'form.makedefufn'}).'

'); - } + &cachedssheets($asheetdata->{'uname'},$asheetdata->{'udom'}, + $asheetdata->{'uhome'}); + } + # Update sheet, load rows + $r->print("Loaded sheet(s), updating rows ...
\n"); + $r->rflush(); + # + &updatesheet($asheet,$asheetdata); + $r->print("Updated rows, loading row data ...\n"); + $r->rflush(); + # + &loadrows($asheet,$asheetdata,$r); + $r->print("Loaded row data, calculating sheet ...
\n"); + $r->rflush(); + # + my $calcoutput=&calcsheet($asheet); + $r->print('

'.$calcoutput.'

'); + # See if something to save + if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { + my $fname=''; + if ($ENV{'form.saveas'} && ($fname=$ENV{'form.newfn'})) { + $fname=~s/\W/\_/g; + if ($fname eq 'default') { $fname='course_default'; } + $fname.='_'.$asheetdata->{'sheettype'}; + &setfilename($asheet,$fname); + $ENV{'form.ufn'}=$fname; + $r->print('

Saving spreadsheet: '. + &writesheet($asheet,$ENV{'form.makedefufn'}).'

'); } - #Write the modified worksheet - - $r->print('Current sheet: '.&getfilename($asheet).'

'); - - &tmpwrite($asheet); - + } + # + #Write the modified worksheet + $r->print('Current sheet: '.&getfilename($asheet).'

'); + &tmpwrite($asheet); if ($asheetdata->{'sheettype'} eq 'studentcalc') { - $r->print('
Show rows with empty A column: '); + $r->print('
Show rows with empty A column: '); } else { $r->print('
Show empty rows: '); } - + # $r->print(&hiddenfield('userselhidden','true'). - 'print(' checked'); + $r->print(' checked'); } else { - unless ($ENV{'form.userselhidden'}) { - unless - ($ENV{'course.'.$ENV{'request.course.id'}.'.hideemptyrows'} eq 'yes') { - $r->print(' checked'); - $ENV{'form.showall'}=1; - } - } + unless ($ENV{'form.userselhidden'}) { + unless + ($ENV{'course.'.$ENV{'request.course.id'}.'.hideemptyrows'} eq 'yes') { + $r->print(' checked'); + $ENV{'form.showall'}=1; + } + } } $r->print('>'); - + # + # CSV format checkbox (classcalc sheets only) if ($asheetdata->{'sheettype'} eq 'classcalc') { - $r->print( - ' Output CSV format: print(' checked'); } - $r->print('>'); + $r->print(' Output CSV format: print(' checked'); } + $r->print('>'); } - -# ------------------------------------------------------------------ Insertrows + # + # Buttons to insert rows $r->print(' Student Status: '. &Apache::lonhtmlcommon::StatusOptions ($ENV{'form.Status'},'sheet')); - - $r->print(<print(<
ENDINSERTBUTTONS - -# ------------------------------------------------------------- Print out sheet - - &outsheet($r,$asheet); + # Print out sheet + &outsheet($r,$asheet,$asheetdata); $r->print(''); - -# ------------------------------------------------------------------------ Done - } else { -# ----------------------------- Not in a course, or not allowed to modify parms - $ENV{'user.error.msg'}= - $r->uri.":opa:0:0:Cannot modify spreadsheet"; - return HTTP_NOT_ACCEPTABLE; - } + # Done return OK; - } 1;

 '.$what.''.join('', - (split(//,'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. - 'abcdefghijklmnopqrstuvwxyz'))). + $r->print(''. + join('', + (split(//,'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. + 'abcdefghijklmnopqrstuvwxyz'))). "