ILIAS  release_4-4 Revision
class.ilFSStorageExercise.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7  | |
8  | This program is free software; you can redistribute it and/or |
9  | modify it under the terms of the GNU General Public License |
10  | as published by the Free Software Foundation; either version 2 |
11  | of the License, or (at your option) any later version. |
12  | |
13  | This program is distributed in the hope that it will be useful, |
14  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16  | GNU General Public License for more details. |
17  | |
18  | You should have received a copy of the GNU General Public License |
19  | along with this program; if not, write to the Free Software |
20  | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21  +-----------------------------------------------------------------------------+
22 */
23 
24 include_once('Services/FileSystem/classes/class.ilFileSystemStorage.php');
33 {
39  public function __construct($a_container_id = 0, $a_ass_id = 0)
40  {
41  $this->ass_id = $a_ass_id;
42  parent::__construct(self::STORAGE_DATA,true,$a_container_id);
43  }
44 
48  function init()
49  {
50  if (parent::init())
51  {
52  if ($this->ass_id > 0)
53  {
54  $this->submission_path = $this->path."/subm_".$this->ass_id;
55  $this->tmp_path = $this->path."/tmp_".$this->ass_id;
56  $this->feedb_path = $this->path."/feedb_".$this->ass_id;
57  $this->multi_feedback_upload_path = $this->path."/mfb_up_".$this->ass_id;
58  $this->path.= "/ass_".$this->ass_id;
59  }
60  }
61  else
62  {
63  return false;
64  }
65  return true;
66  }
67 
68 
75  protected function getPathPostfix()
76  {
77  return 'exc';
78  }
79 
86  protected function getPathPrefix()
87  {
88  return 'ilExercise';
89  }
90 
95  {
96  return $this->submission_path;
97  }
98 
102  function getTempPath()
103  {
104  return $this->tmp_path;
105  }
106 
110  function getFeedbackPath($a_user_id)
111  {
112  $path = $this->feedb_path."/".$a_user_id;
113  if(!file_exists($path))
114  {
116  }
117  return $path;
118  }
119 
121  {
122  $path = $this->feedb_path."/0";
123  if(!file_exists($path))
124  {
126  }
127  return $path;
128  }
129 
134  function getMultiFeedbackUploadPath($a_user_id)
135  {
136  $path = $this->multi_feedback_upload_path."/".$a_user_id;
137  if(!file_exists($path))
138  {
140  }
141  return $path;
142  }
143 
144 
151  public function create()
152  {
153  parent::create();
154  if(!file_exists($this->submission_path))
155  {
156  ilUtil::makeDirParents($this->submission_path);
157  }
158  if(!file_exists($this->tmp_path))
159  {
160  ilUtil::makeDirParents($this->tmp_path);
161  }
162  if(!file_exists($this->feedb_path))
163  {
164  ilUtil::makeDirParents($this->feedb_path);
165  }
166  return true;
167  }
168 
172  function getFiles()
173  {
174  $files = array();
175  if (!is_dir($this->path))
176  {
177  return $files;
178  }
179 
180  $dp = opendir($this->path);
181  while($file = readdir($dp))
182  {
183  if(!is_dir($this->path.'/'.$file))
184  {
185  $files[] = array(
186  'name' => $file,
187  'size' => filesize($this->path.'/'.$file),
188  'ctime' => ilFormat::formatDate(date('Y-m-d H:i:s',filectime($this->path.'/'.$file))),
189  'fullpath' => $this->path.'/'.$file);
190  }
191  }
192  closedir($dp);
193  $files = ilUtil::sortArray($files, "name", "asc");
194  return $files;
195  }
196 
197 
201 
209  function deliverFile($a_http_post_file, $user_id, $is_unziped = false)
210  {
211  $this->create();
212 
213  // TODO:
214  // CHECK UPLOAD LIMIT
215  //
216  $result = false;
217  if(isset($a_http_post_file) && $a_http_post_file['size'])
218  {
219  $filename = $a_http_post_file['name'];
220  // replace whitespaces with underscores
221  $filename = preg_replace("/\s/", "_", $filename);
222  // remove all special characters
223  $filename = preg_replace("/[^_a-zA-Z0-9\.]/", "", $filename);
224 
225  if(!is_dir($savepath = $this->getAbsoluteSubmissionPath()))
226  {
227  ilUtil::makeDir($savepath);
228  }
229  $savepath .= '/' .$user_id;
230  if(!is_dir($savepath))
231  {
232  ilUtil::makeDir($savepath);
233  }
234 
235  // CHECK IF FILE PATH EXISTS
236  if (!is_dir($savepath))
237  {
238  require_once "./Services/Utilities/classes/class.ilUtil.php";
239  #ilUtil::makeDirParents($savepath);
240  ilUtil::makeDir($savepath);
241  }
242  $now = getdate();
243  $prefix = sprintf("%04d%02d%02d%02d%02d%02d", $now["year"], $now["mon"], $now["mday"], $now["hours"],
244  $now["minutes"], $now["seconds"]);
245 
246  if (!$is_unziped)
247  {
248  //move_uploaded_file($a_http_post_file["tmp_name"], $savepath . $prefix . "_" . $filename);
249  ilUtil::moveUploadedFile($a_http_post_file["tmp_name"], $a_http_post_file["name"],
250  $savepath . "/" . $prefix . "_" . $filename);
251  }
252  else
253  {
254 
255  rename($a_http_post_file['tmp_name'],
256  $savepath . "/" . $prefix . "_" . $filename);
257  }
258 
259  require_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php";
260 
261  if (is_file($savepath . "/" . $prefix . "_" . $filename))
262  {
263  $result = array(
264  "filename" => $prefix . "_" . $filename,
265  "fullname" => $savepath . "/" . $prefix . "_" . $filename,
266  "mimetype" => ilObjMediaObject::getMimeType($savepath . "/" . $prefix . "_" . $filename)
267  );
268  }
269  }
270  return $result;
271  }
272 
276  function getFeedbackFiles($a_user_id)
277  {
278  $files = array();
279 
280  $dir = $this->getFeedbackPath($a_user_id);
281  if (@is_dir($dir))
282  {
283  $dp = opendir($dir);
284  while($file = readdir($dp))
285  {
286  if(!is_dir($this->path.'/'.$file) && substr($file, 0, 1) != ".")
287  {
288  $files[] = $file;
289  }
290  }
291  }
292 
293  return $files;
294  }
295 
299  function countFeedbackFiles($a_user_id)
300  {
301  $fbf = $this->getFeedbackFiles($a_user_id);
302  return count($fbf);
303  }
304 
308  function getAssignmentFilePath($a_file)
309  {
310  return $this->getAbsolutePath()."/".$a_file;
311  }
312 
316  function getFeedbackFilePath($a_user_id, $a_file)
317  {
318  $dir = $this->getFeedbackPath($a_user_id);
319  return $dir."/".$a_file;
320  }
321 
326  function uploadAssignmentFiles($a_files)
327  {
328  if (is_array($a_files["name"]))
329  {
330  foreach ($a_files["name"] as $k => $name)
331  {
332  if ($name != "")
333  {
334  $type = $a_files["type"][$k];
335  $tmp_name = $a_files["tmp_name"][$k];
336  $size = $a_files["size"][$k];
337  ilUtil::moveUploadedFile($tmp_name,
338  basename($name),
339  $this->path.DIRECTORY_SEPARATOR.basename($name),
340  false);
341  }
342  }
343  }
344  }
345 }
346 ?>
static makeDirParents($a_dir)
Create a new directory and all parent directories.
getAbsoluteSubmissionPath()
Get submission path.
init()
Append ass_<ass_id> to path (assignment id)
print $file
$size
Definition: RandomTest.php:79
__construct($a_container_id=0, $a_ass_id=0)
Constructor.
$result
getFeedbackFiles($a_user_id)
Get number of feedback files.
getTempPath()
Get submission path.
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static getMimeType($a_file)
get mime type for file
getAssignmentFilePath($a_file)
Get path for assignment file.
uploadAssignmentFiles($a_files)
Upload assignment files (e.g.
getFeedbackPath($a_user_id)
Get feedback path.
static moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
getFiles()
Get assignment files.
getAbsolutePath()
Get absolute path of storage directory.
$filename
Definition: buildRTE.php:89
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
formatDate($a_date, $a_mode="datetime", $a_omit_seconds=false, $a_relative=TRUE)
format a date according to the user language shortcut for Format::fmtDateTime public ...
getMultiFeedbackUploadPath($a_user_id)
Get multi feedback upload path (each uploader handled in a separate path)
deliverFile($a_http_post_file, $user_id, $is_unziped=false)
store delivered file in filesystem
countFeedbackFiles($a_user_id)
Count number of feedback files for a user.
getPathPostfix()
Implementation of abstract method.
getFeedbackFilePath($a_user_id, $a_file)
Get path for feedback file.
getPathPrefix()
Implementation of abstract method.