--- loncom/interface/coursecatalog.pm 2008/07/04 15:40:04 1.34 +++ loncom/interface/coursecatalog.pm 2008/07/06 17:59:25 1.35 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for displaying the course catalog interface # -# $Id: coursecatalog.pm,v 1.34 2008/07/04 15:40:04 raeburn Exp $ +# $Id: coursecatalog.pm,v 1.35 2008/07/06 17:59:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -71,10 +71,21 @@ sub handler { } my $domdesc = &Apache::lonnet::domain($codedom,'description'); &Apache::lonhtmlcommon::clear_breadcrumbs(); + + my %domconfig = + &Apache::lonnet::get_dom('configuration',['coursecategories'],$codedom); + my (@cats,@trails,%allitems,%idx,@jsarray,$cathash); + if (ref($domconfig{'coursecategories'}) eq 'HASH') { + $cathash = $domconfig{'coursecategories'}{'cats'}; + } else { + $cathash = {}; + } + &Apache::loncommon::extract_categories($cathash,\@cats,\@trails,\%allitems, + \%idx,\@jsarray); if ($env{'form.coursenum'} ne '' && &user_is_known()) { - &course_details($r,$codedom,$formname,$domdesc); + &course_details($r,$codedom,$formname,$domdesc,\@trails,\%allitems); } else { - my $catlinks = &category_breadcrumbs($codedom); + my $catlinks = &category_breadcrumbs($codedom,@cats); my $catjs = <<"ENDSCRIPT"; function setCatDepth(depth) { @@ -125,7 +136,7 @@ function setCourseId(caller) { &mt('Display courses').'" />

