1: # Copyright Michigan State University Board of Trustees
2: #
3: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
4: #
5: # LON-CAPA is free software; you can redistribute it and/or modify
6: # it under the terms of the GNU General Public License as published by
7: # the Free Software Foundation; either version 2 of the License, or
8: # (at your option) any later version.
9: #
10: # LON-CAPA is distributed in the hope that it will be useful,
11: # but WITHOUT ANY WARRANTY; without even the implied warranty of
12: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: # GNU General Public License for more details.
14: #
15: # You should have received a copy of the GNU General Public License
16: # along with LON-CAPA; if not, write to the Free Software
17: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18: #
19: # /home/httpd/html/adm/gpl.txt
20: #
21:
22:
23: # http://www.lon-capa.org/
24: #
25:
26:
27: package Apache::portfolio;
28: use strict;
29: use Apache::Constants qw(:common :http);
30: use Apache::loncommon;
31: use Apache::lonnet;
32: use Apache::lontexconvert;
33: use Apache::lonfeedback;
34: use Apache::lonlocal;
35:
36: # receives a file name assumed to reside in username/userfiles/portfolio/
37: # returns a form consisting of a single submit button labeled with the filename
38: sub makeAnchor {
39: my ($fileName, $currentPath) = @_;
40: my $anchor = '<a href="/adm/portfolio?selectfile='.$fileName.'¤tpath='.$currentPath.'">'.$fileName.'</a>';
41: # my $button = '
42: # <form method="POST" action="/adm/portfolio">
43: # <input type="hidden" name="selectfile" value="'.$fileName.'">
44: # <input type="submit" value="'.$fileName.'" name="storeupl">
45: # </form>
46: # ';
47: return $anchor;
48: }
49:
50: # returns html with <br /> separated contents of the directory
51: # returns a <strong>currentFile</strong> (bolds the selected file/dir)
52: sub displayDirectory {
53: my ($currentPath, $currentFile, $isDir, @dirList,) = @_;
54: my $displayOut='';
55: my $fileName;
56: my $upPath;
57: if ($currentPath ne '/') {
58: $displayOut = 'Listing of '.$currentPath.'<br /><hr />'.
59: # provides the "up one directory level" function
60: # it means shortening the currentpath to the parent directory
61: $currentPath =~ m:(^/.*)(/.*/$ ):;
62: if ($1 ne '/') {
63: $upPath = $1.'/';
64: } else {
65: $upPath = $1;
66: }
67:
68: $displayOut = $displayOut.'<a href="/adm/portfolio?selectfile=updir¤tpath='.$upPath.'">..</a><br />';
69: } else {
70: $displayOut = $displayOut.'at root '.$currentPath.'<br />';
71: }
72: while ($fileName = shift @dirList) {
73: if (($fileName ne './') && ($fileName ne '../')) {
74: if ($fileName =~ m:/$:) {
75: # handle directories different from files
76: if ($fileName eq $currentFile) {
77: #checks to bold the selected file
78: $displayOut = $displayOut.'<strong>'.(&makeAnchor($fileName, $currentPath.$fileName).'</strong><br />');
79: } else {
80: $displayOut = $displayOut.(&makeAnchor($fileName, $currentPath.$fileName).'<br />');
81: }
82: } else {
83: if ($fileName eq $currentFile) {
84: #checks to bold the selected file
85: $displayOut = $displayOut.'<strong>'.(&makeAnchor($fileName, $currentPath).'</strong><br />');
86: } else {
87: $displayOut = $displayOut.(&makeAnchor($fileName, $currentPath).'<br />');
88: }
89: }
90: }
91: }
92: #$displayOut = $displayOut.
93: return $displayOut;
94: }
95:
96: # returns html to offer user appropriate actions depending on selected
97: # file/directory
98: sub displayActions {
99: my $displayOut;
100: my ($currentPath, $currentFile, $isDir, $isFile) = @_;
101: # $displayOut = 'here are actions for '.$currentFile;
102: if ($isDir){
103: $displayOut = 'Directory';
104: }
105: if ($isFile){
106: $displayOut = 'File';
107: }
108:
109: $displayOut = $displayOut.'<form method="POST">
110: <input type="hidden" name="selectfile"
111: value="'.$currentFile.'">
112: <input type="hidden" name="fileaction" value="delete">
113: <center>
114: <input type="submit"
115:
116: value="Delete '.$currentFile.'">
117: </center>
118: </form>
119: <hr />
120: <form method="POST">
121: <input type="hidden" name="selectfile"
122: value="'.$currentFile.'">
123: <input type="hidden" name="fileaction" value="rename">
124: <input type="input" name="filenewname" value="Type new name here">
125: <input type="submit"
126: value="Rename '.$currentFile.'">
127: </form>
128: <hr>';
129: $displayOut = $displayOut.'<hr>Add a file to your portfolio';
130: # file upload form
131: $displayOut = $displayOut.'<form method="post" enctype="multipart/form-data">';
132: $displayOut = $displayOut.'<input name="uploaddoc" type="file">'.
133: '<input type="hidden" name="currentpath" value="'.$currentPath.'">'.
134: '<input type="submit" name="storeupl" value="Upload">'.
135: '</form><hr>';
136: $displayOut = $displayOut.'<form method="POST">
137: <input name="subdir" type="text" >
138: <input type="submit" value="Create Subdirectory">
139: </form>
140: ';
141: return $displayOut;
142: }
143:
144: sub handler {
145: # this handles file management
146: my ($r)=@_;
147: my @dirList; # will hold directory listing as array
148: my $udir; # returned from home server
149: my $currentPath; # path assuming /userfiles/portfolio/ as root
150: my $currentFile; # directory or file contained in $pathToRoot.$currentPath
151: my $action; # delete, rename, makedirectory, removedirectory,
152: my $filenewname; # for rename action (guess what we do with it!)
153: my $isFile;
154: my $isDir;
155: # send header
156: $r->content_type('text/html');
157: $r->send_http_header;
158: $r->print('<html><head><title>'.
159: 'Portfolio Management'.
160: "</title></head>\n");
161:
162: $r->print('
163: <body bgcolor="dogfood">
164: <blockquote>');
165: #grab stuff that was sent
166: &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
167: ['selectfile','currentpath',
168: 'currentfile']);
169: $r->print ('<br />CP= '.$ENV{'form.currentpath'}.'<br />');
170: # currentPath and currentFile need to be set for the rest of things to happen
171: # sometimes, currentFile will be passed by a form field, selectedfile
172: # if there is no 'form.selectedfile' then the current directory is
173: # considered as selected
174: if ($ENV{'form.currentpath'}) {
175: $currentPath = $ENV{'form.currentpath'};
176: } else {
177: $currentPath = '/';
178: }
179: if ($ENV{'form.selectfile'}) {
180: $r->print('<br />found selectfile'.$ENV{'form.selectfile'} .'<br />');
181: # have to check if the selected file is a subdirectory
182: if ($ENV{'form.selectfile'} =~ /-\(Dir\)/) {
183: # $currentPath =~ /\-\(Dir\)/;
184: $currentPath = $`.'/';
185: $r->print('<br />'.$currentPath.'<br />');
186: }
187: $currentFile = $ENV{'form.selectfile'};
188: } else {
189: $currentFile = '';
190: }
191: # if we're uploading a file, we need to do it early so it will show in the directory list
192: if ($ENV{'form.uploaddoc.filename'}) {
193: $r->print($ENV{'form.storeupl'}.'<br />');
194: $r->print(&Apache::lonnet::userfileupload('uploaddoc','','portfolio'.$currentPath).'<br />');
195: }
196: # similarly, we need to delete or rename files before getting directory list
197: if ($ENV{'form.selectfile'}) {
198: if ($ENV{'form.fileaction'} eq 'delete') {
199: &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'delete', undef );
200: $currentFile = '';
201: } elsif($ENV{'form.fileaction'} eq 'rename') {
202: &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'rename', $ENV{'form.filenewname'} );
203: # $r->print('We will rename your file');
204: }
205: }
206: # we always need $dirList, plus this will return information about the current file
207: # as well as information about he home server directory structure, specifically
208: # the path to the users userfiles directory.
209: @dirList = split /<br\s\/>/, (&Apache::lonnet::portfoliolist($currentPath, $currentFile));
210: # portfoliolist returns isdir, isfile and udir as the final array elements
211: # we'll pop them off the bottom of the array, and put them where they belong
212:
213: # $londcall added to help debug
214: my $londcall = pop(@dirList);
215: $r->print('<br />udir '.$londcall.'<br />');
216: $udir = pop(@dirList);
217: $r->print('<br />path returned '.$udir.'<br />');
218: $isFile = pop(@dirList);
219: # $r->print('<br />isfile '.$isFile.'<br />');
220: $isDir = pop(@dirList);
221: # $r->print('<br />isdir '.$isDir.'<br />');
222: # return OK if $r->header_only;
223: # Stuff to maintain proper setting for selected file
224: if ($ENV{'form.selectfile'}) {
225: if ($ENV{'form.fileaction'} eq 'delete') {
226: &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'delete', undef );
227: $ENV{'portfolio.file'} = 'Selected File Deleted';
228: } elsif($ENV{'form.fileaction'} eq 'rename') {
229: &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'rename', $ENV{'form.filenewname'} );
230: # $r->print('We will rename your file');
231: } else {
232:
233: # Remember user's file selection for later
234: $ENV{'portfolio.file'} = $ENV{'form.selectfile'};
235: # offer things user can do with selected file
236: }
237: } else {
238: unless ($ENV{'portfolio.file'}) {
239: $ENV{'portfolio.file'} = 'No File Selected';
240: }
241: }
242: ##############################
243: #
244: # Display begins here
245: #
246: ##############################
247: $r->print('<hr /> start ');
248: $r->print($udir);
249: $r->print('<table border=1><tr><td>');
250: $r->print(&displayDirectory($currentPath, $currentFile, $isDir, @dirList));
251: $r->print('</td>><td>');
252: $r->print(&displayActions($currentPath, $currentFile, $isDir, $isFile));
253: $r->print('</td>></tr></table>');
254: $r->print('<br />end display<br /><hr />');
255: $r->print('</blockquote></body>');
256: return OK;
257: }
258:
259: 1;
260: __END__
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>