version 1.45, 2006/11/29 19:31:47
|
version 1.50, 2006/12/08 14:43:38
|
Line 74 email program, so they have full access
|
Line 74 email program, so they have full access
|
interface, or other features they may wish to use in response to the |
interface, or other features they may wish to use in response to the |
student's query. |
student's query. |
|
|
=item * B<Blocking>: LON-CAPA can block display of e-mails that are |
=item * B<Blocking>: LON-CAPA can block selected communication |
sent to a student during an online exam. A course coordinator or |
features for students during an online exam. A course coordinator or |
instructor can set an open and close date/time for scheduled online |
instructor can set an open and close date/time for scheduled online |
exams in a course. If a user uses the LON-CAPA internal messaging |
exams in a course. If a user uses the LON-CAPA internal messaging |
system to display e-mails during the scheduled blocking event, |
system to display e-mails during the scheduled blocking event, |
Line 138 my $interdis;
|
Line 138 my $interdis;
|
|
|
sub folderlist { |
sub folderlist { |
my $folder=shift; |
my $folder=shift; |
my @allfolders=&Apache::lonnet::getkeys('email_folders'); |
my %lt = &Apache::lonlocal::texthash( |
if ($allfolders[0]=~/^error:/) { @allfolders=(); } |
actn => 'Action', |
return '<form method="post" action="/adm/email">'. |
fold => 'Folder', |
&mt('Folder').': '. |
show => 'Show', |
&Apache::loncommon::select_form($folder,'folder', |
go => 'Go', |
('' => &mt('INBOX'),'trash' => &mt('TRASH'), |
nnff => 'New Name for Folder', |
'new' => &mt('New Messages Only'), |
newn => 'New Name', |
'critical' => &mt('Critical'), |
thfm => 'The folder may not be renamed', |
'sent' => &mt('Sent Messages'), |
fmnb => 'folder may not be renamed as it is a folder provided by the system.', |
map { $_ => $_ } @allfolders)). |
asth => 'as this name is already in use for a system-provided or user-defined folder.', |
' '.&mt('Show'). |
the => 'The', |
'<select name="interdis">'. |
tnfm => 'The new folder may not be named', |
join("\n",map { '<option value="'.$_.'"'. |
|
($_==$interdis?' selected="selected"':'').'>'.$_.'</option>' } |
); |
(10,20,50,100,200)).'</select>'. |
|
'<input type="submit" value="'.&mt('View Folder').'" /><br />'. |
my %actions = &Apache::lonlocal::texthash( |
|
view => 'View Folder', |
|
rename => 'Rename Folder', |
|
delete => 'Delete Folder', |
|
); |
|
$actions{'select_form_order'} = ['view','rename','delete']; |
|
|
|
my %permfolders = &get_permanent_folders(); |
|
my $permlist = join("','",sort(keys(%permfolders))); |
|
my ($permlistkeys,$permlistvals); |
|
foreach my $key (sort(keys(%permfolders))) { |
|
$permlistvals .= $permfolders{$key}."','"; |
|
$permlistkeys .= $key."','"; |
|
} |
|
$permlistvals =~ s/','$//; |
|
$permlistkeys =~ s/','$//; |
|
my %gotfolders = &Apache::lonmsg::get_user_folders(); |
|
my %userfolders; |
|
|
|
foreach my $key (keys(%gotfolders)) { |
|
$userfolders{$key} = $key; |
|
} |
|
my @userorder = sort(keys(%userfolders)); |
|
my %formhash = (%permfolders,%userfolders); |
|
my $folderlist = join("','",@userorder); |
|
$folderlist .= "','".$permlistvals; |
|
|
|
$formhash{'select_form_order'} = ['','critical','new',@userorder,'sent','trash']; |
|
my $output = qq|<script type="text/javascript"> |
|
function folder_choice(targetform,caller) { |
|
var permfolders_keys = new Array('$permlistkeys'); |
|
var permfolders_vals = new Array('$permlistvals'); |
|
var allfolders = new Array('$folderlist'); |
|
if (caller == 'change') { |
|
if (targetform.folderaction.options[targetform.folderaction.selectedIndex].value == 'rename') { |
|
for (var i=0; i<permfolders_keys.length; i++) { |
|
if (permfolders_keys[i] == targetform.folder.value) { |
|
alert("$lt{'the'} '"+permfolders_vals[i]+"' $lt{'fmnb'}"); |
|
return; |
|
} |
|
} |
|
var foldername=prompt('$lt{'nnff'}','$lt{'newn'}'); |
|
if (foldername) { |
|
targetform.renamed.value=foldername; |
|
for (var i=0; i<allfolders.length; i++) { |
|
if (allfolders[i] == foldername) { |
|
alert("$lt{'thfm'} '"+foldername+"' $lt{'asth'}"); |
|
return; |
|
} |
|
} |
|
targetform.submit(); |
|
} |
|
} |
|
else { |
|
targetform.submit(); |
|
} |
|
} |
|
if (caller == 'new') { |
|
var newname=targetform.newfolder.value; |
|
if (newname) { |
|
for (var i=0; i<allfolders.length; i++) { |
|
if (allfolders[i] == newname) { |
|
alert("$lt{'tnfm'} '"+newname+"' $lt{'asth'}"); |
|
return; |
|
} |
|
} |
|
targetform.submit(); |
|
} |
|
} |
|
} |
|
</script>|; |
|
$output .= ' |
|
<form method="post" action="/adm/email" name="folderlist"> |
|
<table border="0" cellspacing="2" cellpadding="2"> |
|
<tr> |
|
<td align="left"> |
|
<table border="0" cellspacing="2" cellpadding="2"> |
|
<tr> |
|
<td align="center"><b>'.$lt{'fold'}.'</b><br />'."\n". |
|
&Apache::loncommon::select_form($folder,'folder',%formhash).' |
|
</td> |
|
<td align="center"><b>'.$lt{'show'}.'</b><br /> |
|
<select name="interdis">'. |
|
join("\n",map { '<option value="'.$_.'"'. |
|
($_==$interdis?' selected="selected"':'').'>'.$_.'</option>' |
|
} |
|
(10,20,50,100,200)).'</select> |
|
</td> |
|
<td align="center"><b>'.$lt{'actn'}.'</b><br />'. |
|
&Apache::loncommon::select_form('view','folderaction',%actions).' |
|
</td><td><br />'. |
|
'<input type="button" value="'.$lt{'go'}.'" onClick="javascript:folder_choice(this.form,'."'change'".');" /> |
|
</td> |
|
</tr> |
|
</table> |
|
</td><td> </td><td> </td><td> </td><td> </td> |
|
<td align="right"> |
|
<table><tr><td><br /> |
|
<input type="button" value="'.&mt('Make New Folder'). |
|
'" onClick="javascript:folder_choice(this.form,'."'new'".');" /></td>'. |
|
'<td align="center"><b>'.&mt('New Folder').'</b><br />'. |
|
'<input type="text" size="15" name="newfolder" value="" /> |
|
</td></tr></table> |
|
</td> |
|
</tr> |
|
</table>'."\n". |
'<input type="hidden" name="sortedby" value="'.$env{'form.sortedby'}.'" />'. |
'<input type="hidden" name="sortedby" value="'.$env{'form.sortedby'}.'" />'. |
($folder=~/^(new|critical)/?'</form>':''); |
'<input type="hidden" name="renamed" value="" />'. |
|
($folder=~/^(new|critical)/?'</form>':''); |
|
return $output; |
|
} |
|
|
|
sub get_permanent_folders { |
|
my %permfolders = |
|
&Apache::lonlocal::texthash('' => 'INBOX', |
|
'trash' => 'TRASH', |
|
'new' => 'New Messages Only', |
|
'critical' => 'Critical', |
|
'sent' => 'Sent Messages', |
|
); |
|
return %permfolders; |
} |
} |
|
|
sub scrollbuttons { |
sub scrollbuttons { |
Line 195 sub statuschange {
|
Line 313 sub statuschange {
|
# ============================================================= Make new folder |
# ============================================================= Make new folder |
|
|
sub makefolder { |
sub makefolder { |
my ($newfolder)=@_; |
my ($newfolder) = @_; |
if (($newfolder eq 'sent') |
my %permfolders = &get_permanent_folders(); |
|| ($newfolder eq 'critical') |
my %userfolders = &Apache::lonmsg::get_user_folders(); |
|| ($newfolder eq 'trash') |
my ($outcome,$warning); |
|| ($newfolder eq 'new')) { return; } |
if (defined($userfolders{$newfolder})) { |
&Apache::lonnet::put('email_folders',{$newfolder => time}); |
return &mt('The folder name: "[_1]" is already in use for an existing folder.',$newfolder); |
|
} |
|
foreach my $perm (keys(%permfolders)) { |
|
if ($permfolders{$perm} eq $newfolder) { |
|
return &mt('The folder name: "[_1]" is already used for one of the folders automatically generated by the system.',$newfolder); |
|
} |
|
} |
|
if (&get_msgfolder_lock() eq 'ok') { |
|
my %counter_hash = &Apache::lonnet::get('email_folders',["\0".'idcount']); |
|
my $lastcount = $counter_hash{"\0".'idcount'}; |
|
my $folder_id = $lastcount + 1; |
|
while (defined($userfolders{$folder_id})) { |
|
$folder_id ++; |
|
} |
|
my %folderinfo = ( id => $folder_id, |
|
created => time, ); |
|
$outcome = |
|
&Apache::lonnet::put('email_folders',{$newfolder => \%folderinfo, |
|
"\0".'idcount' => $folder_id}); |
|
my $releaseresult = &release_msgfolder_lock(); |
|
if ($releaseresult ne 'ok') { |
|
$warning = $releaseresult; |
|
} |
|
} else { |
|
$outcome = |
|
&mt('Error - could not obtain lock on email folders record.'); |
|
} |
|
return ($outcome,$warning); |
|
} |
|
|
|
# ============================================================= Delete folder |
|
|
|
sub deletefolder { |
|
my ($folder)=@_; |
|
my %permfolders = &get_permanent_folders(); |
|
if (defined($permfolders{$folder})) { |
|
return &mt('The folder [_1] may not be deleted',$folder); |
|
} |
|
my %userfolders = &Apache::lonmsg::get_user_folders(); |
|
if (!defined($userfolders{$folder})) { |
|
return &mt('The folder [_1] does not exist so deletion is not required.', |
|
$folder); |
|
} |
|
# check folder is empty; |
|
my $suffix=&Apache::lonmsg::foldersuffix($folder); |
|
my @messages = &Apache::lonnet::getkeys('nohist_email'.$suffix); |
|
if (@messages > 0) { |
|
return &mt('The folder [_1] contains messages so it may not be deleted.'). |
|
'<br />'. |
|
&mt('Delete or move the messages to a different folder first.'); |
|
} |
|
my $delresult = &Apache::lonnet::del('email_folders',[$folder]); |
|
return $delresult; |
} |
} |
|
|
|
sub renamefolder { |
|
my ($folder) = @_; |
|
my $newname = $env{'form.renamed'}; |
|
my %permfolders = &get_permanent_folders(); |
|
if ($env{'form.renamed'} eq '') { |
|
return &mt('The folder "[_1]" may not be renamed to "[_2]" as the new name you requested is an invalid name.',$folder,$newname); |
|
} |
|
if (defined($permfolders{$newname})) { |
|
return &mt('The folder "[_1]" may not be renamed to "[_2]" as the new name you requested is reserved for folders provided automatically by the system.',$folder,$newname); |
|
} |
|
my %userfolders = &Apache::lonmsg::get_user_folders(); |
|
if (defined($userfolders{$newname})) { |
|
return &mt('The folder "[_1]" may not be renamed to "[_2]" because the new name you requested is already being used for an existing folder.',$folder,$newname); |
|
} |
|
if (!defined($userfolders{$folder})) { |
|
return &mt('The folder "[_1]" could not be renamed to "[_2]" because the folder does not exist.',$folder,$newname); |
|
} |
|
my %folderinfo; |
|
if (ref($userfolders{$folder}) eq 'HASH') { |
|
%folderinfo = %{$userfolders{$folder}}; |
|
} else { |
|
%folderinfo = ( id => $folder, |
|
created => $userfolders{$folder},); |
|
} |
|
my $outcome = |
|
&Apache::lonnet::put('email_folders',{$newname => \%folderinfo}); |
|
if ($outcome eq 'ok') { |
|
$outcome = &Apache::lonnet::del('email_folders',[$folder]); |
|
} |
|
return $outcome; |
|
} |
|
|
|
sub get_msgfolder_lock { |
|
# get lock for mail folder counter. |
|
my $lockhash = { "\0".'lock_counter' => time, }; |
|
my $tries = 0; |
|
my $gotlock = &Apache::lonnet::newput('email_folders',$lockhash); |
|
while (($gotlock ne 'ok') && $tries <3) { |
|
$tries ++; |
|
sleep(1); |
|
$gotlock = &Apache::lonnet::newput('email_folders',$lockhash); |
|
} |
|
return $gotlock; |
|
} |
|
|
|
sub release_msgfolder_lock { |
|
# remove lock |
|
my @del_lock = ("\0".'lock_counter'); |
|
my $dellockoutcome=&Apache::lonnet::del('email_folders',\@del_lock); |
|
if ($dellockoutcome ne 'ok') { |
|
return ('<br />'.&mt('Warning: failed to release lock for counter').'<br />'); |
|
} else { |
|
return 'ok'; |
|
} |
|
} |
|
|
|
|
# ======================================================== Move between folders |
# ======================================================== Move between folders |
|
|
sub movemsg { |
sub movemsg { |
Line 350 sub disgroup {
|
Line 577 sub disgroup {
|
$result.='<td valign="top">'. |
$result.='<td valign="top">'. |
'<fieldset><legend><b>'.$lt{$status}. |
'<fieldset><legend><b>'.$lt{$status}. |
'</b></legend><nobr>'. |
'</b></legend><nobr>'. |
'<input type="button" value="check all" '. |
'<input type="button" value="'.&mt('Check All').'" '. |
'onclick="javascript:toggleAll('."'".$status."','check'".')" />'. |
'onclick="javascript:toggleAll('."'".$status."','check'".')" />'. |
' '. |
' '. |
'<input type="button" value="uncheck all" '. |
'<input type="button" value="'.&mt('Uncheck All').'" '. |
'onclick="javascript:toggleAll('."'".$status."','uncheck'".')" />'. |
'onclick="javascript:toggleAll('."'".$status."','uncheck'".')" />'. |
'</nobr></fieldset><br />'. |
'</nobr></fieldset><br />'. |
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table(). |
Line 520 sub sortedmessages {
|
Line 747 sub sortedmessages {
|
my ($blocked,$startblock,$endblock,$numblocked,$folder) = @_; |
my ($blocked,$startblock,$endblock,$numblocked,$folder) = @_; |
my $suffix=&Apache::lonmsg::foldersuffix($folder); |
my $suffix=&Apache::lonmsg::foldersuffix($folder); |
my @messages = &Apache::lonnet::getkeys('nohist_email'.$suffix); |
my @messages = &Apache::lonnet::getkeys('nohist_email'.$suffix); |
|
|
#unpack the varibles and repack into temp for sorting |
#unpack the varibles and repack into temp for sorting |
my @temp; |
my @temp; |
my %descriptions; |
my %descriptions; |
Line 623 sub get_course_desc {
|
Line 851 sub get_course_desc {
|
if (defined($env{'course.'.$fromcid.'.description'})) { |
if (defined($env{'course.'.$fromcid.'.description'})) { |
$description = $env{'course.'.$fromcid.'.description'}; |
$description = $env{'course.'.$fromcid.'.description'}; |
} else { |
} else { |
my %courseinfo=&Apache::lonnet::coursedescription($fromcid); $description = $courseinfo{'description'}; |
my %courseinfo=&Apache::lonnet::coursedescription($fromcid); |
$description = $courseinfo{'description'}; |
$description = $courseinfo{'description'}; |
} |
} |
$$descriptions{$fromcid} = $description; |
$$descriptions{$fromcid} = $description; |
Line 640 sub disnew {
|
Line 868 sub disnew {
|
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'nm' => 'New Messages', |
'nm' => 'New Messages', |
'su' => 'Subject', |
'su' => 'Subject', |
'co' => 'Course/Group', |
'co' => 'Course', |
'da' => 'Date', |
'da' => 'Date', |
'us' => 'Username', |
'us' => 'Username', |
'op' => 'Open', |
'op' => 'Open', |
Line 669 sub disnew {
|
Line 897 sub disnew {
|
$blocked{$id} = 'ON'; |
$blocked{$id} = 'ON'; |
$numblocked ++; |
$numblocked ++; |
} else { |
} else { |
push @newmsgs, { |
push(@newmsgs, { |
msgid => $msgid, |
msgid => $msgid, |
sendtime => $sendtime, |
sendtime => $sendtime, |
shortsub => $shortsubj, |
shortsub => $shortsubj, |
from => $fromname, |
from => $fromname, |
fromdom => $fromdom, |
fromdom => $fromdom, |
course => $description |
course => $description, |
} |
}); |
} |
} |
} |
} |
} |
} |
Line 684 sub disnew {
|
Line 912 sub disnew {
|
if ($#newmsgs >= 0) { |
if ($#newmsgs >= 0) { |
$r->print(<<TABLEHEAD); |
$r->print(<<TABLEHEAD); |
<h2>$lt{'nm'}</h2> |
<h2>$lt{'nm'}</h2> |
<table class="LC_mail_list"><tr><th> </th> |
<table class="LC_mail_list"><tr><th> </th> |
<th>$lt{'da'}</th><th>$lt{'us'}</th><th>$lt{'do'}</th><th>$lt{'su'}</th><th>$lt{'co'}</th></tr> |
<th>$lt{'da'}</th><th>$lt{'us'}</th><th>$lt{'do'}</th><th>$lt{'su'}</th><th>$lt{'co'}</th></tr> |
TABLEHEAD |
TABLEHEAD |
foreach my $msg (@newmsgs) { |
foreach my $msg (@newmsgs) { |
$r->print(<<"ENDLINK"); |
$r->print(<<"ENDLINK"); |
<tr class="LC_mail_new"> |
<tr class="LC_mail_new"> |
<td><a href="/adm/email?dismode=new&display=$msg->{'msgid'}">$lt{'op'}</a></td> |
<td><a href="/adm/email?dismode=new&display=$msg->{'msgid'}">$lt{'op'}</a></td> |
ENDLINK |
ENDLINK |
foreach my $item ('sendtime','from','fromdom','shortsub','course') { |
foreach my $item ('sendtime','from','fromdom','shortsub','course') { |
$r->print("<td>$msg->{$item}</td>"); |
$r->print("<td>$msg->{$item}</td>"); |
} |
} |
$r->print("</td></tr>"); |
$r->print("</tr>"); |
} |
} |
$r->print('</table>'); |
$r->print('</table>'); |
} elsif ($numblocked == 0) { |
} elsif ($numblocked == 0) { |
Line 773 ENDDISHEADER
|
Line 1001 ENDDISHEADER
|
if ($lastdis>$#temp) { $lastdis=$#temp; } |
if ($lastdis>$#temp) { $lastdis=$#temp; } |
$r->print(&scrollbuttons($startdis,$number,$firstdis,$lastdis,$totalnumber)); |
$r->print(&scrollbuttons($startdis,$number,$firstdis,$lastdis,$totalnumber)); |
$r->print('<form method="post" name="disall" action="/adm/email">'. |
$r->print('<form method="post" name="disall" action="/adm/email">'. |
'<table class="LC_mail_list"><tr><th colspan="3"> </th><th>'); |
'<table class="LC_mail_list"><tr><th colspan="3"> </th><th>'); |
if ($env{'form.sortedby'} eq "revdate") { |
if ($env{'form.sortedby'} eq "revdate") { |
$r->print('<a href = "?sortedby=date'.$fsqs.'">'.&mt('Date').'</a></th>'); |
$r->print('<a href = "?sortedby=date'.$fsqs.'">'.&mt('Date').'</a></th>'); |
} else { |
} else { |
Line 799 ENDDISHEADER
|
Line 1027 ENDDISHEADER
|
} |
} |
$r->print('</th><th>'); |
$r->print('</th><th>'); |
if ($env{'form.sortedby'} eq "revcourse") { |
if ($env{'form.sortedby'} eq "revcourse") { |
$r->print('<a href = "?sortedby=course'.$fsqs.'">'.&mt('Course/Group').'</a>'); |
$r->print('<a href = "?sortedby=course'.$fsqs.'">'.&mt('Course').'</a>'); |
} else { |
} else { |
$r->print('<a href = "?sortedby=revcourse'.$fsqs.'">'.&mt('Course/Group').'</a>'); |
$r->print('<a href = "?sortedby=revcourse'.$fsqs.'">'.&mt('Course').'</a>'); |
} |
} |
$r->print('</th><th>'); |
$r->print('</th><th>'); |
if ($env{'form.sortedby'} eq "revstatus") { |
if ($env{'form.sortedby'} eq "revstatus") { |
Line 864 ENDDISHEADER
|
Line 1092 ENDDISHEADER
|
'<p><input type="submit" name="markeddel" value="'.&mt('Delete Checked').'" /></p>'); |
'<p><input type="submit" name="markeddel" value="'.&mt('Delete Checked').'" /></p>'); |
} |
} |
$r->print('<p><input type="submit" name="markedmove" value="'.&mt('Move Checked to Folder').'" />'); |
$r->print('<p><input type="submit" name="markedmove" value="'.&mt('Move Checked to Folder').'" />'); |
my @allfolders=&Apache::lonnet::getkeys('email_folders'); |
my %gotfolders = &Apache::lonmsg::get_user_folders(); |
if ($allfolders[0]=~/^error:/) { @allfolders=(); } |
my %userfolders; |
|
foreach my $key (keys(%gotfolders)) { |
|
$userfolders{$key} = $key; |
|
} |
$r->print( |
$r->print( |
&Apache::loncommon::select_form('','movetofolder', |
&Apache::loncommon::select_form('','movetofolder', |
( map { $_ => $_ } @allfolders)) |
%userfolders)); |
); |
|
my $postedstartdis=$startdis+1; |
my $postedstartdis=$startdis+1; |
$r->print('<input type="hidden" name="folder" value="'.$folder.'" /><input type="hidden" name="startdis" value="'.$postedstartdis.'" /><input type="hidden" name="interdis" value="'.$env{'form.interdis'}.'" /></form>'); |
$r->print('<input type="hidden" name="folder" value="'.$folder.'" /><input type="hidden" name="startdis" value="'.$postedstartdis.'" /><input type="hidden" name="interdis" value="'.$env{'form.interdis'}.'" /></form>'); |
if ($numblocked > 0) { |
if ($numblocked > 0) { |
Line 925 sub compout {
|
Line 1155 sub compout {
|
my $dismsg=''; |
my $dismsg=''; |
my $disbase=''; |
my $disbase=''; |
my $func=&mt('Send New'); |
my $func=&mt('Send New'); |
my %lt=&Apache::lonlocal::texthash('us' => 'Username', |
my %lt=&Apache::lonlocal::texthash('us' => 'Username', |
'do' => 'Domain', |
'do' => 'Domain', |
'ad' => 'Additional Recipients', |
'ad' => 'Additional Recipients', |
'sb' => 'Subject', |
'sb' => 'Subject', |
'ca' => 'Cancel', |
'ca' => 'Cancel', |
'ma' => 'Mail'); |
'ma' => 'Mail', |
|
'gen' => 'Generate messages from a file', |
|
'gmt' => 'General message text', |
|
'tff' => 'The file format for the uploaded portion of the message is', |
|
'uas' => 'Upload and Send', |
|
); |
if (&Apache::lonnet::allowed('srm',$env{'request.course.id'}) |
if (&Apache::lonnet::allowed('srm',$env{'request.course.id'}) |
|| &Apache::lonnet::allowed('srm',$env{'request.course.id'}. |
|| &Apache::lonnet::allowed('srm',$env{'request.course.id'}. |
'/'.$env{'request.course.sec'})) { |
'/'.$env{'request.course.sec'})) { |
Line 1030 sub compout {
|
Line 1264 sub compout {
|
my $latexHelp = Apache::loncommon::helpLatexCheatsheet(); |
my $latexHelp = Apache::loncommon::helpLatexCheatsheet(); |
if ($broadcast ne 'upload') { |
if ($broadcast ne 'upload') { |
$r->print(<<"ENDCOMP"); |
$r->print(<<"ENDCOMP"); |
<tr><td>$lt{'ad'}<br /><tt>username:domain,username:domain, ... |
<tr><td>$lt{'ad'}:<br /><tt>username:domain,username:domain, ... |
</tt></td><td> |
</tt></td><td> |
<input type="text" size="50" name="additionalrec" /></td></tr> |
<input type="text" size="50" name="additionalrec" /></td></tr> |
<tr><td>$lt{'sb'}:</td><td><input type="text" size="50" name="subject" value="$dissub" /> |
<tr><td>$lt{'sb'}:</td><td><input type="text" size="50" name="subject" value="$dissub" /> |
Line 1055 ENDCOMP
|
Line 1289 ENDCOMP
|
$env{'form.group'}.'" />'); |
$env{'form.group'}.'" />'); |
} |
} |
} else { # $broadcast is 'upload' |
} else { # $broadcast is 'upload' |
$r->print(<<ENDUPLOAD); |
$r->print(<<ENDBLOCK); |
<input type="hidden" name="sendmode" value="upload" /> |
<input type="hidden" name="sendmode" value="upload" /> |
<input type="hidden" name="send" value="on" /> |
<input type="hidden" name="send" value="on" /> |
<h3>Generate messages from a file</h3> |
<h3>$lt{'gen'}</h3> |
<p> |
<p> |
Subject: <input type="text" size="50" name="subject" /> |
Subject: <input type="text" size="50" name="subject" /> |
</p> |
</p> |
<p>General message text<br /> |
<p>$lt{'gmt'}:<br /> |
<textarea name="message" id="message" cols="60" rows="10" wrap="hard">$dismsg |
<textarea name="message" id="message" cols="60" rows="10" wrap="hard">$dismsg |
</textarea></p> |
</textarea></p> |
<p> |
<p> |
The file format for the uploaded portion of the message is: |
$lt{'tff'}: |
<pre> |
ENDBLOCK |
username1:domain1: text |
$r->print(' |
username2:domain2: text |
<pre>'."\n". |
username3:domain1: text |
&mt('username1:domain1: text')."\n". |
</pre> |
&mt('username2:domain2: text')."\n". |
|
&mt('username3:domain1: text')."\n". |
|
'</pre> |
</p> |
</p> |
<p> |
<p> |
The messages will be assembled from all lines with the respective |
'.&mt('The messages will be assembled from all lines with the respective'."\n".'<tt>username:domain</tt>, and appended to the general message text.')); |
<tt>username:domain</tt>, and appended to the general message text.</p> |
$r->print(<<ENDUPLOAD); |
|
</p> |
<p> |
<p> |
<input type="file" name="upfile" size="40" /></p><p> |
<input type="file" name="upfile" size="40" /></p><p> |
$dispcrit |
$dispcrit |
<input type="submit" value="Upload and Send" /></p> |
<input type="submit" value="$lt{'uas'}" /></p> |
ENDUPLOAD |
ENDUPLOAD |
} |
} |
if ($broadcast eq 'group') { |
if ($broadcast eq 'group') { |
Line 1116 sub retrieve_instructor_comments {
|
Line 1353 sub retrieve_instructor_comments {
|
my ($user,$domain)=@_; |
my ($user,$domain)=@_; |
my $target=$env{'form.grade_target'}; |
my $target=$env{'form.grade_target'}; |
if (! $env{'request.course.id'}) { return; } |
if (! $env{'request.course.id'}) { return; } |
if (! &Apache::lonnet::allowed('srm',$env{'request.course.id'}) |
if (! &Apache::lonnet::allowed('dff',$env{'request.course.id'}) |
&& ! &Apache::lonnet::allowed('srm',$env{'request.course.id'}. |
&& ! &Apache::lonnet::allowed('dff',$env{'request.course.id'}. |
'/'.$env{'request.course.sec'})) { |
'/'.$env{'request.course.sec'})) { |
return; |
return; |
} |
} |
Line 1143 sub disfacetoface {
|
Line 1380 sub disfacetoface {
|
my ($r,$user,$domain)=@_; |
my ($r,$user,$domain)=@_; |
my $target=$env{'form.grade_target'}; |
my $target=$env{'form.grade_target'}; |
unless ($env{'request.course.id'}) { return; } |
unless ($env{'request.course.id'}) { return; } |
if (!&Apache::lonnet::allowed('srm',$env{'request.course.id'}) |
if (!&Apache::lonnet::allowed('dff',$env{'request.course.id'}) |
&& ! &Apache::lonnet::allowed('srm',$env{'request.course.id'}. |
&& ! &Apache::lonnet::allowed('dff',$env{'request.course.id'}. |
'/'.$env{'request.course.sec'})) { |
'/'.$env{'request.course.sec'})) { |
$r->print('Not allowed'); |
$r->print(&mt('Not allowed')); |
return; |
return; |
} |
} |
my %records=&Apache::lonnet::dump('nohist_email', |
my %records=&Apache::lonnet::dump('nohist_email', |
Line 1225 sub general_message {
|
Line 1462 sub general_message {
|
|
|
sub facetoface { |
sub facetoface { |
my ($r,$stage)=@_; |
my ($r,$stage)=@_; |
if (!&Apache::lonnet::allowed('srm',$env{'request.course.id'}) |
if (!&Apache::lonnet::allowed('dff',$env{'request.course.id'}) |
&& ! &Apache::lonnet::allowed('srm',$env{'request.course.id'}. |
&& ! &Apache::lonnet::allowed('dff',$env{'request.course.id'}. |
'/'.$env{'request.course.sec'})) { |
'/'.$env{'request.course.sec'})) { |
$r->print('Not allowed'); |
$r->print(&mt('Not allowed')); |
return; |
return; |
} |
} |
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
Line 1315 sub examblock {
|
Line 1552 sub examblock {
|
'cbds' => 'Communication blocking during scheduled exams', |
'cbds' => 'Communication blocking during scheduled exams', |
'desc' => "You can use communication blocking to prevent $usertype enrolled in this course from displaying LON-CAPA messages sent by other $usertype during an online exam. As blocking of communication could potentially interrupt legitimate communication between $usertype who are also both enrolled in a different LON-CAPA course, please be careful that you select the correct start and end times for your scheduled exam when setting or modifying these parameters.", |
'desc' => "You can use communication blocking to prevent $usertype enrolled in this course from displaying LON-CAPA messages sent by other $usertype during an online exam. As blocking of communication could potentially interrupt legitimate communication between $usertype who are also both enrolled in a different LON-CAPA course, please be careful that you select the correct start and end times for your scheduled exam when setting or modifying these parameters.", |
'mecb' => 'Modify existing communication blocking periods', |
'mecb' => 'Modify existing communication blocking periods', |
'ncbc' => 'No communication blocks currently stored' |
'ncbc' => 'No communication blocks currently stored', |
|
'stor' => 'Store', |
); |
); |
|
|
my %ltext = &Apache::lonlocal::texthash( |
my %ltext = &Apache::lonlocal::texthash( |
Line 1354 sub examblock {
|
Line 1592 sub examblock {
|
$r->print(<<"END"); |
$r->print(<<"END"); |
<br /> |
<br /> |
<input type="hidden" name="blocktotal" value="$blockcount" /> |
<input type="hidden" name="blocktotal" value="$blockcount" /> |
<input type ="submit" value="Save Changes" /> |
<input type ="submit" value="$lt{'stor'}" /> |
</form> |
</form> |
$end_page |
$end_page |
END |
END |
Line 1365 sub blockstore {
|
Line 1603 sub blockstore {
|
my $r = shift; |
my $r = shift; |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'tfcm' => 'The following changes were made', |
'tfcm' => 'The following changes were made', |
'cbps' => 'communication blocking period(s)', |
|
'werm' => 'was/were removed', |
|
'wemo' => 'was/were modified', |
|
'wead' => 'was/were added', |
|
'ncwm' => 'No changes were made.' |
'ncwm' => 'No changes were made.' |
); |
); |
my %adds = (); |
my %adds = (); |
Line 1425 sub blockstore {
|
Line 1659 sub blockstore {
|
if ($chgestotal > 0) { |
if ($chgestotal > 0) { |
$r->print($lt{'tfcm'}.'<ul>'); |
$r->print($lt{'tfcm'}.'<ul>'); |
if ($canceltotal > 0) { |
if ($canceltotal > 0) { |
$r->print('<li>'.$canceltotal.' '.$lt{'cbps'},' '.$lt{'werm'}.'</li>'); |
$r->print('<li>'.&mt('[quant,_1,communication blocking period was,communication blocking periods were] removed.',$canceltotal).'</li>'); |
} |
} |
if ($modtotal > 0) { |
if ($modtotal > 0) { |
$r->print('<li>'.$modtotal.' '.$lt{'cbps'},' '.$lt{'wemo'}.'</li>'); |
$r->print('<li>'.&mt('[quant,_1,communication blocking period was,communication blocking periods were] modified.',$modtotal).'</li>'); |
} |
} |
if ($addtotal > 0) { |
if ($addtotal > 0) { |
$r->print('<li>'.$addtotal.' '.$lt{'cbps'},' '.$lt{'wead'}.'</li>'); |
$r->print('<li>'.&mt('[quant,_1,communication blocking period was,communication blocking periods were] added.',$addtotal).'</li>'); |
} |
} |
$r->print('</ul>'); |
$r->print('</ul>'); |
} else { |
} else { |
Line 2056 sub handler {
|
Line 2290 sub handler {
|
unless ($dismode) { |
unless ($dismode) { |
$dismode=''; |
$dismode=''; |
} else { |
} else { |
$sqs.='&dismode='.&escape($dismode); |
$sqs.='&dismode='.&escape($dismode); |
} |
} |
|
|
# --------------------------------------------------------------------- Display |
# --------------------------------------------------------------------- Display |
Line 2207 sub handler {
|
Line 2441 sub handler {
|
} |
} |
} elsif ($env{'form.newfolder'}) { |
} elsif ($env{'form.newfolder'}) { |
&printheader($r,'','New Folder'); |
&printheader($r,'','New Folder'); |
&makefolder($env{'form.newfolder'}); |
my $showfolder = $env{'form.newfolder'}; |
&Apache::loncommunicate::menu($r); |
my ($makeresult,$warning) = &makefolder($env{'form.newfolder'}); |
&disall($r,$env{'form.newfolder'}); |
if ($makeresult eq 'ok') { |
|
$r->print(&mt('Mail folder "[_1]" created.',$showfolder).'<br />'); |
|
} else { |
|
$r->print(&mt('Creation failed.').' '.$makeresult.'<br />'. |
|
$warning); |
|
$showfolder = $folder; |
|
} |
|
&Apache::loncommunicate::menu($r); |
|
&disall($r,$showfolder); |
} elsif ($env{'form.showcommentbaseurl'}) { |
} elsif ($env{'form.showcommentbaseurl'}) { |
&storedcommentlisting($r); |
&storedcommentlisting($r); |
|
} elsif ($env{'form.folderaction'} eq 'delete') { |
|
&printheader($r,'','Deleted Folder'); |
|
my $showfolder = ''; |
|
my $delresult = &deletefolder($folder); |
|
if ($delresult eq 'ok') { |
|
$r->print(&mt('Mail folder "[_1]" deleted.',$folder).'<br />'); |
|
} else { |
|
$r->print(&mt('Deletion failed.').' '.$delresult.'<br />'); |
|
$showfolder = $folder; |
|
} |
|
&Apache::loncommunicate::menu($r); |
|
&disall($r,$showfolder); |
|
} elsif ($env{'form.folderaction'} eq 'rename') { |
|
&printheader($r,'','Renamed Folder'); |
|
my $showfolder = $env{'form.renamed'}; |
|
my $renresult = &renamefolder($folder); |
|
if ($renresult eq 'ok') { |
|
$r->print(&mt('Mail folder "[_1]" renamed "[_2]".',$folder,$showfolder).'<br />'); |
|
} else { |
|
$r->print(&mt('Renaming failed.').' '.$renresult.'<br />'); |
|
$showfolder = $folder; |
|
} |
|
&Apache::loncommunicate::menu($r); |
|
&disall($r,$showfolder); |
} else { |
} else { |
&printheader($r,'','Display All Messages'); |
&printheader($r,'','Display All Messages'); |
&Apache::loncommunicate::menu($r); |
&Apache::loncommunicate::menu($r); |