version 1.138, 2004/11/15 23:02:45
|
version 1.155, 2005/03/01 03:21:04
|
Line 68 sub discussion_visible {
|
Line 68 sub discussion_visible {
|
} |
} |
|
|
sub list_discussion { |
sub list_discussion { |
my ($mode,$status,$ressymb)=@_; |
my ($mode,$status,$ressymb,$imsextras)=@_; |
my $outputtarget=$ENV{'form.grade_target'}; |
my $outputtarget=$ENV{'form.grade_target'}; |
if (defined($ENV{'form.export'})) { |
if (defined($ENV{'form.export'})) { |
if($ENV{'form.export'}) { |
if($ENV{'form.export'}) { |
$outputtarget = 'export'; |
$outputtarget = 'export'; |
} |
} |
} |
} |
|
if (defined($imsextras)) { |
|
if ($$imsextras{'caller'} eq 'imsexport') { |
|
$outputtarget = 'export'; |
|
} |
|
} |
if (not &discussion_visible($status)) { return ''; } |
if (not &discussion_visible($status)) { return ''; } |
my @bgcols = ("#cccccc","#eeeeee"); |
my @bgcols = ("#cccccc","#eeeeee"); |
my $discussiononly=0; |
my $discussiononly=0; |
Line 84 sub list_discussion {
|
Line 89 sub list_discussion {
|
my $cid=$ENV{'request.course.id'}; |
my $cid=$ENV{'request.course.id'}; |
if ($ENV{'request.course.sec'}) { |
if ($ENV{'request.course.sec'}) { |
$crs.='_'.$ENV{'request.course.sec'}; |
$crs.='_'.$ENV{'request.course.sec'}; |
} |
} |
$crs=~s/\_/\//g; |
$crs=~s/\_/\//g; |
unless ($ressymb) { $ressymb=&Apache::lonnet::symbread(); } |
unless ($ressymb) { $ressymb=&Apache::lonnet::symbread(); } |
unless ($ressymb) { return ''; } |
unless ($ressymb) { return ''; } |
Line 106 sub list_discussion {
|
Line 111 sub list_discussion {
|
my $userpickkey = $ressymb.'_userpick'; |
my $userpickkey = $ressymb.'_userpick'; |
my $toggkey = $ressymb.'_readtoggle'; |
my $toggkey = $ressymb.'_readtoggle'; |
my $readkey = $ressymb.'_read'; |
my $readkey = $ressymb.'_read'; |
|
$ressymb=$encsymb; |
my %dischash = &Apache::lonnet::get('nohist_'.$ENV{'request.course.id'}.'_discuss',[$lastkey,$showkey,$markkey,$visitkey,$ondispkey,$userpickkey,$toggkey,$readkey],$ENV{'user.domain'},$ENV{'user.name'}); |
my %dischash = &Apache::lonnet::get('nohist_'.$ENV{'request.course.id'}.'_discuss',[$lastkey,$showkey,$markkey,$visitkey,$ondispkey,$userpickkey,$toggkey,$readkey],$ENV{'user.domain'},$ENV{'user.name'}); |
my %discinfo = (); |
my %discinfo = (); |
my $showonlyunread = 0; |
my $showonlyunread = 0; |
Line 122 sub list_discussion {
|
Line 127 sub list_discussion {
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['previous','sortposts','rolefilter','statusfilter','sectionpick','totposters']); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['previous','sortposts','rolefilter','statusfilter','sectionpick','totposters']); |
my $sortposts = $ENV{'form.sortposts'}; |
my $sortposts = $ENV{'form.sortposts'}; |
my $statusfilter = $ENV{'form.statusfilter'}; |
my $statusfilter = $ENV{'form.statusfilter'}; |
my $sectionpick = $ENV{'form.sectionpick'}; |
my @sectionpick = (); |
|
if ($ENV{'form.sectionpick'} =~ /,/) { |
|
@sectionpick = split/,/,$ENV{'form.sectionpick'}; |
|
} else { |
|
$sectionpick[0] = $ENV{'form.sectionpick'}; |
|
} |
|
my @rolefilter = (); |
|
if ($ENV{'form.rolefilter'} =~ /,/) { |
|
@rolefilter = split/,/,$ENV{'form.rolefilter'}; |
|
} else { |
|
$rolefilter[0] = $ENV{'form.rolefilter'}; |
|
} |
my $totposters = $ENV{'form.totposters'}; |
my $totposters = $ENV{'form.totposters'}; |
$previous = $ENV{'form.previous'}; |
$previous = $ENV{'form.previous'}; |
if ($previous > 0) { |
if ($previous > 0) { |
Line 140 sub list_discussion {
|
Line 156 sub list_discussion {
|
%roleshash = &Apache::lonnet::dump('nohist_userroles',$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
%roleshash = &Apache::lonnet::dump('nohist_userroles',$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
foreach (keys %roleshash) { |
foreach (keys %roleshash) { |
my ($role,$uname,$udom,$sec) = split/:/,$_; |
my ($role,$uname,$udom,$sec) = split/:/,$_; |
|
if ($role =~ /^cr/) { |
|
$role = 'cr'; |
|
} |
my ($end,$start) = split/:/,$roleshash{$_}; |
my ($end,$start) = split/:/,$roleshash{$_}; |
my $now = time; |
my $now = time; |
my $status = 'Active'; |
my $status = 'Active'; |
if (($now < $start) || ($end > 0 && $now > $end)) { |
if (($now < $start) || ($end > 0 && $now > $end)) { |
$status = 'Expired'; |
$status = 'Expired'; |
} |
} |
push @{$roleinfo{$uname.':'.$udom}}, $role.':'.$sec.':'.$status; |
if ($uname && $udom) { |
|
push @{$roleinfo{$uname.':'.$udom}}, $role.':'.$sec.':'.$status; |
|
} |
} |
} |
my ($classlist) = &Apache::loncoursedata::get_classlist( |
my ($classlist) = &Apache::loncoursedata::get_classlist( |
$ENV{'request.course.id'}, |
$ENV{'request.course.id'}, |
Line 224 sub list_discussion {
|
Line 245 sub list_discussion {
|
$discinfo{$visitkey} = $visit; |
$discinfo{$visitkey} = $visit; |
|
|
&Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'}); |
&Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'}); |
&build_posting_display(\%usernamesort,\%subjectsort,\%namesort,\%notshown,\%newitem,\%dischash,\%shown,\%alldiscussion,\%imsitems,\%imsfiles,\%roleinfo,\@discussionitems,\@replies,\@depth,\@posters,\$maxdepth,\$visible,\$newpostsflag,\$current,$status,$viewgrades,$seeid,$prevread,$sortposts,$encsymb,$target,$readkey,$showunmark,$showonlyunread,$totposters,$ENV{'form.rolefilter'},$sectionpick,$statusfilter,$toggkey,$outputtarget); |
&build_posting_display(\%usernamesort,\%subjectsort,\%namesort,\%notshown,\%newitem,\%dischash,\%shown,\%alldiscussion,\%imsitems,\%imsfiles,\%roleinfo,\@discussionitems,\@replies,\@depth,\@posters,\$maxdepth,\$visible,\$newpostsflag,\$current,$status,$viewgrades,$seeid,$prevread,$sortposts,$encsymb,$target,$readkey,$showunmark,$showonlyunread,$totposters,\@rolefilter,\@sectionpick,$statusfilter,$toggkey,$outputtarget); |
|
|
my $discussion=''; |
my $discussion=''; |
my $manifestfile; |
my $manifestfile; |
Line 309 sub list_discussion {
|
Line 330 sub list_discussion {
|
} elsif ($outputtarget eq 'export') { |
} elsif ($outputtarget eq 'export') { |
# Create temporary directory if this is an export |
# Create temporary directory if this is an export |
my $now = time; |
my $now = time; |
$tempexport = $Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/ims_exports'; |
if ((defined($imsextras)) && ($$imsextras{'caller'} eq 'imsexport')) { |
if (!-e $tempexport) { |
$tempexport = $$imsextras{'tempexport'}; |
mkdir($tempexport,0700); |
if (!-e $tempexport) { |
} |
mkdir($tempexport,0700); |
$tempexport .= '/'.$now; |
} |
if (!-e $tempexport) { |
$tempexport .= '/'.$$imsextras{'count'}; |
mkdir($tempexport,0700); |
if (!-e $tempexport) { |
|
mkdir($tempexport,0700); |
|
} |
|
} else { |
|
$tempexport = $Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/ims_exports'; |
|
if (!-e $tempexport) { |
|
mkdir($tempexport,0700); |
|
} |
|
$tempexport .= '/'.$now; |
|
if (!-e $tempexport) { |
|
mkdir($tempexport,0700); |
|
} |
|
$tempexport .= '/'.$ENV{'user.domain'}.'_'.$ENV{'user.name'}; |
} |
} |
$tempexport .= '/'.$ENV{'user.domain'}.'_'.$ENV{'user.name'}; |
|
if (!-e $tempexport) { |
if (!-e $tempexport) { |
mkdir($tempexport,0700); |
mkdir($tempexport,0700); |
} |
} |
Line 397 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 429 imscp_v1p1.xsd http://www.imsglobal.org/
|
if ($numhidden > 0) { |
if ($numhidden > 0) { |
my $colspan = $maxdepth+1; |
my $colspan = $maxdepth+1; |
$discussion.="\n".'<tr><td bgcolor="#CCCCCC" colspan="'.$colspan.'">'. |
$discussion.="\n".'<tr><td bgcolor="#CCCCCC" colspan="'.$colspan.'">'. |
'<a href="/adm/feedback?allposts='.$ressymb; |
'<a href="/adm/feedback?allposts=1&symb='.$ressymb; |
if ($newpostsflag) { |
if ($newpostsflag) { |
$discussion .= '&previous='.$prevread; |
$discussion .= '&previous='.$prevread; |
} |
} |
Line 435 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 467 imscp_v1p1.xsd http://www.imsglobal.org/
|
} |
} |
} |
} |
} else { |
} else { |
$sortposts = 'ascdate'; |
|
@showposts = (sort { $a <=> $b } keys %alldiscussion); |
@showposts = (sort { $a <=> $b } keys %alldiscussion); |
} |
} |
my $currdepth = 0; |
my $currdepth = 0; |
my $firstidx = $alldiscussion{$showposts[0]}; |
my $firstidx = $alldiscussion{$showposts[0]}; |
foreach (@showposts) { |
foreach (@showposts) { |
unless (($sortposts eq 'thread') || ($sortposts eq 'ascdate' && $ENV{'environment.threadeddiscussion'}) || ($outputtarget eq 'export')) { |
unless (($sortposts eq 'thread') || (($sortposts eq '') && ($ENV{'environment.threadeddiscussion'})) || ($outputtarget eq 'export')) { |
$alldiscussion{$_} = $_; |
$alldiscussion{$_} = $_; |
} |
} |
unless ( ($notshown{$alldiscussion{$_}} eq '1') || ($shown{$alldiscussion{$_}} == 0) ) { |
unless ( ($notshown{$alldiscussion{$_}} eq '1') || ($shown{$alldiscussion{$_}} == 0) ) { |
Line 481 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 512 imscp_v1p1.xsd http://www.imsglobal.org/
|
$imsitems{$alldiscussion{$_}}{'isvisible'}.'" identifieref="RES-'.$ressymb.'-'.$alldiscussion{$_}.'">'. |
$imsitems{$alldiscussion{$_}}{'isvisible'}.'" identifieref="RES-'.$ressymb.'-'.$alldiscussion{$_}.'">'. |
'<title>'.$imsitems{$alldiscussion{$_}}{'title'}.'</title>'; |
'<title>'.$imsitems{$alldiscussion{$_}}{'title'}.'</title>'; |
$imsresources .= "\n". |
$imsresources .= "\n". |
'<resource identifier="RES-'.$ressymb.'-'.$alldiscussion{$_}.'" type="webcontent" href="'.$postfilename.'">'. |
'<resource identifier="RES-'.$ressymb.'-'.$alldiscussion{$_}.'" type="webcontent" href="'.$postfilename.'">'."\n". |
'<file href="'.$alldiscussion{$_}.'.html">'."\n". |
'<file href="'.$postfilename.'">'."\n". |
$imsfiles{$alldiscussion{$_}}{$imsitems{$alldiscussion{$_}}{'currversion'}}."\n". |
$imsfiles{$alldiscussion{$_}}{$imsitems{$alldiscussion{$_}}{'currversion'}}."\n". |
'</resource>'; |
'</resource>'; |
} |
} |
Line 539 END
|
Line 570 END
|
$discussion .= <<END; |
$discussion .= <<END; |
</font></td> |
</font></td> |
<td> </td> |
<td> </td> |
<td> |
<td align="left"> |
<font size="-1"><b><a href="$chglink">$lt{'chgt'}</a>?</font></b> |
<font size="-1"><b><a href="$chglink">$lt{'chgt'}</a>?</font></b> |
</td> |
</td> |
</tr> |
</tr> |
</table> |
</table> |
</td> |
</td> |
END |
END |
|
if ($sortposts) { |
|
my %sort_types = (); |
|
my %role_types = (); |
|
my %status_types = (); |
|
&sort_filter_names(\%sort_types,\%role_types,\%status_types); |
|
|
|
$discussion .= '<td><font size="-1"><b>'.&mt('Sorted by').'</b>: '.$sort_types{$sortposts}.'<br />'; |
|
if (defined($ENV{'form.totposters'})) { |
|
$discussion .= &mt('Posts by').':'; |
|
if ($totposters > 0) { |
|
foreach my $poster (@posters) { |
|
$poster =~ s/:/\@/; |
|
$discussion .= ' '.$poster.','; |
|
} |
|
$discussion =~ s/,$//; |
|
} else { |
|
$discussion .= &mt('None selected'); |
|
} |
|
} else { |
|
my $filterchoice =''; |
|
if (@sectionpick > 0) { |
|
$filterchoice = '<i>'.&mt('sections').'</i>- '.$ENV{'form.sectionpick'}; |
|
$filterchoice .= ' '; |
|
} |
|
if (@rolefilter > 0) { |
|
$filterchoice .= '<i>'.&mt('roles').'</i>-'; |
|
foreach (@rolefilter) { |
|
$filterchoice .= ' '.$role_types{$_}.','; |
|
} |
|
$filterchoice =~ s/,$//; |
|
$filterchoice .= '<br />     '; |
|
} |
|
if ($statusfilter) { |
|
$filterchoice .= '<i>'.&mt('status').'</i>- '.$status_types{$statusfilter}; |
|
} |
|
if ($filterchoice) { |
|
$discussion .= '<b>'.&mt('Filters').'</b>: '.$filterchoice; |
|
} |
|
$discussion .= '</font></td>'; |
|
} |
|
} |
if ($dischash{$toggkey}) { |
if ($dischash{$toggkey}) { |
my $storebutton = &mt('Store read/unread changes'); |
my $storebutton = &mt('Store read/unread changes'); |
$discussion.='<td align="right">'. |
$discussion.='<td align="right">'. |
Line 578 END
|
Line 650 END
|
</manifest> |
</manifest> |
|; |
|; |
close($manifestfile); |
close($manifestfile); |
|
if ((defined($imsextras)) && ($$imsextras{'caller'} eq 'imsexport')) { |
|
$discussion = $copyresult; |
|
} else { |
|
|
#Create zip file in prtspool |
#Create zip file in prtspool |
|
|
my $imszipfile = '/prtspool/'. |
my $imszipfile = '/prtspool/'. |
$ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'. |
$ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'. |
time.'_'.rand(1000000000).'.zip'; |
time.'_'.rand(1000000000).'.zip'; |
# zip can cause an sh launch which can pass along all of %ENV |
# zip can cause an sh launch which can pass along all of %ENV |
# which can be too large for /bin/sh to handle |
# which can be too large for /bin/sh to handle |
my %oldENV=%ENV; |
my %oldENV=%ENV; |
undef(%ENV); |
undef(%ENV); |
my $cwd = &getcwd(); |
my $cwd = &getcwd(); |
my $imszip = '/home/httpd/'.$imszipfile; |
my $imszip = '/home/httpd/'.$imszipfile; |
chdir $tempexport; |
chdir $tempexport; |
open(OUTPUT, "zip -r $imszip * 2> /dev/null |"); |
open(OUTPUT, "zip -r $imszip * 2> /dev/null |"); |
close(OUTPUT); |
close(OUTPUT); |
chdir $cwd; |
chdir $cwd; |
%ENV=%oldENV; |
%ENV=%oldENV; |
undef(%oldENV); |
undef(%oldENV); |
$discussion .= 'Download the zip file from <a href="'.$imszipfile.'">Discussion Posting Archive</a><br />'; |
$discussion .= 'Download the zip file from <a href="'.$imszipfile.'">Discussion Posting Archive</a><br />'; |
if ($copyresult) { |
if ($copyresult) { |
$discussion .= 'The following errors occurred during export - <br />'.$copyresult; |
$discussion .= 'The following errors occurred during export - <br />'.$copyresult; |
|
} |
} |
} |
} else { |
} else { |
$discussion .= '<br />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.<br />'; |
$discussion .= '<br />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.<br />'; |
Line 638 to course faculty</font><br />
|
Line 714 to course faculty</font><br />
|
<b>Title:</b> <input type="text" name="subject" value="$subject" size="30" /><br /><br /> |
<b>Title:</b> <input type="text" name="subject" value="$subject" size="30" /><br /><br /> |
<textarea name="comment" cols="80" rows="14" wrap="hard">$comment</textarea> |
<textarea name="comment" cols="80" rows="14" wrap="hard">$comment</textarea> |
ENDDISCUSS |
ENDDISCUSS |
if ($ENV{'form.origpage'}) { |
if ($ENV{'form.origpage'}) { |
$discussion.='<input type="hidden" name="origpage" value="'.$ENV{'form.origpage'}.'" />'."\n"; |
$discussion.='<input type="hidden" name="origpage" value="'.$ENV{'form.origpage'}.'" />'."\n"; |
foreach (@currnewattach) { |
foreach (@currnewattach) { |
$discussion.='<input type="hidden" name="currnewattach" value="'.$_.'" />'."\n"; |
$discussion.='<input type="hidden" name="currnewattach" value="'.$_.'" />'."\n"; |
} |
} |
} |
} |
$discussion.="</form>\n"; |
$discussion.="</form>\n"; |
if ($outputtarget ne 'tex') { |
if ($outputtarget ne 'tex') { |
$discussion.=&generate_attachments_button('',$attachnum,$ressymb,$now,\@currnewattach,\@currdelold,'',$mode); |
$discussion.=&generate_attachments_button('',$attachnum,$ressymb,$now,\@currnewattach,\@currdelold,'',$mode); |
if (@currnewattach > 0) { |
if (@currnewattach > 0) { |
$newattachmsg .= '<b>New attachments</b><br />'; |
$newattachmsg .= '<b>New attachments</b><br />'; |
if (@currnewattach > 1) { |
if (@currnewattach > 1) { |
$newattachmsg .= '<ol>'; |
$newattachmsg .= '<ol>'; |
foreach my $item (@currnewattach) { |
foreach my $item (@currnewattach) { |
$item =~ m#.*/([^/]+)$#; |
$item =~ m#.*/([^/]+)$#; |
$newattachmsg .= '<li><a href="'.$item.'">'.$1.'</a></li>'."\n"; |
$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"; |
} |
} |
$newattachmsg .= '</ol>'."\n"; |
|
} else { |
|
$currnewattach[0] =~ m#.*/([^/]+)$#; |
|
$newattachmsg .= '<a href="'.$currnewattach[0].'">'.$1.'</a><br />'."\n"; |
|
} |
} |
} |
$discussion.=$newattachmsg; |
$discussion.=$newattachmsg; |
$discussion.=&generate_preview_button(); |
$discussion.=&generate_preview_button(); |
} |
} |
|
} |
} |
} else { |
} else { |
if (&discussion_open($status) && |
if (&discussion_open($status) && |
&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'}:''))) { |
if ($outputtarget ne 'tex') { |
if ($outputtarget ne 'tex') { |
$discussion.='<table bgcolor="#BBBBBB"><tr><td><a href="/adm/feedback?replydisc='. |
$discussion.='<table bgcolor="#BBBBBB"><tr><td><a href="/adm/feedback?replydisc='. |
$ressymb.':::" '.$target.'>'. |
$ressymb.':::" '.$target.'>'. |
'<img src="/adm/lonMisc/chat.gif" border="0" />'. |
'<img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/chat.gif').'" border="0" />'. |
&mt('Post Discussion').'</a></td></tr></table>'; |
&mt('Post Discussion').'</a></td></tr></table>'; |
} |
} |
} |
} |
Line 683 ENDDISCUSS
|
Line 759 ENDDISCUSS
|
|
|
sub build_posting_display { |
sub build_posting_display { |
my ($usernamesort,$subjectsort,$namesort,$notshown,$newitem,$dischash,$shown,$alldiscussion,$imsitems,$imsfiles,$roleinfo,$discussionitems,$replies,$depth,$posters,$maxdepth,$visible,$newpostsflag,$current,$status,$viewgrades,$seeid,$prevread,$sortposts,$ressymb,$target,$readkey,$showunmark,$showonlyunread,$totposters,$rolefilter,$sectionpick,$statusfilter,$toggkey,$outputtarget) = @_; |
my ($usernamesort,$subjectsort,$namesort,$notshown,$newitem,$dischash,$shown,$alldiscussion,$imsitems,$imsfiles,$roleinfo,$discussionitems,$replies,$depth,$posters,$maxdepth,$visible,$newpostsflag,$current,$status,$viewgrades,$seeid,$prevread,$sortposts,$ressymb,$target,$readkey,$showunmark,$showonlyunread,$totposters,$rolefilter,$sectionpick,$statusfilter,$toggkey,$outputtarget) = @_; |
|
|
my @original=(); |
my @original=(); |
my @index=(); |
my @index=(); |
my $symb=&Apache::lonenc::check_decrypt($ressymb); |
my $symb=&Apache::lonenc::check_decrypt($ressymb); |
Line 696 sub build_posting_display {
|
Line 771 sub build_posting_display {
|
if ($prevread eq '0') { |
if ($prevread eq '0') { |
$prevread = $oldest-1; |
$prevread = $oldest-1; |
} |
} |
|
my ($skiptest,$rolematch,$roleregexp,$secregexp,$statusregexp); |
|
if ($sortposts) { |
|
($skiptest,$roleregexp,$secregexp,$statusregexp) = &filter_regexp($rolefilter,$sectionpick,$statusfilter); |
|
$rolematch = $roleregexp.':'.$secregexp.':'.$statusregexp; |
|
} |
for (my $id=1;$id<=$contrib{'version'};$id++) { |
for (my $id=1;$id<=$contrib{'version'};$id++) { |
my $idx=$id; |
my $idx=$id; |
my $posttime = $contrib{$idx.':timestamp'}; |
my $posttime = $contrib{$idx.':timestamp'}; |
Line 708 sub build_posting_display {
|
Line 788 sub build_posting_display {
|
my $origindex='0.'; |
my $origindex='0.'; |
my $numoldver=0; |
my $numoldver=0; |
if ($contrib{$idx.':replyto'}) { |
if ($contrib{$idx.':replyto'}) { |
if ( (($ENV{'environment.threadeddiscussion'}) && (($sortposts eq '') || ($sortposts eq 'ascdate'))) || ($sortposts eq 'thread') || ($outputtarget eq 'export')) { |
if ( (($ENV{'environment.threadeddiscussion'}) && ($sortposts eq '')) || ($sortposts eq 'thread') || ($outputtarget eq 'export')) { |
# this is a follow-up message |
# this is a follow-up message |
$original[$idx]=$original[$contrib{$idx.':replyto'}]; |
$original[$idx]=$original[$contrib{$idx.':replyto'}]; |
$$depth[$idx]=$$depth[$contrib{$idx.':replyto'}]+1; |
$$depth[$idx]=$$depth[$contrib{$idx.':replyto'}]+1; |
Line 894 sub build_posting_display {
|
Line 974 sub build_posting_display {
|
$contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'},$ressymb); |
$contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'},$ressymb); |
} |
} |
if ($$dischash{$readkey}=~/\.$idx\./) { |
if ($$dischash{$readkey}=~/\.$idx\./) { |
$ctlink = '<b>'.&mt('Mark unread').'?</b> <input type="checkbox" name="postunread_'.$idx.'" />'; |
$ctlink = '<label><b>'.&mt('Mark unread').'?</b> <input type="checkbox" name="postunread_'.$idx.'" /></label>'; |
} else { |
} else { |
$ctlink = '<b>'.&mt('Mark read').'?</b> <input type="checkbox" name="postread_'.$idx.'" />'; |
$ctlink = '<label><b>'.&mt('Mark read').'?</b> <input type="checkbox" name="postread_'.$idx.'" /></label>'; |
} |
} |
} |
} |
#figure out at what position this needs to print |
#figure out at what position this needs to print |
} |
} |
if ($outputtarget eq 'export' || $message) { |
if ($outputtarget eq 'export' || $message) { |
my $thisindex=$idx; |
my $thisindex=$idx; |
if ( (($ENV{'environment.threadeddiscussion'}) && (($sortposts eq '') || ($sortposts eq 'ascdate'))) || ($sortposts eq 'thread') || ($outputtarget eq 'export')) { |
if ( (($ENV{'environment.threadeddiscussion'}) && ($sortposts eq '')) || ($sortposts eq 'thread') || ($outputtarget eq 'export')) { |
$thisindex=$origindex.substr('00'.$$replies[$$depth[$idx]],-2,2); |
$thisindex=$origindex.substr('00'.$$replies[$$depth[$idx]],-2,2); |
} |
} |
$$alldiscussion{$thisindex}=$idx; |
$$alldiscussion{$thisindex}=$idx; |
Line 944 sub build_posting_display {
|
Line 1024 sub build_posting_display {
|
my $uname = $contrib{$idx.':sendername'}; |
my $uname = $contrib{$idx.':sendername'}; |
my $udom = $contrib{$idx.':senderdomain'}; |
my $udom = $contrib{$idx.':senderdomain'}; |
my $poster = $uname.':'.$udom; |
my $poster = $uname.':'.$udom; |
my $rolematch = ''; |
if (defined($ENV{'form.totposters'})) { |
my $skiptest = 1; |
if ($totposters == 0) { |
if ($totposters > 0) { |
$$shown{$idx} = 0; |
if (grep/^$poster$/,@{$posters}) { |
} elsif ($totposters > 0) { |
$$shown{$idx} = 1; |
if (grep/^$poster$/,@{$posters}) { |
} |
$$shown{$idx} = 1; |
} else { |
|
if ($rolefilter) { |
|
if ($rolefilter eq 'all') { |
|
$rolematch = '([^:]+)'; |
|
} else { |
|
$rolematch = $rolefilter; |
|
$skiptest = 0; |
|
} |
|
} |
|
if ($sectionpick) { |
|
if ($sectionpick eq 'all') { |
|
$rolematch .= ':([^:]*)'; |
|
} else { |
|
$rolematch .= ':'.$sectionpick; |
|
$skiptest = 0; |
|
} |
|
} |
|
if ($statusfilter) { |
|
if ($statusfilter eq 'all') { |
|
$rolematch .= ':([^:]+)'; |
|
} else { |
|
$rolematch .= ':'.$statusfilter; |
|
$skiptest = 0; |
|
} |
} |
} |
} |
|
} elsif ($sortposts) { |
if ($skiptest) { |
if ($skiptest) { |
$$shown{$idx} = 1; |
$$shown{$idx} = 1; |
} else { |
} else { |
foreach my $role (@{$$roleinfo{$poster}}) { |
foreach my $role (@{$$roleinfo{$poster}}) { |
&Apache::lonnet::logthis("\n rolematch $rolematch\nrole $role"); |
if ($role =~ /^cc:/) { |
if ($role =~ m/^$rolematch$/) { |
my $cc_regexp = $roleregexp.':[^:]*:'.$statusregexp; |
|
if ($role =~ /$cc_regexp/) { |
|
$$shown{$idx} = 1; |
|
last; |
|
} |
|
} elsif ($role =~ /^$rolematch$/) { |
$$shown{$idx} = 1; |
$$shown{$idx} = 1; |
last; |
last; |
} |
} |
} |
} |
} |
} |
|
} else { |
|
$$shown{$idx} = 1; |
} |
} |
} |
} |
unless ($$notshown{$idx} == 1) { |
unless ($$notshown{$idx} == 1) { |
Line 1035 sub build_posting_display {
|
Line 1100 sub build_posting_display {
|
} |
} |
} |
} |
|
|
|
sub filter_regexp { |
|
my ($rolefilter,$sectionpick,$statusfilter) = @_; |
|
my ($roleregexp,$secregexp,$statusregexp); |
|
my $skiptest = 1; |
|
if (@{$rolefilter} > 0) { |
|
my @okrolefilter = (); |
|
foreach (@{$rolefilter}) { |
|
unless ($_ eq '') { |
|
push @okrolefilter, $_; |
|
} |
|
} |
|
if (@okrolefilter > 0) { |
|
if (grep/^all$/,@okrolefilter) { |
|
$roleregexp='[^:]+'; |
|
} else { |
|
if (@okrolefilter == 1) { |
|
$roleregexp=$okrolefilter[0]; |
|
} else { |
|
$roleregexp='('.join('|',@okrolefilter).')'; |
|
} |
|
$skiptest = 0; |
|
} |
|
} |
|
} |
|
if (@{$sectionpick} > 0) { |
|
my @oksectionpick = (); |
|
foreach (@{$sectionpick}) { |
|
unless ($_ eq '') { |
|
push @oksectionpick, $_; |
|
} |
|
} |
|
if ((@oksectionpick > 0) && (!grep/^all$/,@oksectionpick)) { |
|
if (@oksectionpick == 1) { |
|
$secregexp = $oksectionpick[0]; |
|
} else { |
|
$secregexp .= '('.join('|',@oksectionpick).')'; |
|
} |
|
$skiptest = 0; |
|
} else { |
|
$secregexp .= '[^:]*'; |
|
} |
|
} |
|
if (defined($statusfilter) && $statusfilter ne '') { |
|
if ($statusfilter eq 'all') { |
|
$statusregexp = '[^:]+'; |
|
} else { |
|
$statusregexp = $statusfilter; |
|
$skiptest = 0; |
|
} |
|
} |
|
return ($skiptest,$roleregexp,$secregexp,$statusregexp); |
|
} |
|
|
|
|
sub get_post_contents { |
sub get_post_contents { |
my ($contrib,$idx,$seeid,$type,$messages,$subjects,$allattachments,$attachtxt,$imsfiles,$screenname,$plainname,$numver) = @_; |
my ($contrib,$idx,$seeid,$type,$messages,$subjects,$allattachments,$attachtxt,$imsfiles,$screenname,$plainname,$numver) = @_; |
my $discussion = ''; |
my $discussion = ''; |
Line 1317 END
|
Line 1436 END
|
my $latexHelp=&Apache::loncommon::helpLatexCheatsheet(); |
my $latexHelp=&Apache::loncommon::helpLatexCheatsheet(); |
my $htmlheader=&Apache::lonhtmlcommon::htmlareaheaders(); |
my $htmlheader=&Apache::lonhtmlcommon::htmlareaheaders(); |
my $send=&mt('Send'); |
my $send=&mt('Send'); |
|
my $html=&Apache::lonxml::xmlbegin(); |
$r->print(<<END); |
$r->print(<<END); |
<html> |
$html |
<head> |
<head> |
<title>The LearningOnline Network with CAPA</title> |
<title>The LearningOnline Network with CAPA</title> |
<meta http-equiv="pragma" content="no-cache"></meta> |
<meta http-equiv="pragma" content="no-cache"></meta> |
Line 1542 sub print_display_options {
|
Line 1662 sub print_display_options {
|
$currtogg = $lt{'toggon'}; |
$currtogg = $lt{'toggon'}; |
$disctogg = 'toggon'; |
$disctogg = 'toggon'; |
} |
} |
|
my $html=&Apache::lonxml::xmlbegin(); |
$r->print(<<END); |
$r->print(<<END); |
<html> |
$html |
<head> |
<head> |
<title>$lt{'dido'}</title> |
<title>$lt{'dido'}</title> |
<meta http-equiv="pragma" content="no-cache" /> |
<meta http-equiv="pragma" content="no-cache" /> |
Line 1634 $lt{'sdpf'}<br/> $lt{'prca'} <ol><li>$l
|
Line 1755 $lt{'sdpf'}<br/> $lt{'prca'} <ol><li>$l
|
<tr bgcolor="#dddddd"> |
<tr bgcolor="#dddddd"> |
<td>$lt{'disa'}</td> |
<td>$lt{'disa'}</td> |
<td>$lt{$discdisp}</td> |
<td>$lt{$discdisp}</td> |
<td><input type="checkbox" name="discdisp" onClick="discdispChk('0')" /> $lt{'chgt'} "$dispchangeA" |
<td><label><input type="checkbox" name="discdisp" onClick="discdispChk('0')" /> $lt{'chgt'} "$dispchangeA"</label> |
<br /> |
<br /> |
<input type="checkbox" name="discdisp" onClick="discdispChk('1')" /> $lt{'chgt'} "$dispchangeB" |
<label><input type="checkbox" name="discdisp" onClick="discdispChk('1')" /> $lt{'chgt'} "$dispchangeB"</label> |
</td> |
</td> |
</tr><tr bgcolor="#eeeeee"> |
</tr><tr bgcolor="#eeeeee"> |
<td>$lt{'npmr'}</td> |
<td>$lt{'npmr'}</td> |
<td>$lt{$discmark}</td> |
<td>$lt{$discmark}</td> |
<td><input type="checkbox" name="discmark" />$lt{'chgt'} "$markchange"</td> |
<td><label><input type="checkbox" name="discmark" />$lt{'chgt'} "$markchange"</label></td> |
</tr><tr bgcolor="#dddddd"> |
</tr><tr bgcolor="#dddddd"> |
<td>$lt{'dotm'}</td> |
<td>$lt{'dotm'}</td> |
<td>$lt{$disctogg}</td> |
<td>$lt{$disctogg}</td> |
<td><input type="checkbox" name="disctogg" onClick="discdispChk('2')" />$lt{'chgt'} "$toggchange"</td> |
<td><label><input type="checkbox" name="disctogg" onClick="discdispChk('2')" />$lt{'chgt'} "$toggchange"</label></td> |
</tr> |
</tr> |
</table> |
</table> |
</td> |
</td> |
Line 1678 sub print_sortfilter_options {
|
Line 1799 sub print_sortfilter_options {
|
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
|
|
|
&Apache::lonenc::check_encrypt(\$symb); |
my @sections = (); |
my @sections = (); |
my $section_sel = ''; |
my $section_sel = ''; |
my $numsections = 0; |
my $numsections = 0; |
my $numvisible = 5; |
my $numvisible = 5; |
my ($classlist) = &Apache::loncoursedata::get_classlist( |
|
$ENV{'request.course.id'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
|
|
|
my $sec_index = &Apache::loncoursedata::CL_SECTION(); |
|
my $status_index = &Apache::loncoursedata::CL_STATUS(); |
|
my %sectioncount = (); |
my %sectioncount = (); |
while (my ($student,$data) = each %$classlist) { |
|
my ($section,$status) = ($data->[$sec_index], |
$numsections = &Apache::loncommon::get_sections($ENV{'course.'.$ENV{'request.course.id'}.'.domain'},$ENV{'course.'.$ENV{'request.course.id'}.'.num'},\%sectioncount); |
$data->[$status_index]); |
|
unless ($section eq '' || $section =~ /^\s*$/) { |
if ($ENV{'request.course.sec'} !~ /^\s*$/) { #Restrict section choice to current section |
if (!defined($sectioncount{$section})) { |
@sections = ('all',$ENV{'request.course.sec'}); |
$sectioncount{$section} = 1; |
$numvisible = 2; |
$numsections ++; |
|
} else { |
|
$sectioncount{$section} ++; |
|
} |
|
} |
|
} |
|
|
|
if ($ENV{'request.course.sec'} !~ /^\s*$/) { |
|
@sections = ($ENV{'request.course.sec'}); |
|
$numvisible = 1; |
|
} else { |
} else { |
@sections = sort {$a cmp $b} keys(%sectioncount); |
@sections = sort {$a cmp $b} keys(%sectioncount); |
unshift(@sections,'all'); # Put 'all' at the front of the list |
unshift(@sections,'all'); # Put 'all' at the front of the list |
Line 1727 sub print_sortfilter_options {
|
Line 1832 sub print_sortfilter_options {
|
'diop' => 'Display Options', |
'diop' => 'Display Options', |
'curr' => 'Current setting ', |
'curr' => 'Current setting ', |
'actn' => 'Action', |
'actn' => 'Action', |
'prca' => 'Options can be set that control the sort order of the posts, in addition to which posts are displayed.', |
'prca' => 'Set options that control the sort order of posts, and/or which posts are displayed.', |
'soor' => 'Sort order', |
'soor' => 'Sort order', |
'disp' => 'Specific user roles', |
'spur' => 'Specific user roles', |
'actv' => 'Specific role status', |
'sprs' => 'Specific role status', |
'spse' => 'Specific sections', |
'spse' => 'Specific sections', |
'psub' => 'Pick specific users (by name)', |
'psub' => 'Pick specific users (by name)', |
'shal' => 'Show a list of current posters' |
'shal' => 'Show a list of current posters' |
); |
); |
|
|
|
my %sort_types = (); |
|
my %role_types = (); |
|
my %status_types = (); |
|
&sort_filter_names(\%sort_types,\%role_types,\%status_types); |
|
my $html=&Apache::lonxml::xmlbegin(); |
$r->print(<<END); |
$r->print(<<END); |
<html> |
$html |
<head> |
<head> |
<title>$lt{'diso'}</title> |
<title>$lt{'diso'}</title> |
<meta http-equiv="pragma" content="no-cache" /> |
<meta http-equiv="pragma" content="no-cache" /> |
|
<script type="text/javascript"> |
|
function verifyFilter() { |
|
var rolenum = 0 |
|
for (var i=0; i<document.modifyshown.rolefilter.length; i++) { |
|
if (document.modifyshown.rolefilter.options[i].selected == true) { |
|
rolenum ++ |
|
} |
|
} |
|
if (rolenum == 0) { |
|
document.modifyshown.rolefilter.options[0].selected = true |
|
} |
|
|
|
var secnum = 0 |
|
for (var i=0; i<document.modifyshown.sectionpick.length; i++) { |
|
if (document.modifyshown.sectionpick.options[i].selected == true) { |
|
secnum ++ |
|
} |
|
} |
|
if (secnum == 0) { |
|
document.modifyshown.sectionpick.options[0].selected = true |
|
} |
|
document.modifyshown.submit(); |
|
} |
|
</script> |
</head> |
</head> |
$bodytag |
$bodytag |
<form name="modifyshown" method="post" action="/adm/feedback"> |
<form name="modifyshown" method="post" action="/adm/feedback"> |
Line 1749 $bodytag
|
Line 1884 $bodytag
|
<tr> |
<tr> |
<td><b>$lt{'soor'}</b></td> |
<td><b>$lt{'soor'}</b></td> |
<td> </td> |
<td> </td> |
<td><b>$lt{'disp'}</b></td> |
<td><b>$lt{'sprs'}</b></td> |
<td> </td> |
<td> </td> |
<td><b>$lt{'actv'}</b></td> |
<td><b>$lt{'spur'}</b></td> |
<td> </td> |
<td> </td> |
<td><b>$lt{'spse'}</b></td> |
<td><b>$lt{'spse'}</b></td> |
<td> </td> |
<td> </td> |
<td><b>$lt{'psub'}</b></td> |
<td><b>$lt{'psub'}</b></td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td> |
<td align="center"> |
<select name="sortposts"> |
<select name="sortposts"> |
<option value="ascdate" />Date order - oldest first |
<option value="ascdate" selected="selected" />$sort_types{'ascdate'} |
<option value="descdate" />Date order - newest first |
<option value="descdate" />$sort_types{'descdate'} |
<option value="thread" />Threaded |
<option value="thread" />$sort_types{'thread'} |
<option value="subject" />By subject |
<option value="subject" />$sort_types{'subject'} |
<option value="username" />By domain and username |
<option value="username" />$sort_types{'username'} |
<option value="lastfirst" />By last name, first name |
<option value="lastfirst" />$sort_types{'lastfirst'} |
</select> |
</select> |
</td> |
</td> |
<td> </td> |
<td> </td> |
<td> |
<td align="center"> |
<select name="rolefilter" multiple="true" size="5"> |
<select name="statusfilter"> |
<option value="all" />All users |
<option value="all" selected="selected" />$status_types{'all'} |
<option value="st" />Students |
<option value="Active" />$status_types{'Active'} |
<option value="cc" />Course Coordinators |
<option value="Expired" />$status_types{'Expired'} |
<option value="in" />Instructors |
|
<option value="ta" />TAs |
|
<option value="pr" />Exam proctors |
|
<option value="cr" />Custom roles |
|
</select> |
</select> |
</td> |
</td> |
<td> </td> |
<td> </td> |
<td> |
<td align="center"> |
<select name="statusfilter"> |
<select name="rolefilter" multiple="true" size="5"> |
<option value="all" />Roles of any status |
<option value="all" />$role_types{'all'} |
<option value="Active" />Only active roles |
<option value="st" />$role_types{'st'} |
<option value="Expired" />Only inactive roles |
<option value="cc" />$role_types{'cc'} |
|
<option value="in" />$role_types{'in'} |
|
<option value="ta" />$role_types{'ta'} |
|
<option value="ep" />$role_types{'ep'} |
|
<option value="ad" />$role_types{'ad'} |
|
<option value="cr" />$role_types{'cr'} |
</select> |
</select> |
</td> |
</td> |
<td> </td> |
<td> </td> |
<td> |
<td align="center"> |
<select name="sectionpick" multiple="true" size="$numvisible"> |
<select name="sectionpick" multiple="true" size="$numvisible"> |
$section_sel |
$section_sel |
</select> |
</select> |
</td> |
</td> |
<td> </td> |
<td> </td> |
<td><input type="checkbox" name="posterlist" value="$symb" />$lt{'shal'}</td> |
<td><label><input type="checkbox" name="posterlist" value="$symb" />$lt{'shal'}</label></td> |
</tr> |
</tr> |
</table> |
</table> |
<br /> |
<br /> |
<br /> |
<br /> |
<input type="hidden" name="previous" value="$previous" /> |
<input type="hidden" name="previous" value="$previous" /> |
<input type="hidden" name="applysort" value="$symb" /> |
<input type="hidden" name="applysort" value="$symb" /> |
<input type="button" name="sub" value="Store Changes" onClick="javascript:document.modifyshown.submit()" /> |
<input type="button" name="sub" value="Store Changes" onClick="verifyFilter()" /> |
<br /> |
<br /> |
<br /> |
<br /> |
</form> |
</form> |
Line 1814 END
|
Line 1950 END
|
sub print_showposters { |
sub print_showposters { |
my ($r,$symb,$previous,$feedurl,$sortposts) = @_; |
my ($r,$symb,$previous,$feedurl,$sortposts) = @_; |
|
|
# backward compatibility (bulletin boards used to be 'wrapped') |
&Apache::loncommon::content_type($r,'text/html'); |
my $ressymb=&wrap_symb($symb); |
$r->send_http_header; |
|
|
|
&Apache::lonenc::check_encrypt(\$symb); |
my $crs='/'.$ENV{'request.course.id'}; |
my $crs='/'.$ENV{'request.course.id'}; |
if ($ENV{'request.course.sec'}) { |
if ($ENV{'request.course.sec'}) { |
$crs.='_'.$ENV{'request.course.sec'}; |
$crs.='_'.$ENV{'request.course.sec'}; |
} |
} |
$crs=~s/\_/\//g; |
$crs=~s/\_/\//g; |
my $seeid=&Apache::lonnet::allowed('rin',$crs); |
my $seeid=&Apache::lonnet::allowed('rin',$crs); |
my %contrib=&Apache::lonnet::restore($ressymb,$ENV{'request.course.id'}, |
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
my %namesort = (); |
my %namesort = (); |
Line 1863 sub print_showposters {
|
Line 2001 sub print_showposters {
|
} |
} |
} |
} |
} |
} |
|
my $html=&Apache::lonxml::xmlbegin(); |
$r->print(<<END); |
$r->print(<<END); |
<html> |
$html |
<head> |
<head> |
<title>$lt{'diso'}</title> |
<title>$lt{'diso'}</title> |
<meta http-equiv="pragma" content="no-cache" /> |
<meta http-equiv="pragma" content="no-cache" /> |
Line 1891 END
|
Line 2030 END
|
next; |
next; |
} else { |
} else { |
$count ++; |
$count ++; |
$r->print('<tr bgcolor="#ffffe6"><td align="right">'.$count.'</td><td align="center"><input name="stuinfo" type="checkbox" value="'.$_.'" /></td><td>'.$last.', '.$first.' ('.$uname.','.$udom.')</td><td>'.$postcounts{$_}.'</td></tr>'); |
$r->print('<tr bgcolor="#ffffe6"><td align="right">'.$count.'</td><td align="center"><label><input name="stuinfo" type="checkbox" value="'.$_.'" /></td><td>'.$last.', '.$first.' ('.$uname.','.$udom.')</label></td><td>'.$postcounts{$_}.'</td></tr>'); |
} |
} |
} |
} |
} |
} |
Line 1972 sub get_post_attachments {
|
Line 2111 sub get_post_attachments {
|
return; |
return; |
} |
} |
|
|
sub fail_redirect {; |
sub fail_redirect { |
my ($r,$feedurl) = @_; |
my ($r,$feedurl) = @_; |
if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' }; |
if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' }; |
|
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif'); |
|
my $html=&Apache::lonxml::xmlbegin(); |
$r->print (<<ENDFAILREDIR); |
$r->print (<<ENDFAILREDIR); |
<html> |
$html |
<head><title>Feedback not sent</title> |
<head> |
|
<title>Feedback not sent</title> |
<meta http-equiv="pragma" content="no-cache" /> |
<meta http-equiv="pragma" content="no-cache" /> |
<meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl" /> |
<meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl" /> |
</head> |
</head> |
<body bgcolor="#FFFFFF"> |
<body bgcolor="#FFFFFF"> |
<img align="right" src="/adm/lonIcons/lonlogos.gif" /> |
<img align="right" src="$logo" /> |
<b>Sorry, no recipients ...</b> |
<b>Sorry, no recipients ...</b> |
<br /><a href="$feedurl">Continue</a> |
<br /><a href="$feedurl">Continue</a> |
</body> |
</body> |
Line 1991 ENDFAILREDIR
|
Line 2133 ENDFAILREDIR
|
} |
} |
|
|
sub redirect_back { |
sub redirect_back { |
my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$status,$previous,$sort,$rolefilter,$statusfilter,$secpick,$numpicks) = @_; |
my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$status,$previous,$sort,$rolefilter,$statusfilter,$sectionpick,$numpicks) = @_; |
my $sorttag = ''; |
my $sorttag = ''; |
my $roletag = ''; |
my $roletag = ''; |
my $statustag = ''; |
my $statustag = ''; |
Line 2022 sub redirect_back {
|
Line 2164 sub redirect_back {
|
$feedurl .= '?'.$sortqry; |
$feedurl .= '?'.$sortqry; |
} |
} |
$sorttag = '<input type="hidden" name="sortposts" value="'.$sort.'" />'; |
$sorttag = '<input type="hidden" name="sortposts" value="'.$sort.'" />'; |
if ( (defined($numpicks)) && ($numpicks > 0) ) { |
if (defined($numpicks)) { |
my $userpickqry = 'totposters='.$numpicks; |
my $userpickqry = 'totposters='.$numpicks; |
$feedurl .= '&'.$userpickqry; |
$feedurl .= '&'.$userpickqry; |
$userpicktag = '<input type="hidden" name="totposters" value="'.$numpicks.'" />'; |
$userpicktag = '<input type="hidden" name="totposters" value="'.$numpicks.'" />'; |
} else { |
} else { |
my $roleqry = 'rolefilter='.$rolefilter; |
if (ref($sectionpick) eq 'ARRAY') { |
$feedurl .= '&'.$roleqry; |
$feedurl .= '§ionpick='; |
$roletag = '<input type="hidden" name="rolefilter" value="'.$rolefilter.'" />'; |
$sectag .= '<input type="hidden" name="sectionpick" value="'; |
|
foreach (@{$sectionpick}) { |
|
$feedurl .= $_.','; |
|
$sectag .= $_.','; |
|
} |
|
$feedurl =~ s/,$//; |
|
$sectag =~ s/,$//; |
|
$sectag .= '" />'; |
|
} else { |
|
$feedurl .= '§ionpick='.$sectionpick; |
|
$sectag = '<input type="hidden" name="sectionpick" value="'.$sectionpick.'" />'; |
|
} |
|
if (ref($rolefilter) eq 'ARRAY') { |
|
$feedurl .= '&rolefilter='; |
|
$roletag .= '<input type="hidden" name="rolefilter" value="'; |
|
foreach (@{$rolefilter}) { |
|
$feedurl .= $_.','; |
|
$roletag .= $_.','; |
|
} |
|
$feedurl =~ s/,$//; |
|
$roletag =~ s/,$//; |
|
$roletag .= '" />'; |
|
} else { |
|
$feedurl .= '&rolefilter='.$rolefilter; |
|
$roletag = '<input type="hidden" name="rolefilter" value="'.$rolefilter.'" />'; |
|
} |
$feedurl .= '&statusfilter='.$statusfilter; |
$feedurl .= '&statusfilter='.$statusfilter; |
$statustag ='<input type="hidden" name="statusfilter" value="'.$statusfilter.'" />'; |
$statustag ='<input type="hidden" name="statusfilter" value="'.$statusfilter.'" />'; |
$feedurl .= '§ionpick='.$secpick; |
|
$sectag = '<input type="hidden" name="sectionpick" value="'.$secpick.'" />'; |
|
} |
} |
} |
} |
$feedurl=&Apache::lonenc::check_encrypt($feedurl); |
$feedurl=&Apache::lonenc::check_encrypt($feedurl); |
|
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif'); |
|
my $html=&Apache::lonxml::xmlbegin(); |
$r->print (<<ENDREDIR); |
$r->print (<<ENDREDIR); |
<html> |
$html |
<head> |
<head> |
<title>Feedback sent</title> |
<title>Feedback sent</title> |
<meta http-equiv="pragma" content="no-cache" /> |
<meta http-equiv="pragma" content="no-cache" /> |
<meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl" /> |
<meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl" /> |
</head> |
</head> |
<body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { this.document.reldt.submit(); self.close(); }'> |
<body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { this.document.reldt.submit(); self.close(); }'> |
<img align="right" src="/adm/lonIcons/lonlogos.gif" /> |
<img align="right" src="$logo" /> |
$typestyle |
$typestyle |
<b>Sent $sendsomething message(s), and $sendposts post(s).</b> |
<b>Sent $sendsomething message(s), and $sendposts post(s).</b> |
<font color="red">$status</font> |
<font color="red">$status</font> |
Line 2067 sub no_redirect_back {
|
Line 2234 sub no_redirect_back {
|
my ($r,$feedurl) = @_; |
my ($r,$feedurl) = @_; |
my $nofeed=&mt('Sorry, no feedback possible on this resource ...'); |
my $nofeed=&mt('Sorry, no feedback possible on this resource ...'); |
my $continue=&mt('Continue'); |
my $continue=&mt('Continue'); |
|
my $html=&Apache::lonxml::xmlbegin(); |
$r->print (<<ENDNOREDIR); |
$r->print (<<ENDNOREDIR); |
<html> |
$html |
<head><title>Feedback not sent</title> |
<head> |
|
<title>Feedback not sent</title> |
<meta http-equiv="pragma" content="no-cache" /> |
<meta http-equiv="pragma" content="no-cache" /> |
ENDNOREDIR |
ENDNOREDIR |
|
|
Line 2078 ENDNOREDIR
|
Line 2247 ENDNOREDIR
|
&Apache::lonenc::check_encrypt($feedurl).'">'); |
&Apache::lonenc::check_encrypt($feedurl).'">'); |
} |
} |
$feedurl=&Apache::lonenc::check_encrypt($feedurl); |
$feedurl=&Apache::lonenc::check_encrypt($feedurl); |
|
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif'); |
$r->print (<<ENDNOREDIRTWO); |
$r->print (<<ENDNOREDIRTWO); |
</head> |
</head> |
<body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { self.close(); }'> |
<body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { self.close(); }'> |
<img align="right" src="/adm/lonIcons/lonlogos.gif" /> |
<img align="right" src="$logo" /> |
<b>$nofeed</b> |
<b>$nofeed</b> |
<br /><a href="$feedurl">$continue</a> |
<br /><a href="$feedurl">$continue</a> |
</body> |
</body> |
Line 2090 ENDNOREDIRTWO
|
Line 2260 ENDNOREDIRTWO
|
} |
} |
|
|
sub screen_header { |
sub screen_header { |
my ($feedurl) = @_; |
my ($feedurl,$symb) = @_; |
my $msgoptions=''; |
my $msgoptions=''; |
my $discussoptions=''; |
my $discussoptions=''; |
unless (($ENV{'form.replydisc'}) || ($ENV{'form.editdisc'})) { |
unless (($ENV{'form.replydisc'}) || ($ENV{'form.editdisc'})) { |
if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) { |
if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) { |
$msgoptions= |
$msgoptions= |
'<p><input type="checkbox" name="author" /> '. |
'<p><label><input type="checkbox" name="author" /> '. |
&mt('Feedback to resource author').'</p>'; |
&mt('Feedback to resource author').'</label></p>'; |
} |
} |
if (&feedback_available(1)) { |
if (&feedback_available(1)) { |
$msgoptions.= |
$msgoptions.= |
'<br /><input type="checkbox" name="question" /> '. |
'<p><label><input type="checkbox" name="question" /> '. |
&mt('Question about resource content'); |
&mt('Question about resource content').'</label></p>'; |
} |
} |
if (&feedback_available(0,1)) { |
if (&feedback_available(0,1)) { |
$msgoptions.= |
$msgoptions.= |
'<br /><input type="checkbox" name="course" /> '. |
'<p><label><input type="checkbox" name="course" /> '. |
&mt('Question/Comment/Feedback about course content'); |
&mt('Question/Comment/Feedback about course content'). |
|
'</label></p>'; |
} |
} |
if (&feedback_available(0,0,1)) { |
if (&feedback_available(0,0,1)) { |
$msgoptions.= |
$msgoptions.= |
'<br /><input type="checkbox" name="policy" /> '. |
'<p><label><input type="checkbox" name="policy" /> '. |
&mt('Question/Comment/Feedback about course policy'); |
&mt('Question/Comment/Feedback about course policy'). |
|
'</label></p>'; |
} |
} |
} |
} |
if ($ENV{'request.course.id'}) { |
if ($ENV{'request.course.id'}) { |
if (&discussion_open() && |
if (&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'}:''))) { |
$discussoptions='<input type="checkbox" name="discuss" onClick="this.form.anondiscuss.checked=false;" '. |
$discussoptions='<label><input type="checkbox" name="discuss" onClick="this.form.anondiscuss.checked=false;" '. |
($ENV{'form.replydisc'}?' checked="1"':'').' /> '. |
($ENV{'form.replydisc'}?' checked="1"':'').' /> '. |
&mt('Contribution to course discussion of resource'); |
&mt('Contribution to course discussion of resource'); |
$discussoptions.='<br /><input type="checkbox" name="anondiscuss" onClick="this.form.discuss.checked=false;" /> '. |
$discussoptions.='</label><br /><label><input type="checkbox" name="anondiscuss" onClick="this.form.discuss.checked=false;" /> '. |
&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>'; |
' <i>('.&mt('name only visible to course faculty').')</i></label>'; |
} |
} |
} |
} |
if ($msgoptions) { $msgoptions='<h2><img src="/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) { |
$discussoptions='<h2><img src="/adm/lonMisc/chat.gif" />'.&mt('Discussion Contributions').'</h2>'.$discussoptions; } |
$discussoptions='<h2><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/chat.gif').'" />'.&mt('Discussion Contributions').'</h2>'.$discussoptions; } |
return $msgoptions.$discussoptions; |
return $msgoptions.$discussoptions; |
} |
} |
|
|
Line 2161 sub clear_out_html {
|
Line 2333 sub clear_out_html {
|
# <SUP> |
# <SUP> |
%html=(B=>1, I=>1, P=>1, A=>1, LI=>1, OL=>1, UL=>1, EM=>1, |
%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, |
BR=>1, TT=>1, STRONG=>1, BLOCKQUOTE=>1, DIV=>1, IMG=>1, |
M=>1, SUB=>1, SUP=>1, SPAN=>1, |
M=>1, ALGEBRA=>1, SUB=>1, SUP=>1, SPAN=>1, |
H1=>1, H2=>1, H3=>1, H4=>1, H5=>1); |
H1=>1, H2=>1, H3=>1, H4=>1, H5=>1); |
} |
} |
# Do the substitution of everything that is not explicitly allowed |
# Do the substitution of everything that is not explicitly allowed |
Line 2411 sub show_preview {
|
Line 2583 sub show_preview {
|
my $subject=&clear_out_html($ENV{'form.subject'}); |
my $subject=&clear_out_html($ENV{'form.subject'}); |
$subject=~s/\n/\<br \/\>/g; |
$subject=~s/\n/\<br \/\>/g; |
$subject=&Apache::lontexconvert::msgtexconverted($subject); |
$subject=&Apache::lontexconvert::msgtexconverted($subject); |
$r->print('<table border="2"><tr><td>'. |
my $html=&Apache::lonxml::xmlbegin(); |
'<b>Subject:</b> '.$subject.'<br /><br />'. |
$r->print($html.'<head>'. |
$message.'</td></tr></table>'); |
'</head><body><table border="2"><tr><td>'. |
|
'<b>Subject:</b> '.$subject.'<br /><br />'. |
|
$message.'</td></tr></table></body></html>'); |
} |
} |
|
|
sub generate_preview_button { |
sub generate_preview_button { |
Line 2444 sub modify_attachments {
|
Line 2618 sub modify_attachments {
|
if ($idx) { |
if ($idx) { |
&extract_attachments($attachmenturls,$idx,$numoldver,\$msg,\%attachments,\%currattach,$currdelold); |
&extract_attachments($attachmenturls,$idx,$numoldver,\$msg,\%attachments,\%currattach,$currdelold); |
} |
} |
|
&Apache::lonenc::check_encrypt(\$symb); |
|
my $html=&Apache::lonxml::xmlbegin(); |
$r->print(<<END); |
$r->print(<<END); |
<html> |
$html |
<head> |
<head> |
<title>Managing Attachments</title> |
<title>Managing Attachments</title> |
<script> |
<script> |
Line 2470 END
|
Line 2646 END
|
foreach my $id (@currold) { |
foreach my $id (@currold) { |
my $attachurl = &HTML::Entities::decode($attachments{$id}{'filename'}); |
my $attachurl = &HTML::Entities::decode($attachments{$id}{'filename'}); |
$attachurl =~ m#/([^/]+)$#; |
$attachurl =~ m#/([^/]+)$#; |
$r->print('<input type="checkbox" name="deloldattach" value="'.$id.'" /> '.$1.'<br />'."\n"); |
$r->print('<label><input type="checkbox" name="deloldattach" value="'.$id.'" /> '.$1.'</label><br />'."\n"); |
} |
} |
$r->print("<br />"); |
$r->print("<br />"); |
} |
} |
Line 2480 END
|
Line 2656 END
|
$r->print("The following attachments have been uploaded for inclusion with this posting.<br />Check the checkboxes for any you wish to remove<br />\n"); |
$r->print("The following attachments have been uploaded for inclusion with this posting.<br />Check the checkboxes for any you wish to remove<br />\n"); |
foreach (@{$currnewattach}) { |
foreach (@{$currnewattach}) { |
$_ =~ m#/([^/]+)$#; |
$_ =~ m#/([^/]+)$#; |
$r->print('<input type="checkbox" name="delnewattach" value="'.$_.'" /> '.$1.'<br />'."\n"); |
$r->print('<label><input type="checkbox" name="delnewattach" value="'.$_.'" /> '.$1.'</label><br />'."\n"); |
} |
} |
$r->print("<br />"); |
$r->print("<br />"); |
} |
} |
Line 2724 sub has_discussion {
|
Line 2900 sub has_discussion {
|
} |
} |
} |
} |
return; |
return; |
} |
} |
|
|
|
sub sort_filter_names { |
|
my ($sort_types,$role_types,$status_types) = @_; |
|
%{$sort_types} = ( |
|
ascdate => 'Date order - oldest first', |
|
descdate => 'Date order - newest first', |
|
thread => 'Threaded', |
|
subject => 'By subject', |
|
username => 'By domain and username', |
|
lastfirst => 'By last name, first name' |
|
); |
|
%{$role_types} = ( |
|
all => 'All roles', |
|
st => 'Students', |
|
cc => 'Course Coordinators', |
|
in => 'Instructors', |
|
ta => 'TAs', |
|
ep => 'Exam proctors', |
|
ad => 'Administrators', |
|
cr => 'Custom roles' |
|
); |
|
%{$status_types} = ( |
|
all => 'Roles of any status', |
|
Active => 'Only active roles', |
|
Expired => 'Only inactive roles' |
|
); |
|
} |
|
|
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
Line 2738 sub handler {
|
Line 2941 sub handler {
|
|
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['hide','unhide','deldisc','postdata','preview','replydisc','editdisc','cmd','symb','onlyunread','allposts','onlyunmark','previous','markread','markonread','markondisp','toggoff','toggon','modifydisp','changes','navtime','navmaps','navurl','sortposts','applysort','rolefilter','statusfilter','sectionpick','posterlist','userpick','attach','origpage','currnewattach','deloldattach','keepold','allversions','export']); |
['hide','unhide','deldisc','postdata','preview','replydisc','editdisc','cmd','symb','onlyunread','allposts','onlyunmark','previous','markread','markonread','markondisp','toggoff','toggon','modifydisp','changes','navtime','navmaps','navurl','sortposts','applysort','rolefilter','statusfilter','sectionpick','posterlist','userpick','attach','origpage','currnewattach','deloldattach','keepold','allversions','export']); |
|
|
if ($ENV{'form.discsymb'}) { |
if ($ENV{'form.discsymb'}) { |
my ($symb,$feedurl) = &get_feedurl_and_clean_symb($ENV{'form.discsymb'}); |
my ($symb,$feedurl) = &get_feedurl_and_clean_symb($ENV{'form.discsymb'}); |
my $readkey = $symb.'_read'; |
my $readkey = $symb.'_read'; |
Line 2767 sub handler {
|
Line 2971 sub handler {
|
if ($ENV{'form.allversions'}) { |
if ($ENV{'form.allversions'}) { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
|
my $html=&Apache::lonxml::xmlbegin(); |
my $bodytag=&Apache::loncommon::bodytag('Discussion Post Versions'); |
my $bodytag=&Apache::loncommon::bodytag('Discussion Post Versions'); |
$r->print (<<END); |
$r->print(<<END); |
<html> |
$html |
<head> |
<head> |
<title>Post Versions</title> |
<title>Post Versions</title> |
<meta http-equiv="pragma" content="no-cache" /> |
<meta http-equiv="pragma" content="no-cache" /> |
Line 2822 END
|
Line 3027 END
|
&redirect_back($r,$feedurl,&mt('Changed sort/filter').'<br />','0','0', |
&redirect_back($r,$feedurl,&mt('Changed sort/filter').'<br />','0','0', |
'',$ENV{'form.previous'},$ENV{'form.sortposts'}, |
'',$ENV{'form.previous'},$ENV{'form.sortposts'}, |
$ENV{'form.rolefilter'},$ENV{'form.statusfilter'}, |
$ENV{'form.rolefilter'},$ENV{'form.statusfilter'}, |
$ENV{'form.secpick'}); |
$ENV{'form.sectionpick'}); |
return OK; |
return OK; |
} elsif ($ENV{'form.cmd'} eq 'sortfilter') { |
} elsif ($ENV{'form.cmd'} eq 'sortfilter') { |
my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.symb'}); |
my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.symb'}); |
Line 2869 END
|
Line 3074 END
|
} |
} |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
|
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif'); |
|
my $html=&Apache::lonxml::xmlbegin(); |
$r->print (<<ENDREDIR); |
$r->print (<<ENDREDIR); |
<html> |
$html |
<head> |
<head> |
<title>New posts marked as read</title> |
<title>New posts marked as read</title> |
<meta http-equiv="pragma" content="no-cache" /> |
<meta http-equiv="pragma" content="no-cache" /> |
<meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl" /> |
<meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl" /> |
</head> |
</head> |
<body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { this.document.reldt.submit(); self.close(); }'> |
<body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { this.document.reldt.submit(); self.close(); }'> |
<img align="right" src="/adm/lonIcons/lonlogos.gif" /> |
<img align="right" src="$logo" /> |
$textline |
$textline |
<form name="reldt" action="$feedurl" target="loncapaclient"> |
<form name="reldt" action="$feedurl" target="loncapaclient"> |
</form> |
</form> |
Line 3010 ENDREDIR
|
Line 3217 ENDREDIR
|
unless (length($ENV{'form.addnewattach'})>131072) { |
unless (length($ENV{'form.addnewattach'})>131072) { |
my $subdir = 'feedback/'.$ENV{'form.timestamp'}; |
my $subdir = 'feedback/'.$ENV{'form.timestamp'}; |
my $newattachment=&Apache::lonnet::userfileupload('addnewattach',undef,$subdir); |
my $newattachment=&Apache::lonnet::userfileupload('addnewattach',undef,$subdir); |
push @currnewattach, $newattachment; |
push @currnewattach, $newattachment; |
} |
} |
} |
} |
my $attachmenturls; |
my $attachmenturls; |
Line 3102 ENDREDIR
|
Line 3309 ENDREDIR
|
unless ($ENV{'form.sendit'}) { |
unless ($ENV{'form.sendit'}) { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
my $options=&screen_header($feedurl); |
my $options=&screen_header($feedurl,$symb); |
if ($options) { |
if ($options) { |
&mail_screen($r,$feedurl,$options); |
&mail_screen($r,$feedurl,$options); |
} else { |
} else { |