--- loncom/interface/coursecatalog.pm 2009/03/18 20:58:02 1.50 +++ loncom/interface/coursecatalog.pm 2009/05/01 01:30:08 1.51 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for displaying the course catalog interface # -# $Id: coursecatalog.pm,v 1.50 2009/03/18 20:58:02 raeburn Exp $ +# $Id: coursecatalog.pm,v 1.51 2009/05/01 01:30:08 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -226,7 +226,6 @@ function ToSelfenroll(courseid) { END } - sub instcode_course_selector { my ($r,$codedom,$formname,$domdesc,$catlinks,$catjs) = @_; my %coursecodes = (); @@ -234,79 +233,17 @@ sub instcode_course_selector { my @codetitles = (); my %cat_titles = (); my %cat_order = (); - my %idlist = (); - my %idnums = (); - my %idlist_titles = (); - my %by_year; - my %by_sem; - my %by_dept; my %cat_items; my $caller = 'global'; my $format_reply; - my $totcodes = 0; - my $jscript = ''; - my ($numtitles,$lasttitle); my %add_entries = (topmargin => "0", marginheight => "0",); - my $js; - $totcodes = &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,$codedom); - if ($totcodes > 0) { - $format_reply = &Apache::lonnet::auto_instcode_format($caller,$codedom,\%coursecodes,\%codes,\@codetitles,\%cat_titles,\%cat_order); - if ($format_reply eq 'ok') { - my $numtypes = @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]}; - $numtitles = @codetitles; - $lasttitle = $numtitles; - if ($numtitles > 4) { - $lasttitle = 4; - } - if ($numtitles == 0) { - if (!defined($env{'form.state'})) { - $env{'form.state'} = 'listing'; - } - } else { - my @data = ('top'); - for (my $k=0; $k<$lasttitle; $k++) { - my $cat = $codetitles[$k]; - my $level = 1; - $level = &recurse_options($codetitles[$k],$idlist{$codetitles[$k]},$level,$cat,\%cat_items,\@data,\%by_year,\%by_sem,\%by_dept); - } - $scripttext .= &build_javascript(\%by_year,\%by_sem,\%by_dept,\%cat_order,\@codetitles); - $jscript .= &javascript_select_filler($formname,$scripttext,\@codetitles,$longtitles_str,$allidlist); - if ($env{'form.state'} eq 'listing') { - $jscript .= ' -function setElements() { -'; - for (my $i=0; $i<@codetitles-1; $i++) { - if ($env{'form.'.$codetitles[$i]} != -1) { - $jscript .= ' - for (var j=0; j'; + if ($totcodes) { if (($env{'form.state'} eq 'listing') && ($numtitles > 0)) { $add_entries{'onLoad'} = 'setElements()'; } @@ -318,43 +255,9 @@ function setElements() { ''. &additional_filters($codedom)); if ($numtitles > 0) { - $r->print(''.&mt('Choose which course(s) to list.').'
'); - $r->print(''); - for (my $k=0; $k<$lasttitle-1; $k++) { - my (@items,@unsorted); - if (ref($cat_items{$codetitles[$k]}) eq 'ARRAY') { - @unsorted = @{$cat_items{$codetitles[$k]}}; - } - &Apache::courseclassifier::sort_cats($k,\%cat_order,\@codetitles,\@unsorted,\@items); - my @longitems; - if (defined($cat_titles{$codetitles[$k]})) { - foreach my $item (@items) { - push(@longitems,$cat_titles{$codetitles[$k]}{$item}); - } - } else { - @longitems = @items; - } - $r->print(''); - } - $r->print('
'.$codetitles[$k].'
'."\n". - '
'.$codetitles[$lasttitle-1].'
'."\n". - ''."\n". - '
'."\n"); - if ($numtitles > 4) { - $r->print('

