--- loncom/interface/lonmenu.pm	2009/03/13 15:12:02	1.255
+++ loncom/interface/lonmenu.pm	2009/04/23 17:28:59	1.260
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.255 2009/03/13 15:12:02 bisitz Exp $
+# $Id: lonmenu.pm,v 1.260 2009/04/23 17:28:59 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -174,7 +174,7 @@ sub initlittle {
                                                     'Courses':'Roles'),
                                        'other' => 'Other Roles',
                                        'docs' => 'Edit Course',
-                                       'exit' => 'Exit',
+                                       'exit' => 'Logout',
                                        'login' => 'Log In',
 				       'launch' => 'Launch Remote Control',
                                        'groups' => 'Groups',
@@ -348,6 +348,12 @@ ENDCRELOAD
         my $form=&serverform();
 	my $utility=&utilityfunctions();
 
+	my $messagelink = "";
+	if(&Apache::lonmsg::mynewmail()){
+		$messagelink = '<a href="javascript:go(\'/adm/communicate\');">Message(new)</a>'
+	}else{
+		$messagelink = '<a href="javascript:go(\'/adm/communicate\');">Message</a>'
+	}
         my $helplink=&Apache::loncommon::top_nav_help('Help');
 	return (<<ENDINLINEMENU);
 <script type="text/javascript">
@@ -358,7 +364,7 @@ $utility
 </script>
 <ol class="LC_smallMenu LC_right">
 	<li>$logo</li>
-	<li><a href="javascript:go('/adm/communicate');">Message</a></li>
+	<li>$messagelink</li>
 	<li>$roles</li>
 	<li>$helplink</li>
 	<li><a href="/adm/logout" target="_top">$lt{'exit'}</a></li>
