Diff for /loncom/interface/lonuserutils.pm between versions 1.109.2.7 and 1.111

version 1.109.2.7, 2010/11/08 21:11:14 version 1.111, 2010/01/14 18:06:14
Line 36  use Apache::loncommon(); Line 36  use Apache::loncommon();
 use Apache::lonhtmlcommon;  use Apache::lonhtmlcommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::longroup;  use Apache::longroup;
 use Apache::lonnavmaps;  
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   
 ###############################################################  ###############################################################
Line 296  sub hidden_input { Line 295  sub hidden_input {
 }  }
   
 sub print_upload_manager_header {  sub print_upload_manager_header {
     my ($r,$datatoken,$distotal,$krbdefdom,$context,$permission,$crstype,$formname,      my ($r,$datatoken,$distotal,$krbdefdom,$context,$permission,$crstype)=@_;
         $can_assign)=@_;  
     my $javascript;      my $javascript;
     #      #
     if (! exists($env{'form.upfile_associate'})) {      if (! exists($env{'form.upfile_associate'})) {
Line 311  sub print_upload_manager_header { Line 309  sub print_upload_manager_header {
         }          }
     }      }
     if ($env{'form.upfile_associate'} eq 'reverse') {      if ($env{'form.upfile_associate'} eq 'reverse') {
         $javascript=&upload_manager_javascript_reverse_associate($can_assign);          $javascript=&upload_manager_javascript_reverse_associate();
     } else {      } else {
         $javascript=&upload_manager_javascript_forward_associate($can_assign);          $javascript=&upload_manager_javascript_forward_associate();
     }      }
     #      #
     # Deal with restored settings      # Deal with restored settings
Line 327  sub print_upload_manager_header { Line 325  sub print_upload_manager_header {
         $password_choice = 'int';          $password_choice = 'int';
     }      }
     #      #
     my ($sectionjs,$groupslist);      my $groupslist;
     if ($context eq 'course') {      if ($context eq 'course') {
         $groupslist = &get_groupslist();          $groupslist = &get_groupslist();
         if ($env{'form.context'} eq 'requestcrs') {  
             $sectionjs = <<"ENDJS";  
   
 function toggleSectionsDefault() {  
     var usingsecs;  
     if (document.$formname.usesection.length > 1) {  
         for (var i=0; i<document.$formname.usesection.length; i++) {  
             if (document.$formname.usesection[i].checked) {  
                 usingsecs = document.$formname.usesection[i].value;  
             }  
         }  
     }  
     if (usingsecs == 1) {  
         document.getElementById('defaultsec').style.display="block";  
     } else {  
         document.getElementById('defaultsec').style.display="none";  
         document.$formname.newsec.value = "";  
         document.$formname.sections.value = "";  
     }  
     return;  
 }  
 ENDJS  
         }  
     }      }
     my $javascript_validations =      my $javascript_validations =
         &javascript_validations('upload',$krbdefdom,$password_choice,undef,          &javascript_validations('upload',$krbdefdom,$password_choice,undef,
Line 365  ENDJS Line 340  ENDJS
              ."</p>\n");               ."</p>\n");
     $r->print('<div class="LC_left_float"><h3>'.      $r->print('<div class="LC_left_float"><h3>'.
               &mt('Identify fields in uploaded list')."</h3>\n");                &mt('Identify fields in uploaded list')."</h3>\n");
     $r->print(&mt('Enter as many fields as you can.').'<br />'.      $r->print(&mt('Enter as many fields as you can.<br /> The system will inform you and bring you back to this page, <br /> if the data selected are insufficient to add users.')."<br />\n");
               &mt('The system will inform you and bring you back to this page,').  
               '<br />'.&mt('if the data selected are insufficient to add users.')."<br />\n");  
     $r->print(&hidden_input('action','upload').      $r->print(&hidden_input('action','upload').
               &hidden_input('state','got_file').                &hidden_input('state','got_file').
               &hidden_input('associate','').                &hidden_input('associate','').
               &hidden_input('datatoken',$datatoken).                &hidden_input('datatoken',$datatoken).
               &hidden_input('fileupload',$env{'form.fileupload'}).                &hidden_input('fileupload',$env{'form.fileupload'}).
               &hidden_input('upfiletype',$env{'form.upfiletype'}).                &hidden_input('upfiletype',$env{'form.upfiletype'}).
               &hidden_input('upfile_associate',$env{'form.upfile_associate'}).                &hidden_input('upfile_associate',$env{'form.upfile_associate'}));
               &hidden_input('context',$env{'form.context'}));  
     $r->print('<br /><label><input type="checkbox" name="noFirstLine"'.$checked.' />'.      $r->print('<br /><label><input type="checkbox" name="noFirstLine"'.$checked.' />'.
               &mt('Ignore First Line').'</label><br />');                &mt('Ignore First Line').'</label><br />');
     $r->print('<br /><input type="button" value="'.&mt('Reverse Association').'" '.      $r->print('<br /><input type="button" value="'.&mt('Reverse Association').'" '.
Line 384  ENDJS Line 356  ENDJS
     $r->print("<br /><br />\n".      $r->print("<br /><br />\n".
               '<script type="text/javascript" language="Javascript">'."\n".                '<script type="text/javascript" language="Javascript">'."\n".
               '// <![CDATA['."\n".                '// <![CDATA['."\n".
               $javascript."\n".$javascript_validations."\n".$sectionjs."\n".                $javascript."\n".$javascript_validations."\n".
               '// ]]>'."\n".                '// ]]>'."\n".
               '</script>');                '</script>');
 }  }
Line 415  sub javascript_validations { Line 387  sub javascript_validations {
             if ($context eq 'course') {              if ($context eq 'course') {
                 if ($env{'request.course.sec'} eq '') {                  if ($env{'request.course.sec'} eq '') {
                     $setsection_call = 'setSections(document.'.$param{'formname'}.",'$crstype'".');';                      $setsection_call = 'setSections(document.'.$param{'formname'}.",'$crstype'".');';
                     if ($env{'form.context'} eq 'requestcrs') {                      $setsections_js =
                         $setsections_js =  &newsections_javascript($param{'formname'});                          &setsections_javascript($param{'formname'},$groupslist,
                     } else {                                                  $mode,'',$crstype);
                         $setsections_js =  
                             &setsections_javascript($param{'formname'},$groupslist,  
                                                     $mode,'',$crstype);  
                     }  
                 } else {                  } else {
                     $setsection_call = "'ok'";                      $setsection_call = "'ok'";
                 }                  }
Line 549  END Line 517  END
 END  END
     } else {      } else {
         $section_checks = &section_check_js();          $section_checks = &section_check_js();
           $optional_checks = (<<END);
         unless ($env{'form.context'} eq 'requestcrs') {  
             $optional_checks = (<<END);  
     var message='';      var message='';
     if (foundname==0) {      if (foundname==0) {
         message='$alert{'name'}';          message='$alert{'name'}';
Line 586  END Line 552  END
         message+='$alert{'domain'}';          message+='$alert{'domain'}';
     }      }
 END  END
         }  
         if (($mode eq 'upload') && ($context eq 'domain')) {          if (($mode eq 'upload') && ($context eq 'domain')) {
             $optional_checks .= (<<END);              $optional_checks .= (<<END);
   
Line 598  END Line 563  END
     }      }
 END  END
         }          }
         if ($env{'form.context'} eq 'requestcrs') {          $optional_checks .= (<<END);
             $optional_checks .= (<<END);  
     vf.state.value='enrolling';  
     $finish  
 }  
 END  
         } else {  
             $optional_checks .= (<<END);  
   
     if (message!='') {      if (message!='') {
         message+= '\\n$alert{'continue'}';          message+= '\\n$alert{'continue'}';
Line 619  END Line 577  END
     }      }
 }  }
 END  END
        }  
     }      }
     my $result = $function_name.$auth_checks.$optional_checks."\n".      my $result = $function_name.$auth_checks.$optional_checks."\n".
                  $section_checks.$authheader;                   $section_checks.$authheader;
