--- loncom/interface/coursecatalog.pm 2008/07/14 10:24:27 1.39 +++ loncom/interface/coursecatalog.pm 2009/02/26 16:17:30 1.49 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for displaying the course catalog interface # -# $Id: coursecatalog.pm,v 1.39 2008/07/14 10:24:27 raeburn Exp $ +# $Id: coursecatalog.pm,v 1.49 2009/02/26 16:17:30 schafran 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) { @@ -106,12 +106,14 @@ function changeSort(caller) { document.$formname.sortby.value = caller; document.$formname.submit(); } + function setCourseId(caller) { document.$formname.coursenum.value = caller; document.$formname.submit(); } ENDSCRIPT + $catjs .= &courselink_javascript(); my $numtitles; if ($env{'form.currcat_0'} eq 'instcode::0') { $numtitles = &instcode_course_selector($r,$codedom,$formname,$domdesc, @@ -121,6 +123,16 @@ ENDSCRIPT } } else { my (%add_entries); + if ($selitem) { + $catjs .= <'; &cat_header($r,$codedom,$catjs,\%add_entries,$catlinks); if ($env{'form.currcat_0'} ne '') { @@ -155,8 +167,10 @@ sub course_details { my $output; my %add_entries = (topmargin => "0", marginheight => "0",); + my $js = ''."\n"; my $start_page = - &Apache::loncommon::start_page('Course Catalog','', + &Apache::loncommon::start_page('Course Catalog',$js, { 'add_entries' => \%add_entries, 'no_inline_link' => 1,}); @@ -172,16 +186,43 @@ sub course_details { {text=>"Course details"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Details')); $r->print('
'.&mt('Detailed course information:').'

'. - '
'. &print_course_listing($codedom,undef,$trails,$allitems). '

'); - $r->print(''. + $r->print(''. + ''. &mt('Back to course listing').''. - ''. - '
'); + &Apache::lonhtmlcommon::echo_form_input(['coursenum','catalogfilter', + 'showdetails','courseid']).''); + return; +} + +sub courselink_javascript { + return <<"END"; + +function ToSyllabus(cdom,cnum) { + if (cdom == '' || cdom == null) { + return; + } + if (cnum == '' || cnum == null) { + return; + } + document.linklaunch.action = "/public/"+cdom+"/"+cnum+"/syllabus"; + document.linklaunch.submit(); +} + +function ToSelfenroll(courseid) { + if (courseid == '') { + return; + } + document.linklaunch.action = "/adm/selfenroll"; + document.linklaunch.courseid.value = courseid; + document.linklaunch.submit(); +} + +END } + sub instcode_course_selector { my ($r,$codedom,$formname,$domdesc,$catlinks,$catjs) = @_; my %coursecodes = (); @@ -320,6 +361,7 @@ function setElements() { '

