Diff for /loncom/debugging_tools/move_construction_spaces.pl between versions 1.4 and 1.5

version 1.4, 2011/10/27 03:43:53 version 1.5, 2011/10/27 14:01:21
Line 39  use Apache::lonlocal; Line 39  use Apache::lonlocal;
 use File::Copy;  use File::Copy;
 use GDBM_File;  use GDBM_File;
   
   my ($lonusersdir,$londocroot,$londaemons);
   
   BEGIN {
       my $perlvar=&LONCAPA::Configuration::read_conf();
       if (ref($perlvar) eq 'HASH') {
           $lonusersdir = $perlvar->{'lonUsersDir'};
           $londocroot = $perlvar->{'lonDocRoot'};
           $londaemons = $perlvar->{'lonDaemons'};
       }
       undef($perlvar);
   }
   
 my $lang = &Apache::lonlocal::choose_language();  my $lang = &Apache::lonlocal::choose_language();
 &Apache::lonlocal::get_language_handle(undef,$lang);  &Apache::lonlocal::get_language_handle(undef,$lang);
   
Line 48  if ($< != 0) { Line 60  if ($< != 0) {
     exit;      exit;
 }  }
   
 my $perlvar=&LONCAPA::Configuration::read_conf();  if ($lonusersdir eq '') {
 my ($lonuserdir,$londocroot,$londaemons);  
 if (ref($perlvar) eq 'HASH') {  
     $lonuserdir = $perlvar->{'lonUsersDir'};  
     $londocroot = $perlvar->{'lonDocRoot'};  
     $londaemons = $perlvar->{'lonDaemons'};  
 }  
 undef($perlvar);  
   
 if ($lonuserdir eq '') {  
     print &mt('Could not determine location of [_1] directory.',"'lonUsersDir'")."\n".      print &mt('Could not determine location of [_1] directory.',"'lonUsersDir'")."\n".
           &mt('Stopping')."\n";            &mt('Stopping')."\n";
     exit;      exit;
Line 168  if ($action eq '') { Line 171  if ($action eq '') {
 }  }
   
 if ($action eq 'dryrun') {  if ($action eq 'dryrun') {
     print "\n".      print "\n\n".
           &mt('Running in exploratory mode ...')."\n\n".            &mt('Running in exploratory mode ...')."\n\n".
           &mt('Run with argument [_1] to actually move Construction Spaces to [_2], i.e., [_3]',            &mt('Run with argument [_1] to actually move Construction Spaces to [_2], i.e., [_3]',
               "'move'","'$londocroot/priv'","\n\nperl move_construction_spaces.pl move")."\n\n\n".                "'move'","'$londocroot/priv'","\n\nperl move_construction_spaces.pl move")."\n\n\n".
Line 247  if ($action eq 'move') { Line 250  if ($action eq 'move') {
 }  }
   
 my @machinedoms;  my @machinedoms;
 if ($lonuserdir) {  if ($lonusersdir) {
     my ($dir,$output);      my ($dir,$output);
     if (opendir($dir,$lonuserdir)) {      if (opendir($dir,$lonusersdir)) {
         my @contents = (grep(!/^\.{1,2}$/,readdir($dir)));          my @contents = (grep(!/^\.{1,2}$/,readdir($dir)));
         foreach my $item (@contents) {          foreach my $item (@contents) {
             if (-d "$lonuserdir/$item") {              if (-d "$lonusersdir/$item") {
                 if ($item =~ /^$match_domain$/) {                  if ($item =~ /^$match_domain$/) {
                     my $domain = $item;                      my $domain = $item;
                     unless (grep(/^\Q$domain\E$/,@machinedoms)) {                      unless (grep(/^\Q$domain\E$/,@machinedoms)) {
Line 279  if ($lonuserdir) { Line 282  if ($lonuserdir) {
                         }                          }
                     }                      }
                     my %authors=();                      my %authors=();
                     my $fname = "$lonuserdir/$domain/nohist_domainroles.db";                      my $fname = "$lonusersdir/$domain/nohist_domainroles.db";
                     my $dbref;                      my $dbref;
                     if (-e $fname) {                      if (-e $fname) {
                         $dbref=&LONCAPA::locking_hash_tie($fname,&GDBM_READER());                          $dbref=&LONCAPA::locking_hash_tie($fname,&GDBM_READER());
Line 300  if ($lonuserdir) { Line 303  if ($lonuserdir) {
         }          }
         closedir($dir);          closedir($dir);
     } else {      } else {
         $output = &mt('Could not open [_1].',"'$lonuserdir'")."\n";          $output = &mt('Could not open [_1].',"'$lonusersdir'")."\n";
         print $output;          print $output;
         &stop_logging($logfh,$output);          &stop_logging($logfh,$output);
         print &mt('Stopping')."\n";          print &mt('Stopping')."\n";
Line 390  if ($action eq 'undo') { Line 393  if ($action eq 'undo') {
     exit;      exit;
 }  }
   
   my @allskipped;
   my %allmoved;
   
 # Iterate over directories in /home  # Iterate over directories in /home
 if (opendir(my $dir,"/home")) {  if (opendir(my $dir,"/home")) {
     foreach my $item (grep(!/^\.{1,2}$/,readdir($dir))) {      my @possibles = grep(!/^\.{1,2}$/,readdir($dir)); 
       foreach my $item (sort(@possibles)) {
         next if ($item eq 'www');          next if ($item eq 'www');
         if ((-d "/home/$item") && ($item ne '')) {          if ((-d "/home/$item") && ($item ne '')) {
 # Is there a public_html-directory?  # Is there a public_html-directory?
             if (-d "/home/$item/public_html") {              if (-d "/home/$item/public_html") {
                 my $author = $item;                  my $author = $item;
                 my ($domain,$skipped,$output);                  my ($domain,$skipped,$output);
                 if (ref($pubusers{$author}) eq 'ARRAY') {                  if (ref($allauthors{$author}) eq 'ARRAY') {
                     ($domain,$skipped) = &choose_domain($action,$author,$pubusers{$author});                      ($domain,$skipped) = &choose_domain($action,$author,$allauthors{$author});
                 }                  }
                 if (($domain eq '') && (!$skipped)) {                  if (($domain eq '') && (!$skipped)) {
                     if (ref($allauthors{$author}) eq 'ARRAY') {                      if (ref($pubusers{$author}) eq 'ARRAY') {
                         ($domain,$skipped) = &choose_domain($action,$author,$allauthors{$author});                          ($domain,$skipped) = &choose_domain($action,$author,$pubusers{$author});
                       }
                   }
                   if (($domain eq '') && (!$skipped)) {
                       my @foundauthor = ();
                       foreach my $dom (@machinedoms) {
                           my $posspath = &LONCAPA::propath($dom,$author);
                           if (-e $posspath) {
                               my $rolesdbref;
                               my $fname = "$posspath/roles.db";
                               if (-e "$fname") {
                                   $rolesdbref=&LONCAPA::locking_hash_tie($fname,&GDBM_READER());
                                   if (!$rolesdbref) {
                                       print &mt('Unable to tie to [_1].',"'$fname'")."\n";
                                   } elsif (ref($rolesdbref) eq 'HASH') {
                                       foreach my $key (keys(%{$rolesdbref})) {
                                           if ($key eq "/$dom/_au") {
                                               unless(grep(/^\Q$dom\E$/,@foundauthor)) { 
                                                   push(@foundauthor,$dom);
                                               }
                                           }
                                       }
                                       &LONCAPA::locking_hash_untie($rolesdbref);
                                   }
                               }
                           }
                       }
                       if (@foundauthor > 0) {
                           ($domain,$skipped) = &choose_domain($action,$author,\@foundauthor);
                     }                      }
                 }                  }
                 my $source_path="/home/$author/public_html";                  my $source_path="/home/$author/public_html";
                 if ($domain) {                   if ($domain) {
                     my $target_path="$londocroot/priv/$domain/$author";                      my $target_path="$londocroot/priv/$domain/$author";
                     if ($action eq 'move') {                      if ($action eq 'move') {
                         if (move($source_path,$target_path)) {                          if (move($source_path,$target_path)) {
                             chown($uid,$gid,$target_path);                              my (undef,undef,$userid,$groupid) = getpwnam($author);
                             chmod($target_path,0750);                              if ($userid eq '' && $groupid eq '' && $author ne '') {
                                   chown($uid,$gid,$target_path);
                               }
                             $output = &mt('Moved [_1] to [_2].',                              $output = &mt('Moved [_1] to [_2].',
                                           "'$source_path'","'$target_path'")."\n";                                            "'$source_path'","'$target_path'")."\n";
                               push(@{$allmoved{$domain}},$author); 
                             my (undef,undef,$userid,$groupid) = getpwnam($author);                              my (undef,undef,$userid,$groupid) = getpwnam($author);
                             if ($userid eq '' && $groupid eq '' && $author ne '') {                              if ($userid eq '' && $groupid eq '' && $author ne '') {
                                 &check_for_restore_files($londaemons,$author,$domain);                                  &check_for_restore_files($londaemons,$author,$domain);
Line 447  if (opendir(my $dir,"/home")) { Line 485  if (opendir(my $dir,"/home")) {
                         print $output;                          print $output;
                         print $logfh $output;                          print $logfh $output;
                     } elsif ($action eq 'dryrun') {                      } elsif ($action eq 'dryrun') {
                           push(@{$allmoved{$domain}},$author);
                         print &mt('Would move [_1] to [_2].',"'$source_path'","'$target_path'")."\n";                          print &mt('Would move [_1] to [_2].',"'$source_path'","'$target_path'")."\n";
                     }                      }
                 } elsif ($skipped) {                  } elsif ($skipped) {
                       push(@allskipped,$author); 
                     if ($action ne 'dryrun') {                      if ($action ne 'dryrun') {
                         print $logfh &mt('Skipping this user: [_1].',"'$author'")."\n";                           my $output = &mt('Skipping this user: [_1].',"'$author'")."\n";
                           print $logfh $output;
                     }                      }
                 } else {                  } else {
                     print '*** '.&mt('WARNING: [_1] has no domain.',"'$author'")."\n".                      print '*** '.&mt('WARNING: [_1] has no domain.',"'$author'")."\n".
                           &mt('Enter [_1]: do nothing, continue.','1')."\n".                            &mt('Enter [_1]: do nothing, continue.','1')."\n".
                           &mt('Enter [_2]: stop.','2')."\n".                            &mt('Enter [_1]: stop.','2')."\n".
                           &mt('or enter domain for user to be placed into')."\n".                            &mt('or enter domain for user to be placed into')."\n".
                           &mt('Your input: ');                            &mt('Your input: ');
                     my $choice=<STDIN>;                      my $choice=<STDIN>;
                     chomp($choice);                      chomp($choice);
                     if ($choice ==1) {                      $choice =~ s/^\s+//;
                         print $logfh &mt('Skipping -- no domain for user: [_1].',"'$author'")."\n";                      $choice =~ s/\s+$//;
                       if ($choice == 1) {
                           my $output = &mt('Skipping -- no domain for user: [_1].',"'$author'")."\n";
                           print $output;
                           if ($action ne 'dryrun') {
                               print $logfh $output;
                           }
                           push(@allskipped,$author);
                           next;
                     }                      }
                     if ($choice == 2) {                      if ($choice == 2) {
                         print &mt('Stopped.')."\n";                          print &mt('Stopped.')."\n";
Line 472  if (opendir(my $dir,"/home")) { Line 521  if (opendir(my $dir,"/home")) {
                             &stop_logging($logfh,$output);                               &stop_logging($logfh,$output); 
                         }                          }
                         exit;                          exit;
                     }                       } elsif ($choice =~ /^$match_domain$/) {
                     if ($choice =~ /^$match_domain$/) {                          print &mt('You entered:')." $choice\n".
                                 &mt('Is this ok? ~[Y/n~] ');
                           if (!&get_user_selection(1)) {
                               print &mt('Try again ...')."\n".
                                     &mt('Enter [_1]: do nothing, continue.','1')."\n".
                                     &mt('Enter [_1]: stop.','2')."\n".
                                     &mt('or enter domain for user to be placed into')."\n".
                                     &mt('Your input: ');
                               $choice=<STDIN>;
                               chomp($choice);
                               $choice =~ s/^\s+//;
                               $choice =~ s/\s+$//;
                               if ($choice == 1) {
                                   my $output = &mt('Skipping -- no domain for user: [_1].',"'$author'")."\n";
                                   print $output;
                                   if ($action ne 'dryrun') {
                                       print $logfh $output;
                                   }
                                   push(@allskipped,$author);
                                   next;
                               }
                               if ($choice == 2) {
                                   print &mt('Stopped.')."\n";
                                   if ($action ne 'dryrun') {
                                       my $output = &mt('Stopped by user because of author without domain: [_1].',
                                                        "'$author'")/"\n";
                                       &stop_logging($logfh,$output);
                                   }
                                   exit;
                               } elsif ($choice !~ /^$match_domain$/) {
                                   print &mt('Invalid domain entered:')." $choice\n";
                                   my $output = &mt('Skipping -- no domain for user: [_1].',"'$author'")."\n";
                                   print $output;
                                   if ($action ne 'dryrun') {
                                       print $logfh $output;
                                   }
                                   push(@allskipped,$author);
                                   next;
                               }
                           }
                         my $dompath="$londocroot/priv/$choice";                          my $dompath="$londocroot/priv/$choice";
                         my $newpath="$londocroot/priv/$choice/$author";                          my $newpath="$londocroot/priv/$choice/$author";
                         unless (-e $dompath) {                          unless (-e $dompath) {
                             print '*** '.&mt('WARNING: [_1] does not yet exist.',"'$dompath'")."\n";                              if ($action eq 'move') {
                                   print '*** '.&mt('WARNING: [_1] does not yet exist.',"'$dompath'")."\n";
                               }
                         }                          }
                         if ($action eq 'move') {                          if ($action eq 'move') {
                             unless (-e $dompath) {                              unless (-e $dompath) {
Line 509  if (opendir(my $dir,"/home")) { Line 599  if (opendir(my $dir,"/home")) {
                            }                             }
                            print &mt('Would make [_1].',"'$newpath'")."\n";                             print &mt('Would make [_1].',"'$newpath'")."\n";
                         }                          }
                       } else {
                           print &mt('Invalid domain:')." $choice\n";
                           if ($action eq 'move') {
                               print $logfh &mt('Skipping -- no domain for user: [_1].',"'$author'")."\n";
                           }
                           push(@allskipped,$author);
                           next;
                     }                      }
                 }                  }
             }              }
         }          }
     }      }
 }  }
   
   my ($moveinfo,$skipcount);
   if (keys(%allmoved) == 0) {
       $moveinfo = &mt('None')."\n";
   } else {
       foreach my $dom (sort(keys(%allmoved))) {
           if (ref($allmoved{$dom}) eq 'ARRAY') {
               $moveinfo .= "\n      ".&mt('Domain: [_1], number of authors: [_2]',
                                           "'$dom'",scalar(@{$allmoved{$dom}}));
           }
       }
   }
   
   $skipcount = scalar(@allskipped);
   
   print "\n";
 if ($action ne 'dryrun') {  if ($action ne 'dryrun') {
       my $output = &mt('You skipped: [_1].',$skipcount)."\n".
                    &mt('Moved ... [_1]',$moveinfo);
       print $output;
       print $logfh $output;
     &stop_logging($logfh);      &stop_logging($logfh);
   } else {
       print &mt('You would have skipped: [_1].',$skipcount)."\n".
             &mt('You would have moved ... [_1]',$moveinfo);
 }  }
 print "\n".&mt('Done.')."\n";  print "\n\n".&mt('Done.')."\n";
   
 sub choose_domain {   sub choose_domain { 
     my ($action,$author,$domarrayref) = @_;      my ($action,$author,$domarrayref) = @_;

Removed from v.1.4  
changed lines
  Added in v.1.5


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