--- loncom/interface/lonfeedback.pm 2013/09/23 17:35:07 1.367 +++ loncom/interface/lonfeedback.pm 2023/09/15 23:02:08 1.370.2.7 @@ -1,7 +1,7 @@ # The LearningOnline Network # Feedback # -# $Id: lonfeedback.pm,v 1.367 2013/09/23 17:35:07 bisitz Exp $ +# $Id: lonfeedback.pm,v 1.370.2.7 2023/09/15 23:02:08 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -44,8 +44,8 @@ use HTML::LCParser(); #use HTML::Tidy::libXML; use Apache::lonspeller(); use Apache::longroup; -use Cwd; -use LONCAPA; +use Archive::Zip qw( :ERROR_CODES ); +use LONCAPA qw(:DEFAULT :match); sub discussion_open { my ($status,$symb)=@_; @@ -336,12 +336,15 @@ sub list_discussion { 'aner' => 'An error occurred opening the manifest file.', 'difo' => 'Discussion for', 'aerr' => 'An error occurred opening the export file for posting', + 'discussions' => 'DISCUSSIONS' + ); + my %js_lt = &Apache::lonlocal::texthash( 'aysu' => 'Are you sure you want to delete this post?', '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' ); + &js_escape(\%js_lt); my $currdisp = $lt{'allposts'}; my $currmark = $lt{'onmark'}; @@ -447,12 +450,12 @@ imscp_v1p1.xsd http://www.imsglobal.org/ prevparm = "&previous="+previous } if (caller == 'studentdelete') { - if (confirm("$lt{'aysu'}\\n$lt{'dpwn'},\\n$lt{'bwco'}")) { + if (confirm("$js_lt{'aysu'}\\n$js_lt{'dpwn'},\\n$js_lt{'bwco'}")) { document.location.href = "/adm/feedback?hide="+symbparm+prevparm+groupparm } } else { if (caller == 'seeiddelete') { - if (confirm("$lt{'aysu'}\\n$lt{'depo'}")) { + if (confirm("$js_lt{'aysu'}\\n$js_lt{'depo'}")) { document.location.href = "/adm/feedback?deldisc="+symbparm+prevparm+groupparm } } @@ -468,18 +471,18 @@ imscp_v1p1.xsd http://www.imsglobal.org/ my $numhidden = keys(%notshown); if ($numhidden > 0) { my $colspan = $maxdepth+1; - $discussion.="\n".'
'. + &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.').'
'; } } } else { - $discussion .= ''. + &mt('Unfortunately you will not be able to retrieve an archive of the discussion posts at this time, because there was a problem creating a manifest file.').'
'; } return $discussion; } @@ -840,7 +855,7 @@ sub send_feedback_link { &discussion_link($ressymb, ' ', + '" /> ', 'replydisc'). ''; } @@ -851,7 +866,7 @@ sub send_message_link { &discussion_link($ressymb, ' ', + '" /> ', 'sendmessageonly'). ''; return $output; @@ -926,7 +941,7 @@ sub postingform_display { $currnewattach,$currdelold,$group,$crstype) = @_; my $newattachmsg; 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', 'podi' => 'Post Discussion', 'poan' => 'Post Anonymous Discussion', @@ -1278,7 +1293,7 @@ sub build_posting_display { if (&editing_allowed($escsymb.':::'.$idx,$group)) { if (($env{'user.domain'} eq $contrib{$idx.':senderdomain'}) && ($env{'user.name'} eq $contrib{$idx.':sendername'})) { $sender.=' '. - &discussion_link($symb,&mt('Edit'),'editdisc',$idx,$$newpostsflag,$prevread,&group_args($group)); + &discussion_link($ressymb,&mt('Edit'),'editdisc',$idx,$$newpostsflag,$prevread,&group_args($group)); unless ($seehidden) { my $grpargs = &group_args($group); $sender.=" '. ' '. @@ -1505,12 +1521,12 @@ sub build_posting_display { if ($userlikes{$idx}) { $$discussionitems[$idx].=''; } else { - $$discussionitems[$idx].=' '.&discussion_link($symb,'','like',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Like this posting")); + $$discussionitems[$idx].=' '.&discussion_link($ressymb,'','like',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Like this posting")); } if ($userunlikes{$idx}) { $$discussionitems[$idx].=''; } else { - $$discussionitems[$idx].=' '.&discussion_link($symb,'','unlike',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Unlike this posting")); + $$discussionitems[$idx].=' '.&discussion_link($ressymb,'','unlike',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Unlike this posting")); } } } @@ -1528,7 +1544,7 @@ sub build_posting_display { $$discussionitems[$idx] .= ' '.&mt('This post has been edited by the author.'); if ($seehidden) { $$discussionitems[$idx] .= ' '. - &discussion_link($symb,&mt('Display all versions'),'allversions',$idx,$$newpostsflag,$prevread,&group_args($group)); + &discussion_link($ressymb,&mt('Display all versions'),'allversions',$idx,$$newpostsflag,$prevread,&group_args($group)); } $$discussionitems[$idx].='$lt{'sorr'}
+ ENDFAILREDIR $r->print(&Apache::loncommon::end_page()); } sub redirect_back { - my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$blog,$status,$previous,$sort,$rolefilter,$statusfilter,$sectionpick,$grouppick,$numpicks,$group,$toolarge) = @_; + my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$blog,$status,$previous,$sort, + $rolefilter,$statusfilter,$sectionpick,$grouppick,$numpicks,$group,$toolarge,$delay) = @_; my $sorttag = ''; my $roletag = ''; my $statustag = ''; @@ -2803,10 +2841,20 @@ sub redirect_back { &Apache::lonenc::check_encrypt(\$feedurl); my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif'); my %parms=('only_body' => 1); + if ($delay !~ /^\d+(|\.\d+)$/) { + $delay = 0; + } if ($env{'form.modal'}) { - $parms{'add_entries'}={'onLoad' => 'document.forms.reldt.submit()'}; + 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'}=[0,$feedurl]; + $parms{'redirect'}=[$delay,$feedurl]; } my $start_page= &Apache::loncommon::start_page('Feedback sent',undef,\%parms); @@ -2834,39 +2882,59 @@ ENDREDIR } sub no_redirect_back { - my ($r,$feedurl) = @_; + my ($r,$feedurl,$delay) = @_; my $nofeed=&mt('Sorry, no feedback possible on this resource ...'); - - my %onload; - - my %body_options = ('only_body' => 1, - 'bgcolor' => '#FFFFFF', - 'add_entries' => \%onload,); - - if ($feedurl !~ m{^/adm/feedback}) { - $body_options{'redirect'} = [2,$feedurl]; + my $form_for_modal; + my %parms=('only_body' => 1, + 'bgcolor' => '#FFFFFF',); + if ($delay !~ /^\d+(|\.\d+)$/) { + $delay = 0; + } + if ($env{'form.modal'}) { + if (($feedurl !~ m{^/adm/feedback}) && ($feedurl ne '')) { + 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}; + my $windowname = 'loncapaclient'; + $form_for_modal = <