--- loncom/interface/loncoursequeueadmin.pm 2014/03/03 17:11:41 1.44 +++ loncom/interface/loncoursequeueadmin.pm 2015/03/26 14:16:11 1.50 @@ -1,7 +1,7 @@ # The LearningOnline Network # Utilities to administer domain course requests and course self-enroll requests # -# $Id: loncoursequeueadmin.pm,v 1.44 2014/03/03 17:11:41 raeburn Exp $ +# $Id: loncoursequeueadmin.pm,v 1.50 2015/03/26 14:16:11 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -90,6 +90,7 @@ use Apache::loncommon; use Apache::lonmsg; use Apache::lonlocal; use Apache::lonuserutils; +use LONCAPA::batchcreatecourse; use LONCAPA qw(:DEFAULT :match); sub send_selfserve_notification { @@ -885,7 +886,7 @@ sub update_request_queue { $middlename = $curr{$uname}{'middlename'}; $lastname = $curr{$uname}{'lastname'}; $generation = $curr{$uname}{'generation'}; - $inststatus = $curr{$uname}{'usertype'}; + $inststatus = $curr{$uname}{'inststatus'}; my ($key,$caller)=split(/&/,$curr{$uname}{'tmpinfo'}); if ($caller eq 'createaccount') { @@ -967,6 +968,9 @@ sub update_request_queue { } } } + if ($history{'details'}{'clonecrs'}) { + $customitems{'_LC_clonefrom'} = $history{'details'}{'clonedom'}.'_'.$history{'details'}{'clonecrs'}; + } my ($result,$postprocess) = &course_creation($cdom,$cnum,$context,$history{'details'},\$logmsg, \$newusermsg,\$addresult,\$enrollcount, \$response,\$keysmsg,\%domdefs,$longroles,\$code,\%customitems); @@ -1310,7 +1314,7 @@ sub update_request_queue { my $syllabuslink = &Apache::loncommon::syllabuswrapper($showcourse,$cnum,$cdom); if ($codes{$cnum}) { - $syllabuslink .= &mt('Unique code: [_1]',$codes{$cnum}); + $syllabuslink .= ' '.&mt('Unique code: [_1]',$codes{$cnum}); } $output .= '
  • '.$syllabuslink.'
  • '; } @@ -1604,7 +1608,9 @@ sub course_creation { my ($result,$ownername,$ownerdom); my $crstype = $details->{'crstype'}; my $coursedesc = $details->{'cdescr'}; - my %domconfig = &Apache::lonnet::get_dom('configuration',['requestauthor'],$dom); + my $accessstart = $details->{'accessstart'}; + my $accessend = $details->{'accessend'}; + my %domconfig = &Apache::lonnet::get_dom('configuration',['requestcourses'],$dom); if (ref($domconfig{'requestcourses'}) eq 'HASH') { if (ref($domconfig{'requestcourses'}{'uniquecode'}) eq 'HASH') { if ($domconfig{'requestcourses'}{'uniquecode'}{$crstype}) { @@ -1638,7 +1644,8 @@ sub course_creation { $code = $$coderef; } $postprocess = &Apache::lonnet::auto_crsreq_update($dom,$cnum,$crstype,$result,$ownername, - $ownerdom,$fullname,$coursedesc,$code,$customhash); + $ownerdom,$fullname,$coursedesc,$code, + $accessstart,$accessend,$customhash); } else { $result = 'error: '.$cid; } @@ -2022,6 +2029,9 @@ sub process_official_reqs { } } } + if ($history{'details'}{'clonecrs'}) { + $customitems{'_LC_clonefrom'} = $history{'details'}{'clonedom'}.'_'.$history{'details'}{'clonecrs'}; + } my ($result,$postprocess) = &course_creation($dom,$cnum,'domain',$history{'details'},\$logmsg,\$newusermsg,\$addresult, \$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,\$code,\%customitems); @@ -2058,6 +2068,11 @@ sub process_official_reqs { } } } + if (ref($postprocess->{'createdactions'}) eq 'HASH') { + if (ref($postprocess->{'createdactions'}{'environment'}) eq 'HASH') { + &postprocess_crsenv($dom,$cnum,$postprocess->{'createdactions'}{'environment'}); + } + } } &send_selfserve_notification($owner,$approvedmsg, $cid,$cdescr,$now, @@ -2129,6 +2144,68 @@ sub process_official_reqs { return $output; } +sub postprocess_crsenv { + my ($dom,$cnum,$postprocessenv) = @_; + if (ref($postprocessenv) eq 'HASH') { + my $cid = $dom.'_'.$cnum; + my %settablecrsenv = ( + 'internal.selfenroll_types' => 1, + 'internal.selfenroll_registered' => 1, + 'internal.selfenroll_section' => 1, + 'internal.selfenroll_start_access' => 1, + 'internal.selfenroll_end_access' => 1, + 'internal.selfenroll_limit' => 1, + 'internal.selfenroll_cap' => 1, + 'internal.selfenroll_approval' => 1, + 'internal.selfenroll_notifylist' => 1, + ); + my %needcrsidput = ( + 'internal.selfenroll_types' => 1, + 'internal.selfenroll_start_date' => 1, + 'internal. selfenroll_end_date' => 1, + ); + my (@needupdate,%newcrsenv); + foreach my $key (keys(%{$postprocessenv})) { + if ($settablecrsenv{$key}) { + $newcrsenv{$key} = $postprocessenv->{$key}; + if ($needcrsidput{$key}) { + push(@needupdate,$key); + } + } + if (keys(%newcrsenv)) { + my $putresult = &Apache::lonnet::put('environment',\%newcrsenv,$dom,$cnum); + if ($putresult eq 'ok') { + if (@needupdate) { + my %crsinfo = + &Apache::lonnet::courseiddump($dom,'.',1,'.','.',$cnum,undef,undef,'.'); + if (ref($crsinfo{$cid}) eq 'HASH') { + foreach my $key (@needupdate) { + $crsinfo{$cid}{$key} = $newcrsenv{$key}; + } + my $chome = &Apache::lonnet::homeserver($cnum,$dom); + &Apache::lonnet::courseidput($dom,\%crsinfo,$chome,'notime'); + } + } + } + } + } + } + return; +} + + +sub requestcourses_validation_types { + my @items = ('url','fields','button','markup'); + my %names = &Apache::lonlocal::texthash ( + url => 'Web address of validation server/script', + fields => 'Form fields to send to validator', + button => 'Text for validation button', + markup => 'Validation description (HTML)', + ); + my @fields = ('owner','course','coursetype','description'); + return (\@items,\%names,\@fields); +} + sub is_active_author { if ($env{'user.role.au./'.$env{'user.domain'}.'/'} =~ /^(\d*)\.(\d*)$/) { if ((!$1 || $1 < time) &&