ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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->peer_review_upload_path = $this->path."/peer_up_".$this->ass_id;
59  $this->path.= "/ass_".$this->ass_id;
60  }
61  }
62  else
63  {
64  return false;
65  }
66  return true;
67  }
68 
69 
76  protected function getPathPostfix()
77  {
78  return 'exc';
79  }
80 
87  protected function getPathPrefix()
88  {
89  return 'ilExercise';
90  }
91 
96  {
97  return $this->submission_path;
98  }
99 
103  function getTempPath()
104  {
105  return $this->tmp_path;
106  }
107 
111  function getFeedbackPath($a_user_id)
112  {
113  $path = $this->feedb_path."/".$a_user_id;
114  if(!file_exists($path))
115  {
117  }
118  return $path;
119  }
120 
122  {
123  $path = $this->feedb_path."/0";
124  if(!file_exists($path))
125  {
127  }
128  return $path;
129  }
130 
135  function getMultiFeedbackUploadPath($a_user_id)
136  {
137  $path = $this->multi_feedback_upload_path."/".$a_user_id;
138  if(!file_exists($path))
139  {
141  }
142  return $path;
143  }
144 
149  function getPeerReviewUploadPath($a_peer_id, $a_giver_id, $a_crit_id)
150  {
151  $path = $this->peer_review_upload_path."/".$a_peer_id."/".$a_giver_id."/";
152 
153  if((int)$a_crit_id)
154  {
155  $path .= (int)$a_crit_id."/";
156  }
157  if(!file_exists($path))
158  {
160  }
161  return $path;
162  }
163 
170  public function create()
171  {
172  parent::create();
173  if(!file_exists($this->submission_path))
174  {
175  ilUtil::makeDirParents($this->submission_path);
176  }
177  if(!file_exists($this->tmp_path))
178  {
179  ilUtil::makeDirParents($this->tmp_path);
180  }
181  if(!file_exists($this->feedb_path))
182  {
183  ilUtil::makeDirParents($this->feedb_path);
184  }
185  return true;
186  }
187 
191  function getFiles()
192  {
193  $files = array();
194  if (!is_dir($this->path))
195  {
196  return $files;
197  }
198 
199  $dp = opendir($this->path);
200  while($file = readdir($dp))
201  {
202  if(!is_dir($this->path.'/'.$file))
203  {
204  $files[] = array(
205  'name' => $file,
206  'size' => filesize($this->path.'/'.$file),
207  'ctime' => filectime($this->path.'/'.$file),
208  'fullpath' => $this->path.'/'.$file);
209  }
210  }
211  closedir($dp);
212  $files = ilUtil::sortArray($files, "name", "asc");
213  return $files;
214  }
215 
216 
220 
228  function uploadFile($a_http_post_file, $user_id, $is_unziped = false)
229  {
230  $this->create();
231 
232  // TODO:
233  // CHECK UPLOAD LIMIT
234 
235 
236  //
237  $result = false;
238  if(isset($a_http_post_file) && $a_http_post_file['size'])
239  {
240  $filename = $a_http_post_file['name'];
241 
242  include_once("./Services/Utilities/classes/class.ilFileUtils.php");
244 
245  // replace whitespaces with underscores
246  $filename = preg_replace("/\s/", "_", $filename);
247  // remove all special characters
248  $filename = preg_replace("/[^_a-zA-Z0-9\.]/", "", $filename);
249 
250  if(!is_dir($savepath = $this->getAbsoluteSubmissionPath()))
251  {
252  ilUtil::makeDir($savepath);
253  }
254  $savepath .= '/' .$user_id;
255  if(!is_dir($savepath))
256  {
257  ilUtil::makeDir($savepath);
258  }
259 
260  // CHECK IF FILE PATH EXISTS
261  if (!is_dir($savepath))
262  {
263  ilUtil::makeDir($savepath);
264  }
265  $now = getdate();
266  $prefix = sprintf("%04d%02d%02d%02d%02d%02d", $now["year"], $now["mon"], $now["mday"], $now["hours"],
267  $now["minutes"], $now["seconds"]);
268 
269  if (!$is_unziped)
270  {
271  ilUtil::moveUploadedFile($a_http_post_file["tmp_name"], $a_http_post_file["name"],
272  $savepath . "/" . $prefix . "_" . $filename);
273  }
274  else
275  {
276 
277  rename($a_http_post_file['tmp_name'],
278  $savepath . "/" . $prefix . "_" . $filename);
279  }
280 
281  require_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php";
282 
283  if (is_file($savepath . "/" . $prefix . "_" . $filename))
284  {
285  $result = array(
286  "filename" => $prefix . "_" . $filename,
287  "fullname" => $savepath . "/" . $prefix . "_" . $filename,
288  "mimetype" => ilObjMediaObject::getMimeType($savepath . "/" . $prefix . "_" . $filename)
289  );
290  }
291  }
292  return $result;
293  }
294 
298  function getFeedbackFiles($a_user_id)
299  {
300  $files = array();
301 
302  $dir = $this->getFeedbackPath($a_user_id);
303  if (@is_dir($dir))
304  {
305  $dp = opendir($dir);
306  while($file = readdir($dp))
307  {
308  if(!is_dir($this->path.'/'.$file) && substr($file, 0, 1) != ".")
309  {
310  $files[] = $file;
311  }
312  }
313  }
314 
315  return $files;
316  }
317 
321  function countFeedbackFiles($a_user_id)
322  {
323  $fbf = $this->getFeedbackFiles($a_user_id);
324  return count($fbf);
325  }
326 
330  function getAssignmentFilePath($a_file)
331  {
332  return $this->getAbsolutePath()."/".$a_file;
333  }
334 
338  function getFeedbackFilePath($a_user_id, $a_file)
339  {
340  $dir = $this->getFeedbackPath($a_user_id);
341  return $dir."/".$a_file;
342  }
343 
348  function uploadAssignmentFiles($a_files)
349  {
350  if (is_array($a_files["name"]))
351  {
352  foreach ($a_files["name"] as $k => $name)
353  {
354  if ($name != "")
355  {
356  $type = $a_files["type"][$k];
357  $tmp_name = $a_files["tmp_name"][$k];
358  $size = $a_files["size"][$k];
359  ilUtil::moveUploadedFile($tmp_name,
360  basename($name),
361  $this->path.DIRECTORY_SEPARATOR.basename($name),
362  false);
363  }
364  }
365  }
366  }
367 }
368 ?>
$files
Definition: add-vimline.php:18
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)
$size
Definition: RandomTest.php:79
uploadFile($a_http_post_file, $user_id, $is_unziped=false)
store delivered file in filesystem
__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
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.
getPeerReviewUploadPath($a_peer_id, $a_giver_id, $a_crit_id)
Get pear review upload path (each peer handled in a separate path)
Create styles array
The data for the language used.
getAbsolutePath()
Get absolute path of storage directory.
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
static getMimeType($a_file, $a_external=false)
get mime type for file
getMultiFeedbackUploadPath($a_user_id)
Get multi feedback upload path (each uploader handled in a separate path)
countFeedbackFiles($a_user_id)
Count number of feedback files for a user.
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
getPathPostfix()
Implementation of abstract method.
static getValidFilename($a_filename)
Get valid filename.
getFeedbackFilePath($a_user_id, $a_file)
Get path for feedback file.
getPathPrefix()
Implementation of abstract method.