'); } if ($env{'form.state'} eq 'listing') { - $r->print(&print_course_listing($codedom)); + $r->print(&print_course_listing($codedom,undef,\@trails,\%allitems)); } } } @@ -134,7 +145,7 @@ function setCourseId(caller) { } sub course_details { - my ($r,$codedom,$formname,$domdesc) = @_; + my ($r,$codedom,$formname,$domdesc,$trails,$allitems) = @_; my $output; my %add_entries = (topmargin => "0", marginheight => "0",); @@ -156,7 +167,8 @@ sub course_details { $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Details')); $r->print('
'.&mt('Detailed course information:').'

'. '
'. - &print_course_listing($codedom).'

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

'); $r->print(''. &mt('Back to course listing').''. ''; my $catlinks = ''.&mt('Catalog:').''; @@ -649,7 +651,7 @@ sub search_courselist { } sub print_course_listing { - my ($domain,$numtitles) = @_; + my ($domain,$numtitles,$trails,$allitems) = @_; my $output; my %courses; my $knownuser = &user_is_known(); @@ -686,22 +688,30 @@ sub print_course_listing { my $now = time; my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$domain); - $output .= &construct_data_table($knownuser,\%courses,$details,undef,$now,\%domconfig); + $output .= &construct_data_table($knownuser,\%courses,$details,undef,$now,\%domconfig,$trails,$allitems); $output .= &Apache::lonhtmlcommon::echo_form_input(['coursenum','state','catalogfilter','sortby','showdetails']); return $output; } sub construct_data_table { - my ($knownuser,$courses,$details,$usersections,$now,$domconfig) = @_; + my ($knownuser,$courses,$details,$usersections,$now,$domconfig,$trails, + $allitems) = @_; my %sortname; if (($details eq '') || ($env{'form.showdetails'})) { $sortname{'Code'} = 'code'; + $sortname{'Categories'} = 'cats'; $sortname{'Title'} = 'title'; $sortname{'Owner(s)'} = 'owner'; } my $output = &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row(); - my @coltitles = ('Count','Code','Sections','Crosslisted','Title','Owner(s)'); + my @coltitles = ('Count'); + if ($env{'form.currcat_0'} eq 'instcode::0') { + push(@coltitles,'Code'); + } else { + push(@coltitles,'Categories'); + } + push(@coltitles,('Sections','Crosslisted','Title','Owner(s)')); if (ref($usersections) eq 'HASH') { $coltitles[1] = 'Your Section'; } @@ -734,6 +744,8 @@ sub construct_data_table { foreach my $course (sort(keys(%{$courses}))) { if ($env{'form.sortby'} eq 'code') { push(@{$Sortby{$courseinfo{$course}{'code'}}},$course); + } elsif ($env{'form.sortby'} eq 'cats') { + push(@{$Sortby{$courseinfo{$course}{'categories'}}},$course); } elsif ($env{'form.sortby'} eq 'owner') { push(@{$Sortby{$courseinfo{$course}{'ownerlastnames'}}},$course); } else { @@ -746,7 +758,8 @@ sub construct_data_table { } } my @sorted_courses; - if (($env{'form.sortby'} eq 'code') || ($env{'form.sortby'} eq 'owner')) { + if (($env{'form.sortby'} eq 'code') || ($env{'form.sortby'} eq 'owner') || + ($env{'form.sortby'} eq 'cats')) { @sorted_courses = sort(keys(%Sortby)); } else { @sorted_courses = sort { lc($a) cmp lc($b) } (keys(%Sortby)); @@ -755,8 +768,8 @@ sub construct_data_table { foreach my $item (@sorted_courses) { foreach my $course (@{$Sortby{$item}}) { $output.=&Apache::loncommon::start_data_table_row(); - $output.=&courseinfo_row($courseinfo{$course},$knownuser, - $details,\$count,$now,$course); + $output.=&courseinfo_row($courseinfo{$course},$knownuser,$details, + \$count,$now,$course,$trails,$allitems); $output.=&Apache::loncommon::end_data_table_row(); } } @@ -778,7 +791,7 @@ sub build_courseinfo_hash { $cleandesc =~ s/^\s+//; my ($cdom,$cnum)=split(/\_/,$course); my ($descr,$instcode,$singleowner,$ttype,$selfenroll_types, - $selfenroll_start,$selfenroll_end,@owners,%ownernames); + $selfenroll_start,$selfenroll_end,@owners,%ownernames,$categories); if (ref($courses->{$course}) eq 'HASH') { $descr = $courses->{$course}{'description'}; $instcode = $courses->{$course}{'inst_code'}; @@ -787,6 +800,7 @@ sub build_courseinfo_hash { $selfenroll_types = $courses->{$course}{'selfenroll_types'}; $selfenroll_start = $courses->{$course}{'selfenroll_start_date'}; $selfenroll_end = $courses->{$course}{'selfenroll_end_date'}; + $categories = $courses->{$course}{'categories'}; push(@owners,$singleowner); if (ref($courses->{$course}{'co-owners'}) eq 'ARRAY') { foreach my $item (@{$courses->{$course}{'co-owners'}}) { @@ -824,6 +838,7 @@ sub build_courseinfo_hash { $courseinfo{$course}{'selfenroll_types'} = $selfenroll_types; $courseinfo{$course}{'selfenroll_start'} = $selfenroll_start; $courseinfo{$course}{'selfenroll_end'} = $selfenroll_end; + $courseinfo{$course}{'categories'} = $categories; my %coursehash = &Apache::lonnet::dump('environment',$cdom,$cnum); my @classids; @@ -934,9 +949,9 @@ sub count_students { } sub courseinfo_row { - my ($info,$knownuser,$details,$countref,$now,$course) = @_; + my ($info,$knownuser,$details,$countref,$now,$course,$trails,$allitems) = @_; my ($cdom,$cnum,$title,$ownerlast,$code,$owner,$seclist,$xlist_items, - $accessdates,$showsyllabus,$counts,$autoenrollment,$output); + $accessdates,$showsyllabus,$counts,$autoenrollment,$output,$categories); if (ref($info) eq 'HASH') { $cdom = $info->{'cdom'}; $cnum = $info->{'cnum'}; @@ -950,14 +965,30 @@ sub courseinfo_row { $counts = $info->{'counts'}; $autoenrollment = $info->{'autoenrollment'}; $showsyllabus = $info->{'showsyllabus'}; + $categories = $info->{'categories'}; } else { $output = ''; return $output; } - $output .= ''. - ''. - ''. + $output .= ''; + if ($env{'form.currcat_0'} eq 'instcode::0') { + $output .= ''; + } else { + my ($categorylist,@cats); + if ($categories ne '') { + @cats = split('&',$categories); + } + if ((ref($trails) eq 'ARRAY') && (ref($allitems) eq 'HASH')) { + my @categories = map { $trails->[$allitems->{$_}]; } @cats; + $categorylist = join('
',@categories); + } + if ($categorylist eq '') { + $categorylist = ' '; + } + $output .= ''; + } + $output .= ''. ''. '
'.&mt('No information available for [_1].', $code).''.$$countref.''.$code.''.$seclist.''.$$countref.''.$code.''.$categorylist.''.$seclist.''.$xlist_items.''.$title.' '; if ($showsyllabus) {