Diff for /loncom/interface/domainprefs.pm between versions 1.152 and 1.155

version 1.152, 2011/08/10 14:54:42 version 1.155, 2011/09/14 02:59:33
Line 171  use Locale::Language; Line 171  use Locale::Language;
 use DateTime::TimeZone;  use DateTime::TimeZone;
 use DateTime::Locale;  use DateTime::Locale;
   
   my $registered_cleanup;
   my $modified_urls;
   
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
     if ($r->header_only) {      if ($r->header_only) {
Line 190  sub handler { Line 193  sub handler {
         "/adm/domainprefs:mau:0:0:Cannot modify domain settings";          "/adm/domainprefs:mau:0:0:Cannot modify domain settings";
         return HTTP_NOT_ACCEPTABLE;          return HTTP_NOT_ACCEPTABLE;
     }      }
   
       $registered_cleanup=0;
       @{$modified_urls}=();
   
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['phase','actions']);                                              ['phase','actions']);
Line 399  sub handler { Line 406  sub handler {
                 &Apache::loncommon::sorted_inst_types($dom);                  &Apache::loncommon::sorted_inst_types($dom);
             $js = &lonbalance_targets_js($dom,$types,\%servers).              $js = &lonbalance_targets_js($dom,$types,\%servers).
                   &new_spares_js().                    &new_spares_js().
                   &common_domprefs_js();                    &common_domprefs_js().
                     &Apache::loncommon::javascript_array_indexof();
         }          }
         &Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,$js);          &Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,$js);
     } else {      } else {
Line 2762  sub print_loadbalancing { Line 2770  sub print_loadbalancing {
     if (ref($types) eq 'ARRAY') {      if (ref($types) eq 'ARRAY') {
         $rownum += scalar(@{$types});          $rownum += scalar(@{$types});
     }      }
     my $css_class = 'class="LC_odd_row"';      my $css_class = ' class="LC_odd_row"';
     my $targets_div_style = 'display: none';      my $targets_div_style = 'display: none';
     my $disabled_div_style = 'display: block';      my $disabled_div_style = 'display: block';
     my $homedom_div_style = 'display: none';      my $homedom_div_style = 'display: none';
Line 2835  sub print_loadbalancing { Line 2843  sub print_loadbalancing {
     $datatable .= '</div></td></tr>'.      $datatable .= '</div></td></tr>'.
                   &loadbalancing_rules($dom,$intdom,$currrules,$othertitle,                    &loadbalancing_rules($dom,$intdom,$currrules,$othertitle,
                                        $usertypes,$types,\%servers,$currbalancer,                                         $usertypes,$types,\%servers,$currbalancer,
                                        $targets_div_style,$homedom_div_style);                                         $targets_div_style,$homedom_div_style,$css_class);
     $$rowtotal += $rownum;      $$rowtotal += $rownum;
     return $datatable;      return $datatable;
 }  }
   
 sub loadbalancing_rules {  sub loadbalancing_rules {
     my ($dom,$intdom,$currrules,$othertitle,$usertypes,$types,$servers,      my ($dom,$intdom,$currrules,$othertitle,$usertypes,$types,$servers,
         $currbalancer,$targets_div_style,$homedom_div_style) = @_;          $currbalancer,$targets_div_style,$homedom_div_style,$css_class) = @_;
     my $output;      my $output;
     my ($alltypes,$othertypes,$titles) =       my ($alltypes,$othertypes,$titles) = 
         &loadbalancing_titles($dom,$intdom,$usertypes,$types);          &loadbalancing_titles($dom,$intdom,$usertypes,$types);
Line 2859  sub loadbalancing_rules { Line 2867  sub loadbalancing_rules {
             }              }
             $output .= &loadbalance_rule_row($type,$titles->{$type},$current,              $output .= &loadbalance_rule_row($type,$titles->{$type},$current,
                                              $servers,$currbalancer,$dom,                                               $servers,$currbalancer,$dom,
                                              $targets_div_style,$homedom_div_style);                                               $targets_div_style,$homedom_div_style,$css_class);
         }          }
     }      }
     return $output;      return $output;
Line 2897  sub loadbalancing_titles { Line 2905  sub loadbalancing_titles {
   
 sub loadbalance_rule_row {  sub loadbalance_rule_row {
     my ($type,$title,$current,$servers,$currbalancer,$dom,$targets_div_style,      my ($type,$title,$current,$servers,$currbalancer,$dom,$targets_div_style,
         $homedom_div_style) = @_;          $homedom_div_style,$css_class) = @_;
     my @rulenames = ('default','homeserver');      my @rulenames = ('default','homeserver');
     my %ruletitles = &offloadtype_text();      my %ruletitles = &offloadtype_text();
     if ($type eq '_LC_external') {      if ($type eq '_LC_external') {
Line 2910  sub loadbalance_rule_row { Line 2918  sub loadbalance_rule_row {
         $style = $homedom_div_style;          $style = $homedom_div_style;
     }      }
     my $output =       my $output = 
         '<tr><td valign="top"><div id="balanceruletitle_'.$type.'" style="'.$style.'">'.$title.'</div></td>'."\n".          '<tr'.$css_class.'><td valign="top"><div id="balanceruletitle_'.$type.'" style="'.$style.'">'.$title.'</div></td>'."\n".
         '<td><div id="balancerule_'.$type.'" style="'.$style.'">'."\n";          '<td><div id="balancerule_'.$type.'" style="'.$style.'">'."\n";
     for (my $i=0; $i<@rulenames; $i++) {      for (my $i=0; $i<@rulenames; $i++) {
         my $rule = $rulenames[$i];          my $rule = $rulenames[$i];
Line 5004  $env{'user.name'}.':'.$env{'user.domain' Line 5012  $env{'user.name'}.':'.$env{'user.domain'
             if (copy($source,$copyfile)) {              if (copy($source,$copyfile)) {
                 print $logfile "\nCopied original source to ".$copyfile."\n";                  print $logfile "\nCopied original source to ".$copyfile."\n";
                 $output = 'ok';                  $output = 'ok';
                 &write_metadata($dom,$confname,$formname,$targetdir,$file,$logfile);  
                 $logourl = '/res/'.$dom.'/'.$confname.'/'.$fname;                  $logourl = '/res/'.$dom.'/'.$confname.'/'.$fname;
                   push(@{$modified_urls},[$copyfile,$source]);
                   my $metaoutput = 
                       &write_metadata($dom,$confname,$formname,$targetdir,$file,$logfile);
                   unless ($registered_cleanup) {
                       my $handlers = $r->get_handlers('PerlCleanupHandler');
                       $r->set_handlers('PerlCleanupHandler' => [\&notifysubscribed,@{$handlers}]);
                       $registered_cleanup=1;
                   }
             } else {              } else {
                 print $logfile "\nUnable to write ".$copyfile.':'.$!."\n";                  print $logfile "\nUnable to write ".$copyfile.':'.$!."\n";
                 $output = &mt('Failed to copy file to RES space').", $!";                  $output = &mt('Failed to copy file to RES space').", $!";
Line 5023  $env{'user.name'}.':'.$env{'user.domain' Line 5038  $env{'user.name'}.':'.$env{'user.domain'
                             my $copyfile=$targetdir.'/tn-'.$file;                              my $copyfile=$targetdir.'/tn-'.$file;
                             if (copy($outfile,$copyfile)) {                              if (copy($outfile,$copyfile)) {
                                 print $logfile "\nCopied source to ".$copyfile."\n";                                  print $logfile "\nCopied source to ".$copyfile."\n";
                                 &write_metadata($dom,$confname,$formname,                                  my $thumb_metaoutput = 
                                                 $targetdir,'tn-'.$file,$logfile);                                      &write_metadata($dom,$confname,$formname,
                                                       $targetdir,'tn-'.$file,$logfile);
                                   push(@{$modified_urls},[$copyfile,$outfile]);
                                   unless ($registered_cleanup) {
                                       my $handlers = $r->get_handlers('PerlCleanupHandler');
                                       $r->set_handlers('PerlCleanupHandler' => [\&notifysubscribed,@{$handlers}]);
                                       $registered_cleanup=1;
                                   }
                             } else {                              } else {
                                 print $logfile "\nUnable to write ".$copyfile.                                  print $logfile "\nUnable to write ".$copyfile.
                                                ':'.$!."\n";                                                 ':'.$!."\n";
Line 5089  sub write_metadata { Line 5111  sub write_metadata {
     {      {
         print $logfile "\nWrite metadata file for ".$targetdir.'/'.$file;          print $logfile "\nWrite metadata file for ".$targetdir.'/'.$file;
         my $mfh;          my $mfh;
         unless (open($mfh,'>'.$targetdir.'/'.$file.'.meta')) {          if (open($mfh,'>'.$targetdir.'/'.$file.'.meta')) {
               foreach (sort keys %metadatafields) {
                   unless ($_=~/\./) {
                       my $unikey=$_;
                       $unikey=~/^([A-Za-z]+)/;
                       my $tag=$1;
                       $tag=~tr/A-Z/a-z/;
                       print $mfh "\n\<$tag";
                       foreach (split(/\,/,$metadatakeys{$unikey})) {
                           my $value=$metadatafields{$unikey.'.'.$_};
                           $value=~s/\"/\'\'/g;
                           print $mfh ' '.$_.'="'.$value.'"';
                       }
                       print $mfh '>'.
                           &HTML::Entities::encode($metadatafields{$unikey},'<>&"')
                               .'</'.$tag.'>';
                   }
               }
               $output = 'ok';
               print $logfile "\nWrote metadata";
               close($mfh);
           } else {
               print $logfile "\nFailed to open metadata file";
             $output = &mt('Could not write metadata');              $output = &mt('Could not write metadata');
         }          }
         foreach (sort keys %metadatafields) {  
             unless ($_=~/\./) {  
                 my $unikey=$_;  
                 $unikey=~/^([A-Za-z]+)/;  
                 my $tag=$1;  
                 $tag=~tr/A-Z/a-z/;  
                 print $mfh "\n\<$tag";  
                 foreach (split(/\,/,$metadatakeys{$unikey})) {  
                     my $value=$metadatafields{$unikey.'.'.$_};  
                     $value=~s/\"/\'\'/g;  
                     print $mfh ' '.$_.'="'.$value.'"';  
                 }  
                 print $mfh '>'.  
                     &HTML::Entities::encode($metadatafields{$unikey},'<>&"')  
                         .'</'.$tag.'>';  
             }  
         }  
         $output = 'ok';  
         print $logfile "\nWrote metadata";  
         close($mfh);  
     }      }
       return $output;
   }
   
   sub notifysubscribed {
       foreach my $targetsource (@{$modified_urls}){
           next unless (ref($targetsource) eq 'ARRAY');
           my ($target,$source)=@{$targetsource};
           if ($source ne '') {
               if (open(my $logfh,'>>'.$source.'.log')) {
                   print $logfh "\nCleanup phase: Notifications\n";
                   my @subscribed=&subscribed_hosts($target);
                   foreach my $subhost (@subscribed) {
                       print $logfh "\nNotifying host ".$subhost.':';
                       my $reply=&Apache::lonnet::critical('update:'.$target,$subhost);
                       print $logfh $reply;
                   }
                   my @subscribedmeta=&subscribed_hosts("$target.meta");
                   foreach my $subhost (@subscribedmeta) {
                       print $logfh "\nNotifying host for metadata only ".$subhost.':';
                       my $reply=&Apache::lonnet::critical('update:'.$target.'.meta',
                                                           $subhost);
                       print $logfh $reply;
                   }
                   print $logfh "\n============ Done ============\n";
                   close(logfh);
               }
           }
       }
       return OK;
   }
   
   sub subscribed_hosts {
       my ($target) = @_;
       my @subscribed;
       if (open(my $fh,"<$target.subscription")) {
           while (my $subline=<$fh>) {
               if ($subline =~ /^($match_lonid):/) {
                   my $host = $1;
                   if ($host ne $Apache::lonnet::perlvar{'lonHostID'}) {
                       unless (grep(/^\Q$host\E$/,@subscribed)) {
                           push(@subscribed,$host);
                       }
                   }
               }
           }
       }
       return @subscribed;
 }  }
   
 sub check_switchserver {  sub check_switchserver {
Line 7861  sub active_dc_picker { Line 7932  sub active_dc_picker {
 sub usersession_titles {  sub usersession_titles {
     return &Apache::lonlocal::texthash(      return &Apache::lonlocal::texthash(
                hosted => 'Hosting of sessions for users from other domains on servers in this domain',                 hosted => 'Hosting of sessions for users from other domains on servers in this domain',
   
                remote => 'Hosting of sessions for users in this domain on servers in other domains',                 remote => 'Hosting of sessions for users in this domain on servers in other domains',
                spares => 'Servers offloaded to, when busy',                 spares => 'Servers offloaded to, when busy',
                version => 'LON-CAPA version requirement',                 version => 'LON-CAPA version requirement',
                excludedomain => 'Allow all, but exclude specific domains',                 excludedomain => 'Allow all, but exclude specific domains',
                includedomain => 'Deny all, but include specific domains',                 includedomain => 'Deny all, but include specific domains',
                primary => 'Primary (checked first)',                 primary => 'Primary (checked first)',
                default => 'Default',                  default => 'Default',
            );             );
 }  }
   

Removed from v.1.152  
changed lines
  Added in v.1.155


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