--- loncom/interface/loncreatecourse.pm 2008/01/22 22:37:18 1.106 +++ loncom/interface/loncreatecourse.pm 2008/11/18 19:14:22 1.112 @@ -1,7 +1,7 @@ # The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.106 2008/01/22 22:37:18 www Exp $ +# $Id: loncreatecourse.pm,v 1.112 2008/11/18 19:14:22 jms Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,6 +27,38 @@ # ### +=head1 NAME + +Apache::loncreatecourse.pm + +=head1 SYNOPSIS + +Allows domain coordinators to create new +courses and assign course coordinators. + +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. + +=head1 SUBROUTINES + +=over + +=item handler() + +=item print_course_creation_page() + +=item create_course() + +=item print_intro_page() + +=item upload_batchfile() + +=item process_batchfile() + +=back + +=cut + package Apache::loncreatecourse; use strict; @@ -127,6 +159,7 @@ function validate(formname) { 'navi' => "Navigate", 'cid' => "Course ID", 'dmn' => "Domain", + 'dsh' => "Date Shift", 'asov' => "Additional settings, if specified below, will override cloned settings", 'ncd' => "Do not clone date parameters", 'prd' => 'Clone date parameters as-is', @@ -153,7 +186,7 @@ function validate(formname) { 'audr' => "Automated drops", '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", 'nech' => "Notification of enrollment changes", 'nccl' => "Notification to course coordinator via LON-CAPA message when enrollment changes occur during the automated update?", @@ -223,214 +256,247 @@ END 'Create_Course',undef, 'Create_Courses'); $r->print($start_page.$crumbs); + if ($crstype eq 'Course') { + $r->print('<form action="/adm/createcourse" method="post" name="ccrs">' + .&Apache::lonhtmlcommon::start_pick_box() + + .&Apache::lonhtmlcommon::row_headline() + .'<h3>'.$lt{'cinf'}.'</h3>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'ctit'}) + .'<input type="text" size="50" name="title" />' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'chsr'}) + .$course_home + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'cidn'}.' ('.$lt{'opt'}.')') + .'<input type="text" size="30" name="crsid" />' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .'<h3>'.$lt{'iinf'}.'</h3>' + .$lt{'stat'} + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'ccod'}) + .'<input type="text" size="30" name="crscode" />' + .'<br />('.$lt{'toin'}.')' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'snid'}) + .'<input type="text" size="30" name="crssections" />' + .'<br />('.$lt{'csli'}.')' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'crcs'}) + .'<input type="text" size="30" name="crsxlist" />' + .'<br />('.$lt{'cscs'}.')' + .&Apache::lonhtmlcommon::row_closure() + ); + + # Table: New Course / Clone Course + $r->print(&Apache::lonhtmlcommon::row_headline() + .'<h3>'.$lt{'crco'}.'</h3>' + .&Apache::loncommon::start_data_table() + .&Apache::loncommon::start_data_table_header_row() + .'<th>'.$lt{'cncr'}.'</th>' + .'<th> '.&mt('or').' </th>' + .'<th>'.$lt{'cecr'}.'</th>' + .&Apache::loncommon::end_data_table_header_row() + .&Apache::loncommon::start_data_table_row() + + # New Course: + .'<td>' + .&Apache::lonhtmlcommon::start_pick_box() + .&Apache::lonhtmlcommon::row_title($lt{'map'}) + .'<input type="text" size="50" name="topmap" />' + .'<a href="javascript:openbrowser(\'ccrs\',\'topmap\')">'.$lt{'smap'}.'</a>' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title('<label for="nonstd">'.$lt{'sacr'}.'</label>') + .'<input id="nonstd" type="checkbox" name="nonstandard" />' + .'<br />('.$lt{'ocik'}.')' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title($lt{'fres'}) + .'<label>' + .'<input type="radio" name="firstres" value="blank" />'.$lt{'blnk'} + .'</label>' + .' ' + .'<label>' + .'<input type="radio" name="firstres" value="syl" checked="checked" />'.$lt{'sllb'} + .'</label>' + .' ' + .'<label>' + .'<input type="radio" name="firstres" value="nav" />'.$lt{'navi'} + .'</label>' + .'<br />('.$lt{'stco'}.')' + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::end_pick_box() + + .'<td> </td>' + + # Clone Course: + .'<td>' + .&Apache::lonhtmlcommon::start_pick_box() + .&Apache::lonhtmlcommon::row_title($lt{'cid'}) + .'<label>' + .'<input type="text" size="25" name="clonecourse" value="" />' + .'</label>' + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::row_title($lt{'dmn'}) + .'<label>' + .$cloneform + .'</label>' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title($lt{'dsh'}) + .'<label>' + .'<input type="radio" name="datemode" value="delete" /> '.$lt{'ncd'} + .'</label><br />' + .'<label>' + .'<input type="radio" name="datemode" value="preserve" /> '.$lt{'prd'} + .'</label><br />' + .'<label>' + .'<input type="radio" name="datemode" value="shift" checked="checked" /> '.$lt{'shd'} + .'</label>' + .' <input type="text" size="5" name="dateshift" value="365" />' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_headline() + .$lt{'asov'} + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::end_pick_box() + .'</td>' + .&Apache::loncommon::end_data_table_row() + .&Apache::loncommon::end_data_table() + .&Apache::lonhtmlcommon::row_closure() + ); + + $r->print(&Apache::lonhtmlcommon::row_headline() + .'<h3>'.$lt{'assp'}.'</h3>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'oaas'}) + .'<input type="checkbox" name="openall" />' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .'<h3>'.$lt{'mssg'}.'</h3>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'scpf'}) + .'<input type="checkbox" name="setpolicy" checked="checked" />' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'scfc'}) + .'<input type="checkbox" name="setcontent" checked="checked" />' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .'<h3>'.$lt{'cmmn'}.'</h3>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'dsrd'}) + .'<input type="checkbox" name="disresdis" />' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'dsuc'}) + .'<input type="checkbox" name="disablechat" /' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .'<h3>'.$lt{'acco'}.'</h3>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'snak'}) + .'<input type="checkbox" name="setkeys" />' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'kaut'}) + .'<input type="text" size="30" name="keyauth" />' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .'<h3>'.$lt{'rshm'}.'</h3>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'rshm'}) + .'<input type="text" name="reshome" size="30" value="/res/'.$defdom.'/" />' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .'<h3>'.$lt{'aens'}.'</h3>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'aadd'}) + .'<label><input type="radio" name="autoadds" value="1" />'.$lt{'yes'}.'</label>' + .'<label><input type="radio" name="autoadds" value="0" checked="checked" />'.$lt{'no'}.'</label>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'audr'}) + .'<label><input type="radio" name="autodrops" value="1" />'.$lt{'yes'}.'</label>' + .'<label><input type="radio" name="autodrops" value="0" checked="checked" />'.$lt{'no'}.'</label>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'dacu'}) + .$enroll_table + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'dacc'}) + .$access_table + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'psam'}) + .$lt{'pcda'}.'<br />' + .$krbform.'<br />' + .$intform.'<br />' + .$locform + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'nech'}) + .$lt{'nccl'}.'<br/>' + .'<label><input type="radio" name="notify_owner" value="1" />'.$lt{'yes'}.'</label>' + .'<label><input type="radio" name="notify_owner" value="0" checked="checked" />'.$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="checked" />'.$lt{'no'}.'</label>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'irsp'}) + .'<label>' + .'<input type="radio" name="showphotos" value="1" />'.$lt{'yes'} + .'</label> ' + .'<label>' + .'<input type="radio" name="showphotos" value="0" checked="checked" />'.$lt{'no'} + .'</label> ' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .'<h3>'.$lt{'cgrs'}.'</h3>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'cgrq'}) + .'<input type="text" name="crsquota" value="20" size="6" />Mb' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .'<h3>'.$lt{'cc'}.'</h3>' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'user'}) + .'<input type="text" size="15" name="ccuname" />' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'dmn'},"","LC_odd_row_value") + .$domform + .&Apache::lonhtmlcommon::row_closure(1) + + .&Apache::lonhtmlcommon::end_pick_box() + ); + $r->print(<<ENDDOCUMENT); -<form action="/adm/createcourse" method="post" name="ccrs"> -<h2>$lt{'cinf'}</h2> -<p> -<label><b>$lt{'ctit'}:</b> -<input type="text" size="50" name="title" /></label> -</p><p> -<label> - <b>$lt{'chsr'}:</b>$course_home -</label> -</p><p> -<label> - <b>$lt{'cidn'} ($lt{'opt'})</b> - <input type="text" size="30" name="crsid" /> -</label> -</p><p> -<h2>$lt{'iinf'}</h2> -<p> -$lt{'stat'} -</p><p> -<label> - <b>$lt{'ccod'}</b> - <input type="text" size="30" name="crscode" /> -</label> -<br/> -($lt{'toin'}) -</p><p> -<label> - <b>$lt{'snid'}</b> - <input type="text" size="30" name="crssections" /> -</label> -<br/> -($lt{'csli'}) -</p><p> -<label> - <b>$lt{'crcs'}</b> - <input type="text" size="30" name="crsxlist" /> -</label> -<br/> -($lt{'cscs'}) -</p> -<h2>$lt{'crco'}</h2> -<table border="2"> -<tr><th>$lt{'cncr'}</th><th>$lt{'cecr'}</th></tr> -<tr><td> -<p> -<label> - <b>$lt{'map'}:</b> - <input type="text" size="50" name="topmap" /> -</label> -<a href="javascript:openbrowser('ccrs','topmap')">$lt{'smap'}</a> -</p><p> -<label for="nonstd"><b>$lt{'sacr'}</b></label> -<br /> -($lt{'ocik'}): -<input id="nonstd" type="checkbox" name="nonstandard" /> -</p><p> -<b>$lt{'fres'}</b><br />($lt{'stco'}): -<label> - <input type="radio" name="firstres" value="blank" />$lt{'blnk'} -</label> - -<label> - <input type="radio" name="firstres" value="syl" checked />$lt{'sllb'} -</label> - -<label> - <input type="radio" name="firstres" value="nav" />$lt{'navi'} -</label> -</p> -</td><td> -<label> - $lt{'cid'}: <input type="text" size="25" name="clonecourse" value="" /> -</label> -<br /> -<label> - $lt{'dmn'}: $cloneform -</label> -<br /> - <label><input type="radio" name="datemode" value="delete" /> $lt{'ncd'}</label><br /> - <label><input type="radio" name="datemode" value="preserve" /> $lt{'prd'}</label><br /> - <label><input type="radio" name="datemode" value="shift" checked="checked" /> $lt{'shd'}</label> - <input type="text" size="5" name="dateshift" value="365" /><br /> - <br /> -$lt{'asov'}. -</td></tr> -</table> -<h2>$lt{'assp'}</h2> -<p> -<label> - <b>$lt{'oaas'}: </b> - <input type="checkbox" name="openall" /> -</label> -</p> -<h2>$lt{'mssg'}</h2> -<p> -<label> - <b>$lt{'scpf'}: </b> - <input type="checkbox" name="setpolicy" checked /> -</label> -<br /> -<label> - <b>$lt{'scfc'}: </b> - <input type="checkbox" name="setcontent" checked /> -</label> -</p> -<h2>$lt{'cmmn'}</h2> -<p> -<label> - <b>$lt{'dsrd'}: </b> - <input type="checkbox" name="disresdis" /> -</label> -<br /> -<label> - <b>$lt{'dsuc'}: </b> - <input type="checkbox" name="disablechat" /> -</label> -</p> -<h2>$lt{'acco'}</h2> -<p> -<label> - <b>$lt{'snak'}: </b> - <input type="checkbox" name="setkeys" /> -</label> -<br /> -<label> - <b>$lt{'kaut'}: </b> - <input type="text" size="30" name="keyauth" /> -</label> -</p> -<h2>$lt{'rshm'}</h2> -<p> -<label> - <b>$lt{'rshm'}: </b> - <input type="text" name="reshome" size="30" value="/res/$defdom/" /> -</label> -</p> -<p> -<h2>$lt{'aens'}</h2> -$lt{'aesc'} -</p> -<p> -<b>$lt{'aadd'}</b> -<label><input type="radio" name="autoadds" value="1" />$lt{'yes'}</label> -<label><input type="radio" name="autoadds" value="0" checked="true" />$lt{'no'} -</label> -</p><p> -<b>$lt{'audr'}</b> -<label><input type="radio" name="autodrops" value="1" />$lt{'yes'}</label> -<label><input type="radio" name="autodrops" value="0" checked="true" />$lt{'no'}</label> -</p><p> -<b>$lt{'dacu'}</b> -$enroll_table -</p><p> -<b>$lt{'dacc'}</b> -$access_table -<p></p> -<b>$lt{'psam'}.</b><br /> -$lt{'pcda'}. -</p><p> -$krbform -<br /> -$intform -<br /> -$locform -</p><p> -<b>$lt{'nech'}</b><br /> -$lt{'nccl'}<br/> -<label> - <input type="radio" name="notify_owner" value="1" />$lt{'yes'} -</label> -<label> - <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> -<label> - <input type="radio" name="showphotos" value="1" />$lt{'yes'} -</label> -<label> - <input type="radio" name="showphotos" value="0" checked="true" />$lt{'no'} -</label> -</p> -<p> -<h2>$lt{'cgrs'}</h2> -$lt{'cgrq'} -<input type="text" name="crsquota" value="20" size="6" />Mb -</p> -<hr /> -<h2>$lt{'cc'}</h2> -<p> -<label> - <b>$lt{'user'}:</b> <input type="text" size="15" name="ccuname" /> -</label> -</p><p> -<label> - <b>$lt{'dmn'}:</b> $domform -</label> -</p> <p> <input type="hidden" name="prevphase" value="courseone" /> <input type="hidden" name="phase" value="coursetwo" /> @@ -438,6 +504,7 @@ $lt{'cgrq'} </p> </form> ENDDOCUMENT + } elsif ($crstype eq 'Group') { $r->print(<<ENDDOCUMENT); <form action="/adm/createcourse" method="post" name="ccrs"> @@ -477,7 +544,7 @@ ENDDOCUMENT </label> <label> - <input type="radio" name="firstres" value="syl" checked />$lt{'sllb'} + <input type="radio" name="firstres" value="syl" checked="checked" />$lt{'sllb'} </label> <label> @@ -506,12 +573,12 @@ $lt{'asov'}. <p> <label> <b>$lt{'sgpf'}: </b> - <input type="checkbox" name="setpolicy" checked /> + <input type="checkbox" name="setpolicy" checked="checked" /> </label> <br /> <label> <b>$lt{'scfg'}: </b> - <input type="checkbox" name="setcontent" checked /> + <input type="checkbox" name="setcontent" checked="checked" /> </label> </p> <h2>$lt{'cmmn'}</h2> @@ -661,23 +728,26 @@ sub create_course { # Check the veracity of the course coordinator if (&Apache::lonnet::homeserver($ccuname,$ccdomain) eq 'no_host') { $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>'.&Apache::loncommon::end_page()); + $r->print('<div class="LC_warning">' + .&mt('No such user [_1] at domain [_2].','<tt>'.$ccuname.'</tt>','<tt>'.$ccdomain.'</tt>') + .'</div>'); + $r->print(&mt('Please click Back on your browser and select another user, or [_1]Create User[_2]' + , '<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="' + , '" />' + ) + .'</form>'.&Apache::loncommon::end_page() + ); return; } # Check the proposed home server for the course my %host_servers = &Apache::lonnet::get_servers($env{'request.role.domain'},'library'); if (! exists($host_servers{$env{'form.course_home'}})) { - $r->print(&mt('Invalid home server for course').': '. - $env{'form.course_home'}.&Apache::loncommon::end_page()); + $r->print(&mt('Invalid home server for course: [_1]' + ,$env{'form.course_home'}.&Apache::loncommon::end_page())); return; } my ($courseid,$crsudom,$crsunum); @@ -695,7 +765,7 @@ sub create_course { $r->print(&mt('Assigning role of [_1] Coordinator to [_2] at [_3]: ', $crstype,$ccuname,$ccdomain). &Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid, - 'cc').'<p>'); + 'cc','','','','','createcourse').'<p>'); } if ($env{'form.setkeys'}) { $r->print( @@ -725,14 +795,14 @@ sub print_intro_page { &mt('Create a new course by completing an online form.'), }, { internal_name => 'groupone', - name => &mt('Create a single collaborative group space '), + name => &mt('Create a single collaborative group space'), short_description => - &mt('Create a new group space for non-course use by completing an online form .'), + &mt('Create a new group space for non-course use by completing an online form.'), }, { internal_name => 'batchone', name => &mt('Create courses/groups by uploading an attributes file'), short_description => - &mt('Upload an attributes file containing specifications for one or more courses or groups in XML format'), + &mt('Upload an attributes file containing specifications for one or more courses or groups in XML format.'), help => 'Batch_Creation', }, );