version 1.46, 2003/12/11 17:31:23
|
version 1.61, 2004/06/29 14:56:32
|
Line 1
|
Line 1
|
# The LearningOnline Network |
#meserver The LearningOnline Network |
# Create a course |
# Create a course |
# |
# |
# $Id$ |
# $Id$ |
Line 25
|
Line 25
|
# |
# |
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
# |
# (My Desk |
### |
# |
|
# (Internal Server Error Handler |
|
# |
|
# (Login Screen |
|
# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14, |
|
# 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer) |
|
# |
|
# 3/1/1 Gerd Kortemeyer) |
|
# |
|
# 3/1 Gerd Kortemeyer) |
|
# |
|
# 2/14,2/16,2/17,7/6 Gerd Kortemeyer |
|
# |
|
package Apache::loncreatecourse; |
package Apache::loncreatecourse; |
|
|
use strict; |
use strict; |
Line 54 use localenroll;
|
Line 42 use localenroll;
|
|
|
# ================================================ Get course directory listing |
# ================================================ Get course directory listing |
|
|
|
#FIXME - doesn't support directories under /userfiles/ BUG#2999 |
sub crsdirlist { |
sub crsdirlist { |
my ($courseid,$which)=@_; |
my ($courseid,$which)=@_; |
unless ($which) { $which=''; } |
unless ($which) { $which=''; } |
Line 63 sub crsdirlist {
|
Line 52 sub crsdirlist {
|
&Apache::loncommon::propath($crsdata{'domain'},$crsdata{'num'})); |
&Apache::loncommon::propath($crsdata{'domain'},$crsdata{'num'})); |
my @output=(); |
my @output=(); |
foreach (@listing) { |
foreach (@listing) { |
|
#FIXME if list is a DIR need to recurse |
unless ($_=~/^\./) { |
unless ($_=~/^\./) { |
push (@output,(split(/\&/,$_))[0]); |
push (@output,(split(/\&/,$_))[0]); |
} |
} |
Line 248 sub print_course_creation_page {
|
Line 238 sub print_course_creation_page {
|
my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript(); |
my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript(); |
my $starttime = time; |
my $starttime = time; |
my $endtime = time+(6*30*24*60*60); # 6 months from now, approx |
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 $enroll_table = &Apache::londropadd::date_setting_table($starttime,$endtime,'create_enrolldates'); |
|
my $access_table = &Apache::londropadd::date_setting_table($starttime,$endtime,'create_defaultdates'); |
my ($krbdef,$krbdefdom) = |
my ($krbdef,$krbdefdom) = |
&Apache::loncommon::get_kerberos_defaults($defdom); |
&Apache::loncommon::get_kerberos_defaults($defdom); |
my $javascript_validations=&Apache::londropadd::javascript_validations('createcourse',$krbdefdom); |
my $javascript_validations=&Apache::londropadd::javascript_validations('createcourse',$krbdefdom); |
Line 298 sub print_course_creation_page {
|
Line 289 sub print_course_creation_page {
|
'dsuc' => "Disable student use of chatrooms", |
'dsuc' => "Disable student use of chatrooms", |
'acco' => "Access Control", |
'acco' => "Access Control", |
'snak' => "Students need access key to enter course", |
'snak' => "Students need access key to enter course", |
|
'kaut' => |
|
'Key authority (<tt>id@domain</tt>) if other than course', |
'cc' => "Course Coordinator", |
'cc' => "Course Coordinator", |
'user' => "Username", |
'user' => "Username", |
'ierc' => "Immediately expire own role as Course Coordinator", |
'ierc' => "Immediately expire own role as Course Coordinator", |
Line 308 sub print_course_creation_page {
|
Line 301 sub print_course_creation_page {
|
'no' => "No", |
'no' => "No", |
'audr' => "Automated drops", |
'audr' => "Automated drops", |
'dacu' => "Duration of automated classlist updates", |
'dacu' => "Duration of automated classlist updates", |
|
'dacc' => "Default start and end dates for student access", |
'psam' => "Please select the authentication mechanism", |
'psam' => "Please select the authentication mechanism", |
'pcda' => "Please choose the default authentication method to be used by new users added to this LON-CAPA domain by the automated enrollment process", |
'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", |
'nech' => "Notification of enrollment changes", |
'nccl' => "Notification to course coordinator via LON-CAPA message when enrollment changes occur during the automated update?", |
'nccl' => "Notification to course coordinator via LON-CAPA message when enrollment changes occur during the automated update?", |
'irsp' => "Include retrieval of student photographs?", |
'irsp' => "Include retrieval of student photographs?", |
|
'rshm' => 'Resource Space Home', |
'opco' => "Open Course" |
'opco' => "Open Course" |
); |
); |
$r->print(<<ENDDOCUMENT); |
$r->print(<<ENDDOCUMENT); |
Line 402 $lt{'asov'}.
|
Line 397 $lt{'asov'}.
|
<h2>$lt{'assp'}</h2> |
<h2>$lt{'assp'}</h2> |
<p> |
<p> |
<b>$lt{'oaas'}: </b> |
<b>$lt{'oaas'}: </b> |
<input type="checkbox" name="openall" checked> |
<input type="checkbox" name="openall" /> |
</p> |
</p> |
<h2>$lt{'mssg'}</h2> |
<h2>$lt{'mssg'}</h2> |
<p> |
<p> |
<b>$lt{'scpf'}: </b> |
<b>$lt{'scpf'}: </b> |
<input type="checkbox" name="setpolicy" checked> |
<input type="checkbox" name="setpolicy" checked> |
</p><p> |
<br /> |
<b>$lt{'scfc'}: </b> |
<b>$lt{'scfc'}: </b> |
<input type="checkbox" name="setcontent" checked> |
<input type="checkbox" name="setcontent" checked> |
</p> |
</p> |
Line 422 $lt{'asov'}.
|
Line 417 $lt{'asov'}.
|
<h2>$lt{'acco'}</h2> |
<h2>$lt{'acco'}</h2> |
<p> |
<p> |
<b>$lt{'snak'}: </b> |
<b>$lt{'snak'}: </b> |
<input type="checkbox" name="setkeys" /> |
<input type="checkbox" name="setkeys" /><br /> |
|
<b>$lt{'kaut'}: </b> |
|
<input type="text" size="30" name="keyauth" /> |
|
</p> |
|
<h2>$lt{'rshm'}</h2> |
|
<p> |
|
<b>$lt{'rshm'}: </b> |
|
<input type="text" name="reshome" size="30" value="/res/$defdom/" /> |
</p> |
</p> |
<h2>$lt{'cc'}</h2> |
|
<p> |
<p> |
<b>$lt{'user'}:</b> <input type="text" size="15" name="ccuname" /> |
|
</p><p> |
|
<b>$lt{'dmn'}:</b> $domform |
|
</p><p> |
|
<b>$lt{'ierc'}:</b> |
|
<input type="checkbox" name="expireown" checked> |
|
</p><p> |
|
<h2>$lt{'aens'}</h2> |
<h2>$lt{'aens'}</h2> |
$lt{'aesc'} |
$lt{'aesc'} |
</p> |
</p> |
Line 444 $lt{'aesc'}
|
Line 438 $lt{'aesc'}
|
<input type="radio" name="autodrops" value="1" />$lt{'yes'} <input type="radio" name="autodrops" value="0" checked="true" />$lt{'no'} |
<input type="radio" name="autodrops" value="1" />$lt{'yes'} <input type="radio" name="autodrops" value="0" checked="true" />$lt{'no'} |
</p><p> |
</p><p> |
<b>$lt{'dacu'}</b> |
<b>$lt{'dacu'}</b> |
$date_table |
$enroll_table |
</p><p> |
</p><p> |
|
<b>$lt{'dacc'}</b> |
|
$access_table |
|
<p></p> |
<b>$lt{'psam'}.</b><br /> |
<b>$lt{'psam'}.</b><br /> |
$lt{'pcda'}. |
$lt{'pcda'}. |
</p><p> |
</p><p> |
Line 461 $lt{'nccl'}<br/>
|
Line 458 $lt{'nccl'}<br/>
|
value="0" checked="true" />$lt{'no'} |
value="0" checked="true" />$lt{'no'} |
</p><p> |
</p><p> |
<b>$lt{'irsp'}</b> <input type="radio" name="showphotos" value="1" />$lt{'yes'} <input type="radio" name="showphotos" value="0" checked="true" />$lt{'no'} |
<b>$lt{'irsp'}</b> <input type="radio" name="showphotos" value="1" />$lt{'yes'} <input type="radio" name="showphotos" value="0" checked="true" />$lt{'no'} |
|
</p> |
|
<hr /> |
|
<h2>$lt{'cc'}</h2> |
|
<p> |
|
<b>$lt{'user'}:</b> <input type="text" size="15" name="ccuname" /> |
</p><p> |
</p><p> |
|
<b>$lt{'dmn'}:</b> $domform |
|
</p><p> |
|
<b>$lt{'ierc'}:</b> |
|
<input type="checkbox" name="expireown" checked> |
|
</p> |
|
<p> |
<input type="hidden" name="phase" value="two" /> |
<input type="hidden" name="phase" value="two" /> |
<input type="button" onClick="verify_message(this.form)" value="$lt{'opco'}"> |
<input type="button" onClick="verify_message(this.form)" value="$lt{'opco'}"> |
</p> |
</p> |
Line 476 ENDDOCUMENT
|
Line 484 ENDDOCUMENT
|
sub create_course { |
sub create_course { |
my $r=shift; |
my $r=shift; |
my $topurl='/res/'.&Apache::lonnet::declutter($ENV{'form.topmap'}); |
my $topurl='/res/'.&Apache::lonnet::declutter($ENV{'form.topmap'}); |
|
my $this_server = $Apache::lonnet::perlvar{'lonHostID'}; |
my $ccuname=$ENV{'form.ccuname'}; |
my $ccuname=$ENV{'form.ccuname'}; |
my $ccdomain=$ENV{'form.ccdomain'}; |
my $ccdomain=$ENV{'form.ccdomain'}; |
$ccuname=~s/\W//g; |
$ccuname=~s/\W//g; |
Line 495 ENDENHEAD
|
Line 504 ENDENHEAD
|
# |
# |
# Check the veracity of the course coordinator |
# Check the veracity of the course coordinator |
if (&Apache::lonnet::homeserver($ccuname,$ccdomain) eq 'no_host') { |
if (&Apache::lonnet::homeserver($ccuname,$ccdomain) eq 'no_host') { |
$r->print(&mt('No such user').' '.$ccuname.' '.&mt('at').' '.$ccdomain.'</body></html>'); |
$r->print('<form action="/adm/createuser" method="post" name="crtuser">'); |
|
$r->print(&mt('No such user').' '.$ccuname.' '.&mt('at').' '.$ccdomain.'.<br />'); |
|
$r->print(&mt("Please click Back on your browser and select another user, or ")); |
|
$r->print(' |
|
<input type="hidden" name="phase" value="get_user_info" /> |
|
<input type="hidden" name="ccuname" value="'.$ccuname.'" /> |
|
<input type="hidden" name="ccdomain" value="'.$ccdomain.'" /> |
|
<input name="userrole" type="submit" value="'. |
|
&mt('Create User').'" /> |
|
</form></body></html>'); |
return; |
return; |
} |
} |
# Check the proposed home server for the course |
# Check the proposed home server for the course |
Line 513 ENDENHEAD
|
Line 531 ENDENHEAD
|
my $courseid=&Apache::lonnet::createcourse($ENV{'request.role.domain'}, |
my $courseid=&Apache::lonnet::createcourse($ENV{'request.role.domain'}, |
$cdescr,$curl, |
$cdescr,$curl, |
$ENV{'form.course_home'}, |
$ENV{'form.course_home'}, |
$ENV{'form.nonstandard'}); |
$ENV{'form.nonstandard'}, |
|
$ENV{'form.crscode'}); |
|
|
# Note: The testing routines depend on this being output; see |
# Note: The testing routines depend on this being output; see |
# Utils::Course. This needs to at least be output as a comment |
# Utils::Course. This needs to at least be output as a comment |
Line 549 ENDENHEAD
|
Line 568 ENDENHEAD
|
$cenv{'description'}=$oldcenv{'description'}; |
$cenv{'description'}=$oldcenv{'description'}; |
# Mark as cloned |
# Mark as cloned |
$cenv{'clonedfrom'}=$cloneid; |
$cenv{'clonedfrom'}=$cloneid; |
|
delete($cenv{'default_enrollment_start_date'}); |
|
delete($cenv{'default_enrollment_end_date'}); |
} |
} |
} |
} |
# |
# |
Line 576 ENDENHEAD
|
Line 597 ENDENHEAD
|
} |
} |
} |
} |
} |
} |
|
# do not hide course coordinator from staff listing, |
|
# even if privileged |
|
$cenv{'nothideprivileged'}=$ccuname.':'.$ccdomain; |
if ($ENV{'form.crsxlist'}) { |
if ($ENV{'form.crsxlist'}) { |
$cenv{'internal.crosslistings'}=$ENV{'form.crsxlist'}; |
$cenv{'internal.crosslistings'}=$ENV{'form.crsxlist'}; |
my @xlists = (); |
my @xlists = (); |
Line 610 ENDENHEAD
|
Line 634 ENDENHEAD
|
if (@affiliates > 0) { |
if (@affiliates > 0) { |
my @badclasses = (); |
my @badclasses = (); |
foreach my $class (@affiliates) { |
foreach my $class (@affiliates) { |
my $addcheck = &localenroll::new_course($class,$cenv{'internal.courseowner'}); |
my $addcheck = &Apache::lonnet::auto_new_course($crsunum,$crsudom,$class,$cenv{'internal.courseowner'}); |
unless ($addcheck eq 'ok') { |
unless ($addcheck eq 'ok') { |
push @badclasses, $class; |
push @badclasses, $class; |
} |
} |
Line 624 ENDENHEAD
|
Line 648 ENDENHEAD
|
$r->print ("</ul><br/><br/></font>\n"); |
$r->print ("</ul><br/><br/></font>\n"); |
} |
} |
} |
} |
my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate'); |
my $enrollstart = &Apache::lonhtmlcommon::get_date_from_form('startenroll'); |
my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate'); |
my $enrollend = &Apache::lonhtmlcommon::get_date_from_form('endenroll'); |
|
my $startaccess = &Apache::lonhtmlcommon::get_date_from_form('startaccess'); |
|
my $endaccess = &Apache::lonhtmlcommon::get_date_from_form('endaccess'); |
if ($ENV{'form.no_end_date'}) { |
if ($ENV{'form.no_end_date'}) { |
$enddate = 0; |
$endaccess = 0; |
} |
} |
$cenv{'internal.autostart'}=$startdate; |
$cenv{'internal.autostart'}=$enrollstart; |
$cenv{'internal.autoend'}=$enddate; |
$cenv{'internal.autoend'}=$enrollend; |
|
$cenv{'default_enrollment_start_date'}=$startaccess; |
|
$cenv{'default_enrollment_end_date'}=$endaccess; |
if ($ENV{'form.showphotos'}) { |
if ($ENV{'form.showphotos'}) { |
$cenv{'internal.showphotos'}=$ENV{'form.showphotos'}; |
$cenv{'internal.showphotos'}=$ENV{'form.showphotos'}; |
} |
} |
Line 663 ENDENHEAD
|
Line 691 ENDENHEAD
|
$cenv{'question.email'}=$ccuname.':'.$ccdomain; |
$cenv{'question.email'}=$ccuname.':'.$ccdomain; |
} |
} |
} |
} |
|
if ($ENV{'form.reshome'}) { |
|
$cenv{'reshome'}=$ENV{'form.reshome'}.'/'; |
|
$cenv{'reshome'}=~s/\/+$/\//; |
|
} |
|
# |
|
# course has keyed access |
|
# |
if ($ENV{'form.setkeys'}) { |
if ($ENV{'form.setkeys'}) { |
$cenv{'keyaccess'}='yes'; |
$cenv{'keyaccess'}='yes'; |
} |
} |
|
# if specified, key authority is not course, but user |
|
# only active if keyaccess is yes |
|
if ($ENV{'form.keyauth'}) { |
|
$ENV{'form.keyauth'}=~s/[^\w\@]//g; |
|
if ($ENV{'form.keyauth'}) { |
|
$cenv{'keyauth'}=$ENV{'form.keyauth'}; |
|
} |
|
} |
|
|
if ($ENV{'form.disresdis'}) { |
if ($ENV{'form.disresdis'}) { |
$cenv{'pch.roles.denied'}='st'; |
$cenv{'pch.roles.denied'}='st'; |
} |
} |
Line 680 ENDENHEAD
|
Line 724 ENDENHEAD
|
# Use new Randomseed |
# Use new Randomseed |
# |
# |
$cenv{'rndseed'}=&Apache::lonnet::latest_rnd_algorithm_id();; |
$cenv{'rndseed'}=&Apache::lonnet::latest_rnd_algorithm_id();; |
|
$cenv{'receiptalg'}=&Apache::lonnet::latest_receipt_algorithm_id();; |
|
# |
|
# The encryption code and receipt prefix for this course |
|
# |
|
$cenv{'internal.encseed'}=$Apache::lonnet::perlvar{'lonReceipt'}.$$.time.int(rand(9999)); |
|
$cenv{'internal.encpref'}=100+int(9*rand(99)); |
# |
# |
# By default, use standard grading |
# By default, use standard grading |
$cenv{'grading'} = 'standard'; |
$cenv{'grading'} = 'standard'; |
Line 700 ENDENHEAD
|
Line 750 ENDENHEAD
|
# |
# |
# Set first page |
# Set first page |
# |
# |
unless (($ENV{'form.nonstandard'}) || ($ENV{'form.firstres'} eq 'blank')) { |
unless (($ENV{'form.nonstandard'}) || ($ENV{'form.firstres'} eq 'blank') |
|
|| ($cloneid)) { |
$r->print(&mt('Setting first resource').': '); |
$r->print(&mt('Setting first resource').': '); |
my ($errtext,$fatal)= |
my ($errtext,$fatal)= |
&Apache::londocs::mapread($crsunum,$crsudom,'default.sequence'); |
&Apache::londocs::mapread($crsunum,$crsudom,'default.sequence'); |
Line 739 ENDENHEAD
|
Line 790 ENDENHEAD
|
$r->print( |
$r->print( |
'<p><a href="/adm/managekeys?cid='.$crsudom.'_'.$crsunum.'">'.&mt('Manage Access Keys').'</a></p>'); |
'<p><a href="/adm/managekeys?cid='.$crsudom.'_'.$crsunum.'">'.&mt('Manage Access Keys').'</a></p>'); |
} |
} |
|
# Flush the course logs so reverse user roles immediately updated |
|
&Apache::lonnet::flushcourselogs(); |
$r->print('<p>'.&mt('Roles will be active at next login').'.</p></body></html>'); |
$r->print('<p>'.&mt('Roles will be active at next login').'.</p></body></html>'); |
} |
} |
|
|