[LON-CAPA-cvs] cvs: rat / lonsequence.pm loncom/interface loncommunicate.pm lonmsg.pm

www lon-capa-cvs@mail.lon-capa.org
Fri, 10 Sep 2004 06:38:24 -0000


This is a MIME encoded message

--www1094798304
Content-Type: text/plain

www		Fri Sep 10 02:38:24 2004 EDT

  Modified files:              
    /loncom/interface	loncommunicate.pm lonmsg.pm 
    /rat	lonsequence.pm 
  Log:
  Quickly saving my work on folders in COM, Trash.
  Also fixed bodytag "emfo" - BTW, bodytag does its own &mt-call.
  
  
--www1094798304
Content-Type: text/plain
Content-Disposition: attachment; filename="www-20040910023824.txt"

Index: loncom/interface/loncommunicate.pm
diff -u loncom/interface/loncommunicate.pm:1.22 loncom/interface/loncommunicate.pm:1.23
--- loncom/interface/loncommunicate.pm:1.22	Mon May 17 15:00:46 2004
+++ loncom/interface/loncommunicate.pm	Fri Sep 10 02:38:24 2004
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Communicate
 #
-# $Id: loncommunicate.pm,v 1.22 2004/05/17 19:00:46 raeburn Exp $
+# $Id: loncommunicate.pm,v 1.23 2004/09/10 06:38:24 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -38,7 +38,7 @@
 sub menu {
     my $r=shift;
     my %lt=&Apache::lonlocal::texthash(
-'vam' => 'View All Messages',
+'mnf' => 'Make New Folder',
 'vcm' => 'View Critical Messages',
 'smu' => 'Send Message to User(s)',
 'bmc' => 'Broadcast Message to Course',
@@ -59,16 +59,16 @@
 	     'Course_Broadcast_Message') {
 	$help{$_}=&Apache::loncommon::help_open_topic($_);
     }
+    my $folderlist=&Apache::lonmsg::folderlist();
 # ------------------------------------------------------------------------ Menu
    $r->print(<<END);
+$folderlist
+<form method="post" action="/adm/email">
+<input type="submit" value="$lt{'mnf'}" />
+<input type="text" size="15" name="newfolder" value="" />
+</form>
 <table cellspacing="10" cellpadding="2">
 <tr><td bgcolor="#FFFFAA">
-  <b><a href="/adm/email/">$lt{'vam'}</a></b>
-</td></tr>
-<tr><td bgcolor="#FFFFAA">
-  <b><a href="/adm/email?critical=display">$lt{'vcm'}</a></b>
-</td></tr>
-<tr><td bgcolor="#FFFFAA">
   <b><a href="/adm/email?compose=individual">$lt{'smu'}</a></b>
 </td></tr>
 END
Index: loncom/interface/lonmsg.pm
diff -u loncom/interface/lonmsg.pm:1.105 loncom/interface/lonmsg.pm:1.106
--- loncom/interface/lonmsg.pm:1.105	Thu Sep  9 04:00:12 2004
+++ loncom/interface/lonmsg.pm	Fri Sep 10 02:38:24 2004
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines for messaging
 #
-# $Id: lonmsg.pm,v 1.105 2004/09/09 08:00:12 albertel Exp $
+# $Id: lonmsg.pm,v 1.106 2004/09/10 06:38:24 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -201,10 +201,12 @@
 # ======================================================= Get info out of msgid
 
 sub unpackmsgid {
-    my $msgid=&Apache::lonnet::unescape(shift);
+    my ($msgid,$folder)=@_;
+    $msgid=&Apache::lonnet::unescape($msgid);
+    my $suffix=&foldersuffix($folder);
     my ($sendtime,$shortsubj,$fromname,$fromdomain)=split(/\:/,
                           &Apache::lonnet::unescape($msgid));
-    my %status=&Apache::lonnet::get('email_status',[$msgid]);
+    my %status=&Apache::lonnet::get('email_status'.$suffix,[$msgid]);
     if ($status{$msgid}=~/^error\:/) { $status{$msgid}=''; }
     unless ($status{$msgid}) { $status{$msgid}='new'; }
     return ($sendtime,$shortsubj,$fromname,$fromdomain,$status{$msgid});
@@ -498,22 +500,71 @@
 }
 
 
+# ============================================================ List all folders
+
+sub folderlist {
+    my $folder=shift;
+    my @allfolders=&Apache::lonnet::getkeys('email_folders');
+    if ($allfolders[0]=~/^error:/) { @allfolders=(); }
+    return '<form method="post" action="/adm/email">'.
+	'<input type="submit" value="'.&mt('View Folder').'" />'.
+	&Apache::loncommon::select_form($folder,'folder',
+			     ('' => &mt('INBOX'),'trash' => &mt('TRASH'),
+			      'sent' => &mt('Sent Messages'),
+			      map { $_ => $_ } @allfolders)).
+	'<a href="/adm/email?critical=display">'.
+	    &mt('View Critical Messages').'</a>'.
+        '</form>';
+}
+# =============================================================== Folder suffix
+
+sub foldersuffix {
+    my $folder=shift;
+    unless ($folder) { return ''; }
+    return '_'.&Apache::lonnet::escape($folder);
+}
+
 # =============================================================== Status Change
 
 sub statuschange {
-    my ($msgid,$newstatus)=@_;
-    my %status=&Apache::lonnet::get('email_status',[$msgid]);
+    my ($msgid,$newstatus,$folder)=@_;
+    my $suffix=&foldersuffix($folder);
+    my %status=&Apache::lonnet::get('email_status'.$suffix,[$msgid]);
     if ($status{$msgid}=~/^error\:/) { $status{$msgid}=''; }
     unless ($status{$msgid}) { $status{$msgid}='new'; }
     unless (($status{$msgid} eq 'replied') || 
             ($status{$msgid} eq 'forwarded')) {
-	&Apache::lonnet::put('email_status',{$msgid => $newstatus});
+	&Apache::lonnet::put('email_status'.$suffix,{$msgid => $newstatus});
     }
     if (($newstatus eq 'deleted') || ($newstatus eq 'new')) {
-	&Apache::lonnet::put('email_status',{$msgid => $newstatus});
+	&Apache::lonnet::put('email_status'.$suffix,{$msgid => $newstatus});
     }
 }
 
+# ============================================================= Make new folder
+
+sub makefolder {
+    my ($newfolder)=@_;
+    &Apache::lonnet::put('email_folders',{$newfolder => time});
+}
+
+# ======================================================== Move between folders
+
+sub movemsg {
+    my ($msgid,$srcfolder,$trgfolder)=@_;
+    my $srcsuffix=&foldersuffix($srcfolder);
+    my $trgsuffix=&foldersuffix($trgfolder);
+    my $srcstatus=&Apache::lonnet::get('email_status'.$srcsuffix,[$msgid]);
+    my $trgstatus=$srcstatus;
+    if ($trgstatus eq 'deleted') { $trgstatus='read'; }
+    &Apache::lonnet::put(
+     'nohist_email'.$trgsuffix,{$msgid => 
+     &Apache::lonnet::get('nohist_email'.$srcsuffix,[$msgid])});
+    &statuschange($msgid,$trgstatus,$trgfolder);
+    &Apache::lonnet::del('nohist_email'.$srcsuffix,[$msgid]);
+    &Apache::lonnet::del('email_status'.$srcsuffix,[$msgid]);
+}
+
 # ======================================================= Display a course list
 
 sub discourse {
@@ -611,13 +662,13 @@
         my %content=&unpackagemsg($what{$_});
         next if ($content{'senderdomain'} eq '');
         $content{'message'}=~s/\n/\<br\>/g;
-        $result.='<hr>'.&mt('From').': <b>'.
+        $result.='<hr />'.&mt('From').': <b>'.
 &Apache::loncommon::aboutmewrapper(
  &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('.
 $content{'sendername'}.'@'.
             $content{'senderdomain'}.') '.$content{'time'}.
-            '<br>'.&mt('Subject').': '.$content{'subject'}.
-            '<br><blockquote>'.
+            '<br />'.&mt('Subject').': '.$content{'subject'}.
+            '<br /><blockquote>'.
               &Apache::lontexconvert::msgtexconverted($content{'message'}).
             '</blockquote><small>'.
 &mt('You have to confirm that you received this message. After confirmation, this message will be moved to your regular inbox').
@@ -629,17 +680,19 @@
     # 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').'</a>';
+	    '<a href="/adm/roles">'.&mt('Select a course').'</a><br />'.
+            '<a href="/adm/email">'.&mt('Communicate').'</a>';
     } else {
         $r->print($header);
     }
     $r->print($result);
-    $r->print('<input type=hidden name="displayedcrit" value="true"></form>');
+    $r->print('<input type=hidden name="displayedcrit" value="true" /></form>');
 }
 
 sub sortedmessages {
-    my ($blocked,$startblock,$endblock,$numblocked) = @_;
-    my @messages = &Apache::lonnet::getkeys('nohist_email');
+    my ($blocked,$startblock,$endblock,$numblocked,$folder) = @_;
+    my $suffix=&foldersuffix($folder);
+    my @messages = &Apache::lonnet::getkeys('nohist_email'.$suffix);
     #unpack the varibles and repack into temp for sorting
     my @temp;
     foreach (@messages) {
@@ -695,7 +748,7 @@
 # ======================================================== Display all messages
 
 sub disall {
-    my $r=shift;
+    my ($r,$folder)=@_;
     my %blocked = ();
     my %setters = ();
     my $startblock;
@@ -723,9 +776,10 @@
     }
 </script>
 ENDDISHEADER
-    $r->print('<h1>'.&mt('Display All Messages').'</h1><form method=post name=disall '.
-	      'action="/adm/email">'.
-	      '<table border=2><tr><th colspan=2>&nbsp</th><th>');
+    $r->print('<h2>'.&mt('Display All Messages').'</h2>'.
+	      &folderlist($folder).
+	      '<form method="post" name="disall" action="/adm/email">'.
+	      '<table border=2><tr><th colspan="3">&nbsp</th><th>');
     if ($ENV{'form.sortedby'} eq "revdate") {
 	$r->print('<a href = "?sortedby=date">'.&mt('Date').'</a></th>');
     } else {
@@ -756,7 +810,7 @@
      	$r->print('<a href = "?sortedby=revstatus">'.&mt('Status').'</th>');
     }
     $r->print('</tr>');
-    my @temp=sortedmessages(\%blocked,$startblock,$endblock,\$numblocked);
+    my @temp=sortedmessages(\%blocked,$startblock,$endblock,\$numblocked,$folder);
     foreach (@temp){
 	my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$origID)= @$_;
 	if (($status ne 'deleted') && defined($sendtime) && $sendtime!~/error/) {
@@ -769,21 +823,35 @@
 	    } else {
 		$r->print('<tr bgcolor="#99BBBB">');
 	    }
-	    $r->print('<td><a href="/adm/email?display='.$origID.$sqs. 
-		      '">'.&mt('Open').'</a></td><td><a href="/adm/email?markdel='.$origID.$sqs.
-		      '">'.&mt('Delete').'</a><input type=checkbox name="delmark_'.$origID.'" /></td>'.
+	    $r->print('<td></a><input type=checkbox name="delmark_'.$origID.'" /></td><td><a href="/adm/email?display='.$origID.$sqs. 
+		      '">'.&mt('Open').'</a></td><td>'.
+		      ($folder ne 'trash'?'<a href="/adm/email?markdel='.$origID.$sqs.
+		      '">'.&mt('Delete'):'&nbsp').'</td>'.
 		      '<td>'.&Apache::lonlocal::locallocaltime($sendtime).'</td><td>'.
 		      $fromname.'</td><td>'.$fromdomain.'</td><td>'.
 		      &Apache::lonnet::unescape($shortsubj).'</td><td>'.
                       $status.'</td></tr>');
+	} elsif ($status eq 'deleted') {
+# purge
+	    &movemsg($origID,$folder,'trash');
 	}
     }   
     $r->print('</table><p>'.
-              '<a href="javascript:checkall()">'.&mt('Check All').'</a>&nbsp;'.
-              '<a href="javascript:uncheckall()">'.&mt('Uncheck All').'</a><p>'.
-	      '<input type="hidden" name="sortedby" value="'.$ENV{'form.sortedby'}.'" />'.
-              '<input type="submit" name="markeddel" value="'.&mt('Delete Checked').'" />'.
-              '</form>');
+  '<a href="javascript:checkall()">'.&mt('Check All').'</a>&nbsp;'.
+  '<a href="javascript:uncheckall()">'.&mt('Uncheck All').'</a></p>'.
+  '<input type="hidden" name="sortedby" value="'.$ENV{'form.sortedby'}.'" />');
+    if ($folder ne 'trash') {
+	$r->print(
+	      '<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').'" />');
+    my @allfolders=&Apache::lonnet::getkeys('email_folders');
+    if ($allfolders[0]=~/^error:/) { @allfolders=(); }
+    $r->print(
+	&Apache::loncommon::select_form('','movetofolder',
+			     ( map { $_ => $_ } @allfolders))
+	      );
+    $r->print('<input type="hidden" name="folder" value="'.$folder.'" /></form>');
     if ($numblocked > 0) {
         my $beginblock = &Apache::lonlocal::locallocaltime($startblock);
         my $finishblock = &Apache::lonlocal::locallocaltime($endblock);
@@ -791,7 +859,6 @@
                   $numblocked.' '.&mt('message(s) is/are not viewable because display of LON-CAPA messages sent to you by other students between').' '.$beginblock.' '.&mt('and').' '.$finishblock.' '.&mt('is currently being blocked because of online exams.'));
         &build_block_table($r,$startblock,$endblock,\%setters);
     }
-    $r->print('</body></html>');
 }
 
 # ============================================================== Compose output
