Diff for /loncom/automation/Autocreate.pl between versions 1.12 and 1.16

version 1.12, 2010/02/22 03:44:21 version 1.16, 2010/09/26 02:29:55
Line 110 Line 110
                 close($fh);                  close($fh);
                 exit;                  exit;
             }              }
               $env{'user.name'} = $dcname;
               $env{'user.domain'} = $dcdom;
               $env{'request.role.domain'} = $defdom;
               my @permissions = ('mau','ccc','cin','cta','cep','ccr','cst');
               my %permissionflags = ();
               &set_permissions(\%permissionflags,\@permissions);
             my $output = &process_xml($fh,$defdom,$dcname,$dcdom);              my $output = &process_xml($fh,$defdom,$dcname,$dcdom);
             print $output;              print $output;
               &unset_permissions(\%permissionflags);
         }          }
     } else {      } else {
         my $reqsnamespace = 'courserequestqueue';  
         my @courseroles = ('cc','in','ta','ep','ad','st');  
         my %longroles;  
         foreach my $role (@courseroles) {  
             $longroles{$role}=&Apache::lonnet::plaintext($role);  
         }  
         my @permissions = ('mau','ccc','cin','cta','cep','ccr','cst');          my @permissions = ('mau','ccc','cin','cta','cep','ccr','cst');
         my %permissionflags = ();          my %permissionflags = ();
         &set_permissions(\%permissionflags,\@permissions);          &set_permissions(\%permissionflags,\@permissions);
Line 148 Line 149
                     }                      }
                 }                  }
                 if ($settings->{'req'}) {                  if ($settings->{'req'}) {
                     my %domdefs = &Apache::lonnet::get_domain_defaults($dom);                      my $output = &Apache::loncoursequeueadmin::process_official_reqs('auto',$dom);
                     &process_official_reqs($fh,$dom,$reqsnamespace,\%longroles,\%domdefs);                      if ($output) {
                           print $fh $output;
                       }
                 }                  }
             }              }
         }          }
