--- loncom/interface/lonuserutils.pm	2007/12/21 15:22:01	1.19
+++ loncom/interface/lonuserutils.pm	2007/12/21 20:34:26	1.21
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Utility functions for managing LON-CAPA user accounts
 #
-# $Id: lonuserutils.pm,v 1.19 2007/12/21 15:22:01 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.21 2007/12/21 20:34:26 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -771,7 +771,7 @@ sub forceid_change {
 ###############################################################
 ###############################################################
 sub print_upload_manager_form {
-    my ($r,$context) = @_;
+    my ($r,$context,$permission) = @_;
     my $firstLine;
     my $datatoken;
     if (!$env{'form.datatoken'}) {
@@ -2423,7 +2423,7 @@ ENDTWO
 }
 
 sub date_section_selector {
-    my ($context) = @_;
+    my ($context,$permission) = @_;
     my $callingform = $env{'form.callingform'};
     my $formname = 'dateselect';  
     my $groupslist = &get_groupslist();
@@ -2502,7 +2502,8 @@ END
             $starttime = time;
         }
         $date_items = &date_setting_table($starttime,undef,$context,
-                                          $env{'form.bulkaction'});
+                                          $env{'form.bulkaction'},$formname,
+                                          $permission);
     }
     $output .= '<h3>'.$headertext.'</h3>'.
                '<form name="'.$formname.'" method="post">'."\n".
@@ -2536,17 +2537,8 @@ END
             $info = '<input type="hidden" name="retainsec" value="0" />'; 
         }
         my $sections_select .= &course_sections(\%sections_count,$env{'form.showrole'});
-        my $secbox = '<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n".
-                     &Apache::lonhtmlcommon::row_title(&mt('New section to assign'),'LC_oddrow_value')."\n".
-                     '<table class="LC_createuser"><tr class="LC_section_row">'."\n".
-                     '<td align="center">'.&mt('Existing sections')."\n".
-                     '<br />'.$sections_select.'</td><td align="center">'.
-                     &mt('New section').'<br />'."\n".
-                     '<input type="text" name="newsec" size="15" />'."\n".
-                     '<input type="hidden" name="sections" value="" />'."\n".
-                     '</td></tr></table>'."\n".
-                     &Apache::lonhtmlcommon::row_closure(1)."\n".
-                     &Apache::lonhtmlcommon::end_pick_box().'</p>';
+        my $rowtitle = &mt('New section to assign');
+        my $secbox = &section_picker($cdom,$cnum,$env{'form.showrole'},$rowtitle,$permission,$context);
         $output .= $info.$secbox;
     }
     $output .= '<p>'.
@@ -2883,7 +2875,7 @@ sub print_first_users_upload_form {
 
 # ================================================= Drop/Add from uploaded file
 sub upfile_drop_add {
-    my ($r,$context) = @_;
+    my ($r,$context,$permission) = @_;
     &Apache::loncommon::load_tmp_file($r);
     my @userdata=&Apache::loncommon::upfile_record_sep();
     if($env{'form.noFirstLine'}){shift(@userdata);}
@@ -3810,6 +3802,61 @@ sub can_create_user {
     return $cancreate;
 }
 
+sub can_modify_userinfo {
+    my ($context,$dom,$fields,$userroles) = @_;
+    my %domconfig =
+       &Apache::lonnet::get_dom('configuration',['usermodification'],
+                                $dom);
+    my %canmodify;
+    if (ref($fields) eq 'ARRAY') {
+        foreach my $field (@{$fields}) {
+            $canmodify{$field}  = 0;
+            if (&Apache::lonnet::allowed('mau',$dom)) {
+                $canmodify{$field} = 1;
+            } else {
+                if (ref($domconfig{'usermodification'}) eq 'HASH') {
+                    if (ref($domconfig{'usermodification'}{$context}) eq 'HASH') {
+                        if (ref($userroles) eq 'ARRAY') {
+                            foreach my $role (@{$userroles}) {
+                                my $testrole;
+                                if ($role =~ /^cr\//) {
+                                    $testrole = 'cr';
+                                } else {
+                                    $testrole = $role;
+                                }
+                                if (ref($domconfig{'usermodification'}{$context}{$testrole}) eq 'HASH') {
+                                    if ($domconfig{'usermodification'}{$context}{$testrole}{$field}) {
+                                        $canmodify{$field} = 1;
+                                        last;
+                                    }
+                                }
+                            }
+                        } else {
+                            foreach my $key (keys(%{$domconfig{'usermodification'}{$context}})) {
+                                if (ref($domconfig{'usermodification'}{$context}{$key}) eq 'HASH') {
+                                    if ($domconfig{'usermodification'}{$context}{$key}{$field}) {
+                                        $canmodify{$field} = 1;
+                                        last;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                } elsif ($context eq 'course') {
+                    if (ref($userroles) eq 'ARRAY') {
+                        if (grep(/^st$/,@{$userroles})) {
+                            $canmodify{$field} = 1;
+                        }
+                    } else {
+                        $canmodify{$field} = 1;
+                    }
+                }
+            }
+        }
+    }
+    return %canmodify;
+}
+
 sub check_usertype {
     my ($dom,$uname,$rules) = @_;
     my $usertype;