--- loncom/interface/coursecatalog.pm 2007/01/06 20:12:19 1.14 +++ loncom/interface/coursecatalog.pm 2007/01/08 15:54:56 1.15 @@ -365,6 +365,7 @@ sub print_course_listing { my ($domain) = @_; my $output; my %courses; + my $knownuser = &user_is_known(); if ($env{'form.coursenum'} ne '') { %courses = &Apache::lonnet::courseiddump($domain,'.',1,'.','.', $env{'form.coursenum'}, @@ -379,19 +380,29 @@ sub print_course_listing { $output = &mt('No courses match the criteria you selected.'); return $output; } - if (&user_is_known()) { + if ($knownuser) { $output = &mt('Note for students: If you are officially enrolled in a course but the course is not listed in your LON-CAPA courses, click the "Show more details" link for the specific course and check the default access dates and/or automated enrollment settings.

'); } } - $output .= &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_header_row(); - my @coltitles = ('Code','Sections','Crosslisted','Title','Owner'); + $output .= &construct_data_table($knownuser,\%courses,$env{'form.coursenum'}); + $output .= &Apache::lonhtmlcommon::echo_form_input(['coursenum','state','catalogfilter','sortby']); + return $output; +} + +sub construct_data_table { + my ($knownuser,$courses,$details,$usersections) = @_; my %sortname; - if ($env{'form.coursenum'} eq '') { + if ($details eq '') { $sortname{'Code'} = 'code'; $sortname{'Title'} = 'title'; $sortname{'Owner'} = 'owner'; } + my $output = &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(); + my @coltitles = ('Code','Sections','Crosslisted','Title','Owner'); + if (ref($usersections) eq 'HASH') { + $coltitles[1] = 'Your Section'; + } foreach my $item (@coltitles) { $output .= ''; if (defined($sortname{$item})) { @@ -401,20 +412,21 @@ sub print_course_listing { } $output .= ''; } - if (&user_is_known()) { - if ($env{'form.coursenum'} eq '') { - $output .= ' '; - } else { + if ($knownuser) { + if ($details) { $output .= ''.&mt('Default Access Dates for Students').''. ''.&mt('Student Counts').''. ''.&mt('Auto-enrollment of
registered students').''; + } else { + $output .= ' '; } } &Apache::loncommon::end_data_table_header_row(); - my %courseinfo = &build_courseinfo_hash(%courses); + my %courseinfo = &build_courseinfo_hash($courses,$knownuser,$details, + $usersections); my %Sortby; - foreach my $course (sort(keys(%courses))) { + foreach my $course (sort(keys(%{$courses}))) { if ($env{'form.sortby'} eq 'code') { push(@{$Sortby{$courseinfo{$course}{'code'}}},$course); } elsif ($env{'form.sortby'} eq 'owner') { @@ -432,33 +444,31 @@ sub print_course_listing { foreach my $item (@sorted_courses) { foreach my $course (@{$Sortby{$item}}) { $output.=&Apache::loncommon::start_data_table_row(); - $output.=&courseinfo_row($courseinfo{$course}); + $output.=&courseinfo_row($courseinfo{$course},$knownuser,$details); $output.=&Apache::loncommon::end_data_table_row(); } } $output .= &Apache::loncommon::end_data_table(); - my $echo = &Apache::lonhtmlcommon::echo_form_input(['coursenum','state','catalogfilter','sortby']); - $output .= $echo; return $output; } sub build_courseinfo_hash { - my (%courses) = @_; + my ($courses,$knownuser,$details,$usersections) = @_; my %courseinfo; my $now = time; - foreach my $course (keys(%courses)) { + foreach my $course (keys(%{$courses})) { my $descr; - if ($courses{$course} =~ m/^([^:]*):/i) { + if ($courses->{$course} =~ m/^([^:]*):/i) { $descr = &unescape($1); } else { - $descr = &unescape($courses{$course}); + $descr = &unescape($courses->{$course}); } my $cleandesc=&HTML::Entities::encode($descr,'<>&"'); $cleandesc=~s/'/\\'/g; $cleandesc =~ s/^\s+//; my ($cdom,$cnum)=split(/\_/,$course); - my ($desc,$instcode,$owner,$ttype) = split(/:/,$courses{$course}); + my ($desc,$instcode,$owner,$ttype) = split(/:/,$courses->{$course}); $owner = &unescape($owner); my ($ownername,$ownerdom); if ($owner =~ /:/) { @@ -483,41 +493,47 @@ sub build_courseinfo_hash { my %coursehash = &Apache::lonnet::dump('environment',$cdom,$cnum); my @classids; my @crosslistings; - my $seclist = &identify_sections($coursehash{'internal.sectionnums'}); + my ($seclist,$numsec) = + &identify_sections($coursehash{'internal.sectionnums'}); + if (ref($usersections) eq 'HASH') { + if (ref($usersections->{$course}) eq 'ARRAY') { + $seclist = join(', ',@{$usersections->{$course}}); + } + } $courseinfo{$course}{'seclist'} = $seclist; - my $xlist_items = &identify_sections($coursehash{'internal.crosslistings'}); + my ($xlist_items,$numxlist) = + &identify_sections($coursehash{'internal.crosslistings'}); my $showsyllabus = 1; # default is to include a syllabus link if (defined($coursehash{'showsyllabus'})) { $showsyllabus = $coursehash{'showsyllabus'}; } $courseinfo{$course}{'showsyllabus'} = $showsyllabus; - if (defined($env{'form.coursenum'})) { - if ($cnum eq $env{'form.coursenum'}) { - $courseinfo{$course}{'counts'} = &count_students($cdom,$cnum); - $courseinfo{$course}{'autoenrollment'} = - &autoenroll_info(\%coursehash,$now,$seclist,$xlist_items, - $instcode,$owner,$cdom,$cnum); - - my $startaccess = ''; - my $endaccess = ''; - my $accessdates; - if ( defined($coursehash{'default_enrollment_start_date'}) ) { - $startaccess = &Apache::lonlocal::locallocaltime($coursehash{'default_enrollment_start_date'}); - } - if ( defined($coursehash{'default_enrollment_end_date'}) ) { - $endaccess = &Apache::lonlocal::locallocaltime($coursehash{'default_enrollment_end_date'}); - if ($coursehash{'default_enrollment_end_date'} == 0) { - $endaccess = "No ending date"; - } - } - if ($startaccess) { - $accessdates .= &mt('From: ').$startaccess.'
'; - } - if ($endaccess) { - $accessdates .= &mt('To: ').$endaccess.'
'; - } - $courseinfo{$course}{'access'} = $accessdates; + if (((defined($env{'form.coursenum'}) && ($cnum eq $env{'form.coursenum'}))) || + ($knownuser && ($details == 1))) { + $courseinfo{$course}{'counts'} = &count_students($cdom,$cnum,$numsec); + $courseinfo{$course}{'autoenrollment'} = + &autoenroll_info(\%coursehash,$now,$seclist,$xlist_items, + $instcode,$owner,$cdom,$cnum); + + my $startaccess = ''; + my $endaccess = ''; + my $accessdates; + if ( defined($coursehash{'default_enrollment_start_date'}) ) { + $startaccess = &Apache::lonlocal::locallocaltime($coursehash{'default_enrollment_start_date'}); + } + if ( defined($coursehash{'default_enrollment_end_date'}) ) { + $endaccess = &Apache::lonlocal::locallocaltime($coursehash{'default_enrollment_end_date'}); + if ($coursehash{'default_enrollment_end_date'} == 0) { + $endaccess = "No ending date"; + } + } + if ($startaccess) { + $accessdates .= &mt('From: ').$startaccess.'
'; } + if ($endaccess) { + $accessdates .= &mt('To: ').$endaccess.'
'; + } + $courseinfo{$course}{'access'} = $accessdates; } if ($xlist_items eq '') { $xlist_items = &mt('No'); @@ -528,7 +544,7 @@ sub build_courseinfo_hash { } sub count_students { - my ($cdom,$cnum) = @_; + my ($cdom,$cnum,$numsec) = @_; my $classlist = &Apache::loncoursedata::get_classlist($cdom,$cnum); my %student_count = ( Active => 0, @@ -547,7 +563,7 @@ sub count_students { $student_count{$data->[$idx{'status'}]} ++; } - my $countslist; + my $countslist = &mt('[quant,_1,section]',$numsec).':
'; foreach my $status ('Active','Future') { $countslist .= ''.$status_title{$status}.': '. $student_count{$status}.'
'; @@ -556,7 +572,7 @@ sub count_students { } sub courseinfo_row { - my ($info) = @_; + my ($info,$knownuser,$details) = @_; my ($cdom,$cnum,$title,$ownerlast,$code,$owner,$seclist,$xlist_items, $accessdates,$showsyllabus,$counts,$autoenrollment,$output); if (ref($info) eq 'HASH') { @@ -588,14 +604,14 @@ sub courseinfo_row { } $output .= ''. ''.$ownerlast.''; - if (&user_is_known()) { - if ($env{'form.coursenum'} eq '') { - $output .= "".&mt('Show more details').''; - } else { + if ($knownuser) { + if ($details) { $output .= ''.$accessdates.''. ''.$counts.''. ''.$autoenrollment.''; + } else { + $output .= "".&mt('Show more details').''; } } return $output; @@ -620,7 +636,8 @@ sub identify_sections { } @secnums = sort {$a <=> $b} @secnums; my $seclist = join(', ',@secnums); - return $seclist; + my $numsec = @secnums; + return ($seclist,$numsec); } sub get_valid_classes {