--- loncom/interface/coursecatalog.pm 2008/09/23 20:31:09 1.44 +++ loncom/interface/coursecatalog.pm 2009/03/18 20:58:02 1.50 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for displaying the course catalog interface # -# $Id: coursecatalog.pm,v 1.44 2008/09/23 20:31:09 raeburn Exp $ +# $Id: coursecatalog.pm,v 1.50 2009/03/18 20:58:02 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,13 +123,27 @@ 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++) { @@ -351,6 +365,7 @@ function setElements() { '<input type="hidden" name="numtitles" value="'.$numtitles. '" /></form><br /><br />'); } else { + $js = '<script type"text/javascript">'."\n$catjs\n".'</script>'; &cat_header($r,$codedom,$js,\%add_entries,$catlinks,$numtitles); my $cat_maxdepth = $env{'form.catalog_maxdepth'}; $r->print('<form name="'.$formname.'" method="post" action="/adm/coursecatalog">'. @@ -365,7 +380,7 @@ function setElements() { sub cat_header { my ($r,$codedom,$js,$add_entries,$catlinks,$numtitles) = @_; my $start_page = - &Apache::loncommon::start_page('Course Catalog',$js, + &Apache::loncommon::start_page('Other',$js, { 'add_entries' => $add_entries, 'no_inline_link' => 1,}); @@ -387,11 +402,19 @@ sub cat_header { text=>"Select courses"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Select courses')); } + my $onchange; + unless (($env{'browser.interface'} eq 'textual') || ($env{'form.interface'} eq 'textual')) { + $onchange = 1; + } $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; } @@ -403,34 +426,48 @@ sub category_breadcrumbs { 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 $has_subcats; + my $selitem; 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'); + if (ref($cats[0]) eq 'ARRAY') { + if (@{$cats[0]} > 1) { + $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 ($cattitle ne '') { + $catlinks .= '<td valign="top"><a href="javascript:setCatDepth('."'$shallower'".')">'.$cattitle.'</a>'.$crumbsymbol.'</td>'; + } } if ($deeper == 0) { - $catlinks .= '<td>'.&mt('Main Categories').': '; + $catlinks .= '<td>'; 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" />'; - $env{'form.currcat_0'} = 'instcode::0'; + if ((@{$cats[0]} == 1) && (@cats == 1)) { + if ($cats[0][0] eq 'instcode') { + $catlinks .= &mt('Official courses (with institutional codes)'). + '<input type="hidden" name="currcat_0" value="instcode::0" />'; + $env{'form.currcat_0'} = 'instcode::0'; + } else { + my $name = $cats[0][0]; + my $item = &escape($name).'::0'; + $catlinks .= $name. + '<input type="hidden" name="currcat_0" value="'.$item.'" />'; + $env{'form.currcat_0'} = $item; + } } else { $has_subcats = 1; - $catlinks .= '<select name="currcat_0">'."\n"; + my $buttontext = &mt('Show subcategories'); + $selitem = 'currcat_0'; + $catlinks .= '<select name="'.$selitem.'">'."\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"; + $catlinks .= '<option value="" selected="selected">'.&mt('Select').'</option>'."\n"; + $buttontext = &mt('Pick main category'); } for (my $i=0; $i<@{$cats[0]}; $i++) { my $name = $cats[0][$i]; @@ -444,7 +481,8 @@ sub category_breadcrumbs { $catlinks .= '</option>'."\n"; } $catlinks .= '</select>'."\n". - ' <input type="submit" name="gocats" value="'.&mt('Change').'" />'; + ' <input type="submit" name="gocats" value="'. + $buttontext.'" />'; } } else { $catlinks .= &mt('Official courses (with institutional codes)'). @@ -464,24 +502,31 @@ sub category_breadcrumbs { if ($cat eq 'instcode') { $currcat = &mt('Official courses (with institutional codes)'); } - $catlinks .= '<td>'.$currcat; + $catlinks .= '<td><b>'.$currcat.'</b>'; if (ref($cats[$deeper]{$cat}) eq 'ARRAY') { $has_subcats = 1; - my $selstr; - $catlinks .= ': <select name="currcat_'.$deeper.'">'. - '<option value="" selected="selected">'. - &mt('Select').'</option>'; + my $buttontext = &mt('Show subcategories'); + $selitem = 'currcat_'.$deeper; + $catlinks .= ': <select name="'.$selitem.'">'; + if (@{$cats[$deeper]{$cat}} > 1) { + $catlinks .= '<option value="" selected="selected">'. + &mt('Select').'</option>'; + $buttontext = &mt('Pick subcategory'); + } for (my $k=0; $k<@{$cats[$deeper]{$cat}}; $k++) { my $name = $cats[$deeper]{$cat}[$k]; my $item = &escape($name).':'.&escape($cat).':'.$deeper; $catlinks .= '<option value="'.$item.'">'.$name.'</option>'."\n"; } $catlinks .= '</select>'."\n". - ' <input type="submit" name="gocats" value="'.&mt('Change').'" />'; + ' <input type="submit" name="gocats" value="'. + $buttontext.'" />'; + } elsif ($cat ne 'instcode') { + $catlinks .= ' '.&mt('(No subcategories)'); } } $catlinks .= $currcat_str.'</td></tr></table></td>'; - return ($catlinks,$has_subcats); + return ($catlinks,$has_subcats,$selitem); } sub get_depth_values {