--- loncom/interface/coursecatalog.pm 2009/02/07 18:06:19 1.45 +++ loncom/interface/coursecatalog.pm 2010/04/04 15:38:34 1.60 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for displaying the course catalog interface # -# $Id: coursecatalog.pm,v 1.45 2009/02/07 18:06:19 raeburn Exp $ +# $Id: coursecatalog.pm,v 1.60 2010/04/04 15:38:34 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -90,7 +90,7 @@ sub handler { if ($env{'form.coursenum'} ne '' && &user_is_known()) { &course_details($r,$codedom,$formname,$domdesc,\@trails,\%allitems); } else { - my ($catlinks,$has_subcats) = &category_breadcrumbs($codedom,@cats); + my ($catlinks,$has_subcats,$selitem) = &category_breadcrumbs($codedom,@cats); my $catjs = <<"ENDSCRIPT"; function setCatDepth(depth) { @@ -123,25 +123,45 @@ ENDSCRIPT } } else { my (%add_entries); + my ($currdepth,$deeper) = &get_depth_values(); + if ($selitem) { + my $alert = &mt('Choose a subcategory to display'); + if (!$deeper) { + $alert = &mt('Choose a category to display'); + } + $catjs .= <<ENDJS; +function check_selected() { + if (document.coursecats.$selitem.options[document.coursecats.$selitem.selectedIndex].value == "") { + alert('$alert'); + return false; + } +} +ENDJS + } $catjs = '<script type="text/javascript">'."\n".$catjs."\n".'</script>'; &cat_header($r,$codedom,$catjs,\%add_entries,$catlinks); if ($env{'form.currcat_0'} ne '') { $r->print('<form name="'.$formname. '" method="post" action="/adm/coursecatalog">'. &additional_filters($codedom,$has_subcats)."\n"); - my ($currdepth,$deeper) = &get_depth_values(); $r->print('<input type="hidden" name="catalog_maxdepth" value="'. $deeper.'" />'."\n"); for (my $i=0; $i<$deeper; $i++) { $r->print('<input type="hidden" name="currcat_'.$i.'" value="'.$env{'form.currcat_'.$i}.'" />'."\n"); } + my $display_button; + if ($env{'form.currcat_0'} eq 'communities::0') { + $display_button = &mt('Display communities'); + } else { + $display_button = &mt('Display courses'); + } $r->print('<input type="hidden" name="coursenum" value="" />'."\n". '<input type="hidden" name="sortby" value="" />'."\n". '<input type="hidden" name="state" value="listing" />'."\n". '<input type="hidden" name="showdom" value="'. $env{'form.showdom'}.'" />'. '<input type="submit" name="catalogfilter" value="'. - &mt('Display courses').'" /></form><br /><br />'); + $display_button.'" /></form><br /><br />'); } if ($env{'form.state'} eq 'listing') { $r->print(&print_course_listing($codedom,undef,\@trails,\%allitems,$subcats)); @@ -160,27 +180,42 @@ sub course_details { my $js = '<script type="text/javascript">'."\n". &courselink_javascript().'</script>'."\n"; my $start_page = - &Apache::loncommon::start_page('Course Catalog',$js, - { - 'add_entries' => \%add_entries, - 'no_inline_link' => 1,}); + &Apache::loncommon::start_page('Course/Community Catalog',$js, + {'add_entries' => \%add_entries, }); $r->print($start_page); if ($env{'form.numtitles'} > 0) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/coursecatalog", - text=>"Select courses"}); + text=>"Course/Community Catalog"}); + } + my $brtextone = 'Course listing'; + my $brtexttwo = 'Course details'; + if ($env{'form.currcat_0'} eq 'communities::0') { + $brtextone = 'Community listing'; + $brtextone = 'Community details'; } &Apache::lonhtmlcommon::add_breadcrumb ({href=>"javascript:document.$formname.submit()", - text=>"Course listing"}, - {text=>"Course details"}); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Details')); - $r->print('<br />'.&mt('Detailed course information:').'<br /><br />'. + text=>$brtextone}, + {text=>$brtexttwo}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course/Community Catalog')); + $r->print('<br />'); + if ($env{'form.currcat_0'} eq 'communities::0') { + $r->print(&mt('Detailed community information:')); + } else { + $r->print(&mt('Detailed course information:')); + } + $r->print('<br /><br />'. &print_course_listing($codedom,undef,$trails,$allitems). '<br /><br />'); $r->print('<form name="'.$formname.'" method="post" action="/adm/coursecatalog">'. - '<a href = "javascript:document.coursecatalog.submit()">'. - &mt('Back to course listing').'</a>'. + '<a href = "javascript:document.coursecatalog.submit()">'); + if ($env{'form.currcat_0'} eq 'communities::0') { + $r->print(&mt('Back to community listing')); + } else { + $r->print(&mt('Back to course listing')); + } + $r->print('</a>'. &Apache::lonhtmlcommon::echo_form_input(['coursenum','catalogfilter', 'showdetails','courseid']).'</form>'); return; @@ -212,7 +247,6 @@ function ToSelfenroll(courseid) { END } - sub instcode_course_selector { my ($r,$codedom,$formname,$domdesc,$catlinks,$catjs) = @_; my %coursecodes = (); @@ -220,79 +254,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<document.'.$formname.'.'.$codetitles[$i].'.length; j++) { - if (document.'.$formname.'.'.$codetitles[$i].'[j].value == "'.$env{'form.'.$codetitles[$i]}.'") { - document.'.$formname.'.'.$codetitles[$i].'.selectedIndex = j; - } - } -'; - } - } - $jscript .= ' courseSet()'."\n"; - if ($env{'form.'.$codetitles[-1]} != -1) { - $jscript .= ' - for (var j=0; j<document.'.$formname.'.'.$codetitles[-1].'.length; j++) { - if (document.'.$formname.'.'.$codetitles[-1].'[j].value == "'.$env{'form.'.$codetitles[-1]}.'") { - document.'.$formname.'.'.$codetitles[-1].'.selectedIndex = j; - } - } -'; - } - $jscript .= '}'; - } - } - } - $js = '<script type"text/javascript">'."\n$jscript\n$catjs\n". + my ($jscript,$totcodes,$numtitles,$lasttitle) = + &Apache::courseclassifier::instcode_selectors_data($codedom,$formname, + \%cat_items,\@codetitles,\%cat_titles,\%cat_order); + my $js = '<script type"text/javascript">'."\n$jscript\n$catjs\n". '</script>'; + if ($totcodes) { if (($env{'form.state'} eq 'listing') && ($numtitles > 0)) { $add_entries{'onLoad'} = 'setElements()'; } @@ -304,43 +276,9 @@ function setElements() { '<input type="hidden" name="currcat_0" value="instcode::0" />'. &additional_filters($codedom)); if ($numtitles > 0) { - $r->print('<b>'.&mt('Choose which course(s) to list.').'</b><br />'); - $r->print('<table><tr>'); - 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('<td align="center">'.$codetitles[$k].'<br />'."\n". - '<select name="'.$codetitles[$k].'" onChange="courseSet()"'); - $r->print('>'."\n".'<option value="0" />All'."\n"); - for (my $i=0; $i<@items; $i++) { - if ($longitems[$i] eq '') { - $longitems[$i] = $items[$i]; - } - $r->print(' <option value="'.$items[$i].'">'.$longitems[$i].'</option>'); - } - $r->print('</select></td>'); - } - $r->print('<td align="center">'.$codetitles[$lasttitle-1].'<br />'."\n". - '<select name="'.$codetitles[$lasttitle-1].'">'."\n". - '<option value="0">All'."\n". - '</option>'."\n".'</select>'."\n". - '</td></tr></table>'."\n"); - if ($numtitles > 4) { - $r->print('<br /><br />'.$codetitles[$numtitles-1].'<br />'."\n". - '<input type="text" name="'.$codetitles[$numtitles-1].'" /><br />'."\n"); - } - $r->print('<br />'); + $r->print('<b>'.&mt('Choose which course(s) to list.').'</b><br />'. + &Apache::courseclassifier::build_instcode_selectors($numtitles, + $lasttitle,\%cat_items,\@codetitles,\%cat_titles,\%cat_order)); } $r->print('<input type="hidden" name="coursenum" value="" />'."\n". '<input type="hidden" name="sortby" value="" />'."\n". @@ -366,33 +304,42 @@ function setElements() { sub cat_header { my ($r,$codedom,$js,$add_entries,$catlinks,$numtitles) = @_; my $start_page = - &Apache::loncommon::start_page('Course Catalog',$js, - { - 'add_entries' => $add_entries, - 'no_inline_link' => 1,}); + &Apache::loncommon::start_page('Other',$js, + { 'add_entries' => $add_entries, }); $r->print($start_page); + my $brtext = 'Course listing'; + if ($env{'form.currcat_0'} eq 'communities::0') { + $brtext = 'Community listing'; + } if ($env{'form.state'} eq 'listing') { if ($numtitles > 0) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/coursecatalog", - text=>"Select courses"}, - {text=>"Course listing"}); + text=>"Course/Community Catalog"}, + {text=>$brtext}); } else { &Apache::lonhtmlcommon::add_breadcrumb - ({text=>"Course listing"}); + ({text=>$brtext}); } - $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Listing')); } else { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/coursecatalog", - text=>"Select courses"}); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('Select courses')); + text=>"Course/Community Catalog"}); + } + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course/Community Catalog')); + my $onchange; + unless ($env{'form.interface'} eq 'textual') { + $onchange = 'this.form.submit()'; } $r->print('<form name="coursecatdom" method="post" action="/adm/coursecatalog">'. '<table border="0"><tr><td><b>'.&mt('Domain:').'</b></td><td>'. - &Apache::loncommon::select_dom_form($codedom,'showdom','',1). - ' <input type="submit" name="godom" value="'.&mt('Change').'" /></td></tr></table></form>'. - '<form name="coursecats" method="post" action="/adm/coursecatalog">'. + &Apache::loncommon::select_dom_form($codedom,'showdom','',1,$onchange)); + if (!$onchange) { + $r->print(' <input type="submit" name="godom" value="'.&mt('Change').'" />'); + } + $r->print('</td></tr></table></form>'. + '<form name="coursecats" method="post" action="/adm/coursecatalog"'. + ' onsubmit="return check_selected();">'. '<table border="0"><tr>'.$catlinks.'</tr></table></form>'); return; } @@ -401,58 +348,71 @@ sub category_breadcrumbs { my ($dom,@cats) = @_; my $crumbsymbol = ' ▶ '; my ($currdepth,$deeper) = &get_depth_values(); - my $currcat_str = '<input type="hidden" name="catalog_maxdepth" value="'.$deeper.'" /><input type="hidden" name="showdom" value="'.$dom.'" />'; - my $catlinks = '<td valign="top"><b>'.&mt('Catalog:').'</b></td><td><table><tr>'; + my $currcat_str = + '<input type="hidden" name="catalog_maxdepth" value="'.$deeper.'" />'. + '<input type="hidden" name="showdom" value="'.$dom.'" />'; + my $catlinks = '<td valign="top"><b>'.&mt('Catalog:').'</b></td><td><table><tr><td>'; my $has_subcats; - for (my $i=0; $i<$deeper; $i++) { - $currcat_str .= '<input type="hidden" name="currcat_'.$i.'" value="'.$env{'form.currcat_'.$i}.'" />'; - my ($cattitle,$shallower); - if ($i == 0) { - $cattitle = &mt('Main Categories'); - } else { - $shallower = $i-1; - my ($cat,$container,$depth) = map { &unescape($_); } split(/:/,$env{'form.currcat_'.$shallower}); - $cattitle = $cat; - } - $catlinks .= '<td valign="top"><a href="javascript:setCatDepth('."'$shallower'".')">'.$cattitle.'</a>'.$crumbsymbol.'</td>'; - } - if ($deeper == 0) { - $catlinks .= '<td>'.&mt('Main Categories').': '; - if (ref($cats[0]) eq 'ARRAY') { - if ((@{$cats[0]} == 1) && ($cats[0][0] eq 'instcode')) { - $catlinks .= &mt('Official courses (with institutional codes)'). - '<input type="hidden" name="currcat_0" value="instcode::0" />'; + my $selitem; + if (ref($cats[0]) eq 'ARRAY') { + if (@{$cats[0]} == 0) { + $catlinks .= &mt('No categories defined in this domain'); + } elsif (@{$cats[0]} == 1) { + if ($cats[0][0] eq 'instcode') { + $catlinks .= &mt('Official courses (with institutional codes)'); $env{'form.currcat_0'} = 'instcode::0'; + } elsif ($cats[0][0] eq 'communities') { + $catlinks .= &mt('Communities'); + $env{'form.currcat_0'} = 'communities::0'; } else { - $has_subcats = 1; - $catlinks .= '<select name="currcat_0">'."\n"; - if (@{$cats[0]} > 1) { - my $selstr; - if ($env{'form.currcat_0'} eq '') { - $selstr = ' selected="selected" '; - } - $catlinks .= '<option value="" selected="selected">'.&mt('Select').'</option>'."\n"; - } - for (my $i=0; $i<@{$cats[0]}; $i++) { - my $name = $cats[0][$i]; - my $item = &escape($name).'::0'; - $catlinks .= '<option value="'.$item.'">'; - if ($name eq 'instcode') { - $catlinks .= &mt('Official courses (with institutional codes)'); - } else { - $catlinks .= $name; - } - $catlinks .= '</option>'."\n"; - } - $catlinks .= '</select>'."\n". - ' <input type="submit" name="gocats" value="'.&mt('Change').'" />'; + my $name = $cats[0][0]; + my $item = &escape($name).'::0'; + $catlinks .= $name; + $env{'form.currcat_0'} = $item; } + $currcat_str .= '<input type="hidden" name="currcat_0" value="'.$env{'form.currcat_0'}.'" />'; } else { - $catlinks .= &mt('Official courses (with institutional codes)'). - '<input type="hidden" name="currcat_0" value="instcode::0" />'; - $env{'form.currcat_0'} = 'instcode::0'; + $catlinks .= &main_category_selector(@cats); + if (($env{'form.currcat_0'} ne '') && + ($env{'form.currcat_0'} ne 'instcode::0')) { + $catlinks .= $crumbsymbol; + } else { + $catlinks .= '</td>'; + } } } else { + $catlinks .= &mt('Official courses (with institutional codes)'); + $env{'form.currcat_0'} = 'instcode::0'; + $currcat_str .= '<input type="hidden" name="currcat_0" value="'.$env{'form.currcat_0'}.'" />'; + } + if ($deeper) { + for (my $i=1; $i<=$deeper; $i++) { + my $shallower = $i-1; + next if ($shallower == 0); + my ($cat,$container,$depth) = map { &unescape($_); } split(/:/,$env{'form.currcat_'.$shallower}); + if ($cat ne '') { + $catlinks .= '<td valign="top">'. + '<select name="currcat_'.$shallower.'" onchange="'. + 'setCatDepth('."'$shallower'".');this.form.submit();">'; + if (ref($cats[$shallower]{$container}) eq 'ARRAY') { + $catlinks .= '<option value="">'.&mt('De-select').'</option>'; + for (my $j=0; $j<@{$cats[$shallower]{$container}}; $j++) { + my $name = $cats[$shallower]{$container}[$j]; + my $item = &escape($name).':'.$container.':'.$shallower; + my $selected = ''; + if ($item eq $env{'form.currcat_'.$shallower}) { + $selected = ' selected="selected"'; + } + $catlinks .= + '<option value="'.$item.'"'.$selected.'>'.$name.'</option>'; + } + } + $catlinks .= '</select>'; + } + unless ($i == $deeper) { + $catlinks .= $crumbsymbol; + } + } my ($cat,$container,$depth); if ($env{'form.currcat_'.$currdepth} eq '') { my $shallower = $currdepth - 1; @@ -460,29 +420,64 @@ sub category_breadcrumbs { } else { ($cat,$container,$depth) = map { &unescape($_); } split(/:/,$env{'form.currcat_'.$currdepth}); } - my $deeper = $depth +1; - my $currcat = $cat; - if ($cat eq 'instcode') { - $currcat = &mt('Official courses (with institutional codes)'); - } - $catlinks .= '<td>'.$currcat; - if (ref($cats[$deeper]{$cat}) eq 'ARRAY') { + my $deeperlevel = $depth +1; + if (ref($cats[$deeperlevel]{$cat}) eq 'ARRAY') { $has_subcats = 1; - my $selstr; - $catlinks .= ': <select name="currcat_'.$deeper.'">'. - '<option value="" selected="selected">'. - &mt('Select').'</option>'; - for (my $k=0; $k<@{$cats[$deeper]{$cat}}; $k++) { - my $name = $cats[$deeper]{$cat}[$k]; - my $item = &escape($name).':'.&escape($cat).':'.$deeper; + my $buttontext = &mt('Show subcategories'); + my $selitem = 'currcat_'.$deeperlevel; + $catlinks .= ' <select name="'.$selitem.'" onchange="this.form.submit()">'; + if (@{$cats[$deeperlevel]{$cat}}) { + $catlinks .= '<option value="" selected="selected">'. + &mt('Subcategory ...').'</option>'; + } + for (my $k=0; $k<@{$cats[$deeperlevel]{$cat}}; $k++) { + my $name = $cats[$deeperlevel]{$cat}[$k]; + my $item = &escape($name).':'.&escape($cat).':'.$deeperlevel; $catlinks .= '<option value="'.$item.'">'.$name.'</option>'."\n"; } - $catlinks .= '</select>'."\n". - ' <input type="submit" name="gocats" value="'.&mt('Change').'" />'; + $catlinks .= '</select>'."\n"; + } elsif ($cat ne 'instcode') { + $catlinks .= ' '.&mt('(No subcategories)'); } + } else { + $selitem = 'currcat_0'; } $catlinks .= $currcat_str.'</td></tr></table></td>'; - return ($catlinks,$has_subcats); + return ($catlinks,$has_subcats,$selitem); +} + +sub main_category_selector { + my (@cats) = @_; + my $maincatlinks = '<select name="currcat_0" onchange="setCatDepth('."'0'".');this.form.submit();">'."\n"; + if (ref($cats[0]) eq 'ARRAY') { + if (@{$cats[0]} > 1) { + my $selected = ''; + if ($env{'form.currcat_0'} eq '') { + $selected = ' selected="selected"'; + } + $maincatlinks .= + '<option value=""'.$selected.'>'.&mt('Select').'</option>'."\n"; + } + for (my $i=0; $i<@{$cats[0]}; $i++) { + my $name = $cats[0][$i]; + my $item = &escape($name).'::0'; + my $selected; + if ($env{'form.currcat_0'} eq $item) { + $selected = ' selected="selected"'; + } + $maincatlinks .= '<option value="'.$item.'"'.$selected.'>'; + if ($name eq 'instcode') { + $maincatlinks .= &mt('Official courses (with institutional codes)'); + } elsif ($name eq 'communities') { + $maincatlinks .= &mt('Communities'); + } else { + $maincatlinks .= $name; + } + $maincatlinks .= '</option>'."\n"; + } + $maincatlinks .= '</select>'."\n"; + } + return $maincatlinks; } sub get_depth_values { @@ -529,10 +524,15 @@ sub additional_filters { if ($env{'form.showselfenroll'}) { $show_selfenroll_status = 'checked="checked" '; } + my $selfenroll_text; + if ($env{'form.currcat_0'} eq 'communities::0') { + $selfenroll_text = &mt('Only show communities which allow self-enrollment'); + } else { + $selfenroll_text = &mt('Only show courses which allow self-enrollment'); + } $output .= '<tr><td>'. '<label><input type="checkbox" name="showselfenroll" value="1" '. - $show_selfenroll_status.'/>'. - &mt('Only show courses which allow self-enrollment'). + $show_selfenroll_status.'/>'.$selfenroll_text. '</label></td></tr>'; if (&user_is_dc($codedom)) { my $showdetails_status; @@ -544,14 +544,20 @@ sub additional_filters { $showhidden_status = 'checked="checked" '; } my $dc_title = &Apache::lonnet::plaintext('dc'); + my ($details_text,$hidden_text); + if ($env{'form.currcat_0'} eq 'communities::0') { + $details_text = &mt('Show full details for each community ([_1] only)',$dc_title); + $hidden_text = &mt('Include communities set to be hidden from catalog ([_1] only)',$dc_title); + } else { + $details_text = &mt('Show full details for each course ([_1] only)',$dc_title); + $hidden_text = &mt('Include courses set to be hidden from catalog ([_1] only)',$dc_title); + } $output .= '<tr><td>'."\n". '<label><input type="checkbox" name="showdetails" value="1" '. - $showdetails_status.'/>'. - &mt('Show full details for each course ([_1] only)',$dc_title). + $showdetails_status.'/>'.$details_text. '</label>'."\n".'</td></tr><tr><td>'. '<label><input type="checkbox" name="showhidden" value="1" '. - $showhidden_status.'/>'. - &mt('Include courses set to be hidden from catalog ([_1] only)',$dc_title). + $showhidden_status.'/>'.$hidden_text. '</label>'."\n".'</td></tr>'; } $output .= '</table><br />'; @@ -571,113 +577,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'}; @@ -716,13 +618,18 @@ sub search_courselist { } else { $filterstr = $filter; } - my $showhidden; + my ($showhidden,$typefilter); if (&user_is_dc($domain)) { $showhidden = $env{'form.showhidden'}; } + if ($env{'form.currcat_0'} eq 'communities::0') { + $typefilter = 'Community'; + } else { + $typefilter = '.'; + } %courses = &Apache::lonnet::courseiddump($domain,'.',1,'.','.','.',undef,undef, - '.',1,$env{'form.showselfenroll'}, + $typefilter,1,$env{'form.showselfenroll'}, $filterstr,$showhidden,'coursecatalog'); } return %courses; @@ -744,7 +651,11 @@ sub print_course_listing { $env{'form.coursenum'}, undef,undef,'.',1); if (keys(%courses) == 0) { - $output .= &mt('The courseID provided does not match a course in this domain.'); + if ($env{'form.currcat_0'} eq 'communities::0') { + $output .= &mt('The courseID provided does not match a community in this domain.'); + } else { + $output .= &mt('The courseID provided does not match a course in this domain.'); + } return $output; } } else { @@ -754,7 +665,11 @@ sub print_course_listing { %courses = &search_courselist($domain,$subcats); } if (keys(%courses) == 0) { - $output = &mt('No courses match the criteria you selected.'); + if ($env{'form.currcat_0'} eq 'communities::0') { + $output = &mt('No communities match the criteria you selected.'); + } else { + $output = &mt('No courses match the criteria you selected.'); + } return $output; } if (($knownuser) && (!$env{'form.showdetails'}) && (!&user_is_dc($domain))) { @@ -809,10 +724,14 @@ sub construct_data_table { } if ($knownuser) { if ($details) { - $output .= - '<th>'.&mt('Default Access Dates for Students').'</th>'. - '<th>'.&mt('Student Counts').'</th>'. - '<th>'.&mt('Auto-enrollment of[_1]registered students','<br />').'</th>'; + if ($env{'form.currcat_0'} eq 'communities::0') { + $output .= '<th>'.&mt('Default Access Dates for Members').'</th>'; + } else { + $output .= + '<th>'.&mt('Default Access Dates for Students').'</th>'. + '<th>'.&mt('Student Counts').'</th>'. + '<th>'.&mt('Auto-enrollment of[_1]registered students','<br />').'</th>'; + } } else { $output .= '<th>'.&mt('Details').'</th>'; } @@ -890,7 +809,7 @@ sub build_courseinfo_hash { } } foreach my $owner (@owners) { - my ($ownername,$ownerdom) = @_; + my ($ownername,$ownerdom); if ($owner =~ /:/) { ($ownername,$ownerdom) = split(/:/,$owner); } else { @@ -1081,10 +1000,14 @@ sub courseinfo_row { '<td>'.$ownerlast.'</td>'; if ($knownuser) { if ($details) { - $output .= - '<td>'.$accessdates.'</td>'. - '<td>'.$counts.'</td>'. - '<td>'.$autoenrollment.'</td>'; + if ($env{'form.currcat_0'} eq 'communities::0') { + $output .= '<td>'.$accessdates.'</td>'; + } else { + $output .= + '<td>'.$accessdates.'</td>'. + '<td>'.$counts.'</td>'. + '<td>'.$autoenrollment.'</td>'; + } } else { $output .= "<td><a href=\"javascript:setCourseId('$cnum')\">".&mt('Show more details').'</a></td>'; } @@ -1175,145 +1098,6 @@ sub get_valid_classes { return $response; } -sub javascript_select_filler { - my ($formname,$scripttext,$codetitles,$longtitles_str,$allidlist) = @_; - my $output = <<END; -function courseSet() { - var longtitles = new Array ("$longtitles_str"); - var valyr = document.$formname.Year.options[document.$formname.Year.selectedIndex].value - var valsem = document.$formname.Semester.options[document.$formname.Semester.selectedIndex].value - var valdept = document.$formname.Department.options[document.$formname.Department.selectedIndex].value - var valclass = document.$formname.Number.options[document.$formname.Number.selectedIndex].value - var idyears = new Array("$allidlist"); - var idyr = -1; - var idsem = -1; - var iddept = -1; - document.$formname.Number.length = 0; - - $scripttext - - selYear = document.$formname.Year.selectedIndex-1; - selSemester = document.$formname.Semester.selectedIndex-1; - selDepartment = document.$formname.Department.selectedIndex-1; - if (selYear == -1) { - if (selSemester == -1) { - if (selDepartment > -1) { - document.$formname.Number.options[0] = new Option('All','0',false,false); - for (var k=0; k<idcse_by_dep[selDepartment].length; k++) { - document.$formname.Number.options[k+1] = new Option(idcse_by_dep[selDepartment][k],idcse_by_dep[selDepartment][k],false,false); - - } - } - else { - document.$formname.Number.options[0] = new Option("All","0",true,true); - } - } - else { - if (selDepartment > -1) { - for (var i=0; i<idcse_by_sem_sems.length; i++) { - if (idcse_by_sem_sems[i] == valsem) { - idsem = i; - } - } - if (idsem != -1) { - for (var i=0; i<idcse_by_sem_dept[idsem].length; i++) { - if (idcse_by_sem_dept[idsem][i] == valdept) { - iddept = i; - } - } - } - if (iddept != -1) { - document.$formname.Number.options[0] = new Option('All','0',false,false); - for (var k=0; k<idcse_by_sem_num[idsem][iddept].length; k++) { - document.$formname.Number.options[k+1] = new Option(idcse_by_sem_num[idsem][iddept][k],idcse_by_sem_num[idsem][iddept][k],false,false); - } - } - else { - document.$formname.Number.options[0] = new Option('No courses','0',true,true); - } - } - else { - document.$formname.Number.options[0] = new Option("All","0",true,true); - } - } - } - else { - if (selSemester == -1) { - if (selDepartment > -1) { - for (var i=0; i<idcse_by_yr_year.length; i++) { - if (idcse_by_yr_year[i] == valyr) { - idyr = i; - } - } - if (idyr != -1) { - for (var i=0; i<idcse_by_yr_dept[idyr].length; i++) { - if (idcse_by_yr_dept[idyr][i] == valdept) { - iddept = i; - } - } - } - if (iddept != -1) { - document.$formname.Number.options[0] = new Option('All','0',false,false); - for (var k=0; k<idcse_by_yr_num[idyr][iddept].length; k++) { - document.$formname.Number.options[k+1] = new Option(idcse_by_yr_num[idyr][iddept][k],idcse_by_yr_num[idyr][iddept][k],false,false); - } - } - else { - document.$formname.Number.options[0] = new Option('No courses','0',true,true); - } - } - else { - document.$formname.Number.options[0] = new Option("All","0",true,true); - } - } - else { - if (selDepartment > -1) { - for (var k=0; k<idyears.length; k++) { - if (idyears[k] == valyr) { - idyr = k; - } - } - if (idyr != -1) { - for (var k=0; k<idsems[idyr].length; k++) { - if (idsems[idyr][k] == valsem) { - idsem = k; - } - } - } - if (idsem != -1) { - for (var k=0; k<idcodes[idyr][idsem].length; k++) { - if (idcodes[idyr][idsem][k] == valdept) { - iddept = k; - } - } - } - if (iddept != -1) { - document.$formname.Number.options[0] = new Option('All','0',false,false); - for (var i=0; i<idcourses[idyr][idsem][iddept].length; i++) { - var display = idcourses[idyr][idsem][iddept][i]; - if (longtitles[3] == 1) { - if (idcourseslongs[idyr][idsem][iddept][i] != "") { - display = idcourseslongs[idyr][idsem][iddept][i] - } - } - document.$formname.Number.options[i+1] = new Option(display,idcourses[idyr][idsem][iddept][i],false,false) - } - } - else { - document.$formname.Number.options[0] = new Option('No courses','0',true,true); - } - } - else { - document.$formname.Number.options[0] = new Option('All','0',true,true); - } - } - document.$formname.Number.selectedIndex = 0 - } -} -END - return $output; -} - sub autoenroll_info { my ($coursehash,$now,$seclist,$xlist_items,$code,$owners,$cdom,$cnum) = @_; my $autoenrolldates = &mt('Not enabled');