Line 214  sub process_xml { Line 217  sub process_xml {
     return $output;      return $output;
 }  }
   
 sub process_official_reqs {  
     my ($fh,$dom,$reqsnamespace,$longroles,$domdefs) = @_;  
     my %newcids;  
     my %requesthash =   
         &Apache::lonnet::dump_dom($reqsnamespace,$dom,undef,'_pending');  
     foreach my $key (keys(%requesthash)) {  
         my ($cnum,$status) = split('_',$key);  
         next if (&Apache::lonnet::homeserver($cnum,$dom) ne 'no_host');  
         if (ref($requesthash{$key}) eq 'HASH') {  
             my $ownername = $requesthash{$key}{'ownername'};  
             my $ownerdom = $requesthash{$key}{'ownerdom'};  
             next if (&Apache::lonnet::homeserver($ownername,$ownerdom) eq 'no_host');  
             my $inststatus;  
             my %userenv =  
                 &Apache::lonnet::get('environment',['inststatus'],  
                                      $ownerdom,$ownername);  
             my ($tmp) = keys(%userenv);  
             if ($tmp !~ /^(con_lost|error|no_such_host)/i) {  
                 $inststatus = $userenv{'inststatus'};  
             } else {  
                 undef(%userenv);  
             }  
             my $reqkey = $dom.'_'.$cnum;  
             my %history = &Apache::lonnet::restore($reqkey,'courserequests',  
                                                    $ownerdom,$ownername);  
             if (ref($history{'details'}) eq 'HASH') {  
                 my $instcode = $history{'details'}{'instcode'};  
                 my $crstype = $history{'details'}{'crstype'};  
                 my $reqtime = $history{'details'}{'reqtime'};  
                 my $cdescr = $history{'details'}{'cdescr'};  
                 my @currsec;  
                 my $sections = $history{'details'}{'sections'};  
                 if (ref($sections) eq 'HASH') {  
                     foreach my $i (sort(keys(%{$sections}))) {  
                         if (ref($sections->{$i}) eq 'HASH') {  
                             my $sec = $sections->{$i}{'inst'};  
                             if (!grep(/^\Q$sec\E$/,@currsec)) {  
                                 push(@currsec,$sec);  
                             }  
                         }  
                     }  
                 }  
                 my $instseclist = join(',',@currsec);  
                 my ($validationchk,$disposition,$reqstatus,$message,  
                     $validation,$validationerror);  
                 $validationchk =  
                     &Apache::lonnet::auto_courserequest_validation($dom,  
                         $ownername.':'.$ownerdom,$crstype,$inststatus,  
                         $instcode,$instseclist);  
                 if ($validationchk =~ /:/) {  
                     ($validation,$message) = split(':',$validationchk);  
                 } else {  
                     $validation = $validationchk;  
                 }  
                 if ($validation =~ /^error(.*)$/) {  
                     $disposition = 'approval';  
                     $validationerror = $1;  
                 } else {  
                     $disposition = $validation;  
                 }  
                 $reqstatus = $disposition;  
                 if ($disposition eq 'process') {  
                     my ($logmsg,$newusermsg,$addresult,$enrollcount,$response,$keysmsg);  
                     my $result = &Apache::loncoursequeueadmin::course_creation($dom,$cnum,'domain',$history{'details'},\$logmsg,\$newusermsg,\$addresult,\$enrollcount,\$response,\$keysmsg,$domdefs,$longroles);  
                     if ($result eq 'created') {  
                         $disposition = 'created';  
                         $reqstatus = 'created';  
                         push(@{$newcids{$instcode}},$dom.'_'.$cnum);  
                     }  
                 } elsif ($disposition eq 'rejected') {  
                     print $fh &mt('Queued course request for [_1] submitted by [_2] with status [_3] rejected when validating',$instcode,$ownername.':'.$ownerdom,$inststatus);  
                 } elsif ($disposition eq 'approval') {  
                     print $fh &mt('Queued course request for [_1] submitted by [_2] with status [_3] switched to "approval by DC" because of validation error: [_4].',$instcode,$ownername.':'.$ownerdom,$inststatus,$validationerror);  
   
                     my $requestid = $cnum.'_'.$disposition;  
                     my $request = {  
                             $requestid => {  
                                             timestamp   => $reqtime,  
                                             crstype     => $crstype,  
                                             ownername   => $ownername,  
                                             ownerdom    => $ownerdom,  
                                             description => $cdescr,  
                                           },  
                           };  
                     my $putresult = &Apache::lonnet::newput_dom('courserequestqueue',$request,$dom);  
                     unless ($putresult eq 'ok') {  
                         print $fh &mt("An error occurred saving the modified course request for [_1] submitted by [_2] in the domain's courserequestqueue.db.",$instcode,$ownername.':'.$ownerdom);     
                     }  
                 }  
                 unless ($disposition eq 'pending') {  
                     my ($statusresult,$output) =   
                         &Apache::loncoursequeueadmin::update_coursereq_status(\%requesthash,  
                             $dom,$cnum,$reqstatus,'domain');  
                     unless (&Apache::lonnet::del_dom($reqsnamespace,[$cnum.'_pending'],$dom) eq 'ok') {  
                         print $fh &mt('An error occurred when removing the request for [_1] submitted by [_2] from the pending queue.',$instcode,$ownername.':'.$ownerdom);  
                     }  
                 }  
             }  
         }  
     }  
     foreach my $key (sort(keys(%newcids))) {  
         if (ref($newcids{$key}) eq 'ARRAY') {  
             print $fh "created course from queued request: $key - ".join(', ',@{$newcids{$key}})."\n";  
             my $newcourse = &LONCAPA::escape($key.':'.$newcids{$key});  
         }  
     }  
     return;  
 }  
   
 sub check_activedc {  sub check_activedc {
     my ($dcdom,$dcname,$defdom) = @_;      my ($dcdom,$dcname,$defdom) = @_;
     my %dumphash=      my %roleshash = 
             &Apache::lonnet::dump('roles',$dcdom,$dcname);          &Apache::lonnet::get_my_roles($dcname,$dcdom,'userroles',undef,['dc'],[$defdom]);
     my $now=time;      if (keys(%roleshash) > 0) {
     my $activedc = 0;          return 1;
     foreach my $item (keys %dumphash) {  
         my ($domain,$role) = ($item =~ m-^/([^/]+)/[^_]*_(\w+)$-);  
         if ($role eq 'dc' && $domain eq $defdom) {  
             my ($trole,$tend,$tstart)=split(/_/,$dumphash{$item});  
             if (($tend) && ($tend<$now)) { next; }  
             if (($tstart) && ($now<$tstart)) { next; }  
             $activedc = 1;  
             last;  
         }  
     }      }
     return $activedc;      return 0;
 }  }
   
 sub set_permissions {  sub set_permissions {

Removed from v.1.12  
changed lines
  Added in v.1.16


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