[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lon-capa-cvs
Subject:    [LON-CAPA-cvs] cvs: loncom /interface lonfeedback.pm lonmsg.pm lonmsgdisplay.pm lonnavmaps.pm  /xml
From:       raeburn <lon-capa-cvs () mail ! lon-capa ! org>
Date:       2006-12-24 22:13:22
Message-ID: cvsraeburn1166998402 () cvsserver
[Download RAW message or body]

This is a MIME encoded message


raeburn		Sun Dec 24 17:13:22 2006 EDT

  Modified files:              
    /loncom/interface	lonnavmaps.pm lonmsg.pm lonmsgdisplay.pm 
                     	lonfeedback.pm 
    /loncom/xml	lonxml.pm 
  Log:
  Include symb in msgid when sending feedback about a resource.
  
  Include an error bit in msgid (1 if message is a "bomb" caused by an error when \
rendering a problem.  
  Include symb and resource title in messsage (<symb> and <resource_title> tags) when \
feedback is about a resource.  
  Navigate Contents page now checks for unread feedback or errors using symb instead \
of just resource url.  
  Navigate Contents page checks for resource context based on symb in msgid instead \
of in [url] included in message subject.  Backwards compatibility with old-style \
messages retained.  
  Subject for feedback messages about resources appends message title instead of url \
inside [].  
  Title on feedback page now avoids leaking unencrypted file name in cases where no \
title was assigned to a resource with hidden url.  
  When displaying feedback messages about a resource in a course, "Refers to" link \
displayed when viewer has corresponding course role selected includes symb in the \
link. Link text is now resource title.  
  "Refers to" link points to unencrypted resource url if feedback message is viewed \
under role other than original course, only if user has bre privilege for the \
resource, otherwise "Refers to" link is not displayed.  
  lonfeedback -- Some replacement of decode_symb() and &clutter() and &dewrapper() \
with &get_feedurl_and_clean_symb() for replies and edits of discussion posts.  
  lonfeedback -- More work on in ensuring hidden urls are encrypted or unencrypted as \
required.     
  


["raeburn-20061224171322.txt" (text/plain)]

Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.394 loncom/interface/lonnavmaps.pm:1.395
--- loncom/interface/lonnavmaps.pm:1.394	Wed Dec 20 18:25:13 2006
+++ loncom/interface/lonnavmaps.pm	Sun Dec 24 17:13:19 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Navigate Maps Handler
 #
-# $Id: lonnavmaps.pm,v 1.394 2006/12/20 23:25:13 raeburn Exp $
+# $Id: lonnavmaps.pm,v 1.395 2006/12/24 22:13:19 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1914,22 +1914,32 @@
     
     foreach my $msgid (@keys) {
 	if ((!$emailstatus{$msgid}) || ($emailstatus{$msgid} eq 'new')) {
-	    my $plain=
-		&LONCAPA::unescape(&LONCAPA::unescape($msgid));
-	    if ($plain=~/ \[([^\]]+)\]\:/) {
-		my $url=$1;
-		if ($plain=~/\:Error \[/) {
-		    $error{$url}.=','.$msgid; 
-		} else {
-		    $feedback{$url}.=','.$msgid;
-		}
-	    }
+            my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,
+                $symb,$error) = &Apache::lonmsg::unpackmsgid($msgid);
+            if (defined($symb)) {
+                if (defined($error) && $error == 1) {
+                    $error{$symb}.=','.$msgid;
+                } else {
+                    $feedback{$symb}.=','.$msgid;
+                }
+            } else {
+                my $plain=
+                    &LONCAPA::unescape(&LONCAPA::unescape($msgid));
+                if ($plain=~/ \[([^\]]+)\]\:/) {
+                    my $url=$1;
+                    if ($plain=~/\:Error \[/) {
+                        $error{$url}.=','.$msgid;
+                    } else {
+                        $feedback{$url}.=','.$msgid;
+                    }
+                }
+            }
 	}
     }
     
-    #url's of resources that have feedbacks
+    #symbs of resources that have feedbacks (will be urls pre-2.3)
     $self->{FEEDBACK} = \%feedback;
-    #or errors
+    #or errors (will be urls pre 2.3)
     $self->{ERROR_MSG} = \%error;
     $self->{DISCUSSION_TIME} = \%discussiontime;
     $self->{EMAIL_STATUS} = \%emailstatus;
@@ -2116,23 +2126,48 @@
 sub getFeedback { 
     my $self = shift;
     my $symb = shift;
+    my $source = shift;
 
     $self->generate_email_discuss_status();
 
     if (!defined($self->{FEEDBACK})) { return ""; }
     
-    return $self->{FEEDBACK}->{$symb};
+    my $feedback;
+    if ($self->{FEEDBACK}->{$symb}) {
+        $feedback = $self->{FEEDBACK}->{$symb};
+        if ($self->{FEEDBACK}->{$source}) {
+            $feedback .= ','.$self->{FEEDBACK}->{$source};
+        }
+    } else {
+        if ($self->{FEEDBACK}->{$source}) {
+            $feedback = $self->{FEEDBACK}->{$source};
+        }
+    }
+    return $feedback;
 }
 
 # Private method: Get the errors for that resource (by source).
 sub getErrors { 
     my $self = shift;
+    my $symb = shift;
     my $src = shift;
 
     $self->generate_email_discuss_status();
 
     if (!defined($self->{ERROR_MSG})) { return ""; }
-    return $self->{ERROR_MSG}->{$src};
+
+    my $errors;
+    if ($self->{ERROR_MSG}->{$symb}) {
+        $errors = $self->{ERROR_MSG}->{$symb};
+        if ($self->{ERROR_MSG}->{$src}) {
+            $errors .= ','.$self->{ERROR_MSG}->{$src};
+        }
+    } else {
+        if ($self->{ERROR_MSG}->{$src}) {
+            $errors = $self->{ERROR_MSG}->{$src};
+        }
+    }
+    return $errors;
 }
 
 =pod
@@ -3883,15 +3918,17 @@
 sub getFeedback {
     my $self = shift;
     my $source = $self->src();
+    my $symb = $self->symb();
     if ($source =~ /^\/res\//) { $source = substr $source, 5; }
-    return $self->{NAV_MAP}->getFeedback($source);
+    return $self->{NAV_MAP}->getFeedback($symb,$source);
 }
 
 sub getErrors {
     my $self = shift;
     my $source = $self->src();
+    my $symb = $self->symb();
     if ($source =~ /^\/res\//) { $source = substr $source, 5; }
-    return $self->{NAV_MAP}->getErrors($source);
+    return $self->{NAV_MAP}->getErrors($symb,$source);
 }
 
 =pod
Index: loncom/interface/lonmsg.pm
diff -u loncom/interface/lonmsg.pm:1.190 loncom/interface/lonmsg.pm:1.191
--- loncom/interface/lonmsg.pm:1.190	Tue Dec 12 20:45:15 2006
+++ loncom/interface/lonmsg.pm	Sun Dec 24 17:13:19 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines for messaging
 #
-# $Id: lonmsg.pm,v 1.190 2006/12/13 01:45:15 raeburn Exp $
+# $Id: lonmsg.pm,v 1.191 2006/12/24 22:13:19 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -47,7 +47,7 @@
 
 sub packagemsg {
     my ($subject,$message,$citation,$baseurl,$attachmenturl,
-	$recuser,$recdomain,$msgid,$type,$crsmsgid)=@_;
+	$recuser,$recdomain,$msgid,$type,$crsmsgid,$symb,$error)=@_;
     $message =&HTML::Entities::encode($message,'<>&"');
     $citation=&HTML::Entities::encode($citation,'<>&"');
     $subject =&HTML::Entities::encode($subject,'<>&"');
@@ -78,7 +78,7 @@
     my $msgcount = &get_uniq();
     unless(defined($msgid)) {
         $msgid = &buildmsgid($now,$subject,$env{'user.name'},$env{'user.domain'},
-                            $msgcount,$course_context,$$);
+                           $msgcount,$course_context,$symb,$error,$$);
     }
     my $result = '<sendername>'.$env{'user.name'}.'</sendername>'.
            '<senderdomain>'.$env{'user.domain'}.'</senderdomain>'.
@@ -134,7 +134,18 @@
     if (defined($attachmenturl)) {
 	$result.= '<attachmenturl>'.$attachmenturl.'</attachmenturl>';
     }
-    return $msgid,$result;
+    if (defined($symb)) {
+        $result.= '<symb>'.$symb.'</symb>';
+        if (defined($course_context)) {
+            if ($course_context eq $env{'request.course.id'}) {
+                my $resource_title = &Apache::lonnet::gettitle($symb);
+                if (defined($resource_title)) {
+                    $result .= \
'<resource_title>'.$resource_title.'</resource_title>'; +                }
+            }
+        }
+    }
+    return ($msgid,$result);
 }
 
 # ================================================== Unpack message into a hash
@@ -178,17 +189,17 @@
 # ======================================================= Get info out of msgid
 
 sub buildmsgid {
-    my ($now,$subject,$uname,$udom,$msgcount,$course_context,$pid) = @_;
+    my ($now,$subject,$uname,$udom,$msgcount,$course_context,$symb,$error,$pid) = \
@_;  $subject=&escape($subject);
     return(&escape($now.':'.$subject.':'.$uname.':'.
-           $udom.':'.$msgcount.':'.$course_context.':'.$pid));
+           $udom.':'.$msgcount.':'.$course_context.':'.$pid.':'.$symb.':'.$error));
 }
 
 sub unpackmsgid {
     my ($msgid,$folder,$skipstatus,$status_cache)=@_;
     $msgid=&unescape($msgid);
     my ($sendtime,$shortsubj,$fromname,$fromdomain,$count,$fromcid,
-                     $processid)=split(/\:/,&unescape($msgid));
+        $processid,$symb,$error) = split(/\:/,&unescape($msgid));
     $shortsubj = &unescape($shortsubj);
     $shortsubj = &HTML::Entities::decode($shortsubj);
     if (!defined($processid)) { $fromcid = ''; }
