[LON-CAPA-cvs] cvs: loncom /interface coursecatalog.pm
raeburn
lon-capa-cvs-allow@mail.lon-capa.org
Thu, 29 May 2008 04:29:33 -0000
This is a MIME encoded message
--raeburn1212035373
Content-Type: text/plain
raeburn Thu May 29 00:29:33 2008 EDT
Modified files:
/loncom/interface coursecatalog.pm
Log:
Display available course categories.
- Either self-cataloguing scheme for "official courses" based on course code
(up to four coupled dynamic select boxes available,e.g., Year, Semester, Department,
Number - if localenroll::instcode_format() customized
- or categories defined by Domain Coordination in Domain Configuration Menu
- or both.
--raeburn1212035373
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20080529002933.txt"
Index: loncom/interface/coursecatalog.pm
diff -u loncom/interface/coursecatalog.pm:1.27 loncom/interface/coursecatalog.pm:1.28
--- loncom/interface/coursecatalog.pm:1.27 Fri Mar 7 23:00:53 2008
+++ loncom/interface/coursecatalog.pm Thu May 29 00:29:33 2008
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler for displaying the course catalog interface
#
-# $Id: coursecatalog.pm,v 1.27 2008/03/08 04:00:53 raeburn Exp $
+# $Id: coursecatalog.pm,v 1.28 2008/05/29 04:29:33 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -54,7 +54,8 @@
&Apache::lonacc::get_posted_cgi($r);
&Apache::lonlocal::get_language_handle($r);
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['sortby']);
- my $codedom = &Apache::lonnet::default_login_domain();
+
+ my $codedom = &Apache::lonnet::default_login_domain();
if (($env{'user.domain'} ne '') && ($env{'user.domain'} ne 'public')) {
$codedom = $env{'user.domain'};
@@ -63,15 +64,40 @@
}
}
my $formname = 'coursecatalog';
+ if ($env{'form.showdom'} ne '') {
+ if (&Apache::lonnet::domain($env{'form.showdom'}) ne '') {
+ $codedom = $env{'form.showdom'};
+ }
+ }
my $domdesc = &Apache::lonnet::domain($codedom,'description');
-
&Apache::lonhtmlcommon::clear_breadcrumbs();
if ($env{'form.coursenum'} ne '' && &user_is_known()) {
&course_details($r,$codedom,$formname,$domdesc);
} else {
- my $numtitles = &course_selector($r,$codedom,$formname,$domdesc);
- if ($env{'form.state'} eq 'listing') {
- $r->print(&print_course_listing($codedom,$numtitles).'<br />');
+ my $catlinks = &category_breadcrumbs($codedom);
+ my $catjs = <<"ENDSCRIPT";
+
+function setCatDepth(depth) {
+ document.coursecats.catalog_maxdepth.value = depth;
+ document.coursecats.submit();
+ return;
+}
+
+ENDSCRIPT
+ my $numtitles;
+ if ($env{'form.currcat_0'} eq 'instcode::0') {
+ $numtitles = &instcode_course_selector($r,$codedom,$formname,$domdesc,
+ $catlinks,$catjs);
+ if ($env{'form.state'} eq 'listing') {
+ $r->print(&print_course_listing($codedom,$numtitles));
+ }
+ } else {
+ my (%add_entries);
+ $catjs = '<script type="text/javascript">'."\n".$catjs."\n".'</script>';
+ &cat_header($r,$codedom,$catjs,\%add_entries,$catlinks);
+ if ($env{'form.currcat_0'} ne '') {
+ $r->print(&print_course_listing($codedom));
+ }
}
}
$r->print(&Apache::loncommon::end_page());
@@ -100,7 +126,7 @@
{text=>"Course details"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Details'));
$r->print('<br />'.&mt('Detailed course information:').'<br /><br />'.
- '<form name="coursecatalog" method="post">'.
+ '<form name="'.$formname.'" method="post">'.
&print_course_listing($codedom).'<br /><br />');
$r->print('<a href = "javascript:document.coursecatalog.submit()">'.
&mt('Back to course listing').'</a>'.
@@ -109,8 +135,8 @@
'<input type="hidden" name="state" value="listing" /></form>');
}
-sub course_selector {
- my ($r,$codedom,$formname,$domdesc) = @_;
+sub instcode_course_selector {
+ my ($r,$codedom,$formname,$domdesc,$catlinks,$catjs) = @_;
my %coursecodes = ();
my %codes = ();
my @codetitles = ();
@@ -195,40 +221,21 @@
}\n|;
}
}
- my $js = '<script type"text/javascript">'."\n$jscript\n".
+ my $js = '<script type"text/javascript">'."\n$jscript\n$catjs\n".
'</script>';
my %add_entries = (topmargin => "0",
marginheight => "0",);
if (($env{'form.state'} eq 'listing') && ($numtitles > 0)) {
$add_entries{'onLoad'} = 'setElements()';
}
- my $start_page =
- &Apache::loncommon::start_page('Course Catalog',$js,
- {
- 'add_entries' => \%add_entries,
- 'no_inline_link' => 1,});
- $r->print($start_page);
- if ($env{'form.state'} eq 'listing') {
- if ($numtitles > 0) {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"/adm/coursecatalog",
- text=>"Select courses"},
- {text=>"Course listing"});
- } else {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({text=>"Course listing"});
- }
- $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Listing'));
- } else {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"/adm/coursecatalog",
- text=>"Select courses"});
- $r->print(&Apache::lonhtmlcommon::breadcrumbs('Select courses'));
- }
- $r->print('<h3>'.&mt('Display information about official [_1] classes for which LON-CAPA courses have been created:',$domdesc).'</h3>');
- $r->print('<form name="coursecatalog" method="post">');
+ &cat_header($r,$codedom,$js,\%add_entries,$catlinks,$numtitles);
+ 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.'" />'.
+ '<input type="hidden" name="showdom" value="'.$env{'form.showdom'}.'" />'.
+ '<input type="hidden" name="currcat_0" value="instcode::0" />');
if ($numtitles > 0) {
- $r->print(&mt('<b>Choose which course(s) to list.</b><br />'));
+ $r->print('<br /><b>'.&mt('Choose which course(s) to list.').'</b><br />');
$r->print('<table><tr>');
for (my $k=0; $k<$lasttitle-1; $k++) {
my (@items,@unsorted);
@@ -281,24 +288,147 @@
}
$r->print('<br />');
}
- $r->print('<input type="hidden" name="coursenum" value="" /><input type="hidden" name="sortby" value="" /><input type="hidden" name="state" value="listing" />');
+ $r->print('<input type="hidden" name="coursenum" value="" /><input type="hidden" name="sortby" value="" /><input type="hidden" name="state" value="listing" /><input type="hidden" name="form.currcat_0" value="instcode::0" />');
if ($numtitles > 0) {
$r->print('<input type="submit" name="catalogfilter" value="'.&mt('Display courses').'" />');
}
$r->print('<input type="hidden" name="numtitles" value="'.
$numtitles.'" /></form>');
if (($numtitles > 0) && ($env{'form.state'} eq 'listing')) {
- $r->print('<br /><br />');
+ $r->print('<br />');
}
} else {
- $r->print(&Apache::loncommon::start_page('Course Catalog','',
- {
- 'no_inline_link' => 1,}));
$r->print('<br />'.&mt('No official courses to display for [_1].',$domdesc));
}
return $numtitles;
}
+sub cat_header {
+ my ($r,$codedom,$js,$add_entries,$catlinks,$numtitles) = @_;
+ my $start_page =
+ &Apache::loncommon::start_page('Course Catalog',$js,
+ {
+ 'add_entries' => $add_entries,
+ 'no_inline_link' => 1,});
+ $r->print($start_page);
+ if ($env{'form.state'} eq 'listing') {
+ if ($numtitles > 0) {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"/adm/coursecatalog",
+ text=>"Select courses"},
+ {text=>"Course listing"});
+ } else {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({text=>"Course listing"});
+ }
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Listing'));
+ } else {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"/adm/coursecatalog",
+ text=>"Select courses"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Select courses'));
+ }
+ $r->print('<table border="0"><tr>'.
+ '<form name="coursecatdom" method="post" action="/adm/coursecatalog">'.
+ '<td><b>'.&mt('Domain:').'</b></td><td>'.
+ &Apache::loncommon::select_dom_form($codedom,'showdom','',1).
+ ' <input type="submit" name="godom" value="Go"></td></form></tr><tr>'.
+ '<form name="coursecats" method="post" action="/adm/coursecatalog">'.
+ $catlinks.'</form></tr></table>');
+ return;
+}
+
+sub category_breadcrumbs {
+ my ($dom) = @_;
+ my %domconfig =
+ &Apache::lonnet::get_dom('configuration',['coursecategories'],$dom);
+ my (@cats,@trails,%allitems,%idx,@jsarray);
+ &Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@cats,\@trails,
+ \%allitems,\%idx,\@jsarray);
+ my $currdepth = 0;
+ my $deeper = 0;
+ my $currcat_str;
+ if ($env{'form.catalog_maxdepth'} ne '') {
+ $currdepth = $env{'form.catalog_maxdepth'};
+ $deeper = $currdepth + 1;
+ }
+ $currcat_str = '<input type="hidden" name="catalog_maxdepth" value="'.$deeper.'" /><input type="hidden" name="showdom" value="'.$dom.'" />';
+ my $catlinks = '<td valign="top"><b>'.&mt('Catalog:').'</b></td><td><table><tr>';
+ for (my $i=0; $i<$deeper; $i++) {
+ $currcat_str .= '<input type="hidden" name="currcat_'.$i.'" value="'.$env{'form.currcat_'.$i}.'" />';
+ my ($cattitle,$shallower);
+ if ($i == 0) {
+ $cattitle = &mt('Main Categories');
+ } else {
+ $shallower = $i-1;
+ my ($cat,$container,$depth) = map { &unescape($_); } split(/:/,$env{'form.currcat_'.$shallower});
+ $cattitle = $cat;
+ }
+ $catlinks .= '<td valign="top"><a href="javascript:setCatDepth('."'$shallower'".')">'.$cattitle.'</a>-></td>';
+ }
+ if ($deeper == 0) {
+ $catlinks .= '<td>'.&mt('Main Categories').': ';
+ if (ref($cats[0]) eq 'ARRAY') {
+ if ((@{$cats[0]} == 1) && ($cats[0][0] eq 'instcode')) {
+ $catlinks .= &mt('Official courses (with institutional codes)').
+ '<input type="hidden" name="currcat_0" value="instcode::0">';
+ $env{'form.currcat_0'} = 'instcode::0';
+ } else {
+ $catlinks .= '<select name="currcat_0">'."\n";
+ if (@{$cats[0]} > 1) {
+ my $selstr;
+ if ($env{'form.currcat_0'} eq '') {
+ $selstr = ' selected="selected" ';
+ }
+ $catlinks .= '<option value=""'.$selstr.'>'.&mt('Select').'</option>'."\n";
+ }
+ for (my $i=0; $i<@{$cats[0]}; $i++) {
+ my $name = $cats[0][$i];
+ my $item = &escape($name).'::0';
+ my $selstr;
+ if ($env{'form.currcat_'.$i} eq $item) {
+ $selstr = ' selected="selected" ';
+ }
+ $catlinks .= '<option value="'.$item.'"'.$selstr.'>';
+ if ($name eq 'instcode') {
+ $catlinks .= &mt('Official courses (with institutional codes)');
+ } else {
+ $catlinks .= $name;
+ }
+ $catlinks .= '</option>'."\n";
+ }
+ $catlinks .= '</select>'."\n".
+ ' <input type="submit" name="gocats" value="Go" />';
+ }
+ } else {
+ $catlinks .= &mt('Official courses (with institutional codes)').
+ '<input type="hidden" name="currcat_0" value="instcode::0">';
+ $env{'form.currcat_0'} = 'instcode::0';
+ }
+ } else {
+ my ($cat,$container,$depth) = map { &unescape($_); } split(/:/,$env{'form.currcat_'.$currdepth});
+ my $deeper = $depth +1;
+ my $currcat = $cat;
+ if ($cat eq 'instcode') {
+ $currcat = &mt('Official courses (with institutional codes)');
+ }
+ $catlinks .= '<td>'.$currcat;
+ if (ref($cats[$deeper]{$cat}) eq 'ARRAY') {
+ $catlinks .= ': <select name="currcat_'.$deeper.'">'.
+ '<option value="" selected="selected">'.&mt('Select').'</option>';
+ for (my $k=0; $k<@{$cats[$deeper]{$cat}}; $k++) {
+ my $name = $cats[$deeper]{$cat}[$k];
+ my $item = &escape($name).':'.&escape($cat).':'.$deeper;
+ $catlinks .= '<option value="'.$item.'">'.$name.'</option>'."\n";
+ }
+ $catlinks .= '</select>'."\n".
+ ' <input type="submit" name="gocats" value="Go" />';
+ }
+ }
+ $catlinks .= $currcat_str.'</td></tr></table></td>';
+ return $catlinks;
+}
+
sub user_is_dc {
my ($codedom) = @_;
if (exists($env{'user.role.dc./'.$codedom.'/'})) {
@@ -395,7 +525,7 @@
return $output;
}
-sub search_courselist {
+sub search_official_courselist {
my ($domain,$numtitles) = @_;
my $instcode;
if (defined($numtitles) && $numtitles == 0) {
@@ -425,6 +555,18 @@
return %courses;
}
+sub search_courselist {
+ my ($domain) = @_;
+ my $cat_maxdepth = $env{'form.catalog_maxdepth'};
+ my $filter = $env{'form.currcat_'.$cat_maxdepth};
+ my %courses;
+ if ($filter ne '') {
+ %courses = &Apache::lonnet::courseiddump($domain,'.',1,'.','.','.',
+ undef,undef,'Course',1,
+ $env{'form.showselfenroll'},$filter);
+ }
+ return %courses;
+}
sub print_course_listing {
my ($domain,$numtitles) = @_;
@@ -446,7 +588,11 @@
return $output;
}
} else {
- %courses = &search_courselist($domain,$numtitles);
+ if ($env{'form.currcat_0'} eq 'instcode::0') {
+ %courses = &search_official_courselist($domain,$numtitles);
+ } else {
+ %courses = &search_courselist($domain);
+ }
if (keys(%courses) == 0) {
$output = &mt('No courses match the criteria you selected.');
return $output;
--raeburn1212035373--