--- loncom/interface/loncreateuser.pm	2010/10/08 01:59:39	1.351
+++ loncom/interface/loncreateuser.pm	2012/06/01 11:39:24	1.361
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Create a user
 #
-# $Id: loncreateuser.pm,v 1.351 2010/10/08 01:59:39 raeburn Exp $
+# $Id: loncreateuser.pm,v 1.361 2012/06/01 11:39:24 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -223,6 +223,7 @@ sub build_tools_display {
     my %lt = &Apache::lonlocal::texthash (
                    'blog'       => "Personal User Blog",
                    'aboutme'    => "Personal Information Page",
+                   'webdav'     => "WebDAV access to authoring spaces (if SSL and author/co-author)",
                    'portfolio'  => "Personal User Portfolio",
                    'avai'       => "Available",
                    'cusa'       => "availability",
@@ -248,8 +249,9 @@ sub build_tools_display {
         $isadv = &Apache::lonnet::is_advanced_user($ccuname,$ccdomain);
     } else {
         %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
-                          'tools.aboutme','tools.portfolio','tools.blog');
-        @usertools = ('aboutme','blog','portfolio');
+                          'tools.aboutme','tools.portfolio','tools.blog',
+                          'tools.webdav');
+        @usertools = ('aboutme','blog','webdav','portfolio');
     }
     foreach my $item (@usertools) {
         my ($custom_access,$curr_access,$cust_on,$cust_off,$tool_on,$tool_off,
@@ -356,7 +358,7 @@ sub build_tools_display {
             $currdisp = ($curr_access?&mt('Yes'):&mt('No'));
             $custdisp = '<span class="LC_nobreak"><label>'.
                         '<input type="radio" name="'.$context.'_'.$item.'"'.
-                        ' value="1"'. $tool_on.'/>'.&mt('On').'</label>&nbsp;<label>'.
+                        ' value="1" '.$tool_on.'/>'.&mt('On').'</label>&nbsp;<label>'.
                         '<input type="radio" name="'.$context.'_'.$item.'" value="0" '.
                         $tool_off.'/>'.&mt('Off').'</label></span>';
             $custradio = ('&nbsp;'x2).'--'.$lt{'cusa'}.':&nbsp;'.$custdisp.
@@ -638,7 +640,6 @@ END
 
 sub entry_form {
     my ($dom,$srch,$forcenewuser,$context,$responsemsg,$crstype) = @_;
-    my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom);
     my ($usertype,$inexact);
     if (ref($srch) eq 'HASH') {
         if (($srch->{'srchin'} eq 'dom') &&
@@ -646,9 +647,10 @@ sub entry_form {
             ($srch->{'srchtype'} eq 'exact') &&
             ($srch->{'srchdomain'} ne '') &&
             ($srch->{'srchterm'} ne '')) {
+            my (%curr_rules,%got_rules);
             my ($rules,$ruleorder) =
                 &Apache::lonnet::inst_userrules($srch->{'srchdomain'},'username');
-            $usertype = &Apache::lonuserutils::check_usertype($srch->{'srchdomain'},$srch->{'srchterm'},$rules);
+            $usertype = &Apache::lonuserutils::check_usertype($srch->{'srchdomain'},$srch->{'srchterm'},$rules,\%curr_rules,\%got_rules);
         } else {
             $inexact = 1;
         }
@@ -742,19 +744,13 @@ sub user_modification_js {
 <script type="text/javascript" language="Javascript">
 // <![CDATA[
 
-    function pclose() {
-        parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",
-                 "height=350,width=350,scrollbars=no,menubar=no");
-        parmwin.close();
-    }
-
     $pjump_def
     $dc_setcourse_code
 
     function dateset() {
         eval("document.cu."+document.cu.pres_marker.value+
             ".value=document.cu.pres_value.value");
-        pclose();
+        modalWindow.close();
     }
 
     $nondc_setsection_code
@@ -942,7 +938,8 @@ sub print_user_modification_page {
         my ($rules,$ruleorder) =
             &Apache::lonnet::inst_userrules($ccdomain,'username');
             $usertype =
-                &Apache::lonuserutils::check_usertype($ccdomain,$ccuname,$rules);
+                &Apache::lonuserutils::check_usertype($ccdomain,$ccuname,$rules,
+                                                       \%curr_rules,\%got_rules);
         my $cancreate =
             &Apache::lonuserutils::can_create_user($ccdomain,$context,
                                                    $usertype);
@@ -1261,7 +1258,7 @@ ENDNOPORTPRIV
             if (&Apache::lonnet::allowed('mut',$env{'request.role.domain'})) {
                 my %lt=&Apache::lonlocal::texthash(
                     'utav'  => "User Tools Availability",
-                    'yodo'  => "You do not have privileges to modify Portfolio, Blog or Personal Information Page settings for this user.",
+                    'yodo'  => "You do not have privileges to modify Portfolio, Blog, WebDAV, or Personal Information Page settings for this user.",
                     'ifch'  => "If a change is required, contact a domain coordinator for the domain",
                 );
                 $user_tools_text = <<ENDNOTOOLSPRIV;
@@ -1321,7 +1318,7 @@ ENDNOTOOLSPRIV
             $addrolesdisplay = &new_coauthor_roles($r,$ccuname,$ccdomain);
         }
         if ($context eq 'domain') {
-            my $add_domainroles = &new_domain_roles($r);
+            my $add_domainroles = &new_domain_roles($r,$ccdomain);
             if (!$addrolesdisplay) {
                 $addrolesdisplay = $add_domainroles;
             }
@@ -1346,7 +1343,7 @@ ENDNOTOOLSPRIV
     }
     $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','userrole','ccdomain','prevphase','currstate','ccuname','ccdomain']));
     $r->print('<input type="hidden" name="currstate" value="" />');
-    $r->print('<input type="hidden" name="prevphase" value="'.$env{'form.phase'}.'" />');
+    $r->print('<input type="hidden" name="prevphase" value="'.$env{'form.phase'}.'" /></form>');
     return;
 }
 
@@ -1470,8 +1467,7 @@ sub display_existing_roles {
             $rolesdump{$newkey} = $newvalue;
         }
     } else {
-        my $extra = &Apache::lonnet::freeze_escape({'skipcheck' => 1});
-        %rolesdump=&Apache::lonnet::dump('roles',$ccdomain,$ccuname,'.',undef,$extra);
+        %rolesdump=&Apache::lonnet::dump('roles',$ccdomain,$ccuname);
     }
     # Build up table of user roles to allow revocation and re-enabling of roles.
     my ($tmp) = keys(%rolesdump);
@@ -1764,7 +1760,7 @@ sub new_coauthor_roles {
 }
 
 sub new_domain_roles {
-    my ($r) = @_;
+    my ($r,$ccdomain) = @_;
     my $addrolesdisplay = 0;
     #
     # Domain level
@@ -1782,6 +1778,7 @@ sub new_domain_roles {
     foreach my $thisdomain (sort(&Apache::lonnet::all_domains())) {
         foreach my $role (@allroles) {
             next if ($role eq 'ad');
+            next if (($role eq 'au') && ($ccdomain ne $thisdomain));
             if (&Apache::lonnet::allowed('c'.$role,$thisdomain)) {
                my $plrole=&Apache::lonnet::plaintext($role);
                my %lt=&Apache::lonlocal::texthash(
@@ -2317,7 +2314,7 @@ sub update_user_data {
 
     my (%alerts,%rulematch,%inst_results,%curr_rules);
     my @userinfo = ('firstname','middlename','lastname','generation','permanentemail','id');
-    my @usertools = ('aboutme','blog','portfolio');
+    my @usertools = ('aboutme','blog','webdav','portfolio');
     my @requestcourses = ('official','unofficial','community');
     my ($othertitle,$usertypes,$types) = 
         &Apache::loncommon::sorted_inst_types($env{'form.ccdomain'});
@@ -2470,10 +2467,10 @@ sub update_user_data {
         my %userenv = &Apache::lonnet::get
             ('environment',['firstname','middlename','lastname','generation',
              'id','permanentemail','portfolioquota','inststatus','tools.aboutme',
-             'tools.blog','tools.portfolio','requestcourses.official',
-             'requestcourses.unofficial','requestcourses.community',
-             'reqcrsotherdom.official','reqcrsotherdom.unofficial',
-             'reqcrsotherdom.community'],
+             'tools.blog','tools.webdav','tools.portfolio',
+             'requestcourses.official','requestcourses.unofficial',
+             'requestcourses.community','reqcrsotherdom.official',
+             'reqcrsotherdom.unofficial','reqcrsotherdom.community'],
               $env{'form.ccdomain'},$env{'form.ccuname'});
         my ($tmp) = keys(%userenv);
         if ($tmp =~ /^(con_lost|error)/i) { 
@@ -2923,6 +2920,7 @@ sub display_userinfo {
          'permanentemail' => 'Permanent e-mail address',
          'quota'          => 'Disk space allocated to portfolio files',
          'blog'           => 'Blog Availability',
+         'webdav'         => 'WebDAV Availability',
          'aboutme'        => 'Personal Information Page Availability',
          'portfolio'      => 'Portfolio Availability',
          'official'       => 'Can Request Official Courses',
@@ -3929,21 +3927,22 @@ sub set_custom_role {
                  .$jsback."\n"
                  .'// ]]>'."\n"
                  .'</script>'."\n";
-    my $brcrum = [{href => "javascript:backPage(document.customresult,'pickrole','')",
-                   text => "Pick custom role",
-                   faq  => 282,
-                   bug  => 'Instructor Interface',},
-                  {href => "javascript:backPage(document.customresult,'selected_custom_edit','')",
-                   text => "Edit custom role",
-                   faq  => 282,
-                   bug  => 'Instructor Interface',},
-                  {href => "javascript:backPage(document.customresult,'set_custom_roles','')",
-                   text => "Result",
-                   faq  => 282,
-                   bug  => 'Instructor Interface',
-                   help => 'Course_Editing_Custom_Roles'},
-                 ];
-    my $args = { bread_crumbs          => $brcrum,
+    push(@{$brcrum},
+        {href => "javascript:backPage(document.customresult,'pickrole','')",
+         text => "Pick custom role",
+         faq  => 282,
+         bug  => 'Instructor Interface',},
+        {href => "javascript:backPage(document.customresult,'selected_custom_edit','')",
+         text => "Edit custom role",
+         faq  => 282,
+         bug  => 'Instructor Interface',},
+        {href => "javascript:backPage(document.customresult,'set_custom_roles','')",
+         text => "Result",
+         faq  => 282,
+         bug  => 'Instructor Interface',
+         help => 'Course_Editing_Custom_Roles'},
+        );
+    my $args = { bread_crumbs           => $brcrum,
                  bread_crumbs_component => 'User Management'}; 
     $r->print(&Apache::loncommon::start_page('Save Custom Role',$jscript,$args));
 
@@ -4039,6 +4038,10 @@ sub handler {
     my ($permission,$allowed) = 
         &Apache::lonuserutils::get_permission($context,$crstype);
     if (!$allowed) {
+        if ($context eq 'course') {
+            $r->internal_redirect('/adm/viewclasslist');
+            return OK;
+        }
         $env{'user.error.msg'}=
             "/adm/createuser:cst:0:0:Cannot create/modify user data ".
                                  "or view user status.";
@@ -4383,12 +4386,12 @@ sub print_main_menu {
                 course => {
                             upload     => 'Upload a File of Course Users',
                             singleuser => 'Add/Modify a Course User',
-                            listusers  => 'Manage Course Users',
+                            listusers  => 'List and Modify Multiple Course Users',
                             },
                 community => {
                             upload     => 'Upload a File of Community Users',
                             singleuser => 'Add/Modify a Community User',
-                            listusers  => 'Manage Community Users',
+                            listusers  => 'List and Modify Multiple Community Users',
                            },
                 );
      my %linktitles = (
@@ -6205,8 +6208,8 @@ sub course_level_dc {
     my $hiddenitems = '<input type="hidden" name="dcdomain" value="'.$dcdom.'" />'.
                       '<input type="hidden" name="origdom" value="'.$dcdom.'" />'.
                       '<input type="hidden" name="dccourse" value="" />';
-    my $courseform='<b>'.&Apache::loncommon::selectcourse_link
-            ('cu','dccourse','dcdomain','coursedesc',undef,undef,'Course/Community','crstype').'</b>';
+    my $courseform=&Apache::loncommon::selectcourse_link
+            ('cu','dccourse','dcdomain','coursedesc',undef,undef,'Select','crstype');
     my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'currsec','cu','role','Course/Community Browser');
     my %lt=&Apache::lonlocal::texthash(
                     'rol'  => "Role",
@@ -6216,15 +6219,17 @@ sub course_level_dc {
                     'sta'  => "Start",
                     'end'  => "End",
                     'ssd'  => "Set Start Date",
-                    'sed'  => "Set End Date"
+                    'sed'  => "Set End Date",
+                    'scc'  => "Course/Community"
                   );
     my $header = '<h4>'.&mt('Course/Community Level').'</h4>'.
                  &Apache::loncommon::start_data_table().
                  &Apache::loncommon::start_data_table_header_row().
-                 '<th>'.$courseform.'</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'grs'}.'</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th>'.
+                 '<th>'.$lt{'scc'}.'</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'grs'}.'</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th>'.
                  &Apache::loncommon::end_data_table_header_row();
     my $otheritems = &Apache::loncommon::start_data_table_row()."\n".
-                     '<td><br /><input type="text" name="coursedesc" value="" onfocus="this.blur();opencrsbrowser('."'cu','dccourse','dcdomain','coursedesc','','','','crstype'".')" /></td>'."\n".
+                     '<td><br /><span class="LC_nobreak"><input type="text" name="coursedesc" value="" onfocus="this.blur();opencrsbrowser('."'cu','dccourse','dcdomain','coursedesc','','','','crstype'".')" />'.
+                     $courseform.('&nbsp;' x4).'</span></td>'."\n".
                      '<td valign><br /><select name="role">'."\n";
     foreach my $role (@roles) {
         my $plrole=&Apache::lonnet::plaintext($role);