[LON-CAPA-cvs] cvs: loncom(version_2_10_X) /interface lonfeedback.pm

raeburn raeburn@source.lon-capa.org
Sat, 14 Aug 2010 18:14:29 -0000


This is a MIME encoded message

--raeburn1281809669
Content-Type: text/plain

raeburn		Sat Aug 14 18:14:29 2010 EDT

  Modified files:              (Branch: version_2_10_X)
    /loncom/interface	lonfeedback.pm 
  Log:
  - Backport 1.294, 1.295, 1.296, 1.297, 1.298, 1.299.
  
  
--raeburn1281809669
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20100814181429.txt"

Index: loncom/interface/lonfeedback.pm
diff -u loncom/interface/lonfeedback.pm:1.290.2.1 loncom/interface/lonfeedback.pm:1.290.2.2
--- loncom/interface/lonfeedback.pm:1.290.2.1	Thu May 27 14:34:41 2010
+++ loncom/interface/lonfeedback.pm	Sat Aug 14 18:14:29 2010
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Feedback
 #
-# $Id: lonfeedback.pm,v 1.290.2.1 2010/05/27 14:34:41 raeburn Exp $
+# $Id: lonfeedback.pm,v 1.290.2.2 2010/08/14 18:14:29 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -49,15 +49,24 @@
 
 sub discussion_open {
     my ($status,$symb)=@_;
+# Advanced roles can always discuss
     if ($env{'request.role.adv'}) { return 1; }
+# Get discussion closing date
+    my $close=&Apache::lonnet::EXT('resource.0.discussend',$symb);
+# If it is defined and in the future, the instructor wants this discussion to be open
+    if (defined($close) && $close ne '' && $close > time) {
+        return 1;
+    }
+# It was not explicitly open, check if the problem is available.
+# If the problem is not available, close the discussion
     if (defined($status) &&
-	!($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER'
-	  || $status eq 'OPEN')) {
-	return 0;
+        !($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER'
+          || $status eq 'OPEN')) {
+        return 0;
     }
-    my $close=&Apache::lonnet::EXT('resource.0.discussend',$symb);
+# The problem is available, but check if the instructor explictly closed discussion
     if (defined($close) && $close ne '' && $close < time) {
-	return 0;
+        return 0;
     }
     return 1;
 }
@@ -317,6 +326,7 @@
         'dpwn' => 'Deleted posts will no longer be visible to you and other students',
         'bwco' => 'but will continue to be visible to your instructor',
         'depo' => 'Deleted posts will no longer be visible to you or anyone else.',
+        'discussions' => 'DISCUSSIONS'
     );
 
     my $currdisp = $lt{'allposts'};
@@ -368,8 +378,7 @@
 # Print the discusssion
         if ($outputtarget eq 'tex') {
             $discussion.='<tex>{\tiny \vskip 0 mm\noindent\makebox[2 cm][b]{\hrulefill}'.
-                         '\textbf{DISCUSSIONS}\makebox[2 cm][b]{\hrulefill}'.
-                         '\vskip 0 mm\noindent\textbf{'.$lt{'cuse'}.'}:\vskip 0 mm'.
+                         '\textbf{'.$lt{'discussions'}.'}\makebox[2 cm][b]{\hrulefill}\vskip 0 mm'.
                          '\noindent\textbf{'.$lt{'disa'}.'}: \textit{'.$currdisp.'}\vskip 0 mm'.
                          '\noindent\textbf{'.$lt{'npce'}.'}: \textit{'.$currmark.'}}</tex>';
         } elsif ($outputtarget eq 'export') {
@@ -514,7 +523,6 @@
 			$threadinsert='<br /><strong>Reply: '.$thisdepth.'</strong>';
 		    }
 		    $discussionitems[$alldiscussion{$post}]=~s/<\/td><td([^>]*)>/$threadinsert<\/td><td TeXwidth="65 mm" align="left">/;
-		    $discussionitems[$alldiscussion{$post}]=~s/<a([^>]+)>(Edit|Hide|Delete|Reply|Submissions)<\/a>//g;
                     $discussionitems[$alldiscussion{$post}]=~s/(<b>|<\/b>|<\/a>|<a([^>]+)>)//g;
 
 		    $discussionitems[$alldiscussion{$post}]='<tex>\vskip 0 mm\noindent\makebox[2 cm][b]{\hrulefill}</tex>'.$discussionitems[$alldiscussion{$post}];
@@ -719,7 +727,7 @@
                 $attachnum += @{$currnewattach};
             }
         }
