');
+ unless (($broadcast eq 'group') || ($broadcast eq 'upload')) {
+ my $domform = &Apache::loncommon::select_dom_form($defdom,'recdomain');
+ my $selectlink=&Apache::loncommon::selectstudent_link
+ ('compemail','recuname','recdomain');
+ $r->print(<<"ENDREC");
+
+
+$dispcrit
+
+ENDCOMP
+ } else { # $broadcast is 'upload'
+ $r->print(<
+Generate messages from a file
+
+Subject:
+
+General message text
+
+
+The file format for the uploaded portion of the message is:
+
+username1\@domain1: text
+username2\@domain2: text
+username3\@domain1: text
+
+
+
+The messages will be assembled from all lines with the respective
+username\@domain, and appended to the general message text.
+
+
+$dispcrit
+
+ENDUPLOAD
+ }
+ if ($broadcast eq 'group') {
+ &discourse;
+ }
+ $r->print('');
+}
+
+# ---------------------------------------------------- Display all face to face
+
+sub disfacetoface {
+ my ($r,$user,$domain)=@_;
+ unless ($ENV{'request.course.id'}) { return; }
+ unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {
+ return;
+ }
+ my %records=&Apache::lonnet::dump('nohist_email',
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'},
+ '%255b'.$user.'%253a'.$domain.'%255d');
+ my $result='';
+ foreach (sort keys %records) {
+ my %content=&unpackagemsg($records{$_});
+ next if ($content{'senderdomain'} eq '');
+ $content{'message'}=~s/\n/\
/g;
+ if ($content{'subject'}=~/^Record/) {
+ $result.='
Record
';
+ } else {
+ $result.='Sent Message
';
+ %content=&unpackagemsg($content{'message'});
+ $content{'message'}=
+ 'Subject: '.$content{'subject'}.'
'.
+ $content{'message'};
+ }
+ $result.='By: '.
+&Apache::loncommon::aboutmewrapper(
+ &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).' ('.
+$content{'sendername'}.'@'.
+ $content{'senderdomain'}.') '.$content{'time'}.
+ '
'.
+ &Apache::lontexconvert::msgtexconverted($content{'message'}).
+ '
';
+ }
+ # Check to see if there were any messages.
+ if ($result eq '') {
+ $r->print("No notes, face-to-face discussion records, or critical messages in this course.
");
+ } else {
+ $r->print($result);
+ }
+}
+
+# ---------------------------------------------------------------- Face to face
+
+sub facetoface {
+ my ($r,$stage)=@_;
+ unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {
+ return;
+ }
+# from query string
+ if ($ENV{'form.recname'}) { $ENV{'form.recuname'}=$ENV{'form.recname'}; }
+ if ($ENV{'form.recdom'}) { $ENV{'form.recdomain'}=$ENV{'form.recdom'}; }
+
+ my $defdom=$ENV{'user.domain'};
+# already filled in
+ if ($ENV{'form.recdomain'}) { $defdom=$ENV{'form.recdomain'}; }
+# generate output
+ my $domform = &Apache::loncommon::select_dom_form($defdom,'recdomain');
+ my $stdbrws = &Apache::loncommon::selectstudent_link
+ ('stdselect','recuname','recdomain');
+ $r->print(<<"ENDTREC");
+User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course
+
+ENDTREC
+ if (($stage ne 'query') &&
+ ($ENV{'form.recdomain'}) && ($ENV{'form.recuname'})) {
+ chomp($ENV{'form.newrecord'});
+ if ($ENV{'form.newrecord'}) {
+ &user_normal_msg_raw(
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ 'Record ['.$ENV{'form.recuname'}.':'.$ENV{'form.recdomain'}.']',
+ $ENV{'form.newrecord'});
+ }
+ $r->print(''.&Apache::loncommon::plainname($ENV{'form.recuname'},
+ $ENV{'form.recdomain'}).'
');
+ &disfacetoface($r,$ENV{'form.recuname'},$ENV{'form.recdomain'});
+ $r->print(<
+
+
+ENDRHEAD
+ $r->print(<New Record (record is visible to course faculty and staff)
+
+
+
+
+
+ENDBFORM
+ }
+}
+
+# ===================================================================== Handler
+
+sub handler {
+ my $r=shift;
+
+# ----------------------------------------------------------- Set document type
+
+ $r->content_type('text/html');
+ $r->send_http_header;
+
+ return OK if $r->header_only;
+
+# --------------------------- Get query string for limited number of parameters
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+ ['display','replyto','forward','markread','markdel','markunread',
+ 'sendreply','compose','sendmail','critical','recname','recdom',
+ 'recordftf']);
+
+# ------------------------------------------------------ They checked for email
+ &Apache::lonnet::put('email_status',{'recnewemail'=>0});
+# --------------------------------------------------------------- Render Output
+ if (!$ENV{'form.display'}) {
+ $r->print('EMail and Messaging'.
+ &Apache::loncommon::studentbrowser_javascript().''.
+ &Apache::loncommon::bodytag('EMail and Messages'));
+ }
+ if ($ENV{'form.display'}) {
+ my $msgid=$ENV{'form.display'};
+ &statuschange($msgid,'read');
+ my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
+ my %content=&unpackagemsg($message{$msgid});
+ $r->print('EMail and Messaging');
+ if (defined($content{'baseurl'})) {
+ $r->print("");
+ }
+ $r->print(&Apache::loncommon::studentbrowser_javascript().
+ ''.
+ &Apache::loncommon::bodytag('EMail and Messages'));
+ $r->print('Subject: '.$content{'subject'}.
+ '
From: '.
+&Apache::loncommon::aboutmewrapper(
+&Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),
+$content{'sendername'},$content{'senderdomain'}).' ('.
+ $content{'sendername'}.' at '.
+ $content{'senderdomain'}.') '.
+ '
Time: '.$content{'time'}.''.
+ '
'.
+ &Apache::lontexconvert::msgtexconverted($content{'message'}).
+ '
'.$content{'citation'});
+ } elsif ($ENV{'form.replyto'}) {
+ &comprep($r,$ENV{'form.replyto'});
} elsif ($ENV{'form.sendreply'}) {
my $msgid=$ENV{'form.sendreply'};
- my %message=&Apache::lonnet::get('nohist_email',$msgid);
+ my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
my %content=&unpackagemsg($message{$msgid});
&statuschange($msgid,'replied');
- $r->print('Sending: '.&user_normal_msg($content{'sendername'},
+ if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&
+ (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
+ $r->print('Sending critical: '.
+ &user_crit_msg($content{'sendername'},
+ $content{'senderdomain'},
+ $ENV{'form.subject'},
+ $ENV{'form.message'},
+ $ENV{'form.sendbck'}));
+ } else {
+ $r->print('Sending: '.&user_normal_msg($content{'sendername'},
$content{'senderdomain'},
$ENV{'form.subject'},
$ENV{'form.message'}));
+ }
+ if ($ENV{'form.displayedcrit'}) {
+ &discrit($r);
+ } else {
+ &disall($r);
+ }
+ } elsif ($ENV{'form.confirm'}) {
+ foreach (keys %ENV) {
+ if ($_=~/^form\.rec\_(.*)$/) {
+ $r->print('Confirming Receipt: '.
+ &user_crit_received($1).'
');
+ }
+ if ($_=~/^form\.reprec\_(.*)$/) {
+ my $msgid=$1;
+ $r->print('Confirming Receipt: '.
+ &user_crit_received($msgid).'
');
+ &comprep($r,$msgid);
+ }
+ }
+ &discrit($r);
+ } elsif ($ENV{'form.critical'}) {
+ &discrit($r);
} elsif ($ENV{'form.forward'}) {
- } elsif ($ENV{'form.mark'}) {
+ &compout($r,$ENV{'form.forward'});
+ } elsif ($ENV{'form.markread'}) {
+ } elsif ($ENV{'form.markdel'}) {
+ &statuschange($ENV{'form.markdel'},'deleted');
+ &disall($r);
+ } elsif ($ENV{'form.markeddel'}) {
+ my $total=0;
+ foreach (keys %ENV) {
+ if ($_=~/^form\.delmark_(.*)$/) {
+ &statuschange(&Apache::lonnet::unescape($1),'deleted');
+ $total++;
+ }
+ }
+ $r->print('Deleted '.$total.' message(s)');
+ &disall($r);
+ } elsif ($ENV{'form.markunread'}) {
+ &statuschange($ENV{'form.markunread'},'new');
+ &disall($r);
+ } elsif ($ENV{'form.compose'}) {
+ &compout($r,'',$ENV{'form.compose'});
+ } elsif ($ENV{'form.recordftf'}) {
+ &facetoface($r,$ENV{'form.recordftf'});
+ } elsif ($ENV{'form.sendmail'}) {
+ my %content=();
+ undef %content;
+ if ($ENV{'form.forwid'}) {
+ my $msgid=$ENV{'form.forwid'};
+ my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
+ %content=&unpackagemsg($message{$msgid});
+ &statuschange($msgid,'forwarded');
+ $ENV{'form.message'}.="\n\n-- Forwarded message --\n\n".
+ $content{'message'};
+ }
+ my %toaddr=();
+ undef %toaddr;
+ if ($ENV{'form.sendmode'} eq 'group') {
+ foreach (keys %ENV) {
+ if ($_=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {
+ $toaddr{$1}='';
+ }
+ }
+ } elsif ($ENV{'form.sendmode'} eq 'upload') {
+ foreach (split(/[\n\r\f]+/,$ENV{'form.upfile'})) {
+ my ($rec,$txt)=split(/\s*\:\s*/,$_);
+ if ($txt) {
+ $rec=~s/\@/\:/;
+ $toaddr{$rec}.=$txt."\n";
+ }
+ }
+ } else {
+ $toaddr{$ENV{'form.recuname'}.':'.$ENV{'form.recdomain'}}='';
+ }
+ if ($ENV{'form.additionalrec'}) {
+ foreach (split(/\,/,$ENV{'form.additionalrec'})) {
+ my ($auname,$audom)=split(/\@/,$_);
+ $toaddr{$auname.':'.$audom}='';
+ }
+ }
+ foreach (keys %toaddr) {
+ my ($recuname,$recdomain)=split(/\:/,$_);
+ my $msgtxt=$ENV{'form.message'};
+ if ($toaddr{$_}) { $msgtxt.='
'.$toaddr{$_}; }
+ if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&
+ (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
+ $r->print('Sending critical: '.
+ &user_crit_msg($recuname,$recdomain,
+ $ENV{'form.subject'},
+ $msgtxt,
+ $ENV{'form.sendbck'}));
+ } else {
+ $r->print('Sending: '.&user_normal_msg($recuname,$recdomain,
+ $ENV{'form.subject'},
+ $msgtxt,
+ $content{'citation'}));
+ }
+ $r->print('
');
+ }
+ if ($ENV{'form.displayedcrit'}) {
+ &discrit($r);
+ } else {
+ &disall($r);
+ }
} else {
- $r->print('  | Date | '.
- 'Username | Domain | Subject | Status |
');
- map {
- my ($sendtime,$shortsubj,$fromname,$fromdomain,$status)=
- &Apache::lonmsg::unpackmsgid($_);
- if ($status eq 'new') {
- $r->print('');
- } elsif ($status eq 'read') {
- $r->print('
');
- } elsif ($status eq 'replied') {
- $r->print('
');
- } else {
- $r->print('
');
- }
- $r->print('Open | '.localtime($sendtime).' | '.
- $fromname.' | '.$fromdomain.' | '.
- &Apache::lonnet::unescape($shortsubj).' | '.
- $status.' |
');
- } sort split(/\&/,&Apache::lonnet::reply('keys:'.
- $ENV{'user.domain'}.':'.
- $ENV{'user.name'}.':nohist_email',
- $ENV{'user.home'}));
- $r->print('
');
-
+ &disall($r);
}
$r->print('