--- loncom/interface/lonpickcourse.pm 2006/03/16 21:54:40 1.41
+++ loncom/interface/lonpickcourse.pm 2006/11/05 20:59:17 1.54
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Pick a course
#
-# $Id: lonpickcourse.pm,v 1.41 2006/03/16 21:54:40 albertel Exp $
+# $Id: lonpickcourse.pm,v 1.54 2006/11/05 20:59:17 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -34,6 +34,9 @@ use Apache::loncommon;
use Apache::loncoursedata;
use Apache::lonnet;
use Apache::lonlocal;
+use Apache::longroup;
+use lib '/home/httpd/lib/perl/';
+use LONCAPA;
sub handler {
my $r = shift;
@@ -49,105 +52,102 @@ sub handler {
'sincefilter','form','cnumelement',
'cdomelement','cnameelement','roleelement',
'pickedcourse','instcodefilter',
- 'ownerfilter','coursefilter','multiple']);
-# domain filter and selection
- my $domainfilter=$env{'form.domainfilter'};
- $domainfilter=~s/\W//g;
- unless ($domainfilter) { $domainfilter=''; }
- my $domainselectform=&Apache::loncommon::select_dom_form($domainfilter,
- 'domainfilter',1);
-# description filter
- my $descriptfilter=$env{'form.descriptfilter'};
- unless ($descriptfilter) { $descriptfilter=''; }
- my $listdescript=&HTML::Entities::encode($descriptfilter,'<>&"');
-# institutional code filter
- my $instcodefilter=$env{'form.instcodefilter'};
- unless ($instcodefilter) { $instcodefilter=''; }
- my $listinstcode=&HTML::Entities::encode($instcodefilter,'<>&"');
-# course owner filter
- my $ownerfilter=$env{'form.ownerfilter'};
- unless ($ownerfilter) { $ownerfilter=''; }
- my $listowner=&HTML::Entities::encode($ownerfilter,'<>&"');
-# course ID filter for DCs only
- my ($courseidtag,$coursefilter);
- if ($env{'user.adv'} && $domainfilter && exists($env{'user.role.dc./'.
- $domainfilter.'/'})) {
- $coursefilter=$env{'form.coursefilter'};
- unless ($coursefilter) { $coursefilter=''; }
- my $listcourseid=&HTML::Entities::encode($coursefilter,'<>&"');
- $courseidtag = &mt('LON-CAPA course ID');
- $courseidtag .= qq|:
-
- |;
- }
-# last course activity filter and selection
- my $sincefilter=$env{'form.sincefilter'};
- $sincefilter=~s/[^\d-]//g;
- unless ($sincefilter) { $sincefilter=-1; }
- my $sincefilterform=&Apache::loncommon::select_form($sincefilter,
- 'sincefilter',('-1'=>'',
- '86400' => 'today',
- '604800' => 'last week',
- '2592000' => 'last month',
- '7776000' => 'last three months',
- '15552000' => 'last six months',
- '31104000' => 'last year',
- 'select_form_order' =>
- ['-1','86400','604800','2592000','7776000',
- '15552000','31104000']));
-# if called from loncreateuser, report sections, then close
- my ($loaditem,$seclist);
- my $num_sections = 0;
- if ($env{'form.form'} eq 'cu' && $env{'form.pickedcourse'}) {
- $loaditem = 'onLoad="setSections()"';
- my ($cdom,$cnum) = split/_/,$env{'form.pickedcourse'};
- my %sections_count = ();
- $num_sections = &Apache::loncommon::get_sections($cdom,$cnum,\%sections_count);
- my @sections = ();
- if ($num_sections > 0) {
- @sections = (sort {$a <=> $b} keys(%sections_count));
- $seclist = join('","',@sections);
- }
- }
- my $jscript;
- my $title = 'Selecting a course';
-# Setup for multiple course selections, if flag for multiples set.
- my $multiple = $env{'form.multiple'};
- my $multelement;
- if ($multiple) {
- $title = 'Selecting course(s)';
- $jscript = &Apache::loncommon::check_uncheck_jscript();
- $multelement = '';
+ 'ownerfilter','coursefilter','multiple',
+ 'type','ownerdomfilter']);
+
+ my ($type,$title,$jscript,$multelement,$multiple,$name_code,$name_input,
+ $roleelement);
+ $type = $env{'form.type'};
+ if (!defined($env{'form.type'})) {
+ $type = 'Course';
}
- $r->print(&Apache::loncommon::start_page($title,undef,
- {'add_entries' => $loaditem,
- 'no_nav_bar' => 1, }));
- my %lt=&Apache::lonlocal::texthash(
- 'cac' => 'Course Activity',
- 'cde' => 'Course Description',
- 'cdo' => 'Course Domain',
- 'cin' => 'Course Institutional Code',
- 'cow' => "Course Owner's Username");
- my ($name_code,$name_input);
+ $title = &mt('Selecting a [_1]',$type);
+
+ # Setup for multiple course selections, if flag for multiples set.
+ ($title,$jscript,$multelement,$multiple) = &multiples_tag($type,$title);
+
if (defined($env{'form.cnameelement'}) && $env{'form.cnameelement'} ne '') {
- $name_code = "opener.document.$env{'form.form'}.$env{'form.cnameelement'}.value=cdesc;";
- $name_input ='';
+ $name_code = "opener.document.$env{'form.form'}.$env{'form.cnameelement'}.".
+ "value=cdesc;";
+ $name_input ='';
}
+
my $submitopener = '';
my $autosubmit = '';
- my $roleelement = '';
my $lastaction = 'self.close()';
if ($env{'form.form'} eq 'cu') {
$lastaction = 'document.courselist.pickedcourse.value = cdom+"_"+cname;'."\n".
'document.courselist.submit();';
}
+ if ($env{'form.form'} eq 'portform') {
+ $lastaction = 'document.courselist.pickedcourse.value = cdom+"_"+cname;'."\n".
+ 'document.courselist.submit();';
+ }
my $roledom = $env{'form.roleelement'};
if ($roledom) {
$roleelement = '';
$submitopener = &Apache::lonroles::processpick();
$autosubmit = 'process_pick("'.$roledom.'")';
}
+
+ my (%filter,%list);
+ my $filterdisplay;
+ my $onlyown = 0;
+ if ((($env{'form.form'} eq 'portform') && ($env{'user.adv'}))) {
+ $onlyown = 1;
+ } else {
+ $filterdisplay = &build_filters($type,$name_input,$roleelement,
+ $multelement, \%filter,\%list);
+ }
+# if called from loncreateuser, report sections, then close
+ my (%loaditem,$seclist,$groupslist,$roleslist,$rolesnameslist,
+ $accesslist,$accessnameslist);
+ my $sec_element = 'currsec';
+ my $grplist_element = 'groups';
+ my $num_sections = 0;
+ my $num_groups = 0;
+ my $num_roles = 0;
+ my $num_access = 0;
+ my ($cdom,$cnum);
+ if ($env{'form.pickedcourse'}) {
+ ($cdom,$cnum) = split/_/,$env{'form.pickedcourse'};
+ }
+ if ($env{'form.form'} eq 'cu' && $env{'form.pickedcourse'}) {
+ $loaditem{'onload'} ="setSections()";
+ ($seclist,$num_sections,$groupslist,$num_groups) =
+ &build_selection_lists($cdom,$cnum,$type,undef,undef,
+ $env{'form.form'});
+ }
+# if called from portfolio, report roles, sections, groups and close
+ my ($roles_element,$groups_element,$status_element,$setitems_function);
+ if ($env{'form.form'} eq 'portform' && $env{'form.pickedcourse'}) {
+ $loaditem{'onload'} ="setItems()";
+ ($seclist,$num_sections,$groupslist,$num_groups,$roleslist,$num_roles,
+ $rolesnameslist,$accesslist,$num_access,$accessnameslist) =
+ &build_selection_lists($cdom,$cnum,$type,1,1,$env{'form.form'});
+ ($sec_element,$grplist_element,$setitems_function) =
+ &setitems_javascript($seclist,$num_sections,$groupslist,$num_groups,
+ $roleslist,$num_roles,$rolesnameslist,
+ $accesslist,$num_access,$accessnameslist);
+ }
+ $r->print(&Apache::loncommon::start_page($title,undef,
+ {'add_entries' => \%loaditem,
+ 'no_nav_bar' => 1, }));
+ my %elements = (
+ 'Course' => {
+ name => 'coursepick',
+ total => 'coursetotal',
+ list => 'courselist',
+ },
+ 'Non-standard course' => {
+ name => 'grouppick',
+ total => 'grouptotal',
+ list => 'grouplist',
+ },
+ );
+ my $setsec_func = &setsec_javascript($seclist,$sec_element,$grplist_element,
+ $groupslist,$num_sections);
$r->print(<
function gochoose(cname,cdom,cdesc,multiple,caller) {
@@ -169,26 +169,26 @@ function gochoose(cname,cdom,cdesc,multi
}
}
}
- opener.document.$env{'form.form'}.coursetotal.value = courseCount;
- if (typeof(opener.document.$env{'form.form'}.coursepick.length) ==
+ opener.document.$env{'form.form'}.$elements{$type}{'total'}.value = courseCount;
+ if (typeof(opener.document.$env{'form.form'}.$elements{$type}{'name'}.length) ==
'undefined') {
- if (opener.document.$env{'form.form'}.coursepick.value == 'specific') {
- opener.document.$env{'form.form'}.coursepick.checked = true;
+ if (opener.document.$env{'form.form'}.$elements{$type}{'name'}.value == 'specific') {
+ opener.document.$env{'form.form'}.$elements{$type}{'name'}.checked = true;
} else {
- opener.document.$env{'form.form'}.coursepick.checked = false;
+ opener.document.$env{'form.form'}.$elements{$type}{'name'}.checked = false;
}
} else {
- for (var j=0; j 0) {
courses = courses.substr(0,courses.length-2);
- opener.document.$env{'form.form'}.courselist.value = courses;
+ opener.document.$env{'form.form'}.$elements{$type}{'list'}.value = courses;
}
} else {
$name_code
@@ -208,41 +208,171 @@ function gochoose(cname,cdom,cdesc,multi
$lastaction
}
-function setSections() {
- var numSections = $num_sections
- var sectionsArray = new Array("$seclist")
- opener.document.$env{"form.form"}.currsec.length = 0
- if (numSections == 0) {
- opener.document.$env{"form.form"}.currsec.multiple=false
- opener.document.$env{"form.form"}.currsec.size=1;
- opener.document.$env{"form.form"}.currsec.options[0] = new Option('No existing sections','',false,false)
- } else {
- if (numSections == 1) {
- opener.document.$env{"form.form"}.currsec.multiple=false;
- opener.document.$env{"form.form"}.currsec.size=1;
- opener.document.$env{"form.form"}.currsec.options[0] = new Option('Select','',true,true);
- opener.document.$env{"form.form"}.currsec.options[1] = new Option('No section','',false,false)
- opener.document.$env{"form.form"}.currsec.options[2] = new Option(sectionsArray[0],sectionsArray[0],false,false);
+$setsec_func
+
+$setitems_function
+
+$jscript
+
+$submitopener
+ENDSCRIPT
+ $r->print($filterdisplay);
+
+# ---------------------------------------------------------------- Get the data
+ if ($env{'form.gosearch'} || $onlyown) {
+ my %courses = &search_courses($r,$type,$onlyown,\%filter);
+ &display_matched_courses($r,$type,$multiple,%courses);
+ }
+ $r->print(&Apache::loncommon::end_page());
+ return OK;
+}
+
+sub display_matched_courses {
+ my ($r,$type,$multiple,%courses) = @_;
+ $r->print('\n");
+ return;
}
-$jscript
-
-$submitopener
-
-ENDSCRIPT
-# ---------------------------------------------------------------- Get the data
- if ($env{'form.gosearch'}) {
+END
+ return $output;
+}
+
+sub search_courses {
+ my ($r,$type,$onlyown,$filter) = @_;
+ my %courses;
+ if (!$onlyown) {
$r->print(&mt('Searching').' ...
');
$r->rflush();
- unless ($descriptfilter) { $descriptfilter='.'; }
- unless ($instcodefilter) { $instcodefilter='.'; }
- unless ($ownerfilter) { $ownerfilter='.'; }
- unless ($coursefilter) { $coursefilter='.'; }
- my $timefilter=($sincefilter==-1?1:time-$sincefilter);
- my %courses=
- &Apache::lonnet::courseiddump
- ($domainfilter,$descriptfilter,$timefilter,$instcodefilter,$ownerfilter,$coursefilter);
- $r->print('\n");
+ if ($type eq '') { $type = '.'; }
+ my $timefilter =
+ ($filter->{'sincefilter'}==-1?1:time-$filter->{'sincefilter'});
+ %courses =
+ &Apache::lonnet::courseiddump($filter->{'domainfilter'},
+ $filter->{'descriptfilter'},
+ $timefilter,
+ $filter->{'instcodefilter'},
+ $filter->{'combownerfilter'},
+ $filter->{'coursefilter'},
+ undef,undef,$type);
+ } else {
+ $r->print('
');
+ foreach my $cid (sort(&Apache::loncommon::findallcourses())) {
+ $courses{$cid} = $env{'course.'.$cid.'.description'};
+ }
}
- $r->print(&Apache::loncommon::end_page());
- return OK;
+ return %courses;
}
sub course_chooser {
@@ -346,7 +448,183 @@ sub course_chooser {
"'".$cnum."','".$cdom."','".$cleandesc."')".'" />'."\n";
}
return $output;
-}
+}
+
+sub setsec_javascript {
+ my ($seclist,$sec_element,$grplist_element,$groupslist,$num_sections) = @_;
+ my $sectsections = qq|
+function setSections() {
+ var numSections = $num_sections
+ var sectionsArray = new Array("$seclist")
+ opener.document.$env{"form.form"}.$sec_element.length = 0
+ if (numSections == 0) {
+ opener.document.$env{"form.form"}.$sec_element.multiple=false
+ opener.document.$env{"form.form"}.$sec_element.size=1;
+ opener.document.$env{"form.form"}.$sec_element.options[0] = new Option('No existing sections','',false,false)
+ } else {
+ if (numSections == 1) {
+ opener.document.$env{"form.form"}.$sec_element.multiple=false;
+ opener.document.$env{"form.form"}.$sec_element.size=1;
+ opener.document.$env{"form.form"}.$sec_element.options[0] = new Option('Select','',true,true);
+ opener.document.$env{"form.form"}.$sec_element.options[1] = new Option('No section','',false,false)
+ opener.document.$env{"form.form"}.$sec_element.options[2] = new Option(sectionsArray[0],sectionsArray[0],false,false);
+ } else {
+ for (var i=0; i