ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilFileDataForum.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once("./Services/FileSystem/classes/class.ilFileData.php");
5require_once("./Services/Utilities/classes/class.ilFileUtils.php");
6
16{
24
31
39 public function __construct($a_obj_id = 0,$a_pos_id = 0)
40 {
41 define('FORUM_PATH', 'forum');
42 parent::__construct();
43 $this->forum_path = parent::getPath()."/".FORUM_PATH;
44
45 // IF DIRECTORY ISN'T CREATED CREATE IT
46 if(!$this->__checkPath())
47 {
48 $this->__initDirectory();
49 }
50 $this->obj_id = $a_obj_id;
51 $this->pos_id = $a_pos_id;
52 }
53
54 function getObjId()
55 {
56 return $this->obj_id;
57 }
58 function getPosId()
59 {
60 return $this->pos_id;
61 }
62 function setPosId($a_id)
63 {
64 $this->pos_id = $a_id;
65 }
71 function getForumPath()
72 {
73 return $this->forum_path;
74 }
75
79 public function getFiles()
80 {
81 $files = array();
82
83 foreach(new DirectoryIterator($this->forum_path) as $file)
84 {
89 if($file->isDir())
90 {
91 continue;
92 }
93
94 list($obj_id, $rest) = explode('_', $file->getFilename(), 2);
95 if($obj_id == $this->obj_id)
96 {
97 $files[] = array(
98 'path' => $file->getPathname(),
99 'md5' => md5($this->obj_id . '_' . $this->pos_id . '_' . $rest),
100 'name' => $rest,
101 'size' => $file->getSize(),
102 'ctime' => ilFormat::formatDate(date('Y-m-d H:i:s', $file->getCTime()))
103 );
104 }
105 }
106
107 return $files;
108 }
109
113 public function getFilesOfPost()
114 {
115 $files = array();
116
117 foreach(new DirectoryIterator($this->forum_path) as $file)
118 {
123 if($file->isDir())
124 {
125 continue;
126 }
127
128 list($obj_id, $rest) = explode('_', $file->getFilename(), 2);
129 if($obj_id == $this->obj_id)
130 {
131 list($pos_id, $rest) = explode('_', $rest, 2);
132 if($pos_id == $this->getPosId())
133 {
134 $files[] = array(
135 'path' => $file->getPathname(),
136 'md5' => md5($this->obj_id . '_' . $this->pos_id . '_' . $rest),
137 'name' => $rest,
138 'size' => $file->getSize(),
139 'ctime' => ilFormat::formatDate(date('Y-m-d H:i:s', $file->getCTime()))
140 );
141 }
142 }
143 }
144
145 return $files;
146 }
147
152 public function moveFilesOfPost($a_new_frm_id = 0)
153 {
154 if((int)$a_new_frm_id)
155 {
156 foreach(new DirectoryIterator($this->forum_path) as $file)
157 {
162 if($file->isDir())
163 {
164 continue;
165 }
166
167 list($obj_id, $rest) = explode('_', $file->getFilename(), 2);
168 if($obj_id == $this->obj_id)
169 {
170 list($pos_id, $rest) = explode('_', $rest, 2);
171 if($pos_id == $this->getPosId())
172 {
174 $file->getPathname(),
175 $this->forum_path . '/' . $a_new_frm_id . '_' . $this->pos_id . '_' . $rest
176 );
177 }
178 }
179 }
180
181 return true;
182 }
183
184 return false;
185 }
186
187 function ilClone($a_new_obj_id,$a_new_pos_id)
188 {
189 foreach($this->getFilesOfPost() as $file)
190 {
191 @copy($this->getForumPath()."/".$this->obj_id."_".$this->pos_id."_".$file["name"],
192 $this->getForumPath()."/".$a_new_obj_id."_".$a_new_pos_id."_".$file["name"]);
193 }
194 return true;
195 }
196 function delete()
197 {
198 foreach($this->getFiles() as $file)
199 {
200 if(file_exists($this->getForumPath()."/".$this->getObjId()."_".$file["name"]))
201 {
202 unlink($this->getForumPath()."/".$this->getObjId()."_".$file["name"]);
203 }
204 }
205 return true;
206 }
207
217 function storeUploadedFile($files)
218 {
219 if(isset($files['name']) && is_array($files['name']))
220 {
221 foreach($files['name'] as $index => $name)
222 {
223 // remove trailing '/'
224 while(substr($name, -1) == '/')
225 {
226 $name = substr($name, 0, -1);
227 }
229 $temp_name = $files['tmp_name'][$index];
230 $error = $files['error'][$index];
231
232 if(strlen($filename) && strlen($temp_name) && $error == 0)
233 {
234 $path = $this->getForumPath().'/'.$this->obj_id.'_'.$this->pos_id.'_'.$filename;
235
236 $this->__rotateFiles($path);
238 }
239 }
240
241 return true;
242 }
243 else if(isset($files['name']) && is_string($files['name']))
244 {
245 // remove trailing '/'
246 while(substr($files['name'], -1) == '/')
247 {
248 $files['name'] = substr($files['name'], 0, -1);
249 }
250 $filename = ilUtil::_sanitizeFilemame($files['name']);
251 $temp_name = $files['tmp_name'];
252
253 $path = $this->getForumPath().'/'.$this->obj_id.'_'.$this->pos_id.'_'.$filename;
254
255 $this->__rotateFiles($path);
257
258 return true;
259 }
260
261 return false;
262 }
269 function unlinkFiles($a_filenames)
270 {
271 if(is_array($a_filenames))
272 {
273 foreach($a_filenames as $file)
274 {
275 if(!$this->unlinkFile($file))
276 {
277 return $file;
278 }
279 }
280 }
281 return '';
282 }
289 function unlinkFile($a_filename)
290 {
291 if(file_exists($this->forum_path.'/'.$this->obj_id.'_'.$this->pos_id.'_'.$a_filename))
292 {
293 return unlink($this->forum_path.'/'.$this->obj_id.'_'.$this->pos_id."_".$a_filename);
294 }
295 }
302 function getAbsolutePath($a_path)
303 {
304 return $this->forum_path.'/'.$this->obj_id.'_'.$this->pos_id."_".$a_path;
305 }
306
313 public function getFileDataByMD5Filename($a_md5_filename)
314 {
315 $files = ilUtil::getDir( $this->forum_path );
316 foreach((array)$files as $file)
317 {
318 if($file['type'] == 'file' && md5($file['entry']) == $a_md5_filename)
319 {
320 return array(
321 'path' => $this->forum_path.'/'.$file['entry'],
322 'filename' => $file['entry'],
323 'clean_filename' => str_replace($this->obj_id.'_'.$this->pos_id.'_', '', $file['entry'])
324 );
325 }
326 }
327
328 return false;
329 }
330
337 function unlinkFilesByMD5Filenames($a_md5_filename)
338 {
339 $files = ilUtil::getDir( $this->forum_path );
340 if(is_array($a_md5_filename))
341 {
342 foreach((array)$files as $file)
343 {
344 if($file['type'] == 'file' && in_array(md5($file['entry']), $a_md5_filename))
345 {
346 unlink( $this->forum_path.'/'.$file['entry'] );
347 }
348 }
349
350 return true;
351 }
352 else
353 {
354 foreach((array)$files as $file)
355 {
356 if($file['type'] == 'file' && md5($file['entry']) == $a_md5_filename)
357 {
358 return unlink( $this->forum_path.'/'.$file['entry'] );
359 }
360 }
361 }
362
363 return false;
364 }
365
372 function checkFilesExist($a_files)
373 {
374 if($a_files)
375 {
376 foreach($a_files as $file)
377 {
378 if(!file_exists($this->forum_path.'/'.$this->obj_id.'_'.$this->pos_id.'_'.$file))
379 {
380 return false;
381 }
382 }
383 return true;
384 }
385 return true;
386 }
387
388 // PRIVATE METHODS
389 function __checkPath()
390 {
391 if(!@file_exists($this->getForumPath()))
392 {
393 return false;
394 }
395 $this->__checkReadWrite();
396
397 return true;
398 }
406 {
407 if(is_writable($this->forum_path) && is_readable($this->forum_path))
408 {
409 return true;
410 }
411 else
412 {
413 $this->ilias->raiseError("Forum directory is not readable/writable by webserver",$this->ilias->error_obj->FATAL);
414 }
415 }
423 {
424 if(is_writable($this->getPath()))
425 {
426 if(mkdir($this->getPath().'/'.FORUM_PATH))
427 {
428 if(chmod($this->getPath().'/'.FORUM_PATH,0755))
429 {
430 $this->forum_path = $this->getPath().'/'.FORUM_PATH;
431 return true;
432 }
433 }
434 }
435 return false;
436 }
444 function __rotateFiles($a_path)
445 {
446 if(file_exists($a_path))
447 {
448 $this->__rotateFiles($a_path.".old");
449 return \ilFileUtils::rename($a_path, $a_path . '.old');
450 }
451 return true;
452 }
453
454}
print $file
$filename
Definition: buildRTE.php:89
This class handles all operations on files for the forum object.
__construct($a_obj_id=0, $a_pos_id=0)
Constructor call base constructors checks if directory is writable and sets the optional obj_id.
__rotateFiles($a_path)
rotate files with same name recursive method
getAbsolutePath($a_path)
get absolute path of filename
unlinkFilesByMD5Filenames($a_md5_filename)
get file data of a specific attachment
getFileDataByMD5Filename($a_md5_filename)
get file data of a specific attachment
__initDirectory()
init directory overwritten method @access public
getForumPath()
get forum path @access public
storeUploadedFile($files)
Store uploaded files in filesystem.
unlinkFile($a_filename)
unlink one uploaded file expects a filename e.g 'foo'
ilClone($a_new_obj_id, $a_new_pos_id)
__checkReadWrite()
check if directory is writable overwritten method from base class @access private
unlinkFiles($a_filenames)
unlink files: expects an array of filenames e.g.
checkFilesExist($a_files)
check if files exist
This class handles all operations on files in directory /ilias_data/.
getPath()
get Path @access public
static rename($a_source, $a_target)
Rename a file.
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 @access public
static moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
static _sanitizeFilemame($a_filename)
static getDir($a_dir, $a_rec=false, $a_sub_dir="")
get directory
$rest
Definition: goto.php:85
redirection script todo: (a better solution should control the processing via a xml file)