@@ -203,7 +214,7 @@
 	if ($status{$msgid}=~/^error\:/) { $status{$msgid}=''; }
         unless ($status{$msgid}) { $status{$msgid}='new'; }
     }
-    return ($sendtime,$shortsubj,$fromname,$fromdomain,$status{$msgid},$fromcid);
+    return ($sendtime,$shortsubj,$fromname,$fromdomain,$status{$msgid},$fromcid,$symb,$error);
  }
 
 
@@ -495,7 +506,8 @@
 
 sub user_normal_msg_raw {
     my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl,
-	$toperm,$currid,$newid,$sentmessage,$crsmsgid)=@_;
+        $toperm,$currid,$newid,$sentmessage,$crsmsgid,$symb,$restitle,
+        $error)=@_;
 # Check if allowed missing
     my ($status,$packed_message);
     my $msgid='undefined';
@@ -506,7 +518,7 @@
        ($msgid,$packed_message)=
 	                 &packagemsg($subject,$message,$citation,$baseurl,
                                      $attachmenturl,$user,$domain,$currid,
-                                                         undef,$crsmsgid);
+                                     undef,$crsmsgid,$symb,$error);
 
 # Store in user folder
        $status=&Apache::lonnet::critical(
@@ -525,7 +537,7 @@
 					    '/'.$env{'request.course.sec'})))) {
            (undef,my $packed_message_no_citation) =
                &packagemsg($subject,$message,undef,$baseurl,$attachmenturl,
-                           $user,$domain,$currid,undef,$crsmsgid);
+                           $user,$domain,$currid,undef,$crsmsgid,$symb,$error);
            $status .= &store_sent_mail($msgid,$packed_message_no_citation);
        }
     } else {
@@ -560,15 +572,15 @@
 
 =pod
 
-=item * B<user_normal_msg($user, $domain, $subject, $message,
-    $citation, $baseurl, $attachmenturl)>: Sends a message to the
-    $user at $domain, with subject $subject and message $message.
+=item * B<user_normal_msg($user, $domain, $subject, $message, $citation,
+       $baseurl, $attachmenturl, $toperm, $sentmessage, $symb, $restitle, $error)>:
+ Sends a message to the  $user at $domain, with subject $subject and message \
$message.  
 =cut
 
 sub user_normal_msg {
     my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl,
-	$toperm,$sentmessage)=@_;
+	$toperm,$sentmessage,$symb,$restitle,$error)=@_;
     my $status='';
     my %userenv = &Apache::lonnet::get('environment',['msgforward'],
                                        $domain,$user);
