Diff for /loncom/interface/loncreateuser.pm between versions 1.106 and 1.133

version 1.106, 2005/06/23 21:56:12 version 1.133, 2006/11/21 21:03:06
Line 64  use Apache::Constants qw(:common :http); Line 64  use Apache::Constants qw(:common :http);
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::longroup;
   use lib '/home/httpd/lib/perl/';
   use LONCAPA;
   
 my $loginscript; # piece of javascript used in two separate instances  my $loginscript; # piece of javascript used in two separate instances
 my $generalrule;  my $generalrule;
Line 116  sub authorpriv { Line 119  sub authorpriv {
 # =================================================================== Phase one  # =================================================================== Phase one
   
 sub print_username_entry_form {  sub print_username_entry_form {
     my $r=shift;      my ($r) = @_;
     my $defdom=$env{'request.role.domain'};      my $defdom=$env{'request.role.domain'};
     my @domains = &Apache::loncommon::get_domains();      my @domains = &Apache::loncommon::get_domains();
     my $domform = &Apache::loncommon::select_dom_form($defdom,'ccdomain');      my $domform = &Apache::loncommon::select_dom_form($defdom,'ccdomain');
     my $html=&Apache::lonxml::xmlbegin();  
     my $bodytag =&Apache::loncommon::bodytag('Create Users, Change User Privileges').&Apache::loncommon::help_open_menu('',undef,undef,'',282,'Instructor Interface');  
     my $selscript=&Apache::loncommon::studentbrowser_javascript();      my $selscript=&Apache::loncommon::studentbrowser_javascript();
       my $start_page =
    &Apache::loncommon::start_page('Create Users, Change User Privileges',
          $selscript);
   
     my $sellink=&Apache::loncommon::selectstudent_link      my $sellink=&Apache::loncommon::selectstudent_link
                                         ('crtuser','ccuname','ccdomain');                                          ('crtuser','ccuname','ccdomain');
     my %existingroles=&my_custom_roles();      my %existingroles=&my_custom_roles();
Line 137  sub print_username_entry_form { Line 142  sub print_username_entry_form {
                     'nr'   => "Name of Role",                      'nr'   => "Name of Role",
                     'cre'  => "Custom Role Editor"                      'cre'  => "Custom Role Editor"
        );         );
       my $help = &Apache::loncommon::help_open_menu(undef,undef,282,'Instructor Interface');
     my $helpsiur=&Apache::loncommon::help_open_topic('Course_Change_Privileges');      my $helpsiur=&Apache::loncommon::help_open_topic('Course_Change_Privileges');
     my $helpecpr=&Apache::loncommon::help_open_topic('Course_Editing_Custom_Roles');      my $helpecpr=&Apache::loncommon::help_open_topic('Course_Editing_Custom_Roles');
     $r->print(<<"ENDDOCUMENT");      $r->print(<<"ENDDOCUMENT");
 $html  $start_page
 <head>  
 <title>The LearningOnline Network with CAPA</title>  
 $selscript  
 </head>  
 $bodytag  
 <form action="/adm/createuser" method="post" name="crtuser">  <form action="/adm/createuser" method="post" name="crtuser">
 <input type="hidden" name="phase" value="get_user_info">  <input type="hidden" name="phase" value="get_user_info">
 <h2>$lt{siur}$helpsiur</h2>  <h2>$lt{siur}$helpsiur</h2>
Line 164  ENDDOCUMENT Line 165  ENDDOCUMENT
 <h2>$lt{'ecrp'}$helpecpr</h2>  <h2>$lt{'ecrp'}$helpecpr</h2>
 $lt{'nr'}: $choice <input type="text" size="15" name="newrolename" /><br />  $lt{'nr'}: $choice <input type="text" size="15" name="newrolename" /><br />
 <input name="customeditor" type="submit" value="$lt{'cre'}" />  <input name="customeditor" type="submit" value="$lt{'cre'}" />
 </body>  </form>
 </html>  
 ENDCUSTOM  ENDCUSTOM
    }      }
       $r->print(&Apache::loncommon::end_page());
   }
   
   
   sub user_modification_js {
       my ($pjump_def,$dc_setcourse_code,$nondc_setsection_code,$groupslist)=@_;
       
       return <<END;
   <script type="text/javascript" language="Javascript">
   
       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();
       }
   
       $nondc_setsection_code
   
   </script>
   END
 }  }
   
 # =================================================================== Phase two  # =================================================================== Phase two