@@ -1462,7 +1529,8 @@
 # ----------------------------------------------------------- Display a message
 
 sub displaymessage {
-    my ($r,$msgid)=@_;
+    my ($r,$msgid,$folder)=@_;
+    my $suffix=&foldersuffix($folder);
     my %blocked = ();
     my %setters = ();
     my $startblock = 0;
@@ -1478,7 +1546,7 @@
         return;
     }
     &statuschange($msgid,'read');
-    my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
+    my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]);
     my %content=&unpackagemsg($message{$msgid});
     my $counter=0;
     $r->print('<pre>');
@@ -1573,7 +1641,7 @@
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
         ['display','replyto','forward','markread','markdel','markunread',
          'sendreply','compose','sendmail','critical','recname','recdom',
-         'recordftf','sortedby','block']);
+         'recordftf','sortedby','block','folder']);
     $sqs='&sortedby='.$ENV{'form.sortedby'};
 # ------------------------------------------------------ They checked for email
     unless ($ENV{'form.block'}) {
@@ -1588,10 +1656,19 @@
           text=>"Communication/Messages",
           faq=>12,bug=>'Communication Tools',});
 
+# ------------------------------------------------------------------ Get Folder
+
+    my $folder=$ENV{'form.folder'};
+    unless ($folder) { 
+	$folder=''; 
+    } else {
+	$sqs='&folder='.&Apache::lonnet::escape($folder);
+    }
+
 # --------------------------------------------------------------- Render Output
 
     if ($ENV{'form.display'}) {
-	&displaymessage($r,$ENV{'form.display'});
+	&displaymessage($r,$ENV{'form.display'},$folder);
     } elsif ($ENV{'form.replyto'}) {
 	&compout($r,'',$ENV{'form.replyto'});
     } elsif ($ENV{'form.confirm'}) {
@@ -1616,8 +1693,20 @@
 	&compout($r,$ENV{'form.forward'});
     } elsif ($ENV{'form.markdel'}) {
 	&printheader($r,'','Deleted Message');
-	&statuschange($ENV{'form.markdel'},'deleted');
-	&disall($r);
+	&statuschange($ENV{'form.markdel'},'deleted',$folder);
+	&disall($r,$folder);
+    } elsif ($ENV{'form.markedmove'}) {
+	my $total=0;
+	foreach (keys %ENV) {
+	    if ($_=~/^form\.delmark_(.*)$/) {
+		&movemsg(&Apache::lonnet::unescape($1),$folder,
+			 $ENV{'form.movetofolder'});
+		$total++;
+	    }
+	}
+	&printheader($r,'','Moved Messages');
+	$r->print('Moved '.$total.' message(s)<p>');
+	&disall($r,$folder);
     } elsif ($ENV{'form.markeddel'}) {
 	my $total=0;
 	foreach (keys %ENV) {
@@ -1628,11 +1717,11 @@
 	}
 	&printheader($r,'','Deleted Messages');
 	$r->print('Deleted '.$total.' message(s)<p>');
-	&disall($r);
+	&disall($r,$folder);
     } elsif ($ENV{'form.markunread'}) {
 	&printheader($r,'','Marked Message as Unread');
 	&statuschange($ENV{'form.markunread'},'new');
-	&disall($r);
+	&disall($r,$folder);
     } elsif ($ENV{'form.compose'}) {
 	&compout($r,'','',$ENV{'form.compose'});
     } elsif ($ENV{'form.recordftf'}) {
@@ -1731,9 +1820,13 @@
 		      &mt('Please use the browser "Back" button and correct the recipient addresses')
 		      );
 	}