'); } else { + $js = ''; &cat_header($r,$codedom,$js,\%add_entries,$catlinks,$numtitles); my $cat_maxdepth = $env{'form.catalog_maxdepth'}; $r->print('
'. @@ -334,7 +376,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,}); @@ -356,49 +398,72 @@ 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(''. '
'.&mt('Domain:').''. - &Apache::loncommon::select_dom_form($codedom,'showdom','',1). - ' 
'. - '
'. + &Apache::loncommon::select_dom_form($codedom,'showdom','',1,$onchange)); + if (!$onchange) { + $r->print(' '); + } + $r->print('
'. + '
'. ''.$catlinks.'
'); return; } sub category_breadcrumbs { my ($dom,@cats) = @_; + my $crumbsymbol = ' ▶ '; my ($currdepth,$deeper) = &get_depth_values(); my $currcat_str = ''; my $catlinks = ''.&mt('Catalog:').''; my $has_subcats; + my $selitem; for (my $i=0; $i<$deeper; $i++) { $currcat_str .= ''; 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 .= ''; + if ($cattitle ne '') { + $catlinks .= ''; + } } if ($deeper == 0) { - $catlinks .= '
'.$cattitle.'->'.$cattitle.''.$crumbsymbol.''.&mt('Main Categories').': '; + $catlinks .= ''; if (ref($cats[0]) eq 'ARRAY') { - if ((@{$cats[0]} == 1) && ($cats[0][0] eq 'instcode')) { - $catlinks .= &mt('Official courses (with institutional codes)'). - ''; - $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)'). + ''; + $env{'form.currcat_0'} = 'instcode::0'; + } else { + my $name = $cats[0][0]; + my $item = &escape($name).'::0'; + $catlinks .= $name. + ''; + $env{'form.currcat_0'} = $item; + } } else { $has_subcats = 1; - $catlinks .= ''."\n"; if (@{$cats[0]} > 1) { - my $selstr; - if ($env{'form.currcat_0'} eq '') { - $selstr = ' selected="selected" '; - } - $catlinks .= ''."\n"; + $catlinks .= ''."\n"; + $buttontext = &mt('Pick main category'); } for (my $i=0; $i<@{$cats[0]}; $i++) { my $name = $cats[0][$i]; @@ -412,7 +477,8 @@ sub category_breadcrumbs { $catlinks .= ''."\n"; } $catlinks .= ''."\n". - ' '; + ' '; } } else { $catlinks .= &mt('Official courses (with institutional codes)'). @@ -432,24 +498,31 @@ sub category_breadcrumbs { if ($cat eq 'instcode') { $currcat = &mt('Official courses (with institutional codes)'); } - $catlinks .= ''.$currcat; + $catlinks .= ''.$currcat.''; if (ref($cats[$deeper]{$cat}) eq 'ARRAY') { $has_subcats = 1; - my $selstr; - $catlinks .= ': '; + if (@{$cats[$deeper]{$cat}} > 1) { + $catlinks .= ''; + $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 .= ''."\n"; } $catlinks .= ''."\n". - ' '; + ' '; + } elsif ($cat ne 'instcode') { + $catlinks .= ' '.&mt('(No subcategories)'); } } $catlinks .= $currcat_str.'
'; - return ($catlinks,$has_subcats); + return ($catlinks,$has_subcats,$selitem); } sub get_depth_values { @@ -734,9 +807,10 @@ sub print_course_listing { my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$domain); $output .= &construct_data_table($knownuser,\%courses,$details,undef,$now,\%domconfig,$trails,$allitems); - if ($env{'form.coursenum'} ne '') { - $output .= &Apache::lonhtmlcommon::echo_form_input(['coursenum','state','catalogfilter','sortby','showdetails']); - } + $output .= "\n".'
'. + ''. + ''. + &Apache::lonhtmlcommon::echo_form_input(['catalogfilter','courseid']).'
'; return $output; } @@ -778,7 +852,7 @@ sub construct_data_table { $output .= ''.&mt('Default Access Dates for Students').''. ''.&mt('Student Counts').''. - ''.&mt('Auto-enrollment of
registered students').''; + ''.&mt('Auto-enrollment of[_1]registered students','
').''; } else { $output .= ''.&mt('Details').''; } @@ -925,10 +999,10 @@ sub build_courseinfo_hash { } } if ($startaccess) { - $accessdates .= &mt('From: ').$startaccess.'
'; + $accessdates .= ''.&mt('From:[_1]',' '.$startaccess).'
'; } if ($endaccess) { - $accessdates .= &mt('To: ').$endaccess.'
'; + $accessdates .= ''.&mt('To:[_1]',' '.$endaccess).'
'; } if (($selfenroll_types ne '') && ($selfenroll_end > 0 && $selfenroll_end > $now)) { @@ -949,10 +1023,10 @@ sub build_courseinfo_hash { if ($selfenroll_start_access || $selfenroll_end_access) { $accessdates .= '

'.&mt('Self-enrollers:').'
'; if ($selfenroll_start_access) { - $accessdates .= &mt('From: ').$selfenroll_start_access.'
'; + $accessdates .= ''.&mt('From:[_1]',' '.$selfenroll_start_access).'
'; } if ($selfenroll_end_access) { - $accessdates .= &mt('To: ').$selfenroll_end_access.'
'; + $accessdates .= ''.&mt('To:[_1]',' '.$selfenroll_end_access).'
'; } } } @@ -987,10 +1061,10 @@ sub count_students { $student_count{$data->[$idx{'status'}]} ++; } - my $countslist = &mt('[quant,_1,section]',$numsec).':
'; + my $countslist = &mt('[quant,_1,section:,sections:,No sections]',$numsec).'
'; foreach my $status ('Active','Future') { - $countslist .= ''.$status_title{$status}.': '. - $student_count{$status}.'
'; + $countslist .= ''.$status_title{$status}.': '. + $student_count{$status}.'
'; } return $countslist; } @@ -1039,7 +1113,7 @@ sub courseinfo_row { ''.$xlist_items.''. ''.$title.' '; if ($showsyllabus) { - $output .= &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$cnum,$cdom); + $output .= ''.&mt('Syllabus').''; } else { $output .= ' '; } @@ -1063,7 +1137,7 @@ sub courseinfo_row { if (($info->{'selfenroll_start'} > 0) && ($info->{'selfenroll_start'} > $now)) { $output .= ''.&mt('Starts: [_1]',''.$showstart.'').'
'.&mt('Ends: [_1]',''.$showend.'').''; } else { - $output .= ''.&mt('Enroll in course').''; + $output .= ''.&mt('Enroll in course').''; } $selfenroll = 1; } @@ -1130,11 +1204,11 @@ sub get_valid_classes { } if ($totalitems > 0) { if (@{$validations{'sections'}}) { - $response = &mt('Sections: '). + $response = &mt('Sections:').' '. join(', ',@{$validations{'sections'}}).'
'; } if (@{$validations{'xlists'}}) { - $response .= &mt('Courses: '). + $response .= &mt('Courses:').' '. join(', ',@{$validations{'xlists'}}); } } @@ -1299,17 +1373,20 @@ sub autoenroll_info { &get_valid_classes($seclist,$xlist_items,$code, $owners,$cdom,$cnum); if ($valid_classes ne '') { - $autoenrolldates = &mt('Not enabled
Starts: '). - $autostart.'
'.$valid_classes; } + $autoenrolldates = &mt('Not enabled').'
' + .&mt('Starts: [_1]',$autostart) + .'
'.$valid_classes; + } } } else { if ($coursehash->{'internal.autoend'} && $coursehash->{'internal.autoend'} < $now) { - $autoenrolldates = &mt('Not enabled
Ended: ').$autoend; + $autoenrolldates = &mt('Not enabled').'
' + .&mt('Ended: [_1]',$autoend); } else { my $valid_classes = &get_valid_classes($seclist,$xlist_items, $code,$owners,$cdom,$cnum); if ($valid_classes ne '') { - $autoenrolldates = &mt('Currently enabled
'). + $autoenrolldates = &mt('Currently enabled').'
'. $valid_classes; } }