@@ -579,12 +591,12 @@
 	    $status.=
 	        &user_normal_msg_raw($forwuser,$forwdomain,$subject,$message,
 				     $citation,$baseurl,$attachmenturl,$toperm,
-				     undef,undef,$sentmessage).' ';
+				     undef,undef,$sentmessage,undef,$symb,$restitle,$error).' ';
         }
-    } else { 
+    } else {
 	$status=&user_normal_msg_raw($user,$domain,$subject,$message,
 				     $citation,$baseurl,$attachmenturl,$toperm,
-				     undef,undef,$sentmessage);
+				     undef,undef,$sentmessage,undef,$symb,$restitle,$error);
     }
     return $status;
 }
Index: loncom/interface/lonmsgdisplay.pm
diff -u loncom/interface/lonmsgdisplay.pm:1.58 loncom/interface/lonmsgdisplay.pm:1.59
--- loncom/interface/lonmsgdisplay.pm:1.58	Sat Dec 23 13:27:28 2006
+++ loncom/interface/lonmsgdisplay.pm	Sun Dec 24 17:13:19 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines for messaging display
 #
-# $Id: lonmsgdisplay.pm,v 1.58 2006/12/23 18:27:28 raeburn Exp $
+# $Id: lonmsgdisplay.pm,v 1.59 2006/12/24 22:13:19 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -774,7 +774,6 @@
     my ($blocked,$startblock,$endblock,$numblocked,$folder,$msgstatus) = @_;
     my $suffix=&Apache::lonmsg::foldersuffix($folder);
     my @messages = &Apache::lonnet::getkeys('nohist_email'.$suffix);
