[LON-CAPA-cvs] cvs: loncom(version_2_2_X) /interface lonmsgdisplay.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Wed, 19 Jul 2006 10:20:13 -0000
This is a MIME encoded message
--albertel1153304413
Content-Type: text/plain
albertel Wed Jul 19 06:20:13 2006 EDT
Modified files: (Branch: version_2_2_X)
/loncom/interface lonmsgdisplay.pm
Log:
- backport 1.37 1.38
--albertel1153304413
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20060719062013.txt"
Index: loncom/interface/lonmsgdisplay.pm
diff -u loncom/interface/lonmsgdisplay.pm:1.35.2.2 loncom/interface/lonmsgdisplay.pm:1.35.2.3
--- loncom/interface/lonmsgdisplay.pm:1.35.2.2 Thu Jun 29 22:06:15 2006
+++ loncom/interface/lonmsgdisplay.pm Wed Jul 19 06:20:11 2006
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines for messaging display
#
-# $Id: lonmsgdisplay.pm,v 1.35.2.2 2006/06/30 02:06:15 albertel Exp $
+# $Id: lonmsgdisplay.pm,v 1.35.2.3 2006/07/19 10:20:11 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -290,6 +290,194 @@
return $result;
}
+sub disgroup {
+ my ($cdom,$cnum,$group,$viewgrps,$editgrps) = @_;
+ my $result;
+ # Needs to be in a course
+ if (!($env{'request.course.fn'})) {
+ $result = &mt('Error: you must have a course role selected to be able to send a broadcast message to a group in the course.');
+ return $result;
+ }
+ if ($cdom eq '' || $cnum eq '') {
+ $result = &mt('Error: could not determine domain or number of course');
+ return $result;
+ }
+ my ($memberinfo,$numitems) =
+ &Apache::longroup::group_memberlist($cdom,$cnum,$group,{},[]);
+ my @statustypes = ('active');
+ if ($viewgrps || $editgrps) {
+ push(@statustypes,('future','previous'));
+ }
+ if (keys(%{$memberinfo}) == 0) {
+ $result = &mt('As this group has no members, there are no '.
+ 'recipients to select.');
+ return $result;
+ } else {
+ $result = &mt('Select message recipients from the group members listed below.<br />');
+ my %Sortby = (
+ active => {},
+ previous => {},
+ future => {},
+ );
+ my %lt = &Apache::lonlocal::texthash(
+ 'name' => 'Name',
+ 'usnm' => 'Username',
+ 'doma' => 'Domain',
+ 'active' => 'Active Members',
+ 'previous' => 'Former Members',
+ 'future' => 'Future Members',
+ );
+ foreach my $user (sort(keys(%{$memberinfo}))) {
+ my $status = $$memberinfo{$user}{status};
+ if ($env{'form.'.$status.'.sortby'} eq 'fullname') {
+ push(@{$Sortby{$status}{$$memberinfo{$user}{fullname}}},$user);
+ } elsif ($env{'form.'.$status.'.sortby'} eq 'username') {
+ push(@{$Sortby{$status}{$$memberinfo{$user}{uname}}},$user);
+ } elsif ($env{'form.'.$status.'.sortby'} eq 'domain') {
+ push(@{$Sortby{$status}{$$memberinfo{$user}{udom}}},$user);
+ } else {
+ push(@{$Sortby{$status}{$$memberinfo{$user}{fullname}}},$user);
+ }
+ }
+ $result .= &group_check_uncheck();
+ $result .= '<table border="0" cellspacing="8" cellpadding="2">'.
+ '<tr>';
+ foreach my $status (@statustypes) {
+ if (ref($numitems) eq 'HASH') {
+ if ((defined($$numitems{$status})) && ($$numitems{$status})) {
+ $result.='<td align="top">'.
+ '<fieldset><legend><b>'.$lt{$status}.
+ '</b></legend><nobr>'.
+ '<input type="button" value="check all" '.
+ 'onclick="javascript:toggleAll('."'".$status."','check'".')" />'.
+ ' '.
+ '<input type="button" value="uncheck all" '.
+ 'onclick="javascript:toggleAll('."'".$status."','uncheck'".')" />'.
+ '</nobr></fieldset><br />'.
+ &Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row();
+ $result .= "<th><a href=\"javascript:changeSort('fullname')\">".
+ "$lt{'name'}</a></th>".
+ "<th><a href=\"javascript:changeSort('username')\">".
+ "$lt{'usnm'}</a></th>".
+ "<th><a href=\"javascript:changeSort('domain')\">".
+ "$lt{'doma'}</a></th>".
+ &Apache::loncommon::end_data_table_header_row();
+ foreach my $key (sort(keys(%{$Sortby{$status}}))) {
+ foreach my $user (@{$Sortby{$status}{$key}}) {
+ $result .=
+ &Apache::loncommon::start_data_table_row().
+ '<td><input type="checkbox" '.
+ 'name="selectedusers_forminput" value="'.
+ $user.':'.$status.'" />'.
+ $$memberinfo{$user}{'fullname'}.'</td>'.
+ '<td>'.$$memberinfo{$user}{'uname'}.'</td>'.
+ '<td>'.$$memberinfo{$user}{'udom'}.'</td>'.
+ &Apache::loncommon::end_data_table_row();
+ }
+ }
+ $result .= &Apache::loncommon::end_data_table();
+ }
+ }
+ $result .= '</td><td> </td>';
+ }
+ $result .= '</tr></table>';
+ }
+ return $result;
+}
+
+sub group_check_uncheck {
+ my $output = qq|
+<script type="text/javascript">
+function toggleAll(caller,action) {
+ var pattern = new RegExp(":"+caller+"\$");
+ if (typeof(document.compemail.selectedusers_forminput.length)=="undefined") {
+ if (document.compemail.selectedusers_forminput.value.match(pattern)) {
+ if (action == 'check') {
+ document.groupmail.selectedusers_forminput.checked = true;
+ } else {
+ document.groupmail.selectedusers_forminput.checked = false;
+ }
+ }
+ } else {
+ for (var i=0; i<document.compemail.selectedusers_forminput.length; i++) {
+ if (document.compemail.selectedusers_forminput[i].value.match(pattern)) {
+ if (action == 'check') {
+ document.compemail.selectedusers_forminput[i].checked = true;
+ } else {
+ document.compemail.selectedusers_forminput[i].checked = false;
+ }
+ }
+ }
+ }
+}
+</script>
+ |;
+}
+
+sub groupmail_header {
+ my ($action,$group,$cdom,$cnum) = @_;
+ my ($description,$refarg);
+ if (!$cdom || !$cnum) {
+ $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ }
+ if (exists($env{'form.ref'})) {
+ $refarg = 'ref='.$env{'form.ref'};
+ }
+ if (!$group) {
+ $group = $env{'form.group'};
+ }
+ if ($group eq '') {
+ return '';
+ } else {
+ my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum,$group);
+ if (defined($curr_groups{$group})) {
+ my %groupinfo =
+ &Apache::longroup::get_group_settings($curr_groups{$group});
+ $description = &unescape($groupinfo{'description'});
+ }
+ }
+ &Apache::lonhtmlcommon::clear_breadcrumbs();
+ if ($refarg) {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"/adm/coursegroups",
+ text=>"Groups",
+ title=>"View course groups"});
+ }
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"/adm/$cdom/$cnum/$group/smppg?$refarg",
+ text=>"Group: $description",
+ title=>"Go to group's home page"},
+ {href=>"/adm/email?compose=group&group=".
+ "$env{'form.group'}&$refarg",
+ text=>"Send a Message in a Group",
+ title=>"Compose Group Email Message"},);
+ if ($action eq 'sending') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({text=>"Messages being sent.",
+ title=>"Messages sent"},);
+ }
+ my $groupheader = &Apache::loncommon::start_page('Group Email');
+ $groupheader .= &Apache::lonhtmlcommon::breadcrumbs
+ ('Group - '.$env{'form.group'}.' Email');
+ return $groupheader;
+}
+
+sub groupmail_sent {
+ my ($group,$cdom,$cnum) = @_;
+ my $refarg;
+ if (exists($env{'form.ref'})) {
+ $refarg = 'ref='.$env{'form.ref'};
+ }
+ my $output .= '<br /><br /><a href="/adm/email?compose=group&group='.
+ $group.'&'.$refarg.'">'.
+ &mt('Send another group email').'</a>'.' '.
+ '<a href="/adm/'.$cdom.'/'.$cnum.'/'.$group.'/smppg?'.
+ $refarg.'">'. &mt('Return to group page').'</a>';
+ return $output;
+}
+
# ==================================================== Display Critical Message
sub discrit {
@@ -320,7 +508,7 @@
# Check to see if there were any messages.
if ($result eq '') {
$result = "<h2>".&mt('You have no critical messages.')."</h2>".
- '<a href="/adm/roles">'.&mt('Select a course or group').'</a><br />'.
+ '<a href="/adm/roles">'.&mt('Select a course').'</a><br />'.
'<a href="/adm/email">'.&mt('Communicate').'</a>';
} else {
$r->print($header);
@@ -709,8 +897,14 @@
sub compout {
my ($r,$forwarding,$replying,$broadcast,$replycrit,$folder,$dismode)=@_;
my $suffix=&Apache::lonmsg::foldersuffix($folder);
-
- if ($broadcast eq 'individual') {
+ my ($cdom,$cnum,$group,$refarg);
+ if (exists($env{'form.group'})) {
+ $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ $group = $env{'form.group'};
+ my $action = 'composing';
+ $r->print(&groupmail_header($action,$group,$cdom,$cnum));
+ } elsif ($broadcast eq 'individual') {
&printheader($r,'/adm/email?compose=individual',
'Send a Message');
} elsif ($broadcast) {
@@ -802,15 +996,35 @@
}
}
my $citation=&displayresource(%content);
+ my ($can_grp_broadcast,$viewgrps,$editgrps);
if ($env{'form.recdom'}) { $defdom=$env{'form.recdom'}; }
if ($env{'form.text'}) { $dismsg=$env{'form.text'}; }
if ($env{'form.subject'}) { $dissub=$env{'form.subject'}; }
$r->print(
'<form action="/adm/email" name="compemail" method="post"'.
' enctype="multipart/form-data">'."\n".
- '<input type="hidden" name="sendmail" value="on" />'."\n".
- '<table>');
- unless (($broadcast eq 'group') || ($broadcast eq 'upload')) {
+ '<input type="hidden" name="sendmail" value="on" />'."\n");
+ if ($broadcast eq 'group' && $env{'form.group'} ne '') {
+ $can_grp_broadcast =
+ &Apache::lonnet::allowed('sgb',$env{'request.course.id'}.'/'.
+ $group);
+ $viewgrps =
+ &Apache::lonnet::allowed('vcg',$env{'request.course.id'}.
+ ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));
+ $editgrps =
+ &Apache::lonnet::allowed('mdg',$env{'request.course.id'}.
+ ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));
+ if ($viewgrps || $editgrps || $can_grp_broadcast) {
+ $r->print(&disgroup($cdom,$cnum,$group,$viewgrps,$editgrps));
+ }
+ }
+ $r->print('<table>');
+ if (($broadcast eq 'group') && ($group ne '') &&
+ (!$can_grp_broadcast && !$viewgrps && !$editgrps)) {
+ print STDERR "$broadcast AND $env{'form.group'} AND $can_grp_broadcast\n";
+ $r->print(&recipient_input_row($cdom,%lt));
+ }
+ if (($broadcast ne 'group') && ($broadcast ne 'upload')) {
if ($replying) {
$r->print('<tr><td colspan="2">'.&mt('Replying to').' '.
&Apache::loncommon::aboutmewrapper(
@@ -821,14 +1035,7 @@
'<input type="hidden" name="recdomain" value="'.$content{'senderdomain'}.'" />'.
'</td></tr>');
} else {
- my $domform = &Apache::loncommon::select_dom_form($defdom,'recdomain');
- my $selectlink=&Apache::loncommon::selectstudent_link
- ('compemail','recuname','recdomain');
- $r->print(<<"ENDREC");
-<tr><td>$lt{'us'}:</td><td><input type="text" size="12" name="recuname" value="$env{'form.recname'}" /></td><td rowspan="2">$selectlink</td></tr>
-<tr><td>$lt{'do'}:</td>
-<td>$domform</td></tr>
-ENDREC
+ $r->print(&recipient_input_row($defdom,%lt));
}
}
my $latexHelp = Apache::loncommon::helpLatexCheatsheet();
@@ -850,6 +1057,14 @@
<input type="submit" name="cancel" value="$lt{'ca'}" /><hr />
$citation
ENDCOMP
+ if (exists($env{'form.ref'})) {
+ $r->print('<input type="hidden" name="ref" value="'.
+ $env{'form.ref'}.'" />');
+ }
+ if (exists($env{'form.group'})) {
+ $r->print('<input type="hidden" name="group" value="'.
+ $env{'form.group'}.'" />');
+ }
} else { # $broadcast is 'upload'
$r->print(<<ENDUPLOAD);
<input type="hidden" name="sendmode" value="upload" />
@@ -879,9 +1094,10 @@
ENDUPLOAD
}
if ($broadcast eq 'group') {
- &discourse($r);
- my $studentsel = &discourse();
- $r->print($studentsel);
+ if ($group eq '') {
+ my $studentsel = &discourse();
+ $r->print($studentsel);
+ }
}
if ($env{'form.displayedcrit'}) {
$r->print('<input type="hidden" name="displayedcrit" value="true" />');
@@ -893,6 +1109,20 @@
# ---------------------------------------------------- Display all face to face
+sub recipient_input_row {
+ my ($dom,%lt) = @_;
+ my $domform = &Apache::loncommon::select_dom_form($dom,'recdomain');
+ my $selectlink=
+ &Apache::loncommon::selectstudent_link('compemail','recuname',
+ 'recdomain');
+ my $output = <<"ENDREC";
+<tr><td>$lt{'us'}:</td><td><input type="text" size="12" name="recuname" value="$env{'form.recname'}" /></td><td rowspan="2">$selectlink</td></tr>
+<tr><td>$lt{'do'}:</td>
+<td>$domform</td></tr>
+ENDREC
+ return $output;
+}
+
sub retrieve_instructor_comments {
my ($user,$domain)=@_;
my $target=$env{'form.grade_target'};
@@ -1565,10 +1795,9 @@
$extra .= "<base href=\"http://$ENV{'SERVER_NAME'}/$baseurl\" />";
}
$r->print(&Apache::loncommon::start_page('Communication and Messages',
- $extra));
+ $extra));
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- (($title?$title:'Communication and Messages')));
-
+ (($title?$title:'Communication and Messages')));
}
# ---------------------------------------------------------------- Print header
@@ -1624,8 +1853,20 @@
my $sendstatus='';
my %specialmsg_status;
my $numspecial = 0;
+ my ($cdom,$cnum,$group);
+ if (exists($env{'form.group'})) {
+ $group = $env{'form.group'};
+ }
+ if (exists($env{'request.course.id'})) {
+ $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ }
if ($env{'form.send'}) {
- &printheader($r,'','Messages being sent.');
+ if ($group eq '') {
+ &printheader($r,'','Messages being sent.');
+ } else {
+ $r->print(&groupmail_header('sending',$group));
+ }
$r->rflush();
my %content=();
undef %content;
@@ -1645,7 +1886,7 @@
}
my @to =
- &Apache::loncommon::get_env_multiple('form.selectedusers.forminput');
+ &Apache::loncommon::get_env_multiple('form.selectedusers_forminput');
my $mode = $env{'form.sendmode'};
my %toaddr;
@@ -1750,8 +1991,6 @@
$subj_prefix = 'Broadcast.';
}
my ($specialmsgid,$specialresult);
- my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
- my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $course_str = &escape('['.$cnum.':'.$cdom.']');
if ($numspecial) {
@@ -1807,6 +2046,9 @@
$r->print('<br /><span class="LC_success">'.&mt('Completed.').'</span>');
if ($env{'form.displayedcrit'}) {
&discrit($r);
+ }
+ if ($group ne '') {
+ $r->print(&groupmail_sent($group,$cdom,$cnum));
} else {
&Apache::loncommunicate::menu($r);
}
@@ -1833,7 +2075,7 @@
['display','replyto','forward','markread','markdel','markunread',
'sendreply','compose','sendmail','critical','recname','recdom',
'recordftf','sortedby','block','folder','startdis','interdis',
- 'showcommentbaseurl','dismode','group','subject','text']);
+ 'showcommentbaseurl','dismode','group','subject','text','ref']);
$sqs='&sortedby='.$env{'form.sortedby'};
# ------------------------------------------------------ They checked for email
@@ -2001,15 +2243,15 @@
&sendoffmail($r,$folder);
if ($env{'form.storebasecomment'}) {
&storecomment($r);
- }
+ }
if (($env{'form.rsspost'}) && ($env{'request.course.id'})) {
- &Apache::lonrss::addentry($env{'course.'.$env{'request.course.id'}.'.num'},
+ &Apache::lonrss::addentry($env{'course.'.$env{'request.course.id'}.'.num'},
$env{'course.'.$env{'request.course.id'}.'.domain'},
'Course_Announcements',
$env{'form.subject'},
$env{'form.message'},'/adm/communicate','public');
}
- if (!$env{'form.displayedcrit'}) {
+ if ((!exists($env{'form.group'})) && (!$env{'form.displayedcrit'})) {
&disall($r,($folder?$folder:$dismode));
}
} elsif ($env{'form.newfolder'}) {
@@ -2039,9 +2281,3 @@
__END__
-
-
-
-
-
-
--albertel1153304413--