--- loncom/interface/Attic/lonspreadsheet.pm 2002/11/21 19:26:34 1.147 +++ loncom/interface/Attic/lonspreadsheet.pm 2002/12/02 16:39:30 1.151 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.147 2002/11/21 19:26:34 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.151 2002/12/02 16:39:30 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -965,11 +965,9 @@ sub templaterow { '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') { - my $fm=$sheet->{'f'}->{'template_'.$_}; - $fm=~s/[\'\"]/\&\#34;/g; push(@cols,{ name => 'template_'.$_, - formula => $fm, - value => $fm }); + formula => $sheet->{'f'}->{'template_'.$_}, + value => $sheet->{'f'}->{'template_'.$_} }); } return ($rowlabel,@cols); } @@ -993,10 +991,8 @@ sub outrowassess { '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') { - my $fm=$sheet->{'f'}->{$_.$n}; - $fm=~s/[\'\"]/\&\#34;/g; push(@cols,{ name => $_.$n, - formula => $fm, + formula => $sheet->{'f'}->{$_.$n}, value => $sheet->{'values'}->{$_.$n}}); } return ($rowlabel,@cols); @@ -1019,10 +1015,8 @@ sub outrow { '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') { - my $fm=$sheet->{'f'}->{$_.$n}; - $fm=~s/[\'\"]/\&\#34;/g; push(@cols,{ name => $_.$n, - formula => $fm, + formula => $sheet->{'f'}->{$_.$n}, value => $sheet->{'values'}->{$_.$n}}); } return ($rowlabel,@cols); @@ -1257,9 +1251,17 @@ sub html_editable_cell { if ($value =~ /^\s*$/ ) { $value = '<font color="'.$bgcolor.'">#</font>'; } + &Apache::lonnet::logthis($name.' formula = '.$formula) if ($formula); + $formula =~ s/</\</g; + $formula =~ s/>/\>/g; + $formula =~ s/\&/\&/g; + $formula =~ s/\"/\"/g; + $formula =~ s/\'/\"/g; $formula =~ s/\n/\\n/gs; - $result .= '<a href="javascript:celledit(\''. - $name.'\',\''.$formula.'\');">'.$value.'</a>'; + &Apache::lonnet::logthis($name.' formula = '.$formula) if ($formula); + $result .= "<a href=\"javascript:celledit(\'". + $name."','".$formula."');\">".$value."</a>"; + &Apache::lonnet::logthis('result = '.$result) if ($formula); return $result; } @@ -1317,7 +1319,7 @@ END # Print out template row #################################### my ($rowlabel,@rowdata) = &get_row($sheet,'-'); - my $row_html = '<tr><td>'.&format_html_rowlabel($rowlabel).'</td>'; + my $row_html = '<tr><td>'.&format_html_rowlabel($sheet,$rowlabel).'</td>'; my $num_cols_output = 0; foreach my $cell (@rowdata) { if ($num_cols_output++ < $num_uneditable) { @@ -1335,7 +1337,7 @@ END # Print out summary/export row #################################### my ($rowlabel,@rowdata) = &get_row($sheet,'0'); - $row_html = '<tr><td>'.&format_html_rowlabel($rowlabel).'</td>'; + $row_html = '<tr><td>'.&format_html_rowlabel($sheet,$rowlabel).'</td>'; $num_cols_output = 0; foreach my $cell (@rowdata) { if ($num_cols_output++ < 26) { @@ -1381,11 +1383,11 @@ END '</font></b></td>'; # if ($sheet->{'sheettype'} eq 'classcalc') { - $row_html.='<td>'.&format_html_rowlabel($rowlabel).'</td>'; + $row_html.='<td>'.&format_html_rowlabel($sheet,$rowlabel).'</td>'; # Output links for each student? # Nope, that is already done for us in format_html_rowlabel (for now) } elsif ($sheet->{'sheettype'} eq 'studentcalc') { - $row_html.='<td>'.&format_html_rowlabel($rowlabel); + $row_html.='<td>'.&format_html_rowlabel($sheet,$rowlabel); $row_html.= '<br>'. '<select name="sel_'.$rownum.'" '. 'onChange="changesheet('.$rownum.')">'. @@ -1399,7 +1401,7 @@ END } $row_html.='</select></td>'; } elsif ($sheet->{'sheettype'} eq 'assesscalc') { - $row_html.='<td>'.&format_html_rowlabel($rowlabel).'</td>'; + $row_html.='<td>'.&format_html_rowlabel($sheet,$rowlabel).'</td>'; } # my $shown_cells = 0; @@ -1469,7 +1471,7 @@ sub outsheet_csv { foreach my $rownum (@Rows) { my ($rowlabel,@rowdata) = &get_row($sheet,$rownum); next if ($rowlabel =~ /^\s*$/); - push (@Values,&format_csv_rowlabel($rowlabel)); + push (@Values,&format_csv_rowlabel($sheet,$rowlabel)); foreach my $cell (@rowdata) { push (@Values,'"'.$cell->{'value'}.'"'); } @@ -1638,7 +1640,7 @@ sub export_sheet_as_excel { # Write the summary/export row # #################################### my ($rowlabel,@rowdata) = &get_row($sheet,'0'); - my $label = &format_excel_rowlabel($rowlabel); + my $label = &format_excel_rowlabel($sheet,$rowlabel); $cols_output = 0; $worksheet->write($rows_output,$cols_output++,$label); foreach my $cell (@rowdata) { @@ -1655,7 +1657,7 @@ sub export_sheet_as_excel { my ($rowlabel,@rowdata) = &get_row($sheet,$rownum); next if ($rowlabel =~ /^[\s]*$/); $cols_output = 0; - my $label = &format_excel_rowlabel($rowlabel); + my $label = &format_excel_rowlabel($sheet,$rowlabel); if ( ! $ENV{'form.showall'} && $sheet->{'sheettype'} =~ /^(studentcalc|classcalc)$/) { my $row_is_empty = 1; @@ -2052,18 +2054,22 @@ sub parmval { ## Row label formatting routines ## ################################################################## sub format_html_rowlabel { + my $sheet = shift; my $rowlabel = shift; return '' if ($rowlabel eq ''); my ($type,$labeldata) = split(':',$rowlabel,2); my $result = ''; if ($type eq 'symb') { - my ($symb,$uname,$udom,$mapid,$resid,$title) = split(':',$labeldata); + my ($symb,$mapid,$resid,$title) = split(':',$labeldata); $symb = &Apache::lonnet::unescape($symb); $result = '<a href="/adm/assesscalc?usymb='.$symb. - '&uname='.$uname.'&udom='.$udom. + '&uname='.$sheet->{'uname'}.'&udom='.$sheet->{'udom'}. '&mapid='.$mapid.'&resid='.$resid.'">'.$title.'</a>'; } elsif ($type eq 'student') { my ($sname,$sdom,$fullname,$section,$id) = split(':',$labeldata); + if ($fullname =~ /^\s*$/) { + $fullname = $sname.'@'.$sdom; + } $result ='<a href="/adm/studentcalc?uname='.$sname. '&udom='.$sdom.'">'; $result.=$section.' '.$id." ".$fullname.'</a>'; @@ -2076,12 +2082,13 @@ sub format_html_rowlabel { } sub format_csv_rowlabel { + my $sheet = shift; my $rowlabel = shift; return '' if ($rowlabel eq ''); my ($type,$labeldata) = split(':',$rowlabel,2); my $result = ''; if ($type eq 'symb') { - my ($symb,$uname,$udom,$mapid,$resid,$title) = split(':',$labeldata); + my ($symb,$mapid,$resid,$title) = split(':',$labeldata); $symb = &Apache::lonnet::unescape($symb); $result = $title; } elsif ($type eq 'student') { @@ -2097,12 +2104,13 @@ sub format_csv_rowlabel { } sub format_excel_rowlabel { + my $sheet = shift; my $rowlabel = shift; return '' if ($rowlabel eq ''); my ($type,$labeldata) = split(':',$rowlabel,2); my $result = ''; if ($type eq 'symb') { - my ($symb,$uname,$udom,$mapid,$resid,$title) = split(':',$labeldata); + my ($symb,$mapid,$resid,$title) = split(':',$labeldata); $symb = &Apache::lonnet::unescape($symb); $result = $title; } elsif ($type eq 'student') { @@ -2214,7 +2222,7 @@ sub get_student_rowlabels { my %assesslist; foreach ('Feedback','Evaluation','Tutoring','Discussion') { my $symb = '_'.lc($_); - $assesslist{$symb} = join(':',('symb',$symb,$uname,$udom,0,0,$_)); + $assesslist{$symb} = join(':',('symb',$symb,0,0,$_)); } # while (my ($key,$srcf) = each(%course_db)) { @@ -2227,8 +2235,7 @@ sub get_student_rowlabels { &Apache::lonnet::declutter($course_db{'map_id_'.$mapid}). '___'.$resid.'___'.&Apache::lonnet::declutter($srcf); $assesslist{$symb}='symb:'.&Apache::lonnet::escape($symb).':' - .$uname.':'.$udom.':'.$mapid.':'.$resid.':'. - $course_db{'title_'.$id}; + .$mapid.':'.$resid.':'.$course_db{'title_'.$id}; } } untie(%course_db); @@ -2983,6 +2990,8 @@ sub handler { function celledit(cellname,cellformula) { var edit_text = ''; + // cellformula may contain less-than and greater-than symbols, so + // we need to escape them? edit_text +='<html><head><title>Cell Edit Window</title></head><body>'; edit_text += '<form name="editwinform">'; edit_text += '<center><h3>Cell '+cellname+'</h3>'; @@ -3216,13 +3225,18 @@ ENDSCRIPT } $r->print('>'.$mode.'</option>'."\n"); } - if ($sheet->{'sheettype'} eq 'classcalc') { - $r->print('<option value="recursive excel"'); - if ($ENV{'form.output'} eq 'recursive excel') { - $r->print(' selected '); - } - $r->print(">Multi-Sheet Excel</option>\n"); - } +# +# Mulit-sheet excel takes too long and does not work at all for large +# classes. Future inclusion of this option may be possible with the +# Spreadsheet::WriteExcel::Big and speed improvements. +# +# if ($sheet->{'sheettype'} eq 'classcalc') { +# $r->print('<option value="recursive excel"'); +# if ($ENV{'form.output'} eq 'recursive excel') { +# $r->print(' selected '); +# } +# $r->print(">Multi-Sheet Excel</option>\n"); +# } $r->print("</select>\n"); # if ($sheet->{'sheettype'} eq 'classcalc') {