Diff for /loncom/automation/batchcreatecourse.pm between versions 1.28 and 1.29

version 1.28, 2009/08/08 19:55:15 version 1.29, 2009/08/15 00:05:54
Line 219  sub create_courses { Line 219  sub create_courses {
             my %details = ();              my %details = ();
             if (-e $newcoursedir.'/'.$request) {              if (-e $newcoursedir.'/'.$request) {
                 &parse_coursereqs($newcoursedir.'/'.$request, \%details);                  &parse_coursereqs($newcoursedir.'/'.$request, \%details);
                 foreach my $num (sort keys %details) {                  foreach my $num (sort(keys(%details))) {
                     my $courseid = &build_course($dom,$num,$context,\%details,\%longroles,\$logmsg,\$newusermsg,\$addresult,\%enrollcount,\$output,\$keysmsg);                      my $reqdetails = $details{$num};
                       my $courseid = &build_course($dom,$num,$context,$reqdetails,\%longroles,\$logmsg,\$newusermsg,\$addresult,\%enrollcount,\$output,\$keysmsg);
                     if ($courseid =~m{^/$match_domain/$match_courseid}) {                      if ($courseid =~m{^/$match_domain/$match_courseid}) {
                         $$courseids{$courseid} = $details{$num}{'class'};                          $$courseids{$courseid} = $details{$num}{'class'};
                     }                      }
Line 393  sub parse_coursereqs { Line 394  sub parse_coursereqs {
 #########################################################  #########################################################
   
 sub build_course {  sub build_course {
     my ($cdom,$num,$context,$details,$longroles,$logmsg,$newusermsg,$addresult,$enrollcount,$output,$keysmsg,$udom,$uname,$cnum) = @_;      my ($cdom,$num,$context,$details,$longroles,$logmsg,$newusermsg,$addresult,$enrollcount,$output,$keysmsg,$udom,$uname,$cnum,$category) = @_;
     my $owner_uname = $$details{$num}{'owner'};      return unless (ref($details) eq 'HASH');
     my $owner_domain = $$details{$num}{'domain'};      my $owner_uname = $details->{'owner'};
       my $owner_domain = $details->{'domain'};
     my $owner = $owner_uname.':'.$owner_domain;      my $owner = $owner_uname.':'.$owner_domain;
     my $sectionstr = '';      my $sectionstr = '';
     my $xliststr = '';      my $xliststr = '';
Line 408  sub build_course { Line 410  sub build_course {
     } else {      } else {
         $linefeed = "<br />\n";          $linefeed = "<br />\n";
     }      }
     if ($$details{$num}{'accessend'} eq '') {      if ($details->{'accessend'} eq '') {
         $noenddate = 1;          $noenddate = 1;
     }      }
     my $reshome = $$details{$num}{'reshome'};      my $reshome = $details->{'reshome'};
     if ($reshome eq '') {      if ($reshome eq '') {
         $reshome = '/res/'.$cdom;          $reshome = '/res/'.$cdom;
     }      }
     my $firstres =  $$details{$num}{'firstres'};      my $firstres =  $details->{'firstres'};
     if ($firstres eq '') {      if ($firstres eq '') {
         $firstres = 'syl';          $firstres = 'syl';
     }      }
     foreach my $secid (sort keys %{$$details{$num}{'sections'}}) {      foreach my $secid (sort(keys(%{$details->{'sections'}}))) {
         $sectionstr .= $$details{$num}{'sections'}{$secid}{'inst'}.':'.$$details{$num}{'sections'}{$secid}{'loncapa'}.',';          $sectionstr .= $details->{'sections'}{$secid}{'inst'}.':'.$details->{'sections'}{$secid}{'loncapa'}.',';
     }      }
     $sectionstr =~ s/,$//;      $sectionstr =~ s/,$//;
   
     foreach my $xlist (sort keys %{$$details{$num}{'crosslists'}}) {      foreach my $xlist (sort(keys(%{$details->{'crosslists'}}))) {
         $xliststr .= $$details{$num}{'crosslists'}{$xlist}{'inst'}.':'.$$details{$num}{'crosslists'}{$xlist}{'loncapa'}.',';          $xliststr .= $details->{'crosslists'}{$xlist}{'inst'}.':'.$details->{'crosslists'}{$xlist}{'loncapa'}.',';
     }      }
     $xliststr =~ s/,$//;      $xliststr =~ s/,$//;
   
     my %courseinfo = (      my %courseinfo = (
                       inst_code => $$details{$num}{'coursecode'},                        inst_code => $details->{'coursecode'},
                       description => $$details{$num}{'title'}                        description => $details->{'title'}
                      );                        ); 
     if (&Apache::lonnet::homeserver($$details{$num}{'owner'},$$details{$num}{'domain'}) eq 'no_host') { # Add user if no account      if (&Apache::lonnet::homeserver($details->{'owner'},$details->{'domain'}) eq 'no_host') { # Add user if no account
         my $ownerargs = {'auth' => $$details{$num}{'ownerauthtype'},          my $ownerargs = {'auth' => $details->{'ownerauthtype'},
                     'authparam' => $$details{$num}{'ownerauthparam'},                      'authparam' => $details->{'ownerauthparam'},
                     'emailenc' => $$details{$num}{'emailenc'},                      'emailenc' => $details->{'emailenc'},
                     'udom' => $$details{$num}{'domain'},                      'udom' => $details->{'domain'},
                     'uname' => $$details{$num}{'owner'},                      'uname' => $details->{'owner'},
                     'pid' => $$details{$num}{'users'}{$owner}{'studentID'},                      'pid' => $details->{'users'}{$owner}{'studentID'},
                     'first' => $$details{$num}{'users'}{$owner}{'firstname'},                      'first' => $details->{'users'}{$owner}{'firstname'},
                     'middle' => $$details{$num}{'users'}{$owner}{'middlename'},                      'middle' => $details->{'users'}{$owner}{'middlename'},
                     'last' => $$details{$num}{'users'}{$owner}{'lastname'},                      'last' => $details->{'users'}{$owner}{'lastname'},
                     'gene' => $$details{$num}{'users'}{$owner}{'generation'},                      'gene' => $details->{'users'}{$owner}{'generation'},
                     'usec' => '',                      'usec' => '',
                     'end' => '',                      'end' => '',
                     'start' => '',                      'start' => '',
                     'emailaddr' => $$details{$num}{'users'}{$owner}{'email'},                      'emailaddr' => $details->{'users'}{$owner}{'email'},
                     'cid' => '',                      'cid' => '',
                     'context' => 'createowner',                      'context' => 'createowner',
                     'linefeed' => $linefeed,                      'linefeed' => $linefeed,
Line 459  sub build_course { Line 461  sub build_course {
     }      }
   
     if ($outcome eq 'ok') {      if ($outcome eq 'ok') {
         if ($$details{$num}{'datemode'} !~ /^(preserve|shift|delete)$/) {          if ($details->{'datemode'} !~ /^(preserve|shift|delete)$/) {
             $$details{$num}{'datemode'} = 'shift';              $details->{'datemode'} = 'shift';
             $$details{$num}{'dateshift'} = 365;              $details->{'dateshift'} = 365;
         }          }
         my $courseargs = {          my $courseargs = {
                ccuname => $$details{$num}{'owner'},                 ccuname => $details->{'owner'},
                ccdomain => $$details{$num}{'domain'},                 ccdomain => $details->{'domain'},
                cdescr => $$details{$num}{'title'},                 cdescr => $details->{'title'},
                crstype => $$details{$num}{'crstype'},                 crstype => $details->{'crstype'},
                curl => $$details{$num}{'topmap'},                 curl => $details->{'topmap'},
                course_domain => $cdom,                 course_domain => $cdom,
                course_home =>  $$details{$num}{'coursehome'},                 course_home =>  $details->{'coursehome'},
                nonstandard => $$details{$num}{'nonstandard'},                 nonstandard => $details->{'nonstandard'},
                crscode => $$details{$num}{'coursecode'},                 crscode => $details->{'coursecode'},
                crsquota => $$details{$num}{'crsquota'},                 crsquota => $details->{'crsquota'},
                clonecourse => $$details{$num}{'clonecrs'},                 clonecourse => $details->{'clonecrs'},
                clonedomain => $$details{$num}{'clonedom'},                 clonedomain => $details->{'clonedom'},
                datemode => $$details{$num}{'datemode'},                 datemode => $details->{'datemode'},
                dateshift => $$details{$num}{'dateshift'},                 dateshift => $details->{'dateshift'},
                crsid => $$details{$num}{'optional_id'},                 crsid => $details->{'optional_id'},
                curruser => $$details{$num}{'owner'},                 curruser => $details->{'owner'},
                crssections => $sectionstr,                 crssections => $sectionstr,
                crsxlist => $xliststr,                 crsxlist => $xliststr,
                autoadds => $$details{$num}{'adds'},                 autoadds => $details->{'adds'},
                autodrops => $$details{$num}{'drops'},                 autodrops => $details->{'drops'},
                notify => $$details{$num}{'notify_owner'},                 notify => $details->{'notify_owner'},
                notify_dc => $$details{$num}{'notify_dc'},                 notify_dc => $details->{'notify_dc'},
                no_end_date => $noenddate,                 no_end_date => $noenddate,
                showphotos => $$details{$num}{'showphotos'},                 showphotos => $details->{'showphotos'},
                authtype => $$details{$num}{'authtype'},                 authtype => $details->{'authtype'},
                autharg => $$details{$num}{'authparam'},                 autharg => $details->{'authparam'},
                enrollstart => $$details{$num}{'enrollstart'},                 enrollstart => $details->{'enrollstart'},
                enrollend => $$details{$num}{'enrollend'},                 enrollend => $details->{'enrollend'},
                startaccess => $$details{$num}{'accessstart'},                 startaccess => $details->{'accessstart'},
                endaccess => $$details{$num}{'accessend'},                 endaccess => $details->{'accessend'},
                setpolicy => $$details{$num}{'setpolicy'},                 setpolicy => $details->{'setpolicy'},
                setcontent => $$details{$num}{'setcontent'},                 setcontent => $details->{'setcontent'},
                reshome => $reshome,                 reshome => $reshome,
                setkeys => $$details{$num}{'setkeys'},                 setkeys => $details->{'setkeys'},
                keyauth => $$details{$num}{'keyauth'},                 keyauth => $details->{'keyauth'},
                disresdis => $$details{$num}{'disresdis'},                 disresdis => $details->{'disresdis'},
                disablechat => $$details{$num}{'disablechat'},                 disablechat => $details->{'disablechat'},
                openall => $$details{$num}{'openall'},                 openall => $details->{'openall'},
                firstres => $firstres                 firstres => $firstres
                };                 };
         my %host_servers = &Apache::lonnet::get_servers($cdom,'library');          my %host_servers = &Apache::lonnet::get_servers($cdom,'library');
         if (! exists($host_servers{$$details{$num}{'coursehome'}})) {          if (! exists($host_servers{$details->{'coursehome'}})) {
             $$logmsg .= &mt('Invalid home server for course').': '.$$details{$num}{'coursehome'};              $$logmsg .= &mt('Invalid home server for course').': '.$details->{'coursehome'};
             return;              return;
         }          }
         my ($success, $msg) = &Apache::loncommon::construct_course($courseargs,$logmsg,\$courseid,\$crsudom,\$crsunum,$udom,$uname,$context,$cnum);          my ($success, $msg) = &Apache::loncommon::construct_course($courseargs,$logmsg,\$courseid,\$crsudom,\$crsunum,$udom,$uname,$context,$cnum);
Line 529  sub build_course { Line 531  sub build_course {
 # Process other reqested users  # Process other reqested users
 #  #
     my $stulogmsg = '';      my $stulogmsg = '';
     foreach my $userkey (sort keys %{$$details{$num}{'users'}}) {      foreach my $userkey (sort(keys(%{$details->{'users'}}))) {
         my $url = '/'.$crsudom.'/'.$crsunum;          my $url = '/'.$crsudom.'/'.$crsunum;
         if (@{$$details{$num}{'users'}{$userkey}{'roles'}} > 0) {          next if (ref($details->{'users'}{$userkey}{'roles'}) ne 'ARRAY');   
           if (@{$details->{'users'}{$userkey}{'roles'}} > 0) {
             my ($username,$userdom) = split/:/,$userkey;              my ($username,$userdom) = split/:/,$userkey;
             if (&Apache::lonnet::homeserver($username,$userdom) eq 'no_host') { # Add user if no account              if (&Apache::lonnet::homeserver($username,$userdom) eq 'no_host') { # Add user if no account
                 my $firstrole = $$details{$num}{'users'}{$userkey}{'roles'}[0];                  my $firstrole = $details->{'users'}{$userkey}{'roles'}[0];
                 my $firstsec = $$details{$num}{'users'}{$userkey}{$firstrole}{'usec'}[0];                  my $firstsec = $details->{'users'}{$userkey}{$firstrole}{'usec'}[0];
                 my $userargs = {                  my $userargs = {
                     'auth' => $$details{$num}{'users'}{$userkey}{'authtype'},                      'auth' => $details->{'users'}{$userkey}{'authtype'},
                     'authparam' => $$details{$num}{'users'}{$userkey}{'autharg'},                      'authparam' => $details->{'users'}{$userkey}{'autharg'},
                     'emailenc' => $$details{$num}{'users'}{$userkey}{'emailenc'},                      'emailenc' => $details->{'users'}{$userkey}{'emailenc'},
                     'udom' => $userdom,                      'udom' => $userdom,
                     'uname' => $username,                      'uname' => $username,
                     'pid' => $$details{$num}{'users'}{$userkey}{'studentID'},                      'pid' => $details->{'users'}{$userkey}{'studentID'},
                     'first' => $$details{$num}{'users'}{$userkey}{'firstname'},                      'first' => $details->{'users'}{$userkey}{'firstname'},
                     'middle' => $$details{$num}{'users'}{$userkey}{'middlename'},                      'middle' => $details->{'users'}{$userkey}{'middlename'},
                     'last' => $$details{$num}{'users'}{$userkey}{'lastname'},                      'last' => $details->{'users'}{$userkey}{'lastname'},
                     'gene' => $$details{$num}{'users'}{$userkey}{'generation'},                      'gene' => $details->{'users'}{$userkey}{'generation'},
                     'usec' => $firstsec,                      'usec' => $firstsec,
                     'end' => $$details{$num}{'users'}{$userkey}{'end'},                      'end' => $details->{'users'}{$userkey}{'end'},
                     'start' => $$details{$num}{'users'}{$userkey}{'start'},                      'start' => $details->{'users'}{$userkey}{'start'},
                     'emailaddr' => $$details{$num}{'users'}{$userkey}{'emailaddr'},                      'emailaddr' => $details->{'users'}{$userkey}{'emailaddr'},
                     'cid' => $courseid,                      'cid' => $courseid,
                     'crs' => $crsunum,                      'crs' => $crsunum,
                     'cdom' => $crsudom,                      'cdom' => $crsudom,
                     'context' => 'createcourse',                      'context' => 'createcourse',
                     'linefeed' => $linefeed,                      'linefeed' => $linefeed,
                     'role' => $$details{$num}{'users'}{$userkey}{'roles'}[0],                       'role' => $details->{'users'}{$userkey}{'roles'}[0], 
                    };                     };
                 $outcome = &LONCAPA::Enrollment::create_newuser($userargs,$logmsg,$newusermsg,$enrollcount,$addresult,$longroles,\%courseinfo,$context);                  $outcome = &LONCAPA::Enrollment::create_newuser($userargs,$logmsg,$newusermsg,$enrollcount,$addresult,$longroles,\%courseinfo,$context);
 # now add other roles and other sections.  # now add other roles and other sections.
                 if ($outcome eq 'ok') {                  if ($outcome eq 'ok') {
                     if (($firstrole ne 'st') && (@{$$details{$num}{'users'}{$userkey}{$firstrole}{'usec'}} > 1)) {                      if (($firstrole ne 'st') && (@{$details->{'users'}{$userkey}{$firstrole}{'usec'}} > 1)) {
                         for (my $i=1; $i<@{$$details{$num}{'users'}{$userkey}{$firstrole}{'usec'}}; $i++) {                          for (my $i=1; $i<@{$details->{'users'}{$userkey}{$firstrole}{'usec'}}; $i++) {
                             my $curr_role = $firstrole;                              my $curr_role = $firstrole;
                             my $start = $$details{$num}{'users'}{$userkey}{$curr_role}{'start'};                              my $start = $details->{'users'}{$userkey}{$curr_role}{'start'};
                             my $end = $$details{$num}{'users'}{$userkey}{$curr_role}{'end'};                              my $end = $details->{'users'}{$userkey}{$curr_role}{'end'};
                             my $usec = $$details{$num}{'users'}{$userkey}{$firstrole}{'usec'}[$i];                              my $usec = $details->{'users'}{$userkey}{$firstrole}{'usec'}[$i];
                             $url = '/'.$crsudom.'/'.$crsunum;                              $url = '/'.$crsudom.'/'.$crsunum;
                             if ($usec ne '') {                              if ($usec ne '') {
                                 $url .= '/'.$usec;                                  $url .= '/'.$usec;
Line 574  sub build_course { Line 577  sub build_course {
                             $$output .= &Apache::loncommon::commit_standardrole($userdom,$username,$url,$curr_role,$start,$end,$crsudom,$crsunum,$usec,$context);                              $$output .= &Apache::loncommon::commit_standardrole($userdom,$username,$url,$curr_role,$start,$end,$crsudom,$crsunum,$usec,$context);
                         }                          }
                     }                      }
                     if (@{$$details{$num}{'users'}{$userkey}{'roles'}} > 1) {                      if (@{$details->{'users'}{$userkey}{'roles'}} > 1) {
                         for (my $j=1; $j<@{$$details{$num}{'users'}{$userkey}{'roles'}}; $j++) {                          for (my $j=1; $j<@{$details->{'users'}{$userkey}{'roles'}}; $j++) {
                             my $curr_role = $$details{$num}{'users'}{$userkey}{'roles'}[$j];                              my $curr_role = $details->{'users'}{$userkey}{'roles'}[$j];
                             my $start = $$details{$num}{'users'}{$userkey}{$curr_role}{'start'};                              my $start = $details->{'users'}{$userkey}{$curr_role}{'start'};
                             my $end = $$details{$num}{'users'}{$userkey}{$curr_role}{'end'};                              my $end = $details->{'users'}{$userkey}{$curr_role}{'end'};
                             if ($curr_role eq 'st') {                              if ($curr_role eq 'st') {
                                 my $usec = $$details{$num}{'users'}{$userkey}{$curr_role}{'usec'}[0];                                  my $usec = $details->{'users'}{$userkey}{$curr_role}{'usec'}[0];
                                 $url = '/'.$crsudom.'/'.$crsunum;                                  $url = '/'.$crsudom.'/'.$crsunum;
                                 if ($usec ne '') {                                  if ($usec ne '') {
                                     $url .= '/'.$usec;                                      $url .= '/'.$usec;
                                 }                                  }
                                 $$output .= &Apache::loncommon::commit_studentrole(\$stulogmsg,$userdom,$username,$url,$curr_role,$start,$end,$crsudom,$crsunum,$usec,$context);                                  $$output .= &Apache::loncommon::commit_studentrole(\$stulogmsg,$userdom,$username,$url,$curr_role,$start,$end,$crsudom,$crsunum,$usec,$context);
                             } else {                              } else {
                                 foreach my $usec (@{$$details{$num}{'users'}{$userkey}{$curr_role}{'usec'}}) {                                  foreach my $usec (@{$details->{'users'}{$userkey}{$curr_role}{'usec'}}) {
                                     $url = '/'.$crsudom.'/'.$crsunum;                                      $url = '/'.$crsudom.'/'.$crsunum;
                                     if ($usec ne '') {                                      if ($usec ne '') {
                                         $url .= '/'.$usec;                                          $url .= '/'.$usec;
Line 599  sub build_course { Line 602  sub build_course {
                     }                      }
                 }                  }
             } else {              } else {
                 foreach my $curr_role (@{$$details{$num}{'users'}{$userkey}{'roles'}}) {                  foreach my $curr_role (@{$details->{'users'}{$userkey}{'roles'}}) {
                     my $start = $$details{$num}{'users'}{$userkey}{$curr_role}{'start'};                      my $start = $details->{'users'}{$userkey}{$curr_role}{'start'};
                     my $end = $$details{$num}{'users'}{$userkey}{$curr_role}{'end'};                      my $end = $details->{'users'}{$userkey}{$curr_role}{'end'};
                     if ($curr_role eq 'st') {                      if ($curr_role eq 'st') {
                         my $usec = $$details{$num}{'users'}{$userkey}{$curr_role}{'usec'}[0];                          my $usec = $details->{'users'}{$userkey}{$curr_role}{'usec'}[0];
                         $url = '/'.$crsudom.'/'.$crsunum;                          $url = '/'.$crsudom.'/'.$crsunum;
                         if ($usec ne '') {                          if ($usec ne '') {
                             $url .= '/'.$usec;                              $url .= '/'.$usec;
                         }                          }
                         $$output .= &Apache::loncommon::commit_studentrole(\$stulogmsg,$userdom,$username,$url,$curr_role,$start,$end,$crsudom,$crsunum,$usec,$context);                          $$output .= &Apache::loncommon::commit_studentrole(\$stulogmsg,$userdom,$username,$url,$curr_role,$start,$end,$crsudom,$crsunum,$usec,$context);
                     } else {                      } else {
                         if (@{$$details{$num}{'users'}{$userkey}{$curr_role}{'usec'}} > 0) {                          if (@{$details->{'users'}{$userkey}{$curr_role}{'usec'}} > 0) {
                             foreach my $usec (@{$$details{$num}{'users'}{$userkey}{$curr_role}{'usec'}}) {                              foreach my $usec (@{$details->{'users'}{$userkey}{$curr_role}{'usec'}}) {
                                 $url = '/'.$crsudom.'/'.$crsunum;                                  $url = '/'.$crsudom.'/'.$crsunum;
                                 if ($usec ne '') {                                  if ($usec ne '') {
                                     $url .= '/'.$usec;                                      $url .= '/'.$usec;
Line 630  sub build_course { Line 633  sub build_course {
     }      }
   
 # Information about keys.  # Information about keys.
     if ($$details{$num}{'setkeys'}) {      if ($details->{'setkeys'}) {
         $$keysmsg .=          $$keysmsg .=
  '<a href="/adm/managekeys?cid='.$crsudom.'_'.$crsunum.'">'.&mt('Manage Access Keys').'</a> for '.$$details{$num}{'title'}.$linefeed;   '<a href="/adm/managekeys?cid='.$crsudom.'_'.$crsunum.'">'.&mt('Manage Access Keys').'</a> for '.$details->{'title'}.$linefeed;
     }      }
 # Flush the course logs so reverse user roles immediately updated  # Flush the course logs so reverse user roles immediately updated
     &Apache::lonnet::flushcourselogs();      &Apache::lonnet::flushcourselogs();

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


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