Diff for /loncom/interface/lonrequestcourse.pm between versions 1.36.2.1 and 1.41

version 1.36.2.1, 2009/09/23 15:58:26 version 1.41, 2009/12/10 18:21:22
Line 52  described at http://www.lon-capa.org. Line 52  described at http://www.lon-capa.org.
   
 =item onload_action()  =item onload_action()
   
 =item check_can_request()   
   
 =item course_types()  
   
 =item print_main_menu()  =item print_main_menu()
   
 =item request_administration()  =item request_administration()
Line 134  sub handler { Line 130  sub handler {
     }      }
   
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['action','showdom','cnum','state']);          ['action','showdom','cnum','state','crstype']);
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     my $dom = &get_course_dom();      my $dom = &get_course_dom();
     my $action = $env{'form.action'};      my $action = $env{'form.action'};
Line 161  sub handler { Line 157  sub handler {
   
     my @invalidcrosslist;      my @invalidcrosslist;
     my %trail = (      my %trail = (
                  crstype       => 'Course Request Action',                   crstype       => 'Request Action',
                  codepick      => 'Category',                   codepick      => 'Category',
                  courseinfo    => 'Description',                   courseinfo    => 'Description',
                  enrollment    => 'Access Dates',                   enrollment    => 'Access Dates',
Line 196  sub handler { Line 192  sub handler {
                     if (($udom =~ /^$match_domain$/) && ($uname =~ /^$match_username$/)) {                      if (($udom =~ /^$match_domain$/) && ($uname =~ /^$match_username$/)) {
                         $result = &retrieve_settings($dom,$cnum,$udom,$uname);                          $result = &retrieve_settings($dom,$cnum,$udom,$uname);
                     } else {                      } else {
                         $warning = &mt('Invalid username or domain for course requestor');                          if ($env{'form.crstype'} eq 'community') {
                               $warning = &mt('Invalid username or domain for community requestor');
                           } else {
                               $warning = &mt('Invalid username or domain for course requestor');
                           }
                     }                      }
                 } else {                  } else {
                     $warning = &mt('No information was found for this course request.');                      if ($env{'form.crstype'} eq 'community') {
                           $warning = &mt('No information was found for this community request.');
                       } else {
                           $warning = &mt('No information was found for this course request.');
                       }
                 }                  }
             } else {              } else {
                 $warning = &mt('No course request ID provided.');                  $warning = &mt('No course request ID provided.');
             }              }
         } else {          } else {
             $warning = &mt('You do not have rights to view course request information.');              if ($env{'form.crstype'} eq 'any') {
                  $warning = &mt('You do not have rights to view course or community request information.');
               } elsif ($env{'form.crstype'} eq 'community') {
                   $warning = &mt('You do not have rights to view community request information.');
               } else {
                   $warning = &mt('You do not have rights to view course request information.');
               }
         }          }
     } elsif ((defined($state)) && (defined($action))) {      } elsif ((defined($state)) && (defined($action))) {
         if (($action eq 'view') && ($state eq 'details')) {          if (($action eq 'view') && ($state eq 'details')) {
Line 238  sub handler { Line 248  sub handler {
                                     foreach my $item (@code_order) {                                      foreach my $item (@code_order) {
                                         $crosslistcode .= $env{'form.crosslist_'.$i.'_'.$item};                                           $crosslistcode .= $env{'form.crosslist_'.$i.'_'.$item}; 
                                     }                                      }
                                     if ($crosslistcode ne '') {                                      if ($crosslistcode ne '') { 
                                         ($codechk{$i}, my $rest) =                                           ($codechk{$i}, my $rest) = 
                                             &Apache::lonnet::auto_validate_instcode('',$dom,$crosslistcode);                                              &Apache::lonnet::auto_validate_instcode('',$dom,$crosslistcode);
                                     }                                      }
                                     unless ($codechk{$i} eq 'valid') {                                      unless ($codechk{$i} eq 'valid') {
Line 276  sub handler { Line 286  sub handler {
   
     my $loaditems = &onload_action($action,$state);      my $loaditems = &onload_action($action,$state);
   
     my %can_request;      my (%can_request,%request_domains);
     my $canreq = &check_can_request($dom,\%can_request);      my $canreq = 
           &Apache::lonnet::check_can_request($dom,\%can_request,\%request_domains);
     if ($action eq 'new') {      if ($action eq 'new') {
         if ($canreq) {          if ($canreq) {
             if ($state eq 'crstype') {              if ($state eq 'crstype') {
                 &print_main_menu($r,\%can_request,\%states,$dom,$jscript,$loaditems,                  &print_main_menu($r,\%can_request,\%states,$dom,$jscript,$loaditems,
                                  $crumb);                                   $crumb,\%request_domains);
             } else {              } else {
                 &request_administration($r,$action,$state,$page,\%states,$dom,                  &request_administration($r,$action,$state,$page,\%states,$dom,
                                         $jscript,$loaditems,$crumb,$newinstcode,                                          $jscript,$loaditems,$crumb,$newinstcode,
Line 290  sub handler { Line 301  sub handler {
                                         \@invalidcrosslist);                                          \@invalidcrosslist);
             }              }
         } else {          } else {
             $r->print(&header('Course Requests').$crumb.              $r->print(&header('Course/Community Requests').$crumb.
                       '<div class="LC_warning">'.                        '<div class="LC_warning">'.
                       &mt('You do not have privileges to request creation of courses.').                        &mt('You do not have privileges to request creation of courses or communities.').
                       '</div>'.&Apache::loncommon::end_page());                        '</div>'.&Apache::loncommon::end_page());
         }          }
     } elsif ($action eq 'view') {      } elsif ($action eq 'view') {
         if ($state eq 'crstype') {          if ($state eq 'crstype') {
             &print_main_menu($r,\%can_request,\%states,$dom,$jscript,$loaditems,$crumb);              &print_main_menu($r,\%can_request,\%states,$dom,$jscript,$loaditems,$crumb,\%request_domains);
         } else {          } else {
             &request_administration($r,$action,$state,$page,\%states,$dom,$jscript,              &request_administration($r,$action,$state,$page,\%states,$dom,$jscript,
                                     $loaditems,$crumb);                                      $loaditems,$crumb);
Line 305  sub handler { Line 316  sub handler {
     } elsif ($action eq 'display') {      } elsif ($action eq 'display') {
         if ($warning ne '') {          if ($warning ne '') {
             my $args = { only_body => 1 };              my $args = { only_body => 1 };
             $r->print(&header('Course Requests','','',$args).$crumb.              $r->print(&header('Course/Community Requests','','',$args).$crumb.
                       '<h3>'.&mt('Course Request Details').'</h3>'.                        '<h3>'.&mt('Course/Community Request Details').'</h3>'.
                       '<div class="LC_warning">'.$warning.'</div>'.                        '<div class="LC_warning">'.$warning.'</div>'.
                       &close_popup_form());                        &close_popup_form());
         } else {          } else {
Line 316  sub handler { Line 327  sub handler {
     } elsif ($action eq 'log') {      } elsif ($action eq 'log') {
         &print_request_logs($jscript,$loaditems,$crumb);          &print_request_logs($jscript,$loaditems,$crumb);
     } else {      } else {
         &print_main_menu($r,\%can_request,\%states,$dom,$jscript,'',$crumb);          &print_main_menu($r,\%can_request,\%states,$dom,$jscript,'',$crumb,\%request_domains);
     }      }
     return OK;      return OK;
 }  }
Line 390  sub get_breadcrumbs { Line 401  sub get_breadcrumbs {
                 if ($$state eq $states->{$action}[$i]) {                  if ($$state eq $states->{$action}[$i]) {
                     &Apache::lonhtmlcommon::add_breadcrumb(                      &Apache::lonhtmlcommon::add_breadcrumb(
                        {text=>"$trail->{$$state}"});                         {text=>"$trail->{$$state}"});
                     $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course Requests','Course_Requests');                      $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');
                     last;                      last;
                 } else {                  } else {
                     if (($$state eq 'process') || ($$state eq 'removal')) {                      if (($$state eq 'process') || ($$state eq 'removal')) {
Line 410  sub get_breadcrumbs { Line 421  sub get_breadcrumbs {
         } else {          } else {
             &Apache::lonhtmlcommon::add_breadcrumb(              &Apache::lonhtmlcommon::add_breadcrumb(
                     {text=>'Pick Action'});                      {text=>'Pick Action'});
             $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course Requests','Course_Requests');              $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');
         }          }
     } else {      } else {
         &Apache::lonhtmlcommon::add_breadcrumb(          &Apache::lonhtmlcommon::add_breadcrumb(
                 {text=>'Pick Action'});                  {text=>'Pick Action'});
         $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course Requests','Course_Requests');          $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');
     }      }
     return ($page,$crumb,$newinstcode,$codechk,$checkedcode,$description);      return ($page,$crumb,$newinstcode,$codechk,$checkedcode,$description);
 }  }
Line 594  sub onload_action { Line 605  sub onload_action {
     return \%loaditems;      return \%loaditems;
 }  }
   
 sub check_can_request {  
     my ($dom,$can_request) = @_;  
     my $canreq = 0;  
     my ($types,$typename) = &course_types();  
     my @options = ('approval','validate','autolimit');  
     my $optregex = join('|',@options);  
     if ((ref($can_request) eq 'HASH') && (ref($types) eq 'ARRAY')) {  
         foreach my $type (@{$types}) {  
             if (&Apache::lonnet::usertools_access($env{'user.name'},  
                                                   $env{'user.domain'},  
                                                   $type,undef,'requestcourses')) {  
                 $canreq ++;  
                 if ($dom eq $env{'user.domain'}) {  
                     $can_request->{$type} = 1;  
                 }  
             }  
             if ($env{'environment.reqcrsotherdom.'.$type} ne '') {  
                 my @curr = split(',',$env{'environment.reqcrsotherdom.'.$type});  
                 if (@curr > 0) {  
                     $canreq ++;  
                     unless ($dom eq $env{'user.domain'}) {  
                         if (grep(/^\Q$dom\E:($optregex)(=?\d*)$/,@curr)) {  
                             $can_request->{$type} = 1;  
                         }  
                     }  
                 }  
             }  
         }  
     }  
     return $canreq;  
 }  
   
 sub course_types {  
     my @types = ('unofficial');   
     my %typename = (  
                          official   => 'Official course',  
                          unofficial => 'Unofficial course',  
                          community  => 'Community',  
                    );  
     return (\@types,\%typename);  
 }  
   
   
 sub print_main_menu {  sub print_main_menu {
     my ($r,$can_request,$states,$dom,$jscript,$loaditems,$crumb) = @_;      my ($r,$can_request,$states,$dom,$jscript,$loaditems,$crumb,$request_domains) = @_;
     my ($types,$typename) = &course_types();      my ($types,$typename) = &Apache::loncommon::course_types();
     my $onchange;      my $onchange;
     unless ($env{'form.interface'} eq 'textual') {      unless ($env{'form.interface'} eq 'textual') {
         $onchange = 1;          $onchange = 'this.form.submit()';
     }      }
   
     my $nextstate_setter = "\n";      my $nextstate_setter = "\n";
Line 682  function check_can_request(crschoice,act Line 650  function check_can_request(crschoice,act
     var unofficial = '';      var unofficial = '';
     var community = '';          var community = '';    
 END  END
       if (ref($can_request) eq 'HASH') {
     foreach my $item (keys(%{$can_request})) {          foreach my $item (keys(%{$can_request})) {
             $js .= "                   $js .= " 
         $item = 1;          $item = 1;
 ";  ";
           }
     }      }
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
         official => 'You are not permitted to request creation of an official course in this domain.',          official => 'You are not permitted to request creation of an official course in this domain.',
Line 722  END Line 691  END
     }      }
     return true;      return true;
 }  }
   
 END  END
       my ($pagetitle,$pageinfo,$domaintitle);
     $r->print(&header('Course Requests',$js.$jscript,$loaditems).$crumb.      if (ref($can_request) eq 'HASH') {
              '<p>'.&mt('Request creation of a new course, or review your pending course requests.').'</p>'.          if (($can_request->{'official'}) || ($can_request->{'unofficial'})) {
               if ($can_request->{'community'}) {
                   $pagetitle = 'Course/Community Requests';
                   $pageinfo = &mt('Request creation of a new course or community, or review your pending requests.');
                   $domaintitle = &mt('Course/Community Domain');
               } else {
                   $pagetitle = 'Course Requests';
                   $pageinfo = &mt('Request creation of a new course, or review your pending course requests.');
                   $domaintitle = &mt('Course Domain');
               }
           } elsif ($can_request->{'community'}) {
               $pagetitle = 'Community Requests';
               $pageinfo = &mt('Request creation of a new course, or review your pending requests.');
               $domaintitle = &mt('Community Domain');
           } else {
               $pagetitle = 'Course/Community Requests';
               $pageinfo = &mt('You do not have rights to request creation of courses in this domain; please choose a different domain.');
               $domaintitle = &mt('Course/Community Domain');
           }
       }
       my @incdoms;
       if (ref($request_domains) eq 'HASH') {
           foreach my $item (keys(%{$request_domains})) {
               if (ref($request_domains->{$item}) eq 'ARRAY') {
                   foreach my $possdom (@{$request_domains->{$item}}) {
                       unless(grep(/^\Q$possdom\E$/,@incdoms)) {
                           push(@incdoms,$possdom);
                       } 
                   } 
               }
           }
       }
       $r->print(&header($pagetitle,$js.$jscript,$loaditems).$crumb.
                '<p>'.$pageinfo.'</p>'.
              '<div>'.               '<div>'.
               &Apache::lonhtmlcommon::start_pick_box().                &Apache::lonhtmlcommon::start_pick_box().
               &Apache::lonhtmlcommon::row_title(&mt('Course Domain')).                &Apache::lonhtmlcommon::row_title($domaintitle).
               '<form name="domforcourse" method="post" action="/adm/requestcourse">');                '<form name="domforcourse" method="post" action="/adm/requestcourse">'.
     $r->print('GCI Web Center Concept Test Delivery (gcitest)'."\n".                &Apache::loncommon::select_dom_form($dom,'showdom','',1,$onchange,\@incdoms));
               '<input type="hidden" value="gcitest" name="showdom" />');      if (!$onchange) {
           $r->print('&nbsp;<input type="submit" name="godom" value="'.
                      &mt('Change').'" />');
       }
       unless ((ref($can_request) eq 'HASH') && (keys(%{$can_request}) > 0)) {
           $r->print(&Apache::lonhtmlcommon::row_closure(1)."\n".
                     &Apache::lonhtmlcommon::end_pick_box().'</div>'."\n".
                     &Apache::loncommon::end_page());
           return;
       }
     $r->print('</form>'.&Apache::lonhtmlcommon::row_closure());      $r->print('</form>'.&Apache::lonhtmlcommon::row_closure());
   
     my $formname = 'requestcrs';      my $formname = 'requestcrs';
     my $nexttext = &mt('Next');      my $nexttext = &mt('Next');
     $r->print(&Apache::lonhtmlcommon::row_title(&mt('Action')).'      $r->print(&Apache::lonhtmlcommon::row_title(&mt('Action')).'
Line 742  END Line 751  END
 <select size="1" name="action" >  <select size="1" name="action" >
  <option value="new">'.&mt('New request').'</option>   <option value="new">'.&mt('New request').'</option>
  <option value="view">'.&mt('View/Modify/Cancel pending requests').'</option>   <option value="view">'.&mt('View/Modify/Cancel pending requests').'</option>
    <option value="log">'.&mt('View request history').'</option>
 </select></form>'.  </select></form>'.
               &Apache::lonhtmlcommon::row_closure(1).                &Apache::lonhtmlcommon::row_closure(1).
               &Apache::lonhtmlcommon::row_title(&mt('Course Type')).                &Apache::lonhtmlcommon::row_title(&mt('Type')).'
               &mt($typename->{'unofficial'})."\n".  <form name="mainmenu_coursetype" method="post" action="">
               '<form name="mainmenu_coursetype" method="post" action="">'."\n".  <select size="1" name="crstype">');
               '<input type="hidden" name="crstype" value="unofficial" ></form>'."\n".      if (ref($can_request) eq 'HASH') {
           if (keys(%{$can_request}) > 1) {
               $r->print(' <option value="any">'.&mt('All types').'</option>');
           }
           if ((ref($types) eq 'ARRAY') && (ref($typename) eq 'HASH')) {
               foreach my $type (@{$types}) {
                   next unless($can_request->{$type});
                   my $selected = '';
                   if ($env{'form.crstype'} eq '') {
                       if ($type eq 'official') {
                           $selected = ' selected="selected"';
                       }
                   } else {
                       if ($type eq $env{'form.crstype'}) {
                           $selected = ' selected="selected"';
                       }
                   }
                   $r->print('<option value="'.$type.'"'.$selected.'>'.&mt($typename->{$type}).
                             '</option>'."\n");
               }
           }
       }
       $r->print('</select></form>'."\n".
               &Apache::lonhtmlcommon::row_closure(1)."\n".                &Apache::lonhtmlcommon::row_closure(1)."\n".
               &Apache::lonhtmlcommon::end_pick_box().'</div>'."\n".                &Apache::lonhtmlcommon::end_pick_box().'</div>'."\n".
               '<div><form name="'.$formname.'" method="post" action="">'."\n".                '<div><form name="'.$formname.'" method="post" action="/adm/requestcourse">'."\n".
               '<input type="hidden" name="state" value="crstype" />'."\n".                '<input type="hidden" name="state" value="crstype" />'."\n".
               '<input type="hidden" name="showdom" value="'.$dom.'" />'."\n".                '<input type="hidden" name="showdom" value="'.$dom.'" />'."\n".
               '<input type="hidden" name="crstype" value="" />'."\n".                '<input type="hidden" name="crstype" value="" />'."\n".
Line 799  END Line 831  END
         } elsif ($state eq 'personnel') {          } elsif ($state eq 'personnel') {
             $js .= "\n".&section_check_javascript()."\n".&personnel_lcsec_js();              $js .= "\n".&section_check_javascript()."\n".&personnel_lcsec_js();
         }          }
         $r->print(&header('Request a course',$js.$jscript,$loaditems,$jsextra).$crumb);          my $title;
           if ($env{'form.crstype'} eq 'community') {
               $title = 'Request a community';
           } else {
               $title = 'Request a course';
           }
           $r->print(&header($title,$js.$jscript,$loaditems,$jsextra).$crumb);
         &print_request_form($r,$action,$state,$page,$states,$dom,$newinstcode,          &print_request_form($r,$action,$state,$page,$states,$dom,$newinstcode,
                             $codechk,$checkedcode,$description,$invalidcrosslist);                              $codechk,$checkedcode,$description,$invalidcrosslist);
     } elsif ($action eq 'view') {      } elsif ($action eq 'view') {
Line 816  END Line 854  END
         } elsif ($state eq 'cancel') {          } elsif ($state eq 'cancel') {
             $jsextra = &viewcancel_javascript($formname);              $jsextra = &viewcancel_javascript($formname);
         }          }
         $r->print(&header('Manage course requests',$js.$jscript.$jsextra,$loaditems).          my $title;
                   $crumb);          if ($env{'form.crstype'} eq 'community') {
               $title = 'Manage community requests';
           } else {
               $title = 'Manage course requests';
           }
           $r->print(&header($title,$js.$jscript.$jsextra,$loaditems).$crumb);
         my $form = '<form method="post" name="'.$formname.'" action="/adm/requestcourse" />';          my $form = '<form method="post" name="'.$formname.'" action="/adm/requestcourse" />';
         if ($state eq 'pick_request') {          if ($state eq 'pick_request') {
             $r->print('<h3>'.&mt('Pending course requests').'</h3><div>'."\n".$form."\n".              my $title;
               if ($env{'form.crstype'} eq 'community') {
                   $title = &mt('Pending community requests');
               } elsif ($env{'form.crstype'} eq 'official') {
                   $title = &mt('Pending requests for official courses');
               } elsif ($env{'form.crstype'} eq 'unofficial') {
                   $title = &mt('Pending requests for unofficial courses');
               } else {
                   $title = &mt('Pending course/community requests'); 
               }
               $r->print('<h3>'.$title.'</h3><div>'."\n".$form."\n".
                       &print_request_status($dom).'</form></div>');                        &print_request_status($dom).'</form></div>');
         } elsif ($state eq 'details') {          } elsif ($state eq 'details') {
             my (@codetitles,%cat_titles,%cat_order,@code_order,$instcode,$code_chk);              my (@codetitles,%cat_titles,%cat_order,@code_order,$instcode,$code_chk);
Line 832  END Line 885  END
                 &Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles,                  &Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles,
                                                          \%cat_order,\@code_order);                                                           \%cat_order,\@code_order);
             }              }
             $r->print('<h3>'.&mt('Course Request Details').'</h3><div>'."\n".$form."\n".              my $title;
               if ($env{'form.crstype'} eq 'community') {
                   $title = &mt('Community Request Details');
               } else {
                   $title = &mt('Course Request Details');
               }
               $r->print('<h3>'.$title.'</h3><div>'."\n".$form."\n".
                       &print_review($dom,\@codetitles,\%cat_titles,\%cat_order,                        &print_review($dom,\@codetitles,\%cat_titles,\%cat_order,
                                     \@code_order)."\n".                                      \@code_order)."\n".
                       '<input name="origcnum" value="'.$origcnum.'" type="hidden" />'."\n");                        '<input name="origcnum" value="'.$origcnum.'" type="hidden" />'."\n");
Line 849  END Line 908  END
                                 $navtxt{'next'},$state,$other,$navtxt{'other'});                                  $navtxt{'next'},$state,$other,$navtxt{'other'});
             $r->print('</form>');              $r->print('</form>');
         } elsif ($state eq 'cancel') {          } elsif ($state eq 'cancel') {
               my $title;
               if ($env{'form.crstype'} eq 'community') {
                   $title = &mt('Cancel community request');
               } else {
                   $title = &mt('Cancel course request');
               }
             my ($result,$output) = &print_cancel_request($dom,$env{'form.origcnum'});              my ($result,$output) = &print_cancel_request($dom,$env{'form.origcnum'});
             $r->print('<h3>'.&mt('Cancel course request').'</h3><div>'."\n".$form."\n".              $r->print('<h3>'.$title.'</h3><div>'."\n".$form."\n".
                       $output);                        $output);
             my @excluded = &get_excluded_elements($dom,$states,'view','cancel');              my @excluded = &get_excluded_elements($dom,$states,'view','cancel');
             $r->print(&Apache::lonhtmlcommon::echo_form_input(\@excluded).'</div>');              $r->print(&Apache::lonhtmlcommon::echo_form_input(\@excluded).'</div>');
Line 899  END Line 964  END
                       '<input type="hidden" name="showdom" value="'.$dom.'" />'."\n".                        '<input type="hidden" name="showdom" value="'.$dom.'" />'."\n".
                       '<input type="hidden" name="orignum" value="'.$cnum.'" />'."\n");                        '<input type="hidden" name="orignum" value="'.$cnum.'" />'."\n");
             if ($result eq 'ok') {              if ($result eq 'ok') {
                 $r->print(&mt('Your course request has been cancelled.'));                  if ($env{'form.crstype'} eq 'community') {
                       $r->print(&mt('Your community request has been cancelled.'));
                   } else {
                       $r->print(&mt('Your course request has been cancelled.'));
                   }
             } else {              } else {
                 $r->print('<div class="LC_error">'.                  $r->print('<div class="LC_error">'.
                           &mt('The request cancellation process was not complete.').                            &mt('The request cancellation process was not complete.').
Line 914  END Line 983  END
             &Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles,              &Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles,
                                                      \%cat_order,\@code_order);                                                       \%cat_order,\@code_order);
         }          }
         $r->print(&header('Course Request','','','',{ 'only_body' => 1}).          my ($title,$header);
                   $crumb."\n".'<h3>'.&mt('Course Request Details').'</h3>'.          if ($env{'form.crstype'} eq 'community') {
               $title = 'Community Request';
               $header = &mt('Community Request');
           } else {
               $title = 'Course Request';
               $header = &mt('Course Request');
           }
           $r->print(&header($title,'','','',{ 'only_body' => 1}).
                     $crumb."\n".'<h3>'.$header.'</h3>'.
                   &print_review($dom,\@codetitles,\%cat_titles,\%cat_order,                    &print_review($dom,\@codetitles,\%cat_titles,\%cat_order,
                                 \@code_order,$uname,$udom)."\n".'</div>'.                                  \@code_order,$uname,$udom)."\n".'</div>'.
                   &close_popup_form());                    &close_popup_form());
Line 1271  sub print_request_form { Line 1348  sub print_request_form {
         }          }
         &Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles,          &Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles,
                                                  \%cat_order,\@code_order);                                                   \%cat_order,\@code_order);
         $r->print('<h3>'.&mt('Review course request details before submission').'</h3>'.          if ($crstype eq 'community') {
                   &print_review($dom,\@codetitles,\%cat_titles,\%cat_order,\@code_order,'','',\@disallowed,\%disallowmsg).              $r->print('<h3>'.&mt('Review community request details before submission').'</h3>');
           } else {
               $r->print('<h3>'.&mt('Review course request details before submission').'</h3>');
           }
           $r->print(&print_review($dom,\@codetitles,\%cat_titles,\%cat_order,\@code_order,'','',\@disallowed,\%disallowmsg).
                   '<input type="hidden" name="cnum" value="'.$cnum.'" />');                    '<input type="hidden" name="cnum" value="'.$cnum.'" />');
         $navtxt{'next'} = &mt('Submit course request');          if ($crstype eq 'community') {
               $navtxt{'next'} = &mt('Submit community request');
           } else {
               $navtxt{'next'} = &mt('Submit course request');
           }
     }  elsif ($state eq 'process') {      }  elsif ($state eq 'process') {
         if ($crstype eq 'official') {          if ($crstype eq 'official') {
             &Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles,              &Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles,
Line 1439  sub print_enrollment_menu { Line 1524  sub print_enrollment_menu {
             }              }
             if ($crosslist_form) {               if ($crosslist_form) { 
                 $crosslist_form .=                   $crosslist_form .= 
                     &Apache::lonhtmlcommon::row_title(&mt('Add another?')).                      &Apache::lonhtmlcommon::row_title(&mt('Add another')).
                     '<input name="crosslisttotal" type="hidden" value="'.$crosslisttotal.'" />'.                      '<input name="crosslisttotal" type="hidden" value="'.$crosslisttotal.'" />'.
                     '<input name="addcrosslist" type="checkbox" value="'.$crosslisttotal.'"'.                      '<input name="addcrosslist" type="checkbox" value="'.$crosslisttotal.'"'.
                     ' onclick="javascript:nextPage(document.'.$formname.",'".$env{'form.state'}.                      ' onclick="javascript:nextPage(document.'.$formname.",'".$env{'form.state'}.
Line 1611  sub print_personnel_menu { Line 1696  sub print_personnel_menu {
     }      }
     my @items = ('uname','dom','lastname','firstname','emailaddr','hidedom');      my @items = ('uname','dom','lastname','firstname','emailaddr','hidedom');
   
     my $roleoptions;  
     my @roles = &Apache::lonuserutils::roles_by_context('course');  
     my $type = 'Course';      my $type = 'Course';
     if ($crstype eq 'community') {      if ($crstype eq 'community') {
         $type = 'Community';          $type = 'Community';
     }      }
       my $roleoptions;
       my @roles = &Apache::lonuserutils::roles_by_context('course','',$type);
     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";
Line 1704  sub print_personnel_menu { Line 1789  sub print_personnel_menu {
             &Apache::loncommon::help_open_topic('Course_Request_Rolesection').'&nbsp;'.&mt('LON-CAPA Section(s)').'<br />'.$sectionselector.'</td>'."\n".              &Apache::loncommon::help_open_topic('Course_Request_Rolesection').'&nbsp;'.&mt('LON-CAPA Section(s)').'<br />'.$sectionselector.'</td>'."\n".
             '</tr></table>'.&Apache::lonhtmlcommon::row_closure();              '</tr></table>'.&Apache::lonhtmlcommon::row_closure();
     }      }
     $output .= &Apache::lonhtmlcommon::row_title(&mt('Add another?')).      $output .= &Apache::lonhtmlcommon::row_title(&mt('Add another')).
                '<input name="persontotal" type="hidden" value="'.$persontotal.'" />'.                 '<input name="persontotal" type="hidden" value="'.$persontotal.'" />'.
                '<input name="addperson" type="checkbox" value="'.$persontotal.'"'.                 '<input name="addperson" type="checkbox" value="'.$persontotal.'"'.
                ' onclick="javascript:nextPage(document.'.$formname.",'".$env{'form.state'}.                 ' onclick="javascript:nextPage(document.'.$formname.",'".$env{'form.state'}.
                "'".');" />'.&mt('Add?').&Apache::lonhtmlcommon::row_closure(1).                 "'".');" />'.&mt('Add?').&Apache::lonhtmlcommon::row_closure(1).
                &Apache::lonhtmlcommon::end_pick_box().'</div>'.                 &Apache::lonhtmlcommon::end_pick_box().'</div>';
                '<p>'.&mt('You may also add users later, once the course has been created, by using the "Manage course users" link, accessible from the "Main Menu".').'</p>';      if ($crstype eq 'community') {
           $output .= '<p>'.&mt('You may also add users later, once the community has been created, by using the "Manage community users" link, accessible from the "Main Menu".').'</p>';
       } else {
           $output .= '<p>'.&mt('You may also add users later, once the course has been created, by using the "Manage course users" link, accessible from the "Main Menu".').'</p>';
       }
     return $output;      return $output;
 }  }
   
Line 1736  sub print_request_status { Line 1825  sub print_request_status {
     my %statusinfo = &Apache::lonnet::dump('courserequests',$env{'user.domain'},      my %statusinfo = &Apache::lonnet::dump('courserequests',$env{'user.domain'},
                                            $env{'user.name'},'^status:'.$dom);                                             $env{'user.name'},'^status:'.$dom);
     my ($output,$formname,%queue_by_date);      my ($output,$formname,%queue_by_date);
     my ($types,$typenames) = &course_types();      my ($types,$typenames) = &Apache::loncommon::course_types();
     foreach my $key (keys(%statusinfo)) {      foreach my $key (keys(%statusinfo)) {
         if (($statusinfo{$key} eq 'approval') || ($statusinfo{$key} eq 'pending')) {           if (($statusinfo{$key} eq 'approval') || ($statusinfo{$key} eq 'pending')) { 
             (undef,my($cdom,$cnum)) = split(':',$key);              (undef,my($cdom,$cnum)) = split(':',$key);
Line 1782  sub print_request_status { Line 1871  sub print_request_status {
               '<input type="hidden" name="showdom" value="" />'."\n".                '<input type="hidden" name="showdom" value="" />'."\n".
               '<input type="hidden" name="cnum" value="" />'."\n";                '<input type="hidden" name="cnum" value="" />'."\n";
     if (@sortedtimes > 0) {      if (@sortedtimes > 0) {
           my $desctitle;
           if ($env{'form.crstype'} eq 'any') {
               $desctitle = &mt('Course/Community Description')
           } elsif ($env{'form.crstype'} eq 'community') {
               $desctitle = &mt('Community Description')
           } else {
               $desctitle = &mt('Course Description');
           }
         $output .= &Apache::loncommon::start_data_table().          $output .= &Apache::loncommon::start_data_table().
                    &Apache::loncommon::start_data_table_header_row().                     &Apache::loncommon::start_data_table_header_row().
                    '<th>'.&mt('Action').'</th>'.                     '<th>'.&mt('Action').'</th>'.
                    '<th>'.&mt('Course Description').'</th>'.                     '<th>'.$desctitle.'</th>'.
                    '<th>'.&mt('Domain').'</th>';                     '<th>'.&mt('Domain').'</th>';
         if ($env{'form.crstype'} eq 'any') {          if ($env{'form.crstype'} eq 'any') {
             $output .= '<th>'.&mt('Type').'</th>';              $output .= '<th>'.&mt('Type').'</th>';
Line 1833  sub print_request_status { Line 1930  sub print_request_status {
         }          }
         $output .= &Apache::loncommon::end_data_table();          $output .= &Apache::loncommon::end_data_table();
     } else {      } else {
         $output .= '<div>'.&mt('You have no matching course requests awaiting approval by a Domain Coordinator or held in a queue pending administrative action at your institution.').'</div>';          if ($env{'form.crstype'} eq 'any') {
   $output .= '<div>'.&mt('You have no matching course or community requests awaiting approval by a Domain Coordinator or held in a queue pending administrative action at your institution.').'</div>';
           } elsif ($env{'form.crstype'} eq 'community') {
               $output .= '<div>'.&mt('You have no matching community requests awaiting approval by a Domain Coordinator or held in a queue pending administrative action at your institution.').'</div>';
           } else {
               $output .= '<div>'.&mt('You have no matching course requests awaiting approval by a Domain Coordinator or held in a queue pending administrative action at your institution.').'</div>';
           }
     }      }
     $output .= '      $output .= '
 <br /><input type="button" name="prev" value="'.&mt('Back').'" onclick="javascript:backPage(document.'.$formname.",'crstype'".')" />';  <br /><input type="button" name="prev" value="'.&mt('Back').'" onclick="javascript:backPage(document.'.$formname.",'crstype'".')" />';
Line 1858  sub print_cancel_request { Line 1961  sub print_cancel_request {
             }              }
             $output = &mt('No further action will be taken');              $output = &mt('No further action will be taken');
         } elsif (ref($history{'details'}) eq 'HASH') {          } elsif (ref($history{'details'}) eq 'HASH') {
             my ($types,$typename) = &course_types();              my ($types,$typename) = &Apache::loncommon::course_types();
             my $showtype = $crstype;              my $showtype = $crstype;
             if (defined($typename->{$crstype})) {              if (defined($typename->{$crstype})) {
                 $showtype = $typename->{$crstype};                   $showtype = $typename->{$crstype}; 
Line 1874  sub print_cancel_request { Line 1977  sub print_cancel_request {
                       '<td>'.$showtype.'</td>'.                        '<td>'.$showtype.'</td>'.
                       &Apache::loncommon::end_data_table_row().                        &Apache::loncommon::end_data_table_row().
                       &Apache::loncommon::end_data_table().                        &Apache::loncommon::end_data_table().
                       '<br /><div class="LC_warning">'.                        '<br /><div class="LC_warning">';
                       &mt('Cancelling the request will remove it from the queue of pending course requests').'</div>';              if ($crstype eq 'community') {
                   $output .= &mt('Cancelling the request will remove it from the queue of pending community requests').'</div>';
               } else {
                   $output .= &mt('Cancelling the request will remove it from the queue of pending course requests').'</div>';
               }
             $result = 'ok';              $result = 'ok';
         } else {          } else {
             $output = '<div class="LC_error">'.&mt('No record exists for the course ID').'</div>';              $output = '<div class="LC_error">'.&mt('No record exists for the course ID').'</div>';
Line 1944  sub print_request_logs { Line 2051  sub print_request_logs {
 sub print_review {  sub print_review {
     my ($dom,$codetitles,$cat_titles,$cat_order,$code_order,$uname,$udom,      my ($dom,$codetitles,$cat_titles,$cat_order,$code_order,$uname,$udom,
         $disallowed,$disallowmsg) = @_;          $disallowed,$disallowmsg) = @_;
     my ($types,$typename) = &course_types();      my ($types,$typename) = &Apache::loncommon::course_types();
     my ($owner,$ownername,$owneremail);      my ($owner,$ownername,$owneremail);
     if ($uname eq '' || $udom eq '') {      if ($uname eq '' || $udom eq '') {
         $uname = $env{'user.name'};          $uname = $env{'user.name'};
Line 2067  sub print_review { Line 2174  sub print_review {
     if (($env{'form.clonecrs'} =~ /^$match_name$/) &&       if (($env{'form.clonecrs'} =~ /^$match_name$/) && 
         ($env{'form.clonedom'} =~ /^$match_domain$/)) {          ($env{'form.clonedom'} =~ /^$match_domain$/)) {
         my $canclone = &Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},          my $canclone = &Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},
                            $env{'user.domain'},$env{'form.clonecrs'}, $env{'form.clonedom'});                             $env{'user.domain'},$env{'form.clonecrs'},$env{'form.clonedom'},
                              $env{'form.crstype'});
         if ($canclone) {          if ($canclone) {
             my %courseenv = &Apache::lonnet::userenvironment($env{'form.clonedom'},              my %courseenv = &Apache::lonnet::userenvironment($env{'form.clonedom'},
                               $env{'form.clonecrs'},('description','internal.coursecode'));                                $env{'form.clonecrs'},('description','internal.coursecode'));
Line 2109  sub print_review { Line 2217  sub print_review {
     }      }
   
     my $container = 'Course';      my $container = 'Course';
       my $ccrole = 'cc';
     if ($env{'form.crstype'} eq 'community') {      if ($env{'form.crstype'} eq 'community') {
         $container = 'Community';          $container = 'Community';
           $ccrole = 'co';
     }      }
   
     $personnel_headers = '<th>'.&mt('Name').'</th><th>'.&mt('Username:Domain').      $personnel_headers = '<th>'.&mt('Name').'</th><th>'.&mt('Username:Domain').
                          '</th><th>'.&mt('Role').'</th><th>'.&mt('LON-CAPA Sections').                           '</th><th>'.&mt('Role').'</th><th>'.&mt('LON-CAPA Sections').
                          '</th>';                           '</th>';
   
     $personnel_values .= '<tr><td>'.$ownername.'</td><td>'.$owner.'</td>'.      $personnel_values .= '<tr><td>'.$ownername.'</td><td>'.$owner.'</td>'.
                          '<td>'.&Apache::lonnet::plaintext('cc',$container).'</td>'.                           '<td>'.&Apache::lonnet::plaintext($ccrole,$container).'</td>'.
                          '<td>'.&mt('None').'</td></tr>';                           '<td>'.&mt('None').'</td></tr>';
     for (my $i=0; $i<$env{'form.persontotal'}; $i++) {      for (my $i=0; $i<$env{'form.persontotal'}; $i++) {
         if ($env{'form.person_'.$i.'_uname'} ne '') {          if ($env{'form.person_'.$i.'_uname'} ne '') {
Line 2153  sub print_review { Line 2264  sub print_review {
             if ($showsec eq '') {              if ($showsec eq '') {
                 $showsec = &mt('None');                  $showsec = &mt('None');
             }              }
             if ($env{'form.person_'.$i.'_role'} eq 'cc') {              if ($env{'form.person_'.$i.'_role'} eq $ccrole) {
                 $showsec = &mt('None');                  $showsec = &mt('None');
             }              }
             my $role = $env{'form.person_'.$i.'_role'};               my $role = $env{'form.person_'.$i.'_role'}; 
Line 2247  function validateForm() { Line 2358  function validateForm() {
   
 ENDJS  ENDJS
     my $title = &mt('Brief Course Description');      my $title = &mt('Brief Course Description');
       my $clonetitle = &mt('Clone content and settings from an existing course?');
     if ($crstype eq 'community') {      if ($crstype eq 'community') {
         $title = &mt('Brief Community Description');          $title = &mt('Brief Community Description');
           $clonetitle = &mt('Clone content and settings from an existing community?');
     }      }
     my $output .= $js_validate."\n".'<div>'.&Apache::lonhtmlcommon::start_pick_box().      my $output .= $js_validate."\n".'<div>'.&Apache::lonhtmlcommon::start_pick_box().
                   &Apache::lonhtmlcommon::row_headline().                    &Apache::lonhtmlcommon::row_headline().
Line 2266  ENDJS Line 2379  ENDJS
     $output .= $home_server_pick.      $output .= $home_server_pick.
                &Apache::lonhtmlcommon::row_closure().                 &Apache::lonhtmlcommon::row_closure().
                &Apache::lonhtmlcommon::row_headline().                 &Apache::lonhtmlcommon::row_headline().
                '<h3>'.&Apache::loncommon::help_open_topic('Course_Request_Clone').'&nbsp;'.&mt('Clone content and settings from an existing course?').'</h3>'.                  '<h3>'.&Apache::loncommon::help_open_topic('Course_Request_Clone').'&nbsp;'.$clonetitle.'</h3>'. 
                &Apache::lonhtmlcommon::row_closure(1).                 &Apache::lonhtmlcommon::row_closure(1).
                &clone_form($dom,$formname,$crstype).                 &clone_form($dom,$formname,$crstype).
                &Apache::lonhtmlcommon::end_pick_box().'</div>'."\n";                 &Apache::lonhtmlcommon::end_pick_box().'</div>'."\n";
Line 2410  sub get_course_dom { Line 2523  sub get_course_dom {
         }          }
     }      }
     if (($env{'user.domain'} ne '') && ($env{'user.domain'} ne 'public')) {      if (($env{'user.domain'} ne '') && ($env{'user.domain'} ne 'public')) {
         my ($types,$typename) = &course_types();          my ($types,$typename) = &Apache::loncommon::course_types();
         if (ref($types) eq 'ARRAY') {          if (ref($types) eq 'ARRAY') {
             foreach my $type (@{$types}) {              foreach my $type (@{$types}) {
                 if (&Apache::lonnet::usertools_access($env{'user.name'},                  if (&Apache::lonnet::usertools_access($env{'user.name'},
Line 2513  sub print_request_outcome { Line 2626  sub print_request_outcome {
     }      }
     $now = time;      $now = time;
     $crstype = $env{'form.crstype'};      $crstype = $env{'form.crstype'};
       my $ccrole = 'cc';
       if ($crstype eq 'community') {
           $ccrole = 'co';
       }
     my @instsections;      my @instsections;
     if ($crstype eq 'official') {      if ($crstype eq 'official') {
         if (&Apache::lonnet::auto_run('',$dom)) {          if (&Apache::lonnet::auto_run('',$dom)) {
Line 2574  sub print_request_outcome { Line 2691  sub print_request_outcome {
                     } else {                      } else {
                         @{$personnel{$uname.':'.$udom}{'roles'}} = ($role);                          @{$personnel{$uname.':'.$udom}{'roles'}} = ($role);
                     }                      }
                     if ($role eq 'cc') {                      if ($role eq $ccrole) {
                         @{$personnel{$uname.':'.$udom}{$role}{'usec'}} = ();                          @{$personnel{$uname.':'.$udom}{$role}{'usec'}} = ();
                     } else {                      } else {
                         my @currsec = &Apache::loncommon::get_env_multiple('form.person_'.$i.'_sec');                          my @currsec = &Apache::loncommon::get_env_multiple('form.person_'.$i.'_sec');
Line 2633  sub print_request_outcome { Line 2750  sub print_request_outcome {
         if ($clonehome ne 'no_host') {            if ($clonehome ne 'no_host') {  
             my $canclone =                my $canclone =  
                 &Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},                  &Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},
                         $env{'user.domain'},$env{'form.clonecrs'}, $env{'form.clonedom'});                          $env{'user.domain'},$env{'form.clonecrs'},$env{'form.clonedom'},
                           $crstype);
             if ($canclone) {              if ($canclone) {
                 $clonecrs = $env{'form.clonecrs'};                  $clonecrs = $env{'form.clonecrs'};
                 $clonedom = $env{'form.clonedom'};                  $clonedom = $env{'form.clonedom'};
Line 2724  sub print_request_outcome { Line 2842  sub print_request_outcome {
         $reqstatus = $disposition;          $reqstatus = $disposition;
         my ($modified,$queued);          my ($modified,$queued);
         if ($disposition eq 'rejected') {          if ($disposition eq 'rejected') {
             $output = &mt('Your course request was rejected.');              if ($crstype eq 'community') {
                   $output = &mt('Your community request was rejected.');
               } else {
                   $output = &mt('Your course request was rejected.');
               }
             if ($message) {              if ($message) {
                 $output .= '<div class="LC_warning">'.$message.'</div>';                  $output .= '<div class="LC_warning">'.$message.'</div>';
             }              }
Line 2732  sub print_request_outcome { Line 2854  sub print_request_outcome {
         } elsif ($disposition eq 'process') {          } elsif ($disposition eq 'process') {
             my %domdefs = &Apache::lonnet::get_domain_defaults($dom);              my %domdefs = &Apache::lonnet::get_domain_defaults($dom);
             my ($logmsg,$newusermsg,$addresult,$enrollcount,$response,$keysmsg,%longroles);              my ($logmsg,$newusermsg,$addresult,$enrollcount,$response,$keysmsg,%longroles);
             my @roles = &Apache::lonuserutils::roles_by_context('course');  
             my $type = 'Course';              my $type = 'Course';
             if ($crstype eq 'community') {              if ($crstype eq 'community') {
                 $type = 'Community';                  $type = 'Community';
             }              }
               my @roles = &Apache::lonuserutils::roles_by_context('course','',$type);
             foreach my $role (@roles) {              foreach my $role (@roles) {
                 $longroles{$role}=&Apache::lonnet::plaintext($role,$type);                  $longroles{$role}=&Apache::lonnet::plaintext($role,$type);
             }              }
Line 2748  sub print_request_outcome { Line 2870  sub print_request_outcome {
                 $reqstatus = 'created';                  $reqstatus = 'created';
                 my $role_result = &update_requestors_roles($dom,$cnum,$crstype,$details,                  my $role_result = &update_requestors_roles($dom,$cnum,$crstype,$details,
                                                            \%longroles);                                                             \%longroles);
                 $output = '<p>'.&mt('Your course request has been processed and the course has been created.').                  if ($crstype eq 'community') {
                           '<br />'.$role_result.'</p>';                      $output = '<p>'.&mt('Your community request has been processed and the community has been created.');
                   } else {
                       $output = '<p>'.&mt('Your course request has been processed and the course has been created.');
                   }
                   $output .= '<br />'.$role_result.'</p>';
                 $creationresult = 'created';                  $creationresult = 'created';
             } else {              } else {
                 $output = '<span class="LC_error">'.                  $output = '<span class="LC_error">';
                           &mt('An error occurred when processing your course request.').                  if ($crstype eq 'community') {
                           '<br />'.                      $output .= &mt('An error occurred when processing your community request.');
                           &mt('You may want to review the request details and submit the request again.').                  } else {
                       $output .= &mt('An error occurred when processing your course request.');
                   }
                   $output .= '<br />'.
                              &mt('You may want to review the request details and submit the request again.').
                           '</span>';                            '</span>';
                 $creationresult = 'error';                  $creationresult = 'error';
             }              }
Line 2788  sub print_request_outcome { Line 2918  sub print_request_outcome {
                 my $putresult = &Apache::lonnet::newput_dom('courserequestqueue',$request,                  my $putresult = &Apache::lonnet::newput_dom('courserequestqueue',$request,
                                                             $dom);                                                              $dom);
                 if ($putresult eq 'ok') {                  if ($putresult eq 'ok') {
                     $output = &mt('Your course request has been recorded.').'<br />'.                      if ($crstype eq 'community') {
                           $output .= &mt('Your community request has been recorded.');
                       } else {
                           $output .= &mt('Your course request has been recorded.') 
                       }
                       $output .= '<br />'.
                               &notification_information($disposition,$req_notifylist,                                &notification_information($disposition,$req_notifylist,
                                                         $cnum,$now);                                                          $cnum,$now);
                 } else {                  } else {
Line 2820  sub print_request_outcome { Line 2955  sub print_request_outcome {
             &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') {
             $output .= '<p>'.&mt('Your course request has been updated').'</p>'.              if ($crstype eq 'community') {
                        &notification_information($disposition,$req_notifylist,$cnum,$now);                  $output .= '<p>'.&mt('Your community request has been updated').'</p>';
               } else {
                   $output .= '<p>'.&mt('Your course request has been updated').'</p>';
               }
               $output .= &notification_information($disposition,$req_notifylist,$cnum,$now);
         }          }
         if ($validationerror ne '') {          if ($validationerror ne '') {
             $output .= '<span class="LC_warning">'.&mt('An error occurred validating your request with institutional data sources: [_1].',$validationerror).'</p>';              $output .= '<span class="LC_warning">'.&mt('An error occurred validating your request with institutional data sources: [_1].',$validationerror).'</p>';
Line 2841  sub update_requestors_roles { Line 2980  sub update_requestors_roles {
     my $owner = $env{'user.name'}.':'.$env{'user.domain'};      my $owner = $env{'user.name'}.':'.$env{'user.domain'};
     if (ref($details) eq 'HASH') {      if (ref($details) eq 'HASH') {
         if (ref($details->{'personnel'}) eq 'HASH') {          if (ref($details->{'personnel'}) eq 'HASH') {
               my $ccrole = 'cc';
               if ($crstype eq 'community') {
                   $ccrole = 'co';
               }
             unless (ref($details->{'personnel'}{$owner}) eq 'HASH') {              unless (ref($details->{'personnel'}{$owner}) eq 'HASH') {
                 $details->{'personnel'}{$owner} = {                  $details->{'personnel'}{$owner} = {
                                                     'roles' => ['cc'],                                                      'roles' => [$ccrole],
                                                     'cc'    => { 'usec' => [] },                                                      $ccrole => { 'usec' => [] },
                                                   };                                                    };
             }              }
             my @roles;              my @roles;
             if (ref($details->{'personnel'}{$owner}{'roles'}) eq 'ARRAY') {              if (ref($details->{'personnel'}{$owner}{'roles'}) eq 'ARRAY') {
                 @roles = sort(@{$details->{'personnel'}{$owner}{'roles'}});                  @roles = sort(@{$details->{'personnel'}{$owner}{'roles'}});
                 unless (grep(/^cc$/,@roles)) {                  unless (grep(/^\Q$ccrole\E$/,@roles)) {
                     push(@roles,'cc');                      push(@roles,$ccrole);
                 }                  }
             } else {              } else {
                 @roles = ('cc');                  @roles = ($ccrole);
             }              }
             foreach my $role (@roles) {              foreach my $role (@roles) {
                 my $start = $now;                  my $start = $now;
Line 2868  sub update_requestors_roles { Line 3011  sub update_requestors_roles {
                     }                      }
                 }                  }
                 my @usecs;                  my @usecs;
                 if ($role ne 'cc') {                  if ($role ne $ccrole) {
                     if (ref($details->{'personnel'}{$owner}{$role}{'usec'}) eq 'ARRAY') {                      if (ref($details->{'personnel'}{$owner}{$role}{'usec'}) eq 'ARRAY') {
                         @usecs = @{$details->{'personnel'}{$owner}{$role}{'usec'}};                          @usecs = @{$details->{'personnel'}{$owner}{$role}{'usec'}};
                     }                      }
Line 2933  sub update_requestors_roles { Line 3076  sub update_requestors_roles {
     }      }
     if ($active) {      if ($active) {
         if ($numactive == 1) {          if ($numactive == 1) {
             $output = &mt('Use the following link to enter the course:');               if ($crstype eq 'Community') {
                   $output = &mt('Use the following link to enter the community:');
               } else {
                   $output = &mt('Use the following link to enter the course:'); 
               }
         } else {          } else {
             $output = &mt('Use the following links to your new roles to enter the course:');              if ($crstype eq 'Community') {
                   $output = &mt('Use the following links to your new roles to enter the community:');
               } else {
                   $output = &mt('Use the following links to your new roles to enter the course:');
               }
         }          }
         $output .= ' <ul>'.$active.'</ul><br />';          $output .= ' <ul>'.$active.'</ul><br />';
     }      }
     if ($future) {      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'})).          if ($crstype eq 'Community') {
                    ' <ul>'.$future.'</ul>';              $output .= &mt('The following community [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'}))
           } else {
               $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'}));
           }
           $output .= ' <ul>'.$future.'</ul>';
     }      }
     return $output;      return $output;
 }  }
Line 3074  sub get_processtype { Line 3229  sub get_processtype {
 sub check_autolimit {  sub check_autolimit {
     my ($uname,$udom,$dom,$crstype,$limit,$message) = @_;      my ($uname,$udom,$dom,$crstype,$limit,$message) = @_;
     my %crsroles = &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},      my %crsroles = &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},
                                         'userroles',['active','future'],['cc'],[$dom]);                         'userroles',['active','future'],['cc','co'],[$dom]);
     my ($types,$typename) = &course_types();      my ($types,$typename) = &Apache::loncommon::course_types();
     my %requests = &Apache::lonnet::dumpstore('courserequests',$udom,$uname);      my %requests = &Apache::lonnet::dumpstore('courserequests',$udom,$uname);
     my %count;      my $count = 0;
     if (ref($types) eq 'ARRAY') {  
         foreach my $type (@{$types}) {  
             $count{$type} = 0;  
         }  
     }  
     foreach my $key (keys(%requests)) {      foreach my $key (keys(%requests)) {
         my ($cdom,$cnum) = split('_',$key);          my ($cdom,$cnum) = split('_',$key);
         if (exists($crsroles{$cnum.':'.$cdom.':cc'})) {          if (ref($requests{$key}) eq 'HASH') {
             if (ref($requests{$key}) eq 'HASH') {              next if ($requests{$key}{'crstype'} ne $crstype);
                 my $type = $requests{$key}{'crstype'};              if (($crstype eq 'community') && 
                 if ($type =~ /^official|unofficial|community$/) {                  (exists($crsroles{$cnum.':'.$cdom.':co'}))) {
                     $count{$type} ++;                  $count ++;
                 }              } elsif ((($crstype eq 'official') || ($crstype eq 'unofficial')) &&
                        (exists($crsroles{$cnum.':'.$cdom.':cc'}))) {
                   $count ++;
             }              }
         }          }
     }      }
     if ($count{$crstype} < $limit) {      if ($count < $limit) {
         return 'process';          return 'process';
     } else {      } else {
         if (ref($typename) eq 'HASH') {          if (ref($typename) eq 'HASH') {
             $$message = &mt('Your request has not been processed because you have reached the limit for the number of courses of this type.').'<br />'.&mt("Your $typename->{$crstype} limit is [_1].",$limit);              if ($crstype eq 'community') {
                   $$message = &mt('Your request has not been processed because you have reached the limit for the number of communities.').
                               '<br />'.&mt("Your limit is [_1].",$limit);
               } else {
                   $$message = &mt('Your request has not been processed because you have reached the limit for the number of courses of this type.').
                               '<br />'.&mt("Your $typename->{$crstype} limit is [_1].",$limit);
               }
         }          }
         return 'rejected';          return 'rejected';
     }      }

Removed from v.1.36.2.1  
changed lines
  Added in v.1.41


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