Diff for /loncom/interface/lonfeedback.pm between versions 1.233 and 1.241

version 1.233, 2006/12/08 22:35:56 version 1.241, 2007/01/23 01:27:17
Line 100  sub list_discussion { Line 100  sub list_discussion {
         }          }
     }      }
   
     my ($blocked,$blocktext) = &blocking_posts('boards',1);      my ($blocked,$blocktext) = 
           &Apache::loncommon::blocking_status('boards');
     if ($blocked) {      if ($blocked) {
           &Apache::lonenc::check_encrypt(\$ressymb);
         if ($mode ne 'board') {          if ($mode ne 'board') {
             &Apache::lonenc::check_encrypt(\$ressymb);              $blocktext.='<br />'.&send_message_link($ressymb);
             return $blocktext.'<br />'.&send_message_link($ressymb);  
         }          }
           return $blocktext; 
     }      }
   
     my @bgcols = ("#cccccc","#eeeeee");      my @bgcols = ("#cccccc","#eeeeee");
Line 822  sub action_links_bar { Line 824  sub action_links_bar {
     return $discussion;      return $discussion;
 }  }
   
 sub blocking_posts {  
     my ($type,$showstatus) = @_;  
     my %setters;  
     my ($blocked,$output);  
     my ($startblock,$endblock) =  
           &Apache::loncommon::blockcheck(\%setters,$type);  
     if ($startblock && $endblock) {  
         $blocked = 1;  
         if ($showstatus) {  
             my $showstart = &Apache::lonlocal::locallocaltime($startblock);  
             my $showend = &Apache::lonlocal::locallocaltime($endblock);  
             $output = &mt('Discussion postings will not be viewable for resources in this course between [_1] and [_2] because communication is being blocked.',$showstart, $showend).'<br />'.  
                     &Apache::loncommon::build_block_table($startblock,$endblock,  
                                                          \%setters);  
         }  
     }  
     return ($blocked,$output);  
 }  
   
 sub postingform_display {  sub postingform_display {
     my ($mode,$ressymb,$now,$subject,$comment,$outputtarget,$attachnum,      my ($mode,$ressymb,$now,$subject,$comment,$outputtarget,$attachnum,
         $currnewattach,$currdelold,$group) = @_;          $currnewattach,$currdelold,$group) = @_;
Line 877  ENDDISCUSS Line 860  ENDDISCUSS
     if ($group ne '') {      if ($group ne '') {
         $postingform .='<input type="hidden" name="group" value="'.$group.'" />';          $postingform .='<input type="hidden" name="group" value="'.$group.'" />';
     }      }
     my ($blockblog) = &blocking_posts('blogs');      my $blockblog = &Apache::loncommon::blocking_status('blogs');
     if (!$blockblog) {      if (!$blockblog) {
         $postingform .= &add_blog_checkbox();          $postingform .= &add_blog_checkbox();
     }      }
Line 1485  sub replicate_attachments { Line 1468  sub replicate_attachments {
 }  }
   
 sub mail_screen {  sub mail_screen {
   my ($r,$feedurl,$options) = @_;    my ($r,$feedurl,$options,$caller_symb) = @_;
   if (exists($env{'form.origpage'})) {    if (exists($env{'form.origpage'})) {
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['subject','comment','currnewattach','addnewattach','deloldattach','delnewattach','timestamp','idx','anondiscuss','discuss','blog','group','ref']);        &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['subject','comment','currnewattach','addnewattach','deloldattach','delnewattach','timestamp','idx','anondiscuss','discuss','blog','group','ref']);
   }    }
Line 1496  sub mail_screen { Line 1479  sub mail_screen {
             'title' => 'Title',              'title' => 'Title',
             'reta' => 'Retained attachments',              'reta' => 'Retained attachments',
             'atta' => 'Attachment (128 KB max size)',              'atta' => 'Attachment (128 KB max size)',
            );              );
   my $title=&Apache::lonnet::gettitle($feedurl);    my $restitle = &get_resource_title($caller_symb,$feedurl);
   if (!$title) { $title = $feedurl; }  
   my $quote='';    my $quote='';
   my $subject = '';    my $subject = '';
   my $comment = '';    my $comment = '';
Line 1686  END Line 1668  END
   
   $r->print(<<END);    $r->print(<<END);
 $start_page  $start_page
 <h2><tt>$title</tt></h2>  <h2><tt>$restitle</tt></h2>
 <form action="/adm/feedback" method="post" name="mailform"  <form action="/adm/feedback" method="post" name="mailform"
 enctype="multipart/form-data">  enctype="multipart/form-data">
 $prevtag  $prevtag
Line 1763  END Line 1745  END
         if (@currnewattach > 0) {          if (@currnewattach > 0) {
             $attachnum += @currnewattach;              $attachnum += @currnewattach;
         }          }
         my ($blockblog) = &blocking_posts('blogs');          my $blockblog = &Apache::loncommon::blocking_status('blogs');
         $r->print(&generate_attachments_button($postidx,$attachnum,$ressymb,$now,\@currnewattach,\@currdelold,$numoldver,'',$blockblog));          $r->print(&generate_attachments_button($postidx,$attachnum,$ressymb,$now,\@currnewattach,\@currdelold,$numoldver,'',$blockblog));
         if ($attachnum > 0) {          if ($attachnum > 0) {
             if (@currnewattach > 0) {              if (@currnewattach > 0) {
Line 2596  sub screen_header { Line 2578  sub screen_header {
  }   }
     }      }
     if (($env{'request.course.id'}) && (!$env{'form.sendmessageonly'})) {      if (($env{'request.course.id'}) && (!$env{'form.sendmessageonly'})) {
  if (&discussion_open(undef,$symb) &&          my ($blocked,$blocktext) = &Apache::loncommon::blocking_status('boards');
           if (!$blocked && &discussion_open(undef,$symb) && 
     &Apache::lonnet::allowed('pch',      &Apache::lonnet::allowed('pch',
      $env{'request.course.id'}.       $env{'request.course.id'}.
      ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) {       ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) {
             my ($blocked) = &blocking_posts('boards');      $discussoptions='<label><input type="radio" name="discuss" value="nonanon" checked="checked" /> '.
             if (!$blocked) {   &mt('Contribution to course discussion of resource');
         $discussoptions='<label><input type="radio" name="discuss" value="nonanon" checked="checked" /> '.  
     &mt('Contribution to course discussion of resource');  
         $discussoptions.='</label><br /><label><input type="radio" name="discuss" value="anon" /> '.          $discussoptions.='</label><br /><label><input type="radio" name="discuss" value="anon" /> '.
     &mt('Anonymous contribution to course discussion of resource').   &mt('Anonymous contribution to course discussion of resource').
     ' <i>('.&mt('name only visible to course faculty').')</i></label> '.   ' <i>('.&mt('name only visible to course faculty').')</i></label> '.
     '<a href="/adm/preferences?action=changescreenname">'.&mt('Change Screenname').'</a>';   '<a href="/adm/preferences?action=changescreenname">'.&mt('Change Screenname').'</a>';
               my $blockblog = &Apache::loncommon::blocking_status('blogs');
               if (!$blockblog) {
                   $discussoptions.= &add_blog_checkbox();
             }              }
         }          }
         my ($blockblog) = &blocking_posts('blogs');  
         if (!$blockblog) {  
             $discussoptions.= &add_blog_checkbox();  
         }  
     }      }
     if ($msgoptions) { $msgoptions='<h2><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/feedback.gif').'" />'.&mt('Sending Messages').'</h2>'.$msgoptions; }      if ($msgoptions) { $msgoptions='<h2><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/feedback.gif').'" />'.&mt('Sending Messages').'</h2>'.$msgoptions; }
     if ($discussoptions) {       if ($discussoptions) { 
Line 2661  sub clear_out_html { Line 2641  sub clear_out_html {
 }  }
   
 sub assemble_email {  sub assemble_email {
   my ($feedurl,$message,$prevattempts,$usersaw,$useranswer)=@_;    my ($message,$prevattempts,$usersaw,$useranswer)=@_;
   my %lt = &Apache::lonlocal::texthash(    my %lt = &Apache::lonlocal::texthash(
              'prev' => 'Previous attempts of student (if applicable)',               'prev' => 'Previous attempts of student (if applicable)',
              'orig' => 'Original screen output (if applicable)',               'orig' => 'Original screen output (if applicable)',
Line 2687  sub secapply { Line 2667  sub secapply {
     my $defaultflag=shift;      my $defaultflag=shift;
     $rec=~s/\s+//g;      $rec=~s/\s+//g;
     $rec=~s/\@/\:/g;      $rec=~s/\@/\:/g;
     my ($adr,$sections)=($rec=~/^([^\(]+)\(([^\)]+)\)/);      my ($adr,$sections_or_groups)=($rec=~/^([^\(]+)\(([^\)]+)\)/);
     if ($sections) {      if ($sections_or_groups) {
  foreach my $sec (split(/\;/,$sections)) {   foreach my $item (split(/\;/,$sections_or_groups)) {
             if (($sec eq $env{'request.course.sec'}) ||              if (($item eq $env{'request.course.sec'}) ||
                 ($defaultflag && ($sec eq '*'))) {                  ($defaultflag && ($item eq '*'))) {
                 return $adr;                   return $adr; 
             }              } elsif ($env{'request.course.groups'}) {
                   my @usersgroups = split(/:/,$env{'request.course.groups'});
                   if (grep(/^\Q$item\E$/,@usersgroups)) {
                       return $adr;
                   }
               } 
         }          }
     } else {      } else {
        return $rec;         return $rec;
Line 2734  Returns Line 2719  Returns
   
 sub decide_receiver {  sub decide_receiver {
   my ($feedurl,$author,$question,$course,$policy,$defaultflag) = @_;    my ($feedurl,$author,$question,$course,$policy,$defaultflag) = @_;
     &Apache::lonenc::check_decrypt(\$feedurl);
   my $typestyle='';    my $typestyle='';
   my %to=();    my %to=();
   if ($env{'form.discuss'} eq 'author' ||$author) {    if ($env{'form.discuss'} eq 'author' ||$author) {
Line 2782  sub feedback_available { Line 2768  sub feedback_available {
 }  }
   
 sub send_msg {  sub send_msg {
   my ($title,$feedurl,$email,$citations,$attachmenturl,%to)=@_;    my ($title,$feedurl,$email,$citations,$attachmenturl,$symb,%to)=@_;
   my $status='';    my $status='';
   my $sendsomething=0;    my $sendsomething=0;
     my $restitle = &get_resource_title($symb,$feedurl);
   if ($title=~/^Error/) { $title=&mt('Feedback').': '.$title; }    if ($title=~/^Error/) { $title=&mt('Feedback').': '.$title; }
   unless ($title=~/\w/) { $title=&mt('Feedback'); }    unless ($title=~/\w/) { $title=&mt('Feedback'); }
   foreach my $key (keys(%to)) {    foreach my $key (keys(%to)) {
     if ($key) {      if ($key) {
       my $declutter=&Apache::lonnet::declutter($feedurl);  
       unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$key),        unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$key),
                $title.' ['.$declutter.']',$email,$citations,$feedurl,                 $title.' ['.$restitle.']',$email,$citations,$feedurl,
                 $attachmenturl)=~/ok/) {                  $attachmenturl,undef,undef,$symb,$restitle)=~/ok/) {
  $status.='<br />'.&mt('Error sending message to').' '.$key.'<br />';   $status.='<br />'.&mt('Error sending message to').' '.$key.'<br />';
       } else {        } else {
  $sendsomething++;   $sendsomething++;
Line 3740  ENDREDIR Line 3726  ENDREDIR
       my $symb;        my $symb;
       if ($env{'form.replydisc'}) {        if ($env{'form.replydisc'}) {
   $symb=(split(/\:\:\:/,$env{'form.replydisc'}))[0];    $symb=(split(/\:\:\:/,$env{'form.replydisc'}))[0];
   my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);  
   $feedurl=&Apache::lonnet::clutter($url);  
       } elsif ($env{'form.editdisc'}) {        } elsif ($env{'form.editdisc'}) {
   $symb=(split(/\:\:\:/,$env{'form.editdisc'}))[0];    $symb=(split(/\:\:\:/,$env{'form.editdisc'}))[0];
   my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);  
   $feedurl=&Apache::lonnet::clutter($url);  
       } elsif ($env{'form.origpage'}) {        } elsif ($env{'form.origpage'}) {
   $symb="";     $symb=""; 
       } else {        } else {
Line 3753  ENDREDIR Line 3735  ENDREDIR
       }        }
       unless ($symb) {        unless ($symb) {
   $symb=$env{'form.symb'};    $symb=$env{'form.symb'};
   if ($symb) {  
       my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);  
       $feedurl=&Apache::lonnet::clutter($url);  
   }  
       }        }
       &Apache::lonenc::check_decrypt(\$symb);        if (defined($symb)) {
             ($symb,$feedurl)=&get_feedurl_and_clean_symb($symb);
         } else {
             # backward compatibility (bulletin boards used to be 'wrapped')
             &Apache::lonenc::check_decrypt(\$feedurl);
             &dewrapper(\$feedurl);
         }
       my $goahead=1;        my $goahead=1;
       if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form|task)$/) {        if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form|task)$/) {
   unless ($symb) { $goahead=0; }    unless ($symb) { $goahead=0; }
       }        }
       # backward compatibility (bulletin boards used to be 'wrapped')  
       &dewrapper(\$feedurl);  
       if (!$goahead) {        if (!$goahead) {
           # Ambiguous Problem Resource            # Ambiguous Problem Resource
   $r->internal_redirect('/adm/ambiguous');    $r->internal_redirect('/adm/ambiguous');
Line 3792  ENDREDIR Line 3774  ENDREDIR
           &Apache::lonenc::check_encrypt(\$feedurl);            &Apache::lonenc::check_encrypt(\$feedurl);
   &Apache::loncommon::content_type($r,'text/html');    &Apache::loncommon::content_type($r,'text/html');
   $r->send_http_header;    $r->send_http_header;
             if (($env{'form.replydisc'}) || ($env{'form.editdisc'})) {
                 my ($blocked,$blocktext) = 
                        &Apache::loncommon::blocking_status('boards');
                 if ($blocked) {
                     $r->print(&blocked_reply_or_edit($blocktext));
                     return OK;
                 }
             }
   my $options=&screen_header($feedurl,$symb);    my $options=&screen_header($feedurl,$symb);
   if ($options) {    if ($options) {
       &mail_screen($r,$feedurl,$options);        &mail_screen($r,$feedurl,$options,$symb);
   } else {    } else {
       &fail_redirect($r,$feedurl);        &fail_redirect($r,$feedurl);
   }    }
Line 3807  ENDREDIR Line 3797  ENDREDIR
    $env{'request.course.id'});     $env{'request.course.id'});
   
 # Get output from resource  # Get output from resource
         &Apache::lonenc::check_encrypt(\$feedurl);
       my $usersaw=&resource_output($feedurl);        my $usersaw=&resource_output($feedurl);
   
 # Get resource answer (need to allow student to view grades for this to work)  # Get resource answer (need to allow student to view grades for this to work)
       &Apache::lonnet::appenv(('allowed.vgr'=>'F'));        &Apache::lonnet::appenv(('allowed.vgr'=>'F'));
       my $useranswer=&Apache::loncommon::get_student_answers(        my $usersymb = &Apache::lonenc::check_encrypt($symb);
                                    $symb,$env{'user.name'},$env{'user.domain'},        my $useranswer=
                    $env{'request.course.id'});            &Apache::loncommon::get_student_answers(
                 $usersymb,$env{'user.name'},$env{'user.domain'},
                 $env{'request.course.id'});
       &Apache::lonnet::delenv('allowed.vgr');        &Apache::lonnet::delenv('allowed.vgr');
 # Get attachments, if any, and not too large  # Get attachments, if any, and not too large
       my $attachmenturl='';        my $attachmenturl='';
Line 3843  ENDREDIR Line 3836  ENDREDIR
       my $message=&clear_out_html($env{'form.comment'});        my $message=&clear_out_html($env{'form.comment'});
   
 # Assemble email  # Assemble email
       my ($email,$citations)=&assemble_email($feedurl,$message,$prevattempts,        my ($email,$citations)=&assemble_email($message,$prevattempts,
      $usersaw,$useranswer);       $usersaw,$useranswer);
     
 # Who gets this?  # Who gets this?
Line 3853  ENDREDIR Line 3846  ENDREDIR
       my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'},        my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'},
       undef,1),        undef,1),
       $feedurl,$email,$citations,        $feedurl,$email,$citations,
       $attachmenturl,%to);        $attachmenturl,$usersymb,%to);
   
 # Discussion? Store that.  # Discussion? Store that.
       my $numpost=0;        my $numpost=0;
Line 3883  ENDREDIR Line 3876  ENDREDIR
       &redirect_back($r,$feedurl,$typestyle,$numsent,$numpost,$blog,$status,$env{'form.previous'},undef,undef,undef,undef,undef,undef,$group);        &redirect_back($r,$feedurl,$typestyle,$numsent,$numpost,$blog,$status,$env{'form.previous'},undef,undef,undef,undef,undef,undef,$group);
   }    }
   return OK;    return OK;
   }
   
   sub blocked_reply_or_edit {
       my ($blocktext) = @_;
       return 
         &Apache::loncommon::start_page('Resource Feedback and Discussion').
         $blocktext.'<br /><br /><a href="javascript:history.go(-1)">'.
         &mt('Back to previous page').
         &Apache::loncommon::end_page();
 }   } 
   
 sub wrap_symb {  sub wrap_symb {
Line 3987  sub group_args { Line 3989  sub group_args {
     return $extra_args;      return $extra_args;
 }  }
   
   sub get_resource_title {
       my ($symb,$feedurl) = @_;
       my ($restitle,$plainurl);
       if (defined($symb)) {
           my $plain_symb = &Apache::lonenc::check_decrypt($symb);
           $restitle = &Apache::lonnet::gettitle($plain_symb);
       }
       if (defined($feedurl)) {
           $plainurl = &Apache::lonenc::check_decrypt($feedurl);
       }
       if (!defined($restitle)) {
           if (defined($feedurl)) {
               $restitle = &Apache::lonnet::gettitle($plainurl);
           }
       }
       if ($plainurl ne $feedurl) {
           my ($plain_filename) = ($plainurl =~ m-/([^/]+)$-);
           if ($plain_filename eq $restitle) {
               $restitle = &mt('Untitled resource');
           }
       }
       if ($restitle eq '') {
           $restitle = &mt('Untitled resource');
       }
       return $restitle;
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.233  
changed lines
  Added in v.1.241


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