-
     #unpack the varibles and repack into temp for sorting
     my @temp;
     my %descriptions;
@@ -789,7 +788,7 @@
 
     foreach my $msgid (@messages) {
 	my $esc_msgid=&escape($msgid);
-	my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid)=
+	my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,$processid,$symb,$error) \
=  &Apache::lonmsg::unpackmsgid($esc_msgid,$folder,undef,
 					 \%status_cache);
         next if ($msgstatus ne '' && $msgstatus ne $status);
@@ -1950,7 +1949,9 @@
         &build_block_table($r,$startblock,$endblock,\%setters);
         return;
     }
-    &statuschange($msgid,'read',$folder);
+    if ($msgstatus eq '') {
+        &statuschange($msgid,'read',$folder);
+    }
     my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]);
     my %content=&Apache::lonmsg::unpackagemsg($message{$msgid});
 
@@ -1989,9 +1990,14 @@
 		  '"><b>'.&mt('Next').'</b></a></td>');
     }
     $r->print('</tr></table>');
+    my $symb;
+    if (defined($content{'symb'})) {
+        $symb = $content{'symb'};
+    } elsif (defined($content{'baseurl'})) {
+        $symb=&Apache::lonnet::symbread($content{'baseurl'});
+    }
     if ($env{'user.adv'}) {
 	$r->print('<table border="2" width="100%"><tr \
bgcolor="#FFAAAA"><td>'.&mt('Currently available actions (will open extra \
                window)').':</td>');
-	my $symb=&Apache::lonnet::symbread($content{'baseurl'});      
 	if (&Apache::lonnet::allowed('vgr',$env{'request.course.id'})) {
 		$r->print('<td><b>'.&Apache::loncommon::track_student_link(&mt('View recent \
activity'),$content{'sendername'},$content{'senderdomain'},'check').'</b></td>');  }
@@ -2013,6 +2019,17 @@
        ' ('.$content{'recuser'}[$i].' at '.$content{'recdomain'}[$i].') ';
     }
     $tolist = join(', ',@recipients);
