--- loncom/interface/lonpickcourse.pm 2006/12/11 21:41:40 1.60.2.1
+++ loncom/interface/lonpickcourse.pm 2007/10/22 22:16:38 1.66
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Pick a course
#
-# $Id: lonpickcourse.pm,v 1.60.2.1 2006/12/11 21:41:40 albertel Exp $
+# $Id: lonpickcourse.pm,v 1.66 2007/10/22 22:16:38 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -35,7 +35,6 @@ use Apache::loncoursedata;
use Apache::lonnet;
use Apache::lonlocal;
use Apache::longroup;
-use lib '/home/httpd/lib/perl/';
use LONCAPA;
sub handler {
@@ -73,7 +72,7 @@ sub handler {
my $roledom = $env{'form.roleelement'};
if ($roledom) {
$roleelement = '';
- $submitopener = &Apache::lonroles::processpick();
+ $submitopener = &processpick();
$autosubmit = 'process_pick("'.$roledom.'")';
}
@@ -84,7 +83,8 @@ sub handler {
}
my %loaditem;
- if ($env{'form.form'} eq 'cu' && $env{'form.pickedcourse'}) {
+ 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,
@@ -93,7 +93,7 @@ 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') {
$lastaction =
'document.courselist.pickedcourse.value = cdom+"_"+cname;'."\n".
'document.courselist.submit();';
@@ -102,7 +102,7 @@ sub handler {
}
# if called to assign a role in a course to a user via CUSR
- if ($env{'form.form'} eq 'cu') {
+ if ($env{'form.form'} eq 'cu' || $env{'form.form'} eq 'studentform') {
$r->print(&create_user_javascript($type));
}
@@ -138,6 +138,49 @@ sub handler {
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;
@@ -176,7 +219,9 @@ sub display_matched_courses {
my $numcourses = keys(%courses);
foreach my $course (keys(%courses)) {
my $descr;
- if ($courses{$course} =~ m/^([^:]*):/i) {
+ if (ref($courses{$course}) eq 'HASH') {
+ $descr = $courses{$course}{'description'};
+ } elsif ($courses{$course} =~ m/^([^:]*):/i) {
$descr = &unescape($1);
} else {
$descr = &unescape($courses{$course});
@@ -196,18 +241,36 @@ sub display_matched_courses {
my $cleandesc=&HTML::Entities::encode($description,'<>&"');
$cleandesc=~s/'/\\'/g;
my ($cdom,$cnum)=split(/\_/,$course);
- my ($descr,$instcode,$owner,$ttype) = split/:/,$courses{$course};
+ my ($descr,$instcode,$ttype,@owners);
+ if (ref($courses{$course}) eq 'HASH') {
+ $descr = $courses{$course}{'description'};
+ $instcode = $courses{$course}{'inst_code'};
+ $ttype = $courses{$course}{'type'};
+ push(@owners,&unescape($courses{$course}{'owner'}));
+ if (ref($courses{$course}{'co-owners'}) eq 'ARRAY') {
+ foreach my $item (@{$courses{$course}{'co-owners'}}) {
+ push(@owners,&unescape($item));
+ }
+ }
+ } else {
+ my $singleowner;
+ ($descr,$instcode,$singleowner,$ttype)=split(/:/,$courses{$course});
+ push(@owners,&unescape($singleowner));
+ }
+ my $owner = join(', ',@owners);
$r->print(&course_chooser($multiple,$cdom,$cnum,$cleandesc));
$r->print($description.'('.
- ($Apache::lonnet::domaindescription{$cdom}?
- $Apache::lonnet::domaindescription{$cdom}:$cdom).")");
- unless ($instcode eq '') {
+ (&Apache::lonnet::domain($cdom,'description')?
+ &Apache::lonnet::domain($cdom,'description'):$cdom).")");
+ if ($instcode ne '') {
$r->print(" - ".&unescape($instcode));
}
- unless ($owner eq '') {
- $r->print(", owner - ".&unescape($owner));
+ if (@owners > 1) {
+ $r->print(', '.&mt('owners').' - ',join(', ',@owners));
+ } elsif (@owners == 1) {
+ $r->print(', '.&mt('owner').' - '.$owner);
}
- unless ($ttype eq '') {
+ if ($ttype ne '') {
$r->print('('.&unescape($ttype).')');
}
if ($multiple) { $r->print("\n"); }
@@ -266,14 +329,29 @@ sub build_filters {
foreach my $item (@{$filterlist}) {
$filter->{$item} = $env{'form.'.$item};
if ($item ne 'descriptfilter' && $item ne 'instcodefilter') {
- $filter->{$item} =~ s/\W//g;
+ if ($item eq 'domainfilter' || $item eq 'ownerdomfilter') {
+ $filter->{$item} = &LONCAPA::clean_domain($filter->{$item});
+ } elsif ($item eq 'coursefilter') {
+ $filter->{$item} = &LONCAPA::clean_courseid($filter->{$item});
+ } elsif ($item eq 'ownerfilter') {
+ $filter->{$item} = &LONCAPA::clean_username($filter->{$item});
+ } else {
+ $filter->{$item} =~ s/\W//g;
+ }
if (!$filter->{$item}) {
$filter->{$item} = '';
}
}
if ($item eq 'domainfilter') {
+ my $allow_blank = 1;
+ if ($formname eq 'portform') {
+ $filter->{$item} ||= $env{'user.domain'};
+ $allow_blank=0;
+ }
$domainselectform =
- &Apache::loncommon::select_dom_form($filter->{$item},'domainfilter',1);
+ &Apache::loncommon::select_dom_form($filter->{$item},
+ 'domainfilter',
+ $allow_blank);
} elsif ($item eq 'ownerdomfilter') {
$ownerdomselectform =
&Apache::loncommon::select_dom_form($filter->{$item},'ownerdomfilter',1);
@@ -308,8 +386,7 @@ sub build_filters {
'cog' => &mt('Course Type')
);
- $typeselectform = '