Diff for /loncom/interface/lonpreferences.pm between versions 1.179 and 1.200

version 1.179, 2009/12/02 18:33:27 version 1.200, 2012/10/08 10:26:34
Line 117  sub wysiwygchanger { Line 117  sub wysiwygchanger {
     my $switchon=&mt('Enable WYSIWYG editor');      my $switchon=&mt('Enable WYSIWYG editor');
     my $warning='';      my $warning='';
     if ($env{'user.adv'}) {      if ($env{'user.adv'}) {
        $warning.="<p>".&mt("The WYSIWYG editor only supports simple HTML and is in many cases unsuited for advanced authoring. In a number of cases, it may destroy advanced authoring involving LaTeX and script function calls.")."</p>";         $warning.='<p class="LC_warning">'.&mt("The WYSIWYG editor only supports simple HTML and is in many cases unsuited for advanced authoring. In a number of cases, it may destroy advanced authoring involving LaTeX and script function calls.")."</p>";
     }      }
     $r->print(<<ENDLSCREEN);      $r->print(<<ENDLSCREEN);
 <form name="prefs" action="/adm/preferences" method="post">  <form name="prefs" action="/adm/preferences" method="post">
Line 166  sub languagechanger { Line 166  sub languagechanger {
                = &Apache::loncommon::plainlanguagedescription($_);                 = &Apache::loncommon::plainlanguagedescription($_);
  }   }
     }      }
       %langchoices = &Apache::lonlocal::texthash(%langchoices);
     my $selectionbox=      my $selectionbox=
            &Apache::loncommon::select_form(             &Apache::loncommon::select_form(
                $language,                 $language,
                'language',                 'language',
                &Apache::lonlocal::texthash(%langchoices));                 \%langchoices);
     $r->print(<<ENDLSCREEN);      $r->print(<<ENDLSCREEN);
 <form name="prefs" action="/adm/preferences" method="post">  <form name="prefs" action="/adm/preferences" method="post">
 <input type="hidden" name="action" value="verify_and_change_languages" />  <input type="hidden" name="action" value="verify_and_change_languages" />
