Diff for /loncom/interface/lonrequestcourse.pm between versions 1.27 and 1.29

version 1.27, 2009/08/31 14:57:06 version 1.29, 2009/09/06 19:09:54
Line 102  described at http://www.lon-capa.org. Line 102  described at http://www.lon-capa.org.
   
 =item check_autolimit()  =item check_autolimit()
   
 =item build_batchcreatehash()  
   
 =item retrieve_settings()  =item retrieve_settings()
   
 =item get_request_settings()  =item get_request_settings()
Line 1254  sub print_personnel_menu { Line 1252  sub print_personnel_menu {
     if ($env{'form.addperson'}) {      if ($env{'form.addperson'}) {
         $persontotal ++;          $persontotal ++;
     }      }
     my $userlinktxt = &mt('Set User');  
     my @items = ('uname','dom','lastname','firstname','emailaddr','hidedom');      my @items = ('uname','dom','lastname','firstname','emailaddr','hidedom');
   
     my $roleoptions;      my $roleoptions;
Line 1264  sub print_personnel_menu { Line 1261  sub print_personnel_menu {
         $type = 'Community';          $type = 'Community';
     }      }
     foreach my $role (@roles) {      foreach my $role (@roles) {
         my $plrole=&Apache::lonnet::plaintext($role,$type);          my $plrole = &Apache::lonnet::plaintext($role,$type);
         $roleoptions .= '  <option value="'.$role.'">'.$plrole.'</option>'."\n";          $roleoptions .= '  <option value="'.$role.'">'.$plrole.'</option>'."\n";
     }      }
     my %customroles=&Apache::lonuserutils::my_custom_roles();      my %customroles=&Apache::lonuserutils::my_custom_roles();
     if (keys(%customroles) > 0) {      if (keys(%customroles) > 0) {
         foreach my $cust (sort(keys(%customroles))) {          foreach my $cust (sort(keys(%customroles))) {
             my $custrole='cr_cr_'.$env{'user.domain'}.              my $custrole="cr/$env{'user.domain'}/$env{'user.name'}/$cust";
                     '_'.$env{'user.name'}.'_'.$cust;  
             $roleoptions .= '  <option value="'.$custrole.'">'.$cust.'</option>'."\n";              $roleoptions .= '  <option value="'.$custrole.'">'.$cust.'</option>'."\n";
         }          }
     }      }
Line 1314  sub print_personnel_menu { Line 1310  sub print_personnel_menu {
     for (my $i=0; $i<$persontotal; $i++) {       for (my $i=0; $i<$persontotal; $i++) { 
         my @linkargs = map { 'person_'.$i.'_'.$_ } (@items);          my @linkargs = map { 'person_'.$i.'_'.$_ } (@items);
         my $linkargstr = join("','",@linkargs);          my $linkargstr = join("','",@linkargs);
         my $userlink = &Apache::loncommon::selectuser_link($formname,@linkargs,$dom,$userlinktxt);          my $uname_form = '<input type="text" name="person_'.$i.'_uname" value="" size="20" />';
         my $uname_form = '<input type="text" name="person_'.$i.'_uname" value=""'.  
                          ' onFocus="this.blur();'.  
                          'openuserbrowser('."'$formname','$linkargstr','$dom'".');" />';  
         my $onchange = 'javascript:fix_domain('."'$formname','person_".$i."_dom',".          my $onchange = 'javascript:fix_domain('."'$formname','person_".$i."_dom',".
                        "'person_".$i."_hidedom'".');'.                         "'person_".$i."_hidedom','person_".$i."_uname'".');';
                        'openuserbrowser('."'$formname','$linkargstr','$dom'".');';  
         my $udom_form = &Apache::loncommon::select_dom_form($dom,'person_'.$i.'_dom','',          my $udom_form = &Apache::loncommon::select_dom_form($dom,'person_'.$i.'_dom','',
                                                             1,$onchange).                                                              1,$onchange).
                         '<input type="hidden" name="person_'.$i.'_hidedom" value="'.$dom.'" />';                          '<input type="hidden" name="person_'.$i.'_hidedom" value="" />';
         my %form_elems;          my %form_elems;
         foreach my $item (@items) {          foreach my $item (@items) {
             next if (($item eq 'dom') || ($item eq 'uname') || ($item eq 'hidedom'));              next if (($item eq 'dom') || ($item eq 'uname') || ($item eq 'hidedom'));
Line 1339  sub print_personnel_menu { Line 1331  sub print_personnel_menu {
         }          }
         $sectionselector .= $newtitle.          $sectionselector .= $newtitle.
             '<input type="text" name="person_'.$i.'_newsec" size="15" value="" />'."\n";              '<input type="text" name="person_'.$i.'_newsec" size="15" value="" />'."\n";
           my $usersrchlinktxt = &mt('Search for user');
           my $usersrchlink =  &Apache::loncommon::selectuser_link($formname,@linkargs,$dom,
                               $usersrchlinktxt);
           my $userchklinktxt = &mt('Check username');
           my $userchklink = &Apache::loncommon::selectuser_link($formname,@linkargs,$dom,
                               $userchklinktxt,'checkusername');
         $output .=           $output .= 
             &Apache::lonhtmlcommon::row_title(&mt('Additional Personnel').'<br />'.              &Apache::lonhtmlcommon::row_title(&mt('Additional Personnel')).
                                               '<span class="LC_nobreak">'.$userlink.              '<table><tr><td align="center" valign="middle"><b>'.$usersrchlink.'</b></td>'."\n".
                                               '</span>').              '<td align="left" valign="top" colspan="2"><span class="LC_nobreak">'.
             '<table><tr><td align="center" valign="top">'.&mt('Username').'<br />'.$uname_form.'</td>'."\n".              &mt('Username').':&nbsp;'.$uname_form.'&nbsp;'.$userchklink.'</span><br />'."\n".
             '<td align="center" valign="top" colspan="2">'.&mt('Domain').'<br />'.$udom_form.'</td></tr><tr>'."\n".              '<span class="LC_nobreak">'.&mt('Domain').':&nbsp;'.$udom_form.'</span></td>'.
               '</tr>'."\n".'<tr>'.
             '<td align="center" valign="top">'.&mt('First Name').'<br />'.$form_elems{'firstname'}.'</td>'."\n".              '<td align="center" valign="top">'.&mt('First Name').'<br />'.$form_elems{'firstname'}.'</td>'."\n".
             '<td align="center" valign="top">'.&mt('Last Name').'<br />'.$form_elems{'lastname'}.'</td>'."\n".              '<td align="center" valign="top">'.&mt('Last Name').'<br />'.$form_elems{'lastname'}.'</td>'."\n".
             '<td align="center" valign="top">'.&mt('E-mail').'<br />'.$form_elems{'emailaddr'}.'</td></tr>'."\n".              '<td align="center" valign="top">'.&mt('E-mail').'<br />'.$form_elems{'emailaddr'}.'</td></tr>'."\n".
Line 1778  sub print_review { Line 1777  sub print_review {
             if ($env{'form.person_'.$i.'_role'} eq 'cc') {              if ($env{'form.person_'.$i.'_role'} eq 'cc') {
                 $showsec = &mt('None');                  $showsec = &mt('None');
             }              }
               my $role = $env{'form.person_'.$i.'_role'}; 
             $personnel_values .=               $personnel_values .= 
                 '<tr><td>'.$env{'form.person_'.$i.'_firstname'}.' '.                  '<tr><td>'.$env{'form.person_'.$i.'_firstname'}.' '.
                 $env{'form.person_'.$i.'_lastname'}.'</td>'.                  $env{'form.person_'.$i.'_lastname'}.'</td>'.
                 '<td>'.$env{'form.person_'.$i.'_uname'}.':'.                  '<td>'.$env{'form.person_'.$i.'_uname'}.':'.
                 $env{'form.person_'.$i.'_dom'}.'</td>'.                  $env{'form.person_'.$i.'_dom'}.'</td>'.
                 '<td>'.&Apache::lonnet::plaintext($env{'form.person_'.$i.'_role'},                  '<td>'.&Apache::lonnet::plaintext($role,$container).'</td>'.
                                                   $container).'</td>'.  
                 '<td>'.$showsec.'</td></tr>';                  '<td>'.$showsec.'</td></tr>';
         }          }
     }      }
Line 1890  sub clone_form { Line 1889  sub clone_form {
     my %lt = &clone_text();      my %lt = &clone_text();
     my $output .=       my $output .= 
         &Apache::lonhtmlcommon::row_title($lt{'cid'}).'<label>'.          &Apache::lonhtmlcommon::row_title($lt{'cid'}).'<label>'.
         '<input type="text" size="25" name="clonecrs" value="" onfocus="this.blur();'.          '<input type="text" size="25" name="clonecrs" value=""  />'.
         'opencrsbrowser('."'$formname','clonecrs','clonedom','','','','$type'".');" />'.  
         '</label>'.&Apache::lonhtmlcommon::row_closure(1).'<label>'.          '</label>'.&Apache::lonhtmlcommon::row_closure(1).'<label>'.
         &Apache::lonhtmlcommon::row_title($lt{'dmn'}).'</label>'.          &Apache::lonhtmlcommon::row_title($lt{'dmn'}).'</label>'.
         $cloneform.'</label>'.&Apache::lonhtmlcommon::row_closure(1).          $cloneform.'</label>'.&Apache::lonhtmlcommon::row_closure(1).
Line 2324  sub print_request_outcome { Line 2322  sub print_request_outcome {
             if ($result eq 'created') {              if ($result eq 'created') {
                 $disposition = 'created';                  $disposition = 'created';
                 $reqstatus = 'created';                  $reqstatus = 'created';
                 $output = &mt('Your course request has been processed and the course has been created.').                  my $role_result = &update_requestors_roles($dom,$cnum,$crstype,$details,
                           '<br />'.                                                             \%longroles);
                           &mt('You will need to logout and log-in again to be able to select a role in the course.');                  $output = '<p>'.&mt('Your course request has been processed and the course has been created.').
                             '<br />'.$role_result.'</p>';
                 $creationresult = 'created';                  $creationresult = 'created';
             } else {              } else {
                 $output = '<span class="LC_error">'.                  $output = '<span class="LC_error">'.
Line 2393  sub print_request_outcome { Line 2392  sub print_request_outcome {
             $output .=  '<span class="LC_warning">'.&mt('An error occurred saving a record of the details of your request: [_1].',$storeresult).'</span><br />';              $output .=  '<span class="LC_warning">'.&mt('An error occurred saving a record of the details of your request: [_1].',$storeresult).'</span><br />';
             &Apache::lonnet::logthis("Error saving course request - $requestkey for $env{'user.name'}:$env{'user.domain'} - $storeresult");              &Apache::lonnet::logthis("Error saving course request - $requestkey for $env{'user.name'}:$env{'user.domain'} - $storeresult");
         } elsif ($statusresult ne 'ok') {          } elsif ($statusresult ne 'ok') {
              $output .=  '<span class="LC_warning">'.&mt('An error occurred saving a record of the status of your request: [_1].',$statusresult).'</span><br />';              $output .= '<span class="LC_warning">'.&mt('An error occurred saving a record of the status of your request: [_1].',$statusresult).'</span><br />';
             &Apache::lonnet::logthis("Error saving course request status for  $requestkey (for $env{'user.name'}:$env{'user.domain'}) - $statusresult");              &Apache::lonnet::logthis("Error saving course request status for  $requestkey (for $env{'user.name'}:$env{'user.domain'}) - $statusresult");
         }          }
         if ($modified && $queued && $storeresult eq 'ok') {          if ($modified && $queued && $storeresult eq 'ok') {
Line 2411  sub print_request_outcome { Line 2410  sub print_request_outcome {
     }      }
 }  }
   
   sub update_requestors_roles {
       my ($dom,$cnum,$crstype,$details,$longroles) = @_;
       my $now = time;
       my ($active,$future,$numactive,$numfuture,$output);
       my $owner = $env{'user.name'}.':'.$env{'user.domain'};
       if (ref($details) eq 'HASH') {
           if (ref($details->{'personnel'}) eq 'HASH') {
               if (ref($details->{'personnel'}{$owner}) eq 'HASH') {
                   my @roles;
                   if (ref($details->{'personnel'}{$owner}{'roles'}) eq 'ARRAY') {
                       @roles = sort(@{$details->{'personnel'}{$owner}{'roles'}});
                       unless (grep(/^cc$/,@roles)) {
                           push(@roles,'cc');
                       }
                   } else {
                       @roles = ('cc');
                   }
                   foreach my $role (@roles) {
                       my $start = $now;
                       my $end = '0';
                       if ($role eq 'st') {
                           if ($details->{'accessstart'} ne '') {
                               $start = $details->{'accessstart'};
                           }
                           if ($details->{'accessend'} ne '') {
                               $end = $details->{'accessend'};
                           }
                       }
                       my @usecs;
                       if ($role ne 'cc') {
                           if (ref($details->{'personnel'}{$owner}{$role}{'usec'}) eq 'ARRAY') {
                               @usecs = @{$details->{'personnel'}{$owner}{$role}{'usec'}};
                           }
                       } 
                       if ($role eq 'st') {
                           if (@usecs > 1) {
                               my $firstsec = $usecs[0];
                               @usecs = ($firstsec);
                           }
                       }
                       if (@usecs == 0) {
                           push(@usecs,'');
                       }
                       foreach my $usec (@usecs) {
                           my (%userroles,%newrole,%newgroups,$spec,$area);
                           my $area = '/'.$dom.'/'.$cnum;
                           my $spec = $role.'.'.$area;
                           if ($usec ne '') {
                              $spec .= '/'.$usec;
                              $area .= '/'.$usec;
                           }
                           if ($role =~ /^cr\//) {
                               &Apache::lonnet::custom_roleprivs(\%newrole,$role,$dom,
                                                                 $cnum,$spec,$area);
                           } else {
                               &Apache::lonnet::standard_roleprivs(\%newrole,$role,$dom,
                                                                   $spec,$cnum,$area);
                           }
                           &Apache::lonnet::set_userprivs(\%userroles,\%newrole,
                                                          \%newgroups);
                           $userroles{'user.role.'.$spec} = $start.'.'.$end;
                           &Apache::lonnet::appenv(\%userroles,[$role,'cm']);
                           if (($end == 0) || ($end > $now)) {
                               my $showrole = $role;
                               if ($role =~ /^cr\//) {
                                   $showrole = &Apache::lonnet::plaintext($role,$crstype);
                               } elsif (ref($longroles) eq 'HASH') {
                                   if ($longroles->{$role} ne '') {
                                       $showrole = $longroles->{$role};
                                   }
                               }
                               if ($start <= $now) {
                                   $active .= '<li><a href="/adm/roles?selectrole=1&'.                                             $spec.'=1">'.$showrole;
                                   if ($usec ne '') {
                                       $active .= ' - '.&mt('section:').' '.$usec; 
                                   }
                                   $active .= '</a></li>';
                                   $numactive ++;
                               } else { 
                                   $future .= '<li>'.$showrole;
                                   if ($usec ne '') {
                                       $future .= ' - '.&mt('section:').' '.$usec;
                                   }
                                   $future .= '</li>';
                                   $numfuture ++;
                               }
                           }
                       }
                   }
               }
           }
       }
       if ($active) {
           if ($numactive == 1) {
               $output = &mt('Use the following link to enter the course:'); 
           } else {
               $output = &mt('Use the following links to your new roles to enter the course:');
           }
           $output .= ' <ul>'.$active.'</ul><br />';
       }
       if ($future) {
           $output .= &mt('The following course [quant,_1,role] will become available for selection from your [_2]roles page[_3], once the default student access start date - [_4] - has been reached:',$numfuture,'<a href="/adm/roles">','</a>',&Apache::lonlocal::locallocaltime($details->{'accessstart'})).
                      ' <ul>'.$future.'</ul>';
       }
       return $output;
   }
   
 sub notification_information {  sub notification_information {
     my ($disposition,$req_notifylist,$cnum,$now) = @_;      my ($disposition,$req_notifylist,$cnum,$now) = @_;
     my %emails = &Apache::loncommon::getemails();      my %emails = &Apache::loncommon::getemails();

Removed from v.1.27  
changed lines
  Added in v.1.29


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