--- loncom/interface/courseclassifier.pm 2013/07/15 14:32:45 1.15 +++ loncom/interface/courseclassifier.pm 2015/05/21 23:26:34 1.22 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utilities for classifying courses based on institutional code # -# $Id: courseclassifier.pm,v 1.15 2013/07/15 14:32:45 bisitz Exp $ +# $Id: courseclassifier.pm,v 1.22 2015/05/21 23:26:34 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,7 +37,8 @@ use LONCAPA; sub retrieve_instcodes { my ($coursecodes,$codedom) = @_; my $totcodes; - my %courses = &Apache::lonnet::courseiddump($codedom,'.',1,'.','.','.', undef,undef,'Course'); + my %courses = &Apache::lonnet::courseiddump($codedom,'.',1,'.','.','.', + undef,undef,'Course'); foreach my $course (keys(%courses)) { if (ref($courses{$course}) eq 'HASH') { if ($courses{$course}{'inst_code'} ne '') { @@ -147,7 +148,7 @@ sub build_code_selections { for (my $i=1; $i<@{$codetitles}; $i++) { %{$idarrays{$$codetitles[$i]}} = (); } - foreach my $cid (sort keys %{$codes}) { + foreach my $cid (sort(keys(%{$codes}))) { &recurse_list($cid,$codetitles,$codes,0,\%idarrays); } for (my $num=0; $num<@{$codetitles}; $num++) { @@ -168,7 +169,7 @@ sub build_code_selections { } elsif ($num == 1) { %{$$idlist{$$codetitles[1]}} = (); %{$$idlist_titles{$$codetitles[1]}} = (); - foreach my $key_a (keys %{$idarrays{$$codetitles[1]}}) { + foreach my $key_a (keys(%{$idarrays{$$codetitles[1]}})) { my @sorted_a = (); my @sorted_a_titles = (); &sort_cats($num,$cat_order,$codetitles,\@{$idarrays{$$codetitles[1]}{$key_a}},\@sorted_a); @@ -186,10 +187,10 @@ sub build_code_selections { } elsif ($num == 2) { %{$$idlist{$$codetitles[2]}} = (); %{$$idlist_titles{$$codetitles[2]}} = (); - foreach my $key_a (keys %{$idarrays{$$codetitles[2]}}) { + foreach my $key_a (keys(%{$idarrays{$$codetitles[2]}})) { %{$$idlist{$$codetitles[2]}{$key_a}} = (); %{$$idlist_titles{$$codetitles[2]}{$key_a}} = (); - foreach my $key_b (keys %{$idarrays{$$codetitles[2]}{$key_a}}) { + foreach my $key_b (keys(%{$idarrays{$$codetitles[2]}{$key_a}})) { my @sorted_b = (); my @sorted_b_titles = (); &sort_cats($num,$cat_order,$codetitles,\@{$idarrays{$$codetitles[2]}{$key_a}{$key_b}},\@sorted_b); @@ -207,11 +208,11 @@ sub build_code_selections { } } elsif ($num == 3) { %{$$idlist{$$codetitles[3]}} = (); - foreach my $key_a (keys %{$idarrays{$$codetitles[3]}}) { + foreach my $key_a (keys(%{$idarrays{$$codetitles[3]}})) { %{$$idlist{$$codetitles[3]}{$key_a}} = (); - foreach my $key_b (keys %{$idarrays{$$codetitles[3]}{$key_a}}) { + foreach my $key_b (keys(%{$idarrays{$$codetitles[3]}{$key_a}})) { %{$$idlist{$$codetitles[3]}{$key_a}{$key_b}} = (); - foreach my $key_c (keys %{$idarrays{$$codetitles[3]}{$key_a}{$key_b}}) { + foreach my $key_c (keys(%{$idarrays{$$codetitles[3]}{$key_a}{$key_b}})) { my @sorted_c = (); my @sorted_c_titles = (); &sort_cats($num,$cat_order,$codetitles,\@{$idarrays{$$codetitles[3]}{$key_a}{$key_b}{$key_c}},\@sorted_c); @@ -230,13 +231,13 @@ sub build_code_selections { } } elsif ($num == 4) { %{$$idlist{$$codetitles[4]}} = (); - foreach my $key_a (keys %{$idarrays{$$codetitles[4]}}) { + foreach my $key_a (keys(%{$idarrays{$$codetitles[4]}})) { %{$$idlist{$$codetitles[4]}{$key_a}} = (); - foreach my $key_b (keys %{$idarrays{$$codetitles[4]}{$key_a}}) { + foreach my $key_b (keys(%{$idarrays{$$codetitles[4]}{$key_a}})) { %{$$idlist{$$codetitles[4]}{$key_a}{$key_b}} = (); - foreach my $key_c (keys %{$idarrays{$$codetitles[4]}{$key_a}{$key_b}}) { + foreach my $key_c (keys(%{$idarrays{$$codetitles[4]}{$key_a}{$key_b}})) { %{$$idlist{$$codetitles[4]}{$key_a}{$key_b}{$key_c}} = (); - foreach my $key_d (keys %{$idarrays{$$codetitles[4]}{$key_a}{$key_b}{$key_c}}) { + foreach my $key_d (keys(%{$idarrays{$$codetitles[4]}{$key_a}{$key_b}{$key_c}})) { my @sorted_d = (); my @sorted_d_titles = (); &sort_cats($num,$cat_order,$codetitles,$idarrays{$$codetitles[4]}{$key_a}{$key_b}{$key_c}{$key_d},\@sorted_d); @@ -488,12 +489,27 @@ sub instcode_selectors_data { if ($officialjs) { $jscript .= ' -function toggleOfficial() {'; +function toggleOfficial() { + var choice; + for (var i=0; i[$i].'.selectedIndex = 0;'; + document.'.$formname.'.'.$codetitles->[$i].'.selectedIndex = 0;'; } - $jscript .= ' + $jscript .= ' + } else { + if (document.getElementById("instcodes")) { + document.getElementById("instcodes").style.display = "block"; + } + } } function setOfficial(caller) { @@ -559,11 +575,18 @@ function setElements() { } sub build_instcode_selectors { - my ($numtitles,$lasttitle,$cat_items,$codetitles,$cat_titles,$cat_order) = @_; + my ($numtitles,$lasttitle,$cat_items,$codetitles,$cat_titles,$cat_order,$official,$class,$id) = @_; my $output; my @standardnames = &Apache::loncommon::get_standard_codeitems(); if ($numtitles > 0) { - $output .= ''; + my $style; + if ($official eq 'off') { + $style = ' style="display: none"'; + } + if ($id eq '') { + $id = 'instcodes'; + } + $output .= '
'; for (my $k=0; $k<$lasttitle-1; $k++) { my (@items,@unsorted); if (ref($cat_items->{$codetitles->[$k]}) eq 'ARRAY') { @@ -579,8 +602,11 @@ sub build_instcode_selectors { @longitems = @items; } $output .= '
'.$codetitles->[$k].'
'."\n". - ''.&mt('All').''."\n"; for (my $i=0; $i<@items; $i++) { if ($longitems[$i] eq '') { $longitems[$i] = $items[$i]; @@ -599,11 +625,38 @@ sub build_instcode_selectors { '
'."\n"; } - $output .= '
'; + $output .= ''; } return $output; } +sub instcode_selectors { + my ($codedom,$formname,$officialjs,$codetitles) = @_; + my ($output,%cat_titles,%cat_order,%cat_items); + my ($jscript,$totcodes,$numtitles,$lasttitle) = + &instcode_selectors_data($codedom,$formname,\%cat_items,$codetitles, + \%cat_titles,\%cat_order,$officialjs); + if ($numtitles > 0) { + my $official = ' checked="checked" '; + my $unofficial = ''; + if (($formname eq 'filterpicker') && ($env{'form.official'} eq 'off')) { + $unofficial = $official; + $official = ''; + } + $output .= ''.&mt('Official course:').' '. + (' 'x3).'
'. + &build_instcode_selectors($numtitles,$lasttitle,\%cat_items,$codetitles, + \%cat_titles,\%cat_order,$env{'form.official'})."\n". + ''."\n". + ''."\n"; + } + return ($output,$jscript,$numtitles); +} + sub recurse_options { my ($currkey,$currlist,$level,$cat,$cat_options,$data,$by_year,$by_sem,$by_dept) = @_; if (ref($currlist) eq 'HASH') { @@ -640,7 +693,8 @@ sub build_javascript { my ($by_year,$by_sem,$by_dept,$cat_order,$codetitles) = @_; my @unsorted = keys(%{$by_year}); my @sorted_yrs; - &sort_cats('0',$cat_order,$codetitles,\@unsorted,\@sorted_yrs); my $output = 'var idcse_by_yr_year = new Array("'.join('","',@sorted_yrs).'");'."\n". + &sort_cats('0',$cat_order,$codetitles,\@unsorted,\@sorted_yrs); + my $output = 'var idcse_by_yr_year = new Array("'.join('","',@sorted_yrs).'");'."\n". 'var idcse_by_yr_dept = new Array('.scalar(@sorted_yrs).');'."\n". 'var idcse_by_yr_num = new Array('.scalar(@sorted_yrs).');'."\n"; for (my $i=0; $i<@sorted_yrs; $i++) { @@ -692,12 +746,23 @@ sub javascript_select_filler { my $nocrs = &mt('No courses'); my $output = < 0) { + for (var i = 0; i< document.$formname.Year.options.length; i++) { + if (document.$formname.Year.options[i].value == "$env{'form.Year'}") { + document.$formname.Year.selectedIndex = i; + break; + } + } + } + if (document.$formname.Department.options.length > 0) { + for (var i = 0; i< document.$formname.Department.options.length; i++) { + if (document.$formname.Department.options[i].value == "$env{'form.Department'}") { + document.$formname.Department.selectedIndex = i; + break; + } + } + } + if (document.$formname.Semester.options.length > 0) { + for (var i = 0; i< document.$formname.Semester.options.length; i++) { + if (document.$formname.Semester.options[i].value == "$env{'form.Semester'}") { + document.$formname.Semester.selectedIndex = i; + break; + } + } + } + } + + var selYear = document.$formname.Year.selectedIndex-1; + var selSemester = document.$formname.Semester.selectedIndex-1; + var selDepartment = document.$formname.Department.selectedIndex-1; if (selYear == -1) { if (selSemester == -1) { if (selDepartment > -1) { @@ -802,7 +894,7 @@ function courseSet(caller) { } } if (iddept != -1) { - document.$formname.Number.options[0] = new Option('$all','0',false,false); + document.$formname.Number.options[0] = new Option('$all','0',false,false); for (var i=0; i 0) { + for (var i = 0; i< document.$formname.Number.options.length; i++) { + if (document.$formname.Number.options[i].value == "$env{'form.Number'}") { + document.$formname.Number.selectedIndex = i; + break; + } + } + } + } else { + $officialjs + } } END return $output;