+    my ($restitle,$baseurl,$refers_to);
+    if (defined($content{'resource_title'})) {
+        $restitle = $content{'resource_title'};
+    } else {
+        if (defined($content{'baseurl'})) {
+            $restitle = &Apache::lonnet::gettitle($content{'baseurl'});
+        }
+    }
+    if (defined($content{'baseurl'})) {
+        $baseurl = &Apache::lonenc::check_encrypt($content{'baseurl'});
+    }
     $r->print('<br /><b>'.&mt('Subject').':</b> '.$content{'subject'}.
 	      ($folder ne 'sent'?'<br /><b>'.&mt('From').':</b> '.
 	      &Apache::loncommon::aboutmewrapper(
@@ -2023,13 +2040,46 @@
               $tolist).
 	      ($content{'courseid'}?'<br /><b>'.&mt($crstype).':</b> \
                '.$courseinfo{'description'}.
 	       ($content{'coursesec'}?' ('.&mt('Section').': \
                '.$content{'coursesec'}.')':''):'').
-	      '<br /><b>'.&mt('Time').':</b> '.$content{'time'}.
-	      ($content{'baseurl'}?'<br /><b>'.&mt('Refers to').':</b> <a \
                href="'.$content{'baseurl'}.'">'.
-	       $content{'baseurl'}.' \
                ('.&Apache::lonnet::gettitle($content{'baseurl'}).')</a>':'').
-	      '<p><pre>'.
+	      '<br /><b>'.&mt('Time').':</b> '.$content{'time'});
+    if ($baseurl) {
+        if (defined($content{'courseid'}) && defined($env{'request.course.id'})) {
+            if ($content{'courseid'} eq $env{'request.course.id'}) {
+                my $symblink;
+                if ($symb) {
+                    &Apache::lonenc::check_decrypt(\$symb);
+                    $symblink = '?symb='.$symb;
+                }
+                &Apache::lonenc::check_decrypt(\$baseurl);
+                $r->print('<br /><b>'.&mt('Refers to').':</b> <a \
href="'.$baseurl.$symblink.'">'.$restitle.'</a>'); +                $refers_to = 1;
+            }
+        }
+        if (!$refers_to) {
+            if ($baseurl =~ m-^/enc/-) {
+                if (defined($content{'courseid'})) {
+                    my $unencurl = 
+                       &Apache::lonenc::unencrypted($baseurl,
+                                                    $content{'courseid'}); 
+                    if (defined($unencurl)) {
+                        if (&Apache::lonnet::allowed('bre',$unencurl)) {
+                            $r->print('<br /><b>'.&mt('Refers to').
+                                      ':</b> <a \
href="'.$unencurl.'">'.$restitle.'</a>'); +                        }
+                    }
+                }
+            } else {
+                if (&Apache::lonnet::allowed('bre',$baseurl)) {
+                    $r->print('<br /><b>'.&mt('Refers to').
+                              ':</b> <a href="'.$baseurl.
+                              '">'.$restitle.'</a>');
+                }
+            }
+        }
+    }
+    $r->print('<p><pre>'.
 	      &Apache::lontexconvert::msgtexconverted($content{'message'},1).
 	      '</pre><hr />'.&displayresource(%content).'</p>');
-    return;   
+    return;
 }
 
 # =========================================================== Show the citation
@@ -2042,7 +2092,12 @@
 #
     if (($env{'request.course.id'} eq $content{'courseid'})
      && (&Apache::lonnet::allowed('vgr',$content{'courseid'}))) {
-	my $symb=&Apache::lonnet::symbread($content{'baseurl'});
+        my $symb;
+        if (defined($content{'symb'})) {
+            $symb = $content{'symb'};
+        } else { 
+	    $symb=&Apache::lonnet::symbread($content{'baseurl'});
+        }
 # Could not get a symb, give up
 	unless ($symb) { return $content{'citation'}; }
 # Have a symb, can render
Index: loncom/interface/lonfeedback.pm
diff -u loncom/interface/lonfeedback.pm:1.236 loncom/interface/lonfeedback.pm:1.237
--- loncom/interface/lonfeedback.pm:1.236	Mon Dec 11 13:50:40 2006
+++ loncom/interface/lonfeedback.pm	Sun Dec 24 17:13:19 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Feedback
 #
-# $Id: lonfeedback.pm,v 1.236 2006/12/11 18:50:40 raeburn Exp $
+# $Id: lonfeedback.pm,v 1.237 2006/12/24 22:13:19 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1468,7 +1468,7 @@
 }
 
 sub mail_screen {
-  my ($r,$feedurl,$options) = @_;
+  my ($r,$feedurl,$options,$symb) = @_;
   if (exists($env{'form.origpage'})) {
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['subject','commen \
t','currnewattach','addnewattach','deloldattach','delnewattach','timestamp','idx','anondiscuss','discuss','blog','group','ref']);
  }