'.$codetitles[$numtitles-1].'
'."\n". - '
'."\n"); - } - $r->print('
'); + $r->print(''.&mt('Choose which course(s) to list.').'
'. + &Apache::courseclassifier::build_instcode_selectors($numtitles, + $lasttitle,\%cat_items,\@codetitles,\%cat_titles,\%cat_order)); } $r->print(''."\n". ''."\n". @@ -615,113 +518,9 @@ sub user_is_dc { return; } -sub recurse_options { - my ($currkey,$currlist,$level,$cat,$cat_options,$data,$by_year,$by_sem,$by_dept) = @_; - if (ref($currlist) eq 'HASH') { - $level ++; - foreach my $key (sort(keys(%{$currlist}))) { - $$data[$level-1]= $key; - &recurse_options($key,$currlist->{$key},$level,$cat,$cat_options,$data,$by_year,$by_sem,$by_dept); - } - } else { - $level --; - my @contents = split(/","/,$currlist); - foreach my $item (@contents) { - if (!grep(/^\Q$item\E$/,@{$cat_options->{$cat}})) { - push(@{$cat_options->{$cat}},$item); - } - if ($level == 3) { - if (!grep/^\Q$item\E$/,@{$by_year->{$data->[1]}->{$currkey}}) { - push(@{$by_year->{$data->[1]}->{$currkey}},$item); - } - if (!grep/^\Q$item\E$/,@{$by_sem->{$data->[2]}->{$currkey}}) { - push(@{$by_sem->{$data->[2]}->{$currkey}},$item); - } - if (!grep/^\Q$item\E$/,@{$by_dept->{$currkey}}) { - push(@{$by_dept->{$currkey}},$item); - } - - } - } - } - return $level; -} - -sub build_javascript { - my ($by_year,$by_sem,$by_dept,$cat_order,$codetitles) = @_; - my @unsorted = keys(%{$by_year}); - my @sorted_yrs; - &Apache::courseclassifier::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++) { - my $numkeys = keys(%{$by_year->{$sorted_yrs[$i]}}); - $output .= " idcse_by_yr_num[$i] = new Array($numkeys);\n"; - if (ref($by_year->{$sorted_yrs[$i]}) eq 'HASH') { - @unsorted = keys(%{$by_year->{$sorted_yrs[$i]}}); - my @sorted_depts; - &Apache::courseclassifier::sort_cats('2',$cat_order,$codetitles,\@unsorted,\@sorted_depts); - $output .= qq| idcse_by_yr_dept[$i] = new Array ("|.join('","',@sorted_depts).'");'."\n"; - for (my $j=0; $j<@sorted_depts; $j++) { - $output .= qq| idcse_by_yr_num[$i][$j] = new Array ("|; - $output .= join('","',sort(@{$by_year->{$sorted_yrs[$i]}->{$sorted_depts[$j]}})).'");'."\n"; - } - } - } - @unsorted = keys(%{$by_sem}); - my @sorted_sems; - &Apache::courseclassifier::sort_cats('1',$cat_order,$codetitles,\@unsorted,\@sorted_sems); - $output .= 'idcse_by_sem_sems = new Array("'.join('","',@sorted_sems).'");'."\n". - 'idcse_by_sem_dept = new Array('.scalar(@sorted_sems).');'."\n". - 'idcse_by_sem_num = new Array('.scalar(@sorted_sems).');'."\n"; - for (my $i=0; $i<@sorted_sems; $i++) { - my $numkeys = keys(%{$by_sem->{$sorted_sems[$i]}}); - $output .= " idcse_by_sem_num[$i] = new Array($numkeys);\n"; - if (ref($by_sem->{$sorted_sems[$i]}) eq 'HASH') { - @unsorted = keys(%{$by_sem->{$sorted_sems[$i]}}); - my @sorted_depts; - &Apache::courseclassifier::sort_cats('2',$cat_order,$codetitles,\@unsorted,\@sorted_depts); - $output .= qq| idcse_by_sem_dept[$i] = new Array("|.join('","',@sorted_depts).'");'."\n"; - for (my $j=0; $j<@sorted_depts; $j++) { - $output .= qq| idcse_by_sem_num[$i][$j] = new Array ("|.join('","',sort(@{$by_sem->{$sorted_sems[$i]}->{$sorted_depts[$j]}})).'");'."\n"; - } - } - } - @unsorted = keys(%{$by_dept}); - my @sorted_deps; - &Apache::courseclassifier::sort_cats('2',$cat_order,$codetitles,\@unsorted,\@sorted_deps); - $output .= 'idcse_by_dep = new Array('.scalar(@sorted_deps).');'."\n"; - for (my $k=0; $k<@sorted_deps; $k++) { - $output .= qq| idcse_by_dep[$k] = new Array ("|.join('","',sort(@{$by_dept->{$sorted_deps[$k]}})).'");'."\n"; - } - return $output; -} - sub search_official_courselist { my ($domain,$numtitles) = @_; - my $instcode; - if (defined($numtitles) && $numtitles == 0) { - $instcode = '.+'; - } else { - my (%codedefaults,@code_order); - my $defaults_result = - &Apache::lonnet::auto_instcode_defaults($domain,\%codedefaults, - \@code_order); - if ($defaults_result eq 'ok') { - $instcode ='^'; - foreach my $item (@code_order) { - if ($env{'form.'.$item} eq '0' ) { - $instcode .= $codedefaults{$item}; - } else { - $instcode .= $env{'form.'.$item}; - } - } - $instcode .= '$'; - } else { - $instcode = '.'; - } - } + my $instcode = &Apache::courseclassifier::instcode_search_str($domain,$numtitles); my $showhidden; if (&user_is_dc($domain)) { $showhidden = $env{'form.showhidden'}; @@ -1219,145 +1018,6 @@ sub get_valid_classes { return $response; } -sub javascript_select_filler { - my ($formname,$scripttext,$codetitles,$longtitles_str,$allidlist) = @_; - my $output = < -1) { - document.$formname.Number.options[0] = new Option('All','0',false,false); - for (var k=0; k -1) { - for (var i=0; i -1) { - for (var i=0; i -1) { - for (var k=0; k