Line 200  sub print_user_modification_page { Line 229  sub print_user_modification_page {
     $ccdomain=~s/\W//g;      $ccdomain=~s/\W//g;
     my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();      my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
     my $dc_setcourse_code = '';      my $dc_setcourse_code = '';
     my $loaditem;      my $nondc_setsection_code = '';                                        
   
       my %loaditem;
   
       my $groupslist;
       my %curr_groups = &Apache::longroup::coursegroups();
       if (%curr_groups) {
           $groupslist = join('","',sort(keys(%curr_groups)));
           $groupslist = '"'.$groupslist.'"';   
       }
   
     if ($env{'request.role'} =~ m-^dc\./(\w+)/$-) {      if ($env{'request.role'} =~ m-^dc\./(\w+)/$-) {
         my $dcdom = $1;          my $dcdom = $1;
         $loaditem = qq|OnLoad="document.cu.coursedesc.value=''"|;          $loaditem{'onload'} = "document.cu.coursedesc.value='';";
           my @rolevals = ('st','ta','ep','in','cc');
           my (@crsroles,@grproles);
           for (my $i=0; $i<@rolevals; $i++) {
               $crsroles[$i]=&Apache::lonnet::plaintext($rolevals[$i],'Course');
               $grproles[$i]=&Apache::lonnet::plaintext($rolevals[$i],'Group');
           }
           my $rolevalslist = join('","',@rolevals);
           my $crsrolenameslist = join('","',@crsroles);
           my $grprolenameslist = join('","',@grproles);
           my $pickcrsfirst = '<--'.&mt('Pick course first');
           my $pickgrpfirst = '<--'.&mt('Pick group first'); 
         $dc_setcourse_code = <<"ENDSCRIPT";          $dc_setcourse_code = <<"ENDSCRIPT";
     function setCourse() {      function setCourse() {
         var course = document.cu.dccourse.value;          var course = document.cu.dccourse.value;
Line 215  sub print_user_modification_page { Line 265  sub print_user_modification_page {
             var userrole = document.cu.role.options[document.cu.role.selectedIndex].value              var userrole = document.cu.role.options[document.cu.role.selectedIndex].value
             var section="";              var section="";
             var numsections = 0;              var numsections = 0;
               var newsecs = new Array();
             for (var i=0; i<document.cu.currsec.length; i++) {              for (var i=0; i<document.cu.currsec.length; i++) {
                 if (document.cu.currsec.options[i].selected == true ) {                  if (document.cu.currsec.options[i].selected == true ) {
                     if (document.cu.currsec.options[i].value != "" && document.cu.currsec.options[i].value != null) {                       if (document.cu.currsec.options[i].value != "" && document.cu.currsec.options[i].value != null) { 
Line 236  sub print_user_modification_page { Line 287  sub print_user_modification_page {
                 else {                  else {
                     section = section + "," +  document.cu.newsec.value                      section = section + "," +  document.cu.newsec.value
                 }                  }
                 var numsplit = document.cu.newsec.value.split(/,/g);                  newsecs = document.cu.newsec.value.split(/,/g);
                 numsections = numsections + numsplit.length;                  numsections = numsections + newsecs.length;
             }              }
             if ((userrole == 'st') && (numsections > 1)) {              if ((userrole == 'st') && (numsections > 1)) {
                 alert("In each course, each user may only have one student role at a time. You had selected "+numsections+" sections.\\nPlease modify your selections so they include no more than one section.")                  alert("In each course, each user may only have one student role at a time. You had selected "+numsections+" sections.\\nPlease modify your selections so they include no more than one section.")
                 return;                  return;
             }              }
               for (var j=0; j<newsecs.length; j++) {
                   if ((newsecs[j] == 'all') || (newsecs[j] == 'none')) {
                       alert("'"+newsecs[j]+"' may not be used as the name for a section, as it is a reserved word.\\nPlease choose a different section name.");
                       return;
                   }
                   if (document.cu.groups.value != '') {
                       var groups = document.cu.groups.value.split(/,/g);
                       for (var k=0; k<groups.length; k++) {
                           if (newsecs[j] == groups[k]) {
                               alert("'"+newsecs[j]+"' may not be used as the name for a section, as it is the name of a course group.\\nSection names and group names must be distinct. Please choose a different section name.");
                               return; 
                           }
                       }
                   }
               }
             if ((userrole == 'cc') && (numsections > 0)) {              if ((userrole == 'cc') && (numsections > 0)) {
                 alert("Section designations do not apply to Course Coordinator roles.\\nA course coordinator role will be added with access to all sections.");                  alert("Section designations do not apply to Course Coordinator roles.\\nA course coordinator role will be added with access to all sections.");
                 section = "";                  section = "";
             }              }
               var coursename = "_$dcdom"+"_"+course+"_"+userrole
             var numcourse = getIndex(document.cu.dccourse);              var numcourse = getIndex(document.cu.dccourse);
             if (numcourse == "-1") {              if (numcourse == "-1") {
                 alert("There was a problem with your course selection");                  alert("There was a problem with your course selection");
                 return                  return
             }              }
             else {               else {
                 var coursename = "_$dcdom"+"_"+course+"_"+userrole                  document.cu.elements[numcourse].name = "act"+coursename;
                 document.cu.elements[numcourse].name = "act"+coursename                  var numnewsec = getIndex(document.cu.newsec);
                 document.cu.elements[numcourse+4].name = "sec"+coursename                  if (numnewsec != "-1") {
                 document.cu.elements[numcourse+4].value = section                      document.cu.elements[numnewsec].name = "sec"+coursename;
                 document.cu.elements[numcourse+5].name = "start"+coursename                      document.cu.elements[numnewsec].value = section;
                 document.cu.elements[numcourse+6].name = "end"+coursename                  }
                   var numstart = getIndex(document.cu.start);
                   if (numstart != "-1") {
                       document.cu.elements[numstart].name = "start"+coursename;
                   }
                   var numend = getIndex(document.cu.end);
                   if (numend != "-1") {
                       document.cu.elements[numend].name = "end"+coursename
                   }
             }              }
         }          }
         document.cu.submit();          document.cu.submit();
Line 272  sub print_user_modification_page { Line 347  sub print_user_modification_page {
         }          }
         return -1;          return -1;
     }      }
 ENDSCRIPT  
     }  
     my $html=&Apache::lonxml::xmlbegin();  
     my $dochead =<<"ENDDOCHEAD";  
 $html  
 <head>  
 <title>The LearningOnline Network with CAPA</title>  
 <script type="text/javascript" language="Javascript">  
   
     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() {      function setType() {
         eval("document.cu."+document.cu.pres_marker.value+          var crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value;
             ".value=document.cu.pres_value.value");          rolevals = new Array("$rolevalslist");
         pclose();          if (crstype == 'Group') {
               if (document.cu.currsec.options[0].text == "$pickcrsfirst") {
                   document.cu.currsec.options[0].text = "$pickgrpfirst";
               } 
               grprolenames = new Array("$grprolenameslist");
               for (var i=0; i<rolevals.length; i++) {
                   if (document.cu.role.selectedIndex == i) {
                       document.cu.role.options[i] = new Option(grprolenames[i],rolevals[i],true,false);
                   } else {
                       document.cu.role.options[i] = new Option(grprolenames[i],rolevals[i],false,false);
                   }
               }
           } else {
               if (document.cu.currsec.options[0].text == "$pickgrpfirst") {
                   document.cu.currsec.options[0].text = "$pickcrsfirst";
               }
               crsrolenames = new Array("$crsrolenameslist");
               for (var i=0; i<rolevals.length; i++) {
                   if (document.cu.role.selectedIndex == i) {
                       document.cu.role.options[i] = new Option(crsrolenames[i],rolevals[i],true,false);
                   } else {
                       document.cu.role.options[i] = new Option(crsrolenames[i],rolevals[i],false,false);
                   }
               }
           }
     }      }
   ENDSCRIPT
       } else {
           $nondc_setsection_code = <<"ENDSECCODE";
     function setSections() {      function setSections() {
         var re1 = /^currsec_/;          var re1 = /^currsec_/;
           var groups = new Array($groupslist);
         for (var i=0;i<document.cu.elements.length;i++) {          for (var i=0;i<document.cu.elements.length;i++) {
             var str = document.cu.elements[i].name;              var str = document.cu.elements[i].name;
             var checkcurr = str.match(re1);              var checkcurr = str.match(re1);
             if (checkcurr != null) {              if (checkcurr != null) {
                 var re2 = /^currsec_[a-zA-Z0-9]+_[a-zA-Z0-9]+_(\\w+)\$/;  
                 if (document.cu.elements[i-1].checked == true) {                  if (document.cu.elements[i-1].checked == true) {
                     var re2 = /^currsec_[a-zA-Z0-9]+_[a-zA-Z0-9]+_(\\w+)\$/;                      var re2 = /^currsec_[a-zA-Z0-9]+_[a-zA-Z0-9]+_(\\w+)\$/;
                     match = re2.exec(str);                      match = re2.exec(str);
Line 333  $html Line 417  $html
                         if (numsec > 0) {                          if (numsec > 0) {
                             if (document.cu.elements[i+1].value != "" && document.cu.elements[i+1].value != null) {                              if (document.cu.elements[i+1].value != "" && document.cu.elements[i+1].value != null) {
                                 sections = sections + "," +  document.cu.elements[i+1].value;                                  sections = sections + "," +  document.cu.elements[i+1].value;
                             }                               }
                         }                          }
                         else {                          else {
                             sections = document.cu.elements[i+1].value;                                  sections = document.cu.elements[i+1].value;
                         }                          }
                         var newsecs = document.cu.elements[i+1].value;                          var newsecs = document.cu.elements[i+1].value;
    var numsplit;
                         if (newsecs != null && newsecs != "") {                          if (newsecs != null && newsecs != "") {
                             var numsplit = newsecs.split(/,/g);                              numsplit = newsecs.split(/,/g);
                             numsec = numsec + numsplit.length;                              numsec = numsec + numsplit.length;
                         }                          }
   
                         if ((role == 'st') && (numsec > 1)) {                          if ((role == 'st') && (numsec > 1)) {
                             alert("In each course, each user may only have one student role at a time. You had selected "+numsec+" sections.\\nPlease modify your selections so they include no more than one section.")                                alert("In each course, each user may only have one student role at a time. You had selected "+numsec+" sections.\\nPlease modify your selections so they include no more than one section.")
                             return;                              return;
                         }                          }
                         else {                           else if (numsplit != null) {
                             document.cu.elements[i+2].value = sections;                              for (var j=0; j<numsplit.length; j++) {
                                   if ((numsplit[j] == 'all') ||
                                       (numsplit[j] == 'none')) {
                                       alert("'"+numsplit[j]+"' may not be used as the name for a section, as it is a reserved word.\\nPlease choose a different section name.");
                                       return;
                                   }
                                   for (var k=0; k<groups.length; k++) {
                                       if (numsplit[j] == groups[k]) {
                                           alert("'"+numsplit[j]+"' may not be used as a section name, as it is the name of a course group.\\nSection names and group names must be distinct. Please choose a different section name.");
                                           return;
                                       }
                                   }
                               }
                         }                          }
                           document.cu.elements[i+2].value = sections;
                     }                      }
                 }                  }
             }              }
         }          }
         document.cu.submit();          document.cu.submit();
     }      }
 </script>  ENDSECCODE
 </head>      }
 ENDDOCHEAD      my $js = &user_modification_js($pjump_def,$dc_setcourse_code,
     $r->print(&Apache::loncommon::bodytag(                                     $nondc_setsection_code,$groupslist);
                                      'Create Users, Change User Privileges',undef,$loaditem));      my $start_page = 
    &Apache::loncommon::start_page('Create Users, Change User Privileges',
          $js,{'add_entries' => \%loaditem,});
   
     my $forminfo =<<"ENDFORMINFO";      my $forminfo =<<"ENDFORMINFO";
 <form action="/adm/createuser" method="post" name="cu">  <form action="/adm/createuser" method="post" name="cu">
 <input type="hidden" name="phase"       value="update_user_data">  <input type="hidden" name="phase"       value="update_user_data">
Line 402  ENDFORMINFO Line 504  ENDFORMINFO
  my $genhelp=&Apache::loncommon::help_open_topic('Generation');   my $genhelp=&Apache::loncommon::help_open_topic('Generation');
         &initialize_authen_forms();          &initialize_authen_forms();
  $r->print(<<ENDNEWUSER);   $r->print(<<ENDNEWUSER);
 $dochead  $start_page
 <h1>$lt{'cnu'}</h1>  <h1>$lt{'cnu'}</h1>
 $forminfo  $forminfo
 <h2>$lt{'nu'} "$ccuname" $lt{'id'} $ccdomain</h2>  <h2>$lt{'nu'} "$ccuname" $lt{'id'} $ccdomain</h2>
Line 443  ENDNEWUSER Line 545  ENDNEWUSER
                     'gen'  => "generation"                      'gen'  => "generation"
        );         );
  $r->print(<<ENDCHANGEUSER);   $r->print(<<ENDCHANGEUSER);
 $dochead  $start_page
 <h1>$lt{'cup'}</h1>  <h1>$lt{'cup'}</h1>
 $forminfo  $forminfo
 <h2>$lt{'usr'} "$ccuname" $lt{'id'} "$ccdomain"</h2>  <h2>$lt{'usr'} "$ccuname" $lt{'id'} "$ccdomain"</h2>
Line 511  END Line 613  END
                if ($area =~ /^\/(\w+)\/(\d\w+)/ ) {                 if ($area =~ /^\/(\w+)\/(\d\w+)/ ) {
    $class='Course';     $class='Course';
                    my ($coursedom,$coursedir) = ($1,$2);                     my ($coursedom,$coursedir) = ($1,$2);
    $sortkey.="\0$1";     $sortkey.="\0$coursedom";
                    # $1.'_'.$2 is the course id (eg. 103_12345abcef103l3).                     # $1.'_'.$2 is the course id (eg. 103_12345abcef103l3).
                    my %coursedata=                     my %coursedata=
                        &Apache::lonnet::coursedescription($1.'_'.$2);                         &Apache::lonnet::coursedescription($1.'_'.$2);
Line 521  END Line 623  END
                            '<br />'.&mt('Domain').': '.$coursedom.('&nbsp;'x8).                             '<br />'.&mt('Domain').': '.$coursedom.('&nbsp;'x8).
      &Apache::loncommon::syllabuswrapper('Syllabus',$coursedir,$coursedom);       &Apache::loncommon::syllabuswrapper('Syllabus',$coursedir,$coursedom);
        $sortkey.="\0".$coursedata{'description'};         $sortkey.="\0".$coursedata{'description'};
                          $class=$coursedata{'type'};
    } else {     } else {
        $carea=&mt('Unavailable course').': '.$area;         $carea=&mt('Unavailable course').': '.$area;
        $sortkey.="\0".&mt('Unavailable course').': '.$area;         $sortkey.="\0".&mt('Unavailable course').': '.$area;
    }     }
      $sortkey.="\0$coursedir";
                    $inccourses{$1.'_'.$2}=1;                     $inccourses{$1.'_'.$2}=1;
                    if ((&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2)) ||                     if ((&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2)) ||
                        (&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) {                         (&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) {
Line 546  END Line 650  END
                    $bgcol=~s/[^7-9a-e]//g;                     $bgcol=~s/[^7-9a-e]//g;
                    $bgcol=substr($bgcol.$bgcol.$bgcol.'ffffff',2,6);                     $bgcol=substr($bgcol.$bgcol.$bgcol.'ffffff',2,6);
                    if ($area=~/^\/(\w+)\/(\d\w+)\/(\w+)/) {                     if ($area=~/^\/(\w+)\/(\d\w+)\/(\w+)/) {
                        $carea.='<br />Section/Group: '.$3;                         $carea.='<br />Section: '.$3;
        $sortkey.="\0$3";         $sortkey.="\0$3";
                    }                     }
                    $area=$carea;                     $area=$carea;
Line 612  END Line 716  END
                }                 }
        my $plaintext='';         my $plaintext='';
        unless ($croletitle) {         unless ($croletitle) {
    $plaintext=&Apache::lonnet::plaintext($role_code);                     $plaintext=&Apache::lonnet::plaintext($role_code,$class)
        } else {         } else {
            $plaintext=             $plaintext=
  "Customrole '$croletitle' defined by $croleuname\@$croleudom";   "Customrole '$croletitle' defined by $croleuname\@$croleudom";
Line 632  END Line 736  END
            } # end of foreach        (table building loop)             } # end of foreach        (table building loop)
            my $rolesdisplay = 0;             my $rolesdisplay = 0;
            my %output = ();             my %output = ();
    foreach my $type ('Construction Space','Course','Domain','System','Unknown') {     foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') {
        $output{$type} = '';         $output{$type} = '';
        foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {         foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
    if ( ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/ ) && ($rolepriv{$sortrole{$which}}) ) {      if ( ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/ ) && ($rolepriv{$sortrole{$which}}) ) { 
Line 654  END Line 758  END
 <tr><th>$lt{'rev'}</th><th>$lt{'ren'}</th><th>$lt{'del'}</th><th>$lt{'rol'}</th><th>$lt{'e  <tr><th>$lt{'rev'}</th><th>$lt{'ren'}</th><th>$lt{'del'}</th><th>$lt{'rol'}</th><th>$lt{'e
 xt'}</th><th>$lt{'sta'}</th><th>$lt{'end'}</th>  xt'}</th><th>$lt{'sta'}</th><th>$lt{'end'}</th>
 END  END
                foreach my $type ('Construction Space','Course','Domain','System','Unknown') {                 foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') {
                    if ($output{$type}) {                     if ($output{$type}) {
                        $r->print($output{$type}."\n");                         $r->print($output{$type}."\n");
                    }                     }
Line 665  END Line 769  END
  my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain);   my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain);
  if ($currentauth=~/^krb(4|5):/) {   if ($currentauth=~/^krb(4|5):/) {
     $currentauth=~/^krb(4|5):(.*)/;      $currentauth=~/^krb(4|5):(.*)/;
     my $krbdefdom=$1;      my $krbdefdom=$2;
             my %param = ( formname => 'document.cu',              my %param = ( formname => 'document.cu',
                           kerb_def_dom => $krbdefdom                             kerb_def_dom => $krbdefdom 
                           );                            );
Line 677  END Line 781  END
  $currentauth=~/^internal:/ or   $currentauth=~/^internal:/ or
  $currentauth=~/^localauth:/   $currentauth=~/^localauth:/
  ) { # bad authentication scheme   ) { # bad authentication scheme
     if (&Apache::lonnet::allowed('mau',$env{'request.role.domain'})) {      if (&Apache::lonnet::allowed('mau',$ccdomain)) {
                 &initialize_authen_forms();                  &initialize_authen_forms();
  my %lt=&Apache::lonlocal::texthash(   my %lt=&Apache::lonlocal::texthash(
                                'err'   => "ERROR",                                 'err'   => "ERROR",
Line 700  $lt{'uuas'} ($currentauth). $lt{'sldb'}. Line 804  $lt{'uuas'} ($currentauth). $lt{'sldb'}.
 <p>$authformloc</p>  <p>$authformloc</p>
 ENDBADAUTH  ENDBADAUTH
             } else {               } else { 
                 # This user is not allowed to modify the users                   # This user is not allowed to modify the user's 
                 # authentication scheme, so just notify them of the problem                  # authentication scheme, so just notify them of the problem
  my %lt=&Apache::lonlocal::texthash(   my %lt=&Apache::lonlocal::texthash(
                                'err'   => "ERROR",                                 'err'   => "ERROR",
Line 709  ENDBADAUTH Line 813  ENDBADAUTH
    );     );
  $r->print(<<ENDBADAUTH);   $r->print(<<ENDBADAUTH);
 <hr />  <hr />
 <script type="text/javascript" language="Javascript">  
 $loginscript  
 </script>  
 <font color="#ff0000"> $lt{'err'}: </font>  <font color="#ff0000"> $lt{'err'}: </font>
 $lt{'uuas'} ($currentauth). $lt{'adcs'}.  $lt{'uuas'} ($currentauth). $lt{'adcs'}.
 <hr />  <hr />
Line 742  ENDBADAUTH Line 843  ENDBADAUTH
                     "<p>$authformint</p><p>$authformfsys</p>";                      "<p>$authformint</p><p>$authformfsys</p>";
     }      }
             $authformcurrent.=' <i>(will override current values)</i><br />';              $authformcurrent.=' <i>(will override current values)</i><br />';
             if (&Apache::lonnet::allowed('mau',$env{'request.role.domain'})) {              if (&Apache::lonnet::allowed('mau',$ccdomain)) {
  # Current user has login modification privileges   # Current user has login modification privileges
  my %lt=&Apache::lonlocal::texthash(   my %lt=&Apache::lonlocal::texthash(
                                'ccld'  => "Change Current Login Data",                                 'ccld'  => "Change Current Login Data",
Line 760  $loginscript Line 861  $loginscript
 <h3>$lt{'enld'}</h3>  <h3>$lt{'enld'}</h3>
 $authform_other  $authform_other
 ENDOTHERAUTHS  ENDOTHERAUTHS
               } else {
                   if (&Apache::lonnet::allowed('mau',$env{'request.role.domain'})) {
                       my %lt=&Apache::lonlocal::texthash(
                                  'ccld'  => "Change Current Login Data",
                                  'yodo'  => "You do not have privileges to modify the authentication configuration for this user.",
                                  'ifch'  => "If a change is required, contact a domain coordinator for the domain",
                       );
                       $r->print(<<ENDNOPRIV);
   <hr />
   <h3>$lt{'ccld'}</h3>
   $lt{'yodo'} $lt{'ifch'}: $ccdomain 
   ENDNOPRIV
                   } 
             }              }
         }  ## End of "check for bad authentication type" logic          }  ## End of "check for bad authentication type" logic
     } ## End of new user/old user logic      } ## End of new user/old user logic
Line 852  ENDDROW Line 966  ENDDROW
         $r->print($domaintext);          $r->print($domaintext);
     }      }
 #  #
 # Course level  # Course and group levels
 #  #
     my $num_sections;  
   
     if ($env{'request.role'} =~ m-^dc\./(\w+)/$-) {      if ($env{'request.role'} =~ m-^dc\./(\w+)/$-) {
         $r->print(&course_level_dc($1));          $r->print(&course_level_dc($1,'Course'));
         $r->print('<hr /><input type="button" value="'.&mt('Modify User').'" onClick="setCourse()">'."\n");          $r->print('<hr /><input type="button" value="'.&mt('Modify User').'" onClick="setCourse()">'."\n");
     } else {      } else {
         $r->print(&course_level_table(%inccourses));          $r->print(&course_level_table(%inccourses));
         $r->print('<hr /><input type="button" value="'.&mt('Modify User').'" onClick="setSections()">'."\n");          $r->print('<hr /><input type="button" value="'.&mt('Modify User').'" onClick="setSections()">'."\n");
     }      }
     $r->print("</form></body></html>");      $r->print("</form>".&Apache::loncommon::end_page());
 }  }
   
 # ================================================================= Phase Three  # ================================================================= Phase Three
Line 873  sub update_user_data { Line 986  sub update_user_data {
                                           $env{'form.ccdomain'});                                            $env{'form.ccdomain'});
     # Error messages      # Error messages
     my $error     = '<font color="#ff0000">'.&mt('Error').':</font>';      my $error     = '<font color="#ff0000">'.&mt('Error').':</font>';
     my $end       = '</body></html>';      my $end       = &Apache::loncommon::end_page();
     # Print header  
     my $html=&Apache::lonxml::xmlbegin();  
     $r->print(<<ENDTHREEHEAD);  
 $html  
 <head>  
 <title>The LearningOnline Network with CAPA</title>  
 </head>  
 ENDTHREEHEAD  
     my $title;      my $title;
     if (exists($env{'form.makeuser'})) {      if (exists($env{'form.makeuser'})) {
  $title='Set Privileges for New User';   $title='Set Privileges for New User';
     } else {      } else {
         $title='Modify User Privileges';          $title='Modify User Privileges';
     }      }
     $r->print(&Apache::loncommon::bodytag($title));      $r->print(&Apache::loncommon::start_page($title));
       my %disallowed;
     # Check Inputs      # Check Inputs
     if (! $env{'form.ccuname'} ) {      if (! $env{'form.ccuname'} ) {
  $r->print($error.&mt('No login name specified').'.'.$end);   $r->print($error.&mt('No login name specified').'.'.$end);
Line 1110  END Line 1217  END
  &Apache::lonnet::critical('put:'.   &Apache::lonnet::critical('put:'.
                              $env{'course.'.$cid.'.domain'}.':'.                               $env{'course.'.$cid.'.domain'}.':'.
                      $env{'course.'.$cid.'.num'}.':classlist:'.                       $env{'course.'.$cid.'.num'}.':classlist:'.
                          &Apache::lonnet::escape($env{'form.ccuname'}.':'.                           &escape($env{'form.ccuname'}.':'.
                              $env{'form.ccdomain'}).'='.                               $env{'form.ccdomain'}).'='.
                          &Apache::lonnet::escape($now.':'),                           &escape($now.':'),
                      $env{'course.'.$cid.'.home'}).'</b><br />');                       $env{'course.'.$cid.'.home'}).'</b><br />');
  }   }
     }       } 
     if ($_=~/^form\.rev\:([^\_]+)\_cr\.cr\/(\w+)\/(\w+)\/(\w+)$/) {      if ($_=~/^form\.rev\:([^\_]+)\_cr\.cr\/(\w+)\/(\w+)\/(\w+)$/) {
 # Revoke custom role  # Revoke custom role
  $r->print(&mt('Revoking custom role').   $r->print(&mt('Revoking custom role:').
                       ' '.$4.' by '.$3.'@'.$2.' in '.$1.': <b>'.                        ' '.$4.' by '.$3.'@'.$2.' in '.$1.': <b>'.
                       &Apache::lonnet::revokecustomrole($env{'form.ccdomain'},                        &Apache::lonnet::revokecustomrole($env{'form.ccdomain'},
   $env{'form.ccuname'},$1,$2,$3,$4).    $env{'form.ccuname'},$1,$2,$3,$4).
  '</b><br />');   '</b><br />');
     }      }
  } elsif ($_=~/^form\.del/) {   } elsif ($_=~/^form\.del/) {
     if ($_=~/^form\.del\:([^\_]+)\_([^\_]+)$/) {      if ($_=~/^form\.del\:([^\_]+)\_([^\_\.]+)$/) {
   # Delete standard role
         $r->print(&mt('Deleting').' '.$2.' in '.$1.': '.          $r->print(&mt('Deleting').' '.$2.' in '.$1.': '.
                      &Apache::lonnet::assignrole($env{'form.ccdomain'},                       &Apache::lonnet::assignrole($env{'form.ccdomain'},
                      $env{'form.ccuname'},$1,$2,$now,0,1).'<br />');                       $env{'form.ccuname'},$1,$2,$now,0,1).'<br />');
Line 1136  END Line 1244  END
  &Apache::lonnet::critical('put:'.   &Apache::lonnet::critical('put:'.
                              $env{'course.'.$cid.'.domain'}.':'.                               $env{'course.'.$cid.'.domain'}.':'.
                      $env{'course.'.$cid.'.num'}.':classlist:'.                       $env{'course.'.$cid.'.num'}.':classlist:'.
                          &Apache::lonnet::escape($env{'form.ccuname'}.':'.                           &escape($env{'form.ccuname'}.':'.
                              $env{'form.ccdomain'}).'='.                               $env{'form.ccdomain'}).'='.
                          &Apache::lonnet::escape($now.':'),                           &escape($now.':'),
                      $env{'course.'.$cid.'.home'}).'</b><br />');                       $env{'course.'.$cid.'.home'}).'</b><br />');
  }   }
     }               }
               if ($_=~/^form\.del\:([^\_]+)\_cr\.cr\/(\w+)\/(\w+)\/(\w+)$/) {
                   my ($url,$rdom,$rnam,$rolename) = ($1,$2,$3,$4);
   # Delete custom role
                   $r->print(&mt('Deleting custom role [_1] by [_2]@[_3] in [_4]',
                         $rolename,$rnam,$rdom,$url).': <b>'.
                         &Apache::lonnet::assigncustomrole($env{'form.ccdomain'},
                            $env{'form.ccuname'},$url,$rdom,$rnam,$rolename,$now,
                            0,1).'</b><br />');
               }
  } elsif ($_=~/^form\.ren/) {   } elsif ($_=~/^form\.ren/) {
             my $udom = $env{'form.ccdomain'};              my $udom = $env{'form.ccdomain'};
             my $uname = $env{'form.ccuname'};              my $uname = $env{'form.ccuname'};
     if ($_=~/^form\.ren\:([^\_]+)\_([^\_]+)$/) {  # Re-enable standard role
       if ($_=~/^form\.ren\:([^\_]+)\_([^\_\.]+)$/) {
                 my $url = $1;                  my $url = $1;
                 my $role = $2;                  my $role = $2;
                 my $logmsg;                  my $logmsg;
                 my $output;                  my $output;
                 if ($role eq 'st') {                  if ($role eq 'st') {
                     if ($url =~ m-^/(\w+)/(\w+)/?(\w*)$-) {                      if ($url =~ m-^/(\w+)/(\w+)/?(\w*)$-) {
                         my $result = &commit_studentrole(\$logmsg,$udom,$uname,$url,$role,$now,0,$1,$2,$3);                          my $result = &Apache::loncommon::commit_studentrole(\$logmsg,$udom,$uname,$url,$role,$now,0,$1,$2,$3);
                         if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course')) {                          if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course')) {
                             $output = "Error: $result\n";                              $output = "Error: $result\n";
                         } else {                          } else {
Line 1165  END Line 1283  END
                 } else {                  } else {
     my $result=&Apache::lonnet::assignrole($env{'form.ccdomain'},      my $result=&Apache::lonnet::assignrole($env{'form.ccdomain'},
                                $env{'form.ccuname'},$url,$role,0,$now);                                 $env{'form.ccuname'},$url,$role,0,$now);
     $output = &mt('Re-Enabling [_1] in [_2]: [_3]',      $output = &mt('Re-enabling [_1] in [_2]: <b>[_3]</b>',
       $role,$url,$result).'<br />';        $role,$url,$result).'<br />';
  }   }
                 $r->print($output);                  $r->print($output);
     }       }
   # Re-enable custom role
               if ($_=~/^form\.ren\:([^\_]+)\_cr\.cr\/(\w+)\/(\w+)\/(\w+)$/) {
                   my ($url,$rdom,$rnam,$rolename) = ($1,$2,$3,$4);
                   my $result = &Apache::lonnet::assigncustomrole(
                                  $env{'form.ccdomain'}, $env{'form.ccuname'},
                                  $url,$rdom,$rnam,$rolename,0,$now);
                   $r->print(&mt('Re-enabling custom role [_1] by [_2]@[_3] in [_4] : <b>[_5]</b>',
                             $rolename,$rnam,$rdom,$url,$result).'<br />');
               }
  } elsif ($_=~/^form\.act/) {   } elsif ($_=~/^form\.act/) {
             my $udom = $env{'form.ccdomain'};              my $udom = $env{'form.ccdomain'};
             my $uname = $env{'form.ccuname'};              my $uname = $env{'form.ccuname'};
Line 1190  END Line 1317  END
                 my %sections = ();                  my %sections = ();
                 my $num_sections = &build_roles($env{'form.sec_'.$full},\%sections,$5);                  my $num_sections = &build_roles($env{'form.sec_'.$full},\%sections,$5);
                 if ($num_sections == 0) {                  if ($num_sections == 0) {
                     $r->print(&commit_customrole($udom,$uname,$url,$three,$four,$five,$start,$end));                      $r->print(&Apache::loncommon::commit_customrole($udom,$uname,$url,$three,$four,$five,$start,$end));
                 } else {                  } else {
                     foreach (sort {$a cmp $b} keys %sections) {      my %curr_groups =
                         my $securl = $url.'/'.$_;   &Apache::longroup::coursegroups($one,$two);
         $r->print(&commit_customrole($udom,$uname,$securl,$three,$four,$five,$start,$end));                      foreach my $sec (sort {$a cmp $b} keys %sections) {
                           if (($sec eq 'none') || ($sec eq 'all') || 
                               exists($curr_groups{$sec})) {
                               $disallowed{$sec} = $url;
                               next;
                           }
                           my $securl = $url.'/'.$sec;
           $r->print(&Apache::loncommon::commit_customrole($udom,$uname,$securl,$three,$four,$five,$start,$end));
                     }                      }
                 }                  }
     } elsif ($_=~/^form\.act\_([^\_]+)\_(\w+)\_([^\_]+)$/) {      } elsif ($_=~/^form\.act\_([^\_]+)\_(\w+)\_([^\_]+)$/) {
Line 1213  END Line 1347  END
                 my %sections = ();                  my %sections = ();
                 my $num_sections = &build_roles($env{'form.sec_'.$one.'_'.$two.'_'.$three},\%sections,$three);                  my $num_sections = &build_roles($env{'form.sec_'.$one.'_'.$two.'_'.$three},\%sections,$three);
                 if ($num_sections == 0) {                  if ($num_sections == 0) {
                     $r->print(&commit_standardrole($udom,$uname,$url,$three,$start,$end,$one,$two,''));                      $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$three,$start,$end,$one,$two,''));
                 } else {                  } else {
                       my %curr_groups = 
    &Apache::longroup::coursegroups($one,$two);
                     my $emptysec = 0;                      my $emptysec = 0;
                     foreach my $sec (sort {$a cmp $b} keys %sections) {                      foreach my $sec (sort {$a cmp $b} keys %sections) {
                         $sec =~ s/\W//g;                          $sec =~ s/\W//g;
                         if ($sec ne '') {                            if ($sec ne '') {
                               if (($sec eq 'none') || ($sec eq 'all') || 
                                   exists($curr_groups{$sec})) {
                                   $disallowed{$sec} = $url;
                                   next;
                               }
                             my $securl = $url.'/'.$sec;                              my $securl = $url.'/'.$sec;
                             $r->print(&commit_standardrole($udom,$uname,$securl,$three,$start,$end,$one,$two,$sec));                              $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$securl,$three,$start,$end,$one,$two,$sec));
                         } else {                          } else {
                             $emptysec = 1;                              $emptysec = 1;
                         }                          }
                     }                      }
                     if ($emptysec) {                      if ($emptysec) {
                         $r->print(&commit_standardrole($udom,$uname,$url,$three,$start,$end,$one,$two,''));                          $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$three,$start,$end,$one,$two,''));
                     }                      }
                 }                   } 
     } elsif ($_=~/^form\.act\_([^\_]+)\_([^\_]+)$/) {      } elsif ($_=~/^form\.act\_([^\_]+)\_([^\_]+)$/) {
Line 1243  END Line 1384  END
                 my %sections = ();                  my %sections = ();
                 my $num_sections = &build_roles($env{'form.sec_'.$1.'_'.$2},\%sections,$2);                  my $num_sections = &build_roles($env{'form.sec_'.$1.'_'.$2},\%sections,$2);
                 if ($num_sections == 0) {                  if ($num_sections == 0) {
                     $r->print(&commit_standardrole($udom,$uname,$url,$2,$start,$end,$1,undef,''));                      $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$2,$start,$end,$1,undef,''));
                 } else {                  } else {
                     my $emptysec = 0;                      my $emptysec = 0;
                     foreach my $sec (sort {$a cmp $b} keys %sections) {                      foreach my $sec (sort {$a cmp $b} keys %sections) {
                         if ($sec ne '') {                          if ($sec ne '') {
                             my $securl = $url.'/'.$sec;                              my $securl = $url.'/'.$sec;
                             $r->print(&commit_standardrole($udom,$uname,$securl,$2,$start,$end,$1,undef,$sec));                              $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$securl,$2,$start,$end,$1,undef,$sec));
                         } else {                          } else {
                             $emptysec = 1;                              $emptysec = 1;
                         }                          }
                     }                      }
                     if ($emptysec) {                      if ($emptysec) {
                         $r->print(&commit_standardrole($udom,$uname,$url,$2,$start,$end,$1,undef,''));                          $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$2,$start,$end,$1,undef,''));
                     }                      }
                 }                  }
     } else {      } else {
  $r->print('<p>'.&mt('ERROR').': '.&mt('Unknown command').' <tt>'.$_.'</tt></p><br />');   $r->print('<p>'.&mt('ERROR').': '.&mt('Unknown command').' <tt>'.$_.'</tt></p><br />');
             }              }
  }               foreach my $key (sort(keys(%disallowed))) {
                   if (($key eq 'none') || ($key eq 'all')) {  
                       $r->print('<p>'.&mt('[_1] may not be used as the name for a section, as it is a reserved word.',$key));
                   } else {
                       $r->print('<p>'.&mt('[_1] may not be used as the name for a section, as it is the name of a course group.',$key));
                   }
                   $r->print(' '.&mt('Please <a href="javascript:history.go(-1)">go back</a> and choose a different section name.').'</p><br />');
               }
    }
     } # End of foreach (keys(%env))      } # End of foreach (keys(%env))
 # Flush the course logs so reverse user roles immediately updated  # Flush the course logs so reverse user roles immediately updated
     &Apache::lonnet::flushcourselogs();      &Apache::lonnet::flushcourselogs();
     $r->print('<p><a href="/adm/createuser">Create/Modify Another User</a></p>');      $r->print('<p><a href="/adm/createuser">Create/Modify Another User</a></p>');
     $r->print('</body></html>');      $r->print(&Apache::loncommon::end_page());
 }  
   
 sub commit_customrole {  
     my ($udom,$uname,$url,$three,$four,$five,$start,$end) = @_;  
     my $output = &mt('Assigning custom role').' "'.$five.'" by '.$four.'@'.$three.' in '.$url.  
                          ($start?', '.&mt('starting').' '.localtime($start):'').  
                          ($end?', ending '.localtime($end):'').': <b>'.  
               &Apache::lonnet::assigncustomrole(  
                  $udom,$uname,$url,$three,$four,$five,$end,$start).  
                  '</b><br />';  
     return $output;  
 }  
   
 sub commit_standardrole {  
     my ($udom,$uname,$url,$three,$start,$end,$one,$two,$sec) = @_;  
     my $output;  
     my $logmsg;  
     if ($three eq 'st') {  
         my $result = &commit_studentrole(\$logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec);  
         if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course')) {  
             $output = "Error: $result\n";   
         } else {  
             $output = &mt('Assigning').' '.$three.' in '.$url.  
                ($start?', '.&mt('starting').' '.localtime($start):'').  
                ($end?', '.&mt('ending').' '.localtime($end):'').  
                ': <b>'.$result.'</b><br />'.  
                &mt('Add to classlist').': <b>ok</b><br />';  
         }  
     } else {  
         $output = &mt('Assigning').' '.$three.' in '.$url.  
                ($start?', '.&mt('starting').' '.localtime($start):'').  
                ($end?', '.&mt('ending').' '.localtime($end):'').': <b>'.  
                &Apache::lonnet::assignrole(  
                    $udom,$uname,$url,$three,$end,$start).  
                    '</b><br />';  
     }  
     return $output;  
 }  
   
 sub commit_studentrole {  
     my ($logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec) = @_;  
     my $linefeed =  '<br />'."\n";  
     my $result;  
     if (defined($one) && defined($two)) {  
         my $cid=$one.'_'.$two;  
         my $oldsec=&Apache::lonnet::getsection($udom,$uname,$cid);  
         my $secchange = 0;  
         my $expire_role_result;  
         my $modify_section_result;  
         unless ($oldsec eq '-1') {  
             unless ($sec eq $oldsec) {  
                 $secchange = 1;  
                 my $uurl='/'.$cid;  
                 $uurl=~s/\_/\//g;  
                 if ($oldsec) {  
                     $uurl.='/'.$oldsec;  
                 }  
                 $expire_role_result = &Apache::lonnet::assignrole($udom,$uname,$uurl,'st',time);  
                 $result = $expire_role_result;  
             }  
         }  
         if (($expire_role_result eq 'ok') || ($secchange == 0)) {  
             $modify_section_result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,'','',$cid);  
             if ($modify_section_result =~ /^ok/) {  
                 if ($secchange == 1) {  
                     $$logmsg .= "Section for $uname switched from old section: $oldsec to new section: $sec".$linefeed;  
                 } elsif ($oldsec eq '-1') {  
                     $$logmsg .= "New student role for $uname in section $sec in course $cid".$linefeed;  
                 } else {  
                     $$logmsg .= "Student $uname assigned to unchanged section $sec in course $cid".$linefeed;  
                 }  
             } else {  
                 $$logmsg .= "Error when attempting section change for $uname from old section $oldsec to new section: $sec in course $cid -error: $modify_section_result".$linefeed;  
             }  
             $result = $modify_section_result;  
         } elsif ($secchange == 1) {  
             $$logmsg .= "Error when attempting to expire role for $uname in old section $oldsec in course $cid -error: $expire_role_result".$linefeed;  
         }  
     } else {  
         $$logmsg .= "Incomplete course id defined.  Addition of user $uname from domain $udom to course $one\_$two, section $sec not completed.$linefeed";  
         $result = "Error: incomplete course id\n";  
     }  
     return $result;  
 }  }
   
 sub build_roles {  sub build_roles {
Line 1381  sub build_roles { Line 1447  sub build_roles {
             $num_sections ++;              $num_sections ++;
         }          }
     }      }
                                                                                        
     return $num_sections;      return $num_sections;
 }  }
   
