--- loncom/interface/lonpickcourse.pm 2006/12/11 22:22:06 1.60.2.2
+++ loncom/interface/lonpickcourse.pm 2009/05/01 01:38:20 1.78
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Pick a course
#
-# $Id: lonpickcourse.pm,v 1.60.2.2 2006/12/11 22:22:06 albertel Exp $
+# $Id: lonpickcourse.pm,v 1.78 2009/05/01 01:38:20 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -35,6 +35,7 @@ use Apache::loncoursedata;
use Apache::lonnet;
use Apache::lonlocal;
use Apache::longroup;
+use Apache::courseclassifier;
use LONCAPA;
sub handler {
@@ -49,7 +50,7 @@ sub handler {
&Apache::loncommon::get_unprocessed_cgi
($ENV{'QUERY_STRING'},['domainfilter','form','cnumelement',
'cdomelement','cnameelement','roleelement',
- 'multiple','type','setroles']);
+ 'multiple','type','setroles','fixeddom']);
my ($type,$title,$jscript,$multelement,$multiple,$roleelement,
$lastaction,$autosubmit,$submitopener);
@@ -72,7 +73,7 @@ sub handler {
my $roledom = $env{'form.roleelement'};
if ($roledom) {
$roleelement = '';
- $submitopener = &Apache::lonroles::processpick();
+ $submitopener = &processpick();
$autosubmit = 'process_pick("'.$roledom.'")';
}
@@ -83,8 +84,13 @@ sub handler {
}
my %loaditem;
- if ($env{'form.form'} eq 'cu' && $env{'form.pickedcourse'}) {
- $loaditem{'onload'} ="setSections()";
+ if ($env{'form.numtitles'}) {
+ $loaditem{'onload'} = 'setElements(); ';
+ }
+
+ if ((($env{'form.form'} eq 'cu') || ($env{'form.form'} eq 'studentform')) &&
+ ($env{'form.pickedcourse'})) {
+ $loaditem{'onload'} .= 'setSections()';
}
$r->print(&Apache::loncommon::start_page($title,undef,
{'add_entries' => \%loaditem,
@@ -92,7 +98,8 @@ sub handler {
if ($env{'form.form'} eq 'portform') {
$lastaction = 'document.courselist.submit()';
- } elsif ($env{'form.form'} eq 'cu') {
+ } elsif ($env{'form.form'} eq 'cu' || ($env{'form.form'} eq 'studentform' &&
+ !$multiple)) {
$lastaction =
'document.courselist.pickedcourse.value = cdom+"_"+cname;'."\n".
'document.courselist.submit();';
@@ -101,8 +108,8 @@ sub handler {
}
# if called to assign a role in a course to a user via CUSR
- if ($env{'form.form'} eq 'cu') {
- $r->print(&create_user_javascript($type));
+ if ($env{'form.form'} eq 'cu' || $env{'form.form'} eq 'studentform') {
+ $r->print(&create_user_javascript($type));
}
# print javascript functions for choosing a course
@@ -115,6 +122,7 @@ sub handler {
# ------------------------------------------ Display of filters to limit search
my $filter = {};
my $action = '/adm/pickcourse';
+ my $numtitles;
if (!$onlyown) {
my $filterlist = ['domainfilter','descriptfilter',
'instcodefilter','ownerfilter',
@@ -125,18 +133,61 @@ sub handler {
push(@{$filterlist},'coursefilter');
}
$r->print(&build_filters($filterlist,$type,$roleelement,$multelement,
- $filter,$action));
+ $filter,$action,\$numtitles));
}
# ---------------------------------------------------------------- Get the data
if ($env{'form.gosearch'} || $onlyown) {
- my %courses = &search_courses($r,$type,$onlyown,$filter);
+ my %courses = &search_courses($r,$type,$onlyown,$filter,$numtitles);
&display_matched_courses($r,$type,$multiple,$action,%courses);
}
$r->print(&Apache::loncommon::end_page());
return OK;
}
+sub processpick {
+ my $openerform = 'rolechoice';
+ if ($env{'form.form'} eq 'studentform') {
+ $openerform = $env{'form.form'};
+ }
+ my $process_pick = <<"ENDONE";
+
+";
+ return $process_pick;
+}
+
sub create_user_javascript {
my ($type) = @_;
my $output;
@@ -170,12 +221,40 @@ sub display_matched_courses {
if ($env{'form.form'} eq 'portform') {
$action = '/adm/portfolio';
}
+ my $numcourses = keys(%courses);
$r->print('
\n");
return;
}
-
sub multiples_tag {
my $jscript = &Apache::loncommon::check_uncheck_jscript();
my $multelement = '';
@@ -252,16 +381,15 @@ sub multiples_tag {
sub build_filters {
my ($filterlist,$type,$roleelement,$multelement,$filter,$action,
- $caller) = @_;
+ $numtitlesref) = @_;
my $list;
my $formname;
+ my ($fixeddom,$codedom,$jscript);
if (defined($env{'form.form'})) {
$formname = $env{'form.form'};
- } else {
- $formname = $caller;
}
my ($domainselectform,$sincefilterform,$ownerdomselectform,
- $instcodeform,$typeselectform);
+ $instcodeform,$typeselectform,$instcodetitle);
foreach my $item (@{$filterlist}) {
$filter->{$item} = $env{'form.'.$item};
if ($item ne 'descriptfilter' && $item ne 'instcodefilter') {
@@ -279,8 +407,27 @@ sub build_filters {
}
}
if ($item eq 'domainfilter') {
- $domainselectform =
- &Apache::loncommon::select_dom_form($filter->{$item},'domainfilter',1);
+ my $allow_blank = 1;
+ if ($formname eq 'portform') {
+ $filter->{$item} ||= $env{'user.domain'};
+ $allow_blank=0;
+ } elsif ($formname eq 'studentform') {
+ $filter->{$item} ||= $env{'request.role.domain'};
+ $allow_blank=0;
+ }
+ if ($env{'form.fixeddom'}) {
+ $domainselectform = ''.
+ &Apache::lonnet::domain($env{'request.role.domain'},
+ 'description');
+ $codedom = $env{'request.role.domain'};
+ } else {
+ $domainselectform =
+ &Apache::loncommon::select_dom_form($filter->{$item},
+ 'domainfilter',
+ $allow_blank);
+ $codedom = $filter->{'domainfilter'};
+ }
} elsif ($item eq 'ownerdomfilter') {
$ownerdomselectform =
&Apache::loncommon::select_dom_form($filter->{$item},'ownerdomfilter',1);
@@ -306,25 +453,41 @@ sub build_filters {
'15552000','31104000']));
my %lt = (
- 'cac' => &mt('[_1] Activity',$type),
- 'cde' => &mt('[_1] Description',$type),
- 'cdo' => &mt('[_1] Domain',$type),
- 'cin' => &mt('Course Institutional Code'),
- 'cow' => &mt("[_1] Owner's Username",$type),
- 'cod' => &mt("[_1] Owner's Domain", $type),
+ 'cac' => &mt("$type Activity"),
+ 'cde' => &mt("$type Title"),
+ 'cdo' => &mt("$type Domain"),
+ 'ins' => &mt('Institutional Code'),
+ 'inc' => &mt('Institutional Categorization'),
+ 'cow' => &mt("$type Owner's Username"),
+ 'cod' => &mt("$type Owner's Domain"),
'cog' => &mt('Course Type')
);
- $typeselectform = '";
my $output = qq|
@@ -332,8 +495,10 @@ sub build_filters {
|;
if ($formname eq 'modifycourse') {
- $output .= '';
- } else {
+ $output .= ''."\n".
+ ''."\n";
+ } else {
my $name_input;
if ($env{'form.cnameelement'} ne '') {
$name_input = '';
+ $output .= ''."\n";
}
}
+ if ($env{'form.fixeddom'}) {
+ $output .= ''."\n";
+ }
+ $output .= "
\n".&Apache::lonhtmlcommon::start_pick_box();
if ($sincefilterform) {
- $output .= $lt{'cac'}.': '.$sincefilterform.'
'."\n";
+ $output .= &Apache::lonhtmlcommon::row_title($lt{'cac'})
+ .$sincefilterform
+ .&Apache::lonhtmlcommon::row_closure();
}
if ($domainselectform) {
- $output .= $lt{'cdo'}.': '.$domainselectform.'
'."\n";
+ $output .= &Apache::lonhtmlcommon::row_title($lt{'cdo'})
+ .$domainselectform
+ .&Apache::lonhtmlcommon::row_closure();
+ }
+ if ($typeselectform) {
+ $output .= &Apache::lonhtmlcommon::row_title($lt{'cog'})
+ .$typeselectform
+ .&Apache::lonhtmlcommon::row_closure();
}
-# if ($typeselectform) {
-# $output .= $lt{'cog'}.': '.$typeselectform.'
'."\n";
-# }
if ($instcodeform) {
- $output .= $lt{'cin'}.': '.$instcodeform.'
'."\n";
+ $output .= &Apache::lonhtmlcommon::row_title($instcodetitle)
+ .$instcodeform
+ .&Apache::lonhtmlcommon::row_closure();
}
if (exists($filter->{'ownerfilter'})) {
- $output .= $lt{'cow'}.': '.
- '
'."\n".
- $lt{'cod'}.': '.$ownerdomselectform.'
'."\n";
+ $output .= &Apache::lonhtmlcommon::row_title($lt{'cow'})
+ .''
+ .&Apache::lonhtmlcommon::row_closure()
+ .&Apache::lonhtmlcommon::row_title($lt{'cod'})
+ .$ownerdomselectform
+ .&Apache::lonhtmlcommon::row_closure();
}
if (exists($filter->{'coursefilter'})) {
- $output .= &mt('LON-CAPA course ID').': '.
- '
';
+ $output .= &Apache::lonhtmlcommon::row_title(&mt('LON-CAPA course ID'))
+ .''
+ .&Apache::lonhtmlcommon::row_closure();
}
if (exists($filter->{'descriptfilter'})) {
- $output .=$lt{'cde'}.': '.
- ''."\n";
+ $output .= &Apache::lonhtmlcommon::row_title($lt{'cde'})
+ .''
+ .&Apache::lonhtmlcommon::row_closure(1);
+ }
+ $output .= &Apache::lonhtmlcommon::end_pick_box();
+ $output .= ''."\n".''."\n".'
'."\n";
+ return $jscript.$output;
+}
+
+sub instcode_selectors {
+ my ($codedom,$formname) = @_;
+ my ($output,@codetitles,%cat_titles,%cat_order,%cat_items);
+ my ($jscript,$totcodes,$numtitles,$lasttitle) =
+ &Apache::courseclassifier::instcode_selectors_data($codedom,$formname,
+ \%cat_items,\@codetitles,\%cat_titles,\%cat_order);
+ if ($numtitles > 0) {
+ $output = &Apache::courseclassifier::build_instcode_selectors($numtitles,
+ $lasttitle,\%cat_items,\@codetitles,\%cat_titles,\%cat_order)."\n".
+ ''."\n".
+ ''."\n";
+
}
- $output .= qq|
-
-
-
-|;
- return $output;
+ return ($output,$jscript,$numtitles);
}
sub search_courses {
- my ($r,$type,$onlyown,$filter) = @_;
+ my ($r,$type,$onlyown,$filter,$numtitles) = @_;
my %courses;
if (!$onlyown) {
- $r->print(&mt('Searching').' ...
');
+ $r->print(&mt('Searching ...').'
');
$r->rflush();
if (($filter->{'ownerfilter'} ne '') ||
($filter->{'ownerdomfilter'} ne '')) {
@@ -406,19 +602,28 @@ sub search_courses {
if ($type eq '') { $type = '.'; }
my $timefilter =
($filter->{'sincefilter'}==-1?1:time-$filter->{'sincefilter'});
+ my ($instcodefilter,$regexpok);
+ if ($numtitles) {
+ $instcodefilter =
+ &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},
+ $numtitles);
+ $regexpok = 1;
+ } else {
+ $instcodefilter = $filter->{'instcodefilter'};
+ }
%courses =
&Apache::lonnet::courseiddump($filter->{'domainfilter'},
$filter->{'descriptfilter'},
$timefilter,
- $filter->{'instcodefilter'},
+ $instcodefilter,
$filter->{'combownerfilter'},
$filter->{'coursefilter'},
- undef,undef,$type);
+ undef,undef,$type,$regexpok);
} else {
$r->print('
');
my %coursehash = &Apache::loncommon::findallcourses();
foreach my $cid (sort(keys(%coursehash))) {
- $courses{$cid} = $env{'course.'.$cid.'.description'};
+ $courses{$cid}{'description'} = $env{'course.'.$cid.'.description'};
}
}
return %courses;
@@ -430,7 +635,7 @@ sub course_chooser {
if ($multiple) {
$output = '