Diff for /loncom/interface/lonfeedback.pm between versions 1.370.2.7 and 1.371

version 1.370.2.7, 2023/09/15 23:02:08 version 1.371, 2015/09/30 21:04:04
Line 44  use HTML::LCParser(); Line 44  use HTML::LCParser();
 #use HTML::Tidy::libXML;  #use HTML::Tidy::libXML;
 use Apache::lonspeller();  use Apache::lonspeller();
 use Apache::longroup;  use Apache::longroup;
 use Archive::Zip qw( :ERROR_CODES );  use Cwd;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA;
   
 sub discussion_open {  sub discussion_open {
     my ($status,$symb)=@_;      my ($status,$symb)=@_;
Line 696  END Line 696  END
   
 #Create zip file in prtspool  #Create zip file in prtspool
   
                     if (($env{'user.name'} =~ /^$match_username$/)                      my $imszipfile = '/prtspool/'.
                         && ($env{'user.domain'} =~ /^$match_domain$/)) {                      $env{'user.name'}.'_'.$env{'user.domain'}.'_'.
                         my $now = time();                           time.'_'.rand(1000000000).'.zip';
                         my $imszipfile = '/prtspool/'.                      my $cwd = &getcwd(); 
                                       join('_',$env{'user.name'},$env{'user.domain'},$now).                      my $imszip = '/home/httpd/'.$imszipfile;
                                       '_'.rand(1000000000).'.zip';                      chdir $tempexport;
                         my $zip = Archive::Zip->new();                      open(OUTPUT, "zip -r $imszip *  2> /dev/null |");
                         $zip->addTree($tempexport);                      close(OUTPUT);
                         my $imszip = '/home/httpd/'.$imszipfile;                      chdir $cwd;
                         if ($zip->writeToFileNamed($imszip) == AZ_OK) {                      $discussion .= &mt('Download the zip file from [_1]Discussion Posting Archive[_2]',
                             $discussion .= &mt('Download the zip file from [_1]Discussion Posting Archive[_2]',  
                                            '<a href="'.$imszipfile.'">','</a>').'<br />';                                             '<a href="'.$imszipfile.'">','</a>').'<br />';
                         } else {                      if ($copyresult) {
                             $discussion .=  &mt('Failed to create zip file').'<br />';                          $discussion .= '<span class="LC_error">'.
                         }                                         &mt('The following errors occurred during export:').
                         if ($copyresult) {                                         '</span><br />'.$copyresult;
                             $discussion .= '<span class="LC_error">'.  
                                            &mt('The following errors occurred during export:').  
                                            '</span><br />'.$copyresult;  
                         }  
                     } else {  
                         $discussion .= '<p class="LC_error">'.  
                                        &mt('Unfortunately you will not be able to retrieve an archive of the discussion posts at this time, because there was a problem creating the zip file.').'</p>';  
                     }                      }
                 }                  }
             } else {              } else {
Line 855  sub send_feedback_link { Line 847  sub send_feedback_link {
                  &discussion_link($ressymb,                   &discussion_link($ressymb,
                     '<img alt="" class="LC_noBorder" src="'.                      '<img alt="" class="LC_noBorder" src="'.
                     &Apache::loncommon::lonhttpdurl('/adm/lonMisc/chat.gif').                      &Apache::loncommon::lonhttpdurl('/adm/lonMisc/chat.gif').
                     '" /><span class="LC_menubuttons_inline_text">'.&mt('Post Discussion').'</span>',                      '" border="0" /><span class="LC_menubuttons_inline_text">'.&mt('Post Discussion').'</span>',
                     'replydisc').                      'replydisc').
            '</span>';             '</span>';
 }  }
Line 866  sub send_message_link { Line 858  sub send_message_link {
                  &discussion_link($ressymb,                   &discussion_link($ressymb,
                     '<img alt="" class="LC_noBorder" src="'.                      '<img alt="" class="LC_noBorder" src="'.
                     &Apache::loncommon::lonhttpdurl('/res/adm/pages/feedback.png').                      &Apache::loncommon::lonhttpdurl('/res/adm/pages/feedback.png').
                     '" /><span class="LC_menubuttons_inline_text">'.&mt('Send Feedback').'</span>',                      '" border="0" /><span class="LC_menubuttons_inline_text">'.&mt('Send Feedback').'</span>',
                     'sendmessageonly').                      'sendmessageonly').
                  '</span>';                   '</span>';
     return $output;      return $output;
Line 941  sub postingform_display { Line 933  sub postingform_display {
         $currnewattach,$currdelold,$group,$crstype) = @_;          $currnewattach,$currdelold,$group,$crstype) = @_;
     my $newattachmsg;      my $newattachmsg;
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
              'note' => 'Note: in anonymous discussion, your name is visible only to course faculty',                'note' => 'Note: in anonymous discussion, your name is visible only to course faculty',
              'title' => 'Title',               'title' => 'Title',
              'podi' => 'Post Discussion',               'podi' => 'Post Discussion',
              'poan' => 'Post Anonymous Discussion',               'poan' => 'Post Anonymous Discussion',
Line 1293  sub build_posting_display { Line 1285  sub build_posting_display {
                                 if (&editing_allowed($escsymb.':::'.$idx,$group)) {                                  if (&editing_allowed($escsymb.':::'.$idx,$group)) {
                                     if (($env{'user.domain'} eq $contrib{$idx.':senderdomain'}) && ($env{'user.name'} eq $contrib{$idx.':sendername'})) {                                      if (($env{'user.domain'} eq $contrib{$idx.':senderdomain'}) && ($env{'user.name'} eq $contrib{$idx.':sendername'})) {
                                         $sender.=' '.                                          $sender.=' '.
                                          &discussion_link($ressymb,&mt('Edit'),'editdisc',$idx,$$newpostsflag,$prevread,&group_args($group));                                           &discussion_link($symb,&mt('Edit'),'editdisc',$idx,$$newpostsflag,$prevread,&group_args($group));
                                         unless ($seehidden) {                                          unless ($seehidden) {
                                             my $grpargs = &group_args($group);                                              my $grpargs = &group_args($group);
                                             $sender.=" <a href=\"javascript:verifydelete('studentdelete','$escsymb','$idx','$$newpostsflag','$prevread','$grpargs')";                                              $sender.=" <a href=\"javascript:verifydelete('studentdelete','$escsymb','$idx','$$newpostsflag','$prevread','$grpargs')";
Line 1305  sub build_posting_display { Line 1297  sub build_posting_display {
             if ($hiddens{$idx}) {              if ($hiddens{$idx}) {
                                         unless ($studenthidden) {                                          unless ($studenthidden) {
                             $sender.=' '.                              $sender.=' '.
                                             &discussion_link($ressymb,&mt('Make Visible'),'unhide',$idx,$$newpostsflag,$prevread,&group_args($group));                                              &discussion_link($symb,&mt('Make Visible'),'unhide',$idx,$$newpostsflag,$prevread,&group_args($group));
                                         }                                          }
             } else {              } else {
                                         $sender.=' '.                                          $sender.=' '.
                                          &discussion_link($ressymb,&mt('Hide'),'hide',$idx,$$newpostsflag,$prevread,&group_args($group));                                           &discussion_link($symb,&mt('Hide'),'hide',$idx,$$newpostsflag,$prevread,&group_args($group));
             }              }
                                     my $grpargs = &group_args($group);                                      my $grpargs = &group_args($group);
             $sender.=               $sender.= 
Line 1348  sub build_posting_display { Line 1340  sub build_posting_display {
                                 if (($group ne '') &&                                   if (($group ne '') && 
                                     (&check_group_priv($group,'pgd') eq 'ok')) {                                      (&check_group_priv($group,'pgd') eq 'ok')) {
                                      $sender.=' '.                                       $sender.=' '.
                                          &discussion_link($ressymb,&mt('Reply'),'replydisc',$idx,$$newpostsflag,$prevread,&group_args($group));                                           &discussion_link($symb,&mt('Reply'),'replydisc',$idx,$$newpostsflag,$prevread,&group_args($group));
                                 } elsif (&Apache::lonnet::allowed('pch',                                   } elsif (&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'}:''))) {
              $sender.=' '.               $sender.=' '.
                                          &discussion_link($ressymb,&mt('Reply'),'replydisc',$idx,$$newpostsflag,$prevread);                                           &discussion_link($symb,&mt('Reply'),'replydisc',$idx,$$newpostsflag,$prevread);
                                 }                                  }
                             }                              }
             if ($viewgrades) {              if ($viewgrades) {
Line 1521  sub build_posting_display { Line 1513  sub build_posting_display {
                                     if ($userlikes{$idx}) {                                      if ($userlikes{$idx}) {
                                         $$discussionitems[$idx].='<img border="0" src="/res/adm/pages/thumbsup_gray.png" alt="'.&mt('You like this posting').'" />';                                          $$discussionitems[$idx].='<img border="0" src="/res/adm/pages/thumbsup_gray.png" alt="'.&mt('You like this posting').'" />';
                                     } else {                                      } else {
                                         $$discussionitems[$idx].='&nbsp;'.&discussion_link($ressymb,'<img border="0" src="/res/adm/pages/thumbsup.png" alt="'.&mt('Like').'" />','like',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Like this posting"));                                          $$discussionitems[$idx].='&nbsp;'.&discussion_link($symb,'<img border="0" src="/res/adm/pages/thumbsup.png" alt="'.&mt('Like').'" />','like',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Like this posting"));
                                     }                                      }
                                     if ($userunlikes{$idx}) {                                      if ($userunlikes{$idx}) {
                                         $$discussionitems[$idx].='<img border="0" src="/res/adm/pages/thumbsdown_gray.png" alt="'.&mt('You unlike this posting').'" />';                                          $$discussionitems[$idx].='<img border="0" src="/res/adm/pages/thumbsdown_gray.png" alt="'.&mt('You unlike this posting').'" />';
                                     } else {                                      } else {
                                         $$discussionitems[$idx].='&nbsp;'.&discussion_link($ressymb,'<img border="0" src="/res/adm/pages/thumbsdown.png" alt="'.&mt('Unlike').'" />','unlike',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Unlike this posting"));                                          $$discussionitems[$idx].='&nbsp;'.&discussion_link($symb,'<img border="0" src="/res/adm/pages/thumbsdown.png" alt="'.&mt('Unlike').'" />','unlike',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Unlike this posting"));
                                     }                                      }
                                 }                                  }
                             }                              }
Line 1544  sub build_posting_display { Line 1536  sub build_posting_display {
                                 $$discussionitems[$idx] .= '&nbsp;&nbsp;'.&mt('This post has been edited by the author.');                                  $$discussionitems[$idx] .= '&nbsp;&nbsp;'.&mt('This post has been edited by the author.');
                                 if ($seehidden) {                                  if ($seehidden) {
                                     $$discussionitems[$idx] .= '&nbsp;&nbsp;'.                                      $$discussionitems[$idx] .= '&nbsp;&nbsp;'.
                                          &discussion_link($ressymb,&mt('Display all versions'),'allversions',$idx,$$newpostsflag,$prevread,&group_args($group));                                           &discussion_link($symb,&mt('Display all versions'),'allversions',$idx,$$newpostsflag,$prevread,&group_args($group));
                                 }                                  }
                                 $$discussionitems[$idx].='<br/>'.&mt('Earlier version(s) were posted on: ');                                  $$discussionitems[$idx].='<br/>'.&mt('Earlier version(s) were posted on: ');
                                 if ($contrib{$idx.':history'} =~ m/:/) {                                  if ($contrib{$idx.':history'} =~ m/:/) {
Line 1776  sub mail_screen { Line 1768  sub mail_screen {
   
   my %lt = &Apache::lonlocal::texthash(    my %lt = &Apache::lonlocal::texthash(
             'myqu' => 'Question/comment/feedback:',              'myqu' => 'Question/comment/feedback:',
               'title' => 'Title',
             'reta' => 'Retained attachments',              'reta' => 'Retained attachments',
             'atta' => 'Attachment',              'atta' => 'Attachment',
            );             );
   if ($env{'form.editdisc'} || $env{'form.replydisc'}){    if($env{'form.editdisc'} || $env{'form.replydisc'}){
       $lt{'myqu'} = &mt('Post Discussion');      %lt = &Apache::lonlocal::texthash(
               'myqu' => 'Post Discussion',
       );
   }    }
   my $restitle = &get_resource_title($caller_symb,$feedurl);    my $restitle = &get_resource_title($caller_symb,$feedurl);
   my $quote='';    my $quote='';
Line 2055  END Line 2050  END
     } else {      } else {
         $r->print(<<END);          $r->print(<<END);
 <p>  <p>
 $lt{'atta'} $attachmaxtext: <input type="file" name="attachment" class="LC_flUpload" />  $lt{'atta'} $attachmaxtext: <input type="file" name="attachment" class="flUpload" />
 <input type="hidden" id="LC_free_space" value="131072" />  <input type="hidden" id="free_space" value="131072" />
 </p>  </p>
 END  END
     }      }
Line 2703  sub get_post_attachments { Line 2698  sub get_post_attachments {
         $$attachments{'0'}{'filename'} = $attachmenturls;          $$attachments{'0'}{'filename'} = $attachmenturls;
         $$attachments{'0'}{'0'} = 'n';          $$attachments{'0'}{'0'} = 'n';
     }      }
   
     return;      return;
 }  }
   
 sub fail_redirect {  sub fail_redirect {
   my ($r,$feedurl,$delay) = @_;    my ($r,$feedurl) = @_;
   if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };    if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };
   my %lt = &Apache::lonlocal::texthash(    my %lt = &Apache::lonlocal::texthash(
                  'sorr' => 'Sorry, no recipients ...',                   'sorr' => 'Sorry, no recipients ...',
   );    );
   my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');    my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');
   my %parms=('only_body'   => 1);    $r->print(&Apache::loncommon::start_page('Feedback not sent',undef,
   if ($delay !~ /^\d+(|\.\d+)$/) {     {'redirect'  => [2,$feedurl],
       $delay = 2;      'only_body' => 1,}));
   }  
   if ($env{'form.modal'}) {  
       my $onload = 'document.forms.reldt.submit()';  
       if ($delay) {  
           my $js_delay = int(1000 * $delay);  
           $onload = "setTimeout(function(){  
                      document.forms.reldt.submit();  
                      },$js_delay);";  
       }  
       $parms{'add_entries'}={'onload' => $onload};  
   } else {  
       $parms{'redirect'}=[$delay,$feedurl];  
   }  
   $r->print(&Apache::loncommon::start_page('Feedback not sent',undef,\%parms));  
   my $windowname = 'loncapaclient';  
   $r->print(<<ENDFAILREDIR);    $r->print(<<ENDFAILREDIR);
 <img align="right" src="$logo" />  <img align="right" src="$logo" />
 <p class="LC_warning">$lt{'sorr'}</p>  <p class="LC_warning">$lt{'sorr'}</p>
 <form name="reldt" action="$feedurl" target="$windowname">  
 </form>  
 ENDFAILREDIR  ENDFAILREDIR
   $r->print(&Apache::loncommon::end_page());    $r->print(&Apache::loncommon::end_page());
 }  }
   
 sub redirect_back {  sub redirect_back {
   my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$blog,$status,$previous,$sort,    my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$blog,$status,$previous,$sort,$rolefilter,$statusfilter,$sectionpick,$grouppick,$numpicks,$group,$toolarge) = @_;
       $rolefilter,$statusfilter,$sectionpick,$grouppick,$numpicks,$group,$toolarge,$delay) = @_;  
   my $sorttag = '';    my $sorttag = '';
   my $roletag = '';    my $roletag = '';
   my $statustag = '';    my $statustag = '';
Line 2841  sub redirect_back { Line 2819  sub redirect_back {
   &Apache::lonenc::check_encrypt(\$feedurl);    &Apache::lonenc::check_encrypt(\$feedurl);
   my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');    my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');
   my %parms=('only_body'   => 1);    my %parms=('only_body'   => 1);
   if ($delay !~ /^\d+(|\.\d+)$/) {  
       $delay = 0;  
   }  
   if ($env{'form.modal'}) {    if ($env{'form.modal'}) {
       my $onload = 'document.forms.reldt.submit()';        $parms{'add_entries'}={'onLoad' => 'document.forms.reldt.submit()'};
       if ($delay) {  
           my $js_delay = int(1000 * $delay);  
           $onload = "setTimeout(function(){  
                         document.forms.reldt.submit();  
                      },$js_delay);";  
       }  
       $parms{'add_entries'}={'onload' => $onload};  
   } else {    } else {
       $parms{'redirect'}=[$delay,$feedurl];        $parms{'redirect'}=[0,$feedurl];
   }    }
   my $start_page=    my $start_page=
       &Apache::loncommon::start_page('Feedback sent',undef,\%parms);        &Apache::loncommon::start_page('Feedback sent',undef,\%parms);
Line 2882  ENDREDIR Line 2850  ENDREDIR
 }  }
   
 sub no_redirect_back {  sub no_redirect_back {
   my ($r,$feedurl,$delay) = @_;    my ($r,$feedurl) = @_;
   my $nofeed=&mt('Sorry, no feedback possible on this resource ...');    my $nofeed=&mt('Sorry, no feedback possible on this resource ...');
   my $form_for_modal;   
   my %parms=('only_body'   => 1,    my %onload;
              'bgcolor'     => '#FFFFFF',);  
   if ($delay !~ /^\d+(|\.\d+)$/) {    my %body_options = ('only_body'   => 1,
       $delay = 0;        'bgcolor'     => '#FFFFFF',
   }        'add_entries' => \%onload,);
   if ($env{'form.modal'}) {  
       if (($feedurl !~ m{^/adm/feedback}) && ($feedurl ne '')) {    if ($feedurl !~ m{^/adm/feedback}) { 
           my $onload = 'document.forms.reldt.submit()';        $body_options{'redirect'} = [2,$feedurl];
           if ($delay) {  
               my $js_delay = int(1000 * $delay);  
               $onload = "setTimeout(function(){  
                          document.forms.reldt.submit();  
                          },$js_delay);";  
           }  
           $parms{'add_entries'}={'onload' => $onload};  
           my $windowname = 'loncapaclient';  
           $form_for_modal = <<ENDFORM;  
 <form name="reldt" action="$feedurl" target="$windowname">  
 </form>  
 ENDFORM  
       }  
   } else {  
       if (($feedurl !~ m{^/adm/feedback}) && ($feedurl ne '')) {  
           $parms{'redirect'}=[$delay,$feedurl];  
       }  
   }    }
   my $start_page=    my $start_page=
       &Apache::loncommon::start_page('Feedback not sent',undef,        &Apache::loncommon::start_page('Feedback not sent',undef,
      \%parms);       \%body_options);
         
   my $end_page = &Apache::loncommon::end_page();    my $end_page = &Apache::loncommon::end_page();
   
     &Apache::lonenc::check_encrypt(\$feedurl);
   my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');    my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');
   $r->print (<<ENDNOREDIRTWO);    $r->print (<<ENDNOREDIRTWO);
 $start_page  $start_page
 <img align="right" src="$logo" />  <img align="right" src="$logo" />
 <b>$nofeed</b>  <b>$nofeed</b>
 <br />  <br />
 $form_for_modal  
 $end_page  $end_page
 ENDNOREDIRTWO  ENDNOREDIRTWO
 }  }
   
 sub screen_header {  sub screen_header {
     my ($feedurl,$symb,$group) = @_;      my ($feedurl,$symb,$group) = @_;
     my %default = &Apache::lonlocal::texthash (      my $crscontent = &mt('Question/Comment/Feedback about course content');
                     question => 'Question about resource content',      my $crspolicy = &mt('Question/Comment/Feedback about course policy');
                     comment => 'Question/Comment/Feedback about course content',  
                     policy => 'Question/Comment/Feedback about course policy',  
                   );  
     my $contribdisc = &mt('Contribution to course discussion of resource');      my $contribdisc = &mt('Contribution to course discussion of resource');
     my $anoncontrib = &mt('Anonymous contribution to course discussion of resource');      my $anoncontrib = &mt('Anonymous contribution to course discussion of resource');
     my $namevis = &mt('name only visible to course faculty');      my $namevis = &mt('name only visible to course faculty');
Line 2942  sub screen_header { Line 2890  sub screen_header {
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
         $crstype = &Apache::loncommon::course_type();          $crstype = &Apache::loncommon::course_type();
         if ($crstype eq 'Community') {          if ($crstype eq 'Community') {
             $default{'comment'} = &mt('Question/Comment/Feedback about community content');              $crscontent = &mt('Question/Comment/Feedback about community content');
             $default{'policy'} = &mt('Question/Comment/Feedback about community policy');              $crspolicy = &mt('Question/Comment/Feedback about community policy');
             $contribdisc = &mt('Contribution to community discussion of resource');              $contribdisc = &mt('Contribution to community discussion of resource');
             $anoncontrib = &mt('Anonymous contribution to community discussion of resource');              $anoncontrib = &mt('Anonymous contribution to community discussion of resource');
             $namevis = &mt('name only visible to community facilitators');              $namevis = &mt('name only visible to community facilitators');
Line 2951  sub screen_header { Line 2899  sub screen_header {
     }      }
     my $msgoptions='';      my $msgoptions='';
     my $discussoptions='';      my $discussoptions='';
     my $checkradio = '';  
     my $blockblog;  
     my (%fdbkoptions,%discoptions);  
     unless (($env{'form.replydisc'}) || ($env{'form.editdisc'})) {      unless (($env{'form.replydisc'}) || ($env{'form.editdisc'})) {
         if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/) && ($env{'user.adv'})) {   if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/) && ($env{'user.adv'})) {
             $fdbkoptions{'author'} = 1;      $msgoptions= 
         }   '<label><input type="radio" name="discuss" value="author" /> '.
         if (&feedback_available(1)) {   &mt('Feedback to resource author').'</label><br />';
             $fdbkoptions{'question'} = 1;   }
         }          my %optionhash=();
         if (&feedback_available(0,1)) {          foreach my $type ('question','comment','policy') {
             $fdbkoptions{'course'} = 1;      $optionhash{$type}=$env{'course.'.$env{'request.course.id'}.'.'.$type.'.email.text'};
         }   }
         if (&feedback_available(0,0,1)) {   if (&feedback_available(1)) {
             $fdbkoptions{'policy'} = 1;      $msgoptions.=
         }   '<label><input type="radio" name="discuss" value="question" /> '.
    ($optionhash{'question'}?$optionhash{'question'}:&mt('Question about resource content')).'</label><br />';
    }
    if (&feedback_available(0,1)) {
       $msgoptions.=
    '<label><input type="radio" name="discuss" value="course" /> '.
    ($optionhash{'comment'}?$optionhash{'comment'}:$crscontent).
    '</label><br />';
    }
    if (&feedback_available(0,0,1)) {
       $msgoptions.=
    '<label><input type="radio" name="discuss" value="policy" /> '.
    ($optionhash{'policy'}?$optionhash{'policy'}:$crspolicy).
    '</label><br />';
    }
     }      }
     if (($env{'request.course.id'}) && (!$env{'form.sendmessageonly'})) {      if (($env{'request.course.id'}) && (!$env{'form.sendmessageonly'})) {
         my ($blocked,$blocktext) = &Apache::loncommon::blocking_status('boards');          my ($blocked,$blocktext) = &Apache::loncommon::blocking_status('boards');
         my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};          my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
         my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};          my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
         my $realsymb = &get_realsymb($symb);          my $realsymb = &get_realsymb($symb);
         if (!$blocked && &discussion_open(undef,$realsymb) &&          if (!$blocked && &discussion_open(undef,$realsymb) && 
             (&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'}:'')) || 
             (($group ne '') && ($symb =~ m{^bulletin___\d+___adm/wrapper/adm/\Q$cdom\E/\Q$cnum\E/\d+/bulletinboard$}) && (&check_group_priv($group,'pgd') eq 'ok')))) {              (($group ne '') && ($symb =~ m{^bulletin___\d+___adm/wrapper/adm/\Q$cdom\E/\Q$cnum\E/\d+/bulletinboard$}) && (&check_group_priv($group,'pgd') eq 'ok')))) {
             $discoptions{'nonanon'} = 1;      $discussoptions='<label><input type="radio" name="discuss" value="nonanon" checked="checked" /> '.
             $discoptions{'anon'} = 1;   $contribdisc.
             $blockblog = &Apache::loncommon::blocking_status('blogs');          '</label><br /><label><input type="radio" name="discuss" value="anon" /> '.
         }   $anoncontrib.
     }   ' <i>('.$namevis.')</i></label> '.
     my $total = scalar(keys(%fdbkoptions)) + scalar(keys(%discoptions));   '<a href="/adm/preferences?action=changescreenname">'.&mt('Change Screenname').'</a>';
     return if (!$total);              my $blockblog = &Apache::loncommon::blocking_status('blogs');
     if ($total == 1) {              if (!$blockblog) {
         $checkradio = ' checked="checked"';                  $discussoptions.= &add_blog_checkbox($crstype);
     }  
     if (keys(%fdbkoptions)) {  
         if ($fdbkoptions{'author'}) {  
             $msgoptions =  
                 '<label><input type="radio" name="discuss" value="author"'.$checkradio.' /> '.  
                 &mt('Feedback to resource author').'</label><br />';  
         }  
         foreach my $item ('question','comment','policy') {  
             my $type = $item;  
             if ($item eq 'comment') {  
                 $type = 'course';  
             }  
             my $optionhash=$env{'course.'.$env{'request.course.id'}.'.'.$item.'.email.text'};  
             if ($fdbkoptions{$type}) {  
                 $msgoptions .=  
                     '<label><input type="radio" name="discuss" value="'.$type.'"'.$checkradio.' />'.  
                     ($optionhash?$optionhash:$default{$item}).'</label><br />';  
             }              }
         }          }
     }      }
     if (keys(%discoptions)) {  
         if ($discoptions{'nonanon'}) {  
             $discussoptions='<label><input type="radio" name="discuss" value="nonanon" checked="checked" /> '.  
                             $contribdisc.  
                             '</label>';  
         }  
         if ($discoptions{'anon'}) {  
             $discussoptions .= '<br /><label><input type="radio" name="discuss" value="anon"'.$checkradio.' /> '.  
                                $anoncontrib.  
                                ' <i>('.$namevis.')</i></label> '.  
                                '<a href="/adm/preferences?action=changescreenname">'.&mt('Change Screenname').'</a>';  
         }  
         if (!$blockblog) {  
             $discussoptions.= &add_blog_checkbox($crstype);  
         }  
     }  
     if ($msgoptions) {      if ($msgoptions) {
         $msgoptions='<tr><th><img src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/feedback.png').'" />'          $msgoptions='<tr><th><img src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/feedback.png').'" />'
                    .'<br />'.&mt('Send Feedback').'<br />'.&Apache::lonhtmlcommon::coursepreflink(&mt('Feedback Settings'),'feedback').'</th>'.                     .'<br />'.&mt('Send Feedback').'<br />'.&Apache::lonhtmlcommon::coursepreflink(&mt('Feedback Settings'),'feedback').'</th>'.
Line 3108  sub feedback_available { Line 3034  sub feedback_available {
 }  }
   
 sub send_msg {  sub send_msg {
     my ($title,$feedurl,$email,$citations,$attachmenturl,$symb,$clientip,%to)=@_;      my ($title,$feedurl,$email,$citations,$attachmenturl,$symb,%to)=@_;
     my $status='';      my $status='';
     my $sendsomething=0;      my $sendsomething=0;
     my $delay;  
     my $senthide;  
     my %setters;  
     my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) =  
         &Apache::loncommon::blockcheck(\%setters,'com',$clientip);  
     if ($by_ip) {  
         $senthide = 1;  
     }  
     my $restitle = &get_resource_title($symb,$feedurl);      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'); }
Line 3132  sub send_msg { Line 3050  sub send_msg {
     } else {      } else {
  unless (&Apache::lonmsg::user_normal_msg($user,$domain,   unless (&Apache::lonmsg::user_normal_msg($user,$domain,
  $title.' ['.$restitle.']',$email,$citations,$feedurl,   $title.' ['.$restitle.']',$email,$citations,$feedurl,
  $attachmenturl,undef,undef,$symb,$restitle,undef,   $attachmenturl,undef,undef,$symb,$restitle)=~/ok/) {
                                                          undef,undef,undef,$senthide)=~/ok/) {  
     $status.='<br />'.&mt('Error sending message to').' '.$key.'<br />';      $status.='<br />'.&mt('Error sending message to').' '.$key.'<br />';
  } else {   } else {
     $sendsomething++;      $sendsomething++;
Line 3141  sub send_msg { Line 3058  sub send_msg {
     }      }
  }   }
     }      }
     if ($sendsomething && $senthide) {  
         if ($by_ip) {  
             my $showdom = &Apache::lonnet::domain($blockdom);  
             if ($showdom eq '') {  
                 $showdom = $blockdom;  
             }  
             $delay = 4;  
             $status.='<br />'.&mt("Message content of feedback you send to instructor(s) from your current IP address: [_1] will be unavailable in your 'Sent' folder.",$clientip).  
                      '<ul><li>'.  
                      &mt('This does not affect delivery of feedback to your instructor(s).').  
                      '</li><li>'.  
                      &mt('Note: some types of communication functionality are blocked for certain IP address(es).').  
                      '</li><li>'.  
                      &mt('This restriction was set by an administrator in the [_1] LON-CAPA domain.',  
                          $showdom).  
                      '</li></ul><br />';  
         }  
     }  
   
 # Records of number of feedback messages are kept under the "symb" called "_feedback"  # Records of number of feedback messages are kept under the "symb" called "_feedback"
 # There are two entries within the framework of a course:  # There are two entries within the framework of a course:
Line 3176  sub send_msg { Line 3075  sub send_msg {
     }      }
         }          }
     }      }
     return ($status,$sendsomething,$delay);      return ($status,$sendsomething);
 }  }
   
 # Routine to get the complete feedback records  # Routine to get the complete feedback records
