Diff for /loncom/interface/domainprefs.pm between versions 1.51 and 1.56

version 1.51, 2008/05/15 01:56:44 version 1.56, 2008/06/24 15:01:23
Line 96  sub handler { Line 96  sub handler {
                                   col2 => '',}],                                    col2 => '',}],
                     },                      },
         'defaults' =>           'defaults' => 
                     { text => 'Default authentication/language',                      { text => 'Default authentication/language/timezone',
                       help => '',                        help => '',
                       header => [{col1 => 'Setting',                        header => [{col1 => 'Setting',
                                   col2 => 'Value'}],                                    col2 => 'Value'}],
Line 300  sub handler { Line 300  sub handler {
         $r->print('<h3>'.&mt('Functionality to display/modify').'</h3>');          $r->print('<h3>'.&mt('Functionality to display/modify').'</h3>');
         $r->print('<script type="text/javascript">'."\n".          $r->print('<script type="text/javascript">'."\n".
               &Apache::loncommon::check_uncheck_jscript()."\n".                &Apache::loncommon::check_uncheck_jscript()."\n".
               '</script>'."\n".'<p><input type="button" value="check all" '.                '</script>'."\n".'<p><input type="button" value="'.&mt('check all').'" '.
               'onclick="javascript:checkAll(document.pickactions.actions)"'.                'onclick="javascript:checkAll(document.pickactions.actions)"'.
               ' />&nbsp;&nbsp;'.                ' />&nbsp;&nbsp;'.
               '<input type="button" value="uncheck all" '.                '<input type="button" value="'.&mt('uncheck all').'" '.
               'onclick="javascript:uncheckAll(document.pickactions.actions)"'.                'onclick="javascript:uncheckAll(document.pickactions.actions)"'.
               ' /></p><div class="LC_left_float">');                ' /></p><div class="LC_left_float">');
         my ($numitems,$midpoint,$seconddiv,$count);           my ($numitems,$midpoint,$seconddiv,$count); 
Line 314  sub handler { Line 314  sub handler {
         }          }
         $count = 0;          $count = 0;
         foreach my $item (@prefs_order) {          foreach my $item (@prefs_order) {
             $r->print('<h4><label><input type="checkbox" name="actions" value="'.$item.'" />&nbsp;'.$prefs{$item}->{'text'}.'</label></h4>');              $r->print('<h4><label><input type="checkbox" name="actions" value="'.$item.'" />&nbsp;'.&mt($prefs{$item}->{'text'}).'</label></h4>');
             $count ++;              $count ++;
             if ((!$seconddiv) && ($count >= $midpoint)) {              if ((!$seconddiv) && ($count >= $midpoint)) {
                 $r->print('</div>'."\n".'<div class="LC_left_float">'."\n");                  $r->print('</div>'."\n".'<div class="LC_left_float">'."\n");
Line 1782  sub print_usermodification { Line 1782  sub print_usermodification {
   
 sub print_defaults {  sub print_defaults {
     my ($dom,$rowtotal) = @_;      my ($dom,$rowtotal) = @_;
     my @items = ('auth_def','auth_arg_def','lang_def');      my @items = ('auth_def','auth_arg_def','lang_def','timezone_def');
     my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);      my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
     my $titles = &defaults_titles();      my $titles = &defaults_titles();
     my $rownum = 0;      my $rownum = 0;
Line 1814  sub print_defaults { Line 1814  sub print_defaults {
                               '" value="'.$auth.'"'.$checked.'/>'.                                '" value="'.$auth.'"'.$checked.'/>'.
                               $authnames{$shortauth{$auth}}.'</label>&nbsp;&nbsp;';                                $authnames{$shortauth{$auth}}.'</label>&nbsp;&nbsp;';
             }              }
           } elsif ($item eq 'timezone_def') {
               my $includeempty = 1;
               $datatable .= &Apache::loncommon::select_timezone($item,$domdefaults{$item},undef,$includeempty);
         } else {          } else {
             $datatable .= '<input type="text" name="'.$item.'" value="'.              $datatable .= '<input type="text" name="'.$item.'" value="'.
                           $domdefaults{$item}.'" />';                            $domdefaults{$item}.'" />';
Line 1830  sub defaults_titles { Line 1833  sub defaults_titles {
                    'auth_def'      => 'Default authentication type',                     'auth_def'      => 'Default authentication type',
                    'auth_arg_def'  => 'Default authentication argument',                     'auth_arg_def'  => 'Default authentication argument',
                    'lang_def'      => 'Default language',                     'lang_def'      => 'Default language',
                      'timezone_def'  => 'Default timezone',
                  );                   );
     return (\%titles);      return (\%titles);
 }  }
Line 1962  sub print_coursecategories { Line 1966  sub print_coursecategories {
     my $itemcount = 1;      my $itemcount = 1;
     if (ref($settings) eq 'HASH') {      if (ref($settings) eq 'HASH') {
         my (@cats,@trails,%allitems,%idx,@jsarray);          my (@cats,@trails,%allitems,%idx,@jsarray);
         &extract_categories($settings,\@cats,\@trails,\%allitems,\%idx,\@jsarray);          &Apache::loncommon::extract_categories($settings,\@cats,\@trails,
                                                  \%allitems,\%idx,\@jsarray);
         my $maxdepth = scalar(@cats);          my $maxdepth = scalar(@cats);
         my $colattrib = '';          my $colattrib = '';
         if ($maxdepth > 2) {          if ($maxdepth > 2) {
Line 2067  sub coursecategories_javascript { Line 2072  sub coursecategories_javascript {
     my ($output,$jstext);      my ($output,$jstext);
     if (ref($settings) eq 'HASH') {      if (ref($settings) eq 'HASH') {
         my (@cats,@jsarray,%idx);          my (@cats,@jsarray,%idx);
         &gather_categories($settings,\@cats,\%idx,\@jsarray);          &Apache::loncommon::gather_categories($settings,\@cats,\%idx,\@jsarray);
         if (@jsarray > 0) {          if (@jsarray > 0) {
             $jstext = '    var categories = Array('.scalar(@jsarray).');'."\n";              $jstext = '    var categories = Array('.scalar(@jsarray).');'."\n";
             for (my $i=0; $i<@jsarray; $i++) {              for (my $i=0; $i<@jsarray; $i++) {
Line 2164  sub initialize_categories { Line 2169  sub initialize_categories {
     $css_class = $itemcount%2?' class="LC_odd_row"':'';      $css_class = $itemcount%2?' class="LC_odd_row"':'';
     $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','addcategory_pos','0'".');"';      $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','addcategory_pos','0'".');"';
     $datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">'      $datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">'
                   .'<select name="addcategory_pos"'.$chgstr/'><option value="0">1</option>'                    .'<select name="addcategory_pos"'.$chgstr.'><option value="0">1</option>'
                   .'<option value="1" selected="selected">2</option></select>&nbsp;'                    .'<option value="1" selected="selected">2</option></select>&nbsp;'
                   .&mt('Add category').'</td><td>'.&mt('Name:')                    .&mt('Add category').'</td><td>'.&mt('Name:')
                   .'&nbsp;<input type="text" size="20" name="addcategory_name" value="" /></td></tr>';                    .'&nbsp;<input type="text" size="20" name="addcategory_name" value="" /></td></tr>';
Line 2469  sub modify_login { Line 2474  sub modify_login {
                     'adminmail'     => 'off',                      'adminmail'     => 'off',
                     'newuser'       => 'off',                      'newuser'       => 'off',
         );          );
         foreach my $item (@toggles) {          if (ref($domconfig{'login'}) eq 'HASH') {
             if ($defaultchecked{$item} eq 'on') {               foreach my $item (@toggles) {
                 if (($domconfig{'login'}{$item} eq '0') &&                  if ($defaultchecked{$item} eq 'on') { 
                     ($env{'form.'.$item} eq '1')) {                      if (($domconfig{'login'}{$item} eq '0') &&
                     $changes{$item} = 1;                          ($env{'form.'.$item} eq '1')) {
                 } elsif (($domconfig{'login'}{$item} eq '' ||                          $changes{$item} = 1;
                           $domconfig{'login'}{$item} eq '1') &&                      } elsif (($domconfig{'login'}{$item} eq '' ||
                          ($env{'form.'.$item} eq '0')) {                                $domconfig{'login'}{$item} eq '1') &&
                     $changes{$item} = 1;                               ($env{'form.'.$item} eq '0')) {
                 }                          $changes{$item} = 1;
             } elsif ($defaultchecked{$item} eq 'off') {                      }
                 if (($domconfig{'login'}{$item} eq '1') &&                  } elsif ($defaultchecked{$item} eq 'off') {
                     ($env{'form.'.$item} eq '0')) {                      if (($domconfig{'login'}{$item} eq '1') &&
                     $changes{$item} = 1;                          ($env{'form.'.$item} eq '0')) {
                 } elsif (($domconfig{'login'}{$item} eq '' ||                          $changes{$item} = 1;
                           $domconfig{'login'}{$item} eq '0') &&                      } elsif (($domconfig{'login'}{$item} eq '' ||
                          ($env{'form.'.$item} eq '1')) {                                $domconfig{'login'}{$item} eq '0') &&
                     $changes{$item} = 1;                               ($env{'form.'.$item} eq '1')) {
                           $changes{$item} = 1;
                       }
                 }                  }
             }              }
         }              if (($domconfig{'login'}{'loginheader'} eq 'text') && 
         if (($domconfig{'login'}{'loginheader'} eq 'text') &&                   ($env{'form.loginheader'} eq 'image')) {
             ($env{'form.loginheader'} eq 'image')) {                  $changes{'loginheader'} = 1;
             $changes{'loginheader'} = 1;              } elsif (($domconfig{'login'}{'loginheader'} eq '' ||
         } elsif (($domconfig{'login'}{'loginheader'} eq '' ||                        $domconfig{'login'}{'loginheader'} eq 'image') &&
                   $domconfig{'login'}{'loginheader'} eq 'image') &&                       ($env{'form.loginheader'} eq 'text')) {
                  ($env{'form.loginheader'} eq 'text')) {                  $changes{'loginheader'} = 1;
             $changes{'loginheader'} = 1;              }
         }          }
         if (keys(%changes) > 0 || $colchgtext) {          if (keys(%changes) > 0 || $colchgtext) {
             &Apache::loncommon::devalidate_domconfig_cache($dom);              &Apache::loncommon::devalidate_domconfig_cache($dom);
Line 2529  sub color_font_choices { Line 2536  sub color_font_choices {
             img => "Header",              img => "Header",
             bgs => "Background colors",              bgs => "Background colors",
             links => "Link colors",              links => "Link colors",
               images => "Images",
             font => "Font color",              font => "Font color",
             pgbg => "Page",              pgbg => "Page",
             tabbg => "Header",              tabbg => "Header",
Line 2544  sub modify_rolecolors { Line 2552  sub modify_rolecolors {
     my ($r,$dom,$confname,$roles,%domconfig) = @_;      my ($r,$dom,$confname,$roles,%domconfig) = @_;
     my ($resulttext,%rolehash);      my ($resulttext,%rolehash);
     $rolehash{'rolecolors'} = {};      $rolehash{'rolecolors'} = {};
       if (ref($domconfig{'rolecolors'}) ne 'HASH') {
           if ($domconfig{'rolecolors'} eq '') {
               $domconfig{'rolecolors'} = {};
           }
       }
     my ($errors,%changes) = &modify_colors($r,$dom,$confname,$roles,      my ($errors,%changes) = &modify_colors($r,$dom,$confname,$roles,
                          $domconfig{'rolecolors'},$rolehash{'rolecolors'});                           $domconfig{'rolecolors'},$rolehash{'rolecolors'});
     my $putresult = &Apache::lonnet::put_dom('configuration',\%rolehash,      my $putresult = &Apache::lonnet::put_dom('configuration',\%rolehash,
Line 3139  sub modify_quotas { Line 3152  sub modify_quotas {
     }      }
     foreach my $key (keys(%formhash)) {      foreach my $key (keys(%formhash)) {
         if ($formhash{$key} ne '') {          if ($formhash{$key} ne '') {
             if (!exists($domconfig{'quotas'}{$key})) {              if (ref($domconfig{'quotas'}) eq 'HASH') {
                   if (!exists($domconfig{'quotas'}{$key})) {
                       $changes{$key} = 1;
                   }
               } else {
                 $changes{$key} = 1;                  $changes{$key} = 1;
             }              }
         }          }
Line 4066  sub modify_defaults { Line 4083  sub modify_defaults {
     my ($dom,$r) = @_;      my ($dom,$r) = @_;
     my ($resulttext,$mailmsgtxt,%newvalues,%changes,@errors);      my ($resulttext,$mailmsgtxt,%newvalues,%changes,@errors);
     my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);      my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
     my @items = ('auth_def','auth_arg_def','lang_def');      my @items = ('auth_def','auth_arg_def','lang_def','timezone_def');
     my @authtypes = ('internal','krb4','krb5','localauth');      my @authtypes = ('internal','krb4','krb5','localauth');
     foreach my $item (@items) {      foreach my $item (@items) {
         $newvalues{$item} = $env{'form.'.$item};          $newvalues{$item} = $env{'form.'.$item};
Line 4087  sub modify_defaults { Line 4104  sub modify_defaults {
                     push(@errors,$item);                      push(@errors,$item);
                 }                  }
             }              }
           } elsif ($item eq 'timezone_def') {
               if ($newvalues{$item} ne '') {
                   my @timezones = &DateTime::TimeZone->all_names;
                   if (!grep(/^\Q$newvalues{$item}\E/,@timezones)) {
                       push(@errors,$item);   
                   }
               }
         }          }
         if (grep(/^\Q$item\E$/,@errors)) {          if (grep(/^\Q$item\E$/,@errors)) {
             $newvalues{$item} = $domdefaults{$item};              $newvalues{$item} = $domdefaults{$item};
Line 4098  sub modify_defaults { Line 4122  sub modify_defaults {
                          defaults => { auth_def => $newvalues{'auth_def'},                           defaults => { auth_def => $newvalues{'auth_def'},
                                        auth_arg_def => $newvalues{'auth_arg_def'},                                         auth_arg_def => $newvalues{'auth_arg_def'},
                                        lang_def => $newvalues{'lang_def'},                                         lang_def => $newvalues{'lang_def'},
                                          timezone_def => $newvalues{'timezone_def'},
                                      }                                       }
                        );                         );
     my $title = &defaults_titles();      my $title = &defaults_titles();
Line 4130  sub modify_defaults { Line 4155  sub modify_defaults {
             my $cachetime = 24*60*60;              my $cachetime = 24*60*60;
             &Apache::lonnet::do_cache_new('domdefaults',$dom,              &Apache::lonnet::do_cache_new('domdefaults',$dom,
                                           $defaults_hash{'defaults'},$cachetime);                                            $defaults_hash{'defaults'},$cachetime);
             my $sysmail = $r->dir_config('lonSysEMail');              if ($changes{'auth_def'} || $changes{'auth_arg_def'} || $changes{'lang_def'}) {
             &Apache::lonmsg::sendemail($sysmail,"LON-CAPA Domain Settings Change - $dom",$mailmsgtext);                  my $sysmail = $r->dir_config('lonSysEMail');
                   &Apache::lonmsg::sendemail($sysmail,"LON-CAPA Domain Settings Change - $dom",$mailmsgtext);
               }
         } else {          } else {
             $resulttext = &mt('No changes made to default authentication/language settings');              $resulttext = &mt('No changes made to default authentication/language/timezone settings');
         }          }
     } else {      } else {
         $resulttext = '<span class="LC_error">'.          $resulttext = '<span class="LC_error">'.
Line 4232  sub modify_coursecategories { Line 4259  sub modify_coursecategories {
     my ($dom,%domconfig) = @_;      my ($dom,%domconfig) = @_;
     my ($resulttext,%deletions,%reorderings,%needreordering,%adds,$errors);      my ($resulttext,%deletions,%reorderings,%needreordering,%adds,$errors);
     my @deletecategory = &Apache::loncommon::get_env_multiple('form.deletecategory');      my @deletecategory = &Apache::loncommon::get_env_multiple('form.deletecategory');
     if (($domconfig{'coursecategories'}{'instcode::0'} ne '')  && ($env{'form.instcode'} == 0)) {      if (ref($domconfig{'coursecategories'}) eq 'HASH') {
         push (@deletecategory,'instcode::0');          if (($domconfig{'coursecategories'}{'instcode::0'} ne '')  && ($env{'form.instcode'} == 0)) {
               push (@deletecategory,'instcode::0');
           }
     }      }
     my (@predelcats,@predeltrails,%predelallitems);      my (@predelcats,@predeltrails,%predelallitems);
     if (ref($domconfig{'coursecategories'}) eq 'HASH') {      if (ref($domconfig{'coursecategories'}) eq 'HASH') {
         if (@deletecategory > 0) {          if (@deletecategory > 0) {
             #FIXME Need to remove category from all courses using a deleted category               #FIXME Need to remove category from all courses using a deleted category 
             &extract_categories($domconfig{'coursecategories'},\@predelcats,\@predeltrails,\%predelallitems);              &Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@predelcats,\@predeltrails,\%predelallitems);
             foreach my $item (@deletecategory) {              foreach my $item (@deletecategory) {
                 if ($domconfig{'coursecategories'}{$item} ne '') {                  if ($domconfig{'coursecategories'}{$item} ne '') {
                     delete($domconfig{'coursecategories'}{$item});                      delete($domconfig{'coursecategories'}{$item});
Line 4299  sub modify_coursecategories { Line 4328  sub modify_coursecategories {
             }              }
         }          }
         my (@chkcats,@chktrails,%chkallitems);          my (@chkcats,@chktrails,%chkallitems);
         &extract_categories($domconfig{'coursecategories'},\@chkcats,\@chktrails,\%chkallitems);          &Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@chkcats,\@chktrails,\%chkallitems);
         if (ref($chkcats[0]) eq 'ARRAY') {          if (ref($chkcats[0]) eq 'ARRAY') {
             my $depth = 0;              my $depth = 0;
             my $chg = 0;              my $chg = 0;
Line 4321  sub modify_coursecategories { Line 4350  sub modify_coursecategories {
         }          }
         my $putresult = &Apache::lonnet::put_dom('configuration',\%domconfig,$dom);          my $putresult = &Apache::lonnet::put_dom('configuration',\%domconfig,$dom);
         my (@cats,@trails,%allitems);          my (@cats,@trails,%allitems);
         &extract_categories($domconfig{'coursecategories'},\@cats,\@trails,\%allitems);          &Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@cats,\@trails,\%allitems);
         if ($putresult eq 'ok') {          if ($putresult eq 'ok') {
             $resulttext = &mt('Changes made:').'<ul>';              $resulttext = &mt('Changes made:').'<ul>';
             if (keys(%deletions) > 0) {              if (keys(%deletions) > 0) {
Line 4406  sub recurse_cat_deletes { Line 4435  sub recurse_cat_deletes {
         }          }
     }      }
     return;      return;
 }  
   
 sub gather_categories {  
     my ($categories,$cats,$idx,$jsarray) = @_;  
     my %counters;  
     my $num = 0;  
     foreach my $item (keys(%{$categories})) {  
         my ($cat,$container,$depth) = map { &unescape($_); } split(/:/,$item);  
         if ($container eq '' && $depth == 0) {  
             $cats->[$depth][$categories->{$item}] = $cat;  
         } else {  
             $cats->[$depth]{$container}[$categories->{$item}] = $cat;  
         }  
         my ($escitem,$tail) = split(/:/,$item,2);  
         if ($counters{$tail} eq '') {  
             $counters{$tail} = $num;  
             $num ++;  
         }  
         if (ref($idx) eq 'HASH') {  
             $idx->{$item} = $counters{$tail};  
         }  
         if (ref($jsarray) eq 'ARRAY') {   
             push(@{$jsarray->[$counters{$tail}]},$item);  
         }  
     }  
     return;  
 }  
   
 sub extract_categories {  
     my ($categories,$cats,$trails,$allitems,$idx,$jsarray) = @_;  
     if (ref($categories) eq 'HASH') {  
         &gather_categories($categories,$cats,$idx,$jsarray);  
         if (ref($cats->[0]) eq 'ARRAY') {  
             for (my $i=0; $i<@{$cats->[0]}; $i++) {  
                 my $name = $cats->[0][$i];  
                 my $item = &escape($name).'::0';  
                 my $trailstr;  
                 if ($name eq 'instcode') {  
                     $trailstr = &mt('Official courses (with institutional codes)');  
                 } else {  
                     $trailstr = $name;  
                 }  
                 if ($allitems->{$item} eq '') {  
                     push(@{$trails},$trailstr);  
                     $allitems->{$item} = scalar(@{$trails})-1;  
                 }  
                 my @parents = ($name);  
                 if (ref($cats->[1]{$name}) eq 'ARRAY') {  
                     for (my $j=0; $j<@{$cats->[1]{$name}}; $j++) {  
                         my $category = $cats->[1]{$name}[$j];  
                         &recurse_categories($cats,2,$category,$trails,$allitems,\@parents);  
                     }  
                 }  
             }  
         }  
     }  
     return;  
 }  
   
 sub recurse_categories {  
     my ($cats,$depth,$category,$trails,$allitems,$parents) = @_;  
     my $shallower = $depth - 1;  
     if (ref($cats->[$depth]{$category}) eq 'ARRAY') {  
         for (my $k=0; $k<@{$cats->[$depth]{$category}}; $k++) {  
             my $name = $cats->[$depth]{$category}[$k];  
             my $item = &escape($category).':'.&escape($parents->[-1]).':'.$shallower;  
             my $trailstr = join(' -&gt; ',(@{$parents},$category));  
             if ($allitems->{$item} eq '') {   
                 push(@{$trails},$trailstr);  
                 $allitems->{$item} = scalar(@{$trails})-1;  
             }  
             my $deeper = $depth+1;  
             push(@{$parents},$category);  
             &recurse_categories($cats,$deeper,$name,$trails,$allitems,$parents);  
             pop(@{$parents});  
         }  
     } else {  
         my $item = &escape($category).':'.&escape($parents->[-1]).':'.$shallower;  
         my $trailstr = join(' -&gt; ',(@{$parents},$category));  
         if ($allitems->{$item} eq '') {  
             push(@{$trails},$trailstr);  
             $allitems->{$item} = scalar(@{$trails})-1;  
         }  
     }  
     return;  
 }  }
   
 1;  1;

Removed from v.1.51  
changed lines
  Added in v.1.56


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