--- loncom/interface/loncreatecourse.pm 2005/02/17 08:29:42 1.76 +++ loncom/interface/loncreatecourse.pm 2005/11/15 20:17:00 1.84 @@ -1,7 +1,7 @@ # The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.76 2005/02/17 08:29:42 albertel Exp $ +# $Id: loncreatecourse.pm,v 1.84 2005/11/15 20:17:00 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -86,11 +86,10 @@ sub readfile { # ============================================================ Write a userfile sub writefile { - (my $courseid, my $which,$ENV{'form.output'})=@_; + (my $courseid, my $which,$env{'form.output'})=@_; my %crsdata=&Apache::lonnet::coursedescription($courseid); return &Apache::lonnet::finishuserfileupload( $crsdata{'num'},$crsdata{'domain'}, - $crsdata{'home'}, 'output',$which); } @@ -215,11 +214,17 @@ sub copyuserfiles { sub copydbfiles { my ($origcrsid,$newcrsid)=@_; + + my ($origcrs_discussion) = ($origcrsid=~m|^/(.*)|); + $origcrs_discussion=~s|/|_|g; foreach (&crsdirlist($origcrsid)) { if ($_=~/\.db$/) { unless - ($_=~/^(nohist\_|discussiontimes|classlist|versionupdate|resourcedata)/) { + ($_=~/^(nohist\_|discussiontimes|classlist|versionupdate|resourcedata|\Q$origcrs_discussion\E|slots|slot_reservations|(grading|review)queue|CODEs)/) { ©db($origcrsid,$newcrsid,$_); + my $histfile=$_; + $histfile=~s/\.db$/\.hist/; + ©file($origcrsid,$newcrsid,$histfile); } } } @@ -238,7 +243,7 @@ sub copycoursefiles { sub print_course_creation_page { my $r=shift; - my $defdom=$ENV{'request.role.domain'}; + my $defdom=$env{'request.role.domain'}; my %host_servers = &Apache::loncommon::get_library_servers($defdom); my $course_home = '<select name="course_home" size="1">'."\n"; foreach my $server (sort(keys(%host_servers))) { @@ -253,10 +258,10 @@ sub print_course_creation_page { my $bodytag=&Apache::loncommon::bodytag('Create a New Course'); my $helplink=&Apache::loncommon::help_open_topic('Create_Course',&mt('Help on Creating Courses')); my $cloneform=&Apache::loncommon::select_dom_form - ($ENV{'request.role.domain'},'clonedomain'). + ($env{'request.role.domain'},'clonedomain'). &Apache::loncommon::selectcourse_link ('ccrs','clonecourse','clonedomain'); - my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript($ENV{'request.role.domain'}); + my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'}); my $starttime = time; my $endtime = time+(6*30*24*60*60); # 6 months from now, approx my $enroll_table = &Apache::londropadd::date_setting_table($starttime,$endtime,'create_enrolldates'); @@ -327,6 +332,7 @@ sub print_course_creation_page { 'pcda' => "Please choose the default authentication method to be used by new users added to this LON-CAPA domain by the automated enrollment process", 'nech' => "Notification of enrollment changes", 'nccl' => "Notification to course coordinator via LON-CAPA message when enrollment changes occur during the automated update?", + 'ndcl' => "Notification to domain coordinator via LON-CAPA message when enrollment changes occur during the automated update?", 'irsp' => "Include retrieval of student photographs?", 'rshm' => 'Resource Space Home', 'opco' => "Open Course" @@ -524,10 +530,18 @@ $locform <b>$lt{'nech'}</b><br /> $lt{'nccl'}<br/> <label> - <input type="radio" name="notify" value="1" />$lt{'yes'} + <input type="radio" name="notify_owner" value="1" />$lt{'yes'} </label> <label> - <input type="radio" name="notify" value="0" checked="true" />$lt{'no'} + <input type="radio" name="notify_owner" value="0" checked="true" />$lt{'no'} +</label> +<br /> +$lt{'ndcl'}<br/> +<label> + <input type="radio" name="notify_dc" value="1" />$lt{'yes'} +</label> +<label> + <input type="radio" name="notify_dc" value="0" checked="true" />$lt{'no'} </label> </p><p> <b>$lt{'irsp'}</b> @@ -548,11 +562,6 @@ $lt{'nccl'}<br/> <label> <b>$lt{'dmn'}:</b> $domform </label> -</p><p> -<label> - <b>$lt{'ierc'}:</b> - <input type="checkbox" name="expireown" checked /> -</label> </p> <p> <input type="hidden" name="phase" value="two" /> @@ -568,8 +577,8 @@ ENDDOCUMENT sub create_course { my $r=shift; - my $ccuname=$ENV{'form.ccuname'}; - my $ccdomain=$ENV{'form.ccdomain'}; + my $ccuname=$env{'form.ccuname'}; + my $ccdomain=$env{'form.ccdomain'}; $ccuname=~s/\W//g; $ccdomain=~s/\W//g; @@ -581,19 +590,19 @@ sub create_course { my $autharg; my $authtype; - if ($ENV{'form.login'} eq 'krb') { + if ($env{'form.login'} eq 'krb') { $authtype = 'krb'; - $authtype .=$ENV{'form.krbver'}; - $autharg = $ENV{'form.krbarg'}; - } elsif ($ENV{'form.login'} eq 'int') { + $authtype .=$env{'form.krbver'}; + $autharg = $env{'form.krbarg'}; + } elsif ($env{'form.login'} eq 'int') { $authtype ='internal'; - if ((defined($ENV{'form.intarg'})) && ($ENV{'form.intarg'})) { - $autharg = $ENV{'form.intarg'}; + if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) { + $autharg = $env{'form.intarg'}; } - } elsif ($ENV{'form.login'} eq 'loc') { + } elsif ($env{'form.login'} eq 'loc') { $authtype = 'localauth'; - if ((defined($ENV{'form.locarg'})) && ($ENV{'form.locarg'})) { - $autharg = $ENV{'form.locarg'}; + if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) { + $autharg = $env{'form.locarg'}; } } @@ -611,38 +620,39 @@ ENDENHEAD my $args = { ccuname => $ccuname, ccdomain => $ccdomain, - cdescr => $ENV{'form.title'}, - curl => $ENV{'form.topmap'}, - course_domain => $ENV{'request.role.domain'}, - course_home => $ENV{'form.course_home'}, - nonstandard => $ENV{'form.nonstandard'}, - crscode => $ENV{'form.crscode'}, - clonecourse => $ENV{'form.clonecourse'}, - clonedomain => $ENV{'form.clonedomain'}, - crsid => $ENV{'form.crsid'}, - curruser => $ENV{'user.name'}, - crssections => $ENV{'form.crssections'}, - crsxlist => $ENV{'form.crsxlist'}, - autoadds => $ENV{'form.autoadds'}, - autodrops => $ENV{'form.autodrops'}, - notify => $ENV{'form.notify'}, - no_end_date => $ENV{'form.no_end_date'}, - showphotos => $ENV{'form.showphotos'}, + cdescr => $env{'form.title'}, + curl => $env{'form.topmap'}, + course_domain => $env{'request.role.domain'}, + course_home => $env{'form.course_home'}, + nonstandard => $env{'form.nonstandard'}, + crscode => $env{'form.crscode'}, + clonecourse => $env{'form.clonecourse'}, + clonedomain => $env{'form.clonedomain'}, + crsid => $env{'form.crsid'}, + curruser => $env{'user.name'}, + crssections => $env{'form.crssections'}, + crsxlist => $env{'form.crsxlist'}, + autoadds => $env{'form.autoadds'}, + autodrops => $env{'form.autodrops'}, + notify_owner => $env{'form.notify_owner'}, + notify_dc => $env{'form.notify_dc'}, + no_end_date => $env{'form.no_end_date'}, + showphotos => $env{'form.showphotos'}, authtype => $authtype, autharg => $autharg, enrollstart => $enrollstart, enrollend => $enrollend, startaccess => $startaccess, endaccess => $endaccess, - setpolicy => $ENV{'form.setpolicy'}, - setcontent => $ENV{'form.setcontent'}, - reshome => $ENV{'form.reshome'}, - setkeys => $ENV{'form.setkeys'}, - keyauth => $ENV{'form.keyauth'}, - disresdis => $ENV{'form.disresdis'}, - disablechat => $ENV{'form.disablechat'}, - openall => $ENV{'form.openall'}, - firstres => $ENV{'form.firstres'} + setpolicy => $env{'form.setpolicy'}, + setcontent => $env{'form.setcontent'}, + reshome => $env{'form.reshome'}, + setkeys => $env{'form.setkeys'}, + keyauth => $env{'form.keyauth'}, + disresdis => $env{'form.disresdis'}, + disablechat => $env{'form.disablechat'}, + openall => $env{'form.openall'}, + firstres => $env{'form.firstres'} }; # @@ -664,33 +674,24 @@ ENDENHEAD } # Check the proposed home server for the course my %host_servers = &Apache::loncommon::get_library_servers - ($ENV{'request.role.domain'}); - if (! exists($host_servers{$ENV{'form.course_home'}})) { + ($env{'request.role.domain'}); + if (! exists($host_servers{$env{'form.course_home'}})) { $r->print(&mt('Invalid home server for course').': '. - $ENV{'form.course_home'}.'</body></html>'); + $env{'form.course_home'}.'</body></html>'); return; } my ($courseid,$crsudom,$crsunum); - $r->print(&construct_course($args,\$logmsg,\$courseid,\$crsudom,\$crsunum)); + $r->print(&construct_course($args,\$logmsg,\$courseid,\$crsudom,\$crsunum,$env{'user.domain'},$env{'user.name'})); # -# Make current user course adminstrator -# - my $end=undef; - my $addition=''; - if ($ENV{'form.expireown'}) { $end=time+5; $addition='expired'; } - $r->print(&mt('Assigning').' '.$addition.' '.&mt('role of course coordinator to self').': '. - &Apache::lonnet::assignrole( - $ENV{'user.domain'},$ENV{'user.name'},$courseid,'cc',$end).'<br>'); -# -# Make additional user course administrator +# Make the requested user a course coordinator # if (($ccdomain) && ($ccuname)) { $r->print(&mt('Assigning role of course coordinator to').' '. $ccuname.' at '.$ccdomain.': '. &Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid,'cc').'<p>'); } - if ($ENV{'form.setkeys'}) { + if ($env{'form.setkeys'}) { $r->print( '<p><a href="/adm/managekeys?cid='.$crsudom.'_'.$crsunum.'">'.&mt('Manage Access Keys').'</a></p>'); } @@ -700,7 +701,7 @@ ENDENHEAD } sub construct_course { - my ($args,$logmsg,$courseid,$crsudom,$crsunum) = @_; + my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname) = @_; my $outcome; # @@ -786,7 +787,7 @@ sub construct_course { foreach my $item (@sections) { my ($sec,$gp) = split/:/,$item; my $class = $args->{'crscode'}.$sec; - my $addcheck = &Apache::lonnet::auto_new_course($crsunum,$crsudom,$class,$cenv{'internal.courseowner'}); + my $addcheck = &Apache::lonnet::auto_new_course($$crsunum,$$crsudom,$class,$cenv{'internal.courseowner'}); $cenv{'internal.sectionnums'} .= $item.','; unless ($addcheck eq 'ok') { push @badclasses, $class; @@ -824,10 +825,26 @@ sub construct_course { if ($args->{'autodrops'}) { $cenv{'internal.autodrops'}=$args->{'autodrops'}; } - if ($args->{'notify'}) { - if ($args->{'ccuname'}) { - $cenv{'internal.notifylist'} = $args->{'ccuname'}.'@'.$args->{'ccdomain'}; - } +# check for notification of enrollment changes + my @notified = (); + if ($args->{'notify_owner'}) { + if ($args->{'ccuname'} ne '') { + push(@notified,$args->{'ccuname'}.'@'.$args->{'ccdomain'}); + } + } + if ($args->{'notify_dc'}) { + if ($uname ne '') { + push(@notified,$uname.'@'.$udom); + } + } + if (@notified > 0) { + my $notifylist; + if (@notified > 1) { + $notifylist = join(',',@notified); + } else { + $notifylist = $notified[0]; + } + $cenv{'internal.notifylist'} = $notifylist; } if (@badclasses > 0) { my %lt=&Apache::lonlocal::texthash( @@ -958,17 +975,17 @@ sub handler { return OK; } - if (&Apache::lonnet::allowed('ccc',$ENV{'request.role.domain'})) { + if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; - if ($ENV{'form.phase'} eq 'two') { + if ($env{'form.phase'} eq 'two') { &create_course($r); } else { &print_course_creation_page($r); } } else { - $ENV{'user.error.msg'}= + $env{'user.error.msg'}= "/adm/createcourse:ccc:0:0:Cannot create courses"; return HTTP_NOT_ACCEPTABLE; }