@@ -1479,9 +1479,8 @@
             'title' => 'Title',
             'reta' => 'Retained attachments',
             'atta' => 'Attachment (128 KB max size)',
-           ); 
-  my $title=&Apache::lonnet::gettitle($feedurl);
-  if (!$title) { $title = $feedurl; }
+           );
+  my $restitle = &get_resource_title($symb,$feedurl);
   my $quote='';
   my $subject = '';
   my $comment = '';
@@ -1669,7 +1668,7 @@
 
   $r->print(<<END);
 $start_page
-<h2><tt>$title</tt></h2>
+<h2><tt>$restitle</tt></h2>
 <form action="/adm/feedback" method="post" name="mailform"
 enctype="multipart/form-data">
 $prevtag
@@ -2641,7 +2640,7 @@
 }
 
 sub assemble_email {
-  my ($feedurl,$message,$prevattempts,$usersaw,$useranswer)=@_;
+  my ($message,$prevattempts,$usersaw,$useranswer)=@_;
   my %lt = &Apache::lonlocal::texthash(
              'prev' => 'Previous attempts of student (if applicable)',
              'orig' => 'Original screen output (if applicable)',
@@ -2719,6 +2718,7 @@
 
 sub decide_receiver {
   my ($feedurl,$author,$question,$course,$policy,$defaultflag) = @_;
+  &Apache::lonenc::check_decrypt(\$feedurl);
   my $typestyle='';
   my %to=();
   if ($env{'form.discuss'} eq 'author' ||$author) {
@@ -2767,17 +2767,17 @@
 }
 
 sub send_msg {
-  my ($title,$feedurl,$email,$citations,$attachmenturl,%to)=@_;
+  my ($title,$feedurl,$email,$citations,$attachmenturl,$symb,%to)=@_;
   my $status='';
   my $sendsomething=0;
+  my $restitle = &get_resource_title($symb,$feedurl);
   if ($title=~/^Error/) { $title=&mt('Feedback').': '.$title; }
   unless ($title=~/\w/) { $title=&mt('Feedback'); }
   foreach my $key (keys(%to)) {
     if ($key) {
-      my $declutter=&Apache::lonnet::declutter($feedurl);
       unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$key),
-               $title.' ['.$declutter.']',$email,$citations,$feedurl,
-                $attachmenturl)=~/ok/) {
+               $title.' ['.$restitle.']',$email,$citations,$feedurl,
+                $attachmenturl,undef,undef,$symb,$restitle)=~/ok/) {
 	$status.='<br />'.&mt('Error sending message to').' '.$key.'<br />';
       } else {
 	$sendsomething++;
@@ -3725,12 +3725,8 @@
       my $symb;
       if ($env{'form.replydisc'}) {
 	  $symb=(split(/\:\:\:/,$env{'form.replydisc'}))[0];
-	  my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
-	  $feedurl=&Apache::lonnet::clutter($url);
       } elsif ($env{'form.editdisc'}) {
 	  $symb=(split(/\:\:\:/,$env{'form.editdisc'}))[0];
-	  my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
-	  $feedurl=&Apache::lonnet::clutter($url);
       } elsif ($env{'form.origpage'}) {
 	  $symb=""; 
       } else {
@@ -3738,18 +3734,18 @@
       }
       unless ($symb) {
 	  $symb=$env{'form.symb'};
-	  if ($symb) {
-	      my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
-	      $feedurl=&Apache::lonnet::clutter($url);
-	  }
       }
-      &Apache::lonenc::check_decrypt(\$symb);
+      if (defined($symb)) {
+          ($symb,$feedurl)=&get_feedurl_and_clean_symb($symb);
+      } else {
+          # backward compatibility (bulletin boards used to be 'wrapped')
+          &Apache::lonenc::check_decrypt(\$feedurl);
+          &dewrapper(\$feedurl);
+      }
       my $goahead=1;
       if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form|task)$/) {
 	  unless ($symb) { $goahead=0; }
       }
-      # backward compatibility (bulletin boards used to be 'wrapped')
-      &dewrapper(\$feedurl);
       if (!$goahead) {
           # Ambiguous Problem Resource
 	  $r->internal_redirect('/adm/ambiguous');
@@ -3787,7 +3783,7 @@
           }
 	  my $options=&screen_header($feedurl,$symb);
 	  if ($options) {
-	      &mail_screen($r,$feedurl,$options);
+	      &mail_screen($r,$feedurl,$options,$symb);
 	  } else {
 	      &fail_redirect($r,$feedurl);
 	  }
@@ -3800,13 +3796,16 @@
 				   $env{'request.course.id'});
 
 # Get output from resource
