--- loncom/interface/loncreatecourse.pm	2008/09/25 17:44:11	1.109
+++ loncom/interface/loncreatecourse.pm	2009/07/27 22:35:12	1.123
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Create a course
 #
-# $Id: loncreatecourse.pm,v 1.109 2008/09/25 17:44:11 bisitz Exp $
+# $Id: loncreatecourse.pm,v 1.123 2009/07/27 22:35:12 raeburn 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;
@@ -44,7 +76,7 @@ use LONCAPA;
 
 sub print_course_creation_page {
     my $r=shift;
-    my $crstype = 'Group';
+    my $crstype = 'Community';
     if ($env{'form.phase'} eq 'courseone') {
         $crstype = 'Course';
     }
@@ -86,14 +118,16 @@ sub print_course_creation_page {
         $intform = &Apache::loncommon::authform_internal(%param);
         $locform = &Apache::loncommon::authform_local(%param);
     } else {
+        my $title_alert = &mt('A Community title is required');
+        my $coord_alert = &mt('The username of the Coordinator is required');
         $javascript_validations = qq|
 function validate(formname) {
     if (formname.title == '') {
-        alert("A group title is required");
+        alert("$title_alert");
         return;
     }
     if (formname.ccuname == '') {
-        alert("The username of the group coordinator is required");
+        alert("$coord_alert");
     }
     formname.submit();
 }
@@ -124,9 +158,10 @@ function validate(formname) {
                     'stco' => "standard courses only",
                     'blnk' => "Blank",
                     'sllb' => "Syllabus",
-                    'navi' => "Navigate",
+                    'navi' => "Navigate Contents",
                     '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',
@@ -138,7 +173,7 @@ function validate(formname) {
                     'scfc' => "Set content feedback to Course Coordinator",
                     'cmmn' => "Communication",
                     'dsrd' => "Disable student resource discussion",
-                    'dsuc' => "Disable student use of chatrooms",
+                    'dsuc' => "Disable student use of chat rooms",
                     'acco' => "Access Control",
                     'snak' => "Students need access key to enter course",
 		    'kaut' => 
@@ -152,6 +187,7 @@ function validate(formname) {
                     'no'   => "No",
                     'audr' => "Automated drops",
                     'dacu' => "Duration of automated classlist updates",
+                    'dads' => 'Default Access Dates for Students',
                     'dacc' => "Default start and end dates for student access",
                     '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",
@@ -161,29 +197,29 @@ function validate(formname) {
                     'irsp' => "Include retrieval of student photographs?",
 		    'rshm' => 'Resource Space Home',
                     'cgrs' => "Course Group Settings",
-                    'cgrq' => "Set a quota for the total disk space available for storage of course group portfolio files.",
+                    'cgrq' => 'Set a quota for the total disk space available for storage of course group portfolio files',
                     'opco' => "Open Course",
-                    'ginf' => "Group Information",
-                    'gtit' => "Group Title",
-                    'ghsr' => "Group Home Server",
-                    'gidn' => "Group ID/Number",
-                    'grco' => "Group Content",
-                    'cngr' => "Completely new group",
-                    'cegr' => "Clone an existing group",
-                    'sagr' => "Do NOT generate as standard group",
-                    'stgo' => "standard groups only",
-                    'sgpf' => "Set group policy feedback to Group Coordinator",
-                    'scfg' => "Set content feedback to Group Coordinator",
+                    'ginf' => "Community Information",
+                    'gtit' => "Community Title",
+                    'ghsr' => "Community Home Server",
+                    'gidn' => "Community ID/Number",
+                    'grco' => "Community Content",
+                    'cngr' => "Completely new community",
+                    'cegr' => "Clone an existing community",
+                    'sagr' => "Do NOT generate as standard community",
+                    'stgo' => "standard communities only",
+                    'sgpf' => "Set community policy feedback to Coordinator",
+                    'scfg' => "Set content feedback to Coordinator",
                     'dmrd' => "Disable member resource discussion",
-                    'dmuc' => "Disable member use of chatrooms",
-                    'mnak' => "Members need access key to enter group",
+                    'dmuc' => "Disable member use of chat rooms",
+                    'mnak' => "Members need access key to enter community",
                     'kaug' =>
-                    'Key authority (<tt>id@domain</tt>) if other than group',
-                    'gc'   => "Group Coordinator",
-                    'gid'  => "Group ID",
-                    'crgr' => "Create Group",
-                    'grts' => "Group Teams Settings",
-                    'grtq' => "Set a quota for the total disk space available for storage of group team portfolio files.",
+                    'Key authority (<tt>id@domain</tt>) if other than community',
+                    'gc'   => "Coordinator",
+                    'gid'  => "Community ID",
+                    'crgr' => "Create Community",
+                    'grts' => "Community Group Settings",
+                    'grtq' => "Set a quota for the total disk space available for storage of community group portfolio files.",
 
 				       );
     my $js = <<END;
@@ -212,7 +248,7 @@ END
 
     my %titles = &Apache::lonlocal::texthash(
                   courseone => 'Create a New Course',
-                  groupone => 'Create a New Group',
+                  groupone => 'Create a New Community',
     );  
     my $start_page = 
         &Apache::loncommon::start_page($titles{$env{'form.phase'}},$js);
@@ -223,9 +259,9 @@ 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">'
+    if ($crstype eq 'Course') {
+        $r->print('<form action="/adm/createcourse" method="post" name="ccrs"><div class="LC_createcourse">'
                  .&Apache::lonhtmlcommon::start_pick_box()
 
                  .&Apache::lonhtmlcommon::row_headline()
@@ -263,63 +299,92 @@ END
                  .'<input type="text" size="30" name="crsxlist" />'
                  .'<br />('.$lt{'cscs'}.')'
                  .&Apache::lonhtmlcommon::row_closure()
+        );
 
-                 .&Apache::lonhtmlcommon::row_headline()
+        # Table: New Course / Clone Course
+        $r->print(&Apache::lonhtmlcommon::row_headline()
                  .'<h3>'.$lt{'crco'}.'</h3>'
-                );
-        $r->print(<<MYEND);
-<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>
-&nbsp;
-<label>
-    <input type="radio" name="firstres" value="syl" checked="checked" />$lt{'sllb'}
-</label>
-&nbsp;
-<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 />
-&nbsp;<br />
-$lt{'asov'}.
-</td></tr>
-</table>
-MYEND
-
+                 .&Apache::loncommon::start_data_table()
+                 .&Apache::loncommon::start_data_table_header_row()
+                 .'<th>'.$lt{'cncr'}.'</th>'
+                 .'<th>&nbsp;'.&mt('or').'&nbsp;</th>'
+                 .'<th>'.$lt{'cecr'}.'</th>'
+                 .&Apache::loncommon::end_data_table_header_row()
+                 .&Apache::loncommon::start_data_table_row()
 
-$r->print(' '
+                 # 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>'
+                 .'&nbsp;'
+                 .'<label>'
+                 .'<input type="radio" name="firstres" value="syl" checked="checked" />'.$lt{'sllb'}
+                 .'</label>'
+                 .'&nbsp;'
+                 .'<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>&nbsp;</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{'dads'}.'</h3>'
+                 .&Apache::lonhtmlcommon::row_closure()
+                 .&Apache::lonhtmlcommon::row_title($lt{'dacc'})
+                 .$access_table
+                 .&Apache::lonhtmlcommon::row_closure()
+        );
+
+        $r->print(&Apache::lonhtmlcommon::row_headline()
                  .'<h3>'.$lt{'assp'}.'</h3>'
                  .&Apache::lonhtmlcommon::row_closure()
 
@@ -348,7 +413,7 @@ $r->print(' '
                  .&Apache::lonhtmlcommon::row_closure()
 
                  .&Apache::lonhtmlcommon::row_title($lt{'dsuc'})
-                 .'<input type="checkbox" name="disablechat" /'
+                 .'<input type="checkbox" name="disablechat" />'
                  .&Apache::lonhtmlcommon::row_closure()
 
                  .&Apache::lonhtmlcommon::row_headline()
@@ -389,10 +454,6 @@ $r->print(' '
                  .$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 />'
@@ -433,6 +494,8 @@ $r->print(' '
 
                  .&Apache::lonhtmlcommon::row_title($lt{'user'})
                  .'<input type="text" size="15" name="ccuname" />'
+                 .&Apache::loncommon::studentbrowser_javascript()
+                 .&Apache::loncommon::selectstudent_link('ccrs','ccuname','ccdomain')
                  .&Apache::lonhtmlcommon::row_closure()
 
                  .&Apache::lonhtmlcommon::row_title($lt{'dmn'},"","LC_odd_row_value")
@@ -440,9 +503,9 @@ $r->print(' '
                  .&Apache::lonhtmlcommon::row_closure(1)
 
                  .&Apache::lonhtmlcommon::end_pick_box()
-                 );
-
+        );
         $r->print(<<ENDDOCUMENT);
+</div>
 <p>
 <input type="hidden" name="prevphase" value="courseone" />
 <input type="hidden" name="phase" value="coursetwo" />
@@ -451,7 +514,7 @@ $r->print(' '
 </form>
 ENDDOCUMENT
 
-    } elsif ($crstype eq 'Group') {
+    } elsif ($crstype eq 'Community') {
         $r->print(<<ENDDOCUMENT);
 <form action="/adm/createcourse" method="post" name="ccrs">
 <h2>$lt{'ginf'}</h2>
@@ -591,7 +654,7 @@ sub create_course {
     my $r=shift;
     my $ccuname =&LONCAPA::clean_username($env{'form.ccuname'});
     my $ccdomain=&LONCAPA::clean_domain($env{'form.ccdomain'});
-    my $crstype = 'Group';
+    my $crstype = 'Community';
     my ($enrollstart,$enrollend,$startaccess,$endaccess);
 
     if ($env{'form.phase'} eq 'coursetwo') {
@@ -708,9 +771,9 @@ sub create_course {
 	# Make the requested user a course coordinator or group coordinator
         #
 	if (($ccdomain) && ($ccuname)) {
-	    $r->print(&mt('Assigning role of [_1] Coordinator to [_2] at [_3]: ',
-			  $crstype,$ccuname,$ccdomain).
-		      &Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid,
+	    $r->print(&mt('Assigning role of '.$crstype.' Coordinator to [_1]:',
+			 ,'<i>'.$ccuname.':'.$ccdomain.'</i>')
+		      .&Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid,
 						  'cc','','','','','createcourse').'<p>');
 	}
 	if ($env{'form.setkeys'}) {
@@ -722,18 +785,18 @@ sub create_course {
 	$r->print('<p>'.&mt('Roles will be active at next login').'.</p>');
     }
     $r->print('<p><a href="/adm/createcourse?phase='.lc($crstype).'one">'.
-	      &mt('Create Another [_1]',$crstype).'</a></p>'.
+	      &mt("Create Another $crstype").'</a></p>'.
 	      &Apache::loncommon::end_page());
 }
 
 sub print_intro_page {
     my $r = shift;
     my $start_page =
-        &Apache::loncommon::start_page('Create a New Course or Group Space');
+        &Apache::loncommon::start_page('Create a New Course or Community');
     my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Creation Options','Create_Course',undef,'Create_Courses');
     my $end_page =
         &Apache::loncommon::end_page();
-    my $helplink=&Apache::loncommon::help_open_topic('Create_Course_GroupSpace',&mt('Help on Creating Courses and Groups'));
+    my $helplink=&Apache::loncommon::help_open_topic('Create_Course_Community',&mt('Help on Creating Courses and Communities'));
 
     my @choices = ({ internal_name => 'courseone',
                      name => &mt('Create a single course'),
@@ -741,14 +804,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 "community"'),
                      short_description =>
-    &mt('Create a new group space for non-course use by completing an online form.'),
+    &mt('Create a new collaborative community by completing an online form.'),
                  },
                    { internal_name => 'batchone',
-                     name => &mt('Create courses/groups by uploading an attributes file'),
+                     name => &mt('Create courses/communities 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 communities in XML format.'),
                      help => 'Batch_Creation',
                  },
     );
@@ -775,8 +838,8 @@ ENDDOCUMENT
 sub upload_batchfile {
     my $r = shift;
     my $start_page =
-        &Apache::loncommon::start_page('Create a New Course or Group Space');
-    my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Upload Course/Group Attributes File','Create_Course',undef,'Create_Courses');
+        &Apache::loncommon::start_page('Create a New Course or Community');
+    my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Upload Course/Community Attributes File','Create_Course',undef,'Create_Courses');
     my $end_page =
         &Apache::loncommon::end_page();
     $r->print($start_page.$crumbs);
@@ -784,9 +847,9 @@ sub upload_batchfile {
     $r->print('<form name="batchcreate" method="post" '.
                 'enctype="multipart/form-data" action="/adm/createcourse">'.
               '<input type="file" name="coursecreatorxml" />'.
-              '<input type="hidden" name="phase" value="batchtwo"><br /><br />'.
+              '<input type="hidden" name="phase" value="batchtwo" /><br /><br />'.
               '<input type="submit" name="batchsubmit" '.
-              'value="Create Courses/Groups" /></form>');
+              'value="Create Courses/Communities" /></form>');
     $r->print($end_page);
     return;
 }
@@ -794,7 +857,7 @@ sub upload_batchfile {
 sub process_batchfile {
     my $r = shift;
     my $start_page =
-        &Apache::loncommon::start_page('Create a New Course or Group Space');
+        &Apache::loncommon::start_page('Create a New Course or Community');
     my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Creation Outcome','Create_Course',undef,'Create_Courses');
     my $end_page =
         &Apache::loncommon::end_page();