--- loncom/interface/loncreatecourse.pm	2008/04/30 23:23:07	1.107
+++ loncom/interface/loncreatecourse.pm	2010/05/24 06:36:54	1.139
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Create a course
 #
-# $Id: loncreatecourse.pm,v 1.107 2008/04/30 23:23:07 raeburn Exp $
+# $Id: loncreatecourse.pm,v 1.139 2010/05/24 06:36:54 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -27,6 +27,50 @@
 #
 ###
 
+=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()
+
+=item courserequestbrowser_javascript()
+
+=item print_creation_logs()
+
+=item creation_display_filter()
+
+=item context_names()
+
+=item instcode_srchstr()
+
+=item syllabuslink_javascript()
+
+=back
+
+=cut
+
 package Apache::loncreatecourse;
 
 use strict;
@@ -44,7 +88,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';
     }
@@ -65,15 +109,15 @@ sub print_course_creation_page {
 		     &Apache::loncommon::selectcourse_link
 	     ('ccrs','clonecourse','clonedomain',undef,undef,undef,$crstype);
     my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'});
-    my ($enroll_table,$access_table,$krbdef,$krbdefdom,$krbform,$intform,$locform,
+    my ($enroll_table,$krbdef,$krbdefdom,$krbform,$intform,$locform,
         $javascript_validations);
+    my $starttime = time;
+    my $endtime = time+(6*30*24*60*60); # 6 months from now, approx
+    my $access_table = &Apache::lonuserutils::date_setting_table($starttime,
+                                             $endtime,'create_defaultdates');
     if ($crstype eq 'Course') {
-        my $starttime = time;
-        my $endtime = time+(6*30*24*60*60); # 6 months from now, approx
         $enroll_table = &Apache::lonuserutils::date_setting_table($starttime,
                                               $endtime,'create_enrolldates');
-        $access_table = &Apache::lonuserutils::date_setting_table($starttime,
-                                             $endtime,'create_defaultdates');
         ($krbdef,$krbdefdom) =
         &Apache::loncommon::get_kerberos_defaults($defdom);
         $javascript_validations=&Apache::lonuserutils::javascript_validations(
@@ -86,14 +130,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 +170,10 @@ function validate(formname) {
                     'stco' => "standard courses only",
                     'blnk' => "Blank",
                     'sllb' => "Syllabus",
-                    'navi' => "Navigate",
+                    'navi' => "Course 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,12 +185,11 @@ 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' => 
-		    'Key authority (<tt>id@domain</tt>) if other than course',
-                    'cc'   => "Course Coordinator",
+                    'ow'   => "Course Owner",
+                    'cc'   => "(will be assigned Course Coordinator role)",
                     'user' => "Username",
                     'aens' => "Automated enrollment settings",
                     'aesc' => "The following settings control automatic enrollment of students in this class based on information available for this specific course from your institution's official classlists.",
@@ -152,40 +198,47 @@ 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",
+                    'psam' => "Authentication mechanism",
+                    'pcda' => "Default authentication method for new users added to this 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',
                     'cgrs' => "Course Group Settings",
-                    '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",
-                    'dmrd' => "Disable member resource discussion",
-                    'dmuc' => "Disable member use of chatrooms",
-                    'mnak' => "Members need access key to enter group",
-                    '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.",
-
-				       );
+                    'cgrq' => 'Set a quota for the total disk space available for storage of course group portfolio files',
+                    'opco' => 'Open Course',
+                    'opcm' => 'Open Community',
+	       );
+    $lt{'kaut'} = &mt('Key authority ([_1]id:domain[_2]) if other than course','<tt>','</tt>');
+
+    if ($crstype eq 'Community') {
+        $lt{'cinf'} = &mt('Community Information');
+        $lt{'ctit'} = &mt('Community Title');
+        $lt{'chsr'} = &mt('Community Home Server');
+        $lt{'cidn'} = &mt('Community ID/Number');
+        $lt{'crco'} = &mt('Community Content');
+        $lt{'cncr'} = &mt('Completely new community');
+        $lt{'cecr'} = &mt('Clone an existing community');
+        $lt{'sacr'} = &mt('Do NOT generate as standard community');
+        $lt{'stco'} = &mt('standard communities only');
+        $lt{'navi'} = &mt('Community Contents');
+        $lt{'cid'}  = &mt('Community ID');
+        $lt{'scpf'} = &mt('Set community policy feedback to Coordinator');
+        $lt{'scfc'} = &mt('Set content feedback to Coordinator');
+        $lt{'dsrd'} = &mt('Disable member resource discussion');
+        $lt{'dsuc'} = &mt('Disable member use of chat rooms');
+        $lt{'dads'} = &mt('Default Access Dates for Members');
+        $lt{'dacc'} = &mt('Default start and end dates for member access');
+        $lt{'snak'} = &mt('Members need access key to enter course');
+        $lt{'kaut'} = &mt('Key authority ([_1]id:domain[_2]) if other than community','<tt>','</tt>');
+        $lt{'ow'}  = &mt('Community Owner');
+        $lt{'cc'}  = &mt('(will be assigned Coordinator role)');
+        $lt{'cgrs'} = &mt('Community Group Settings');
+        $lt{'cgrq'} = &mt('Set a quota for the total disk space available for storage of community group portfolio files');
+    }
     my $js = <<END;
 <script type="text/javascript">
 var editbrowser = null;
@@ -212,7 +265,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,353 +276,280 @@ END
 					    'Create_Course',undef,
 					    'Create_Courses');
     $r->print($start_page.$crumbs);
+
+    $r->print('<form action="/adm/createcourse" method="post" name="ccrs"><div class="LC_createcourse">'
+             .&Apache::lonhtmlcommon::start_pick_box()
+
+             .&Apache::lonhtmlcommon::row_headline()
+             .'<h3>'.$lt{'ow'}.'&nbsp;'.$lt{'cc'}.'</h3>'
+             .&Apache::lonhtmlcommon::row_closure()
+
+             .&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")
+             .$domform
+             .&Apache::lonhtmlcommon::row_closure()
+
+             .&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()
+    );
     if ($crstype eq 'Course') {
-        $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>
-&nbsp;
-<label>
-    <input type="radio" name="firstres" value="syl" 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>
-<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>
+        $r->print(&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>&nbsp;'.&mt('or').'&nbsp;</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>'
+                 .'&nbsp;');
+    if ($crstype eq 'Community') {
+        $r->print('<label>'
+                 .'<input type="radio" name="firstres" value="nav" checked="checked" />'.$lt{'navi'}
+                 .'</label>');
+    } else {
+        $r->print('<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>');
+    }
+    $r->print('<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()
+
+                 .&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()
+    );
+    if ($crstype eq 'Course') {
+        $r->print(&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{'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()
+        );
+    }
+ 
+    $r->print(&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(1)
+
+                 .&Apache::lonhtmlcommon::end_pick_box()
+                 .'</div>'
+    );
+    if ($crstype eq 'Course') {
+        $r->print('
 <p>
 <input type="hidden" name="prevphase" value="courseone" />
 <input type="hidden" name="phase" value="coursetwo" />
-<input type="button" onClick="verify_message(this.form)" value="$lt{'opco'}" />
-</p>
-</form>
-ENDDOCUMENT
-    } elsif ($crstype eq 'Group') {
-        $r->print(<<ENDDOCUMENT);
-<form action="/adm/createcourse" method="post" name="ccrs">
-<h2>$lt{'ginf'}</h2>
-<p>
-<label><b>$lt{'gtit'}:</b>
-<input type="text" size="50" name="title" /></label>
-</p><p>
-<label>
-    <b>$lt{'ghsr'}:</b>$course_home
-</label>
-</p><p>
-<label>
-    <b>$lt{'gidn'} ($lt{'opt'})</b>
-    <input type="text" size="30" name="crsid" />
-</label>
-</p>
-<h2>$lt{'grco'}</h2>
-<table border="2">
-<tr><th>$lt{'cngr'}</th><th>$lt{'cegr'}</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{'sagr'}</b></label>
-<br />
-($lt{'ocik'}):
-<input id="nonstd" type="checkbox" name="nonstandard" />
-</p><p>
-<b>$lt{'fres'}</b><br />($lt{'stgo'}):
-<label>
-    <input type="radio" name="firstres" value="blank" />$lt{'blnk'}
-</label>
-&nbsp;
-<label>
-    <input type="radio" name="firstres" value="syl" checked />$lt{'sllb'}
-</label>
-&nbsp;
-<label>
-    <input type="radio" name="firstres" value="nav" />$lt{'navi'}
-</label>
-</p>
-</td><td>
-<label>
-    $lt{'gid'}: <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>
-</p>
-<p>
-<h2>$lt{'mssg'}</h2>
-<p>
-<label>
-    <b>$lt{'sgpf'}: </b>
-    <input type="checkbox" name="setpolicy" checked />
-</label>
-<br />
-<label>
-    <b>$lt{'scfg'}: </b>
-    <input type="checkbox" name="setcontent" checked />
-</label>
-</p>
-<h2>$lt{'cmmn'}</h2>
-<p>
-<label>
-    <b>$lt{'dmrd'}: </b>
-    <input type="checkbox" name="disresdis" />
-</label>
-<br />
-<label>
-    <b>$lt{'dmuc'}: </b>
-    <input type="checkbox" name="disablechat" />
-</label>
-</p>
-<h2>$lt{'acco'}</h2>
-<p>
-<label>
-    <b>$lt{'mnak'}: </b>
-    <input type="checkbox" name="setkeys" />
-</label>
-<br />
-<label>
-    <b>$lt{'kaug'}: </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{'grts'}</h2>
-$lt{'grtq'}
-<input type="text" name="crsquota" value="20" />Mb
-</p>
-<hr />
-<h2>$lt{'gc'}</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>
+<input type="button" onClick="verify_message(this.form)" value="'.$lt{'opco'}.'" />'
+        );
+    } elsif ($crstype eq 'Community') {
+        $r->print('
 <p>
 <input type="hidden" name="prevphase" value="groupone" />
 <input type="hidden" name="phase" value="grouptwo" />
-<input type="button" onClick="validate(this.form)" value="$lt{'crgr'}" />
-</p>
-</form>
-ENDDOCUMENT
+<input type="submit" value="'.$lt{'opcm'}.'" />
+</p>'
+        );
     }
-    $r->print($end_page);
+    $r->print('</form>'.
+              $end_page);
 }
 
 # ====================================================== Phase two: make course
@@ -578,7 +558,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') {
@@ -661,23 +641,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);
@@ -685,17 +668,21 @@ sub create_course {
 	&Apache::loncommon::construct_course($args,\$logmsg,\$courseid,
 					     \$crsudom,\$crsunum,
 					     $env{'user.domain'},
-					     $env{'user.name'});
+					     $env{'user.name'},'dc_create');
     $r->print($output);
     if ($success) {
         #
 	# 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,
-						  'cc','','','','','createcourse').'<p>');
+            my $ccrole = 'cc';
+            if ($crstype eq 'Community') {
+                $ccrole = 'co';
+            }    
+	    $r->print(&mt('Assigning role of '.$crstype.' Coordinator to [_1]:',
+			 ,'<i>'.$ccuname.':'.$ccdomain.'</i>')
+		      .&Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid,
+						  $ccrole,'','','','','createcourse').'<p>');
 	}
 	if ($env{'form.setkeys'}) {
 	    $r->print(
@@ -706,71 +693,107 @@ 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 ($r,$show_all_choices) = @_;
     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'),
-                     short_description =>
-    &mt('Create a new course by completing an online form.'),
-                 },
-                   { internal_name => 'groupone',
-                     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 .'),
-                 },
-                   { 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'),
-                     help => 'Batch_Creation',
-                 },
+    # Create menu
+    my @menu;
+    @menu =
+       ({ categorytitle => 'Course/Community Creation',
+       items => [
+          {
+               linktext => 'Create a single course',
+               url => '/adm/createcourse?phase=courseone',
+               permission => 1,
+               #help => '',
+               icon => 'ccrs.png',
+               linktitle => 'Create a new course by completing an online form.'
+          },
+          {
+               linktext => 'Create a single community',
+               url => '/adm/createcourse?phase=groupone',
+               permission => $show_all_choices,
+               #help => '',
+               icon => 'ccrs.png',
+               linktitle => 'Create a new collaborative community by completing an online form.'
+          },
+          {
+               linktext => 'Create courses/communities by uploading an attributes file',
+               url => '/adm/createcourse?phase=batchone',
+               permission => 1,
+               help => 'Batch_Creation',
+               icon => 'ccrs.png',
+               linktitle => 'Upload an attributes file containing specifications for one or more courses or communities in XML format.'
+          },
+       ]
+       },
+       { categorytitle => 'Course/Community Requests',
+       items => [
+           {
+               linktext => 'Approve or reject requests',
+               url => '/adm/createcourse?phase=requestdisplay',
+               permission => $show_all_choices,
+               #help => '',
+               icon => 'ccrs.png',
+               linktitle => 'Display course and community creation requests submitted by authorized users, held pending approval by a Domain Coordinator.'
+           },
+           {
+               linktext => 'Display official course requests',
+               url => '/adm/createcourse?phase=pendingdisplay',
+               permission => $show_all_choices,
+               #help => '',
+               icon => 'ccrs.png',
+               linktitle => 'Display official course requests submitted by authorized users, held pending validation of instructor status.'
+           },
+       ]
+       },
+       { categorytitle => 'Administration',
+       items => [
+           {
+               linktext => 'View creation log',
+               url => '/adm/createcourse?phase=creationlog',
+               permission => $show_all_choices,
+               #help => '',
+               icon => 'document-properties.png',
+               linktitle => 'Display information about when, how and by whom courses and communities were created in this domain.'
+           },
+       ]
+       },
+       );
+
+    $r->print(
+        $start_page
+       .$crumbs
+       .&Apache::lonhtmlcommon::generate_menu(@menu)
+       .$end_page
     );
-    my $options;
-    foreach my $choice (@choices) {
-        $options .='    <h3><a href="/adm/createcourse?phase='.
-            $choice->{'internal_name'}.'" >'.
-            $choice->{'name'}.'</a>';
-        if (exists($choice->{'help'})) {
-            $options .= &Apache::loncommon::help_open_topic($choice->{'help'});
-        }
-        $options .= "</h3>\n".'    '.('&nbsp;'x8).$choice->{'short_description'}.
-            "\n";
-    }
-
-    $r->print(<<ENDDOCUMENT);
-$start_page
-$crumbs
-$options
-$end_page
-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);
-    $r->print('<h3>'.&mt('Upload a courses or groups attributes file').'</h3>');
+    $r->print('<h3>'.&mt('Upload a courses or communities attributes file').'</h3>');
     $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="'.&mt('Create Courses/Communities').'" /></form>');
     $r->print($end_page);
     return;
 }
