--- loncom/interface/lonpreferences.pm	2004/03/26 20:26:30	1.40
+++ loncom/interface/lonpreferences.pm	2004/11/02 00:17:24	1.49
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Preferences
 #
-# $Id: lonpreferences.pm,v 1.40 2004/03/26 20:26:30 www Exp $
+# $Id: lonpreferences.pm,v 1.49 2004/11/02 00:17:24 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -25,8 +25,6 @@
 #
 # http://www.lon-capa.org/
 #
-# 2/13/02 2/14 2/15 Matthew Hall
-#
 # This package uses the "londes.js" javascript code. 
 #
 # TODOs that have to be completed:
@@ -94,6 +92,41 @@ sub des_decrypt {
 ################################################################
 #         Language Change Subroutines                          #
 ################################################################
+
+sub wysiwygchanger {
+    my $r = shift;
+    my %userenv = &Apache::lonnet::get
+        ('environment',['wysiwygeditor']);
+    my $offselect='';
+    my $onselect='checked="1"';
+    if ($userenv{'wysiwygeditor'}) {
+	$onselect='';
+	$offselect='checked="1"';
+    }
+    my $switchoff=&mt('Disable WYSIWYG editor');
+    my $switchon=&mt('Enable WYSIWYG editor');
+    $r->print(<<ENDLSCREEN);
+<form name="server" action="/adm/preferences" method="post">
+<input type="hidden" name="action" value="set_wysiwyg" />
+<br />
+<input type="radio" name="wysiwyg" value="off" $onselect /> $switchoff<br />
+<input type="radio" name="wysiwyg" value="on" $offselect /> $switchon
+ENDLSCREEN
+    $r->print('<br /><input type="submit" value="'.&mt('Change').'" />');
+}
+
+
+sub verify_and_change_wysiwyg {
+    my $r = shift;
+    my $newsetting=$ENV{'form.wysiwyg'};
+    &Apache::lonnet::put('environment',{'wysiwygeditor' => $newsetting});
+    &Apache::lonnet::appenv('environment.wysiwygeditor' => $newsetting);
+    $r->print('<p>'.&mt('Setting WYSIWYG editor to:').' '.&mt($newsetting).'</p>');
+}
+
+################################################################
+#         Language Change Subroutines                          #
+################################################################
 sub languagechanger {
     my $r = shift;
     my $user       = $ENV{'user.name'};
@@ -628,6 +661,149 @@ ENDERROR
     return;
 }
 
+################################################################
+#            discussion display subroutines 
+################################################################
+sub discussionchanger {
+    my $r = shift;
+    my $user       = $ENV{'user.name'};
+    my $domain     = $ENV{'user.domain'};
+    my %userenv = &Apache::lonnet::get
+        ('environment',['discdisplay','discmarkread']);
+    my $discdisp = 'allposts';
+    my $discmark = 'onmark';
+
+    if (defined($userenv{'discdisplay'})) {
+        unless ($userenv{'discdisplay'} eq '') { 
+            $discdisp = $userenv{'discdisplay'};
+        }
+    }
+    if (defined($userenv{'discmarkread'})) {
+        unless ($userenv{'discdisplay'} eq '') { 
+            $discmark = $userenv{'discmarkread'};
+        }
+    }
+
+    my $newdisp = 'unread';
+    my $newmark = 'ondisp';
+
+    my $function = &Apache::loncommon::get_users_function();
+    my $color = &Apache::loncommon::designparm($function.'.tabbg',
+                                                    $ENV{'user.domain'});
+    my %lt = &Apache::lonlocal::texthash(
+        'pref' => 'Display Preference',
+        'curr' => 'Current setting ',
+        'actn' => 'Action',
+        'sdpf' => 'Set display preferences for discussion posts for both bulletin boards and individual resources in all your courses.',
+        'prca' => 'Preferences can be set that determine',
+        'whpo' => 'Which posts are displayed when you display a bulletin board or resource, and',
+        'unwh' => 'Under what circumstances posts are identfied as "New"',
+        'allposts' => 'All posts',
+        'unread' => 'New posts only',
+        'ondisp' => 'Once displayed',
+        'onmark' => 'Once marked as read',
+        'disa' => 'Posts displayed?',
+        'npmr' => 'New posts cease to be identified as "New"?',
+        'thde'  => 'The preferences you set here can be overridden within each individual discussion.',
+        'chgt' => 'Change to '
+    );
+    my $dispchange = $lt{'unread'};
+    my $markchange = $lt{'ondisp'};
+    my $currdisp = $lt{'allposts'};
+    my $currmark = $lt{'onmark'};
+
+    if ($discdisp eq 'unread') {
+        $dispchange = $lt{'allposts'};
+        $currdisp = $lt{'unread'};
+        $newdisp = 'allposts';
+    }
+
+    if ($discmark eq 'ondisp') {
+        $markchange = $lt{'onmark'};
+        $currmark = $lt{'ondisp'};
+        $newmark = 'onmark';
+    }
+    
+    $r->print(<<"END");
+<form name="server" action="/adm/preferences" method="post">
+<input type="hidden" name="action" value="verify_and_change_discussion" />
+<br />
+$lt{'sdpf'}<br/> $lt{'prca'}  <ol><li>$lt{'whpo'}</li><li>$lt{'unwh'}</li></ol> 
+<br />
+<br />
+<table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+  <td width="100%" bgcolor="#000000">
+   <table width="100%" border="0" cellpadding="1" cellspacing="0">
+    <tr>
+     <td width="100%" bgcolor="#000000">
+      <table border="0" cellpadding="3" cellspacing="3" bgcolor="#FFFFFF">
+       <tr bgcolor="$color">
+        <td><b>$lt{'pref'}</b></td>
+        <td><b>$lt{'curr'}</b></td>
+        <td><b>$lt{'actn'}?</b></td>
+       </tr>
+       <tr bgcolor="#dddddd">
+       <td>$lt{'disa'}</td>
+       <td>$lt{$discdisp}</td>
+       <td><input type="checkbox" name="discdisp" /><input type="hidden" name="newdisp" value="$newdisp" />&nbsp;$lt{'chgt'} "$dispchange"</td>
+      </tr><tr bgcolor="#eeeeee">
+       <td>$lt{'npmr'}</td>
+       <td>$lt{$discmark}</td>
+       <td><input type="checkbox" name="discmark" /><input type="hidden" name="newmark" value="$newmark" />&nbsp;$lt{'chgt'} "$markchange"</td>
+      </tr>
+     </table>
+    </td>
+   </tr>
+  </table>
+ </td>
+</tr>
+</table>
+<br />
+<br />
+<input type="submit" name="sub" value="Store Changes" />
+<br />
+<br />
+Note: $lt{'thde'}
+</form>
+END
+}
+                                                                                                                
+sub verify_and_change_discussion {
+    my $r = shift;
+    my $user     = $ENV{'user.name'};
+    my $domain   = $ENV{'user.domain'};
+    my $message='';
+    if (defined($ENV{'form.discdisp'}) ) {
+        my $newdisp  = $ENV{'form.newdisp'};
+        if ($newdisp eq 'unread') {
+            $message .='In discussions: only new posts will be displayed.<br/>';
+            &Apache::lonnet::put('environment',{'discdisplay' => $newdisp});
+            &Apache::lonnet::appenv('environment.discdisplay' => $newdisp);
+        } else {
+            $message .= 'In discussions: all posts will be displayed.<br/>';
+            &Apache::lonnet::del('environment',['discdisplay']);
+            &Apache::lonnet::delenv('environment\.discdisplay');
+        }
+    }
+    if (defined($ENV{'form.discmark'}) ) {
+        my $newmark = $ENV{'form.newmark'};
+        if ($newmark eq 'ondisp') {
+           $message.='In discussions: new posts will be cease to be identified as "new" after display.<br/>';
+            &Apache::lonnet::put('environment',{'discmarkread' => $newmark});
+            &Apache::lonnet::appenv('environment.discmarkread' => $newmark);
+        } else {
+            $message.='In discussions: posts will be identified as "new" until marked as read by the reader.<br/>';
+            &Apache::lonnet::del('environment',['discmarkread']);
+            &Apache::lonnet::delenv('environment\.discmarkread');
+        }
+    }
+    $r->print(<<ENDVCSCREEN);
+</p>
+$message
+ENDVCSCREEN
+}
+
 ######################################################
 #            other handler subroutines               #
 ######################################################
@@ -646,7 +822,7 @@ sub handler {
     return OK if $r->header_only;
     #
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
-                                            ['action']);
+                                            ['action','wysiwyg','returnurl']);
     #
     &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::lonhtmlcommon::add_breadcrumb
