--- loncom/interface/loncreatecourse.pm 2003/12/05 15:57:37 1.40 +++ loncom/interface/loncreatecourse.pm 2004/01/19 23:05:52 1.45.2.1 @@ -1,7 +1,7 @@ # The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.40 2003/12/05 15:57:37 raeburn Exp $ +# $Id: loncreatecourse.pm,v 1.45.2.1 2004/01/19 23:05:52 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -48,6 +48,9 @@ use Apache::loncommon; use Apache::lonratedt; use Apache::londocs; use Apache::lonlocal; +use Apache::londropadd; +use lib '/home/httpd/lib/perl'; +use localenroll; # ================================================ Get course directory listing @@ -243,10 +246,12 @@ sub print_course_creation_page { &Apache::loncommon::selectcourse_link ('ccrs','clonecourse','clonedomain'); my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript(); - my $date_table = &date_setting_table(); + my $starttime = time; + my $endtime = time+(6*30*24*60*60); # 6 months from now, approx + my $date_table = &Apache::londropadd::date_setting_table($starttime,$endtime,'createcourse'); my ($krbdef,$krbdefdom) = &Apache::loncommon::get_kerberos_defaults($defdom); - my $javascript_validations=&javascript_validations($krbdefdom); + my $javascript_validations=&Apache::londropadd::javascript_validations('createcourse',$krbdefdom); my %param = ( formname => 'document.ccrs', kerb_def_dom => $krbdefdom, kerb_def_auth => $krbdef @@ -274,6 +279,7 @@ function openbrowser(formname,elementnam editbrowser = open(url,title,options,'1'); editbrowser.focus(); } +$javascript_validations </script> $coursebrowserjs <head> @@ -378,10 +384,10 @@ on information available for this specif </p> <p> <b>Automated adds</b> -<input type="radio" name="autoadds" value="1" checked="true" />Yes <input type="radio" name="autoadds" value="0" />No +<input type="radio" name="autoadds" value="1" />Yes <input type="radio" name="autoadds" value="0" checked="true" />No </p><p> <b>Automated drops</b> -<input type="radio" name="autodrops" value="1" checked="true" />Yes <input type="radio" name="autodrops" value="0" />No +<input type="radio" name="autodrops" value="1" />Yes <input type="radio" name="autodrops" value="0" checked="true" />No </p><p> <b>Duration of automated classlist updates</b> $date_table @@ -398,12 +404,12 @@ $locform <b>Notification of enrollment changes</b><br /> Notification to course coordinator via LON-CAPA message when enrollment changes occur during the automated update?<br/> <input type="radio" name="notify" value="1" />Yes <input type="radio" name="notify" -value="0" />No +value="0" checked="true" />No </p><p> <b>Include retrieval of student photographs?</b> <input type="radio" name="showphotos" value="1" />Yes <input type="radio" name="showphotos" value="0" checked="true" />No </p><p> <input type="hidden" name="phase" value="two" /> -<input type="submit" value="Open Course"> +<input type="button" onClick="verify_message(this.form)" value="Open Course"> </p> </form> </body> @@ -411,68 +417,6 @@ value="0" />No ENDDOCUMENT } -sub javascript_validations { - my ($krbdefdom)=@_; - my %param = ( formname => 'ccrs', - kerb_def_dom => $krbdefdom ); - my $authheader = &Apache::loncommon::authform_header(%param); - my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); - return (<<ENDPICK); -function verify_message (vf,foundpwd) { - var foundatype=0; - var message=''; - // alert('current.radiovalue = '+current.radiovalue); - if (current.radiovalue == null || current.radiovalue == 'nochange') { - // They did not check any of the login radiobuttons. - alert('You must choose an authentication type'); - return; - } - foundatype=1; - if (current.argfield == null || current.argfield == '') { - var alertmsg = ''; - switch (current.value) { - case 'krb': - alertmsg = 'You need to specify the Kerberos domain'; - break; - case 'loc': - case 'fsys': - alertmsg = 'You need to specify the initial password'; - break; - case 'fsys': - alertmsg = ''; - break; - default: - alertmsg = ''; - } - if (alertmsg != '') { - alert(alertmsg); - return; - } - } - vf.submit(); -} -$authheader -ENDPICK -} - -sub date_setting_table { - my $starttime = time; - my $endtime = time+(6*30*24*60*60); # 6 months from now, approx - my $startform = &Apache::lonhtmlcommon::date_setter('ccrs','startdate',$starttime); - my $endform = &Apache::lonhtmlcommon::date_setter('ccrs','enddate',$endtime); - my $perpetual = '<nobr><input type="checkbox" name="no_end_date"/> no ending date</nobr>'; - my $result = ''; - $result .= "<table>\n"; - $result .= '<tr><td align="right">Starting Date</td>'. - '<td>'.$startform.'</td>'. - '<td></td>'."</tr>\n"; - $result .= '<tr><td align="right">Ending Date</td>'. - '<td>'.$endform.'</td>'. - '<td>'.$perpetual.'</td>'."</tr>\n"; - $result .= "</table>\n"; - return $result; -} - # ====================================================== Phase two: make course sub create_course { @@ -556,6 +500,7 @@ ENDENHEAD # # Set environment (will override cloned, if existing) # + my @affiliates = (); # Used to accumulate sections and crosslistings if ($ENV{'form.crsid'}) { $cenv{'courseid'}=$ENV{'form.crsid'}; } @@ -564,9 +509,33 @@ ENDENHEAD } if ($ENV{'form.crssections'}) { $cenv{'internal.sectionnums'}=$ENV{'form.crssections'}; + my @sections = (); + if ($cenv{'internal.sectionnums'} =~ m/,/) { + @sections = split/,/,$cenv{'internal.sectionnums'}; + } else { + $sections[0] = $cenv{'internal.sectionnums'}; + } + if (@sections > 0) { + foreach (@sections) { + my ($sec,$gp) = split/:/,$_; + push @affiliates,$ENV{'form.crscode'}.$sec; + } + } } if ($ENV{'form.crsxlist'}) { - $cenv{'internal.crosslistings'}=$ENV{'form.crsxlist'}; + $cenv{'internal.crosslistings'}=$ENV{'form.crsxlist'}; + my @xlists = (); + if ($cenv{'internal.crosslistings'} =~ m/,/) { + @xlists = split/,/,$cenv{'internal.crosslistings'}; + } else { + $xlists[0] = $cenv{'internal.crosslistings'}; + } + if (@xlists > 0) { + foreach (@xlists) { + my ($xl,$gp) = split/:/,$_; + push @affiliates,$xl; + } + } } if ($ENV{'form.autoadds'}) { $cenv{'internal.autoadds'}=$ENV{'form.autoadds'}; @@ -581,6 +550,25 @@ ENDENHEAD } if ($ccuname) { $cenv{'internal.courseowner'} = $ccuname; + } else { + $cenv{'internal.courseowner'} = $ENV{'user.name'}; + } + if (@affiliates > 0) { + my @badclasses = (); + foreach my $class (@affiliates) { + my $addcheck = &localenroll::new_course($class,$cenv{'internal.courseowner'}); + unless ($addcheck eq 'ok') { + push @badclasses, $class; + } + } + if (@badclasses > 0) { + $r->print('<font color="red">'. + "The courses listed below were included as sections or crosslistings affiliated with your new LON-CAPA course. If automated course roster updates are enabled for this class, these particular sections/crosslistings will not contribute towards enrollment, because the user identified as the course owner for this LON-CAPA course ($cenv{'internal.courseowner'}) - does not have rights to access enrollment in these classes (as determined by your instititution's policies on access to official classlists).<br/><ul>\n"); + foreach (@badclasses) { + $r->print("<li>$_</li>\n"); + } + $r->print ("</ul><br/><br/></font>\n"); + } } my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate'); my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate'); @@ -697,6 +685,8 @@ ENDENHEAD $r->print( '<p><a href="/adm/managekeys?cid='.$crsudom.'_'.$crsunum.'">Manage Access Keys</a></p>'); } + # Flush the course logs so reverse user roles immediately updated + &Apache::lonnet::flushcourselogs(); $r->print('<p>Roles will be active at next login.</p></body></html>'); }