@@ -778,7 +801,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();
@@ -816,6 +839,377 @@ sub process_batchfile {
  
 }
 
+sub courserequestbrowser_javascript {
+    return <<"ENDREQBRW";
+<script type="text/javascript">
+// <![CDATA[
+var steditbrowser;
+function opencoursereqdisplay(cdom,cnum,queue) {
+    var url = '/adm/requestcourse?action=display';
+    url += '&showdom='+cdom+'&cnum='+cnum+'&queue='+queue;
+    var title = 'Course_Request_Browser';
+    var options = 'scrollbars=1,resizable=1,menubar=0';
+    options += ',width=700,height=600';
+    var stdeditbrowser = open(url,title,options,'1');
+    stdeditbrowser.focus();
+}
+
+// ]]>
+</script>
+ENDREQBRW
+}
+
+sub print_creation_logs {
+    my ($r) = @_;
+    my $formname = 'creationlog';
+    my $dom = $env{'request.role.domain'};
+    $r->print('<form action="/adm/createcourse" method="post" name="'.$formname.'">');
+    # set defaults
+    my $now = time();
+    my $defstart = $now - (7*24*3600); #7 days ago
+    my %defaults = (
+                     page                => '1',
+                     show                => '10',
+                     type                => 'any',
+                     context             => 'any',
+                     created_before_date => $now,
+                     created_after_date  => $defstart,
+                   );
+    my ($contexts,$contextnames) = &context_names();
+    my $more_records = 0;
+    my %curr;
+    foreach my $item ('show','page','type','context') {
+        $curr{$item} = $env{'form.'.$item};
+    }
+    $curr{'created_after_date'} = &Apache::lonhtmlcommon::get_date_from_form('created_after_date');
+    $curr{'created_before_date'} = &Apache::lonhtmlcommon::get_date_from_form('created_before_date');
+    foreach my $key (keys(%defaults)) {
+        if ($curr{$key} eq '') {
+            $curr{$key} = $defaults{$key};
+        }
+    }
+    my %whodunit;
+    $r->print(&creation_display_filter($formname,\%curr));
+    my $showntablehdr = 0;
+    my $tablehdr = &Apache::loncommon::start_data_table().
+                   &Apache::loncommon::start_data_table_header_row().
+                   '<th>&nbsp;</th><th>'.&mt('Creation Date').'</th>'.
+                   '<th>'.&mt('Creator').'</th><th>'.&mt('Description').'</th>'.
+                   '<th>'.&mt('Owner(s)').'</th>';
+    if (($curr{'type'} eq 'official') || ($curr{'type'} eq 'any')) {
+       $tablehdr .= '<th>'.&mt('Institutional Code').'</th>';
+    }
+    if ($curr{'type'} eq 'any') { 
+        $tablehdr .= '<th>'.&mt('Course Type').'</th>';
+    }
+    if ($curr{'context'} eq 'any') {
+        $tablehdr .= '<th>'.&mt('Creation Context').'</th>';
+    }
+    $tablehdr .= &Apache::loncommon::end_data_table_header_row();
+    my ($minshown,$maxshown);
+    $minshown = 1;
+    my $count = 0;
+    if ($curr{'show'} ne &mt('all')) {
+        $maxshown = $curr{'page'} * $curr{'show'};
+        if ($curr{'page'} > 1) {
+            $minshown = 1 + ($curr{'page'} - 1) * $curr{'show'};
+        }
+    }
+    my $crstype = 'Course';
+    if ($curr{'type'} eq 'any') {
+        $crstype = '.';
+    } elsif ($curr{'type'} eq 'community') {
+        $crstype = 'Community';
+    }
+
+    my ($instcodefilter,$regexpok);
+    my (@codetitles,%cat_titles,%cat_order,%cat_items,$officialjs);
+    my ($jscript,$totcodes,$numtitles,$lasttitle) =
+        &Apache::courseclassifier::instcode_selectors_data($dom,$formname,
+                           \%cat_items,\@codetitles,\%cat_titles,\%cat_order,
+                           $officialjs);
+    if ($numtitles) {
+        if (($curr{'type'} eq 'official') || ($curr{'type'} eq 'unofficial')) {
+            $instcodefilter = &instcode_srchstr($dom,$numtitles);
+                &Apache::courseclassifier::instcode_search_str($dom,$numtitles);
+            if ($curr{'type'} eq 'official') {
+                $regexpok = 1;
+            } else {
+                unless ($instcodefilter eq '') {
+                    $regexpok = -1;
+                }
+            }
+        }
+    }
+    if ($instcodefilter eq '') { $instcodefilter = '.'; }
+
+    my $creationcontext = '.';
+    my $context_regexp = join('|',@{$contexts});
+    if ($curr{'context'} =~ /^($context_regexp)$/) {
+        $creationcontext = $curr{'context'};
+    } 
+    my %courses = 
+        &Apache::lonnet::courseiddump($dom,'.',1,$instcodefilter,'.','.',undef,undef,
+                                      $crstype,$regexpok,undef,undef,'1','creationlog',
+                                      undef,undef,undef,$curr{'created_before_date'},
+                                      $curr{'created_after_date'},$creationcontext);
+    foreach my $cid (sort { $courses{$b}{'created'}<=>$courses{$a}{'created'} } (keys(%courses))) {
+        if ($curr{'show'} ne &mt('all')) {
+            if ($count >= $curr{'page'} * $curr{'show'}) {
+                $more_records = 1;
+                last;
+            }
+        }
+        $count ++;
+        next if ($count < $minshown);
+        if (!$showntablehdr) {
+            $r->print($tablehdr);
+            $showntablehdr = 1;
+        }
+        if ($courses{$cid}{'creator'} ne '') {
+            if ($whodunit{$courses{$cid}{'creator'}} eq '') {
+                my ($uname,$udom) = split(':',$courses{$cid}{'creator'});
+                $whodunit{$courses{$cid}{'creator'}} =
+                    &Apache::loncommon::plainname($uname,$udom);
+            }
+        }
+        my $description = $courses{$cid}{'description'};
+        my @owners;
+        my $singleowner = $courses{$cid}{'owner'};
+        push(@owners,$singleowner);
+        if (ref($courses{$cid}{'co-owners'}) eq 'ARRAY') {
+            foreach my $item (@{$courses{$cid}{'co-owners'}}) {
+                push(@owners,$item);
+            }
+        }
+        my %ownernames;
+        foreach my $owner (@owners) {
+            my ($ownername,$ownerdom);     
+            if ($owner =~ /:/) {
+                ($ownername,$ownerdom) = split(/:/,$owner);
+            } else {
+                $ownername = $owner;
+                if ($owner ne '') {
+                    $ownerdom = $dom;
+                }
+            }
+            if ($ownername ne '' && $ownerdom ne '') {
+                unless (ref($ownernames{$ownername.':'.$ownerdom}) eq 'HASH') { 
+                    my %namehash=&Apache::loncommon::getnames($ownername,$ownerdom);
+                    $ownernames{$ownername.':'.$ownerdom} = \%namehash;
+                }
+            }
+        }
+        my @lastnames;
+        foreach my $owner (keys(%ownernames)) {
+            if (ref($ownernames{$owner}) eq 'HASH') {
+                push(@lastnames,$ownernames{$owner}{'lastname'});
+            }
+        }
+        my $ownerlastnames = join(', ',sort(@lastnames));
+        my $showtype;
+        if ($courses{$cid}{type} eq 'Community') {
+            $showtype = &mt('community');
+        } else {
+            my $instcode = $courses{$cid}{inst_code};
+            if ($instcode ne '')  {
+                $showtype = &mt('official');
+            } else {
+                $showtype = &mt('unofficial');
+            }
+        }
+        my $showcontext;
+        
+        if ($courses{$cid}{context} =~ /^($context_regexp)$/) {
+            $showcontext = $contextnames->{$courses{$cid}{context}};
+        }
+        my $created = &Apache::lonlocal::locallocaltime($courses{$cid}{'created'});
+        my ($cdom,$cnum) = split('_',$cid);
+        $r->print(&Apache::loncommon::start_data_table_row()."\n".
+                  '<td>'.$count.'</td><td>'.$created.'</td>'."\n".
+                  '<td>'.$whodunit{$courses{$cid}{creator}}.'</td>'."\n".
+                  '<td>'.$description.'&nbsp;<a href="javascript:ToSyllabus('."'$cdom','$cnum'".')">'.&mt('Syllabus').'</a></td><td>'.$ownerlastnames.'</td>');
+        if (($curr{'type'} eq 'official') || ($curr{'type'} eq 'any')) {
+            $r->print('<td>'.$courses{$cid}{'inst_code'}.'</td>');
+        }
+        if ($curr{'type'} eq 'any') {
+            $r->print('<td>'.$showtype.'</td>');
+        }
+        if ($curr{'context'} eq 'any') {
+            $r->print('<td>'.$showcontext.'</td>');
+        }
+        $r->print('<td>'.&Apache::loncommon::end_data_table_row()."\n");
+    }
+    if ($showntablehdr) {
+        $r->print(&Apache::loncommon::end_data_table().'<br />');
+        if (($curr{'page'} > 1) || ($more_records)) {
+            $r->print('<table><tr>');
+            if ($curr{'page'} > 1) {
+                $r->print('<td><a href="javascript:chgPage('."'previous'".');">'.&mt('Previous [_1] changes',$curr{'show'}).'</a></td>');
+            }
+            if ($more_records) {
+                $r->print('<td><a href="javascript:chgPage('."'next'".');">'.&mt('Next [_1] changes',$curr{'show'}).'</a></td>');
+            }
+            $r->print('</tr></table>');
+            $r->print(<<"ENDSCRIPT");
+<script type="text/javascript">
+// <![CDATA[
+function chgPage(caller) {
+    if (caller == 'previous') {
+        document.$formname.page.value --;
+    }
+    if (caller == 'next') {
+        document.$formname.page.value ++;
+    }
+    document.$formname.submit();
+    return;
+}
+// ]]>
+</script>
+ENDSCRIPT
+        }
+    } else {
+        $r->print('<p class="LC_info">'.
+                  &mt('There are no records to display').
+                  '</p>');
+    }
+    $r->print('<input type="hidden" name="page" value="'.$curr{'page'}.'" />'.
+              '<input type="hidden" name="phase" value="creationlog" /></form>');
+    return;
+}
+
+sub creation_display_filter {
+    my ($formname,$curr) = @_;
+    my $nolink = 1;
+    my ($contexts,$contextnames) = &context_names();
+    my $output = '<table><tr><td valign="top">'.
+                 '<span class="LC_nobreak"><b>'.&mt('Records/page:').'</b></span><br />'.
+                 &Apache::lonmeta::selectbox('show',$curr->{'show'},undef,
+                                              (&mt('all'),5,10,20,50,100,1000,10000)).
+                 '</td><td>&nbsp;&nbsp;</td>';
+    my $startform =
+        &Apache::lonhtmlcommon::date_setter($formname,'created_after_date',
+                                            $curr->{'created_after_date'},undef,
+                                            undef,undef,undef,undef,undef,undef,$nolink);
+    my $endform =
+        &Apache::lonhtmlcommon::date_setter($formname,'created_before_date',
+                                            $curr->{'created_before_date'},undef,
+                                            undef,undef,undef,undef,undef,undef,$nolink);
+    $output .= '<td valign="top"><b>'.&mt('Window during which course/community was created:').'</b><br />'.
+               '<table><tr><td>'.&mt('After:').
+               '</td><td>'.$startform.'</td></tr>'.
+               '<tr><td>'.&mt('Before:').'</td>'.
+               '<td>'.$endform.'</td></tr></table>'.
+               '</td>'.
+               '<td>&nbsp;&nbsp;</td>';
+    my ($types,$typenames) = &Apache::loncommon::course_types();
+    if (ref($types) eq 'ARRAY') {
+        if (@{$types} > 1) {
+            $output .= '<td valign="top"><b>'.
+                       &mt('Course Type:').'</b><br /><select name="type">';
+            my $selstr = '';
+            if ($curr->{'type'} eq 'any') {
+                $selstr = ' selected="selected"';
+            }
+            $output .= '<option value="any"'.$selstr.'>'.&mt('Any').'</option>'."\n";
+            foreach my $type (@{$types}) {
+                my $selstr = '';
+                if ($curr->{'type'} eq $type) {
+                    $selstr = ' selected="selected"';
+                }
+                my $typename = $type;
+                if (ref($typenames) eq 'HASH') {
+                    if ($typenames->{$type} ne '') {
+                        $typename = $typenames->{$type};
+                    }
+                }
+                $output .= '<option value="'.$type.'"'.$selstr.'>'.$typename.'</option>'."\n";
+            }
+            $output .= '</select></td>';
+        }
+    }
+    $output .= '<td>&nbsp;&nbsp;</td>'.
+               '<td valign="top"><b>'.
+               &mt('Creation Context:').'</b><br /><select name="context">';
+    foreach my $context ('any',@{$contexts}) {
+        my $selstr = '';
+        if ($curr->{'context'} eq $context) {
+            $selstr = ' selected="selected"';
+        }
+        $output .= '<option value="'.$context.'"'.$selstr.'>';
+        if ($context eq 'any') {
+            $output .= &mt('Any');
+        } else {
+            $output .= $contextnames->{$context};
+        }
+        $output .= '</option>'."\n";
+    }
+    $output .= '</select></td>'.
+               '</tr></table>';
+
+    # Update Display button
+    $output .= '<p>'.
+               '<input type="submit" value="'.&mt('Update Display').'" />'.
+               '</p><hr />';
+    return $output;
+}
+
+sub context_names {
+    my @contexts = qw(auto web dc_create requestcourses);
+    my %contextnames = 
+        &Apache::lonlocal::texthash (
+                        auto           => 'Automated creation from batch file',
+                        web            => 'Batch creation from uploaded file',
+                        dc_create      => 'Course or community created by Dom. Coord.', 
+                        requestcourses => 'Processing of submitted course request',
+        );
+    return (\@contexts,\%contextnames);
+}
+
+sub instcode_srchstr {
+    my ($domain,$numtitles) = @_;
+    my $instcode;
+    if (defined($numtitles) && $numtitles == 0) {
+        $instcode = '.+';
+    } else {
+        my (%codedefaults,@code_order);
+        my $defaults_result =
+            &Apache::lonnet::auto_instcode_defaults($domain,\%codedefaults,
+                                                    \@code_order);
+        if ($defaults_result eq 'ok') {
+            $instcode ='^';
+            foreach my $item (@code_order) {
+                $instcode .= $codedefaults{$item};
+            }
+            $instcode .= '$';
+        } else {
+            $instcode = '.+';
+        }
+    }
+    return $instcode;
+}
+
+sub syllabuslink_javascript {
+    return <<"ENDJS";
+
+function ToSyllabus(cdom,cnum) {
+    if (cdom == '' || cdom == null) {
+        return;
+    }
+    if (cnum == '' || cnum == null) {
+        return;
+    }
+    var options = 'height=600,width=800,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no';
+    var url = "/public/"+cdom+"/"+cnum+"/syllabus";
+    syllwin = window.open(url,'',options,1);
+    syllwin.focus();
+    return;
+}
+
+ENDJS
+
+}
+
 # ===================================================================== Handler
 sub handler {
     my $r = shift;
@@ -826,6 +1220,13 @@ sub handler {
        return OK;
     }
 
+    my $show_all_choices = 0;
+    my $primary_rev = &Apache::lonnet::get_server_loncaparev($env{'request.role.domain'});
+    if (($primary_rev ne 'refused') && ($primary_rev ne 'error') &&
+        ($primary_rev ne 'unknown_cmd') && ($primary_rev ne 'no_such_host')) {
+        $show_all_choices = 1;
+    }
+
     if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) {
        &Apache::loncommon::content_type($r,'text/html');
        $r->send_http_header;
@@ -838,7 +1239,8 @@ sub handler {
             text=>"Creation Options",
             faq=>79,bug=>'Dom Coord Interface',});
        if (($env{'form.phase'} eq 'coursetwo') ||
-           ($env{'form.phase'} eq 'grouptwo')) {
+           (($env{'form.phase'} eq 'grouptwo') && 
+            ($show_all_choices))) { 
            &Apache::lonhtmlcommon::add_breadcrumb
                  ({href=>"/adm/createcourse?phase=$env{'form.prevphase'}",
                    text=>&mt('[_1] Creation Settings',),
@@ -849,7 +1251,8 @@ sub handler {
                    faq=>9,bug=>'Dom Coord Interface',});
            &create_course($r);
        } elsif (($env{'form.phase'} eq 'courseone') || 
-                ($env{'form.phase'} eq 'groupone')) {
+                (($env{'form.phase'} eq 'groupone') && 
+                ($show_all_choices))) {
            &Apache::lonhtmlcommon::add_breadcrumb
                  ({href=>"/adm/createcourse?phase=$env{'form.phase'}",
                    text=>&mt('[_1] Creation Settings',),
@@ -871,12 +1274,84 @@ sub handler {
                    text=>"Creation Outcome",
                    faq=>9,bug=>'Dom Coord Interface',});
            &process_batchfile($r);
+       } elsif (($env{'form.phase'} eq 'requestdisplay') && ($show_all_choices)) {
+           &Apache::lonhtmlcommon::add_breadcrumb
+                 ({href=>"/adm/createcourse?phase=$env{'form.phase'}",
+                   text=>&mt('[_1] Display Request Queue',),
+                   faq=>9,bug=>'Dom Coord Interface',});
+           my $js = &courserequestbrowser_javascript();
+           my $start_page=&Apache::loncommon::start_page('Display Requests',$js);
+           my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Display Requests','Course_Request',undef,'Course_Request');
+           $r->print($start_page.$crumbs."\n".'<div>'.
+                     &Apache::loncoursequeueadmin::display_queued_requests(
+                         'domain',$env{'request.role.domain'}).'</div>'.
+                     &Apache::loncommon::end_page());
+       } elsif (($env{'form.phase'} eq 'requestchange') && ($show_all_choices)) {
+           if ($env{'form.queue'} eq 'pending') {
+               &Apache::lonhtmlcommon::add_breadcrumb
+                   ({href=>"/adm/createcourse?phase=pendingdisplay",
+                     text=>&mt('Display Pending Queue',),
+                     faq=>9,bug=>'Dom Coord Interface',});
+           } else {
+               &Apache::lonhtmlcommon::add_breadcrumb
+                     ({href=>"/adm/createcourse?phase=requestdisplay",
+                       text=>&mt('[_1] Display Request Queue',),
+                       faq=>9,bug=>'Dom Coord Interface',});
+           }
+           &Apache::lonhtmlcommon::add_breadcrumb
+               ({href=>"/adm/createcourse?phase=requestchange",
+                 text=>&mt('[_1] Requests Updated',),
+                 faq=>9,bug=>'Dom Coord Interface',},);
+           my $start_page=&Apache::loncommon::start_page('Update Requests Result');
+           my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Requests Updated','Course_Request',undef,'Course_Request');
+           $r->print($start_page.$crumbs."\n".'<div>'.
+                     &Apache::loncoursequeueadmin::update_request_queue(
+                     'domain',$env{'request.role.domain'}).'</div>'.
+                     &Apache::loncommon::end_page());
+       } elsif (($env{'form.phase'} eq 'pendingdisplay') && ($show_all_choices)) {
+           &Apache::lonhtmlcommon::add_breadcrumb
+                 ({href=>"/adm/createcourse?phase=$env{'form.phase'}",
+                   text=>&mt('Display Pending Queue',),
+                   faq=>9,bug=>'Dom Coord Interface',});
+           my $js = &courserequestbrowser_javascript();
+           my $start_page=&Apache::loncommon::start_page('Display Pending Queue',$js);
+           my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Display Pending Queue','Course_Request',undef,'Course_Request');
+           $r->print($start_page.$crumbs."\n".'<div>'.
+                     &Apache::loncoursequeueadmin::display_queued_requests(
+                         'pending',$env{'request.role.domain'}).'</div>'.
+                     &Apache::loncommon::end_page());
+       } elsif (($env{'form.phase'} eq 'requestvalidation') && ($show_all_choices)) {
+           my $js = &courserequestbrowser_javascript();
+           &Apache::lonhtmlcommon::add_breadcrumb
+                 ({href=>"/adm/createcourse?phase=pendingdisplay",
+                   text=>&mt('Display Pending Queue'),},
+                 {href=>"/adm/createcourse?phase=requestvalidation",
+                   text=>&mt('Validation Attempted'),},);
+           my $start_page=&Apache::loncommon::start_page('Requests Validation Result',$js);
+           my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Validation Attempted','Course_Request',undef,'Course_Request');
+           $r->print($start_page.$crumbs."\n".'<div>'.
+                     &Apache::loncoursequeueadmin::process_official_reqs('domain',$env{'request.role.domain'}).'</div>'.
+                     &Apache::loncommon::end_page());
+       } elsif (($env{'form.phase'} eq 'creationlog') && ($show_all_choices)) {
+           &Apache::lonhtmlcommon::add_breadcrumb
+                 ({href=>"/adm/createcourse?phase=creationlog",
+                   text=>&mt('[_1] Display Creation History',),});
+           my $js = '<script type="text/javascript">'."\n".
+                    '// <![CDATA['."\n".
+                    &syllabuslink_javascript()."\n".
+                    '// ]]>'."\n".
+                    '</script>';
+           my $start_page=&Apache::loncommon::start_page('Course/Community Creation Logs',$js);
+           my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Created Courses/Communities','Creation_Log',undef,'Creation_Log');
+           $r->print($start_page.$crumbs."\n".'<div>');
+           &print_creation_logs($r);
+           $r->print('</div>'.&Apache::loncommon::end_page());
        } else {
-           &print_intro_page($r);
+           &print_intro_page($r,$show_all_choices);
        }
    } else {
       $env{'user.error.msg'}=
-        "/adm/createcourse:ccc:0:0:Cannot create courses or groups";
+        "/adm/createcourse:ccc:0:0:Cannot create courses or communities";
       return HTTP_NOT_ACCEPTABLE; 
    }
    return OK;