@@ -692,8 +868,7 @@ sub handler {
                       }));
 
     push (@Options,({ action   => 'changemsgforward',
-                      linktext => 'Change Message Forwarding',
-                      text     => 'and Notification Addresses',
+                      linktext => 'Change Message Forwarding and Notification Addresses',
                       href     => '/adm/preferences',
                       help     => 'Prefs_Forwarding',
                       breadcrumb => 
@@ -711,7 +886,8 @@ sub handler {
         '/adm/'.$ENV{'user.domain'}.'/'.$ENV{'user.name'}.'/aboutme';
     push (@Options,{ action => 'none', 
                      linktext =>
-                         q{Edit the 'About Me' personal information screen},
+                         q{Edit the 'About Me' Personal Information Screen},
+		     help => 'Prefs_About_Me',
                      href => $aboutmeaction});
     push (@Options,({ action => 'changecolors',
                       linktext => 'Change Color Scheme',
@@ -732,6 +908,7 @@ sub handler {
     push (@Options,({ action => 'changelanguages',
                       linktext => 'Change Language Preferences',
                       href => '/adm/preferences',
+		      help => 'Prefs_Language',
                       breadcrumb=>
                           { href => '/adm/preferences?action=changelanguages',
                             text => 'Change Language'},
@@ -744,6 +921,38 @@ sub handler {
                       printmenu => 'yes',
                       subroutine=>\&verify_and_change_languages, }
                     ));
+    push (@Options,({ action => 'changewysiwyg',
+                      linktext => 'Change WYSIWYG Editor Preferences',
+                      href => '/adm/preferences',
+                      breadcrumb => 
+                            { href => '/adm/preferences?action=changewysiwyg',
+                              text => 'Change WYSIWYG Preferences'},
+                      subroutine => \&wysiwygchanger,
+                  },
+                    { action => 'set_wysiwyg',
+                      breadcrumb =>
+                          { href => '/adm/preferences?action=changewysiwyg',
+                            text => 'Change WYSIWYG Preferences'},
+                      printmenu => 'yes',
+                      subroutine => \&verify_and_change_wysiwyg, }
+                    ));
+    push (@Options,({ action => 'changediscussions',
+                      linktext => 'Change Discussion Display Preferences',
+                      href => '/adm/preferences',
+                      help => 'Change_Discussion_Display',
+                      breadcrumb => 
+                            { href => '/adm/preferences?action=changediscussions',
+                              text => 'Change Discussion Preferences'},
+                      subroutine => \&discussionchanger,
+                  },
+                    { action => 'verify_and_change_discussion',
+                      breadcrumb =>
+                          { href => '/adm/preferences?action=changediscussions',
+                            text => 'Change Discussion Preferences'},
+                      printmenu => 'yes',
+                      subroutine => \&verify_and_change_discussion, }
+                    ));
+                       
     if ($ENV{'user.name'} =~ /^(albertel|koretemey|korte|hallmat3|turtle)$/) {
         push (@Options,({ action => 'debugtoggle',
                           printmenu => 'yes',
@@ -757,6 +966,7 @@ sub handler {
 </head>
 ENDHEADER
     my $call = undef;
+    my $help = undef;
     my $printmenu = 'yes';
     foreach my $option (@Options) {
         if ($option->{'action'} eq $ENV{'form.action'}) {
@@ -766,15 +976,16 @@ ENDHEADER
                 &Apache::lonhtmlcommon::add_breadcrumb
                     ($option->{'breadcrumb'});
             }
+	    $help=$option->{'help'};
         }
     }
     $r->print(&Apache::loncommon::bodytag('Change Preferences'));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs
-              (undef,'Change Preferences'));
+              (undef,'Change Preferences',$help));
     if (defined($call)) {
         $call->($r);
     }
-    if ($printmenu eq 'yes') {
+    if (($printmenu eq 'yes') && (!$ENV{'form.returnurl'})) {
         my $optionlist = '<table cellpadding="5">';
         if ($ENV{'user.name'} =~ 
                          /^(albertel|kortemey|korte|hallmat3|turtle)$/
@@ -794,10 +1005,10 @@ ENDHEADER
                 $optiontext .= 
                     '<a href="'.$option->{'href'}.
                     '?action='.$option->{'action'}.'">'.
-                    $option->{'linktext'}.'</a>';
+                    &mt($option->{'linktext'}).'</a>';
             }
             if (exists($option->{'text'})) {
-                $optiontext .= ' '.$option->{'text'};
+                $optiontext .= ' '.&mt($option->{'text'});
             }
             if ($optiontext ne '') {
                 $optiontext = '<font size="+1">'.$optiontext.'</font>'; 
@@ -814,6 +1025,9 @@ ENDHEADER
         }
         $optionlist .= '</table>';
         $r->print($optionlist);
+    } elsif ($ENV{'form.returnurl'}) {
+	$r->print('<br /><a href="'.$ENV{'form.returnurl'}.'"><font size="+1">'.
+		  &mt('Return').'</font></a>');
     }
     $r->print(<<ENDFOOTER);
 </body>