Line 1402  sub custom_role_editor { Line 1468  sub custom_role_editor {
         return;          return;
     }      }
   
     $r->print(&Apache::loncommon::bodytag(      $r->print(&Apache::loncommon::start_page('Custom Role Editor'));
                      'Create Users, Change User Privileges').'<h2>');  
     my $syspriv='';      my $syspriv='';
     my $dompriv='';      my $dompriv='';
     my $coursepriv='';      my $coursepriv='';
     my ($rdummy,$roledef)=      my ($rdummy,$roledef)=
  &Apache::lonnet::get('roles',["rolesdef_$rolename"]);   &Apache::lonnet::get('roles',["rolesdef_$rolename"]);
 # ------------------------------------------------------- Does this role exist?  # ------------------------------------------------------- Does this role exist?
       $r->print('<h2>');
     if (($rdummy ne 'con_lost') && ($roledef ne '')) {      if (($rdummy ne 'con_lost') && ($roledef ne '')) {
  $r->print(&mt('Existing Role').' "');   $r->print(&mt('Existing Role').' "');
 # ------------------------------------------------- Get current role privileges  # ------------------------------------------------- Get current role privileges
Line 1468  sub custom_role_editor { Line 1534  sub custom_role_editor {
 <tr><th>$lt{'prv'}</th><th>$lt{'crl'}</th><th>$lt{'dml'}</th>  <tr><th>$lt{'prv'}</th><th>$lt{'crl'}</th><th>$lt{'dml'}</th>
 <th>$lt{'ssl'}</th></tr>  <th>$lt{'ssl'}</th></tr>
 ENDCCF  ENDCCF
     foreach (sort keys %full) {      foreach my $priv (sort keys %full) {
  $r->print('<tr><td>'.&Apache::lonnet::plaintext($_).'</td><td>'.          my $privtext = &Apache::lonnet::plaintext($priv);
     ($courselevel{$_}?'<input type="checkbox" name="'.$_.':c" '.   $r->print('<tr><td>'.$privtext.'</td><td>'.
     ($courselevelcurrent{$_}?'checked="1"':'').' />':'&nbsp;').      ($courselevel{$priv}?'<input type="checkbox" name="'.$priv.':c" '.
       ($courselevelcurrent{$priv}?'checked="1"':'').' />':'&nbsp;').
     '</td><td>'.      '</td><td>'.
     ($domainlevel{$_}?'<input type="checkbox" name="'.$_.':d" '.      ($domainlevel{$priv}?'<input type="checkbox" name="'.$priv.':d" '.
     ($domainlevelcurrent{$_}?'checked="1"':'').' />':'&nbsp;').      ($domainlevelcurrent{$priv}?'checked="1"':'').' />':'&nbsp;').
     '</td><td>'.      '</td><td>'.
     ($systemlevel{$_}?'<input type="checkbox" name="'.$_.':s" '.      ($systemlevel{$priv}?'<input type="checkbox" name="'.$priv.':s" '.
     ($systemlevelcurrent{$_}?'checked="1"':'').' />':'&nbsp;').      ($systemlevelcurrent{$priv}?'checked="1"':'').' />':'&nbsp;').
     '</td></tr>');      '</td></tr>');
     }      }
     $r->print(      $r->print(
    '<table><input type="submit" value="'.&mt('Define Role').'" /></form></body></html>');     '<table><input type="submit" value="'.&mt('Define Role').'" /></form>'.
         &Apache::loncommon::end_page());
 }  }
   
 # ---------------------------------------------------------- Call to definerole  # ---------------------------------------------------------- Call to definerole
 sub set_custom_role {  sub set_custom_role {
     my $r=shift;      my ($r) = @_;
   
     my $rolename=$env{'form.rolename'};      my $rolename=$env{'form.rolename'};
   
Line 1497  sub set_custom_role { Line 1565  sub set_custom_role {
         return;          return;
     }      }
   
     $r->print(&Apache::loncommon::bodytag(      $r->print(&Apache::loncommon::start_page('Save Custom Role').'<h2>');
                      'Create Users, Change User Privileges').'<h2>');  
     my ($rdummy,$roledef)=      my ($rdummy,$roledef)=
  &Apache::lonnet::get('roles',["rolesdef_$rolename"]);   &Apache::lonnet::get('roles',["rolesdef_$rolename"]);
   
 # ------------------------------------------------------- Does this role exist?  # ------------------------------------------------------- Does this role exist?
     if (($rdummy ne 'con_lost') && ($roledef ne '')) {      if (($rdummy ne 'con_lost') && ($roledef ne '')) {
  $r->print(&mt('Existing Role').' "');   $r->print(&mt('Existing Role').' "');
Line 1550  sub set_custom_role { Line 1618  sub set_custom_role {
  $env{'user.name'},   $env{'user.name'},
  $rolename));   $rolename));
     }      }
     $r->print('</body></html>');      $r->print('<p><a href="/adm/createuser">Create another role, or Create/Modify a user.</a></p>');
       $r->print(&Apache::loncommon::end_page());
 }  }
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
Line 1607  sub course_level_table { Line 1676  sub course_level_table {
             'act'  => "Activate",              'act'  => "Activate",
             'rol'  => "Role",              'rol'  => "Role",
             'ext'  => "Extent",              'ext'  => "Extent",
             'grs'  => "Group/Section",              'grs'  => "Section",
             'sta'  => "Start",              'sta'  => "Start",
             'end'  => "End"              'end'  => "End"
     );      );