+    } elsif ($ENV{'form.newfolder'}) {
+	&printheader($r,'','New Folder');
+	&makefolder($ENV{'form.newfolder'});
+	&disall($r,$ENV{'form.newfolder'});
     } else {
 	&printheader($r,'','Display All Messages');
-	&disall($r);
+	&disall($r,$folder);
     }
     $r->print('</body></html>');
     return OK;
Index: rat/lonsequence.pm
diff -u rat/lonsequence.pm:1.19 rat/lonsequence.pm:1.20
--- rat/lonsequence.pm:1.19	Sun Aug 29 12:30:53 2004
+++ rat/lonsequence.pm	Fri Sep 10 02:38:24 2004
@@ -2,7 +2,7 @@
 #
 # Sequence Handler
 #
-# $Id: lonsequence.pm,v 1.19 2004/08/29 16:30:53 raeburn Exp $
+# $Id: lonsequence.pm,v 1.20 2004/09/10 06:38:24 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -330,7 +330,7 @@
                $warnmsg .= &mt('preceding the current resource were empty').',';
            }
            $warnmsg .= &mt('you have now reached the').' '.$lt{$arrow_dir}.' '.&mt('of the course.');
-           my $bodytag=&Apache::loncommon::bodytag(&mt('emfo'));
+           my $bodytag=&Apache::loncommon::bodytag('Empty Folder/Sequence');
            $r->print(<<ENDNONE);
 <head><title>$lt{'emfo'}</title></head>
 $bodytag

--www1094798304--