+      &Apache::lonenc::check_encrypt(\$feedurl);
       my $usersaw=&resource_output($feedurl);
 
 # Get resource answer (need to allow student to view grades for this to work)
       &Apache::lonnet::appenv(('allowed.vgr'=>'F'));
-      my $useranswer=&Apache::loncommon::get_student_answers(
-                                   $symb,$env{'user.name'},$env{'user.domain'},
-		                   $env{'request.course.id'});
+      my $usersymmb = &Apache::lonenc::check_encrypt($symb);
+      my $useranswer=
+          &Apache::loncommon::get_student_answers(
+              $usersymb),$env{'user.name'},$env{'user.domain'},
+              $env{'request.course.id'});
       &Apache::lonnet::delenv('allowed.vgr');
 # Get attachments, if any, and not too large
       my $attachmenturl='';
@@ -3836,7 +3835,7 @@
       my $message=&clear_out_html($env{'form.comment'});
 
 # Assemble email
-      my ($email,$citations)=&assemble_email($feedurl,$message,$prevattempts,
+      my ($email,$citations)=&assemble_email($message,$prevattempts,
 					     $usersaw,$useranswer);
  
 # Who gets this?
@@ -3846,7 +3845,7 @@
       my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'},
 						      undef,1),
 				      $feedurl,$email,$citations,
-				      $attachmenturl,%to);
+				      $attachmenturl,$symb,%to);
 
 # Discussion? Store that.
       my $numpost=0;
@@ -3989,5 +3988,32 @@
     return $extra_args;
 }
 
+sub get_resource_title {
+    my ($symb,$feedurl) = @_;
+    my ($restitle,$plainurl);
+    if (defined($symb)) {
+        my $plain_symb = &Apache::lonenc::check_decrypt($symb);
+        $restitle = &Apache::lonnet::gettitle($plain_symb);
+    }
+    if (defined($feedurl)) {
+        $plainurl = &Apache::lonenc::check_decrypt($feedurl);
+    }
+    if (!defined($restitle)) {
+        if (defined($feedurl)) {
+            $restitle = &Apache::lonnet::gettitle($plainurl);
+        }
+    }
+    if ($plainurl ne $feedurl) {
+        my ($plain_filename) = ($plainurl =~ m-/([^/]+)$-);
+        if ($plain_filename eq $restitle) {
+            $restitle = &mt('Untitled resource');
+        }
+    }
+    if ($restitle eq '') {
+        $restitle = &mt('Untitled resource');
+    }
+    return $restitle;
+}
+
 1;
 __END__
Index: loncom/xml/lonxml.pm
diff -u loncom/xml/lonxml.pm:1.433 loncom/xml/lonxml.pm:1.434
--- loncom/xml/lonxml.pm:1.433	Wed Dec 20 17:51:27 2006
+++ loncom/xml/lonxml.pm	Sun Dec 24 17:13:20 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.433 2006/12/20 22:51:27 albertel Exp $
+# $Id: lonxml.pm,v 1.434 2006/12/24 22:13:20 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1582,8 +1582,11 @@
 						      $cdom,$cnum);
 		my $now=time;
 		if ($now-$lastnotified{$key}>86400) {
+                    my $title = &Apache::lonnet::gettitle($symb);
+                    my $sentmessage;
 		    &Apache::lonmsg::user_normal_msg($user,$domain,
-						 "Error [$declutter]",$msg);
+		        "Error [$title]",$msg,'','','','',
+                        \$sentmessage,$symb,$title,1);
 		    &Apache::lonnet::put('nohist_xmlerrornotifications',
 					 {$key => $now},
 					 $cdom,$cnum);		


_______________________________________________
LON-CAPA-cvs mailing list
LON-CAPA-cvs@mail.lon-capa.org
http://mail.lon-capa.org/mailman/listinfo/lon-capa-cvs

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic