--- loncom/lonnet/perl/lonnet.pm	2004/08/24 06:43:21	1.530
+++ loncom/lonnet/perl/lonnet.pm	2004/08/27 21:09:22	1.534
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # TCP networking package
 #
-# $Id: lonnet.pm,v 1.530 2004/08/24 06:43:21 albertel Exp $
+# $Id: lonnet.pm,v 1.534 2004/08/27 21:09:22 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1047,6 +1047,7 @@ sub currentversion {
 sub subscribe {
     my $fname=shift;
     if ($fname=~/\/(aboutme|syllabus|bulletinboard|smppg)$/) { return ''; }
+    $fname=~s/[\n\r]//g;
     my $author=$fname;
     $author=~s/\/home\/httpd\/html\/res\/([^\/]*)\/([^\/]*).*/$1\/$2/;
     my ($udom,$uname)=split(/\//,$author);
@@ -1067,6 +1068,7 @@ sub repcopy {
     my $filename=shift;
     $filename=~s/\/+/\//g;
     if ($filename=~/^\/home\/httpd\/html\/adm\//) { return OK; }
+    $filename=~s/[\n\r]//g;
     my $transname="$filename.in.transfer";
     if ((-e $filename) || (-e $transname)) { return OK; }
     my $remoteurl=subscribe($filename);
@@ -1267,10 +1269,8 @@ sub process_coursefile {
 # input: name of form element, coursedoc=1 means this is for the course
 # output: url of file in userspace
 
-sub userfileupload {
-    my ($formname,$coursedoc,$subdir)=@_;
-    if (!defined($subdir)) { $subdir='unknown'; }
-    my $fname=$ENV{'form.'.$formname.'.filename'};
+sub clean_filename {
+    my ($fname)=@_;
 # Replace Windows backslashes by forward slashes
     $fname=~s/\\/\//g;
 # Get rid of everything but the actual filename
@@ -1279,6 +1279,14 @@ sub userfileupload {
     $fname=~s/\s+/\_/g;
 # Replace all other weird characters by nothing
     $fname=~s/[^\w\.\-]//g;
+    return $fname;
+}
+
+sub userfileupload {
+    my ($formname,$coursedoc,$subdir)=@_;
+    if (!defined($subdir)) { $subdir='unknown'; }
+    my $fname=$ENV{'form.'.$formname.'.filename'};
+    $fname=&clean_filename($fname);
 # See if there is anything left
     unless ($fname) { return 'error: no uploaded file'; }
     chop($ENV{'form.'.$formname});
@@ -1378,6 +1386,13 @@ sub mkdiruserfile {
     return &reply("mkdiruserfile:".&escape("$docudom/$docuname/$dir"),$home);
 }
 
+sub renameuserfile {
+    my ($docuname,$docudom,$old,$new)=@_;
+    my $home=&homeserver($docuname,$docudom);
+    return &reply("renameuserfile:$docudom:$docuname:".&escape("$old").':'.
+		  &escape("$new"),$home);
+}
+
 # ------------------------------------------------------------------------- Log
 
 sub log {
@@ -3664,38 +3679,11 @@ sub revokecustomrole {
            $deleteflag);
 }
 
-
-# ------------------------------------------------------------ Portfolio Director Lister
-# returns listing of contents of user's /userfiles/portfolio/ directory
-# 
-
-sub portfoliolist {
-    my ($currentPath, $currentFile) = @_;
-    my ($udom, $uname, $portfolioRoot);
-    $uname=$ENV{'user.name'};
-    $udom=$ENV{'user.domain'};
-    # really should interrogate the system for home directory information, but . . .
-    $portfolioRoot = '/home/httpd/lonUsers/'.$udom.'/';
-    $uname =~ /^(.?)(.?)(.?)/;
-    $portfolioRoot = $portfolioRoot.$1.'/'.$2.'/'.$3.'/'.$uname.'/userfiles/portfolio';
-    my $listing = &reply('ls:'.$portfolioRoot.$currentPath, &homeserver($uname,$udom));
-    return $listing;
-}
-
-sub portfoliomanage {
-
-#FIXME please user the existing remove userfile function instead and
-#add a userfilerename functions.
-#FIXME uhome should never be an argument to any lonnet functions
-
-    # handles deleting and renaming files in user's userfiles/portfolio/ directory
-    # 
-    my ($filename, $fileaction, $filenewname) = @_;
-    my ($udom, $uname, $uhome);
-    $uname=$ENV{'user.name'};
-    $udom=$ENV{'user.domain'};
-    $uhome=$ENV{'user.home'};
-    my $listing = reply('portfoliomanage:'.$uname.':'.$udom.':'.$filename.':'.$fileaction.':'.$filenewname, $uhome);
+# ------------------------------------------------------------ Disk usage
+sub diskusage{
+    my ($udom,$uname,$directoryRoot)=@_;
+    $directoryRoot =~ s/\/$//;
+    my $listing=reply('du:'.$directoryRoot,homeserver($uname,$udom))
     return $listing;
 }
 
@@ -4451,27 +4439,27 @@ sub metadata_generate_part0 {
 sub gettitle {
     my $urlsymb=shift;
     my $symb=&symbread($urlsymb);
-    unless ($symb) {
-	unless ($urlsymb) { $urlsymb=$ENV{'request.filename'}; }
-        return &metadata($urlsymb,'title'); 
-    }
-    my ($result,$cached)=&is_cached(\%titlecache,$symb,'title',600);
-    if (defined($cached)) { return $result; }
-    my ($map,$resid,$url)=&decode_symb($symb);
-    my $title='';
-    my %bighash;
-    if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',
-                            &GDBM_READER(),0640)) {
-        my $mapid=$bighash{'map_pc_'.&clutter($map)};
-        $title=$bighash{'title_'.$mapid.'.'.$resid};
-        untie %bighash;
-    }
-    $title=~s/\&colon\;/\:/gs;
-    if ($title) {
-        return &do_cache(\%titlecache,$symb,$title,'title');
-    } else {
-	return &metadata($urlsymb,'title');
-    }
+    if ($symb) {
+	my ($result,$cached)=&is_cached(\%titlecache,$symb,'title',600);
+	if (defined($cached)) { return $result; }
+	my ($map,$resid,$url)=&decode_symb($symb);
+	my $title='';
+	my %bighash;
+	if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',
+		&GDBM_READER(),0640)) {
+	    my $mapid=$bighash{'map_pc_'.&clutter($map)};
+	    $title=$bighash{'title_'.$mapid.'.'.$resid};
+	    untie %bighash;
+	}
+	$title=~s/\&colon\;/\:/gs;
+	if ($title) {
+	    return &do_cache(\%titlecache,$symb,$title,'title');
+	}
+	$urlsymb=$url;
+    }
+    my $title=&metadata($urlsymb,'title');
+    if (!$title) { $title=(split('/',$urlsymb))[-1]; }    
+    return $title;
 }
     
 # ------------------------------------------------- Update symbolic store links