-	if (&discussion_open($status)) {
+	if (&discussion_open($status) && ($outputtarget ne 'tex')) {
             if (($group ne '') && ($mode eq 'board')) {  
                 if (&check_group_priv($group,'pgd') eq 'ok') {
                     $discussion .=
@@ -735,20 +743,25 @@
 					 $currnewattach,$currdelold,'',$crstype);
             }
 	}
-    } else {
+    } elsif ($outputtarget ne 'tex') {
         $discussion.='<div class="LC_feedback_link">';
         if (&discussion_open($status) &&
             &Apache::lonnet::allowed('pch',
     	        $env{'request.course.id'}.
 	        ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) {
-	    if ($outputtarget ne 'tex') {
-		$discussion.= &send_feedback_link($ressymb,$target);
+	    $discussion.= &send_feedback_link($ressymb,$target);
+            if ($env{'request.role.adv'}) {
+                my $close = &Apache::lonnet::EXT('resource.0.discussend',$ressymb);
+                if (defined($close) && $close ne '' && $close < time) {
+                    $discussion .= '&nbsp;'.&mt('(Closed for [_1] roles)',
+                                                &Apache::lonnet::plaintext('st',$crstype));
+                }
             }
-	}
-        if ($outputtarget ne 'tex') {
-	    $discussion.= &send_message_link($ressymb);
+        } else {
+            $discussion.= '<span class="LC_feedback_link">'.&mt('This discussion is closed.').'</span>';
         }
-        $discussion.='</div>';
+	$discussion.= &send_message_link($ressymb).
+                      '</div>';
     }
     return $discussion;
 }
@@ -839,7 +852,12 @@
     if ($crstype eq 'Community') {
         $lt{'note'} = &mt('Note: in anonymous discussion, your name is visible only to community facilitators');
     }
-    my $postingform = (<<ENDDISCUSS);
+    my ($postingform,$textareaclass);
+    if (&Apache::lonhtmlcommon::htmlareabrowser()) {
+        $postingform = &Apache::lonhtmlcommon::htmlareaselectactive();
+        $textareaclass = 'class="LC_richDefaultOff"';
+    }
+    $postingform .= (<<ENDDISCUSS);
 <form action="/adm/feedback" method="post" name="mailform" enctype="multipart/form-data"> <input type="submit" name="discuss" value="$lt{'podi'}" />
 <input type="submit" name="anondiscuss" value="$lt{'poan'}" /> <input type="hidden" name="symb" value="$ressymb" />
 <input type="hidden" name="sendit" value="true" />
@@ -847,7 +865,7 @@
 <br /><a name="newpost"></a>
 <font size="1">$lt{'note'}</font><br />
 <b>$lt{'title'}:</b>&nbsp;<input type="text" name="subject" value="$subject" size="30" /><br /><br />
-<textarea name="comment" cols="80" rows="14" >$comment</textarea>
+<textarea name="comment" cols="80" rows="14"id="comment" $textareaclass>$comment</textarea>
 ENDDISCUSS
     if ($env{'form.origpage'}) {
         $postingform .= '<input type="hidden" name="origpage" value="'.
@@ -869,28 +887,26 @@
         $postingform .= &add_blog_checkbox($crstype);
     }
     $postingform .= "</form>\n";
-    if ($outputtarget ne 'tex') {
-        $postingform .= &generate_attachments_button('',$attachnum,$ressymb,
-                                                     $now,$currnewattach,
-                                                     $currdelold,'',$mode,
-                                                     $blockblog);
-        if ((ref($currnewattach) eq 'ARRAY') && (@{$currnewattach} > 0)) {
-            $newattachmsg = '<br /><b>'.$lt{'newa'}.'</b><br />';
-            if (@{$currnewattach} > 1) {
-                $newattachmsg .= '<ol>';
-                foreach my $item (@{$currnewattach}) {
-                    $item =~ m#.*/([^/]+)$#;
-                    $newattachmsg .= '<li><a href="'.$item.'">'.$1.'</a></li>'."\n";
-                }
-                $newattachmsg .= '</ol>'."\n";
-            } else {
-                $$currnewattach[0] =~ m#.*/([^/]+)$#;
-                $newattachmsg .= '<a href="'.$$currnewattach[0].'">'.$1.'</a><br />'."\n";
+    $postingform .= &generate_attachments_button('',$attachnum,$ressymb,
+                                                 $now,$currnewattach,
+                                                 $currdelold,'',$mode,
+                                                 $blockblog);
+    if ((ref($currnewattach) eq 'ARRAY') && (@{$currnewattach} > 0)) {
+        $newattachmsg = '<br /><b>'.$lt{'newa'}.'</b><br />';
+        if (@{$currnewattach} > 1) {
+            $newattachmsg .= '<ol>';
+            foreach my $item (@{$currnewattach}) {
+                $item =~ m#.*/([^/]+)$#;
+                $newattachmsg .= '<li><a href="'.$item.'">'.$1.'</a></li>'."\n";
             }
+            $newattachmsg .= '</ol>'."\n";
+        } else {
+            $$currnewattach[0] =~ m#.*/([^/]+)$#;
+            $newattachmsg .= '<a href="'.$$currnewattach[0].'">'.$1.'</a><br />'."\n";
         }
-        $postingform .= $newattachmsg;
-        $postingform .= &generate_preview_button();
     }
+    $postingform .= $newattachmsg;
+    $postingform .= &generate_preview_button();
     return $postingform;
 }
 
@@ -1052,46 +1068,48 @@
                             } else {
                                 @{$$namesort{$lastname}{$firstname}} = ("$idx");
                             }
-                            if (&editing_allowed($escsymb.':::'.$idx,$group)) {
-                                if (($env{'user.domain'} eq $contrib{$idx.':senderdomain'}) && ($env{'user.name'} eq $contrib{$idx.':sendername'})) {
-                                    $sender.=' <a href="/adm/feedback?editdisc='.
-                                         $escsymb.':::'.$idx;
-                                    if ($$newpostsflag) {
-                                        $sender .= '&amp;previous='.$prevread;
-                                    }
-				    $sender .= &group_args($group);
-                                    $sender .= '" '.$target.'>'.&mt('Edit').'</a>';
+                            if ($outputtarget ne 'tex') {
+                                if (&editing_allowed($escsymb.':::'.$idx,$group)) {
+                                    if (($env{'user.domain'} eq $contrib{$idx.':senderdomain'}) && ($env{'user.name'} eq $contrib{$idx.':sendername'})) {
+                                        $sender.=' <a href="/adm/feedback?editdisc='.
+                                             $escsymb.':::'.$idx;
+                                        if ($$newpostsflag) {
+                                            $sender .= '&amp;previous='.$prevread;
+                                        }
+				        $sender .= &group_args($group);
+                                        $sender .= '" '.$target.'>'.&mt('Edit').'</a>';
                                     
-                                    unless ($seeid) {
-                                        my $grpargs = &group_args($group);
-                                        $sender.=" <a href=\"javascript:verifydelete('studentdelete','$escsymb','$idx','$$newpostsflag','$prevread','$grpargs')";
-                                        $sender .= '">'.&mt('Delete').'</a>';
+                                        unless ($seeid) {
+                                            my $grpargs = &group_args($group);
+                                            $sender.=" <a href=\"javascript:verifydelete('studentdelete','$escsymb','$idx','$$newpostsflag','$prevread','$grpargs')";
+                                            $sender .= '">'.&mt('Delete').'</a>';
+                                        }
                                     }
                                 }
-                            } 
-			    if ($seeid) {
-			        if ($hidden) {
-                                    unless ($studenthidden) {
-			                $sender.=' <a href="/adm/feedback?unhide='.
-				                $escsymb.':::'.$idx;
+                                if ($seeid) {
+			            if ($hidden) {
+                                        unless ($studenthidden) {
+			                    $sender.=' <a href="/adm/feedback?unhide='.
+				                    $escsymb.':::'.$idx;
+                                            if ($$newpostsflag) {
+                                                $sender .= '&amp;previous='.$prevread;
+                                            }
+                                            $sender .= '">'.&mt('Make Visible').'</a>';
+                                        }
+			            } else {
+				        $sender.=' <a href="/adm/feedback?hide='.
+				            $escsymb.':::'.$idx;
                                         if ($$newpostsflag) {
                                             $sender .= '&amp;previous='.$prevread;
                                         }
-                                        $sender .= '">'.&mt('Make Visible').'</a>';
-                                    }
-			        } else {
-				    $sender.=' <a href="/adm/feedback?hide='.
-				        $escsymb.':::'.$idx;
-                                    if ($$newpostsflag) {
-                                        $sender .= '&amp;previous='.$prevread;
-                                    }
-				    $sender .= &group_args($group);
-                                    $sender .= '">'.&mt('Hide').'</a>';
-			        }
-                                my $grpargs = &group_args($group);
-			        $sender.= 
-                                    " <a href=\"javascript:verifydelete('seeiddelete','$escsymb','$idx','$$newpostsflag','$prevread','$grpargs')\">";
-                                $sender .= &mt('Delete').'</a>';
+				        $sender .= &group_args($group);
+                                        $sender .= '">'.&mt('Hide').'</a>';
+			            }
+                                    my $grpargs = &group_args($group);
+			            $sender.= 
+                                        " <a href=\"javascript:verifydelete('seeiddelete','$escsymb','$idx','$$newpostsflag','$prevread','$grpargs')\">";
+                                    $sender .= &mt('Delete').'</a>';
+                                }
                             }
 		        } else {
 			    if ($screenname) {
@@ -1119,36 +1137,38 @@
                                 @{$$namesort{'__anon'}{'__anon'}} = ("$idx");
                             }
 		        }
-		        if (&discussion_open($status)) {
-                            if (($group ne '') && 
-                                (&check_group_priv($group,'pgd') eq 'ok')) {
-                                 $sender.=' <a href="/adm/feedback?replydisc='.
-                                          $escsymb.':::'.$idx;
-                                if ($$newpostsflag) {
-                                    $sender .= '&amp;previous='.$prevread;
-                                }
-                                $sender .= &group_args($group);
-                                $sender .= '" '.$target.'>'.&mt('Reply').'</a>';
-                            } elsif (&Apache::lonnet::allowed('pch', 
-				 $env{'request.course.id'}.
-				 ($env{'request.course.sec'}?'/'.
-                                  $env{'request.course.sec'}:''))) {
-			         $sender.=' <a href="/adm/feedback?replydisc='.
-			                  $escsymb.':::'.$idx;
-                                if ($$newpostsflag) {
-                                    $sender .= '&amp;previous='.$prevread;
+                        if ($outputtarget ne 'tex') {
+                            if (&discussion_open($status)) {
+                                if (($group ne '') && 
+                                    (&check_group_priv($group,'pgd') eq 'ok')) {
+                                     $sender.=' <a href="/adm/feedback?replydisc='.
+                                              $escsymb.':::'.$idx;
+                                    if ($$newpostsflag) {
+                                        $sender .= '&amp;previous='.$prevread;
+                                    }
+                                    $sender .= &group_args($group);
+                                    $sender .= '" '.$target.'>'.&mt('Reply').'</a>';
+                                } elsif (&Apache::lonnet::allowed('pch', 
+				     $env{'request.course.id'}.
+				     ($env{'request.course.sec'}?'/'.
+                                      $env{'request.course.sec'}:''))) {
+			             $sender.=' <a href="/adm/feedback?replydisc='.
+			                      $escsymb.':::'.$idx;
+                                    if ($$newpostsflag) {
+                                        $sender .= '&amp;previous='.$prevread;
+                                    }
+                                    $sender .= '" '.$target.'>'.&mt('Reply').'</a>';
                                 }
-                                $sender .= '" '.$target.'>'.&mt('Reply').'</a>';
                             }
-                        }
-		        if ($viewgrades) {
+                            if ($viewgrades) {
 			        $vgrlink=&Apache::loncommon::submlink(&mt('Submissions'),
-                            $contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'},$ressymb);
-		        }
-                        if ($$dischash{$readkey}=~/\.$idx\./) { 
-                            $ctlink = '<label><b>'.&mt('Mark unread').'?</b>&nbsp;<input type="checkbox" name="postunread_'.$idx.'" /></label>';
-                        } else {
-                            $ctlink = '<label><b>'.&mt('Mark read').'?</b>&nbsp;<input type="checkbox" name="postread_'.$idx.'" /></label>';
+                                $contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'},$ressymb);
+		            }
+                            if ($$dischash{$readkey}=~/\.$idx\./) {
+                                $ctlink = '<label><b>'.&mt('Mark unread').'?</b>&nbsp;<input type="checkbox" name="postunread_'.$idx.'" /></label>';
+                            } else {
+                                $ctlink = '<label><b>'.&mt('Mark read').'?</b>&nbsp;<input type="checkbox" name="postread_'.$idx.'" /></label>';
+                            }
                         }
                     }
 #figure out at what position this needs to print
@@ -1668,6 +1688,12 @@
 </script>
 END
 
+  my ($textareaheader,$textareaclass);
+  if (&Apache::lonhtmlcommon::htmlareabrowser()) {
+      $textareaheader = &Apache::lonhtmlcommon::htmlareaselectactive();
+      $textareaclass = 'class="LC_richDefaultOff"';
+  }
+
   # Breadcrumbs
   my $brcrum = [{'href' => '',
                  'text' => 'Resource Feedback and Discussion'}];
@@ -1707,14 +1733,16 @@
   $r->print(<<END);
 $options<hr />
 $quote
-<p>$lt{'myqu'}</p>
+<p>$lt{'myqu'}
+$textareaheader
+</p>
 <p>
 $latexHelp
 </p>
 <p>
 $lt{'title'}: <input type="text" name="subject" size="30" value="$subject" /></p>
 <p>
-<textarea name="comment" id="comment" cols="60" rows="10">$comment
+<textarea name="comment" id="comment" cols="60" rows="10"  $textareaclass>$comment
 </textarea></p>
 END
     if ( ($env{'form.editdisc'}) || ($env{'form.replydisc'}) ) {
@@ -1792,7 +1820,6 @@
         }
     }
     $r->print(&generate_preview_button().
-              &Apache::lonhtmlcommon::htmlareaselectactive('comment').
 	      &Apache::loncommon::end_page());
 
 }
@@ -2674,9 +2701,7 @@
 }
 
 sub clear_out_html {
-  my ($message,$override,$ignore_htmlarea)=@_;
-  if (!$ignore_htmlarea
-      && !&Apache::lonhtmlcommon::htmlareablocked()) { return $message; }
+  my ($message,$override)=@_;
 # Always allow the <m>-tag
   my %html=(M=>1);
 # Check if more is allowed
@@ -2687,8 +2712,8 @@
       # <BLOCKQUOTE> <DIV .*> <DIV> <IMG> <M> <SPAN> <H1> <H2> <H3> <H4> <SUB>
       # <SUP> <TABLE> <TR> <TD> <TH> <TBODY>
       %html=(B=>1, I=>1, P=>1, A=>1, LI=>1, OL=>1, UL=>1, EM=>1,
-	     BR=>1, TT=>1, STRONG=>1, BLOCKQUOTE=>1, DIV=>1, IMG=>1,
-	     M=>1, ALGEBRA=>1, SUB=>1, SUP=>1, SPAN=>1, 
+             BR=>1, TT=>1, STRONG=>1, BLOCKQUOTE=>1, PRE=>1, DIV=>1, IMG=>1,
+             M=>1, CHEM=>1, ALGEBRA=>1, SUB=>1, SUP=>1, SPAN=>1,
 	     H1=>1, H2=>1, H3=>1, H4=>1, H5=>1, H6=>1, 
 	     TABLE=>1, TR=>1, TD=>1, TH=>1, TBODY=>1);
   }
@@ -2936,7 +2961,7 @@
     &newline_to_br(\$message);
     $message=&Apache::lonspeller::markeduptext($message);
     $message=&Apache::lontexconvert::msgtexconverted($message);
-    my $subject=&clear_out_html($env{'form.subject'},undef,1);
+    my $subject=&clear_out_html($env{'form.subject'});
     $subject=~s/\n/\<br \/\>/g;
     $subject=&Apache::lontexconvert::msgtexconverted($subject);
 					
@@ -3048,7 +3073,7 @@
                                    {'bread_crumbs' => $brcrum,});
 
     my $orig_subject = &unescape($env{'form.subject'});
-    my $subject=&clear_out_html($orig_subject,undef,1);
+    my $subject=&clear_out_html($orig_subject);
     $subject=~s/\n/\<br \/\>/g;
     $subject=&Apache::lontexconvert::msgtexconverted($subject);
     my $timestamp=$env{'form.timestamp'};
@@ -3900,8 +3925,7 @@
       my ($typestyle,%to) = &Apache::lonmsg::decide_receiver($feedurl);
 
 # Actually send mail
-      my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'},
-						      undef,1),
+      my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'}),
 				      $feedurl,$email,$citations,
 				      $attachmenturl,$usersymb,%to);
 
@@ -3910,7 +3934,7 @@
       if (  ($env{'form.discuss'} ne ''
 	     && $env{'form.discuss'} !~ /^(?:author|question|course|policy)/)
 	   || $env{'form.anondiscuss'} ne '') {
-	  my $subject = &clear_out_html($env{'form.subject'},undef,1);
+	  my $subject = &clear_out_html($env{'form.subject'});
 	  my $anonmode=($env{'form.discuss'} eq 'anon' || $env{'form.anondiscuss'} );
 	  $typestyle.=&adddiscuss($symb,$message,$anonmode,$attachmenturl,
 				  $subject);
@@ -3921,7 +3945,7 @@
 
       my $blog='';
       if ($env{'form.blog'}) {
-	  my $subject = &clear_out_html($env{'form.subject'},undef,1);
+	  my $subject = &clear_out_html($env{'form.subject'});
 	  $status.=&Apache::lonrss::addentry($env{'user.name'},
 				    $env{'user.domain'},
 				    'CourseBlog_'.$env{'request.course.id'},

--raeburn1281809669--