Line 3266  sub adddiscuss { Line 3165  sub adddiscuss {
     if (($symb) && ($email)) {      if (($symb) && ($email)) {
         my $now = time;          my $now = time;
         if ($env{'form.editdisc'}) {          if ($env{'form.editdisc'}) {
             $contrib{'ip'}=&Apache::lonnet::get_requestor_ip();              $contrib{'ip'}=$ENV{'REMOTE_ADDR'};
             $contrib{'host'}=$Apache::lonnet::perlvar{'lonHostID'};              $contrib{'host'}=$Apache::lonnet::perlvar{'lonHostID'};
             $contrib{'timestamp'} = $now;              $contrib{'timestamp'} = $now;
             $contrib{'history'} = '';              $contrib{'history'} = '';
Line 3600  sub modify_attachments { Line 3499  sub modify_attachments {
    document.modattachments.action = document.modattachments.origpage.value;     document.modattachments.action = document.modattachments.origpage.value;
    document.modattachments.submit();     document.modattachments.submit();
  }   }
 </script>  </script> 
 <script type="text/javascript" src="/res/adm/includes/file_upload.js"></script>  <script type="text/javascript" src="/res/adm/includes/file_upload.js"></script>
 END  END
   
Line 3643  END Line 3542  END
     $r->print('<b>'.$subject.'</b>');      $r->print('<b>'.$subject.'</b>');
     $r->print(&Apache::lonhtmlcommon::row_closure());      $r->print(&Apache::lonhtmlcommon::row_closure());
     $r->print(&Apache::lonhtmlcommon::row_title($lt{'adda'}));      $r->print(&Apache::lonhtmlcommon::row_title($lt{'adda'}));
     $r->print('<input type="file" name="addnewattach" class="LC_flUpload" />'      $r->print('<input type="file" name="addnewattach" class="flUpload" />'
         .'<input type="hidden" id="LC_free_space" value="131072" />'          .'<input type="hidden" id="free_space" value="131072" />'
         .'<input type="button" name="upload" value="Upload" '          .'<input type="button" name="upload" value="Upload" '
         .'onclick="this.form.submit()" />  '.$attachmaxtext);          .'onclick="this.form.submit()" />  '.$attachmaxtext);
     if(($idx)||(ref($currnewattach) eq 'ARRAY') && (@{$currnewattach} > 0)){      if(($idx)||(ref($currnewattach) eq 'ARRAY') && (@{$currnewattach} > 0)){
Line 3987  sub handler { Line 3886  sub handler {
           my $symb=(split(/\:\:\:/,$env{'form.editdisc'}))[0];            my $symb=(split(/\:\:\:/,$env{'form.editdisc'}))[0];
           my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);            my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
           my $feedurl=&Apache::lonnet::clutter($url);            my $feedurl=&Apache::lonnet::clutter($url);
           &redirect_back($r,$feedurl,&mt('Editing not permitted').'<br />',            &redirect_back($r,$feedurl,&mt('Editing not permitted').'<br />',                     '0','0','','',$env{'form.previous'},undef,undef,undef,
                          '0','0','','',$env{'form.previous'},undef,undef,undef,                      undef,undef,undef,$group);
                          undef,undef,undef,$group);  
           return OK;            return OK;
       }        }
   }     } 
Line 4196  ENDREDIR Line 4094  ENDREDIR
       unless (($seehidden) || (&editing_allowed($env{'form.hide'},$group))) {        unless (($seehidden) || (&editing_allowed($env{'form.hide'},$group))) {
           &redirect_back($r,$feedurl,&mt('Hiding not permitted').'<br />',            &redirect_back($r,$feedurl,&mt('Hiding not permitted').'<br />',
                          '0','0','','',$env{'form.previous'},'','','','',                           '0','0','','',$env{'form.previous'},'','','','',
                          undef,undef,$group);                           undef,undef,$group,);
           return OK;            return OK;
       }        }
   
Line 4628  ENDREDIR Line 4526  ENDREDIR
   $r->internal_redirect('/adm/ambiguous');    $r->internal_redirect('/adm/ambiguous');
   return OK;    return OK;
       }        }
       if ($feedurl eq '') {  
           &Apache::loncommon::content_type($r,'text/html');  
           $r->send_http_header;  
           &no_redirect_back($r);  
           return OK;  
       }  
 # Go ahead with feedback, no ambiguous reference  # Go ahead with feedback, no ambiguous reference
       unless (        unless (
   (    (
Line 4648  ENDREDIR Line 4540  ENDREDIR
   $r->send_http_header;    $r->send_http_header;
 # Unable to give feedback  # Unable to give feedback
           &Apache::lonenc::check_encrypt(\$feedurl);            &Apache::lonenc::check_encrypt(\$feedurl);
   &no_redirect_back($r,$feedurl,2);    &no_redirect_back($r,$feedurl);
   return OK;    return OK;
       }        }
 # --------------------------------------------------- Print login screen header  # --------------------------------------------------- Print login screen header
Line 4668  ENDREDIR Line 4560  ENDREDIR
   if ($options) {    if ($options) {
       &mail_screen($r,$feedurl,$options,$symb,$attachmax{'text'});        &mail_screen($r,$feedurl,$options,$symb,$attachmax{'text'});
   } else {    } else {
       &fail_redirect($r,$feedurl,2);        &fail_redirect($r,$feedurl);
   }    }
   return OK;    return OK;
       }        }
Line 4687  ENDREDIR Line 4579  ENDREDIR
       my $usersymb = &Apache::lonenc::check_encrypt($symb);        my $usersymb = &Apache::lonenc::check_encrypt($symb);
       my $useranswer=        my $useranswer=
           &Apache::loncommon::get_student_answers(            &Apache::loncommon::get_student_answers(
               $symb,$env{'user.name'},$env{'user.domain'},                $usersymb,$env{'user.name'},$env{'user.domain'},
               $env{'request.course.id'});                $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
Line 4734  ENDREDIR Line 4626  ENDREDIR
       my ($typestyle,%to) = &Apache::lonmsg::decide_receiver($feedurl);        my ($typestyle,%to) = &Apache::lonmsg::decide_receiver($feedurl);
   
 # Actually send mail  # Actually send mail
       my $clientip = &Apache::lonnet::get_requestor_ip($r);        my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'}),
       my ($status,$numsent,$delay)=&send_msg(&clear_out_html($env{'form.subject'}),        $feedurl,$email,$citations,
              $feedurl,$email,$citations,        $attachmenturl,$usersymb,%to);
              $attachmenturl,$usersymb,$clientip,%to);  
   
 # Discussion? Store that.  # Discussion? Store that.
       my $numpost=0;        my $numpost=0;
Line 4768  ENDREDIR Line 4659  ENDREDIR
       }        }
       
 # Receipt screen and redirect back to where came from  # Receipt screen and redirect back to where came from
       &redirect_back($r,$feedurl,$typestyle,$numsent,$numpost,$blog,$status,$env{'form.previous'},        &redirect_back($r,$feedurl,$typestyle,$numsent,$numpost,$blog,$status,$env{'form.previous'},undef,undef,undef,undef,undef,undef,$group,$toolarge);
                      undef,undef,undef,undef,undef,undef,$group,$toolarge,$delay);  
   }    }
   return OK;    return OK;
 }  }

Removed from v.1.370.2.7  
changed lines
  Added in v.1.371


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