Line 1618  sub course_level_table { Line 1687  sub course_level_table {
  $thiscourse=~s:_:/:g;   $thiscourse=~s:_:/:g;
  my %coursedata=&Apache::lonnet::coursedescription($thiscourse);   my %coursedata=&Apache::lonnet::coursedescription($thiscourse);
  my $area=$coursedata{'description'};   my $area=$coursedata{'description'};
           my $type=$coursedata{'type'};
  if (!defined($area)) { $area=&mt('Unavailable course').': '.$_; }   if (!defined($area)) { $area=&mt('Unavailable course').': '.$_; }
  my $bgcol=$thiscourse;   my $bgcol=$thiscourse;
  $bgcol=~s/[^7-9a-e]//g;   $bgcol=~s/[^7-9a-e]//g;
  $bgcol=substr($bgcol.$bgcol.$bgcol.'ffffff',2,6);   $bgcol=substr($bgcol.$bgcol.$bgcol.'ffffff',2,6);
  my ($domain,$cnum)=split(/\//,$thiscourse);   my ($domain,$cnum)=split(/\//,$thiscourse);
         my %sections_count = ();          my %sections_count;
         my $num_sections = 0;  
         if (defined($env{'request.course.id'})) {          if (defined($env{'request.course.id'})) {
             if ($env{'request.course.id'} eq $domain.'_'.$cnum) {              if ($env{'request.course.id'} eq $domain.'_'.$cnum) {
                 $num_sections = &Apache::loncommon::get_sections($domain,$cnum,\%sections_count);                  %sections_count = 
       &Apache::loncommon::get_sections($domain,$cnum);
             }              }
         }          }
  foreach  ('st','ta','ep','ad','in','cc') {   foreach  ('st','ta','ep','in','cc') {
     if (&Apache::lonnet::allowed('c'.$_,$thiscourse)) {      if (&Apache::lonnet::allowed('c'.$_,$thiscourse)) {
  my $plrole=&Apache::lonnet::plaintext($_);   my $plrole=&Apache::lonnet::plaintext($_);
  $table .= <<ENDEXTENT;   $table .= <<ENDEXTENT;
Line 1640  sub course_level_table { Line 1710  sub course_level_table {
 <td>$area<br />Domain: $domain</td>  <td>$area<br />Domain: $domain</td>
 ENDEXTENT  ENDEXTENT
         if ($_ ne 'cc') {          if ($_ ne 'cc') {
                     if ($num_sections > 0) {                      if (%sections_count) {
                         my $currsec = &course_sections($num_sections,\%sections_count,$protectedcourse.'_'.$_);                          my $currsec = &course_sections(\%sections_count,$protectedcourse.'_'.$_);
                         $table .=                           $table .= 
                     '<td><table border="0" cellspacing="0" cellpadding="0">'.                      '<td><table border="0" cellspacing="0" cellpadding="0">'.
                      '<tr><td valign="top">'.$lt{'exs'}.'<br />'.                       '<tr><td valign="top">'.$lt{'exs'}.'<br />'.
Line 1681  ENDTIMEENTRY Line 1751  ENDTIMEENTRY
 <td>$plrole</td>  <td>$plrole</td>
 <td>$area</td>  <td>$area</td>
 END  END
                 if ($num_sections > 0) {                  if (%sections_count) {
                     my $currsec = &course_sections($num_sections,\%sections_count,$customrole);                      my $currsec = &course_sections(\%sections_count,$customrole);
                     $table.=                      $table.=
                    '<td><table border="0" cellspacing="0" cellpadding="0">'.                     '<td><table border="0" cellspacing="0" cellpadding="0">'.
                    '<tr><td valign="top">'.$lt{'exs'}.'<br />'.                     '<tr><td valign="top">'.$lt{'exs'}.'<br />'.
Line 1721  ENDTABLE Line 1791  ENDTABLE
 }  }
   
 sub course_sections {  sub course_sections {
     my ($num_sections,$sections_count,$role) = @_;      my ($sections_count,$role) = @_;
     my $output = '';      my $output = '';
     my @sections = (sort {$a <=> $b} keys %{$sections_count});      my @sections = (sort {$a <=> $b} keys %{$sections_count});
     if ($num_sections == 1) {      if (scalar(@sections) == 1) {
         $output = '<select name="currsec_'.$role.'" >'."\n".          $output = '<select name="currsec_'.$role.'" >'."\n".
                   '  <option value="">Select</option>'."\n".                    '  <option value="">Select</option>'."\n".
                   '  <option value="">No section</option>'."\n".                    '  <option value="">No section</option>'."\n".
Line 1732  sub course_sections { Line 1802  sub course_sections {
     } else {      } else {
         $output = '<select name="currsec_'.$role.'" ';          $output = '<select name="currsec_'.$role.'" ';
         my $multiple = 4;          my $multiple = 4;
         if ($num_sections <4) { $multiple = $num_sections; }          if (scalar(@sections) < 4) { $multiple = scalar(@sections); }
         $output .= '"multiple" size="'.$multiple.'">'."\n";          $output .= '"multiple" size="'.$multiple.'">'."\n";
         foreach (@sections) {          foreach (@sections) {
             $output .= '<option value="'.$_.'">'.$_."</option>\n";              $output .= '<option value="'.$_.'">'.$_."</option>\n";
Line 1749  sub course_level_dc { Line 1819  sub course_level_dc {
                       '<input type="hidden" name="origdom" value="'.$dcdom.'" />'.                        '<input type="hidden" name="origdom" value="'.$dcdom.'" />'.
                       '<input type="hidden" name="dccourse" value="" />';                        '<input type="hidden" name="dccourse" value="" />';
     my $courseform='<b>'.&Apache::loncommon::selectcourse_link      my $courseform='<b>'.&Apache::loncommon::selectcourse_link
                      ('cu','dccourse','dcdomain','coursedesc').'</b>';              ('cu','dccourse','dcdomain','coursedesc',undef,undef,'Course').'</b>';
                                                                                             my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'currsec','cu');
     my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,$dcdom);  
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
                     'crl'  => "Course Level",                      'typ' => "Type",
                     'crt'  => "Course Title",  
                     'rol'  => "Role",                      'rol'  => "Role",
                     'grs'  => "Group/Section",                      'grs'  => "Section",
                     'exs'  => "Existing sections",                      'exs'  => "Existing sections",
                     'new'  => "Define new section",                       'new'  => "Define new section", 
                     'sta'  => "Start",                      'sta'  => "Start",
Line 1764  sub course_level_dc { Line 1832  sub course_level_dc {
                     'ssd'  => "Set Start Date",                      'ssd'  => "Set Start Date",
                     'sed'  => "Set End Date"                      'sed'  => "Set End Date"
                   );                    );
     my $header = '<h4>'.$lt{'crl'}.'</h4>'.      my $header = '<h4>'.&mt('Course Level').'</h4>'.
                  '<table border="2"><tr><th>'.$courseform.'</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'grs'}.'</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th></tr>';                   '<table border="2"><tr><th>'.$lt{'typ'}.'</th><th>'.$courseform.'</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'grs'}.'</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th></tr>';
     my $otheritems = '<tr><td><input type="text" name="coursedesc" value="" onFocus="this.blur();opencrsbrowser('."'".'cu'."'".','."'".'dccourse'."'".','."'".'dcdomain'."'".','."'".'coursedesc'."',''".')" /></td>'.      my $otheritems = '<tr><td><select name="crstype" onChange="javascript:setType();">'."\n".
                        ' <option value="">'.&mt('Please select')."\n".
                        ' <option value="Course">'.&mt('Course')."\n".
                        ' <option value="Non-standard course">'.&mt('Non-standard course')."\n".
                        '</select>'."\n".
                        '<td><input type="text" name="coursedesc" value="" onFocus="this.blur();opencrsbrowser('."'cu','dccourse','dcdomain','coursedesc',''".')" /></td>'."\n".
                      '<td><select name="role">'."\n";                       '<td><select name="role">'."\n";
     foreach  ('st','ta','ep','ad','in','cc') {      foreach  ('st','ta','ep','in','cc') {
         my $plrole=&Apache::lonnet::plaintext($_);          my $plrole=&Apache::lonnet::plaintext($_);
         $otheritems .= '  <option value="'.$_.'">'.$plrole;          $otheritems .= '  <option value="'.$_.'">'.$plrole;
     }      }
Line 1785  sub course_level_dc { Line 1858  sub course_level_dc {
                      ' <option value=""><--'.&mt('Pick course first').'</select></td>'.                       ' <option value=""><--'.&mt('Pick course first').'</select></td>'.
                      '<td>&nbsp;&nbsp;</td>'.                       '<td>&nbsp;&nbsp;</td>'.
                      '<td valign="top">&nbsp;<b>'.$lt{'new'}.'</b><br />'.                       '<td valign="top">&nbsp;<b>'.$lt{'new'}.'</b><br />'.
                      '<input type="text" name="newsec" value="" /></td>'.                       '<input type="text" name="newsec" value="" />'.
                        '<input type="hidden" name="groups" value="" /></td>'.
                      '</tr></table></td>';                       '</tr></table></td>';
     $otheritems .= <<ENDTIMEENTRY;      $otheritems .= <<ENDTIMEENTRY;
 <td><input type=hidden name="start" value=''>  <td><input type=hidden name="start" value=''>

Removed from v.1.106  
changed lines
  Added in v.1.133


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