--- loncom/interface/lonsupportreq.pm 2006/09/01 21:07:11 1.37 +++ loncom/interface/lonsupportreq.pm 2006/10/12 22:47:31 1.38 @@ -1,5 +1,5 @@ # -# $Id: lonsupportreq.pm,v 1.37 2006/09/01 21:07:11 raeburn Exp $ +# $Id: lonsupportreq.pm,v 1.38 2006/10/12 22:47:31 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,6 +36,7 @@ use Apache::loncommon(); use Apache::lonnet; use Apache::lonlocal; use Apache::lonacc(); +use Apache::courseclassifier; use lib '/home/httpd/lib/perl/'; use LONCAPA; @@ -178,22 +179,27 @@ function initialize_codes() { if ($cnum) { $coursecodes{$cnum} = $ccode; if ($ccode eq '') { - $totcodes = &retrieve_instcodes(\%coursecodes,$codedom,$totcodes); + $totcodes = &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,$codedom,$totcodes); } else { $coursecodes{$cnum} = $ccode; $caller = $cnum; $totcodes ++; } } else { - $totcodes = &retrieve_instcodes(\%coursecodes,$codedom,$totcodes); + $totcodes = &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,$codedom,$totcodes); } if ($totcodes > 0) { if ($ccode eq '') { $format_reply = &Apache::lonnet::auto_instcode_format($caller,$codedom,\%coursecodes,\%codes,\@codetitles,\%cat_titles,\%cat_order); if ($format_reply eq 'ok') { my $numtypes = @codetitles; - &build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles); - &javascript_code_selections($formname,$numtypes,\%cat_titles,\$jscript,\%idlist,\%idnums,\%idlist_titles,\@codetitles); + &Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles); + my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles); + my $longtitles_str = join('","',@{$longtitles}); + my $allidlist = $idlist{$codetitles[0]}; + $jscript .= &Apache::courseclassifier::courseset_js_start($formname,$longtitles_str,$allidlist); + $jscript .= $scripttext; + $jscript .= &Apache::courseclassifier::javascript_code_selections($formname,@codetitles); $loaditems = ''; } } @@ -974,409 +980,4 @@ Please review the information in "Log-in return; } -sub retrieve_instcodes { - my ($coursecodes,$codedom,$totcodes) = @_; - my %courses = &Apache::lonnet::courseiddump($codedom,'.',1,'.','.','.', - undef,undef,'Course'); - foreach my $course (keys %courses) { - if ($courses{$course} =~ m/^[^:]*:([^:]+)/) { - $$coursecodes{$course} = &unescape($1); - $totcodes ++; - } - } - return $totcodes; -} - -sub build_code_selections { - my ($codes,$codetitles,$cat_titles,$cat_order,$idlist,$idnums,$idlist_titles) = @_; - my %idarrays = (); - for (my $i=1; $i<@{$codetitles}; $i++) { - %{$idarrays{$$codetitles[$i]}} = (); - } - foreach my $cid (sort keys %{$codes}) { - &recurse_list($cid,$codetitles,$codes,0,\%idarrays); - } - for (my $num=0; $num<@{$codetitles}; $num++) { - if ($num == 0) { - my @contents = (); - my @contents_titles = (); - &sort_cats($num,$cat_order,$codetitles,\@{$idarrays{$$codetitles[0]}},\@contents); - if (defined($$cat_titles{$$codetitles[0]})) { - foreach (@contents) { - push @contents_titles, $$cat_titles{$$codetitles[0]}{$_}; - } - } - $$idlist{$$codetitles[0]} = join('","',@contents); - $$idnums{$$codetitles[0]} = scalar(@contents); - if (defined($$cat_titles{$$codetitles[0]})) { - $$idlist_titles{$$codetitles[0]} = join('","',@contents_titles); - } - } elsif ($num == 1) { - %{$$idlist{$$codetitles[1]}} = (); - %{$$idlist_titles{$$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); - if (defined($$cat_titles{$$codetitles[1]})) { - foreach (@sorted_a) { - push @sorted_a_titles, $$cat_titles{$$codetitles[1]}{$_}; - } - } - $$idlist{$$codetitles[1]}{$key_a} = join('","',@sorted_a); - $$idnums{$$codetitles[1]}{$key_a} = scalar(@sorted_a); - if (defined($$cat_titles{$$codetitles[1]})) { - $$idlist_titles{$$codetitles[1]}{$key_a} = join('","',@sorted_a_titles); - } - } - } elsif ($num == 2) { - %{$$idlist{$$codetitles[2]}} = (); - %{$$idlist_titles{$$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}}) { - my @sorted_b = (); - my @sorted_b_titles = (); - &sort_cats($num,$cat_order,$codetitles,\@{$idarrays{$$codetitles[2]}{$key_a}{$key_b}},\@sorted_b); - if (defined($$cat_titles{$$codetitles[2]})) { - foreach (@sorted_b) { - push @sorted_b_titles, $$cat_titles{$$codetitles[2]}{$_}; - } - } - $$idlist{$$codetitles[2]}{$key_a}{$key_b} = join('","',@sorted_b); - $$idnums{$$codetitles[2]}{$key_a}{$key_b} = scalar(@sorted_b); - if (defined($$cat_titles{$$codetitles[2]})) { - $$idlist_titles{$$codetitles[2]}{$key_a}{$key_b} = join('","',@sorted_b_titles); - } - } - } - } elsif ($num == 3) { - %{$$idlist{$$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}}) { - %{$$idlist{$$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); - if (defined($$cat_titles{$$codetitles[3]})) { - foreach (@sorted_c) { - push @sorted_c_titles, $$cat_titles{$$codetitles[3]}{$_}; - } - } - $$idlist{$$codetitles[3]}{$key_a}{$key_b}{$key_c} = join('","',@sorted_c); - $$idnums{$$codetitles[3]}{$key_a}{$key_b}{$key_c} = scalar(@sorted_c); - if (defined($$cat_titles{$$codetitles[3]})) { - $$idlist_titles{$$codetitles[2]}{$key_a}{$key_b} = join('","',@sorted_c_titles); - } - } - } - } - } elsif ($num == 4) { - %{$$idlist{$$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}}) { - %{$$idlist{$$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}}) { - 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); - if (defined($$cat_titles{$$codetitles[4]})) { - foreach (@sorted_d) { - push @sorted_d_titles, $$cat_titles{$$codetitles[4]}{$_}; - } - } - $$idlist{$$codetitles[4]}{$key_a}{$key_b}{$key_c}{$key_d} = join('","',@sorted_d); - $$idnums{$$codetitles[4]}{$key_a}{$key_b}{$key_c}{$key_d} = scalar(@sorted_d); - } - } - } - } - } - } -} - -sub sort_cats { - my ($num,$cat_order,$codetitles,$idsarrayref,$sorted) = @_; - my @unsorted = @{$idsarrayref}; - if (defined($$cat_order{$$codetitles[$num]})) { - foreach my $item (@{$$cat_order{$$codetitles[$num]}}) { - if (grep/^\Q$item\E$/,@unsorted) { - push @{$sorted}, $item; - } - } - } else { - @{$sorted} = sort (@unsorted); - } -} - - -sub recurse_list { - my ($cid,$codetitles,$codes,$num,$idarrays) = @_; - if ($num == 0) { - if (!grep/^$$codes{$cid}{$$codetitles[0]}$/,@{$$idarrays{$$codetitles[0]}}) { - push @{$$idarrays{$$codetitles[0]}}, $$codes{$cid}{$$codetitles[0]}; - } - } elsif ($num == 1) { - if (defined($$idarrays{$$codetitles[1]}{$$codes{$cid}{$$codetitles[0]}})) { - if (!grep/^$$codes{$cid}{$$codetitles[1]}$/,@{$$idarrays{$$codetitles[1]}{$$codes{$cid}{$$codetitles[0]}}}) { - push @{$$idarrays{$$codetitles[1]}{$$codes{$cid}{$$codetitles[0]}}}, $$codes{$cid}{$$codetitles[1]}; - } - } else { - @{$$idarrays{$$codetitles[1]}{$$codes{$cid}{$$codetitles[0]}}} = ("$$codes{$cid}{$$codetitles[1]}"); - } - } elsif ($num == 2) { - if (defined($$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}})) { - if (defined($$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}})) { - if (!grep/^$$codes{$cid}{$$codetitles[2]}$/,@{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}}) { - push @{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}}, $$codes{$cid}{$$codetitles[2]}; - } - } else { - @{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}} = ("$$codes{$cid}{$$codetitles[2]}"); - } - } else { - %{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}} = (); - @{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}} = ("$$codes{$cid}{$$codetitles[2]}"); - } - } elsif ($num == 3) { - if (defined($$idarrays{$$codetitles[3]}{$$codes{$cid}{$$codetitles[0]}})) { - if (defined($$idarrays{$$codetitles[3]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}})) { - if (defined($$idarrays{$$codetitles[3]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}})) { - if (!grep/^$$codes{$cid}{$$codetitles[3]}$/,@{$$idarrays{$$codetitles[3]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}}) { - push @{$$idarrays{$$codetitles[3]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}}, $$codes{$cid}{$$codetitles[3]}; - } - } else { - @{$$idarrays{$$codetitles[3]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}} = ("$$codes{$cid}{$$codetitles[3]}"); - } - } else { - %{$$idarrays{$$codetitles[3]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}} = (); - @{$$idarrays{$$codetitles[3]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}} = ("$$codes{$cid}{$$codetitles[3]}"); - } - } else { - %{$$idarrays{$$codetitles[3]}{$$codes{$cid}{$$codetitles[0]}}} = (); - %{$$idarrays{$$codetitles[3]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}} = (); - @{$$idarrays{$$codetitles[3]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}} = ("$$codes{$cid}{$$codetitles[3]}"); - } - } elsif ($num == 4) { - if (defined($$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}})) { - if (defined($$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}})) { - if (defined($$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}})) { - if (defined($$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}{$$codes{$cid}{$$codetitles[3]}})) { - if (!grep/^$$codes{$cid}{$$codetitles[4]}$/,@{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}{$$codes{$cid}{$$codetitles[3]}}}) { - push @{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}{$$codes{$cid}{$$codetitles[3]}}}, $$codes{$cid}{$$codetitles[4]}; - } - } else { - @{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}{$$codes{$cid}{$$codetitles[3]}}} = ("$$codes{$cid}{$$codetitles[4]}"); - } - } else { - %{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}} = (); - @{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}{$$codes{$cid}{$$codetitles[3]}}} = ("$$codes{$cid}{$$codetitles[4]}"); - } - } else { - %{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}} = (); - %{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}} = (); - @{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}{$$codes{$cid}{$$codetitles[3]}}} = ("$$codes{$cid}{$$codetitles[4]}"); - } - } else { - %{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}} = (); - %{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}} = (); - %{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[2]}}} = (); - @{$$idarrays{$$codetitles[4]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[1]}}{$$codes{$cid}{$$codetitles[3]}}} = ("$$codes{$cid}{$$codetitles[3]}"); - } - } - $num ++; - if ($num <@{$codetitles}) { - &recurse_list($cid,$codetitles,$codes,$num,$idarrays); - } -} - -sub javascript_code_selections { - my ($formname,$numcats,$cat_titles,$script_tag,$idlist,$idnums,$idlist_titles,$codetitles) = @_; - my $numtitles = @{$codetitles}; - my @seltitles = (); - for (my $j=0; $j<$numtitles; $j++) { - $seltitles[$j] = 'id'.$$codetitles[$j]; - } - my $seltitle_str = join('","',@seltitles); - my @longtitles = (); - for (my $i=0; $i<$numtitles; $i++) { - if (defined($$cat_titles{$$codetitles[$i]})) { - $longtitles[$i] = 1; - } else { - $longtitles[$i] = 0; - } - } - my $longtitles_str = join('","',@longtitles); - $$script_tag .= <