Line 191  sub verify_and_change_languages { Line 192  sub verify_and_change_languages {
     if ($newlanguage) {      if ($newlanguage) {
         &Apache::lonnet::put('environment',{'languages' => $newlanguage});          &Apache::lonnet::put('environment',{'languages' => $newlanguage});
         &Apache::lonnet::appenv({'environment.languages' => $newlanguage});          &Apache::lonnet::appenv({'environment.languages' => $newlanguage});
         $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]','<i>'.&mt('Preferred language').'</i>','<tt>"'.$newlanguage.'"</tt>.'));          $message=&Apache::lonhtmlcommon::confirm_success(
               &mt('Set [_1] to [_2]',
                   '<i>'.&mt('Preferred language').'</i>',
                   '<tt>"'.$newlanguage.'"</tt>.'))
              .'<br />'
              .&mt('The change will become active on the next page.');
     } else {      } else {
         &Apache::lonnet::del('environment',['languages']);          &Apache::lonnet::del('environment',['languages']);
         &Apache::lonnet::delenv('environment.languages');          &Apache::lonnet::delenv('environment.languages');
Line 221  sub texenginechanger { Line 227  sub texenginechanger {
      'tth' => 'tth (TeX to HTML)',       'tth' => 'tth (TeX to HTML)',
      #'ttm' => 'TeX to MathML',       #'ttm' => 'TeX to MathML',
      'jsMath' => 'jsMath',       'jsMath' => 'jsMath',
        'MathJax' => 'MathJax',
      'mimetex' => 'mimetex (Convert to Images)',       'mimetex' => 'mimetex (Convert to Images)',
                      'raw' => 'Raw (Screen Reader)'                       'raw' => 'Raw (Screen Reader)'
                      );                       );
       %mathchoices = &Apache::lonlocal::texthash(%mathchoices);
     my $selectionbox=      my $selectionbox=
            &Apache::loncommon::select_form(             &Apache::loncommon::select_form(
                $texengine,                 $texengine,
                'texengine',                 'texengine',
                &Apache::lonlocal::texthash(%mathchoices));                 \%mathchoices);
       my $MathJax_start=&Apache::lontexconvert::MathJax_header();
     my $jsMath_start=&Apache::lontexconvert::jsMath_header();      my $jsMath_start=&Apache::lontexconvert::jsMath_header();
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
       'headline' => 'Change how math is displayed',        'headline' => 'Change how math is displayed',
       'preftxt'  => 'Preferred method to display math',        'preftxt'  => 'Preferred method to display math',
       'change'   => 'Save',        'change'   => 'Save',
       'exmpl'    => 'Examples',        'exmpl'    => 'Examples',
         'mathjax'  => 'MathJax:',
       'jsmath'   => 'jsMath:',        'jsmath'   => 'jsMath:',
       'tth'      => 'tth (TeX to HTML):',        'tth'      => 'tth (TeX to HTML):',
       'mimetex'  => 'mimetex (Convert to Images):',        'mimetex'  => 'mimetex (Convert to Images):',
Line 269  $lt{'preftxt'}: $selectionbox Line 279  $lt{'preftxt'}: $selectionbox
 <hr />  <hr />
 $lt{'exmpl'}  $lt{'exmpl'}
   
   <h3>$lt{'mathjax'}</h3>
   </script>
   <iframe src="/res/adm/pages/math_example.tex?inhibitmenu=yes&texengine=MathJax" width="400" height="120"></iframe>
   </p>
   <p>
   MathJax provides rendered equations whose source code can be extracted in TeX and MathML formats by right clicking the equation.
   </p>
   
 <h3>$lt{'jsmath'}</h3>   <h3>$lt{'jsmath'}</h3> 
 <p>  <p>
 $jsMath_start  $jsMath_start
Line 276  $jsMath_start Line 294  $jsMath_start
 if (jsMath.nofonts == 1) {  if (jsMath.nofonts == 1) {
     document.writeln($jsMathWarning);      document.writeln($jsMathWarning);
 }  }
   
 </script>  </script>
 <iframe src="/res/adm/pages/math_example.tex?inhibitmenu=yes&texengine=jsMath" width="400" height="120"></iframe>  <iframe src="/res/adm/pages/math_example.tex?inhibitmenu=yes&texengine=jsMath" width="400" height="120"></iframe>
 </p>  </p>
Line 335  sub rolesprefchanger { Line 354  sub rolesprefchanger {
     my $domain     = $env{'user.domain'};      my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get      my %userenv = &Apache::lonnet::get
         ('environment',['recentroles','recentrolesn']);          ('environment',['recentroles','recentrolesn']);
       my $brtext = 'Change '.$role.' Page Pref';
       my $brtitle;
       if ($env{'form.returnurl'} eq '/adm/roles') {
           $brtext = 'Configure Hotlist';
       } else {
           $brtitle = $brtext;
       }
     Apache::lonhtmlcommon::add_breadcrumb(      Apache::lonhtmlcommon::add_breadcrumb(
     { href => '/adm/preferences?action=changerolespref',      { href => '/adm/preferences?action=changerolespref',
                 text => 'Change '.$role.' Page Pref'});                  text => $brtext});
     $r->print(Apache::loncommon::start_page('Content Display Settings'));      $r->print(Apache::loncommon::start_page('Content Display Settings'));
     $r->print(Apache::lonhtmlcommon::breadcrumbs('Change '.$role.' Page Pref'));      $r->print(Apache::lonhtmlcommon::breadcrumbs($brtitle));
     my $hotlist_flag=$userenv{'recentroles'};      my $hotlist_flag=$userenv{'recentroles'};
     my $hotlist_n=$userenv{'recentrolesn'};      my $hotlist_n=$userenv{'recentrolesn'};
     my $checked;      my ($checkedon,$checkedoff);
     if ($hotlist_flag) {      if ($hotlist_flag) {
  $checked = 'checked="checked"';   $checkedon = 'checked="checked"';
       } else {
           $checkedoff = 'checked="checked"';
     }      }
           
     if (!$hotlist_n) { $hotlist_n=3; }      if (!$hotlist_n) { $hotlist_n=3; }
Line 371  sub rolesprefchanger { Line 399  sub rolesprefchanger {
     &Apache::loncommon::start_data_table().      &Apache::loncommon::start_data_table().
     &Apache::loncommon::start_data_table_header_row().      &Apache::loncommon::start_data_table_header_row().
     "<th>".&mt('Freeze '.$role)."</th>".      "<th>".&mt('Freeze '.$role)."</th>".
     "<th>".&mt($role)."</td>".      "<th>".&mt($role)."</th>".
     &Apache::loncommon::end_data_table_header_row().      &Apache::loncommon::end_data_table_header_row().
     "\n";      "\n";
  my $count;   my $count;
Line 394  sub rolesprefchanger { Line 422  sub rolesprefchanger {
         $roles_check_list .= "</table>\n";          $roles_check_list .= "</table>\n";
     }      }
   
       my $actionurl = '/adm/preferences';
       if ($env{'form.returnurl'} eq '/adm/roles') {
           $actionurl = '/adm/roles';
       }
       $r->print('<h3>'.&mt('Recent Roles Hotlist').'</h3>');
       unless ($checkedon) {
           $r->print(&mt('LON-CAPA users with several '.$lc_role.'s may wish to enable the Hotlist.').'<br />');
       }
     $r->print('      $r->print('
 <p>'.&mt('Some LON-CAPA users have a long list of '.$lc_role.'s. The Recent '.$role.'s Hotlist feature keeps track of the last N '.$lc_role.'s which have been visited and places a table of these at the top of the '.$lc_role.'s page. People with very few '.$lc_role.'s should leave this feature disabled.').'  <form name="prefs" action="'.$actionurl.'" method="post">
 </p>  
 <form name="prefs" action="/adm/preferences" method="post">  
 <input type="hidden" name="action" value="verify_and_change_rolespref" />  <input type="hidden" name="action" value="verify_and_change_rolespref" />
 <br /><label>'.&mt('Enable Recent '.$role.'s Hotlist:').'  <input type="hidden" name="returnurl" value="'.$env{'form.returnurl'}.'" />
 <input type="checkbox"'.$checked.' name="recentroles" value="true" /></label>  <div class="LC_left_float"><h4>'.&mt('Hotlist options').'</h4>
 <br />'.&mt('Number of '.$role.'s in Hotlist:').'  <p>'.
 <select name="recentrolesn" size="1">  &mt('When enabled, the Hotlist keeps track of the last N '.$lc_role.'s visited.').'<br />'.
 '.$options.'  &mt('Those N '.$lc_role.'s are then shown in a table at the top of the '.$lc_role.'s page.').'</p>'.
 </select>  &Apache::lonhtmlcommon::start_pick_box().
 <p>'.&mt('This list below can be used to <q>freeze</q> '.$lc_role.'s on your screen. Those marked as frozen will not be removed from the list, even if they have not been used recently.').'  &Apache::lonhtmlcommon::row_title(&mt('Use Recent '.$role.'s Hotlist')).
   '<span class="LC_nobreak">
   <label><input id="Hotliston" type="radio" '.$checkedon.' name="recentroles" value="1" />'.&mt('Yes').'</label>'.
   ('&nbsp;'x2).
   '<label><input id="Hotlistoff" type="radio" '.$checkedoff.' name="recentroles" value="0" />'.&mt('No').'</label>
   </span>'.
   &Apache::lonhtmlcommon::row_closure().
   &Apache::lonhtmlcommon::row_title('<label for="NumberOfRoles">'.&mt('Number of '.$role.'s in Hotlist').'</label>').
   '<select name="recentrolesn" size="1" id ="NumberOfRoles">'.
   $options.'
   </select>'.
   &Apache::lonhtmlcommon::row_closure(1).
   &Apache::lonhtmlcommon::end_pick_box().'
   </div>');
       if ($roles_check_list) { 
           $r->print('<div class="LC_left_float">
   <h4>'.&mt('Freeze Roles').'</h4>
   <p>'.&mt('The table below can be used to [_1]freeze[_2] '.$lc_role.'s in the Hotlist.','<q>','</q>').'<br />'.
   &mt('Those marked frozen will not be removed from the list, even if not recently used.').'
 </p>  </p>
 '.$roles_check_list.'  '.$roles_check_list.'
 <br />  </div>');
        } else {
            $r->print('<br clear="all" />'.
                      &mt('Once the Hotlist contains recently visited '.$lc_role.'s, you can return to this page to also set frozen roles.'));
        }
        $r->print('
   <br clear="all" />
 <input type="submit" value="'.&mt('Save').'" />  <input type="submit" value="'.&mt('Save').'" />
 </form>');  </form>');
 }  }
Line 455  sub verify_and_change_rolespref { Line 513  sub verify_and_change_rolespref {
     if ($hotlist_flag) {      if ($hotlist_flag) {
         &Apache::lonnet::put('environment',{'recentroles' => $hotlist_flag});          &Apache::lonnet::put('environment',{'recentroles' => $hotlist_flag});
         &Apache::lonnet::appenv({'environment.recentroles' => $hotlist_flag});          &Apache::lonnet::appenv({'environment.recentroles' => $hotlist_flag});
         $message=&mt('Recent '.$role.'s Hotlist is Enabled');          $message=&Apache::lonhtmlcommon::confirm_success(&mt('Recent '.$role.'s Hotlist is Enabled.')." ".&mt('Display [_1] Most Recent '.$role.'s.',$hotlist_n));
     } else {      } else {
         &Apache::lonnet::del('environment',['recentroles']);          &Apache::lonnet::del('environment',['recentroles']);
         &Apache::lonnet::delenv('environment.recentroles');          &Apache::lonnet::delenv('environment.recentroles');
         $message=&mt('Recent '.$role.'s Hotlist is Disabled');          $message=&Apache::lonhtmlcommon::confirm_success(&mt('Recent '.$role.'s Hotlist is Disabled'));
     }      }
     if ($hotlist_n) {      if ($hotlist_n) {
         &Apache::lonnet::put('environment',{'recentrolesn' => $hotlist_n});          &Apache::lonnet::put('environment',{'recentrolesn' => $hotlist_n});
         &Apache::lonnet::appenv({'environment.recentrolesn' => $hotlist_n});          &Apache::lonnet::appenv({'environment.recentrolesn' => $hotlist_n});
         if ($hotlist_flag) {  
             $message.="<br />".  
  &mt('Display [_1] Most Recent '.$role.'s',$hotlist_n)."\n";  
         }  
     }      }
   
 # Get list of froze roles and list of recent roles  # Get list of froze roles and list of recent roles
Line 503  sub verify_and_change_rolespref { Line 557  sub verify_and_change_rolespref {
         }          }
     }      }
     $message=&Apache::loncommon::confirmwrapper($message);      $message=&Apache::loncommon::confirmwrapper($message);
     &print_main_menu($r, $message);      if ($env{'form.returnurl'} eq '/adm/roles') {
           return $message;
       } else {
           &print_main_menu($r, $message);
       }
 }  }
   
   
Line 586  sub verify_and_change_screenname { Line 644  sub verify_and_change_screenname {
 sub iconchanger {  sub iconchanger {
     my $r = shift;      my $r = shift;
     &Apache::lonhtmlcommon::add_breadcrumb(      &Apache::lonhtmlcommon::add_breadcrumb(
     { href => '/adm/preferences?action=changeicons',              {   href => '/adm/preferences?action=changeicons',
                 text => 'Change Main Menu'});                  text => 'Change Menu Display'});
     $r->print(Apache::loncommon::start_page('Page Display Settings'));      $r->print(Apache::loncommon::start_page('Page Display Settings'));
     $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Main Menu'));      $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Menu Display'));
   
     my $user       = $env{'user.name'};      my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};      my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get      my %userenv = &Apache::lonnet::get('environment',['icons']);
         ('environment',['icons']);  
     my $iconic='checked="checked"';      my $iconic='checked="checked"';
     my $classic='';      my ($classic,$onlyicon,$iconic_preview,$iconsonly_preview);
     my $onlyicon='';  
     if ($userenv{'icons'} eq 'classic') {      if ($userenv{'icons'} eq 'classic') {
        $classic='checked="checked"';          $iconic='';
        $iconic='';          $classic='<div class="LC_info">'.
                    &mt('Your current selection: "Use buttons and text" is deprecated - it is recommended that you change this to "Use icons and text".').'</div>';
     }      }
     if ($userenv{'icons'} eq 'iconsonly') {      if ($userenv{'icons'} eq 'iconsonly') {
        $onlyicon='checked="checked"';         $onlyicon='checked="checked"';
        $iconic='';         $iconic='';
     }      }
     my $useicons=&mt('Use icons and text');  
     my $usebuttons=&mt('Use buttons and text');  
     my $useicononly=&mt('Use icons only');  
     my $change=&mt('Save');      my $change=&mt('Save');
       my %lt = &icon_options();
       my ($inlinetools,$toolsorder) = &icon_previews();
       if ((ref($inlinetools) eq 'HASH') && (ref($toolsorder) eq 'ARRAY')) {
           foreach my $tool (@{$toolsorder}) {
               my ($command,$row,$col,$img,$top,$bot,$act,$desc) = 
                   split(/\&/,$inlinetools->{$tool});
               $iconic_preview .= '<li><a title="'.$desc.'" class="LC_menubuttons_link" href=""><img alt="'.$desc.'" src="/res/adm/pages/'.$img.'"  class="LC_icon" /><span class="LC_menubuttons_inline_text">'.$top.('&nbsp;' x 2).'</span></a></li>';
               $iconsonly_preview .= '<li><a title="'.$desc.'" class="LC_menubuttons_link" href=""><img alt="'.$desc.'" src="/res/adm/pages/'.$img.'"  class="LC_icon" />&nbsp;</a></li>';
           }
       }
       $iconsonly_preview = '<ul class="LC_breadcrumb_tools_outerlist"><li>'.
                            '<ul>'.
                            $iconsonly_preview.
                            '</ul></li></ul>';
       $iconic_preview = '<ul class="LC_breadcrumb_tools_outerlist"><li>'.
                         '<ul>'.
                         $iconic_preview.
                         '</ul></li></ul>'; 
     $r->print(<<ENDSCREEN);      $r->print(<<ENDSCREEN);
   $classic
 <form name="prefs" action="/adm/preferences" method="post">  <form name="prefs" action="/adm/preferences" method="post">
 <input type="hidden" name="action" value="verify_and_change_icons" />  <input type="hidden" name="action" value="verify_and_change_icons" />
 <label><input type="radio" name="menumode" value="iconic" $iconic /> $useicons</label><br />  <label><input type="radio" name="menumode" value="iconic" $iconic /> $lt{'iconic'}</label>$iconic_preview<br />
 <label><input type="radio" name="menumode" value="classic" $classic /> $usebuttons</label><br />  <label><input type="radio" name="menumode" value="iconsonly" $onlyicon /> $lt{'iconsonly'}</label>$iconsonly_preview<br />
 <label><input type="radio" name="menumode" value="iconsonly" $onlyicon /> $useicononly</label><br />  
 <input type="submit" value="$change" />  <input type="submit" value="$change" />
 </form>  </form>
 ENDSCREEN  ENDSCREEN
Line 626  sub verify_and_change_icons { Line 698  sub verify_and_change_icons {
     my $user       = $env{'user.name'};      my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};      my $domain     = $env{'user.domain'};
     my $newicons   = $env{'form.menumode'};      my $newicons   = $env{'form.menumode'};
       my %lt = &icon_options();
       my $newchoice = $newicons;
       if ($lt{$newicons}) {
           $newchoice = $lt{$newicons};
       }
     &Apache::lonnet::put('environment',{'icons' => $newicons});      &Apache::lonnet::put('environment',{'icons' => $newicons});
     &Apache::lonnet::appenv({'environment.icons' => $newicons});      &Apache::lonnet::appenv({'environment.icons' => $newicons});
     my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]','<i>'.&mt('Menu Display').'</i>','<tt>'.$newicons.'</tt>'));      my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]','<i>'.&mt('Menu Display').'</i>','<tt>'.$newchoice.'</tt>'));
     $message=&Apache::loncommon::confirmwrapper($message);      $message=&Apache::loncommon::confirmwrapper($message);
     &print_main_menu($r, $message);      &print_main_menu($r, $message);
 }  }
   
   sub icon_options {
       return &Apache::lonlocal::texthash(
                                           iconic    => 'Use icons and text',
                                           iconsonly => 'Use icons only',
                                         );
   }
   
   sub icon_previews {
        my %icon_text = (
                         annotate => 'Notes',
                         wishlist => 'Stored Links',
                         catalog  => 'Info',
                         evaluate => 'Evaluate',
                         feedback => 'Communicate',
                         printout => 'Print',
                        );
       my %inlinetools = (
           printout => "s&8&3&prt.png&$icon_text{'printout'}&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document",
           wishlist => "s&9&1&wishlist-link.png&$icon_text{'wishlist'}&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository",
           evaluate => "s&8&1&eval.png&$icon_text{'evaluate'}&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource",
           feedback => "s&8&2&fdbk.png&$icon_text{'feedback'}&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource",
           annotate => "s&9&3&anot.png&$icon_text{'annotate'}&tations[_1]&annotate()&Make notes and annotations about this resource",
           catalog  => "s&6&3&catalog.png&$icon_text{'catalog'}&info[_1]&catalog_info()&Show Metadata",
       );
       my @toolsorder = qw(annotate wishlist evaluate feedback printout catalog);
       return (\%inlinetools,\@toolsorder);
   }
   
 ################################################################  ################################################################
 #                     Clicker Subroutines                      #  #                     Clicker Subroutines                      #
 ################################################################  ################################################################
Line 995  sub verify_and_change_msgforward { Line 1099  sub verify_and_change_msgforward {
     my $domain     = $env{'user.domain'};      my $domain     = $env{'user.domain'};
     my $newscreen  = '';      my $newscreen  = '';
     my $message='';      my $message='';
     foreach (split(/\,/,$env{'form.msgforward'})) {      foreach my $recip (split(/\,/,$env{'form.msgforward'})) {
  my ($msuser,$msdomain)=split(/[\@\:]/,$_);          my ($msuser,$msdomain);
           if ($recip =~ /:/) {
               ($msuser,$msdomain)=split(':',$recip);
           } else {
               ($msuser,$msdomain)=split(/\@/,$recip);
           }
         $msuser = &LONCAPA::clean_username($msuser);          $msuser = &LONCAPA::clean_username($msuser);
         $msdomain = &LONCAPA::clean_domain($msdomain);          $msdomain = &LONCAPA::clean_domain($msdomain);
         if (($msuser) && ($msdomain)) {          if (($msuser) && ($msdomain)) {
     if (&Apache::lonnet::homeserver($msuser,$msdomain) ne 'no_host') {      if (&Apache::lonnet::homeserver($msuser,$msdomain) ne 'no_host') {
                $newscreen.=$msuser.':'.$msdomain.',';                  $newscreen.=$msuser.':'.$msdomain.',';
    } else {      } else {
                $message.= &mt('No such user: ').'<tt>'.$msuser.':'.$msdomain.'</tt><br />';                  $message.= &mt('No such user: ').'<tt>'.$msuser.':'.$msdomain.'</tt><br />';
            }              }
         }          }
     }      }
     $newscreen=~s/\,$//;      $newscreen=~s/\,$//;
     if ($newscreen) {      if ($newscreen) {
         &Apache::lonnet::put('environment',{'msgforward' => $newscreen});          &Apache::lonnet::put('environment',{'msgforward' => $newscreen});
         &Apache::lonnet::appenv({'environment.msgforward' => $newscreen});          &Apache::lonnet::appenv({'environment.msgforward' => $newscreen});
         $message .= &mt('Set message forwarding to ').'<tt>"'.$newscreen.'"</tt>.'          $message .= &Apache::lonhtmlcommon::confirm_success(&mt('Set message forwarding to ').'<tt>"'.$newscreen.'"</tt>.<br />');
                     .'<br />';  
     } else {      } else {
         &Apache::lonnet::del('environment',['msgforward']);          &Apache::lonnet::del('environment',['msgforward']);
         &Apache::lonnet::delenv('environment.msgforward');          &Apache::lonnet::delenv('environment.msgforward');
         $message.= &mt("Set message forwarding to 'off'.").'<br />';          $message.= &Apache::lonhtmlcommon::confirm_success(&mt("Set message forwarding to 'off'.").'<br />');
     }      }
     my $critnotification;      my $critnotification;
     my $notification;      my $notification;
Line 1052  sub verify_and_change_msgforward { Line 1160  sub verify_and_change_msgforward {
     if ($notification) {      if ($notification) {
         &Apache::lonnet::put('environment',{'notification' => $notification});          &Apache::lonnet::put('environment',{'notification' => $notification});
         &Apache::lonnet::appenv({'environment.notification' => $notification});          &Apache::lonnet::appenv({'environment.notification' => $notification});
         $message.=&mt('Set non-critical message notification address(es) to ').'<tt>"'.$notification.'"</tt>.<br />';          $message.=&Apache::lonhtmlcommon::confirm_success(&mt('Set non-critical message notification address(es) to ').'<tt>"'.$notification.'"</tt>.<br />');
     } else {      } else {
         &Apache::lonnet::del('environment',['notification']);          &Apache::lonnet::del('environment',['notification']);
         &Apache::lonnet::delenv('environment.notification');          &Apache::lonnet::delenv('environment.notification');
         $message.=&mt("Set non-critical message notification to 'off'.").'<br />';          $message.=&Apache::lonhtmlcommon::confirm_success(&mt("Set non-critical message notification to 'off'.").'<br />');
     }      }
     if ($critnotification) {      if ($critnotification) {
         &Apache::lonnet::put('environment',{'critnotification' => $critnotification});          &Apache::lonnet::put('environment',{'critnotification' => $critnotification});
         &Apache::lonnet::appenv({'environment.critnotification' => $critnotification});          &Apache::lonnet::appenv({'environment.critnotification' => $critnotification});
         $message.=&mt('Set critical message notification address(es) to ').'<tt>"'.$critnotification.'"</tt>.<br />';          $message.=&Apache::lonhtmlcommon::confirm_success(&mt('Set critical message notification address(es) to ').'<tt>"'.$critnotification.'"</tt>.<br />');
     } else {      } else {
         &Apache::lonnet::del('environment',['critnotification']);          &Apache::lonnet::del('environment',['critnotification']);
         &Apache::lonnet::delenv('environment.critnotification');          &Apache::lonnet::delenv('environment.critnotification');
         $message.=&mt("Set critical message notification to 'off'.").'<br />';          $message.=&Apache::lonhtmlcommon::confirm_success(&mt("Set critical message notification to 'off'.").'<br />');
     }      }
     if ($critnotification || $notification) {      if ($critnotification || $notification) {
         if ($notify_with_html) {          if ($notify_with_html) {
             &Apache::lonnet::put('environment',{'notifywithhtml' => $notify_with_html});              &Apache::lonnet::put('environment',{'notifywithhtml' => $notify_with_html});
             &Apache::lonnet::appenv({'environment.notifywithhtml' => $notify_with_html});              &Apache::lonnet::appenv({'environment.notifywithhtml' => $notify_with_html});
             $message.=&mt('Set address(es) to receive excerpts with html retained ').'<tt>"'.$notify_with_html.'"</tt>.';              $message.=&Apache::lonhtmlcommon::confirm_success(&mt('Set address(es) to receive excerpts with html retained ').'<tt>"'.$notify_with_html.'"</tt>.');
         } else {          } else {
             &Apache::lonnet::del('environment',['notifywithhtml']);              &Apache::lonnet::del('environment',['notifywithhtml']);
             &Apache::lonnet::delenv('environment.notifywithhtml');              &Apache::lonnet::delenv('environment.notifywithhtml');
             if ($totaladdresses == 1) {              if ($totaladdresses == 1) {
                 $message.=&mt("Set notification address to receive excerpts with html stripped.");                  $message.=&Apache::lonhtmlcommon::confirm_success(&mt("Set notification address to receive excerpts with html stripped."));
             } else {              } else {
                 $message.=&mt("Set all notification addresses to receive excerpts with html stripped.");                  $message.=&Apache::lonhtmlcommon::confirm_success(&mt("Set all notification addresses to receive excerpts with html stripped."));
             }              }
         }          }
     } else {      } else {
         &Apache::lonnet::del('environment',['notifywithhtml']);          &Apache::lonnet::del('environment',['notifywithhtml']);
         &Apache::lonnet::delenv('environment.notifywithhtml');          &Apache::lonnet::delenv('environment.notifywithhtml');
     }      }
     if ($message) {  
         $message .= '<br /><hr />';  
     }  
     &Apache::loncommon::flush_email_cache($user,$domain);      &Apache::loncommon::flush_email_cache($user,$domain);
       $message=&Apache::loncommon::confirmwrapper($message);
     &msgforwardchanger($r,$message);      &msgforwardchanger($r,$message);
 }  }
   
Line 1121  sub colorschanger { Line 1227  sub colorschanger {
     foreach my $item (sort(keys(%colortypes))) {      foreach my $item (sort(keys(%colortypes))) {
        my $curcol=&Apache::loncommon::designparm($function.'.'.$item,$domain);         my $curcol=&Apache::loncommon::designparm($function.'.'.$item,$domain);
        $chtable.=&Apache::loncommon::start_data_table_row().         $chtable.=&Apache::loncommon::start_data_table_row().
    '<td>'.$colortypes{$item}.'</td><td style="background: '.$curcol.     '<td>'.$colortypes{$item}.'<td><input name="'.$item.
         '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td><input name="'.$item.          '" class="colorchooser"  size="10" value="'.$curcol.
         '" size="10" value="'.$curcol.  '" /></td>'.
 '" /></td><td><a href="javascript:pjump('."'color_custom','".$colortypes{$item}.  
 "','".$curcol."','"  
     .$item."','parmform.pres','psub'".');">'.&mt('Select').'</a></td>'.  
     &Apache::loncommon::end_data_table_row()."\n";      &Apache::loncommon::end_data_table_row()."\n";
     }      }
     my $end_data_table = &Apache::loncommon::end_data_table();      my $end_data_table = &Apache::loncommon::end_data_table();
Line 1134  sub colorschanger { Line 1237  sub colorschanger {
     my $savebutton = &mt('Save');      my $savebutton = &mt('Save');
     my $resetbutton = &mt('Reset All');      my $resetbutton = &mt('Reset All');
     my $resetbuttondesc = &mt('Reset All Colors to Default');      my $resetbuttondesc = &mt('Reset All Colors to Default');
       my $colorchooser=&Apache::lonhtmlcommon::color_picker();
       $r-print('<script type="text/javascript" language="JavaScript">
   ' . $colorchooser . '
   </script>
   ');
     $r->print(<<ENDCOL);      $r->print(<<ENDCOL);
 <script type="text/javascript" language="JavaScript">  
   
     function pclose() {  
         parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",  
                  "height=350,width=350,scrollbars=no,menubar=no");  
         parmwin.close();  
     }  
   
     $pjump_def  
   
     function psub() {  
         pclose();  
         if (document.parmform.pres_marker.value!='') {  
             if (document.parmform.pres_type.value!='') {  
                 eval('document.prefs.'+  
                      document.parmform.pres_marker.value+  
      '.value=document.parmform.pres_value.value;');  
     }  
         } else {  
             document.parmform.pres_value.value='';  
             document.parmform.pres_marker.value='';  
         }  
     }  
   
   
 </script>  
 <form name="parmform">  <form name="parmform">
 <input type="hidden" name="pres_marker" />  <input type="hidden" name="pres_marker" />
 <input type="hidden" name="pres_type" />  <input type="hidden" name="pres_type" />
Line 1199  sub verify_and_change_colors { Line 1282  sub verify_and_change_colors {
     my $message='';      my $message='';
     foreach my $item (keys %colortypes) {      foreach my $item (keys %colortypes) {
         my $color=$env{'form.'.$item};          my $color=$env{'form.'.$item};
    if (!($color =~ /^#/)) {
       $color = '#' . $color;
    }
         my $entry='color.'.$function.'.'.$item;          my $entry='color.'.$function.'.'.$item;
  if (($color=~/^\#[0-9A-Fa-f]{6}$/) && (!$env{'form.resetall'})) {   if (($color=~/^\#[0-9A-Fa-f]{6}$/) && (!$env{'form.resetall'})) {
     &Apache::lonnet::put('environment',{$entry => $color});      &Apache::lonnet::put('environment',{$entry => $color});
Line 1229  sub passwordchanger { Line 1315  sub passwordchanger {
     # This function is a bit of a mess....      # This function is a bit of a mess....
     # Passwords are encrypted using londes.js (DES encryption)      # Passwords are encrypted using londes.js (DES encryption)
     $errormessage = ($errormessage || '');      $errormessage = ($errormessage || '');
     my ($user,$domain,$currentpass,$defdom);      my ($user,$domain,$currentpass);
     &Apache::lonhtmlcommon::add_breadcrumb(      &Apache::lonhtmlcommon::add_breadcrumb(
  { href => '/adm/preferences?action=changepass',   { href => '/adm/preferences?action=changepass',
                   text => 'Change Password'});                    text => 'Change Password'});
Line 1244  sub passwordchanger { Line 1330  sub passwordchanger {
             $caller = 'preferences';              $caller = 'preferences';
         }          }
     } elsif ($caller eq 'reset_by_email') {      } elsif ($caller eq 'reset_by_email') {
             $defdom = $r->dir_config('lonDefDomain');  
             my %data = &Apache::lonnet::tmpget($mailtoken);              my %data = &Apache::lonnet::tmpget($mailtoken);
             if (keys(%data) == 0) {              if (keys(%data) == 0) {
                 $r->print(&mt('Sorry, the URL you provided to complete the reset of your password was invalid. Either the token included in the URL has been deleted or the URL you provided was invalid. Please submit a [_1]new request[_2] for a password reset, and follow the link to the new URL included in the e-mail that will be sent to you, to allow you to enter a new password.'                  $r->print(
                              ,'<a href="/adm/resetpw">','</a>')                      '<p class="LC_warning">'
                      .&mt('Sorry, the URL you provided to complete the reset of your password was invalid. Either the token included in the URL has been deleted or the URL you provided was invalid. Please submit a [_1]new request[_2] for a password reset, and follow the link to the new URL included in the e-mail that will be sent to you, to allow you to enter a new password.'
                          ,'<a href="/adm/resetpw">','</a>')
                      .'</p>'
                 );                  );
                 return;                  return;
             }              }
Line 1258  sub passwordchanger { Line 1346  sub passwordchanger {
                     $domain = $data{'domain'};                      $domain = $data{'domain'};
                     $currentpass = $data{'temppasswd'};                      $currentpass = $data{'temppasswd'};
                 } else {                  } else {
                     $r->print(&mt('Sorry, the token generated when you requested a password reset has expired.').'<br />');                      $r->print(
                           '<p class="LC_warning">'
                          .&mt('Sorry, the token generated when you requested'
                              .' a password reset has expired.')
                          .'</p>'
                       );
                     return;                      return;
                 }                  }
             } else {              } else {
                 $r->print(&mt('Sorry, the URL generated when you requested reset of your password contained incomplete information.').'<br />');                  $r->print(
                       '<p class="LC_warning">'
                      .&mt('Sorry, the URL generated when you requested reset of'
                          .' your password contained incomplete information.')
                      .'</p>'
                   );
                 return;                  return;
             }              }
    } else {              if (&Apache::lonnet::domain($domain) eq '') {
         $r->print(&mt('Page requested in unexpected context').'<br />');                  $domain = $r->dir_config('lonDefDomain');
               }
       } else {
           $r->print(
               '<p class="LC_error">'
              .&mt('Page requested in unexpected context')
              .'</p>'
           );
         return;          return;
     }      }
     my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain);      my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain);
Line 1309  $errormessage Line 1414  $errormessage
      crappy browser -->       crappy browser -->
 ENDFORM  ENDFORM
     $r->print(&server_form($logtoken,$caller,$mailtoken));      $r->print(&server_form($logtoken,$caller,$mailtoken));
     $r->print(&client_form($caller,\%hexkey,$currentpass,$defdom));      $r->print(&client_form($caller,\%hexkey,$currentpass,$domain));
   
     #      #
     return;      return;
Line 1538  ENDERROR Line 1643  ENDERROR
     }       } 
     if ($newpass1 ne $newpass2) {      if ($newpass1 ne $newpass2) {
  &passwordchanger($r,   &passwordchanger($r,
  '<span class="LC_error">'.   '<span class="LC_warning">'.
  &mt('The new passwords you entered do not match.').'  '.   &mt('The new passwords you entered do not match.').'  '.
  &mt('Please try again.').'</span>',$caller,$mailtoken);   &mt('Please try again.').'</span>',$caller,$mailtoken);
  return 1;   return 1;
     }      }
     if (length($newpass1) < 7) {      if (length($newpass1) < 7) {
  &passwordchanger($r,   &passwordchanger($r,
  '<span class="LC_error">'.   '<span class="LC_warning">'.
  &mt('Passwords must be a minimum of 7 characters long.').'  '.   &mt('Passwords must be a minimum of 7 characters long.').'  '.
  &mt('Please try again.').'</span>',$caller,$mailtoken);   &mt('Please try again.').'</span>',$caller,$mailtoken);
  return 1;   return 1;
Line 1558  ENDERROR Line 1663  ENDERROR
     }      }
     if ($badpassword) {      if ($badpassword) {
  # I can't figure out how to enter bad characters on my browser.   # I can't figure out how to enter bad characters on my browser.
  my $errormessage ='<span class="LC_error">'.   my $errormessage ='<span class="LC_warning">'.
            &mt('The password you entered contained illegal characters.').'<br />'.             &mt('The password you entered contained illegal characters.').'<br />'.
            &mt('Valid characters are').(<<"ENDERROR");             &mt('Valid characters are').(<<"ENDERROR");
 : space and <br />  : space and <br />
Line 1578  ENDERROR Line 1683  ENDERROR
     my $message;      my $message;
     if ($result =~ /^ok$/) {      if ($result =~ /^ok$/) {
         $message = &Apache::lonhtmlcommon::confirm_success(&mt('The password for user [_1] was successfully changed.','<i>'.$user.'</i>'));          $message = &Apache::lonhtmlcommon::confirm_success(&mt('The password for user [_1] was successfully changed.','<i>'.$user.'</i>'));
           $message = &Apache::loncommon::confirmwrapper($message);
         if ($caller eq 'reset_by_email') {          if ($caller eq 'reset_by_email') {
             $r->print($message.'<br />');              $r->print($message.'<br />');
         } else {          } else {
Line 1642  sub discussionchanger { Line 1748  sub discussionchanger {
         'sdpf' => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.',          'sdpf' => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.',
         'prca' => 'Preferences can be set that determine',          'prca' => 'Preferences can be set that determine',
         'whpo' => 'Which posts are displayed when you display a discussion board or resource, and',          'whpo' => 'Which posts are displayed when you display a discussion board or resource, and',
         'unwh' => 'Under what circumstances posts are identfied as "New"',          'unwh' => 'Under what circumstances posts are identified as "NEW"',
         'allposts' => 'All posts',          'allposts' => 'All posts',
         'unread' => 'New posts only',          'unread' => 'New posts only',
         'ondisp' => 'Once displayed',          'ondisp' => 'Once displayed',
         'onmark' => 'Once marked as read',          'onmark' => 'Once marked not NEW',
         'disa' => 'Posts displayed?',          'disa' => 'Posts displayed?',
         'npmr' => 'New posts cease to be identified as "New"?',          'npmr' => 'New posts cease to be identified as "NEW"?',
         'thde'  => 'The preferences you set here can be overridden within each individual discussion.',          'thde'  => 'The preferences you set here can be overridden within each individual discussion.',
         'chgt' => 'Change to '          'chgt' => 'Change to '
     );      );
Line 1733  sub verify_and_change_discussion { Line 1839  sub verify_and_change_discussion {
             &Apache::lonnet::put('environment',{'discmarkread' => $newmark});              &Apache::lonnet::put('environment',{'discmarkread' => $newmark});
             &Apache::lonnet::appenv({'environment.discmarkread' => $newmark});              &Apache::lonnet::appenv({'environment.discmarkread' => $newmark});
         } else {          } else {
             $message.=&Apache::lonhtmlcommon::confirm_success(&mt('In discussions: posts will be identified as "NEW" until marked as read by the reader.')).'<br />';              $message.=&Apache::lonhtmlcommon::confirm_success(&mt('In discussions: posts will be identified as "NEW" until marked as not "NEW".')).'<br />';
             &Apache::lonnet::del('environment',['discmarkread']);              &Apache::lonnet::del('environment',['discmarkread']);
             &Apache::lonnet::delenv('environment.discmarkread');              &Apache::lonnet::delenv('environment.discmarkread');
         }          }
Line 1820  sub verify_and_change_coursepage { Line 1926  sub verify_and_change_coursepage {
             my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};               my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; 
             my ($furl,$ferr)=              my ($furl,$ferr)=
                 &Apache::lonuserstate::readmap($cdom.'/'.$cnum);                  &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
             $message .= '<br /><font size="+1"><a href="'.$furl.'">'.$lt{'gtts'}.' <i>'.&mt('now').'</i></a></font>';              $message .= '<br /><a href="'.$furl.'">'.$lt{'gtts'}.' <i>'.&mt('now').'</i></a>';
           } else {
               $message .= '<br /><a href="/adm/whatsnew?refpage='.
                           $refpage.'">'.$lt{'dasp'}.'</a>';
           }
       }
       $message = &Apache::lonhtmlcommon::confirm_success($message);
       $message = &Apache::loncommon::confirmwrapper($message);
       &print_main_menu($r,$message);
   }
   
   sub lockednameschanger {
       my $r = shift;
       &Apache::lonhtmlcommon::add_breadcrumb(
               {   href => '/adm/preferences?action=changelockednames',
                   text => 'Automatic name changes'});
       $r->print(Apache::loncommon::start_page('Automatic name changes'));
       $r->print(Apache::lonhtmlcommon::breadcrumbs('Allow/disallow name updates'));
       my %userenv = &Apache::lonnet::get('environment',['lockedname']);
       my $lockedname='';
       if (&can_toggle_namelocking()) {
           if ($userenv{'lockedname'}) {
               $lockedname = ' checked="checked"';
           }
           my %updateable;
           my %domconfig =
               &Apache::lonnet::get_dom('configuration',['autoupdate'],$env{'user.domain'});
           if (ref($domconfig{'autoupdate'}) eq 'HASH') {
               if ($domconfig{'autoupdate'}{'run'}) {
                   my @inststatuses = split(':',$env{'environment.inststatus'});
                   unless (@inststatuses) {
                       @inststatuses = ('default');
                   }
                   %updateable = &updateable_userinfo($domconfig{'autoupdate'},\@inststatuses);
               }
           }
           if (keys(%updateable)) {
               my %longnames = &Apache::lonlocal::texthash (
                                   firstname  => 'First Name',
                                   middlename => 'Middle Name',
                                   lastname   => 'Last Name',
                               );
               my $text=&mt('By default, based on your institutional affiliation, your LON-CAPA account can be automatically updated nightly based on directory information from your institution.').'<br />'.&mt('The following may be updated, unless you disallow updates:').
                        '<ul>';
              foreach my $item ('firstname','middlename','lastname') {
                  if ($updateable{$item}) {
                      $text .= '<li>'.$longnames{$item}.'</li>';
                  }
              }
              $text .= '</ul>'; 
              my $locking=&mt('Disallow automatic updates to name information for your LON-CAPA account');
              my $change=&mt('Save');
              $r->print(<<ENDSCREEN);
   <form name="prefs" action="/adm/preferences" method="post">
   <input type="hidden" name="action" value="verify_and_change_lockednames" />
   $text<br />
   <label><input type="checkbox" value="1" name="lockednames"$lockedname />$locking</label><br />
   <input type="submit" value="$change" />
   </form>
   ENDSCREEN
         } else {          } else {
             $message .= '<br /><font size="+1"><a href="/adm/whatsnew?refpage='.              my $message = &mt('Based on your institutional affiliation no name information is automatically updated for your LON-CAPA account.');
                         $refpage.'">'.$lt{'dasp'}.'</a></font>';              &print_main_menu($r,$message);
         }          }
       } else {
           my $message = &mt('You are not permitted to set a user preference for automatic name updates for your LON-CAPA account.');
           &print_main_menu($r,$message);
     }      }
     &print_main_menu($r, &Apache::lonhtmlcommon::confirm_success($message));  }
   
   sub verify_and_change_lockednames {
       my $r = shift;
       my $message;
       if (&can_toggle_namelocking()) {
           my $newlockedname = $env{'form.lockednames'};
           $newlockedname =~ s/\D//g;
           my $currlockedname = $env{'environment.lockedname'};
           if ($newlockedname ne $currlockedname) {
               if ($newlockedname) {
                   if (&Apache::lonnet::put('environment',{lockedname => $newlockedname}) eq 'ok') {
                       &Apache::lonnet::appenv({'environment.lockedname' => $newlockedname});
                   }
               } elsif (&Apache::lonnet::del('environment',['lockedname']) eq 'ok') {
                   &Apache::lonnet::delenv('environment.lockedname');
               }
           }
           my $status='';
           if ($newlockedname) {
               $status=&mt('disallowed');
           } else {
               $status=&mt('allowed');
           }
           $message=&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]','<i>'.&mt('Automatic update of first, middle and last names if institutional directory information indicates changes').'</i>','<tt>'.$status.'</tt>'));
           $message=&Apache::loncommon::confirmwrapper($message);
       }
       &print_main_menu($r,$message);
 }  }
   
 sub print_main_menu {  sub print_main_menu {
Line 1862  my @menu= Line 2057  my @menu=
     },      },
  ]   ]
     },      },
     { categorytitle=>'Page Display Settings',  
  items =>[  
     { linktext => 'Color Scheme',  
  url => '/adm/preferences?action=changecolors',  
  permission => 'F',  
  #help => 'Change_Colors',  
  icon => 'preferences-desktop-theme.png',  
  linktitle => 'Change LON-CAPA default colors.'  
     },  
     { linktext => 'Menu Display',  
  url => '/adm/preferences?action=changeicons',  
  permission => 'F',  
  #help => '',  
  icon => 'preferences-system-windows.png',  
  linktitle => 'Change whether the menus are displayed with buttons, icons or icons and text.'  
     }  
   
  ]  
     },  
     { categorytitle=>'Content Display Settings',      { categorytitle=>'Content Display Settings',
  items =>[   items =>[
     { linktext => 'Language',      { linktext => 'Language',
Line 1890  my @menu= Line 2066  my @menu=
  icon => 'preferences-desktop-locale.png',   icon => 'preferences-desktop-locale.png',
  linktitle => 'Choose the default language for this user.'   linktitle => 'Choose the default language for this user.'
     },      },
     { linktext => 'WYSIWYG Editor',  
  url => '/adm/preferences?action=changewysiwyg',  
  permission => 'F',  
  #help => '',  
  icon => 'edit-select-all.png',  
  linktitle => 'Enable or disable the WYSIWYG-Editor.'  
     },  
     { linktext => $role.' Page',      { linktext => $role.' Page',
  url => '/adm/preferences?action=changerolespref',   url => '/adm/preferences?action=changerolespref',
  permission => 'F',   permission => 'F',
  #help => '',   #help => '',
  icon => 'sctr.png',   icon => 'role_hotlist.png',
  linktitle => 'Configure the roles hotlist.'   linktitle => 'Configure the roles hotlist.'
     },      },
     { linktext => 'Math display settings',      { linktext => 'Math display settings',
  url => '/adm/preferences?action=changetexenginepref',   url => '/adm/preferences?action=changetexenginepref',
  permission => 'F',   permission => 'F',
  #help => '',   #help => '',
  icon => 'stat.png',   icon => 'dismath.png',
  linktitle => 'Change how math is displayed.'   linktitle => 'Change how math is displayed.'
     },      },
  ]   ]
     },      },
       { categorytitle=>'Page Display Settings',
    items =>[
       { linktext => 'Color Scheme',
    url => '/adm/preferences?action=changecolors',
    permission => 'F',
    #help => 'Change_Colors',
    icon => 'preferences-desktop-theme.png',
    linktitle => 'Change LON-CAPA default colors.'
       },
               {   linktext => 'Menu Display',
                   url => '/adm/preferences?action=changeicons',
                   permission => 'F',
                   #help => '',
                   icon => 'preferences-system-windows.png',
                   linktitle => 'Change whether the menus are displayed with icons or icons and text.'
               }
    ]
       },
     { categorytitle=>'Messages &amp; Notifications',      { categorytitle=>'Messages &amp; Notifications',
  items =>[   items =>[
     { linktext => 'Messages &amp; Notifications',      { linktext => 'Messages &amp; Notifications',
Line 1926  my @menu= Line 2113  my @menu=
  url => '/adm/preferences?action=changediscussions',   url => '/adm/preferences?action=changediscussions',
  permission => 'F',   permission => 'F',
  #help => 'Change_Discussion_Display',   #help => 'Change_Discussion_Display',
  icon => 'mail-message-new.png',   icon => 'chat.png',
  linktitle => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.'   linktitle => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.'
     },      },
  ]   ]
Line 1954  push(@{ $menu[0]->{items} }, { Line 2141  push(@{ $menu[0]->{items} }, {
  linktitle => 'Change your password.',   linktitle => 'Change your password.',
  });   });
     }      }
     if ($env{'environment.remote'} eq 'off') {  
 push(@{ $menu[1]->{items} }, {      if (&can_toggle_namelocking()) {
  linktext => 'Launch Remote Control',          push(@{ $menu[0]->{items} }, {
  url => '/adm/remote?url=/adm/preferences&amp;action=launch',          linktext => 'Automatic name changes',
  permission => 'F',          url => '/adm/preferences?action=changelockednames',
  #help => '',          permission => 'F',
  icon => 'remotecontrol.png',          #help => '',
  linktitle => 'Launch the remote control for LON-CAPA.',          icon => 'system-lock-screen.png',
  });          linktitle => 'Allow/disallow propagation of name changes from institutional directory service',
     }else{          });
 push(@{ $menu[1]->{items} }, {  
  linktext => 'Collapse Remote Control',  
  url => '/adm/remote?url=/adm/preferences&amp;action=collapse',  
  permission => 'F',  
  #help => '',  
  icon => 'remotecontrol.png',  
  linktitle => 'Collapse the remote control for LON-CAPA.',  
  });  
     }      }
   
     my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au']);      my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au']);
     if (keys(%author_roles) > 0) {      if (keys(%author_roles) > 0) {
 push(@{ $menu[4]->{items} }, {  push(@{ $menu[4]->{items} }, {
Line 1993  push(@{ $menu[4]->{items} }, { Line 2173  push(@{ $menu[4]->{items} }, {
  url => '/adm/preferences?action=changecourseinit',   url => '/adm/preferences?action=changecourseinit',
  permission => 'F',   permission => 'F',
  #help => '',   #help => '',
  icon => 'edit-copy.png',   icon => 'course_ini.png',
  linktitle => 'Set the default page to be displayed when you select a course role.',   linktitle => 'Set the default page to be displayed when you select a course role.',
  });   });
   
Line 2007  push(@{ $menu[4]->{items} }, { Line 2187  push(@{ $menu[4]->{items} }, {
  icon => 'blog.png',   icon => 'blog.png',
  linktitle => 'Toggle Debug Messages.',   linktitle => 'Toggle Debug Messages.',
  });   });
     }         }
   
     $r->print(&Apache::loncommon::start_page('My Space'));      $r->print(&Apache::loncommon::start_page('My Space'));
     $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Preferences'));      $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Preferences'));
Line 2035  sub handler { Line 2215  sub handler {
                                    ['action','wysiwyg','returnurl','refpage']);                                     ['action','wysiwyg','returnurl','refpage']);
     #      #
     Apache::lonhtmlcommon::clear_breadcrumbs();      Apache::lonhtmlcommon::clear_breadcrumbs();
       my ($brlink,$brtxt,$brhelp);
       if (($env{'form.action'} eq 'changerolespref') && ($env{'form.returnurl'} eq '/adm/roles')) {
           $brlink ='/adm/roles';
           $brtxt = 'User Roles';
       } else {
           $brlink ='/adm/preferences';
           $brtxt = 'Set User Preferences';
           $brhelp = 'Prefs_About_Me,Prefs_Language,Prefs_Screen_Name_Nickname,Change_Colors,Change_Password,Prefs_Messages,Change_Discussion_Display';   
       }
     Apache::lonhtmlcommon::add_breadcrumb      Apache::lonhtmlcommon::add_breadcrumb
         ({href => '/adm/preferences',          ({href => $brlink,
           text => 'Set User Preferences',            text => $brtxt,
           help =>            help => $brhelp,});
           'Prefs_About_Me,Prefs_Language,Prefs_Screen_Name_Nickname,Change_Colors,Change_Password,Prefs_Messages,Change_Discussion_Display'});  
     if(!exists $env{'form.action'}) {      if(!exists $env{'form.action'}) {
     &print_main_menu($r);      &print_main_menu($r);
     }elsif($env{'form.action'} eq 'changepass'){      }elsif($env{'form.action'} eq 'changepass'){
Line 2103  sub handler { Line 2291  sub handler {
             &toggle_debug();              &toggle_debug();
         }          }
  &print_main_menu($r);   &print_main_menu($r);
       } elsif ($env{'form.action'} eq 'changelockednames') {
           &lockednameschanger($r);
       } elsif ($env{'form.action'} eq 'verify_and_change_lockednames') {
           &verify_and_change_lockednames($r);
     }      }
   
     # Properly end the HTML page of all preference pages      # Properly end the HTML page of all preference pages
Line 2135  sub can_toggle_debug { Line 2327  sub can_toggle_debug {
     return $can_toggle;      return $can_toggle;
 }  }
   
   sub can_toggle_namelocking {
       my $lockablenames;
       my %domconfig =
           &Apache::lonnet::get_dom('configuration',['autoupdate'],$env{'user.domain'});
       if (ref($domconfig{'autoupdate'}) eq 'HASH') {
           if ($domconfig{'autoupdate'}{'run'}) {
               my @inststatuses = split(':',$env{'environment.inststatus'});
               unless (@inststatuses) {
                   @inststatuses = ('default');
               }
               my %updateable = &updateable_userinfo($domconfig{'autoupdate'},\@inststatuses);
               if ($updateable{'lastname'} || $updateable{'firstname'} ||
                   $updateable{'middlename'}) { 
                   if (ref($domconfig{'autoupdate'}{'lockablenames'}) eq 'ARRAY') {
                       unless (@inststatuses) {
                           @inststatuses = ('default');
                       }
                       foreach my $status (@inststatuses) {
                           if (grep(/^\Q$status\E$/,@{$domconfig{'autoupdate'}{'lockablenames'}})) {
                               $lockablenames = 1;
                               last;
                           }
                       }
                   }
               }
           }
       }
       return $lockablenames;
   }
   
   sub updateable_userinfo {
       my ($autoupdate,$inststatuses) = @_;
       my %updateable;
       return %updateable unless ((ref($autoupdate) eq 'HASH') && 
                                  (ref($inststatuses) eq 'ARRAY'));
       if (ref($autoupdate->{'fields'}) eq 'HASH') {
           foreach my $status (@{$inststatuses}) {
               if (ref($autoupdate->{'fields'}{$status}) eq 'ARRAY') {
                   foreach my $field (@{$autoupdate->{'fields'}{$status}}) {
                       $updateable{$field} = 1;
                   }
               }
           }
       }
       return %updateable;
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.179  
changed lines
  Added in v.1.200


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