Line 628  END Line 585  END
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub upload_manager_javascript_forward_associate {  sub upload_manager_javascript_forward_associate {
     my ($can_assign) = @_;  
     my $auth_update;  
     if (ref($can_assign) eq 'HASH') {  
         if (keys(%{$can_assign}) > 1) {  
             $auth_update = <<"END";  
    // If we set the password, make the password form below correspond to  
    // the new value.  
    if (nw==9) {  
       changed_radio('int',document.studentform);  
       set_auth_radio_buttons('int',document.studentform);  
 END  
         }  
         if ($can_assign->{'krb'}) {  
            $auth_update .= "      vf.krbarg.value='';\n";  
         }  
         if ($can_assign->{'int'}) {  
            $auth_update .= "      vf.intarg.value='';\n";  
         }  
         if ($can_assign->{'loc'}) {  
            $auth_update .= "     vf.locarg.value='';\n";  
         }  
         $auth_update .= "  
    }\n";  
     }  
   
     return(<<ENDPICK);      return(<<ENDPICK);
 function verify(vf,sec_caller) {  function verify(vf,sec_caller) {
     var founduname=0;      var founduname=0;
Line 688  function verify(vf,sec_caller) { Line 620  function verify(vf,sec_caller) {
 //  //
 // 0 = none  // 0 = none
 // 1 = username  // 1 = username
 // 2 = ipwd  (password)  // 2 = names (lastname, firstnames)
 // 3 = names (lastname, firstnames)  // 3 = fname (firstname)
 // 4 = fname (firstname)  // 4 = mname (middlename)
 // 5 = mname (middlename)  // 5 = lname (lastname)
 // 6 = lname (lastname)  // 6 = gen   (generation)
 // 7 = gen   (generation)  // 7 = id
 // 8 = id  // 8 = section
 // 9 = section  // 9 = ipwd  (password)
 // 10 = email address  // 10 = email address
 // 11 = role  // 11 = role
 // 12 = domain  // 12 = domain
Line 711  function flip(vf,tf) { Line 643  function flip(vf,tf) {
       }        }
    }     }
    // If we set this to 'lastname, firstnames', clear out all the ones     // If we set this to 'lastname, firstnames', clear out all the ones
    // set to 'fname','mname','lname','gen' (4,5,6,7) currently.     // set to 'fname','mname','lname','gen' (3,4,5,6) currently.
    if (nw==3) {     if (nw==2) {
       for (i=0;i<=vf.nfields.value;i++) {        for (i=0;i<=vf.nfields.value;i++) {
          if ((eval('vf.f'+i+'.selectedIndex')>=4) &&           if ((eval('vf.f'+i+'.selectedIndex')>=3) &&
              (eval('vf.f'+i+'.selectedIndex')<=7)) {               (eval('vf.f'+i+'.selectedIndex')<=6)) {
              eval('vf.f'+i+'.selectedIndex=0;')               eval('vf.f'+i+'.selectedIndex=0;')
          }           }
       }        }
    }     }
    // If we set this to one of 'fname','mname','lname','gen' (4,5,6,7),     // If we set this to one of 'fname','mname','lname','gen' (3,4,5,6),
    // clear out any that are set to 'lastname, firstnames' (3)     // clear out any that are set to 'lastname, firstnames' (2)
    if ((nw>=4) && (nw<=7)) {     if ((nw>=3) && (nw<=6)) {
       for (i=0;i<=vf.nfields.value;i++) {        for (i=0;i<=vf.nfields.value;i++) {
          if (eval('vf.f'+i+'.selectedIndex')==3) {           if (eval('vf.f'+i+'.selectedIndex')==2) {
              eval('vf.f'+i+'.selectedIndex=0;')               eval('vf.f'+i+'.selectedIndex=0;')
          }           }
       }        }
    }     }
    $auth_update     // If we set the password, make the password form below correspond to
      // the new value.
      if (nw==9) {
          changed_radio('int',document.studentform);
          set_auth_radio_buttons('int',document.studentform);
          vf.intarg.value='';
          vf.krbarg.value='';
          vf.locarg.value='';
      }
 }  }
   
 function clearpwd(vf) {  function clearpwd(vf) {
     var i;      var i;
     for (i=0;i<=vf.nfields.value;i++) {      for (i=0;i<=vf.nfields.value;i++) {
         if (eval('vf.f'+i+'.selectedIndex')==2) {          if (eval('vf.f'+i+'.selectedIndex')==9) {
             eval('vf.f'+i+'.selectedIndex=0;')              eval('vf.f'+i+'.selectedIndex=0;')
         }          }
     }      }
Line 747  ENDPICK Line 687  ENDPICK
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub upload_manager_javascript_reverse_associate {  sub upload_manager_javascript_reverse_associate {
     my ($can_assign) = @_;  
     my $auth_update;  
     if (ref($can_assign) eq 'HASH') {  
         if (keys(%{$can_assign}) > 1) {  
             $auth_update = <<"END";  
     // initial password specified, pick internal authentication  
     if (tf==8 && nw!=0) {  
         changed_radio('int',document.studentform);  
         set_auth_radio_buttons('int',document.studentform);  
 END  
         }  
         if ($can_assign->{'krb'}) {  
            $auth_update .= "        vf.krbarg.value='';\n";  
         }  
         if ($can_assign->{'int'}) {  
            $auth_update .= "        vf.intarg.value='';\n";  
         }  
         if ($can_assign->{'loc'}) {  
            $auth_update .= "       vf.locarg.value='';\n";  
         }  
         $auth_update .= "  
     }\n";  
     }  
     return(<<ENDPICK);      return(<<ENDPICK);
 function verify(vf,sec_caller) {  function verify(vf,sec_caller) {
     var founduname=0;      var founduname=0;
Line 809  function flip(vf,tf) { Line 726  function flip(vf,tf) {
    if ((tf>=2) && (tf<=5) && (nw!=0)) {     if ((tf>=2) && (tf<=5) && (nw!=0)) {
       eval('vf.f1.selectedIndex=0;')        eval('vf.f1.selectedIndex=0;')
    }     }
    $auth_update     // intial password specified, pick internal authentication
      if (tf==8 && nw!=0) {
          changed_radio('int',document.studentform);
          set_auth_radio_buttons('int',document.studentform);
          vf.krbarg.value='';
          vf.intarg.value='';
          vf.locarg.value='';
      }
 }  }
   
 function clearpwd(vf) {  function clearpwd(vf) {
Line 838  sub print_upload_manager_footer { Line 762  sub print_upload_manager_footer {
         $env{'form.ipwd_choice'} ne '') {          $env{'form.ipwd_choice'} ne '') {
         $param{'curr_authtype'} = 'int';          $param{'curr_authtype'} = 'int';
     }      }
     if ($env{'form.context'} eq 'requestcrs') {  
         $param{'context'} = $env{'form.context'};  
     }  
     my $krbform = &Apache::loncommon::authform_kerberos(%param);      my $krbform = &Apache::loncommon::authform_kerberos(%param);
     my $intform = &Apache::loncommon::authform_internal(%param);      my $intform = &Apache::loncommon::authform_internal(%param);
     my $locform = &Apache::loncommon::authform_local(%param);      my $locform = &Apache::loncommon::authform_local(%param);
Line 853  sub print_upload_manager_footer { Line 774  sub print_upload_manager_footer {
   
     $Str .= '<h3>'.&mt('Options').'</h3>'      $Str .= '<h3>'.&mt('Options').'</h3>'
            .&Apache::lonhtmlcommon::start_pick_box();             .&Apache::lonhtmlcommon::start_pick_box();
     if ($env{'form.context'} eq 'requestcrs') {  
         $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default password'));      $Str .= &Apache::lonhtmlcommon::row_title(&mt('Login Type'));
     } else {  
         $Str .= &Apache::lonhtmlcommon::row_title(&mt('Login Type'));  
     }  
     if ($context eq 'domain') {      if ($context eq 'domain') {
         $Str .= '<p>'          $Str .= '<p>'
                .&mt('Change authentication for existing users in domain "[_1]" to these settings?'                 .&mt('Change authentication for existing users in domain "[_1]" to these settings?'
Line 871  sub print_upload_manager_footer { Line 789  sub print_upload_manager_footer {
                .'</span></p>';                  .'</span></p>'; 
     } else {      } else {
         $Str .= '<p class="LC_info">'."\n".          $Str .= '<p class="LC_info">'."\n".
             &mt('This will not take effect if the user already exists.');              &mt('This will not take effect if the user already exists.').
             my ($authnum,%can_assign) =  &Apache::loncommon::get_assignable_auth($defdom);              &Apache::loncommon::help_open_topic('Auth_Options').
             if ($authnum > 1) {              "</p>\n";
                 $Str .= &Apache::loncommon::help_open_topic('Auth_Options');  
             }  
             $Str .= "</p>\n";  
     }      }
     $Str .= &set_login($defdom,$krbform,$intform,$locform);      $Str .= &set_login($defdom,$krbform,$intform,$locform);
     if ($env{'form.context'} eq 'requestcrs') {  
         $Str .= '<input type="hidden" name="defaultdomain" value="gcitest" />';  
     }  
     my ($home_server_pick,$numlib) =      my ($home_server_pick,$numlib) =
         &Apache::loncommon::home_server_form_item($defdom,'lcserver',          &Apache::loncommon::home_server_form_item($defdom,'lcserver',
                                                   'default','hide');                                                    'default','hide');
Line 897  sub print_upload_manager_footer { Line 810  sub print_upload_manager_footer {
                 &Apache::lonhtmlcommon::row_closure();                  &Apache::lonhtmlcommon::row_closure();
     }      }
   
     unless ($env{'form.context'} eq 'requestcrs') {      $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain'))
         $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain'))             .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1)
                .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1)             .&Apache::lonhtmlcommon::row_closure();
                .&Apache::lonhtmlcommon::row_closure()  
                .&Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates'))      $Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates'))
                ."<p>\n".$date_table."</p>\n"             ."<p>\n".$date_table."</p>\n"
                .&Apache::lonhtmlcommon::row_closure();             .&Apache::lonhtmlcommon::row_closure();
     }  
     if ($context eq 'domain') {      if ($context eq 'domain') {
         $Str .= &Apache::lonhtmlcommon::row_title(          $Str .= &Apache::lonhtmlcommon::row_title(
                     &mt('Settings for assigning roles'))                      &mt('Settings for assigning roles'))
Line 924  sub print_upload_manager_footer { Line 837  sub print_upload_manager_footer {
                     &mt('Default role'))                      &mt('Default role'))
                .&mt('Choose the role to assign to users without a value specified in the uploaded file.')                 .&mt('Choose the role to assign to users without a value specified in the uploaded file.')
     } elsif ($context eq 'course') {      } elsif ($context eq 'course') {
         if ($env{'form.context'} eq 'requestcrs') {          $Str .= &Apache::lonhtmlcommon::row_title(
             $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default section')).  
                     &mt('Students can be assigned to different sections.').'<br />'.  
                     &mt('Will you be using sections?').'&nbsp;'.  
                     '<input type="radio" name="usesection" value="1" '.  
                     'onclick="javascript:toggleSectionsDefault()" />'.  
                     '&nbsp;'.&mt('Yes').'</label>'.  
                     '&nbsp;&nbsp;&nbsp;<label>'.  
                     '<input type="radio" name="usesection" value="0" checked="checked" '.  
                     'onclick="javascript:toggleSectionsDefault()" />'.  
                     '&nbsp;'.&mt('No').'</label>';  
         } else {  
             $Str .= &Apache::lonhtmlcommon::row_title(  
                     &mt('Default role and section'))                      &mt('Default role and section'))
                    .&mt('Choose the role and/or section(s) to assign to users without values specified in the uploaded file.');                 .&mt('Choose the role and/or section(s) to assign to users without values specified in the uploaded file.');
         }      
     } else {      } else {
         $Str .= &Apache::lonhtmlcommon::row_title(          $Str .= &Apache::lonhtmlcommon::row_title(
                     &mt('Default role and/or section(s)'))                      &mt('Default role and/or section(s)'))
Line 963  sub print_upload_manager_footer { Line 863  sub print_upload_manager_footer {
         }          }
     } else {      } else {
         my ($cnum,$cdom) = &get_course_identity();          my ($cnum,$cdom) = &get_course_identity();
         my ($rowtitle,$closure);          my $rowtitle = &mt('section');
         if ($env{'form.context'} eq 'requestcrs') {  
             $closure = 1;  
             $rowtitle = &mt('default section name (letters/numbers only)');  
         } else {  
             $rowtitle = &mt('section');  
         }  
         my $secbox = &section_picker($cdom,$cnum,'Any',$rowtitle,          my $secbox = &section_picker($cdom,$cnum,'Any',$rowtitle,
                                     $permission,$context,'upload',$crstype,                                       $permission,$context,'upload',$crstype);
                                     $env{'form.context'}).          $Str .= $secbox
                      &Apache::lonhtmlcommon::row_closure($closure);                 .&Apache::lonhtmlcommon::row_closure();
         if ($env{'form.context'} eq 'requestcrs') {  
             $Str .= '<div id ="defaultsec" style="display: none" />'.$secbox.'</div>';  
         } else {  
             $Str .= $secbox;   
         }  
         my %lt;          my %lt;
         if ($crstype eq 'Community') {          if ($crstype eq 'Community') {
             %lt = &Apache::lonlocal::texthash (              %lt = &Apache::lonlocal::texthash (
Line 991  sub print_upload_manager_footer { Line 880  sub print_upload_manager_footer {
                     stus => 'Students selected from this list can be dropped.'                      stus => 'Students selected from this list can be dropped.'
             );              );
         }          }
         unless ($env{'form.context'} eq 'requestcrs') {          $Str .= &Apache::lonhtmlcommon::row_title(&mt('Full Update'))
             $Str .= &Apache::lonhtmlcommon::row_title(&mt('Full Update'))                 .'<label><input type="checkbox" name="fullup" value="yes" />'
                    .'<label><input type="checkbox" name="fullup" value="yes" />'                 .' '.$lt{'disp'}
                    .' '.$lt{'disp'}                 .'</label><br />'
                    .'</label><br />'                 .$lt{'stus'}
                    .$lt{'stus'}                 .&Apache::lonhtmlcommon::row_closure();
                    .&Apache::lonhtmlcommon::row_closure();  
         }  
     }      }
     if ($context eq 'course' || $context eq 'domain') {      if ($context eq 'course' || $context eq 'domain') {
         unless ($env{'form.context'} eq 'requestcrs') {          $Str .= &forceid_change($context);
             $Str .= &forceid_change($context);  
         }  
     }      }
   
     $Str .= &Apache::lonhtmlcommon::end_pick_box();      $Str .= &Apache::lonhtmlcommon::end_pick_box();
Line 1047  sub forceid_change { Line 932  sub forceid_change {
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub print_upload_manager_form {  sub print_upload_manager_form {
     my ($r,$context,$permission,$crstype,$formname) = @_;      my ($r,$context,$permission,$crstype) = @_;
     my $firstLine;      my $firstLine;
     my $datatoken;      my $datatoken;
     if (!$env{'form.datatoken'}) {      if (!$env{'form.datatoken'}) {
Line 1093  sub print_upload_manager_form { Line 978  sub print_upload_manager_form {
     my ($krbdef,$krbdefdom) =      my ($krbdef,$krbdefdom) =
         &Apache::loncommon::get_kerberos_defaults($defdom);          &Apache::loncommon::get_kerberos_defaults($defdom);
     #      #
     my ($authnum,%can_assign) =  &Apache::loncommon::get_assignable_auth($defdom);  
     &print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom,$context,      &print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom,$context,
                                  $permission,$crstype,$formname,\%can_assign);                                   $permission,$crstype);
     my $i;      my $i;
     my $keyfields;      my $keyfields;
     if ($total>=0) {      if ($total>=0) {
         my @field=          my @field=
             (['username',&mt('Username'),     $env{'form.username_choice'}],              (['username',&mt('Username'),     $env{'form.username_choice'}],
              ['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}],  
              ['names',&mt('Last Name, First Names'),$env{'form.names_choice'}],               ['names',&mt('Last Name, First Names'),$env{'form.names_choice'}],
              ['fname',&mt('First Name'),      $env{'form.fname_choice'}],               ['fname',&mt('First Name'),      $env{'form.fname_choice'}],
              ['mname',&mt('Middle Names/Initials'),$env{'form.mname_choice'}],               ['mname',&mt('Middle Names/Initials'),$env{'form.mname_choice'}],
Line 1109  sub print_upload_manager_form { Line 992  sub print_upload_manager_form {
              ['gen',  &mt('Generation'),      $env{'form.gen_choice'}],               ['gen',  &mt('Generation'),      $env{'form.gen_choice'}],
              ['id',   &mt('Student/Employee ID'),$env{'form.id_choice'}],               ['id',   &mt('Student/Employee ID'),$env{'form.id_choice'}],
              ['sec',  &mt('Section'),          $env{'form.sec_choice'}],               ['sec',  &mt('Section'),          $env{'form.sec_choice'}],
                ['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}],
              ['email',&mt('E-mail Address'),   $env{'form.email_choice'}],               ['email',&mt('E-mail Address'),   $env{'form.email_choice'}],
              ['role',&mt('Role'),             $env{'form.role_choice'}],               ['role',&mt('Role'),             $env{'form.role_choice'}],
              ['domain',&mt('Domain'),         $env{'form.domain_choice'}],               ['domain',&mt('Domain'),         $env{'form.domain_choice'}],
Line 1301  sub default_role_selector { Line 1185  sub default_role_selector {
                     'exs'  => "Existing sections",                      'exs'  => "Existing sections",
                     'new'  => "New section",                      'new'  => "New section",
                   );                    );
     $options = '<select name="defaultrole">'."\n";      $options = '<select name="defaultrole">'."\n".
     unless (($context eq 'course') && (&Apache::loncommon::needs_gci_custom())) {                 ' <option value="">'.&mt('Please select').'</option>'."\n"; 
         $options .= ' <option value="">'.&mt('Please select').'</option>'."\n";  
     }  
     if ($context eq 'course') {      if ($context eq 'course') {
         $options .= &default_course_roles($context,$checkpriv,$crstype,%customroles);          $options .= &default_course_roles($context,$checkpriv,$crstype,%customroles);
     } elsif ($context eq 'author') {      } elsif ($context eq 'author') {
Line 1566  sub print_userlist { Line 1448  sub print_userlist {
     }      }
     if (!(($context eq 'domain') &&       if (!(($context eq 'domain') && 
           (($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) {            (($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) {
         $r->print('&nbsp;'.&list_submit_button(&mt('Update Display')).          $r->print(
                   "\n</p>\n");              "\n</p>\n"
              .'<p>'
              .&list_submit_button(&mt('Update Display'))
              ."</p>\n"
           );
     }      }
     my ($indexhash,$keylist) = &make_keylist_array();      my ($indexhash,$keylist) = &make_keylist_array();
     my (%userlist,%userinfo,$clearcoursepick);      my (%userlist,%userinfo,$clearcoursepick);
Line 1806  sub role_filter { Line 1692  sub role_filter {
         $role_select .= '</select>';          $role_select .= '</select>';
         $output = '<label><span class="LC_nobreak">'          $output = '<label><span class="LC_nobreak">'
                  .&mt('Role: [_1]',$role_select)                   .&mt('Role: [_1]',$role_select)
                  .'</span></label>';                   .'</span></label> ';
     }      }
     return $output;      return $output;
 }  }
Line 1861  sub section_group_filter { Line 1747  sub section_group_filter {
                 $markup .= '</option>'."\n";                  $markup .= '</option>'."\n";
             }              }
             $markup .= '</select>'."\n";              $markup .= '</select>'."\n";
             $output .= ('&nbsp;'x3).'<label>'.$title{$item}.': '.$markup.'</label>';              $output .= ('&nbsp;'x3).'<span class="LC_nobreak">'
                         .'<label>'.$title{$item}.': '.$markup.'</label>'
                         .'</span> ';
         }          }
     }      }
     return $output;      return $output;
Line 2211  sub process_date_info { Line 2099  sub process_date_info {
   
 sub show_users_list {  sub show_users_list {
     my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist,$formname)=@_;      my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist,$formname)=@_;
     my $custommenu;   
     if ($formname eq '') {      if ($formname eq '') {
         $formname = 'studentform';          $formname = 'studentform';
     }      }
Line 2236  sub show_users_list { Line 2123  sub show_users_list {
         $sortby = 'username';          $sortby = 'username';
     }      }
     my $setting = $env{'form.roletype'};      my $setting = $env{'form.roletype'};
     my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers,$crstype,      my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers,$crstype);
         $clickersupport,$displaygroups);  
     if ($context eq 'course') {      if ($context eq 'course') {
         $cid = $env{'request.course.id'};          $cid = $env{'request.course.id'};
         $crstype = &Apache::loncommon::course_type();          $crstype = &Apache::loncommon::course_type();
         ($cnum,$cdom) = &get_course_identity($cid);          ($cnum,$cdom) = &get_course_identity($cid);
         $custommenu = &Apache::loncommon::needs_gci_custom();  
         unless ($custommenu) {  
             $clickersupport = 1;  
             $displaygroups = 1;  
         }  
         ($classgroups) = &Apache::loncoursedata::get_group_memberships(          ($classgroups) = &Apache::loncoursedata::get_group_memberships(
                                      $userlist,$keylist,$cdom,$cnum);                                       $userlist,$keylist,$cdom,$cnum);
         if ($mode eq 'autoenroll') {          if ($mode eq 'autoenroll') {
Line 2367  END Line 2248  END
                        'role'       => "role",                         'role'       => "role",
                        'type'       => "enroll type/action",                         'type'       => "enroll type/action",
                        'email'      => "e-mail address",                         'email'      => "e-mail address",
                        'lastlogin'  => "last login",  
                        'submissions' => "test status",  
                        'photo'      => "photo",                         'photo'      => "photo",
                        'extent'     => "extent",                         'extent'     => "extent",
                        'pr'         => "Proceed",                         'pr'         => "Proceed",
Line 2415  END Line 2294  END
             push(@cols,'status');              push(@cols,'status');
         }          }
         if ($context eq 'course') {          if ($context eq 'course') {
             if ($displaygroups) {              push(@cols,'groups');
                 push(@cols,'groups');  
             }  
         }          }
         push(@cols,'email');          push(@cols,'email');
         if ($context eq 'course') {  
             if ($custommenu) {  
                 push(@cols,'lastlogin');  
                 if (($env{'form.showrole'} eq 'Any') || ($env{'form.showrole'} eq 'st')) {  
                     push(@cols,'submissions');  
                 }  
             }  
         }  
     }      }
   
     my $rolefilter = $env{'form.showrole'};      my $rolefilter = $env{'form.showrole'};
Line 2534  END Line 2403  END
             if ($env{'form.userwin'}) {              if ($env{'form.userwin'}) {
                 $checkwin = ' checked="checked"';                  $checkwin = ' checked="checked"';
             }              }
             $output .= '</td><td valign="top"><span class="LC_nobreak"><input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'}.'</span></td></tr></table></fieldset></div>';              $output .= '</td><td valign="top"  style="border-left: 1px solid;"><span class="LC_nobreak"><input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'}.'</span></td></tr></table></fieldset></div>';
         }          }
         $output .= "\n".'<div class="LC_clear_float_footer">&nbsp;</div>'."\n".          $output .= "\n".'<div class="LC_clear_float_footer">&nbsp;</div>'."\n".
                   &Apache::loncommon::start_data_table().                    &Apache::loncommon::start_data_table().
Line 2550  END Line 2419  END
             }              }
         }          }
         foreach my $item (@cols) {          foreach my $item (@cols) {
             if (grep(/^\Q$item\E$/,@sortable)) {              $output .= "<th><a href=\"javascript:document.$formname.sortby.value='$item';document.$formname.submit();\">$lt{$item}</a></th>\n";
                 $output .= "<th><a href=\"javascript:document.$formname.sortby.value='$item';document.$formname.submit();\">$lt{$item}</a></th>\n";  
             } else {  
                 $output .= "<th>$lt{$item}</th>\n";  
             }  
         }          }
         my %role_types = &role_type_names();          my %role_types = &role_type_names();
         if ($context eq 'course' && $mode ne 'autoenroll') {          if ($context eq 'course' && $mode ne 'autoenroll') {
             if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {              if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {
                 # Clicker display on or off?                  # Clicker display on or off?
                 if ($clickersupport) {                  my %clicker_options = (
                     my %clicker_options = (                                          'on' => 'Show',
                                             'on' => 'Show',                                          'off' => 'Hide',
                                             'off' => 'Hide',                                        );
                                           );                  my $clickerchg = 'on';
                     my $clickerchg = 'on';                  if ($displayclickers eq 'on') {
                     if ($displayclickers eq 'on') {                      $clickerchg = 'off';
                         $clickerchg = 'off';                  }
                     }                  $output .= '    <th>'."\n".'     '
                     $output .= '    <th>'."\n".'     '                          .&mt('[_1]'.$clicker_options{$clickerchg}.'[_2] clicker id'
                        .&mt('[_1]'.$clicker_options{$clickerchg}.'[_2] clicker id'  
                             ,'<a href="javascript:document.'.$formname.'.displayclickers.value='                              ,'<a href="javascript:document.'.$formname.'.displayclickers.value='
                              ."'".$clickerchg."'".';document.'.$formname.'.submit();">'                               ."'".$clickerchg."'".';document.'.$formname.'.submit();">'
                             ,'</a>')                              ,'</a>')
                         ."\n".'    </th>'."\n";                          ."\n".'    </th>'."\n";
                 }  
                 # Photo display on or off?                  # Photo display on or off?
                 if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {                  if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {
                     my %photo_options = &Apache::lonlocal::texthash(                      my %photo_options = &Apache::lonlocal::texthash(
Line 2614  END Line 2478  END
             $CSVfile = undef;              $CSVfile = undef;
         }          }
         #          #
         if ($clickersupport) {          push @cols,'clicker';
             push @cols,'clicker';  
         }  
         # Write headers and data to file          # Write headers and data to file
         print $CSVfile '"'.$results_description.'"'."\n";           print $CSVfile '"'.$results_description.'"'."\n"; 
         print $CSVfile '"'.join('","',map {          print $CSVfile '"'.join('","',map {
             &Apache::loncommon::csv_translate($lt{$_})              &Apache::loncommon::csv_translate($lt{$_})
             } (@cols))."\"\n";              } (@cols))."\"\n";
     } elsif ($mode eq 'excel') {      } elsif ($mode eq 'excel') {
         if ($clickersupport) {          push @cols,'clicker';
             push @cols,'clicker';  
         }  
         # Create the excel spreadsheet          # Create the excel spreadsheet
         ($excel_workbook,$excel_filename,$format) =          ($excel_workbook,$excel_filename,$format) =
             &Apache::loncommon::create_workbook($r);              &Apache::loncommon::create_workbook($r);
Line 2661  END Line 2521  END
                                                 Future  => 'Future',                                                  Future  => 'Future',
                                                 Expired => 'Expired',                                                  Expired => 'Expired',
                                                );                                                 );
     # If this is for a single course get last course "log-in" and submissions.  
     my (%crslogins,%stusubmissions,%elapsed,$numparts,%nummultipart,$multipart);  
     my $now = time;  
     if ($context eq 'course') {  
         if ($custommenu) {  
             %crslogins=&Apache::lonnet::dump('nohist_crslastlogin',$cdom,$cnum);  
             %stusubmissions=&Apache::lonnet::dump('nohist_submissiontracker',$cdom,$cnum);  
             %elapsed = &Apache::lonlocal::texthash(      
                                          -1 => 'more than a month ago',  
                                     2592000 => 'within last 30 days',  
                                      604800 => 'within last 7 days',  
                                       86400 => 'within last 24 hours',  
                                    );  
             my $navmap = Apache::lonnavmaps::navmap->new();  
             if (defined($navmap)) {  
                 my @allres=$navmap->retrieveResources('/uploaded/'.$cdom.'/'.$cnum.'/default_1261144274.sequence',sub { $_[0]->is_problem() },0);  
                 foreach my $resource (@allres) {  
                     my @parts = $resource->parts();  
                     my $count = scalar(@parts);  
                     if ($count > 1) {  
                         $nummultipart{$count} ++;  
                     }  
                     $numparts += $count;  
                 }  
                 if (keys(%nummultipart) > 0) {  
                    $multipart = '<br />'.'contains';  
                    foreach my $key (sort {$a <=> $b} keys(%nummultipart)) {  
                        $multipart .= " nummultipart{$key} multipart questions (with $key parts)";  
                    }  
                 }  
             }  
         }  
     }  
   
     # Get groups, role, permanent e-mail so we can sort on them if      # Get groups, role, permanent e-mail so we can sort on them if
     # necessary.      # necessary.
     foreach my $user (keys(%{$userlist})) {      foreach my $user (keys(%{$userlist})) {
Line 2841  END Line 2667  END
         } else {          } else {
             $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'});              $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'});
         }          }
         if ($context eq 'course') {  
             if ($custommenu) {  
                 my $lastlogin = $crslogins{$in{'username'}.':'.$in{'domain'}.':'.$in{'section'}.':'.$role};  
                 if ($lastlogin ne '') {  
                     my $sincelogin = $now - $lastlogin;  
                     if ($sincelogin < 86400) {  
                         $in{'lastlogin'} = $elapsed{'86400'};  
                     } elsif ($sincelogin < 604800) {  
                         $in{'lastlogin'} = $elapsed{'604800'};  
                     } elsif ($sincelogin < 2592000 ) {  
                         $in{'lastlogin'} = $elapsed{'2592000'};  
                     } else {  
                         $in{'lastlogin'} = $elapsed{'-1'};  
                     }  
                 }  
             }  
             if ($role eq 'st') {  
                 my $numsub = $stusubmissions{$in{'username'}.':'.$in{'domain'}."\0attempts"} +   
                              $stusubmissions{$in{'username'}.':'.$in{'domain'}."\0surveysubs"};  
                 if (!$numsub) {  
                     $in{'submissions'} = 'not attempted';  
                 } elsif ($numsub < $numparts) {  
                     $in{'submissions'} = 'incomplete ('.$numsub.'/'.$numparts.')';  
                 } else {  
                     $in{'submissions'} = 'completed';  
                 }  
             }  
         }  
         if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll' || $mode eq 'pickauthor') {          if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll' || $mode eq 'pickauthor') {
             $r->print(&Apache::loncommon::start_data_table_row());              $r->print(&Apache::loncommon::start_data_table_row());
             my $checkval;              my $checkval;
Line 2942  END Line 2740  END
                         $showitem = $ltstatus{$in{$item}};                          $showitem = $ltstatus{$in{$item}};
                     }                      }
                     $r->print('<td>'.$showitem.'</td>'."\n");                      $r->print('<td>'.$showitem.'</td>'."\n");
                 } elsif ($item eq 'submissions') {  
                     if ($in{$item} =~ /^incomplete/) {   
                         $r->print('<td>'.$in{$item}.$multipart.'</td>');  
                     } else {  
                         $r->print('<td>'.$in{$item}.'</td>'."\n");  
                     }  
                 } else {                  } else {
                     $r->print('<td>'.$in{$item}.'</td>'."\n");                      $r->print('<td>'.$in{$item}.'</td>'."\n");
                 }                  }
             }              }
             if (($context eq 'course') && ($mode ne 'autoenroll')) {              if (($context eq 'course') && ($mode ne 'autoenroll')) {
                 if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {                  if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {
                     if ($clickersupport) {                      if ($displayclickers eq 'on') {
                         if ($displayclickers eq 'on') {                          my $clickers =
                             my $clickers =  
                    (&Apache::lonnet::userenvironment($in{'domain'},$in{'username'},'clickers'))[1];                     (&Apache::lonnet::userenvironment($in{'domain'},$in{'username'},'clickers'))[1];
                             if ($clickers!~/\w/) { $clickers='-'; }                          if ($clickers!~/\w/) { $clickers='-'; }
                             $r->print('<td>'.$clickers.'</td>');                          $r->print('<td>'.$clickers.'</td>');
                         } else {                      } else {
                             $r->print('    <td>&nbsp;</td>  ');                          $r->print('    <td>&nbsp;</td>  ');
                         }  
                     }                      }
                     if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {                      if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {
                         if ($displayphotos eq 'on' && $role eq 'st' && $in{'photo'} ne '') {                          if ($displayphotos eq 'on' && $role eq 'st' && $in{'photo'} ne '') {
Line 3448  ENDJS Line 3238  ENDJS
 }  }
   
 sub section_picker {  sub section_picker {
     my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode,$crstype,$caller) = @_;      my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode,$crstype) = @_;
     my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);      my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);
     my $sections_select .= &course_sections(\%sections_count,$role);      my $sections_select .= &course_sections(\%sections_count,$role);
     my $secbox = '<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n";      my $secbox = '<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n";
     if ($mode eq 'upload' && $caller ne 'requestcrs') {      if ($mode eq 'upload') {
         my ($options,$cb_script,$coursepick) =          my ($options,$cb_script,$coursepick) =
             &default_role_selector($context,1,$crstype);              &default_role_selector($context,1,$crstype);
         $secbox .= &Apache::lonhtmlcommon::row_title(&mt('role'),'LC_oddrow_value').          $secbox .= &Apache::lonhtmlcommon::row_title(&mt('role'),'LC_oddrow_value').
                    $options. &Apache::lonhtmlcommon::row_closure(1)."\n";                     $options. &Apache::lonhtmlcommon::row_closure(1)."\n";
     }      }
     $secbox .= &Apache::lonhtmlcommon::row_title($rowtitle,'LC_oddrow_value')."\n";      $secbox .= &Apache::lonhtmlcommon::row_title($rowtitle,'LC_oddrow_value')."\n";
     if ($caller eq 'requestcrs') {      if ($env{'request.course.sec'} eq '') {
        $secbox .=  '<input type="hidden" name="defaultrole" value="st" />'."\n".  
                    '<input type="text" name="newsec" size="15" />'."\n".  
                    '<input type="hidden" name="sections" value="" />'."\n";  
     } elsif ($env{'request.course.sec'} eq '') {  
         $secbox .= '<table class="LC_createuser"><tr class="LC_section_row">'."\n".          $secbox .= '<table class="LC_createuser"><tr class="LC_section_row">'."\n".
                    '<td align="center">'.&mt('Existing sections')."\n".                     '<td align="center">'.&mt('Existing sections')."\n".
                    '<br />'.$sections_select.'</td><td align="center">'.                     '<br />'.$sections_select.'</td><td align="center">'.
Line 3682  sub show_drop_list { Line 3468  sub show_drop_list {
     my ($r,$classlist,$nosort,$permission,$crstype) = @_;      my ($r,$classlist,$nosort,$permission,$crstype) = @_;
     my $cid = $env{'request.course.id'};      my $cid = $env{'request.course.id'};
     my ($cnum,$cdom) = &get_course_identity($cid);      my ($cnum,$cdom) = &get_course_identity($cid);
     my $displaygroups;  
     unless (&Apache::loncommon::needs_gci_custom()) {  
         $displaygroups = 1;  
     }  
     if (! exists($env{'form.sortby'})) {      if (! exists($env{'form.sortby'})) {
         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                                 ['sortby']);                                                  ['sortby']);
Line 3763  END Line 3545  END
     <th>$lt{'sec'}</th>      <th>$lt{'sec'}</th>
     <th>$lt{'start'}</th>      <th>$lt{'start'}</th>
     <th>$lt{'end'}</th>      <th>$lt{'end'}</th>
       <th>$lt{'groups'}</th>
 END  END
         if ($displaygroups) {  
             $r->print("    <th>$lt{'groups'}</th>\n");  
         }  
         $r->print(&Apache::loncommon::end_data_table_header_row());          $r->print(&Apache::loncommon::end_data_table_header_row());
     } else  {      } else  {
         $r->print(&Apache::loncommon::start_data_table().          $r->print(&Apache::loncommon::start_data_table().
Line 3787  END Line 3567  END
        <a href="/adm/createuser?action=$action&sortby=start">$lt{'start'}</a>         <a href="/adm/createuser?action=$action&sortby=start">$lt{'start'}</a>
     </th><th>      </th><th>
        <a href="/adm/createuser?action=$action&sortby=end">$lt{'end'}</a>         <a href="/adm/createuser?action=$action&sortby=end">$lt{'end'}</a>
       </th><th>
          <a href="/adm/createuser?action=$action&sortby=groups">$lt{'groups'}</a>
     </th>      </th>
 END  END
        if ($displaygroups) {  
            $r->print("<th>  
        <a href=\"/adm/createuser?action=$action&sortby=groups\">$lt{'groups'}</a>  
     </th>\n");  
         }  
         $r->print(&Apache::loncommon::end_data_table_header_row());          $r->print(&Apache::loncommon::end_data_table_header_row());
     }      }
     #      #
Line 3846  END Line 3623  END
     <td>$section</td>      <td>$section</td>
     <td>$start $startitem</td>      <td>$start $startitem</td>
     <td>$end</td>      <td>$end</td>
       <td>$active_groups</td>
 END  END
         if ($displaygroups) {  
             $r->print("    <td>$active_groups</td>\n");  
         }  
         $r->print(&Apache::loncommon::end_data_table_row());          $r->print(&Apache::loncommon::end_data_table_row());
     }      }
     $r->print(&Apache::loncommon::end_data_table().'<br />');      $r->print(&Apache::loncommon::end_data_table().'<br />');
Line 3880  END Line 3655  END
 # Print out the initial form to get the file containing a list of users  # Print out the initial form to get the file containing a list of users
 #  #
 sub print_first_users_upload_form {  sub print_first_users_upload_form {
     my ($r,$context,$noheader,$caller) = @_;      my ($r,$context) = @_;
     my $str;      my $str;
     $str  = '<input type="hidden" name="phase" value="two" />';      $str  = '<input type="hidden" name="phase" value="two" />';
     $str .= '<input type="hidden" name="action" value="upload" />';      $str .= '<input type="hidden" name="action" value="upload" />';
     $str .= '<input type="hidden" name="state"  value="got_file" />';      $str .= '<input type="hidden" name="state"  value="got_file" />';
   
     unless ($noheader) {      $str .= '<h2>'.&mt('Upload a file containing information about users').'</h2>'."\n";
         $str .= '<h3>'.&mt('Upload a file containing information about users').'</h3>'."\n";  
     }  
   
     # Excel and CSV Help      # Excel and CSV Help
     $str .= '<div class="LC_left_float">'      $str .= '<div class="LC_left_float">'
Line 3899  sub print_first_users_upload_form { Line 3672  sub print_first_users_upload_form {
                 &mt("How do I create a CSV file from a spreadsheet"))                  &mt("How do I create a CSV file from a spreadsheet"))
            .'</div><br clear="all" />'."\n";             .'</div><br clear="all" />'."\n";
     $str .= &Apache::lonhtmlcommon::start_pick_box()      $str .= &Apache::lonhtmlcommon::start_pick_box()
            .&Apache::lonhtmlcommon::row_title(&mt('File'))             .&Apache::lonhtmlcommon::row_title(&mt('File'));
            .&Apache::loncommon::upfile_select_html()      if (&Apache::lonlocal::current_language() ne 'en') {
           if ($context eq 'course') { 
               $str .= '<p class="LC_info">'."\n"
                      .&mt('Please upload an UTF8 encoded file to ensure a correct character encoding in your classlist.')."\n"
                      .'</p>'."\n";
           }
       }
       $str .= &Apache::loncommon::upfile_select_html()
            .&Apache::lonhtmlcommon::row_closure()             .&Apache::lonhtmlcommon::row_closure()
            .&Apache::lonhtmlcommon::row_title(&mt('Ignore First Line, e.g., contains column titles'))             .&Apache::lonhtmlcommon::row_title(
            .'<label><input type="radio" name="noFirstLine" id="noFirstLine" value="1" />&nbsp;'.&mt('Yes').'</label>'                  '<label for="noFirstLine">'
            .'&nbsp;&nbsp;&nbsp;'                 .&mt('Ignore First Line')
            .'<label><input type="radio" name="noFirstLine" id="FirstLineOK" value="0" checked="checked" />&nbsp;'.&mt('No').'</label>'                 .'</label>')
              .'<input type="checkbox" name="noFirstLine" id="noFirstLine" />'
            .&Apache::lonhtmlcommon::row_closure(1)             .&Apache::lonhtmlcommon::row_closure(1)
            .&Apache::lonhtmlcommon::end_pick_box();             .&Apache::lonhtmlcommon::end_pick_box();
   
     $str .= '<p>'      $str .= '<p>'
            .'<input type="hidden" name="context" value="'.$caller.'" />'   
            .'<input type="submit" name="fileupload" value="'.&mt('Next').'" />'             .'<input type="submit" name="fileupload" value="'.&mt('Next').'" />'
            .'</p>';             .'</p>';
   
Line 3935  sub upfile_drop_add { Line 3715  sub upfile_drop_add {
             $fields{$env{'form.f'.$i}}=$keyfields[$i];              $fields{$env{'form.f'.$i}}=$keyfields[$i];
         }          }
     }      }
     if (($env{'form.fullup'} ne 'yes') && ($env{'form.context'} ne 'requestcrs')) {      if ($env{'form.fullup'} ne 'yes') {
         $r->print('<form name="studentform" method="post" action="/adm/createuser">'."\n".          $r->print('<form name="studentform" method="post" action="/adm/createuser">'."\n".
                   '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />');                    '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />');
     }      }
Line 3973  sub upfile_drop_add { Line 3753  sub upfile_drop_add {
             $crstype = &Apache::loncommon::course_type($cid);              $crstype = &Apache::loncommon::course_type($cid);
         }          }
     }      }
     my ($startdate,$enddate);      my ($startdate,$enddate) = &get_dates_from_form();
     if ($env{'form.context'} eq 'requestcrs') {      if ($env{'form.makedatesdefault'}) {
         $startdate = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_start_date'};          $r->print(&make_dates_default($startdate,$enddate,$context,$crstype));
         $enddate = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_end_date'};  
     } else {  
         ($startdate,$enddate) = &get_dates_from_form();  
         if ($env{'form.makedatesdefault'}) {  
             $r->print(&make_dates_default($startdate,$enddate,$context,$crstype));  
         }  
     }      }
     # Determine domain and desired host (home server)      # Determine domain and desired host (home server)
     my $defdom=$env{'request.role.domain'};      my $defdom=$env{'request.role.domain'};
Line 4147  sub upfile_drop_add { Line 3921  sub upfile_drop_add {
                 $r->print($groupwarn.'<br />');                  $r->print($groupwarn.'<br />');
             }              }
         }          }
         my (%curr_rules,%got_rules,%alerts,%cancreate);          my (%curr_rules,%got_rules,%alerts);
         my %customroles = &my_custom_roles($crstype);          my %customroles = &my_custom_roles($crstype);
         my @permitted_roles =           my @permitted_roles = 
             &roles_on_upload($context,$setting,$crstype,%customroles);              &roles_on_upload($context,$setting,$crstype,%customroles); 
         my %longtypes = &Apache::lonlocal::texthash(  
                             official   => 'Institutional',  
                             unofficial => 'Non-institutional',  
                         );  
         map { $cancreate{$_} = &can_create_user($domain,$context,$_); } keys(%longtypes);  
         # Get new users list          # Get new users list
         foreach my $line (@userdata) {          foreach my $line (@userdata) {
             my @secs;              my @secs;
Line 4301  sub upfile_drop_add { Line 4070  sub upfile_drop_add {
                     my (%rulematch,%inst_results,%idinst_results);                      my (%rulematch,%inst_results,%idinst_results);
                     my $uhome=&Apache::lonnet::homeserver($username,$userdomain);                      my $uhome=&Apache::lonnet::homeserver($username,$userdomain);
                     if ($uhome eq 'no_host') {                      if ($uhome eq 'no_host') {
                         if ($userdomain ne $domain) {                          next if ($userdomain ne $domain);
                             $r->print('<br />'.  
                                       &mt('[_1]: The domain specified ([_2]) is different to that of the course.',  
                                          '<b>'.$username.'</b>',$userdomain).'<br />'.  
                                       &mt('The user does not already exist, and you may not create a new user in a different domain.'));   
                             next;  
                         }  
                         $checkid = 1;                          $checkid = 1;
                         $newuser = 1;                          $newuser = 1;
                         my $user = $username.':'.$domain;  
                         if ($username =~/^[^\@]+\@[^\@]+$/) {  
                             if ($email eq '') {  
                                 $email = $username;  
                             }  
                             if (&Apache::loncommon::needs_gci_custom()) {  
                                 my $lc_email;  
                                 if ($username eq $email) {  
                                     $lc_email = lc($email);  
                                 }  
                                 my $lc_username = lc($username);  
                                 if ($lc_username ne $username) {  
                                     if ($username eq $email) {  
                                         $email = $lc_username;  
                                     }  
                                     $username = $lc_username;  
                                     $uhome=&Apache::lonnet::homeserver($username,$userdomain);  
                                     if ($uhome ne 'no_host') {  
                                         $newuser = 0;  
                                     }  
                                 }  
                             }  
                         }  
                     }  
                     if ($newuser) {  
                         my $checkhash;                          my $checkhash;
                         my $checks = { 'username' => 1 };                          my $checks = { 'username' => 1 };
                         $checkhash->{$user} = { 'newuser' => 1, };                          $checkhash->{$username.':'.$domain} = { 'newuser' => 1, };
                         &Apache::loncommon::user_rule_check($checkhash,$checks,                          &Apache::loncommon::user_rule_check($checkhash,$checks,
                             \%alerts,\%rulematch,\%inst_results,\%curr_rules,                              \%alerts,\%rulematch,\%inst_results,\%curr_rules,
                             \%got_rules);                              \%got_rules);
                         if (ref($alerts{'username'}) eq 'HASH') {                          if (ref($alerts{'username'}) eq 'HASH') {
                             if (ref($alerts{'username'}{$domain}) eq 'HASH') {                              if (ref($alerts{'username'}{$domain}) eq 'HASH') {
                                 if ($alerts{'username'}{$domain}{$username}) {                                  next if ($alerts{'username'}{$domain}{$username});
                                     $r->print('<br />'.  
                                               &mt('[_1]: matches the username format at your institution, but is not known to your directory service.','<b>'.$username.'</b>').'<br />'.  
                                               &mt('Consequently, the user was not created.'));  
                                     next;  
                                 }  
                             }                              }
                         }                          }
                         my $usertype = 'unofficial';  
                         if (ref($rulematch{$user}) eq 'HASH') {  
                             if ($rulematch{$user}{'username'}) {  
                                 $usertype = 'official';  
                             }  
                         }  
                         if (!$cancreate{$usertype}) {  
                             $r->print('<br />'.  
                                       &mt("[_1]: The user does not exist, and you are not permitted to create users of type: $longtypes{$usertype}.",'<b>'.$username.'</b>'));  
                             next;  
                         }  
                     } else {                      } else {
                         if ($context eq 'course' || $context eq 'author') {                          if ($context eq 'course' || $context eq 'author') {
                             if ($userdomain eq $domain ) {                              if ($userdomain eq $domain ) {
Line 4412  sub upfile_drop_add { Line 4134  sub upfile_drop_add {
                                 \%got_rules);                                  \%got_rules);
                             if (ref($alerts{'id'}) eq 'HASH') {                              if (ref($alerts{'id'}) eq 'HASH') {
                                 if (ref($alerts{'id'}{$userdomain}) eq 'HASH') {                                  if (ref($alerts{'id'}{$userdomain}) eq 'HASH') {
                                     if ($alerts{'id'}{$userdomain}{$id}) {                                      next if ($alerts{'id'}{$userdomain}{$id});
                                         $r->print(&mt('[_1]: has a student/employee ID matching the format at your institution, but the ID is found by your directory service.',  
                                                   '<b>'.$username.'</b>').'<br />'.  
                                                   &mt('Consequently, the user was not created.'));  
                                         next;  
                                     }  
                                 }                                  }
                             }                              }
                         }                          }
Line 4516  sub upfile_drop_add { Line 4233  sub upfile_drop_add {
         $r->print("</p>\n<p>\n".&mt('Processed [quant,_1,user].',$counts{'user'}).          $r->print("</p>\n<p>\n".&mt('Processed [quant,_1,user].',$counts{'user'}).
                   "</p>\n");                    "</p>\n");
         if ($counts{'role'} > 0) {          if ($counts{'role'} > 0) {
             if (&Apache::loncommon::needs_gci_custom()) {              $r->print("<p>\n".
                 $r->print("<p>\n".                        &mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.')."</p>\n");
                           &mt('[quant,_1,student] enrolled in Concept Test.',$counts{'role'}).  
                          "</p>\n");  
             } else {  
                 $r->print("<p>\n".  
                           &mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.')."</p>\n");  
             }  
         } else {          } else {
             if (&Apache::loncommon::needs_gci_custom()) {              $r->print('<p>'.&mt('No roles added').'</p>');
                 $r->print('<p>'.&mt('No students enrolled').'</p>');  
             } else {  
                 $r->print('<p>'.&mt('No roles added').'</p>');  
             }  
         }          }
         if ($counts{'auth'} > 0) {          if ($counts{'auth'} > 0) {
             $r->print("<p>\n".              $r->print("<p>\n".
Line 5183  function setSections(formname,crstype) { Line 4890  function setSections(formname,crstype) {
                         if (crstype == 'Community') {                          if (crstype == 'Community') {
                             alert("$alerts{'inea'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}");                              alert("$alerts{'inea'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}");
                         } else {                          } else {
                             alert("$alerts{'inec'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}");                              alert("$alerts{'inco'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}");
                         }                          }
                         return;                          return;
                     }                      }
Line 5215  ENDSECCODE Line 4922  ENDSECCODE
     return $setsection_js;       return $setsection_js; 
 }  }
   
 sub newsections_javascript {  
     my %alerts = &Apache::lonlocal::texthash(  
                     inea => 'In each course, each user may only have one student role at a time.',  
                     youh => 'You had selected ',  
                     secs => 'sections.',  
                     plmo => 'Please modify your selections so they include no more than one section.',  
                     mayn => 'may not be used as the name for a section, as it is a reserved word.',  
                     plch => 'Please choose a different section name.',  
                  );  
     my $setsection_js = <<"ENDSECCODE";  
   
 function setSections(formname) {  
     var newsecs = formname.newsec.value;  
     var numsplit = 0;  
     var numsec = 0;  
     if (newsecs != null && newsecs != "") {  
         numsplit = newsecs.split(/,/g);  
         numsec = numsplit.length;  
     }  
     if (numsec > 1) {  
         alert("$alerts{'inea'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}");  
     } else {  
         if (numsplit > 0) {  
             for (var j=0; j<numsplit.length; j++) {  
                 if ((numsplit[j] == 'all') ||  
                     (numsplit[j] == 'none')) {  
                     alert("'"+numsplit[j]+"' $alerts{'mayn'}\\n$alerts{'plch'}");  
                     return;  
                 }  
            }  
            formname.sections.value = newsecs;  
        }  
     }  
     return 'ok';  
 }  
   
 ENDSECCODE  
     return $setsection_js;  
 }  
   
 sub can_create_user {  sub can_create_user {
     my ($dom,$context,$usertype) = @_;      my ($dom,$context,$usertype) = @_;
     my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom);      my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom);
Line 5369  sub roles_by_context { Line 5036  sub roles_by_context {
         if ($env{'request.role'} =~ m{^dc\./}) {          if ($env{'request.role'} =~ m{^dc\./}) {
             push(@allroles,'ad');              push(@allroles,'ad');
         }          }
         if (&Apache::loncommon::needs_gci_custom()) {          push(@allroles,('ta','ep','in'));
             if ($crstype eq 'Community') {          if ($crstype eq 'Community') {
                 push(@allroles,'co');              push(@allroles,'co');
             } else {  
                 push(@allroles,'cc');  
             }  
         } else {          } else {
             push(@allroles,('ta','ep','in'));              push(@allroles,'cc');
             if ($crstype eq 'Community') {          }
                 push(@allroles,'co');          if ($custom) {
             } else {              push(@allroles,'cr');
                 push(@allroles,'cc');  
             }  
             if ($custom) {  
                 push(@allroles,'cr');  
             }  
         }          }
     } elsif ($context eq 'author') {      } elsif ($context eq 'author') {
         @allroles = ('ca','aa');          @allroles = ('ca','aa');

Removed from v.1.109.2.7  
changed lines
  Added in v.1.111


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>