--- loncom/interface/lonpickcourse.pm 2006/05/30 20:12:15 1.48 +++ loncom/interface/lonpickcourse.pm 2006/07/11 02:28:22 1.52 @@ -1,7 +1,7 @@ # The LearningOnline Network # Pick a course # -# $Id: lonpickcourse.pm,v 1.48 2006/05/30 20:12:15 raeburn Exp $ +# $Id: lonpickcourse.pm,v 1.52 2006/07/11 02:28:22 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -53,7 +53,7 @@ sub handler { 'cdomelement','cnameelement','roleelement', 'pickedcourse','instcodefilter', 'ownerfilter','coursefilter','multiple', - 'type']); + 'type','ownerdomfilter']); # domain filter and selection my $domainfilter=$env{'form.domainfilter'}; $domainfilter=~s/\W//g; @@ -70,8 +70,13 @@ sub handler { my $listinstcode=&HTML::Entities::encode($instcodefilter,'<>&"'); # course owner filter my $ownerfilter=$env{'form.ownerfilter'}; - unless ($ownerfilter) { $ownerfilter=''; } + $ownerfilter=~s/\W//g; my $listowner=&HTML::Entities::encode($ownerfilter,'<>&"'); +# course ownerdomain filter + my $ownerdomfilter=$env{'form.ownerdomfilter'}; + $ownerdomfilter=~s/\W//g; + my $ownerdomselectform= + &Apache::loncommon::select_dom_form($ownerdomfilter,'ownerdomfilter',1); # course ID filter for DCs only my ($courseidtag,$coursefilter); if ($env{'user.adv'} && $domainfilter && exists($env{'user.role.dc./'. @@ -100,28 +105,125 @@ sub handler { ['-1','86400','604800','2592000','7776000', '15552000','31104000'])); # if called from loncreateuser, report sections, then close - my (%loaditem,$seclist,$groupslist); + my (%loaditem,$seclist,$groupslist,$roleslist,$rolesnameslist, + $accesslist,$accessnameslist); + my $sec_element = 'currsec'; + my $grplist_element = 'groups'; 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 = &Apache::loncommon::get_sections($cdom,$cnum); - my @sections = (sort {$a <=> $b} keys(%sections_count)); - $seclist = join('","',@sections); - $num_sections = scalar(@sections); - my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); - $groupslist = join(',',sort(keys(%curr_groups))); + 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'}; } - my $jscript; my $type = $env{'form.type'}; if (!defined($env{'form.type'})) { $type = 'Course'; } - my $typeselectform = ''; @@ -171,10 +278,9 @@ sub handler { } my $instcodeform; if ($type eq 'Course') { - $instcodeform = $lt{'cin'}.':
'; } - my %elements = ( Course => { name => 'coursepick', @@ -251,35 +357,37 @@ function gochoose(cname,cdom,cdesc,multi function setSections() { var numSections = $num_sections var sectionsArray = new Array("$seclist") - opener.document.$env{"form.form"}.currsec.length = 0 + opener.document.$env{"form.form"}.$sec_element.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) + 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"}.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); + 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 $submitopener @@ -300,6 +408,8 @@ $instcodeform $lt{'cow'}:
+$lt{'cod'}: $ownerdomselectform +
$courseidtag $lt{'cde'}: @@ -313,13 +423,17 @@ ENDSCRIPT $r->rflush(); unless ($descriptfilter) { $descriptfilter='.'; } unless ($instcodefilter) { $instcodefilter='.'; } - unless ($ownerfilter) { $ownerfilter='.'; } - unless ($coursefilter) { $coursefilter='.'; } - unless ($type) { $type = '.'; } + my $combownerfilter; + if (($ownerfilter ne '') || ($ownerdomfilter ne '')) { + $combownerfilter = $ownerfilter.':'.$ownerdomfilter; + } + if ($combownerfilter eq '') { $combownerfilter='.'; } + if ($coursefilter eq '') { $coursefilter='.'; } + if ($type eq '') { $type = '.'; } my $timefilter=($sincefilter==-1?1:time-$sincefilter); - my %courses= - &Apache::lonnet::courseiddump - ($domainfilter,$descriptfilter,$timefilter,$instcodefilter,$ownerfilter,$coursefilter,undef,undef,$type); + my %courses = &Apache::lonnet::courseiddump($domainfilter,$descriptfilter, + $timefilter,$instcodefilter,$combownerfilter, + $coursefilter,undef,undef,$type); $r->print('
'); my %by_descrip; my $numcourses = keys(%courses); @@ -392,7 +506,53 @@ sub course_chooser { "'".$cnum."','".$cdom."','".$cleandesc."')".'" />'."\n"; } return $output; -} +} + +sub build_selection_lists { + my ($cdom,$cnum,$type,$needroles,$needaccess,$caller) = @_; + my ($sections,$groups,$allroles,$roleshash,$accesshash) = + &Apache::loncommon::get_secgrprole_info($cdom,$cnum,$needroles,$type); + if ($caller eq 'portform') { + if (@{$sections} == 0) { + @{$sections} = ('none'); + } else { + unshift(@{$sections},('all','none')); + } + if (@{$groups} == 0) { + @{$groups} = ('none'); + } else { + unshift(@{$groups},('all','none')); + } + + } + my $num_sections = scalar(@{$sections}); + my $seclist = join('","',@{$sections}); + my $num_groups = scalar(@{$groups}); + my $groupslist = join('","',@{$groups}); + my ($roleslist,$num_roles,$rolesnameslist,$num_access,$accesslist, + $accessnameslist); + if ($needroles) { + $num_roles = @{$allroles}; + $roleslist = join('","',@{$allroles}); + my @allrolesnames; + foreach my $role (@{$allroles}) { + push(@allrolesnames,$$roleshash{$role}); + } + $rolesnameslist = join('","',@allrolesnames); + } + if ($needaccess) { + $num_access = keys(%{$accesshash}); + my (@allaccess,@allaccessnames); + foreach my $key (sort(keys(%{$accesshash}))) { + push(@allaccess,$key); + push(@allaccessnames,$$accesshash{$key}); + } + $accesslist = join('","',@allaccess); + $accessnameslist = join('","',@allaccessnames); + } + return ($seclist,$num_sections,$groupslist,$num_groups,$roleslist, + $num_roles,$rolesnameslist,$accesslist,$num_access,$accessnameslist); +} 1; __END__