--- loncom/interface/coursecatalog.pm 2013/12/24 19:15:10 1.76 +++ loncom/interface/coursecatalog.pm 2015/05/04 15:43:48 1.86 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for displaying the course catalog interface # -# $Id: coursecatalog.pm,v 1.76 2013/12/24 19:15:10 raeburn Exp $ +# $Id: coursecatalog.pm,v 1.86 2015/05/04 15:43:48 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,6 +38,7 @@ use Apache::lonlocal; use Apache::courseclassifier; use Apache::lonacc; use LONCAPA; +use LONCAPA::lonauthcgi; sub handler { my ($r) = @_; @@ -76,26 +77,153 @@ sub handler { my $domdesc = &Apache::lonnet::domain($codedom,'description'); &Apache::lonhtmlcommon::clear_breadcrumbs(); - if ($env{'form.catalog_maxdepth'} ne '') { - $env{'form.catalog_maxdepth'} =~ s{\D}{}g; - } - my %domconfig = &Apache::lonnet::get_dom('configuration',['coursecategories'],$codedom); - my (@cats,@trails,%allitems,%idx,@jsarray,%subcathash,$cathash); + my $knownuser = &user_is_known(); + my $canviewall = &canview_all(); + + my ($cathash,$cattype); if (ref($domconfig{'coursecategories'}) eq 'HASH') { $cathash = $domconfig{'coursecategories'}{'cats'}; + if ($knownuser || $canviewall) { + $cattype = $domconfig{'coursecategories'}{'auth'}; + } else { + $cattype = $domconfig{'coursecategories'}{'unauth'}; + } + if ($cattype eq '') { + $cattype = 'std'; + } } else { $cathash = {}; + $cattype = 'std'; + } + if ($cattype eq 'none') { + $r->print(&Apache::loncommon::start_page('Course/Community Catalog')); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/coursecatalog", + text=>"Course/Community Catalog"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course/Community Catalog')); + if ($knownuser || $canviewall) { + $r->print('<div>'.&mt('No catalog of LON-CAPA courses/communities is provided for: [_1]',$domdesc).'</div>'); + } else { + if ($domconfig{'coursecategories'}{'auth'} eq 'none') { + $r->print('<div>'.&mt('No catalog of LON-CAPA courses/communities is provided for: [_1]',$domdesc).'</div>'); + } else { + $r->print('<div>'.&mt('The catalog of LON-CAPA courses/communities provided for: "[_1]" is only available to users who are logged in.',$domdesc).'</div>'); + } + } + $r->print(&Apache::loncommon::end_page()); + return OK; + } + + my $cnum; + if ($cattype eq 'codesrch') { + my ($uniquecode,$codemsg,$brtext); + if ($env{'form.uniquecode'}) { + $uniquecode = $env{'form.uniquecode'}; + $uniquecode =~ s/^\s+|\s+$//g; + } + my $js = '<script type="text/javascript">'."\n". + '// <![CDATA['."\n". + &courselink_javascript()."\n". + '// ]]>'."\n". + '</script>'."\n"; + $r->print(&Apache::loncommon::start_page('Search for a Course/Community',$js)); + if ($uniquecode =~ /^\w{6}$/) { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/coursecatalog", + text=>"Course/Community Catalog"}); + $brtext = 'Search Result'; + } else { + $brtext = 'Course/Community Catalog'; + } + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/coursecatalog", + text=>"$brtext"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course/Community Catalog')); + $r->print(&coursesearch($codedom,$domdesc,$uniquecode)); + if ($uniquecode =~ /^\w{6}$/) { + $r->print('<hr />'); + my $confname = $codedom.'-domainconfig'; + my %codes = &Apache::lonnet::get('uniquecodes',[$uniquecode],$codedom,$confname); + if ($codes{$uniquecode}) { + $cnum = $codes{$uniquecode}; + my %courses = &Apache::lonnet::courseiddump($codedom,'.',1,'.','.', + $cnum,undef,undef,'.',1); + if (keys(%courses)) { + $env{'form.coursenum'} = $cnum; + my %courseinfo = &build_courseinfo_hash(\%courses,$knownuser,$codedom,$canviewall); + undef($env{'form.coursenum'}); + if (ref($courseinfo{$codedom.'_'.$cnum}) eq 'HASH') { + $r->print(&Apache::lonhtmlcommon::start_pick_box()); + my @cols = ('title','ownerlastnames','seclist','access'); + my %lt = &Apache::lonlocal::texthash( + title => 'Title', + ownerlastnames => 'Owner & Co-owner(s)', + seclist => 'Sections', + access => 'Default Access Dates for Students', + ); + my @shown; + foreach my $item (@cols) { + if ($courseinfo{$codedom.'_'.$cnum}{$item}) { + push(@shown,$item); + } + } + my $num = 0; + foreach my $item (@shown) { + $num ++; + $r->print(&Apache::lonhtmlcommon::row_title($lt{$item}). + $courseinfo{$codedom.'_'.$cnum}{$item}); + if ($item eq 'title') { + if ($courseinfo{$codedom.'_'.$cnum}{'showsyllabus'}) { + $r->print(' <font size="-2">'. + '<a href="javascript:ToSyllabus('."'$codedom','$cnum'".')">'. + &mt('Syllabus').'</a></font>'); + } + } + my $arg = ( $num == scalar(@shown) ? 1 : '' ); + $r->print(&Apache::lonhtmlcommon::row_closure($arg)); + } + $r->print(&Apache::lonhtmlcommon::end_pick_box()); + my $selfenroll = &selfenroll_status($courseinfo{$codedom.'_'.$cnum},$codedom.'_'.$cnum); + if ($selfenroll) { + $r->print('<br />'.$selfenroll); + } + $r->print('<form name="linklaunch" method="post" action="">'."\n". + '<input type="hidden" name="backto" value="coursecatalog" />'."\n". + '<input type="hidden" name="courseid" value="" />'."\n". + '</form>'."\n"); + + } else { + $codemsg = &mt('Code matched, but course ID to which this mapped is invalid.'); + } + } else { + $codemsg = &mt('Code matched, but course ID to which this mapped is invalid.'); + } + } else { + $codemsg = &mt('No match'); + } + } + $r->print('<br />'.&Apache::loncommon::end_page()); + return OK; + } else { + if ($env{'form.coursenum'}) { + $cnum = $env{'form.coursenum'}; + } + } + + if ($env{'form.catalog_maxdepth'} ne '') { + $env{'form.catalog_maxdepth'} =~ s{\D}{}g; } - my $subcats; + + my (@cats,@trails,%allitems,%idx,@jsarray,%subcathash,$subcats); if ($env{'form.withsubcats'}) { $subcats = \%subcathash; } &Apache::loncommon::extract_categories($cathash,\@cats,\@trails,\%allitems, \%idx,\@jsarray,$subcats); my ($numtitles,@codetitles); - if ($env{'form.coursenum'} ne '' && &user_is_known()) { + if (($env{'form.coursenum'} ne '') && ($knownuser)) { &course_details($r,$codedom,$formname,$domdesc,\@trails,\%allitems,\@codetitles); } else { my ($catlinks,$has_subcats,$selitem) = &category_breadcrumbs($codedom,@cats); @@ -123,7 +251,7 @@ function setCourseId(caller) { ENDSCRIPT $catjs .= &courselink_javascript(); - if (&user_is_dc($codedom)) { + if (&user_is_dc($codedom) || $canviewall) { $catjs .= <<ENDTOGGJS function toggleStatuses() { @@ -154,10 +282,10 @@ ENDTOGGJS } if ($env{'form.currcat_0'} eq 'instcode::0') { $numtitles = &instcode_course_selector($r,$codedom,$formname,$domdesc, - $catlinks,$catjs,\@codetitles); + $catlinks,$catjs,\@codetitles,$cattype,$canviewall); if ($env{'form.state'} eq 'listing') { $r->print(&print_course_listing($codedom,$numtitles,undef,undef,undef, - \@codetitles)); + \@codetitles,$canviewall)); } } else { my (%add_entries); @@ -177,11 +305,11 @@ function check_selected() { ENDJS } $catjs = '<script type="text/javascript">'."\n".$catjs."\n".'</script>'; - &cat_header($r,$codedom,$catjs,\%add_entries,$catlinks); + &cat_header($r,$codedom,$catjs,\%add_entries,$catlinks,undef,$cattype); if ($env{'form.currcat_0'} ne '') { $r->print('<form name="'.$formname. '" method="post" action="/adm/coursecatalog">'. - &additional_filters($codedom,$has_subcats)."\n"); + &additional_filters($codedom,$has_subcats,$canviewall)."\n"); $r->print('<input type="hidden" name="catalog_maxdepth" value="'. $deeper.'" />'."\n"); for (my $i=0; $i<$deeper; $i++) { @@ -202,7 +330,8 @@ ENDJS $display_button.'" /></form><br /><br />'); } if ($env{'form.state'} eq 'listing') { - $r->print(&print_course_listing($codedom,undef,\@trails,\%allitems,$subcats,\@codetitles)); + $r->print(&print_course_listing($codedom,undef,\@trails,\%allitems,$subcats,\@codetitles, + $canviewall)); } } } @@ -236,29 +365,48 @@ sub course_details { ({href=>"javascript:document.$formname.submit()", 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,undef,$codetitles). - '<br /><br />'); - $r->print('<form name="'.$formname.'" method="post" action="/adm/coursecatalog">'. - '<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>'); + $r->print( + &Apache::lonhtmlcommon::breadcrumbs('Course/Community Catalog'). + '<h2>'. + (($env{'form.currcat_0'} eq 'communities::0') ? + &mt('Detailed community information:') : + &mt('Detailed course information:')). + '</h2>'. + &print_course_listing($codedom,undef,$trails,$allitems,undef,$codetitles). + '<br />'. + '<form name="'.$formname.'" method="post" action="/adm/coursecatalog">'. + &Apache::lonhtmlcommon::actionbox([ + '<a href = "javascript:document.coursecatalog.submit()">'. + (($env{'form.currcat_0'} eq 'communities::0') ? + &mt('Back to community listing') : &mt('Back to course listing')). + '</a>' + ]). + &Apache::lonhtmlcommon::echo_form_input(['coursenum','catalogfilter', + 'showdetails','courseid']). + '</form>'); return; } +sub coursesearch { + my ($codedom,$domdesc,$uniquecode) = @_; + my %lt = &Apache::lonlocal::texthash ( + crlk => 'Course look-up', + code => 'Code', + ifyo => 'Enter the course code (six letters and numbers)', + srch => 'Find course', + ); + return <<"END"; +<h3>$lt{'crlk'} ($domdesc)</h3> +$lt{'ifyo'} +<form name="searchbycode" method="post" action=""> +<span class="LC_nobreak"> +<input type="text" value="$uniquecode" size="6" name="uniquecode" /> +<br /> +<input type="submit" value="$lt{'srch'}" name="srch" /></span> +</form> +END +} + sub courselink_javascript { return <<"END"; @@ -286,7 +434,7 @@ END } sub instcode_course_selector { - my ($r,$codedom,$formname,$domdesc,$catlinks,$catjs,$codetitles) = @_; + my ($r,$codedom,$formname,$domdesc,$catlinks,$catjs,$codetitles,$cattype,$canviewall) = @_; my %coursecodes = (); my %codes = (); my %cat_titles = (); @@ -299,22 +447,25 @@ sub instcode_course_selector { 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>'; + my $js = '<script type="text/javascript">'."\n". + '// <![CDATA['."\n". + "$jscript\n$catjs\n". + '// ]]>'."\n". + '</script>'; if ($totcodes) { if (($env{'form.state'} eq 'listing') && ($numtitles > 0)) { $add_entries{'onLoad'} = 'setElements();'; } - if (&user_is_dc($codedom)) { + if (&user_is_dc($codedom) || $canviewall) { $add_entries{'onLoad'} .= ' toggleStatuses();toggleWasActive();' } - &cat_header($r,$codedom,$js,\%add_entries,$catlinks,$numtitles); + &cat_header($r,$codedom,$js,\%add_entries,$catlinks,$numtitles,$cattype); my $cat_maxdepth = $env{'form.catalog_maxdepth'}; $r->print('<form name="'.$formname.'" method="post" action="/adm/coursecatalog">'. '<input type="hidden" name="catalog_maxdepth" value="'.$cat_maxdepth.'" />'."\n". '<input type="hidden" name="showdom" value="'.$env{'form.showdom'}.'" />'."\n". '<input type="hidden" name="currcat_0" value="instcode::0" />'. - &additional_filters($codedom)); + &additional_filters($codedom,undef,$canviewall)); if ($numtitles > 0) { $r->print('<b>'.&mt('Choose which course(s) to list.').'</b><br />'. &Apache::courseclassifier::build_instcode_selectors($numtitles, @@ -328,8 +479,12 @@ sub instcode_course_selector { '<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); + $js = '<script type="text/javascript">'."\n". + '// <![CDATA['."\n". + "$catjs\n". + '// ]]>'."\n". + '</script>'; + &cat_header($r,$codedom,$js,\%add_entries,$catlinks,$numtitles,$cattype); my $cat_maxdepth = $env{'form.catalog_maxdepth'}; $r->print('<form name="'.$formname.'" method="post" action="/adm/coursecatalog">'. '<input type="hidden" name="catalog_maxdepth" value="'.$cat_maxdepth.'" />'. @@ -341,7 +496,7 @@ sub instcode_course_selector { } sub cat_header { - my ($r,$codedom,$js,$add_entries,$catlinks,$numtitles) = @_; + my ($r,$codedom,$js,$add_entries,$catlinks,$numtitles,$cattype) = @_; my $start_page = &Apache::loncommon::start_page('Course/Community Catalog',$js, { 'add_entries' => $add_entries, }); @@ -366,15 +521,17 @@ sub cat_header { text=>"Course/Community Catalog"}); } $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course/Community Catalog')); - my $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,$onchange)); - if (!$onchange) { + if ($cattype eq 'std') { + my $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,$onchange)); + if (!$onchange) { $r->print(' <input type="submit" name="godom" value="'.&mt('Change').'" />'); + } + $r->print('</td></tr></table></form>'); } - $r->print('</td></tr></table></form>'. - '<form name="coursecats" method="post" action="/adm/coursecatalog"'. + $r->print('<form name="coursecats" method="post" action="/adm/coursecatalog"'. ' onsubmit="return check_selected();">'. '<table border="0"><tr>'.$catlinks.'</tr></table></form>'); return; @@ -529,10 +686,10 @@ sub get_depth_values { } sub additional_filters { - my ($codedom,$has_subcats) = @_; + my ($codedom,$has_subcats,$canviewall) = @_; my $is_dc = &user_is_dc($codedom); my $output = '<div class="LC_left_float">'; - if ($is_dc) { + if ($is_dc || $canviewall) { $output .= '<fieldset><legend>'.&mt('Options').'</legend>'; } $output .= '<table><tr><td valign="top">'; @@ -573,7 +730,7 @@ sub additional_filters { '<label><input type="checkbox" name="showselfenroll" value="1" '. $show_selfenroll_status.'/>'.$selfenroll_text. '</label></span><br />'; - if ($is_dc) { + if ($is_dc || $canviewall) { my ($titlesref,$orderref) = &get_statustitles('filters'); my $showdetails_status; if ($env{'form.showdetails'}) { @@ -604,11 +761,13 @@ sub additional_filters { $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); } + if ($is_dc) { + $output .= '<span class="LC_nobreak">'. + '<label><input type="checkbox" name="showhidden" value="1" '. + $showhidden_status.'/>'.$hidden_text. + '</label></span><br />'."\n"; + } $output .= '<span class="LC_nobreak">'. - '<label><input type="checkbox" name="showhidden" value="1" '. - $showhidden_status.'/>'.$hidden_text. - '</label></span><br />'."\n". - '<span class="LC_nobreak">'. '<label><input type="checkbox" name="showdetails" value="1" '. $showdetails_status.'onclick="toggleStatuses();" />'. $details_text.'</label></span></td>'."\n". @@ -643,7 +802,7 @@ sub additional_filters { date => 'immediately prior to specific date:', ); my @statuses = &Apache::loncommon::get_env_multiple('form.showcounts'); - $output .= '<span id="choosewasacctext">'; + $output .= '<span id="choosewasacctext" class="LC_nobreak">'; if ($checked) { $output .= &get_wasactive_text(); } @@ -714,6 +873,17 @@ sub user_is_dc { return; } +sub canview_all { + my $canviewall = 0; + my $page = 'coursecatalog'; + if (&LONCAPA::lonauthcgi::can_view($page)) { + $canviewall = 1; + } elsif (&LONCAPA::lonauthcgi::check_ipbased_access($page)) { + $canviewall= 1; + } + return $canviewall; +} + sub get_statustitles { my ($caller) = @_; my @status_order = ('Active','Future','Previous'); @@ -807,12 +977,13 @@ sub search_courselist { } sub print_course_listing { - my ($domain,$numtitles,$trails,$allitems,$subcats,$codetitles) = @_; + my ($domain,$numtitles,$trails,$allitems,$subcats,$codetitles,$canviewall) = @_; my $output; my %courses; my $knownuser = &user_is_known(); + my $canviewall = &canview_all(); my $details = $env{'form.coursenum'}; - if (&user_is_dc($domain)) { + if (&user_is_dc($domain) || $canviewall) { if ($env{'form.showdetails'}) { $details = 1; } @@ -822,11 +993,13 @@ sub print_course_listing { $env{'form.coursenum'}, undef,undef,'.',1); if (keys(%courses) == 0) { + $output = '<p class="LC_error">'; 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.'); } + $output .= '</p>'; return $output; } } else { @@ -836,30 +1009,24 @@ sub print_course_listing { %courses = &search_courselist($domain,$subcats); } if (keys(%courses) == 0) { + $output = '<p class="LC_info">'; if ($env{'form.currcat_0'} eq 'communities::0') { - $output = - '<p class="LC_info">' - .&mt('No communities match the criteria you selected.') - .'</p>'; + $output .= &mt('No communities match the criteria you selected.'); } else { - $output = - '<p class="LC_info">' - .&mt('No courses match the criteria you selected.') - .'</p>'; + $output .= &mt('No courses match the criteria you selected.'); } + $output .= '</p>'; return $output; } - if (($knownuser) && (!$env{'form.showdetails'}) && (!&user_is_dc($domain))) { + if (($knownuser) && (!$env{'form.showdetails'}) && (!&user_is_dc($domain)) && (!$canviewall)) { $output = '<b>'.&mt('Note for students:').'</b> ' .&mt('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.') .'<br /><br />'; } } my $now = time; - my %domconfig = - &Apache::lonnet::get_dom('configuration',['usercreation'],$domain); $output .= &construct_data_table($knownuser,$domain,\%courses,$details,undef, - $now,\%domconfig,$trails,$allitems); + $now,$trails,$allitems,$canviewall); $output .= "\n".'<form name="linklaunch" method="post" action="">'. '<input type="hidden" name="backto" value="coursecatalog" />'. '<input type="hidden" name="courseid" value="" />'. @@ -868,8 +1035,7 @@ sub print_course_listing { } sub construct_data_table { - my ($knownuser,$domain,$courses,$details,$usersections,$now,$domconfig, - $trails,$allitems) = @_; + my ($knownuser,$domain,$courses,$details,$usersections,$now,$trails,$allitems,$canviewall) = @_; my %sortname; if (($details eq '') || ($env{'form.showdetails'})) { $sortname{'Code'} = 'code'; @@ -901,7 +1067,7 @@ sub construct_data_table { $output .= '</th>'; } my (@fields,%fieldtitles,$wasactiveon); - if ($knownuser) { + if ($knownuser || ($canviewall && $details)) { if ($details) { if ($env{'form.currcat_0'} eq 'communities::0') { $output .= '<th>'.&mt('Default Access Dates for Members').'</th>'. @@ -914,7 +1080,7 @@ sub construct_data_table { } my ($titlesref,$orderref) = &get_statustitles(); my @statuses; - if (&user_is_dc($domain)) { + if (&user_is_dc($domain) || $canviewall) { @statuses = &Apache::loncommon::get_env_multiple('form.showcounts'); if (grep(/^Previous$/,@statuses)) { if ($env{'form.wasactive'} eq 'date') { @@ -961,7 +1127,7 @@ sub construct_data_table { $deftextbook = $domdefaults{'textbookcredits'}; } } - my %courseinfo = &build_courseinfo_hash($courses,$knownuser,$domain,$details, + my %courseinfo = &build_courseinfo_hash($courses,$knownuser,$domain,$canviewall,$details, $usersections,\@fields,\%fieldtitles, $wasactiveon,\%numbers,\%creditsum, $showcredits,$defofficial,$defunofficial,$deftextbook); @@ -995,12 +1161,12 @@ sub construct_data_table { foreach my $course (@{$Sortby{$item}}) { $output.=&Apache::loncommon::start_data_table_row(); $output.=&courseinfo_row($courseinfo{$course},$knownuser,$details, - \$count,$now,$course,$trails,$allitems,\%numbers); + \$count,$now,$course,$trails,$allitems,\%numbers,$canviewall); $output.=&Apache::loncommon::end_data_table_row(); } } - if (($knownuser) && ($count > 1) && $env{'form.showdetails'}) { - if (&user_is_dc($domain)) { + if (($knownuser || $canviewall) && ($count > 1) && $env{'form.showdetails'}) { + if (&user_is_dc($domain) || $canviewall) { my %lt = &Apache::lonlocal::texthash ( 'Active' => 'Total current students', 'Future' => 'Total future students', @@ -1059,12 +1225,12 @@ sub construct_data_table { } sub build_courseinfo_hash { - my ($courses,$knownuser,$domain,$details,$usersections,$fields,$fieldtitles, + my ($courses,$knownuser,$domain,$canviewall,$details,$usersections,$fields,$fieldtitles, $wasactiveon,$numbers,$creditsum,$showcredits,$defofficial,$defunofficial) = @_; my %courseinfo; my $now = time; my $gettotals; - if ((keys(%{$courses}) > 0) && (&user_is_dc($domain)) && ($details)) { + if ((keys(%{$courses}) > 0) && (&user_is_dc($domain) || $canviewall) && ($details)) { $gettotals = 1; } my (%uniquecodes,$nocodes,$defcreds); @@ -1160,7 +1326,7 @@ sub build_courseinfo_hash { $defcreds = $courseinfo{$course}{'defaultcredits'}; } if (((defined($env{'form.coursenum'}) && ($cnum eq $env{'form.coursenum'}))) || - ($knownuser && ($details == 1))) { + (($knownuser || $canviewall) && ($details == 1))) { my $milestone; if ($wasactiveon eq 'accessend') { if ($coursehash{'default_enrollment_end_date'}) { @@ -1313,7 +1479,7 @@ sub count_students { } sub courseinfo_row { - my ($info,$knownuser,$details,$countref,$now,$course,$trails,$allitems,$numbers) = @_; + my ($info,$knownuser,$details,$countref,$now,$course,$trails,$allitems,$numbers,$canviewall) = @_; my ($cdom,$cnum,$title,$ownerlast,$code,$owner,$seclist,$xlist_items, $accessdates,$showsyllabus,$counts,$autoenrollment,$output,$categories); if (ref($info) eq 'HASH') { @@ -1362,7 +1528,7 @@ sub courseinfo_row { } $output .= '</font></td>'. '<td>'.$ownerlast.'</td>'; - if ($knownuser) { + if (($knownuser) || ($canviewall && $details)) { if ($details) { $output .= '<td>'.$accessdates.'</td>'. @@ -1374,29 +1540,39 @@ sub courseinfo_row { $output .= "<td><a href=\"javascript:setCourseId('$cnum')\">".&mt('Show more details').'</a></td>'; } } - my $selfenroll; - if ($info->{'selfenroll_types'}) { - my $showstart = &Apache::lonlocal::locallocaltime($info->{'selfenroll_start'}); - my $showend = &Apache::lonlocal::locallocaltime($info->{'selfenroll_end'}); - if (($info->{'selfenroll_end'} > 0) && ($info->{'selfenroll_end'} > $now)) { - if (($info->{'selfenroll_start'} > 0) && ($info->{'selfenroll_start'} > $now)) { - $output .= '<td>'.&mt('Starts: [_1]','<span class="LC_cusr_emph">'.$showstart.'</span>').'<br />'.&mt('Ends: [_1]','<span class="LC_cusr_emph">'.$showend.'</span>').'</td>'; - } else { - $output .= '<td><a href="javascript:ToSelfenroll('."'$course'".')">'.&mt('Enroll in course').'</a><br />'; - if ($info->{'selfenroll_end'} == 0) { - $output .= &mt('Available permanently'); - } elsif ($info->{'selfenroll_end'} > $now) { - $output .= &mt('Self-enrollment ends: [_1]','<span class="LC_cusr_emph">'.$showend.'</span>'); + my $selfenroll = &selfenroll_status($info,$course); + if ($selfenroll) { + $output .= '<td>'.$selfenroll.'</td>'; + } else { + $output .= '<td> </td>'; + } + $$countref ++; + return $output; +} + +sub selfenroll_status { + my ($info,$course) = @_; + my $now = time; + my $output; + if (ref($info) eq 'HASH') { + if ($info->{'selfenroll_types'}) { + my $showstart = &Apache::lonlocal::locallocaltime($info->{'selfenroll_start'}); + my $showend = &Apache::lonlocal::locallocaltime($info->{'selfenroll_end'}); + if (($info->{'selfenroll_end'} > 0) && ($info->{'selfenroll_end'} > $now)) { + if (($info->{'selfenroll_start'} > 0) && ($info->{'selfenroll_start'} > $now)) { + $output = &mt('Starts: [_1]','<span class="LC_cusr_emph">'.$showstart.'</span>').'<br />'.&mt('Ends: [_1]','<span class="LC_cusr_emph">'.$showend.'</span>'); + } else { + $output = '<a href="javascript:ToSelfenroll('."'$course'".')">'. + &mt('Enroll in course').'</a><br />'; + if ($info->{'selfenroll_end'} == 0) { + $output .= &mt('Available permanently'); + } elsif ($info->{'selfenroll_end'} > $now) { + $output .= &mt('Self-enrollment ends: [_1]','<span class="LC_cusr_emph">'.$showend.'</span>'); + } } - $output .= '</td>'; } - $selfenroll = 1; } } - if (!$selfenroll) { - $output .= '<td> </td>'; - } - $$countref ++; return $output; }