@@ -496,7 +502,7 @@ sub innerregister {
         if ($env{'request.symb'} ne '' &&
 	    $env{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form|task)$/) {
 	    if (&Apache::lonnet::allowed('mgr',$crs)) {
-		$hwkadd.=&switch('','',7,2,'pgrd.gif','problem[_1]','grades[_3]',
+		$hwkadd.=&switch('','',7,2,'pgrd.gif','problem[_1]','grades[_4]',
                        "gocmd('/adm/grades','gradingmenu')",
                        'Modify user grades for this assessment resource');
             } elsif (&Apache::lonnet::allowed('vgr',$crs)) {
@@ -517,6 +523,12 @@ sub innerregister {
         ### resource
         ###
         my $editbutton = '';
+        my $noeditbutton = 1;
+        my ($cnum,$cdom);
+        if ($env{'request.course.id'}) {
+            $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+            $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+        }
         if ($env{'user.author'}) {
             if ($env{'request.role'}=~/^(aa|ca|au)/) {
                 # Set defaults for authors
@@ -544,6 +556,7 @@ sub innerregister {
 		foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
 		if (!$allowed) {
 		    $editbutton=&switch('','',6,1,$top,,$bottom,$action,$desc);
+                    $noeditbutton = 0;
                 }
             }
             ##
@@ -552,30 +565,53 @@ sub innerregister {
             my $cfile='';
             my $cfuname='';
             my $cfudom='';
+            my $uploaded;
             if ($env{'request.filename'}) {
                 my $file=&Apache::lonnet::declutter($env{'request.filename'});
-                $file=~s/^($match_domain)\/($match_username)/\/priv\/$2/;
-                # Check that the user has permission to edit this resource
-                ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1);
-                if (defined($cfudom)) {
-		    my $home=&Apache::lonnet::homeserver($cfuname,$cfudom);
-		    my $allowed=0;
-		    my @ids=&Apache::lonnet::current_machine_ids();
-		    foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
-		    if ($allowed) {
-                        $cfile=$file;
+                if (defined($cnum) && defined($cdom)) {
+                    $uploaded = &is_course_upload($file,$cnum,$cdom);
+                }
+                if (!$uploaded) {
+                    $file=~s/^($match_domain)\/($match_username)/\/priv\/$2/;
+                    # Check that the user has permission to edit this resource
+                    ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1);
+                    if (defined($cfudom)) {
+		        my $home=&Apache::lonnet::homeserver($cfuname,$cfudom);
+		        my $allowed=0;
+		        my @ids=&Apache::lonnet::current_machine_ids();
+		        foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
+		        if ($allowed) {
+                            $cfile=$file;
+                        }
                     }
                 }
-            }        
+            }
             # Finally, turn the button on or off
             if ($cfile && !$const_space) {
                 $editbutton=&switch
                     ('','',6,1,'pcstr.gif','edit[_1]','resource[_2]',
                      "go('".$cfile."');","Edit this resource");
+                $noeditbutton = 0;
             } elsif ($editbutton eq '') {
                 $editbutton=&clear(6,1);
             }
         }
+        if (($noeditbutton) && ($env{'request.filename'})) { 
+            if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {
+                my $file=&Apache::lonnet::declutter($env{'request.filename'});
+                if (defined($cnum) && defined($cdom)) {
+                    if (&is_course_upload($file,$cnum,$cdom)) {
+                        my $cfile = &edit_course_upload($file,$cnum,$cdom);
+                        if ($cfile) {
+                            $editbutton=&switch
+                                        ('','',6,1,'pcstr.gif','edit[_1]',
+                                         'resource[_2]',"go('".$cfile."');",
+                                         'Edit this resource');
+                        }
+                    }
+                }
+            }
+        }
         ###
         ###
 # Prepare the rest of the buttons
@@ -593,7 +629,7 @@ sub innerregister {
                 $menuitems=(<<ENDMENUITEMS);
 s&6&1&list.gif&list[_1]&dir[_1]&golist('$esc_currdir')&List current directory
 s&6&2&rtrv.gif&retrieve[_1]&version[_1]&gocstr('/adm/retrieve','/~$uname/$cleandisfn')&Retrieve old version
-s&6&3&pub.gif&publish[_1]&resource[_1]&gocstr('/adm/publish','/~$uname/$cleandisfn')&Publish this resource
+s&6&3&pub.gif&publish[_1]&resource[_3]&gocstr('/adm/publish','/~$uname/$cleandisfn')&Publish this resource
 s&7&1&del.gif&delete[_1]&resource[_2]&gocstr('/adm/cfile?action=delete','/~$uname/$cleandisfn')&Delete this resource
 s&7&2&prt.gif&prepare[_1]&printout[_1]&gocstr('/adm/printout','/~$uname/$cleandisfn')&Prepare a printable document
 ENDMENUITEMS
@@ -626,7 +662,7 @@ $menuitems.="Make notes and annotations
             unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) {
 		if (!$env{'request.enc'}) {
 		    $menuitems.=(<<ENDREALRES);
-s&6&3&catalog.gif&catalog[_1]&info[_1]&catalog_info()&Show Metadata
+s&6&3&catalog.gif&catalog[_2]&info[_1]&catalog_info()&Show Metadata
 ENDREALRES
                 }
 	        $menuitems.=(<<ENDREALRES);
@@ -810,6 +846,42 @@ ENDDONOTREGTHIS
     return $result;
 }
 
+sub is_course_upload {
+    my ($file,$cnum,$cdom) = @_;
+    my $uploadpath = &LONCAPA::propath($cdom,$cnum);
+    $uploadpath =~ s{^\/}{};
+    if (($file =~ m{^\Q$uploadpath\E/userfiles/docs/}) ||
+        ($file =~ m{^userfiles/\Q$cdom\E/\Q$cnum\E/docs/})) {
+        return 1;
+    }
+    return;
+}
+
+sub edit_course_upload {
+    my ($file,$cnum,$cdom) = @_;
+    my $cfile;
+    if ($file =~/\.(htm|html|css|js|txt)$/) {
+        my $ext = $1;
+        my $url = &Apache::lonnet::hreflocation('',$file);
+        my $home = &Apache::lonnet::homeserver($cnum,$cdom);
+        my @ids=&Apache::lonnet::current_machine_ids();
+        my $dest;
+        if ($home && grep(/^\Q$home\E$/,@ids)) {
+            $dest = $url.'?forceedit=1';
+        } else {
+            unless (&Apache::lonnet::get_locks()) {
+                $dest = '/adm/switchserver?otherserver='.
+                        $home.'&role='.$env{'request.role'}.
+                        '&url='.$url.'&forceedit=1';
+            }
+        }
+        if ($dest) {
+            $cfile = &HTML::Entities::encode($dest,'"<>&');
+        }
+    }
+    return $cfile;
+}
+
 sub loadevents() {
     if ($env{'request.state'} eq 'construct' ||
 	$env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { return ''; }
@@ -1471,16 +1543,16 @@ function set_bookmark() {
    bmquery=window.open('','bmquery','width=365,height=165,scrollbars=0');
    bmquery.document.write(
    '$start_page_bookmark'
-   +"<center><form method='post'"
-   +" name='newlink' action='/adm/bookmarks' target='bmquery' "
-   +">\\n <table width=340 height=150 "
-   +"bgcolor='ffffff' align=center><tr><td>Link Name:<br /><input "
-   +"type='text' name='title' size=45 value='"+clienttitle+"' />"
-   +"<br />Address:<br /><input type='text' name='address' size='45' "
-   +"value='"+clienthref+"' /><br /><center><input type='submit' "
-   +"value='Save' /> <input type='button' value='Close' "
-   +"onclick='javascript:window.close();' /><\\/center><\\/td>"
-   +"<\\/tr><\\/table><\\/form><\\/center>"
+   +'<center><form method="post"'
+   +' name="newlink" action="/adm/bookmarks" target="bmquery" '
+   +'> <table width="340" height="150" '
+   +'bgcolor="#FFFFFF" align="center"><tr><td>Link Name:<br /><input '
+   +'type="text" name="title" size="45" value="'+clienttitle+'" />'
+   +'<br />Address:<br /><input type="text" name="address" size="45" '
+   +'value="'+clienthref+'" /><br /><center><input type="submit" '
+   +'value="Save" /> <input type="button" value="Close" '
+   +'onclick="javascript:window.close();" /></center></td>'
+   +'</tr></table></form></center>'
    +'$end_page_bookmark' );
    bmquery.document.close();
 }