/ /home/httpd/lonUsers use strict; use File::Find; use lib '/home/httpd/lib/perl/'; use LONCAPA::Configuration; use LONCAPA; use GDBM_File; use Storable; use Apache::lonnet; $|=1; sub update_value { my ($value) = @_; if ($value =~ /@/ && $value !~ /:/) { $value =~ tr/@/:/; } return $value; } my $updated; sub process_gradingqueue_file { return if ($_!~m/(gradingqueue|reviewqueue|slots|slot_reservations)\.db$/); my $type='queue'; if ($1 eq 'slots') { $type = 'slots'; } elsif ($1 eq 'slot_reservations') { $type = 'reservation'; } my $count = length("$updated"); $updated++; print("\b"x(14+$count)); print("Updated $updated files"); my $prefix = $_; $prefix =~s/\.db$//; my $db = &LONCAPA::_locking_hash_tie($prefix,'nohist_',&GDBM_WRCREAT()); if ($type eq 'queue') { foreach my $key (keys(%{$db})) { my $real_key = &unescape($key); my (@elements) = split("\0",$real_key); if (exists($elements[2])) { $elements[2] = &update_value($elements[2]); } $real_key = join("\0",@elements); my $new_key = &escape($real_key); if ($new_key ne $key) { $db->{$new_key} = $db->{$key}; delete($db->{$key}); } if ($new_key =~ /locked$/) { my $value = $db->{$new_key}; my $new_value = &unescape($value); $new_value = &update_value($new_value); $db->{$new_key} = &escape($new_value); } } } elsif ($type eq 'slots') { foreach my $key (keys(%{$db})) { my $value = $db->{$key}; $value = &Apache::lonnet::thaw_unescape($value); if (exists($value->{'proctor'})) { $value->{'proctor'} = &update_value($value->{'proctor'}); } if (exists($value->{'allowedusers'})) { $value->{'allowedusers'} = &update_value($value->{'allowedusers'}); } $db->{$key} = &Apache::lonnet::freeze_escape($value); } } elsif ($type eq 'reservation') { foreach my $key (keys(%{$db})) { my $value = $db->{$key}; $value = &Apache::lonnet::thaw_unescape($value); if (exists($value->{'name'})) { $value->{'name'} = &update_value($value->{'name'}); } $db->{$key} = &Apache::lonnet::freeze_escape($value); } } else { print("$type unsupported\n"); } &untie_user_hash($db); } sub main { print("Updating grading queue and slot definitions\n"); my $perlvar=LONCAPA::Configuration::read_conf('loncapa.conf'); find( { no_chdir => 1, wanted => \&process_gradingqueue_file, }, '/home/www/lonUsers/'); print("\n"); } &main();