--- loncom/interface/coursecatalog.pm 2014/03/17 18:20:32 1.80
+++ loncom/interface/coursecatalog.pm 2014/04/28 01:48:04 1.82
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler for displaying the course catalog interface
#
-# $Id: coursecatalog.pm,v 1.80 2014/03/17 18:20:32 bisitz Exp $
+# $Id: coursecatalog.pm,v 1.82 2014/04/28 01:48:04 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -76,26 +76,149 @@ 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 ($cathash,$cattype);
if (ref($domconfig{'coursecategories'}) eq 'HASH') {
$cathash = $domconfig{'coursecategories'}{'cats'};
+ if ($knownuser) {
+ $cattype = $domconfig{'coursecategories'}{'auth'};
+ } else {
+ $cattype = $domconfig{'coursecategories'}{'unauth'};
+ }
} else {
$cathash = {};
+ $cattype eq '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) {
+ $r->print('
'.&mt('No catalog of LON-CAPA courses/communities is provided for: [_1]',$domdesc).'
');
+ } else {
+ if ($domconfig{'coursecategories'}{'auth'} eq 'none') {
+ $r->print(''.&mt('No catalog of LON-CAPA courses/communities is provided for: [_1]',$domdesc).'
');
+ } else {
+ $r->print(''.&mt('The catalog of LON-CAPA courses/communities provided for: "[_1]" is only available to users who are logged in.',$domdesc).'
');
+ }
+ }
+ $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 = ''."\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(' ');
+ 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);
+ 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(' '.
+ ''.
+ &mt('Syllabus').' ');
+ }
+ }
+ 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(' '.$selfenroll);
+ }
+ $r->print(''."\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(' '.&Apache::loncommon::end_page());
+ return OK;
+ } else {
+ if ($env{'form.coursenum'}) {
+ $cnum = $env{'form.coursenum'};
+ }
}
- my $subcats;
+
+ if ($env{'form.catalog_maxdepth'} ne '') {
+ $env{'form.catalog_maxdepth'} =~ s{\D}{}g;
+ }
+
+ 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);
@@ -154,7 +277,7 @@ ENDTOGGJS
}
if ($env{'form.currcat_0'} eq 'instcode::0') {
$numtitles = &instcode_course_selector($r,$codedom,$formname,$domdesc,
- $catlinks,$catjs,\@codetitles);
+ $catlinks,$catjs,\@codetitles,$cattype);
if ($env{'form.state'} eq 'listing') {
$r->print(&print_course_listing($codedom,$numtitles,undef,undef,undef,
\@codetitles));
@@ -177,7 +300,7 @@ function check_selected() {
ENDJS
}
$catjs = '';
- &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('
+END
+}
+
sub courselink_javascript {
return <<"END";
@@ -285,7 +428,7 @@ END
}
sub instcode_course_selector {
- my ($r,$codedom,$formname,$domdesc,$catlinks,$catjs,$codetitles) = @_;
+ my ($r,$codedom,$formname,$domdesc,$catlinks,$catjs,$codetitles,$cattype) = @_;
my %coursecodes = ();
my %codes = ();
my %cat_titles = ();
@@ -310,7 +453,7 @@ sub instcode_course_selector {
if (&user_is_dc($codedom)) {
$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(' ');
} else {
- $js = '';
- &cat_header($r,$codedom,$js,\%add_entries,$catlinks,$numtitles);
+ $js = '';
+ &cat_header($r,$codedom,$js,\%add_entries,$catlinks,$numtitles,$cattype);
my $cat_maxdepth = $env{'form.catalog_maxdepth'};
$r->print(''.
- 'print(' '.
' ');
return;
@@ -856,10 +1005,8 @@ sub print_course_listing {
}
}
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);
$output .= "\n".''.
' '.
' '.
@@ -868,8 +1015,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) = @_;
my %sortname;
if (($details eq '') || ($env{'form.showdetails'})) {
$sortname{'Code'} = 'code';
@@ -1374,29 +1520,39 @@ sub courseinfo_row {
$output .= "".&mt('Show more details').' ';
}
}
- 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 .= ''.&mt('Starts: [_1]',''.$showstart.' ').' '.&mt('Ends: [_1]',''.$showend.' ').' ';
- } else {
- $output .= ''.&mt('Enroll in course').' ';
- if ($info->{'selfenroll_end'} == 0) {
- $output .= &mt('Available permanently');
- } elsif ($info->{'selfenroll_end'} > $now) {
- $output .= &mt('Self-enrollment ends: [_1]',''.$showend.' ');
+ my $selfenroll = &selfenroll_status($info,$course);
+ if ($selfenroll) {
+ $output .= ''.$selfenroll.' ';
+ } else {
+ $output .= ' ';
+ }
+ $$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]',''.$showstart.' ').' '.&mt('Ends: [_1]',''.$showend.' ');
+ } else {
+ $output = ''.
+ &mt('Enroll in course').' ';
+ if ($info->{'selfenroll_end'} == 0) {
+ $output .= &mt('Available permanently');
+ } elsif ($info->{'selfenroll_end'} > $now) {
+ $output .= &mt('Self-enrollment ends: [_1]',''.$showend.' ');
+ }
}
- $output .= '';
}
- $selfenroll = 1;
}
}
- if (!$selfenroll) {
- $output .= ' ';
- }
- $$countref ++;
return $output;
}
500 Internal Server Error
Internal Server Error
The server encountered an internal error or
misconfiguration and was unable to complete
your request.
Please contact the server administrator at
root@localhost to inform them of the time this error occurred,
and the actions you performed just before this error.
More information about this error may be available
in the server error log.