Diff for /loncom/interface/lonrequestcourse.pm between versions 1.40 and 1.41.2.1

version 1.40, 2009/11/18 19:15:44 version 1.41.2.1, 2009/12/15 13:36:16
Line 143  sub handler { Line 143  sub handler {
     $states{'log'} = ['filter','display'];      $states{'log'} = ['filter','display'];
     $states{'new'} = ['courseinfo','enrollment','personnel','review','process'];      $states{'new'} = ['courseinfo','enrollment','personnel','review','process'];
   
       if ($dom eq 'gcitest') {
           $states{'new'} = ['courseinfo','review','process'];
       }
   
     if (($action eq 'new') && ($env{'form.crstype'} eq 'official')) {      if (($action eq 'new') && ($env{'form.crstype'} eq 'official')) {
         unless ($env{'form.state'} eq 'crstype') {          unless ($env{'form.state'} eq 'crstype') {
             unshift(@{$states{'new'}},'codepick');              unshift(@{$states{'new'}},'codepick');
Line 169  sub handler { Line 173  sub handler {
                  cancel        => 'Cancel Request',                   cancel        => 'Cancel Request',
                  removal       => 'Outcome',                   removal       => 'Outcome',
                 );                  );
       if ($dom eq 'gcitest') {
           $trail{'crstype'} = 'Building a Test';
           $trail{'courseinfo'} = 'Test Information';
       }
   
     if (($env{'form.crstype'} eq 'official') && (&Apache::lonnet::auto_run('',$dom))) {      if (($env{'form.crstype'} eq 'official') && (&Apache::lonnet::auto_run('',$dom))) {
         $trail{'enrollment'} = 'Enrollment';          $trail{'enrollment'} = 'Enrollment';
Line 360  sub get_breadcrumbs { Line 368  sub get_breadcrumbs {
     my ($dom,$action,$state,$states,$trail) = @_;      my ($dom,$action,$state,$states,$trail) = @_;
     my ($crumb,$newinstcode,$codechk,$checkedcode,$numtitles,$description);      my ($crumb,$newinstcode,$codechk,$checkedcode,$numtitles,$description);
     my $page = 0;      my $page = 0;
       my $firstcrumb = 'Pick Action';
       my $crumbtitle = 'Course/Community Requests';
       my $crumbhelp = 'Course_Requests';
       if ($dom eq 'gcitest') {
           $firstcrumb = 'Building a Test';
           $crumbtitle = 'Create Concept Test';
           $crumbhelp = 'Concept_Test_Creation';
       }
     if ((ref($states) eq 'HASH') && (ref($trail) eq 'HASH') && (ref($state))) {      if ((ref($states) eq 'HASH') && (ref($trail) eq 'HASH') && (ref($state))) {
         if (defined($action)) {          if (defined($action)) {
             my $done = 0;              my $done = 0;
Line 401  sub get_breadcrumbs { Line 417  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/Community Requests','Course_Requests');                      $crumb = &Apache::lonhtmlcommon::breadcrumbs($crumbtitle,$crumbhelp);
                     last;                      last;
                 } else {                  } else {
                     if (($$state eq 'process') || ($$state eq 'removal')) {                      if (($$state eq 'process') || ($$state eq 'removal')) {
Line 420  sub get_breadcrumbs { Line 436  sub get_breadcrumbs {
            }             }
         } else {          } else {
             &Apache::lonhtmlcommon::add_breadcrumb(              &Apache::lonhtmlcommon::add_breadcrumb(
                     {text=>'Pick Action'});                      {text=>$firstcrumb});
             $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');              $crumb = &Apache::lonhtmlcommon::breadcrumbs($crumbtitle,$crumbhelp);
         }          }
     } else {      } else {
         &Apache::lonhtmlcommon::add_breadcrumb(          &Apache::lonhtmlcommon::add_breadcrumb(
                 {text=>'Pick Action'});                  {text=>$firstcrumb});
         $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');          $crumb = &Apache::lonhtmlcommon::breadcrumbs($crumbtitle,$crumbhelp);
     }      }
     return ($page,$crumb,$newinstcode,$codechk,$checkedcode,$description);      return ($page,$crumb,$newinstcode,$codechk,$checkedcode,$description);
 }  }
Line 499  sub form_elements { Line 515  sub form_elements {
          },           },
     );      );
     my %servers = &Apache::lonnet::get_servers($dom,'library');      my %servers = &Apache::lonnet::get_servers($dom,'library');
       if ($dom eq 'gcitest') {
           %{$elements{'new'}{'courseinfo'}} = (
                                                 cdescr      => 'text',
                                                 concepttest => 'radio', 
                                               );
       }
     my $numlib = keys(%servers);      my $numlib = keys(%servers);
     if ($numlib > 1) {      if ($numlib > 1) {
         $elements{'new'}{'courseinfo'}{'chome'} = 'selectbox';          $elements{'new'}{'courseinfo'}{'chome'} = 'selectbox';
     } else {      } else {
         $elements{'new'}{'courseinfo'}{'chome'} = 'hidden';          $elements{'new'}{'courseinfo'}{'chome'} = 'hidden';
     }      }
       if ($dom eq 'gcitest') {
           my %mergedhash = (%{$elements{'new'}{'courseinfo'}},%{$elements{'new'}{'enrollment'}});
           %{$elements{'new'}{'courseinfo'}} = %mergedhash;
       }
     my (@codetitles,%cat_titles,%cat_order,@code_order,$lastitem);      my (@codetitles,%cat_titles,%cat_order,@code_order,$lastitem);
     &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);
Line 626  sub print_main_menu { Line 652  sub print_main_menu {
         }          }
     }      }
   
     my $js = <<"END";      my $js;
       unless ($dom eq 'gcitest') {
           $js = <<"END";
   
 function nextPage(formname) {  function nextPage(formname) {
     var crschoice = document.mainmenu_coursetype.crstype.value;      var crschoice = document.mainmenu_coursetype.crstype.value;
Line 650  function check_can_request(crschoice,act Line 678  function check_can_request(crschoice,act
     var unofficial = '';      var unofficial = '';
     var community = '';          var community = '';    
 END  END
     if (ref($can_request) eq 'HASH') {          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.',              unofficial => 'You are not permitted to request creation of an unofficial course in this domain.',
         unofficial => 'You are not permitted to request creation of an unofficial course in this domain.',              community => 'You are not permitted to request creation of a community this domain.',
         community => 'You are not permitted to request creation of a community this domain.',              all => 'You must choose a specific course type when making a new course request.\\nAll types is not allowed.',
         all => 'You must choose a specific course type when making a new course request.\\nAll types is not allowed.',          ); 
     );           $js .= <<END;
     $js .= <<END;  
     if (crschoice == 'official') {      if (crschoice == 'official') {
         if (official != 1) {          if (official != 1) {
             alert("$lt{'official'}");              alert("$lt{'official'}");
Line 671  END Line 699  END
         }          }
     } else {      } else {
         if (crschoice == 'unofficial') {          if (crschoice == 'unofficial') {
             if (unofficial != 1) {             if (unofficial != 1) {
                 alert("$lt{'unofficial'}");                 alert("$lt{'unofficial'}");
                 return false;                 return false;
             }              }
         } else {          } else {
             if (crschoice == 'community') {              if (crschoice == 'community') {
Line 685  END Line 713  END
                 if (actionchoice == 'new') {                  if (actionchoice == 'new') {
                     alert("$lt{'all'}");                      alert("$lt{'all'}");
                     return false;                      return false;
                 }                                 }
             }              }
         }          }
     }      }
     return true;      return true;
 }  }
 END  END
       }
     my ($pagetitle,$pageinfo,$domaintitle);      my ($pagetitle,$pageinfo,$domaintitle);
     if (ref($can_request) eq 'HASH') {      if (ref($can_request) eq 'HASH') {
         if (($can_request->{'official'}) || ($can_request->{'unofficial'})) {          if (($can_request->{'official'}) || ($can_request->{'unofficial'})) {
Line 714  END Line 743  END
             $domaintitle = &mt('Course/Community Domain');              $domaintitle = &mt('Course/Community Domain');
         }          }
     }      }
   
       if ($dom eq 'gcitest') {
           my $formname = 'requestcrs';
           my $nexttext = &mt('Continue');
           $r->print(&header($pagetitle,$js.$jscript,$loaditems).$crumb.
               '<p>'.&mt('Deployment of a Concept Test requires completion of the following three steps:').'<ol>'.
               '<li>'.&mt('Creation of a course "container" and setting of access dates').'</li>'.
               '<li>'.&mt('Assembly of a valid test from Concept Inventory questions').'</li>'.
               '<li>'.&mt('Enrollment of students').'</li>'.
               '</ol></p><p>'.&mt('When assembling a test you may either:').
               '<br />'.&mt('(a) have a valid test built automatically by the WebCenter, or').'<br />'.&mt('(b) select the questions to include by combining questions chosen from eleven bins with four mandatory questions.').'</p><p>'.&mt('The most efficient way to enroll students is to upload a text file containing usernames and passwords.').'<br />'.&mt("Students' full e-mail addresses should be used as their usernames to ensure uniqueness.").'</p><div>'.
               '<form name="'.$formname.'" method="post" action="/adm/requestcourse">'."\n".
               '<input type="hidden" name="state" value="courseinfo" />'."\n".
               '<input type="hidden" name="showdom" value="'.$dom.'" />'."\n".
               '<input type="hidden" name="crstype" value="unofficial" />'."\n".
               '<input type="hidden" name="action" value="new" />'."\n".
               '<input type="button" name="next" value="'.$nexttext.
               '" onclick="this.form.submit();" />'."\n".
               '</form></div>'.
                &Apache::loncommon::end_page());
           return;
       }
   
       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;
       }
   
     my @incdoms;      my @incdoms;
     if (ref($request_domains) eq 'HASH') {      if (ref($request_domains) eq 'HASH') {
         foreach my $item (keys(%{$request_domains})) {          foreach my $item (keys(%{$request_domains})) {
Line 1365  sub print_request_form { Line 1428  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);
         }          }
         my ($storeresult,$result) = &print_request_outcome($dom,\@codetitles,          my ($storeresult,$result) = &print_request_outcome($r,$dom,\@codetitles,
                                                            \@code_order);                                                             \@code_order);
         $r->print($result);          $r->print($result);
         if (($storeresult eq 'ok') || ($storeresult eq 'created')) {          if (($storeresult eq 'ok') || ($storeresult eq 'created')) {
Line 1557  sub print_enrollment_menu { Line 1620  sub print_enrollment_menu {
     my $access_dates =       my $access_dates = 
         &date_setting_table($starttime,$endtime,$formname,'access',$hasauto,          &date_setting_table($starttime,$endtime,$formname,'access',$hasauto,
                             %accesstitles);                              %accesstitles);
     $output .= &Apache::lonhtmlcommon::start_pick_box();  
     if ($sections) {      if ($sections) {
         $output .=  $sections;          $output .=  $sections;
     }      }
Line 1577  sub print_enrollment_menu { Line 1639  sub print_enrollment_menu {
                    &Apache::lonhtmlcommon::row_closure(1).                     &Apache::lonhtmlcommon::row_closure(1).
                    $access_dates                     $access_dates
     }      }
     return '<div>'.&Apache::lonhtmlcommon::start_pick_box().$output.      if ($dom eq 'gcitest') {
            &Apache::lonhtmlcommon::end_pick_box().'</div>';          return $output;
       } else {
           return '<div>'.&Apache::lonhtmlcommon::start_pick_box().$output.
                  &Apache::lonhtmlcommon::end_pick_box().'</div>';
       }
 }  }
   
 sub show_invalid_crosslists {  sub show_invalid_crosslists {
Line 1696  sub print_personnel_menu { Line 1762  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 2170  sub print_review { Line 2236  sub print_review {
     }      }
   
     my %ctxt = &clone_text();      my %ctxt = &clone_text();
     $inst_headers .= '<th>'.&mt('Clone From').'</th>';      if ($dom eq 'gcitest') {
     if (($env{'form.clonecrs'} =~ /^$match_name$/) &&           $inst_headers .= '<th>'.&mt('Test Questions').'</th>';
         ($env{'form.clonedom'} =~ /^$match_domain$/)) {          my $concepttest;
         my $canclone = &Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},          if ($env{'form.concepttest'} eq 'defchosen') {
               $concepttest = 'Auto-generated';
           } elsif ($env{'form.concepttest'} eq 'editmyown') {
               $concepttest = 'Manually selected';
           }
           $inst_values .= '<td>'.$concepttest.'</td>';
       } else {
           $inst_headers .= '<th>'.&mt('Clone From').'</th>';
           if (($env{'form.clonecrs'} =~ /^$match_name$/) && 
               ($env{'form.clonedom'} =~ /^$match_domain$/)) {
               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'});                             $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'));
             if (keys(%courseenv) > 0) {                  if (keys(%courseenv) > 0) {
                 $inst_headers .= '<th>'.$ctxt{'dsh'}.'</th>';                      $inst_headers .= '<th>'.$ctxt{'dsh'}.'</th>';
                 $inst_values .= '<td>'.$courseenv{'description'}.'&nbsp;';                      $inst_values .= '<td>'.$courseenv{'description'}.'&nbsp;';
                 my $cloneinst = $courseenv{'internal.coursecode'};                      my $cloneinst = $courseenv{'internal.coursecode'};
                 if ($cloneinst ne '') {                      if ($cloneinst ne '') {
                     $inst_values .= $cloneinst.' '.&mt('in').' '.$env{'form.clonedom'};                          $inst_values .= $cloneinst.' '.&mt('in').' '.$env{'form.clonedom'};
                 } else {                      } else {
                     $inst_values .= &mt('from').' '.$env{'form.clonedom'};                          $inst_values .= &mt('from').' '.$env{'form.clonedom'};
                 }                      }
                 $inst_values .= '</td><td>';                      $inst_values .= '</td><td>';
                 if ($env{'form.datemode'} eq 'preserve') {                      if ($env{'form.datemode'} eq 'preserve') {
                     $inst_values .= $ctxt{'prd'};                           $inst_values .= $ctxt{'prd'}; 
                 } elsif ($env{'form.datemode'} eq 'shift') {                      } elsif ($env{'form.datemode'} eq 'shift') {
                     $inst_values .= &mt('Shift dates by [_1] days',$env{'form.dateshift'});                          $inst_values .= &mt('Shift dates by [_1] days',$env{'form.dateshift'});
                 } else {                      } else {
                     $inst_values .= $ctxt{'ncd'};                          $inst_values .= $ctxt{'ncd'};
                 }                      }
                 $inst_values .= '</td>';                      $inst_values .= '</td>';
                    } else {
                        $inst_values .= '<td>'.&mt('Unknown').'</td>';
                    }
              } else {               } else {
                  $inst_values .= '<td>'.&mt('Unknown').'</td>';                   $inst_values .= '<td>'.&mt('Not permitted'),'</td>';
              }               }
          } else {          } else {
              $inst_values .= '<td>'.&mt('Not permitted'),'</td>';              $inst_values .= '<td>'.&mt('None').'</td>';
          }          }
     } else {  
         $inst_values .= '<td>'.&mt('None').'</td>';  
     }      }
     $enroll_headers .= '<th>'.&mt('Access Starts').'</th>'.      $enroll_headers .= '<th>'.&mt('Access Starts').'</th>'.
                        '<th>'.&mt('Access Ends').'</th>';                         '<th>'.&mt('Access Ends').'</th>';
Line 2217  sub print_review { Line 2294  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 2261  sub print_review { Line 2341  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 2355  function validateForm() { Line 2435  function validateForm() {
   
 ENDJS  ENDJS
     my $title = &mt('Brief Course Description');      my $title = &mt('Brief Course Description');
       my $desctitle = &mt('Description');
       if ($dom eq 'gcitest') {
           $title = &mt('Concept Test Course Information');
           $desctitle = &mt('Concept Test Title');
       }
     my $clonetitle = &mt('Clone content and settings from an existing course?');      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');
Line 2364  ENDJS Line 2449  ENDJS
                   &Apache::lonhtmlcommon::row_headline().                    &Apache::lonhtmlcommon::row_headline().
                   '<h3>'.&Apache::loncommon::help_open_topic('Course_Request_Description').'&nbsp;'.$title.'</h3>'.                    '<h3>'.&Apache::loncommon::help_open_topic('Course_Request_Description').'&nbsp;'.$title.'</h3>'.
                   &Apache::lonhtmlcommon::row_closure(1).                    &Apache::lonhtmlcommon::row_closure(1).
                   &Apache::lonhtmlcommon::row_title(&mt('Description')).                    &Apache::lonhtmlcommon::row_title($desctitle).
                  '<input type="text" size="60" name="cdescr" value="'.$description.'" />';                   '<input type="text" size="60" name="cdescr" value="'.$description.'" />';
       if ($dom eq 'gcitest') {
           $output .= &Apache::lonhtmlcommon::row_closure(1).
                      &concepttest_form();
       }
     my ($home_server_pick,$numlib) =      my ($home_server_pick,$numlib) =
         &Apache::loncommon::home_server_form_item($dom,'chome',          &Apache::loncommon::home_server_form_item($dom,'chome',
                                                   'default','hide');                                                    'default','hide');
Line 2374  ENDJS Line 2463  ENDJS
                    &Apache::lonhtmlcommon::row_title(&mt('Home Server for Course'));                     &Apache::lonhtmlcommon::row_title(&mt('Home Server for Course'));
     }      }
     $output .= $home_server_pick.      $output .= $home_server_pick.
                &Apache::lonhtmlcommon::row_closure().                 &Apache::lonhtmlcommon::row_closure();
       if ($dom eq 'gcitest') {
           my ($instcode,@codetitles,%cat_titles,%cat_order,@code_order);
           my $invalidcrosslist = [];
           $output .= &print_enrollment_menu($formname,$instcode,$dom,
                          \@codetitles,\%cat_titles,\%cat_order,
                          \@code_order,$invalidcrosslist);
       } else {
           $output .= 
                &Apache::lonhtmlcommon::row_headline().                 &Apache::lonhtmlcommon::row_headline().
                '<h3>'.&Apache::loncommon::help_open_topic('Course_Request_Clone').'&nbsp;'.$clonetitle.'</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";      }
       $output .= &Apache::lonhtmlcommon::end_pick_box().'</div>'."\n";
     return $output;      return $output;
 }  }
   
   sub concepttest_form {
        return &Apache::lonhtmlcommon::row_title(&mt('Questions included in Concept Test')).
               '<input type="radio" name="concepttest" value="defchosen" /> '.
               &mt('Automatically selected by WebCenter').
               '</label><br /><label>'.
               '<input type="radio" name="concepttest" value="editmyown" checked="checked" /> '.
               &mt('Chosen by you from Concept Inventory').
               '</label><br /><label>';
   }
   
 sub clone_form {  sub clone_form {
     my ($dom,$formname,$crstype) = @_;      my ($dom,$formname,$crstype) = @_;
     my $type = 'Course';      my $type = 'Course';
Line 2604  sub display_navbuttons { Line 2712  sub display_navbuttons {
 }  }
   
 sub print_request_outcome {  sub print_request_outcome {
     my ($dom,$codetitles,$code_order) = @_;      my ($r,$dom,$codetitles,$code_order) = @_;
     my ($output,$cnum,$now,$req_notifylist,$crstype,$enrollstart,$enrollend,      my ($output,$cnum,$now,$req_notifylist,$crstype,$enrollstart,$enrollend,
         %sections,%crosslistings,%personnel,@baduname,@missingdom,%domconfig,);          %sections,%crosslistings,%personnel,@baduname,@missingdom,%domconfig,);
     my $sectotal = $env{'form.sectotal'};      my $sectotal = $env{'form.sectotal'};
Line 2623  sub print_request_outcome { Line 2731  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 2684  sub print_request_outcome { Line 2796  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 2847  sub print_request_outcome { Line 2959  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 2861  sub print_request_outcome { Line 2973  sub print_request_outcome {
             if ($result eq 'created') {              if ($result eq 'created') {
                 $disposition = 'created';                  $disposition = 'created';
                 $reqstatus = 'created';                  $reqstatus = 'created';
                   my $parmoutput;
                   if ($dom eq 'gcitest') {
                       my $caller = 'requestcrs';
                       if ($env{'form.concepttest'} eq 'defchosen') {
                           &Apache::londocsgci::setdefaults();
                           &Apache::londocsgci::evaluate($caller);
                           &Apache::londocsgci::store($r,$caller,$dom,$cnum);
                       }
                       my ($furl,$ferr)= &Apache::lonuserstate::readmap($dom.'/'.$cnum);
                       my %parmresult = 
                           &store_crsparms($dom,$cnum,$now,$accessstart,$accessend);
                   }
                 my $role_result = &update_requestors_roles($dom,$cnum,$crstype,$details,                  my $role_result = &update_requestors_roles($dom,$cnum,$crstype,$details,
                                                            \%longroles);                                                             \%longroles);
                 if ($crstype eq 'community') {                  if ($crstype eq 'community') {
Line 2973  sub update_requestors_roles { Line 3097  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 3000  sub update_requestors_roles { Line 3128  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 3065  sub update_requestors_roles { Line 3193  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;
 }  }
   
   sub store_crsparms {
       my ($cdom,$cnum,$now,$accessstart,$accessend) = @_;
       my $topsymb = '___0___uploaded/'.$cdom.'/'.$cnum.'/default.sequence';
       my %crsparms = (
                         buttonshide => {
                                          value => 'yes',
                                          type  => 'string_yesno',
                                        },
                         opendate    => {
                                          value => $accessstart,
                                          type  => 'date_start',
                                        },
                         duedate     => {
                                          value => $accessend,
                                          type  => 'date_end',
                                        },
                         problemstatus => {
                                              value => 'no_feedback_ever',
                                              type  => 'string_problemstatus',
                                          },
                         maxtries      => {
                                              value => '1',
                                              type  => 'intpos',
                                          },
                         discussend    => {
                                              value => $now,
                                              type  => 'date_end',
                                          },
                         discusshide   => { 
                                              value => 'yes',
                                              type  => 'string_yesno',
                                          }
       );
       my %parmresult;
       foreach my $item (keys(%crsparms)) {
           $parmresult{$item} =
               &Apache::lonparmset::storeparm_by_symb($topsymb,
                                      '0_'.$item,14,$crsparms{$item}{'value'},
                                      $crsparms{$item}{'type'},undef,$cdom);
       }
       return %parmresult;
   }
   
 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();
Line 3206  sub get_processtype { Line 3389  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) = &Apache::loncommon::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.40  
changed lines
  Added in v.1.41.2.1


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