version 1.25, 2002/08/14 16:18:55
|
version 1.26, 2002/08/14 17:45:19
|
Line 45 use GDBM_File;
|
Line 45 use GDBM_File;
|
|
|
my $jr; |
my $jr; |
|
|
sub BuildProblemStatisticsPage { |
sub InitializeProblemStatistics { |
my ($cacheDB, $students, $courseID, $c, $r)=@_; |
my ($cacheDB, $students, $courseID, $c, $r)=@_; |
my %cache; |
my %cache; |
|
|
Line 53 sub BuildProblemStatisticsPage {
|
Line 53 sub BuildProblemStatisticsPage {
|
|
|
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
$r->print('Unable to tie database.'); |
$r->print('Unable to tie database.'); |
return; |
return ('ERROR', undef); |
} |
} |
|
|
# Remove students who don't have the proper section. |
# Remove students who don't have the proper section. |
Line 80 sub BuildProblemStatisticsPage {
|
Line 80 sub BuildProblemStatisticsPage {
|
} |
} |
} |
} |
|
|
my $Ptr = ''; |
|
$Ptr .= '<table border="0"><tbody>'; |
|
$Ptr .= '<tr><td align="right"><b>Select Map</b></td>'."\n"; |
|
$Ptr .= '<td align="left">'; |
|
$Ptr .= &Apache::lonhtmlcommon::MapOptions(\%cache, 'ProblemStatistics', |
|
'Statistics'); |
|
$Ptr .= '</td></tr>'."\n"; |
|
$Ptr .= '<tr><td align="right"><b>Sorting Type:</b></td>'."\n"; |
|
$Ptr .= '<td align="left">'."\n"; |
|
$Ptr .= &Apache::lonhtmlcommon::AscendOrderOptions( |
|
$cache{'ProblemStatisticsAscend'}, |
|
'ProblemStatistics', |
|
'Statistics'); |
|
$Ptr .= '</td></tr>'."\n"; |
|
$Ptr .= '<tr><td align="right"><b>Select Sections</b>'; |
|
$Ptr .= '</td>'."\n"; |
|
$Ptr .= '<td align="left">'."\n"; |
|
my @sections = split(':',$cache{'sectionList'}); |
|
$Ptr .= &Apache::lonhtmlcommon::MultipleSectionSelect(\@sections, |
|
\@sectionsSelected, |
|
'Statistics'); |
|
$Ptr .= '</td></tr>'."\n"; |
|
$Ptr .= &ProblemStatisticsButtons($cache{'DisplayFormat'}, |
|
$cache{'DisplayLegend'}); |
|
$Ptr .= '</table>'; |
|
if($cache{'DisplayLegend'} eq 'Show Legend') { |
|
$Ptr .= &ProblemStatisticsLegend(); |
|
} |
|
$r->print($Ptr); |
|
$r->rflush(); |
|
|
|
my @Header = ("Homework Sets Order","#Stdnts","Tries","Mod", |
|
"Mean","#YES","#yes","%Wrng","DoDiff", |
|
"S.D.","Skew.","D.F.1st","D.F.2nd","Disc."); |
|
my $color=&setbgcolor(0); |
|
|
|
# my %Discuss=&Apache::loncoursedata::LoadDiscussion($courseID); |
# my %Discuss=&Apache::loncoursedata::LoadDiscussion($courseID); |
my $lastStatus = (defined($cache{'StatisticsLastStatus'})) ? |
my $lastStatus = (defined($cache{'StatisticsLastStatus'})) ? |
$cache{'StatisticsLastStatus'} : 'Nothing'; |
$cache{'StatisticsLastStatus'} : 'Nothing'; |
Line 127 sub BuildProblemStatisticsPage {
|
Line 91 sub BuildProblemStatisticsPage {
|
untie(%cache); |
untie(%cache); |
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT(),0640)) { |
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT(),0640)) { |
$r->print('Unable to tie database.'); |
$r->print('Unable to tie database.'); |
return; |
return ('ERROR', undef); |
} |
} |
my @statkeys = split(':::', $cache{'StatisticsKeys'}); |
my @statkeys = split(':::', $cache{'StatisticsKeys'}); |
delete $cache{'StatisticsKeys'}; |
delete $cache{'StatisticsKeys'}; |
Line 144 sub BuildProblemStatisticsPage {
|
Line 108 sub BuildProblemStatisticsPage {
|
'true', |
'true', |
$courseID, |
$courseID, |
$r, $c); |
$r, $c); |
if($c->aborted()) { return; } |
if($c->aborted()) { return ('ERROR', undef); } |
|
|
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
$r->print('Unable to tie database.'); |
$r->print('Unable to tie database.'); |
return; |
return ('ERROR', undef); |
} |
} |
my ($problemData) = &ExtractStudentData(\%cache, $students); |
my ($problemData) = &ExtractStudentData(\%cache, $students); |
&CalculateStatistics($problemData, \%cache); |
&CalculateStatistics($problemData, \%cache); |
Line 156 sub BuildProblemStatisticsPage {
|
Line 120 sub BuildProblemStatisticsPage {
|
|
|
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT(),0640)) { |
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT(),0640)) { |
$r->print('Unable to tie database.'); |
$r->print('Unable to tie database.'); |
return; |
return ('ERROR', undef); |
} |
} |
foreach(keys(%$problemData)) { |
foreach(keys(%$problemData)) { |
$cache{$_} = $problemData->{$_}; |
$cache{$_} = $problemData->{$_}; |
Line 169 sub BuildProblemStatisticsPage {
|
Line 133 sub BuildProblemStatisticsPage {
|
|
|
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
$r->print('Unable to tie database.'); |
$r->print('Unable to tie database.'); |
return; |
return ('ERROR', undef); |
} |
} |
} |
} |
|
|
my $orderedProblems = &SortProblems(\%cache, |
my $orderedProblems = &SortProblems(\%cache, |
$cache{'ProblemStatisticsSort'}, |
$cache{'ProblemStatisticsSort'}, |
|
$cache{'SortProblems'}, |
$cache{'ProblemStatisticsAscend'}); |
$cache{'ProblemStatisticsAscend'}); |
&BuildStatisticsTable(\%cache, $cache{'DisplayFormat'}, $orderedProblems, |
return ('OK', $orderedProblems); |
|
} |
|
|
|
sub BuildProblemStatisticsPage { |
|
my ($cacheDB, $students, $courseID, $c, $r)=@_; |
|
|
|
my @Header = ("Homework Sets Order","#Stdnts","Tries","Mod", |
|
"Mean","#YES","#yes","%Wrng","DoDiff", |
|
"S.D.","Skew.","D.F.1st","D.F.2nd","Disc."); |
|
my $color=&setbgcolor(0); |
|
my %cache; |
|
|
|
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
|
$r->print('Unable to tie database.'); |
|
return; |
|
} |
|
my $Ptr = ''; |
|
$Ptr .= '<table border="0"><tbody>'; |
|
$Ptr .= '<tr><td align="right"><b>Select Map</b></td>'."\n"; |
|
$Ptr .= '<td align="left">'; |
|
$Ptr .= &Apache::lonhtmlcommon::MapOptions(\%cache, 'ProblemStatistics', |
|
'Statistics'); |
|
$Ptr .= '</td></tr>'."\n"; |
|
$Ptr .= '<tr><td align="right"><b>Sorting Type:</b></td>'."\n"; |
|
$Ptr .= '<td align="left">'."\n"; |
|
$Ptr .= &Apache::lonhtmlcommon::AscendOrderOptions( |
|
$cache{'ProblemStatisticsAscend'}, |
|
'ProblemStatistics', |
|
'Statistics'); |
|
$Ptr .= '</td></tr>'."\n"; |
|
$Ptr .= '<tr><td align="right"><b>Select Sections</b>'; |
|
$Ptr .= '</td>'."\n"; |
|
$Ptr .= '<td align="left">'."\n"; |
|
my @sections = split(':',$cache{'sectionList'}); |
|
my @sectionsSelected = split(':',$cache{'sectionsSelected'}); |
|
$Ptr .= &Apache::lonhtmlcommon::MultipleSectionSelect(\@sections, |
|
\@sectionsSelected, |
|
'Statistics'); |
|
$Ptr .= '</td></tr>'."\n"; |
|
$Ptr .= &ProblemStatisticsButtons($cache{'DisplayFormat'}, |
|
$cache{'DisplayLegend'}, |
|
$cache{'SortProblems'}); |
|
$Ptr .= '</table>'; |
|
if($cache{'DisplayLegend'} eq 'Show Legend') { |
|
$Ptr .= &ProblemStatisticsLegend(); |
|
} |
|
$r->print($Ptr); |
|
$r->rflush(); |
|
untie(%cache); |
|
|
|
my ($result, $orderedProblems) = |
|
&InitializeProblemStatistics($cacheDB, $students, $courseID, $c, $r); |
|
if($result ne 'OK') { |
|
return; |
|
} |
|
|
|
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
|
$r->print('Unable to tie database.'); |
|
return; |
|
} |
|
&BuildStatisticsTable(\%cache, $cache{'DisplayFormat'}, |
|
$cache{'SortProblems'}, $orderedProblems, |
\@Header, $r, $color); |
\@Header, $r, $color); |
untie(%cache); |
untie(%cache); |
|
|
Line 184 sub BuildProblemStatisticsPage {
|
Line 210 sub BuildProblemStatisticsPage {
|
} |
} |
|
|
sub BuildGraphicChart { |
sub BuildGraphicChart { |
my ($graph,$cacheDB,$courseDescription,$r)=@_; |
my ($graph,$cacheDB,$courseDescription,$students,$courseID,$r,$c)=@_; |
my %cache; |
my %cache; |
my $max = 0; |
my $max = 0; |
|
|
|
my ($result, undef) = |
|
&InitializeProblemStatistics($cacheDB, $students, $courseID, $c, $r); |
|
if($result ne 'OK') { |
|
return; |
|
} |
|
|
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
return '<html><body>Unable to tie database.</body></html>'; |
return 'Unable to tie database.'; |
} |
} |
|
|
my @problems = split(':::', $cache{'problemList'}); |
my @problems = split(':::', $cache{'problemList'}); |
Line 221 sub BuildGraphicChart {
|
Line 253 sub BuildGraphicChart {
|
$sendValues); |
$sendValues); |
|
|
$r->print('</form>'."\n"); |
$r->print('</form>'."\n"); |
$r->print('<IMG src="/cgi-bin/graph.gif?'.(join('&', @GData)).'" border="1" />'); |
$r->print('<IMG src="/cgi-bin/graph.gif?'.(join('&', @GData)). |
|
'" border="1" />'); |
$r->print('<form>'."\n"); |
$r->print('<form>'."\n"); |
|
|
return; |
return; |
Line 247 sub CreateProblemStatisticsTableHeading
|
Line 280 sub CreateProblemStatisticsTableHeading
|
} |
} |
|
|
sub BuildStatisticsTable { |
sub BuildStatisticsTable { |
my ($cache,$displayFormat,$orderedProblems,$headings,$r,$color)=@_; |
my ($cache,$displayFormat,$sortProblems,$orderedProblems,$headings, |
|
$r,$color)=@_; |
|
|
#6666666 |
#6666666 |
# my $file="/home/httpd/perl/tmp/183d.txt"; |
# my $file="/home/httpd/perl/tmp/183d.txt"; |
Line 263 sub BuildStatisticsTable {
|
Line 297 sub BuildStatisticsTable {
|
##777777 |
##777777 |
## $Str .= &Classify($discriminantFactor, $students); |
## $Str .= &Classify($discriminantFactor, $students); |
|
|
if($displayFormat ne 'Display CSV Format') { |
|
$r->print('<table border="0"><tr><td bgcolor="#777777">'."\n"); |
|
$r->print('<table border="0" cellpadding="3">'."\n"); |
|
$r->print(&CreateProblemStatisticsTableHeading($headings, $r)); |
|
} else { |
|
$r->print('<br>'); |
|
} |
|
|
|
my $count = 1; |
my $count = 1; |
|
my $currentSequence = -1; |
foreach(@$orderedProblems) { |
foreach(@$orderedProblems) { |
my ($sequence,$problem,$part)=split(':', $_); |
my ($sequence,$problem,$part)=split(':', $_); |
if($cache->{'StatisticsMaps'} ne 'All Maps' && |
if($cache->{'StatisticsMaps'} ne 'All Maps' && |
Line 279 sub BuildStatisticsTable {
|
Line 306 sub BuildStatisticsTable {
|
next; |
next; |
} |
} |
|
|
|
if($currentSequence == -1 || |
|
($sortProblems eq 'Sort Within Sequence' && |
|
$currentSequence != $sequence)) { |
|
if($displayFormat ne 'Display CSV Format') { |
|
if($currentSequence ne -1) { |
|
$r->print('</table>'); |
|
$r->print('</td></tr></table><br>'); |
|
} |
|
if($sortProblems eq 'Sort Within Sequence') { |
|
$r->print('<b>'.$cache->{$sequence.':title'}.'</b>'); |
|
} |
|
$r->print('<table border="0"><tr><td bgcolor="#777777">'."\n"); |
|
$r->print('<table border="0" cellpadding="3">'."\n"); |
|
$r->print(&CreateProblemStatisticsTableHeading($headings, $r)); |
|
} else { |
|
if($sortProblems eq 'Sort Within Sequence') { |
|
$r->print('"'.$cache->{$sequence.':title'}.'"'); |
|
} |
|
$r->print('<br>'); |
|
} |
|
$currentSequence = $sequence; |
|
} |
|
|
my $ref = '<a href="'.$cache->{$problem.':source'}. |
my $ref = '<a href="'.$cache->{$problem.':source'}. |
'" target="_blank">'.$cache->{$problem.':title'}.'</a>'; |
'" target="_blank">'.$cache->{$problem.':title'}.'</a>'; |
# my $ref = $cache->{$problem.':title'}; |
|
my $title = $cache->{$problem.':title'}; |
my $title = $cache->{$problem.':title'}; |
my $source = 'source'; |
my $source = $cache->{$problem.':source'}; |
my $tableData = join('&', $ref, $title, $source, |
my $tableData = join('&', $ref, $title, $source, |
$cache->{$_.':studentCount'}, |
$cache->{$_.':studentCount'}, |
$cache->{$_.':totalTries'}, |
$cache->{$_.':totalTries'}, |
Line 300 sub BuildStatisticsTable {
|
Line 349 sub BuildStatisticsTable {
|
0); # 0 is for discussion, need to figure out |
0); # 0 is for discussion, need to figure out |
|
|
&TableRow($displayFormat,$tableData,$count,$r,$color); |
&TableRow($displayFormat,$tableData,$count,$r,$color); |
|
|
$count++; |
$count++; |
} |
} |
if($cache->{'DisplayFormat'} ne 'Display CSV Format') { |
if($displayFormat ne 'Display CSV Format') { |
$r->print('</table>'."\n"); |
$r->print('</table>'."\n"); |
|
$r->print('</td></tr></table>'); |
|
} else { |
|
$r->print('<br>'); |
} |
} |
$r->print('</td></tr></table>'); |
|
#6666666 |
#6666666 |
# $r->print('<br>'.$out.'&'.$DoD); |
# $r->print('<br>'.$out.'&'.$DoD); |
# print (OUT $out.'@'.$DoD.'&'); |
# print (OUT $out.'@'.$DoD.'&'); |
Line 323 sub TableRow {
|
Line 375 sub TableRow {
|
$Wrng,$DoD,$SD,$Sk,$_D1,$_D2,$DiscNo,$Prob)=split(/\&/,$Str); |
$Wrng,$DoD,$SD,$Sk,$_D1,$_D2,$DiscNo,$Prob)=split(/\&/,$Str); |
my $Ptr; |
my $Ptr; |
if($displayFormat eq 'Display CSV Format') { |
if($displayFormat eq 'Display CSV Format') { |
$Ptr="\n".'<br>'. |
$Ptr='"'.$RealIdx.'",'."\n". |
"\n".'"'.$RealIdx.'",'. |
'"'.$title.'",'."\n". |
"\n".'"'.$title.'",'. |
'"'.$source.'",'."\n". |
"\n".'"'.$source.'",'. |
'"'.$StdNo.'",'."\n". |
"\n".'"'.$StdNo.'",'. |
'"'.$TotalTries.'",'."\n". |
"\n".'"'.$TotalTries.'",'. |
'"'.$MxTries.'",'."\n". |
"\n".'"'.$MxTries.'",'. |
'"'.$Avg.'",'."\n". |
"\n".'"'.$Avg.'",'. |
'"'.$YES.'",'."\n". |
"\n".'"'.$YES.'",'. |
'"'.$Override.'",'."\n". |
"\n".'"'.$Override.'",'. |
'"'.$Wrng.'",'."\n". |
"\n".'"'.$Wrng.'",'. |
'"'.$DoD.'",'."\n". |
"\n".'"'.$DoD.'",'. |
'"'.$SD.'",'."\n". |
"\n".'"'.$SD.'",'. |
'"'.$Sk.'",'."\n". |
"\n".'"'.$Sk.'",'. |
'"'.$_D1.'",'."\n". |
"\n".'"'.$_D1.'",'. |
'"'.$_D2.'"'."\n". |
"\n".'"'.$_D2.'"'. |
'"'.$DiscNo.'"'."\n". |
"\n".'"'.$DiscNo.'"'; |
"<br>\n"; |
|
|
$r->print("\n".$Ptr); |
$r->print("\n".$Ptr); |
} else { |
} else { |
$Ptr="\n".'<tr>'. |
$Ptr='<tr>'."\n". |
"\n".'<td bgcolor="#ffffe6">'.$RealIdx.'</td>'. |
'<td bgcolor="#ffffe6">'.$RealIdx.'</td>'."\n". |
"\n".'<td bgcolor="#ffffe6">'.$ref.'</td>'. |
'<td bgcolor="#ffffe6">'.$ref.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"yellow"}.'> '.$StdNo.'</td>'. |
'<td bgcolor='.$color->{"yellow"}.'> '.$StdNo.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"yellow"}.'>'.$TotalTries.'</td>'. |
'<td bgcolor='.$color->{"yellow"}.'>'.$TotalTries.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"yellow"}.'>'.$MxTries.'</td>'. |
'<td bgcolor='.$color->{"yellow"}.'>'.$MxTries.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"gb"}.'>'.$Avg.'</td>'. |
'<td bgcolor='.$color->{"gb"}.'>'.$Avg.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"gb"}.'> '.$YES.'</td>'. |
'<td bgcolor='.$color->{"gb"}.'> '.$YES.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"gb"}.'> '.$Override.'</td>'. |
'<td bgcolor='.$color->{"gb"}.'> '.$Override.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"red"}.'> '.$Wrng.'</td>'. |
'<td bgcolor='.$color->{"red"}.'> '.$Wrng.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"red"}.'> '.$DoD.'</td>'. |
'<td bgcolor='.$color->{"red"}.'> '.$DoD.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"green"}.'> '.$SD.'</td>'. |
'<td bgcolor='.$color->{"green"}.'> '.$SD.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"green"}.'> '.$Sk.'</td>'. |
'<td bgcolor='.$color->{"green"}.'> '.$Sk.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"purple"}.'> '.$_D1.'</td>'. |
'<td bgcolor='.$color->{"purple"}.'> '.$_D1.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"purple"}.'> '.$_D2.'</td>'. |
'<td bgcolor='.$color->{"purple"}.'> '.$_D2.'</td>'."\n". |
"\n".'<td bgcolor='.$color->{"yellow"}.'> '.$DiscNo.'</td>'; |
'<td bgcolor='.$color->{"yellow"}.'> '.$DiscNo.'</td>'."\n"; |
$r->print("\n".$Ptr.'</tr>' ); |
$r->print($Ptr.'</tr>'."\n"); |
} |
} |
|
|
return; |
return; |
Line 387 sub setbgcolor {
|
Line 439 sub setbgcolor {
|
} |
} |
|
|
sub ProblemStatisticsButtons { |
sub ProblemStatisticsButtons { |
my ($displayFormat, $displayLegend)=@_; |
my ($displayFormat, $displayLegend, $sortProblems)=@_; |
|
|
my $Ptr = '<tr><td></td><td align="left">'; |
my $Ptr = '<tr><td></td><td align="left">'; |
$Ptr .= '<input type="submit" name="DoDiffGraph" '; |
$Ptr .= '<input type="submit" name="DoDiffGraph" '; |
Line 396 sub ProblemStatisticsButtons {
|
Line 448 sub ProblemStatisticsButtons {
|
$Ptr .= '<input type="submit" name="PercentWrongGraph" '; |
$Ptr .= '<input type="submit" name="PercentWrongGraph" '; |
$Ptr .= 'value="%Wrong Graph" />'."\n"; |
$Ptr .= 'value="%Wrong Graph" />'."\n"; |
$Ptr .= '</td></tr><tr><td></td><td>'."\n"; |
$Ptr .= '</td></tr><tr><td></td><td>'."\n"; |
|
$Ptr .= '<input type="submit" name="SortProblems" '; |
|
if($sortProblems eq 'Sort All Problems') { |
|
$Ptr .= 'value="Sort Within Sequence" />'."\n"; |
|
} else { |
|
$Ptr .= 'value="Sort All Problems" />'."\n"; |
|
} |
|
$Ptr .= ' '; |
$Ptr .= '<input type="submit" name="DisplayLegend" '; |
$Ptr .= '<input type="submit" name="DisplayLegend" '; |
if($displayLegend eq 'Show Legend') { |
if($displayLegend eq 'Show Legend') { |
$Ptr .= 'value="Hide Legend" />'."\n"; |
$Ptr .= 'value="Hide Legend" />'."\n"; |
Line 590 sub SortDivideByTries {
|
Line 649 sub SortDivideByTries {
|
} |
} |
|
|
sub SortProblems { |
sub SortProblems { |
my ($problemData,$sortBy,$ascend)=@_; |
my ($problemData,$sortBy,$sortProblems,$ascend)=@_; |
|
|
my @problems = split(':::', $problemData->{'problemList'}); |
my @problems = split(':::', $problemData->{'problemList'}); |
if($sortBy eq "Homework Sets Order") { |
if($sortBy eq "Homework Sets Order") { |
Line 614 sub SortProblems {
|
Line 673 sub SortProblems {
|
elsif($sortBy eq "Disc.") { $data = ''; } |
elsif($sortBy eq "Disc.") { $data = ''; } |
else { return \@problems; } |
else { return \@problems; } |
|
|
my @orderedProblems = |
my %temp; |
sort { $problemData->{$a.$data} <=> $problemData->{$b.$data} } |
foreach(@problems) { |
@problems; |
my ($sequence) = split(':', $_); |
|
$temp{$_} = $sequence; |
|
} |
|
|
|
my @orderedProblems; |
|
if($sortProblems eq "Sort Within Sequence") { |
|
@orderedProblems = |
|
sort { $temp{$a} cmp $temp{$b} || |
|
$problemData->{$a.$data} <=> $problemData->{$b.$data} } |
|
@problems; |
|
} else { |
|
@orderedProblems = |
|
sort { $problemData->{$a.$data} <=> $problemData->{$b.$data} } |
|
@problems; |
|
} |
|
|
if($ascend eq 'Descending') { |
if($ascend eq 'Descending') { |
@orderedProblems = reverse(@orderedProblems); |
@orderedProblems = reverse(@orderedProblems); |
} |
} |