--- loncom/publisher/lonupload.pm 2001/04/05 19:35:15 1.1 +++ loncom/publisher/lonupload.pm 2001/04/10 01:57:28 1.2 @@ -15,7 +15,7 @@ # # 03/31,04/03 Gerd Kortemeyer) # -# 04/05 Gerd Kortemeyer +# 04/05,04/09 Gerd Kortemeyer package Apache::lonupload; @@ -24,94 +24,67 @@ use Apache::File; use File::Copy; use Apache::Constants qw(:common :http :methods); -sub phaseone { - my ($r,$fn,$uname,$udom)=@_; - my $docroot=$r->dir_config('lonDocRoot'); - - my $urldir='/res/'.$udom.'/'.$uname.$fn; - $urldir=~s/\/[^\/]+$/\//; - my $resfn=$docroot.'/res/'.$udom.'/'.$uname.$fn; - my $resdir=$resfn; - $resdir=~s/\/[^\/]+$/\//; - - $fn=~/^\/(.+)\.(\w+)$/; - my $main=$1; - my $suffix=$2; +sub upfile_store { + my $r=shift; + + my $fname=$ENV{'form.upfile.filename'}; + $fname=~s/\W//g; + + chop($ENV{'form.upfile'}); - $r->print('
'. - ''. - ''. - ''. - ''. - ''); - my $filename; - opendir(DIR,$resdir); - while ($filename=readdir(DIR)) { - if ($filename=~/^$main\.(\d+)\.$suffix$/) { - my $version=$1; - my ($rdev,$rino,$rmode,$rnlink, - $ruid,$rgid,$rrdev,$rsize, - $ratime,$rmtime,$rctime, - $rblksize,$rblocks)=stat($resdir.'/'.$filename); - $r->print(''); - } + my $datatoken=$ENV{'user.name'}.'_'.$ENV{'user.domain'}. + '_upload_'.$fname.'_'.time.'_'.$$; + { + my $fh=Apache::File->new('>'.$r->dir_config('lonDaemons'). + '/tmp/'.$datatoken.'.tmp'); + print $fh $ENV{'form.upfile'}; } - closedir(DIR); - my ($rdev,$rino,$rmode,$rnlink, - $ruid,$rgid,$rrdev,$rsize, - $ratime,$rmtime,$rctime, - $rblksize,$rblocks)=stat($resfn); - $r->print(''. - '
SelectVersionBecame this version on ...Metadata
'.$version.''. - localtime($rmtime).''. - ''. - 'Metadata Version '.$version.'
Current'.localtime($rmtime). - ''. - 'Metadata current version

'. - 'Retrieval of an old version will '. - 'overwrite the file currently in construction space

'. - '

'); + return $datatoken; +} + + +sub phaseone { + my ($r,$fn,$uname,$udom)=@_; + $fn=~s/\/[^\/]+$//; + $fn=~s/([^\/])$/$1\//; + $fn.=$ENV{'form.upfile.filename'}; + $r->print( + '
'. + ''. + ''. + 'Store uploaded file as '. + '
'. + '
'); } sub phasetwo { my ($r,$fn,$uname,$udom)=@_; - if ($ENV{'form.version'}) { - my $version=$ENV{'form.version'}; - if ($version eq 'new') { - $r->print('

Retrieving current (most recent) version

'); - } else { - $r->print('

Retrieving old version '.$version.'

'); - } - my $logfile; - my $ctarget='/home/'.$uname.'/public_html'.$fn; - my $vfn=$fn; - if ($version ne 'new') { - $vfn=~s/\.(\w+)$/\.$version\.$1/; - } - my $csource=$r->dir_config('lonDocRoot').'/res/'.$udom.'/'.$uname.$vfn; - unless ($logfile=Apache::File->new('>>'.$ctarget.'.log')) { - $r->print( - 'No write permission to user directory, FAIL'); - } - print $logfile -"\n\n================= Retrieve ".localtime()." ================\n". -"Version: $version\nSource: $csource\nTarget: $ctarget\n"; - $r->print('

Copying file: '); - if (copy($csource,$ctarget)) { - $r->print('ok

'); - print $logfile "Copied sucessfully.\n\n"; - } else { - my $error=$!; - $r->print('fail, '.$error.'

'); - print $logfile "Copy failed: $error\n\n"; - } - $r->print('Back to '.$fn.''); + my $target='/home/'.$uname.'/public_html'.$fn; + my $datatoken=$ENV{'form.datatoken'}; + if (($fn) && ($datatoken)) { + if ((-e $target) && ($ENV{'form.override'} ne 'Yes')) { + $r->print( + '

'. + 'File '.$fn.' exists. Overwrite? '. + ''. + ''. + ''. + '
'); + } else { + my $source=$r->dir_config('lonDaemons'). + '/tmp/'.$datatoken.'.tmp'; + if (copy($source,$target)) { + $r->print('File copied.'); + $r->print('

View file'); + } else { + $r->print('Failed to copy: '.$!); + } + } } else { $r->print( - 'Please pick a version to retrieve

'); + 'Please pick a filename

'); &phaseone($r,$fn,$uname,$udom); } } @@ -127,16 +100,10 @@ sub handler { $fn=~s/^http\:\/\/[^\/]+\/\~(\w+)//; } else { $r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}. - ' unspecified filename for retrieval', $r->filename); + ' unspecified filename for upload', $r->filename); return HTTP_NOT_FOUND; } - unless ($fn) { - $r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}. - ' trying to retrieve non-existing file', $r->filename); - return HTTP_NOT_FOUND; - } - # ----------------------------------------------------------- Start page output my $uname=$ENV{'user.name'}; @@ -151,7 +118,7 @@ sub handler { ''); - $r->print('

Retrieve previous versions of '.$fn.'

'); + $r->print('

Upload file to Construction Space

'); if ($ENV{'form.phase'} eq 'two') { &phasetwo($r,$fn,$uname,$udom);