ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
ilObjFileAccess Class Reference

Access class for file objects. More...

+ Inheritance diagram for ilObjFileAccess:
+ Collaboration diagram for ilObjFileAccess:

Public Member Functions

 canBeDelivered (ilWACPath $ilWACPath)
 
 _lookupVersion ($a_id)
 lookup version More...
 
 _lookupFileSize ($a_id)
 lookup size More...
 
- Public Member Functions inherited from ilObjectAccess
 _checkAccess ($a_cmd, $a_permission, $a_ref_id, $a_obj_id, $a_user_id="")
 Checks wether a user may invoke a command or not (this method is called by ilAccessHandler::checkAccess) More...
 
 _checkCondition ($a_obj_id, $a_operator, $a_value, $a_usr_id)
 check condition More...
 

Static Public Member Functions

static _getCommands ()
 get commands More...
 
static _checkGoto ($a_target)
 check whether goto script will succeed More...
 
static _lookupFileData ($a_id)
 
looks up the file_data for the file object with the specified object id

as an associative array. More...

 
static _lookupVersion ($a_id)
 lookup version More...
 
static _lookupFileSize ($a_id)
 Quickly looks up the file size from the database and returns the number of bytes. More...
 
static _lookupFileSizeFromFilesystem ($a_id)
 Looks up the file size by retrieving it from the filesystem. More...
 
static _lookupSuffix ($a_id)
 lookup suffix More...
 
static _lookupDiskUsage ($a_id)
 Returns the number of bytes used on the harddisk by the file object with the specified object id. More...
 
static _isFileInline ($a_file_name)
 Returns true, if the specified file shall be displayed inline in the browser. More...
 
static _getFileExtension ($a_file_name)
 Gets the file extension of the specified file name. More...
 
static _isFileHidden ($a_file_name)
 Returns true, if a file with the specified name, is usually hidden from the user. More...
 
static _appendNumberOfCopyToFilename ($a_file_name, $nth_copy=null, $a_handle_extension=false)
 Appends the text " - Copy" to a filename in the language of the current user. More...
 
static _getPermanentDownloadLink ($ref_id)
 Gets the permanent download link for the file. More...
 
static _preloadData ($a_obj_ids, $a_ref_ids)
 
static getListGUIData ($a_obj_id)
 
- Static Public Member Functions inherited from ilObjectAccess
static _getCommands ()
 get commands More...
 
static _checkGoto ($a_target)
 check whether goto script will succeed More...
 
static _isOffline ($a_obj_id)
 Type-specific implementation of general status, has to be overwritten. More...
 
static _preloadData ($a_obj_ids, $a_ref_ids)
 Preload data. More...
 

Static Protected Attributes

static $_inlineFileExtensionsArray
 Contains an array of extensions separated by space. More...
 
static $preload_list_gui_data
 

Detailed Description

Access class for file objects.

Author
Alex Killing alex..nosp@m.kill.nosp@m.ing@g.nosp@m.mx.d.nosp@m.e
Stefan Born stefa.nosp@m.n.bo.nosp@m.rn@ph.nosp@m.zh.c.nosp@m.h
Version
$Id$

Definition at line 17 of file class.ilObjFileAccess.php.

Member Function Documentation

◆ _appendNumberOfCopyToFilename()

static ilObjFileAccess::_appendNumberOfCopyToFilename (   $a_file_name,
  $nth_copy = null,
  $a_handle_extension = false 
)
static

Appends the text " - Copy" to a filename in the language of the current user.

If the provided $nth_copy parameter is greater than 1, then is appended in round brackets. If $nth_copy parameter is null, then the function determines the copy number on its own.

If this function detects, that the filename already ends with " - Copy", or with "- Copy ($nth_copy), it only appends the number of the copy to the filename.

This function retains the extension of the filename.

Examples:

  • Calling ilObjFileAccess::_appendCopyToTitle('Hello.txt', 1) returns: "Hello - Copy.txt".
  • Calling ilObjFileAccess::_appendCopyToTitle('Hello.txt', 2) returns: "Hello - Copy (2).txt".
  • Calling ilObjFileAccess::_appendCopyToTitle('Hello - Copy (3).txt', 2) returns: "Hello - Copy (2).txt".
  • Calling ilObjFileAccess::_appendCopyToTitle('Hello - Copy (3).txt', null) returns: "Hello - Copy (4).txt".

Definition at line 317 of file class.ilObjFileAccess.php.

References $lng, and _getFileExtension().

Referenced by ilObject\appendCopyInfo(), and ilContainerGUI\performPasteIntoMultipleObjectsObject().

318  {
319  global $lng;
320 
321  $filenameWithoutExtension= $a_file_name;
322 
323  $extension = null;
324  if ($a_handle_extension)
325  {
326  // Get the extension and the filename without the extension
327  $extension = ilObjFileAccess::_getFileExtension($a_file_name);
328  if (strlen($extension) > 0)
329  {
330  $extension = '.'.$extension;
331  $filenameWithoutExtension= substr($a_file_name, 0, -strlen($extension));
332  }
333  }
334 
335  // create a regular expression from the language text copy_n_of_suffix, so that
336  // we can match it against $filenameWithoutExtension, and retrieve the number of the copy.
337  // for example, if copy_n_of_suffix is 'Copy (%1s)', this creates the regular
338  // expression '/ Copy \\([0-9]+)\\)$/'.
339  $nthCopyRegex = preg_replace('/([\^$.\[\]|()?*+{}])/','\\\\${1}', ' '.$lng->txt('copy_n_of_suffix'));
340  $nthCopyRegex = '/'.preg_replace('/%1\\\\\$s/', '([0-9]+)', $nthCopyRegex).'$/';
341 
342  // Get the filename without any previously added number of copy.
343  // Determine the number of copy, if it has not been specified.
344  if (preg_match($nthCopyRegex, $filenameWithoutExtension, $matches))
345  {
346  // this is going to be at least the third copy of the filename
347  $filenameWithoutCopy = substr($filenameWithoutExtension, 0, -strlen($matches[0]));
348  if ($nth_copy == null)
349  {
350  $nth_copy = $matches[1]+1;
351  }
352  }
353  else if (substr($filenameWithoutExtension,-strlen(' '.$lng->txt('copy_of_suffix'))) == ' '.$lng->txt('copy_of_suffix'))
354  {
355  // this is going to be the second copy of the filename
356  $filenameWithoutCopy = substr($filenameWithoutExtension, 0, -strlen(' '.$lng->txt('copy_of_suffix')));
357  if ($nth_copy == null)
358  {
359  $nth_copy = 2;
360  }
361  }
362  else
363  {
364  // this is going to be the first copy of the filename
365  $filenameWithoutCopy = $filenameWithoutExtension;
366  if ($nth_copy == null)
367  {
368  $nth_copy = 1;
369  }
370  }
371 
372 
373  // Construct the new filename
374  if ($nth_copy > 1)
375  {
376  // this is at least the second copy of the filename, append " - Copy ($nth_copy)"
377  $newFilename = $filenameWithoutCopy.sprintf(' '.$lng->txt('copy_n_of_suffix'), $nth_copy).$extension;
378  }
379  else
380  {
381  // this is the first copy of the filename, append " - Copy"
382  $newFilename = $filenameWithoutCopy.' '.$lng->txt('copy_of_suffix').$extension;
383  }
384 
385  return $newFilename;
386  }
static _getFileExtension($a_file_name)
Gets the file extension of the specified file name.
global $lng
Definition: privfeed.php:17
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _checkGoto()

static ilObjFileAccess::_checkGoto (   $a_target)
static

check whether goto script will succeed

Definition at line 93 of file class.ilObjFileAccess.php.

References ilSharedResourceGUI\hasAccess().

94  {
95  global $ilAccess;
96 
97  $t_arr = explode("_", $a_target);
98 
99  // personal workspace context: do not force normal login
100  if(isset($t_arr[2]) && $t_arr[2] == "wsp")
101  {
102  include_once "Services/PersonalWorkspace/classes/class.ilSharedResourceGUI.php";
103  return ilSharedResourceGUI::hasAccess($t_arr[1]);
104  }
105 
106  if ($t_arr[0] != "file" || ((int) $t_arr[1]) <= 0)
107  {
108  return false;
109  }
110 
111  if ($ilAccess->checkAccess("visible", "", $t_arr[1]) ||
112  $ilAccess->checkAccess("read", "", $t_arr[1]))
113  {
114  return true;
115  }
116  return false;
117  }
static hasAccess($a_node_id, $a_is_portfolio=false)
+ Here is the call graph for this function:

◆ _getCommands()

static ilObjFileAccess::_getCommands ( )
static

get commands

this method returns an array of all possible commands/permission combinations

example: $commands = array ( array("permission" => "read", "cmd" => "view", "lang_var" => "show"), array("permission" => "write", "cmd" => "edit", "lang_var" => "edit"), );

Definition at line 80 of file class.ilObjFileAccess.php.

References array.

Referenced by ilObjFileListGUI\init().

81  {
82  $commands = array();
83  $commands[] = array("permission" => "read", "cmd" => "sendfile", "lang_var" => "download","default" => true);
84  $commands[] = array("permission" => "write", "cmd" => "edit", "lang_var" => "edit_content");
85  $commands[] = array("permission" => "write", "cmd" => "versions", "lang_var" => "versions");
86 
87  return $commands;
88  }
Create styles array
The data for the language used.
+ Here is the caller graph for this function:

◆ _getFileExtension()

static ilObjFileAccess::_getFileExtension (   $a_file_name)
static

Gets the file extension of the specified file name.

The file name extension is converted to lower case before it is returned.

For example, for the file name "HELLO.MP3", this function returns "mp3".

A file name extension can have multiple parts. For the file name "hello.tar.gz", this function returns "gz".

Parameters
string$a_file_nameThe file name

Definition at line 260 of file class.ilObjFileAccess.php.

Referenced by _appendNumberOfCopyToFilename(), ilObjFile\checkFileExtension(), ilObjFile\getFileExtension(), ilObjFileListGUI\getProperties(), ilObjFileGUI\handleFileUpload(), ilObjFileGUI\save(), and ilFilePreviewRenderer\supports().

261  {
262  if (preg_match('/\.([a-z0-9]+)\z/i',$a_file_name,$matches) == 1)
263  {
264  return strtolower($matches[1]);
265  }
266  else
267  {
268  return '';
269  }
270  }
+ Here is the caller graph for this function:

◆ _getPermanentDownloadLink()

static ilObjFileAccess::_getPermanentDownloadLink (   $ref_id)
static

Gets the permanent download link for the file.

Definition at line 391 of file class.ilObjFileAccess.php.

References $ref_id, and ilLink\_getStaticLink().

Referenced by ilObjFileListGUI\getCommandLink(), and ilObjFileGUI\infoScreenForward().

392  {
393  include_once("./Services/Link/classes/class.ilLink.php");
394  return ilLink::_getStaticLink($ref_id, "file", true, "_download");
395  }
$ref_id
Definition: sahs_server.php:39
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _isFileHidden()

static ilObjFileAccess::_isFileHidden (   $a_file_name)
static

Returns true, if a file with the specified name, is usually hidden from the user.

  • Filenames starting with '.' are hidden Unix files
  • Filenames ending with '~' are temporary Unix files
  • Filenames starting with '~$' are temporary Windows files
  • The file "Thumbs.db" is a hidden Windows file

Definition at line 281 of file class.ilObjFileAccess.php.

Referenced by ilItemGroupItems\getAssignableItems(), ilObjectListGUI\getListItemHTML(), ilContainer\getSubItems(), ilObjFile\isHidden(), and ilExportSelectionTableGUI\parseContainer().

282  {
283  return substr($a_file_name,0,1) == '.' ||
284  substr($a_file_name,-1,1) == '~' ||
285  substr($a_file_name,0,2) == '~$' ||
286  $a_file_name == 'Thumbs.db';
287  }
+ Here is the caller graph for this function:

◆ _isFileInline()

static ilObjFileAccess::_isFileInline (   $a_file_name)
static

Returns true, if the specified file shall be displayed inline in the browser.

Definition at line 237 of file class.ilObjFileAccess.php.

Referenced by ilObjFileListGUI\getCommandFrame(), ilObjFileListGUI\getIconImageType(), and ilObjFile\isInline().

238  {
239  if (self::$_inlineFileExtensionsArray === null) // the === makes a huge difference, if the array is empty
240  {
241  require_once 'Services/Administration/classes/class.ilSetting.php';
242  $settings = new ilSetting('file_access');
243  self::$_inlineFileExtensionsArray = preg_split('/ /', $settings->get('inline_file_extensions'), -1, PREG_SPLIT_NO_EMPTY);
244  }
245  $extension = self::_getFileExtension($a_file_name);
246  return in_array($extension, self::$_inlineFileExtensionsArray);
247  }
ILIAS Setting Class.
+ Here is the caller graph for this function:

◆ _lookupDiskUsage()

static ilObjFileAccess::_lookupDiskUsage (   $a_id)
static

Returns the number of bytes used on the harddisk by the file object with the specified object id.

Parameters
intobject id of a file object.

Definition at line 225 of file class.ilObjFileAccess.php.

References ilUtil\dirsize().

Referenced by ilObjFile\getDiskUsage().

226  {
227  include_once('Modules/File/classes/class.ilFSStorageFile.php');
228  $fileStorage = new ilFSStorageFile($a_id);
229  $dir = $fileStorage->getAbsolutePath();
230  return ilUtil::dirsize($dir);
231  }
static dirsize($directory)
get size of a directory or a file.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _lookupFileData()

static ilObjFileAccess::_lookupFileData (   $a_id)
static

looks up the file_data for the file object with the specified object id

as an associative array.

Definition at line 123 of file class.ilObjFileAccess.php.

References $ilDB, $r, $row, and ilDBConstants\FETCHMODE_ASSOC.

124  {
125  global $ilDB;
126 
127  $q = "SELECT * FROM file_data WHERE file_id = ".$ilDB->quote($a_id ,'integer');
128  $r = $ilDB->query($q);
130 
131  return $row;
132  }
$r
Definition: example_031.php:79
global $ilDB

◆ _lookupFileSize() [1/2]

ilObjFileAccess::_lookupFileSize (   $a_id)

lookup size

Definition at line 44 of file class.ilObjFileAccess.php.

References $file, $ilDB, $r, $row, $size, _lookupVersion(), and ilDBConstants\FETCHMODE_OBJECT.

45  {
46  global $ilDB;
47 
48  $q = "SELECT * FROM file_data WHERE file_id = ".$ilDB->quote($a_id);
49  $r = $ilDB->query($q);
51 
52  include_once('Services/Migration/DBUpdate_904/classes/class.ilFSStorageFile.php');
53  $fss = new ilFSStorageFile($a_id);
54  $file = $fss->getAbsolutePath().'/'.$row->file_name;
55 
56  if (@!is_file($file))
57  {
58  $version_subdir = "/".sprintf("%03d", ilObjFileAccess::_lookupVersion($a_id));
59  $file = $fss->getAbsolutePath().'/'.$version_subdir.'/'.$row->file_name;
60 
61  }
62 
63  if (is_file($file))
64  {
65  $size = filesize($file);
66  }
67  else
68  {
69  $size = 0;
70  }
71 
72  return $size;
73  }
$size
Definition: RandomTest.php:79
$r
Definition: example_031.php:79
global $ilDB
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
static _lookupVersion($a_id)
lookup version
+ Here is the call graph for this function:

◆ _lookupFileSize() [2/2]

static ilObjFileAccess::_lookupFileSize (   $a_id)
static

Quickly looks up the file size from the database and returns the number of bytes.

Definition at line 152 of file class.ilObjFileAccess.php.

References $ilDB, $r, $row, $size, and ilDBConstants\FETCHMODE_OBJECT.

Referenced by ilObjectXMLWriter\__appendObjectProperties(), ilObjFile\_lookupFileSize(), and ilFolderDownloadBackgroundTaskHandler\calculateRecursive().

153  {
154  global $ilDB;
155 
156  $q = "SELECT file_size FROM file_data WHERE file_id = ".$ilDB->quote($a_id ,'integer');
157  $r = $ilDB->query($q);
159 
160  $size = $row->file_size;
161 
162  return $size;
163  }
$size
Definition: RandomTest.php:79
$r
Definition: example_031.php:79
global $ilDB
+ Here is the caller graph for this function:

◆ _lookupFileSizeFromFilesystem()

static ilObjFileAccess::_lookupFileSizeFromFilesystem (   $a_id)
static

Looks up the file size by retrieving it from the filesystem.

This function runs much slower than _lookupFileSize()! Use this function only, to update the data in the database. For example, if the file size in the database has become inconsistent for some reason.

Definition at line 171 of file class.ilObjFileAccess.php.

References $file, $ilDB, $r, $row, $size, _lookupVersion(), and ilDBConstants\FETCHMODE_OBJECT.

172  {
173  global $ilDB;
174 
175  $q = "SELECT * FROM file_data WHERE file_id = ".$ilDB->quote($a_id ,'integer');
176  $r = $ilDB->query($q);
178 
179  require_once('Modules/File/classes/class.ilFSStorageFile.php');
180  $fss = new ilFSStorageFile($a_id);
181  $file = $fss->getAbsolutePath().'/'.$row->file_name;
182 
183  if (@!is_file($file))
184  {
185  $version_subdir = "/".sprintf("%03d", ilObjFileAccess::_lookupVersion($a_id));
186  $file = $fss->getAbsolutePath().'/'.$version_subdir.'/'.$row->file_name;
187  }
188 
189  if (is_file($file))
190  {
191  $size = filesize($file);
192  }
193  else
194  {
195  $size = 0;
196  }
197 
198  return $size;
199  }
$size
Definition: RandomTest.php:79
$r
Definition: example_031.php:79
global $ilDB
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
static _lookupVersion($a_id)
lookup version
+ Here is the call graph for this function:

◆ _lookupSuffix()

static ilObjFileAccess::_lookupSuffix (   $a_id)
static

lookup suffix

Definition at line 205 of file class.ilObjFileAccess.php.

References $ilDB, $r, $row, and ilDBConstants\FETCHMODE_OBJECT.

Referenced by ilObjectXMLWriter\__appendObjectProperties().

206  {
207  include_once('Modules/File/classes/class.ilFSStorageFile.php');
208 
209  global $ilDB;
210 
211  // BEGIN WebDAV: Filename suffix is determined by file title
212  $q = "SELECT * FROM object_data WHERE obj_id = ".$ilDB->quote($a_id ,'integer');
213  $r = $ilDB->query($q);
215  require_once 'Modules/File/classes/class.ilObjFile.php';
216  return self::_getFileExtension($row->title);
217  // END WebDAV: Filename suffix is determined by file title
218  }
$r
Definition: example_031.php:79
global $ilDB
+ Here is the caller graph for this function:

◆ _lookupVersion() [1/2]

ilObjFileAccess::_lookupVersion (   $a_id)

lookup version

Definition at line 30 of file class.ilObjFileAccess.php.

References $ilDB, $r, $row, and ilDBConstants\FETCHMODE_OBJECT.

31  {
32  global $ilDB;
33 
34  $q = "SELECT * FROM file_data WHERE file_id = ".$ilDB->quote($a_id);
35  $r = $ilDB->query($q);
37 
38  return $row->version;
39  }
$r
Definition: example_031.php:79
global $ilDB

◆ _lookupVersion() [2/2]

static ilObjFileAccess::_lookupVersion (   $a_id)
static

lookup version

Definition at line 137 of file class.ilObjFileAccess.php.

References $ilDB, $r, $row, ilDBConstants\FETCHMODE_OBJECT, and ilUtil\stripSlashes().

Referenced by ilObjectXMLWriter\__appendObjectProperties(), _lookupFileSize(), _lookupFileSizeFromFilesystem(), and ilObjFile\_lookupVersion().

138  {
139  global $ilDB;
140 
141  $q = "SELECT version FROM file_data WHERE file_id = ".$ilDB->quote($a_id ,'integer');
142  $r = $ilDB->query($q);
144 
145  return ilUtil::stripSlashes($row->version);
146  }
$r
Definition: example_031.php:79
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
global $ilDB
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _preloadData()

static ilObjFileAccess::_preloadData (   $a_obj_ids,
  $a_ref_ids 
)
static

Definition at line 397 of file class.ilObjFileAccess.php.

References $ilDB, $row, and array.

398  {
399  global $ilDB;
400 
401  self::$preload_list_gui_data = array();
402 
403  $set = $ilDB->query("SELECT obj_id,max(hdate) latest".
404  " FROM history".
405  " WHERE obj_type = ".$ilDB->quote("file", "text").
406  " AND ".$ilDB->in("obj_id", $a_obj_ids, "", "integer").
407  " GROUP BY obj_id");
408  while($row = $ilDB->fetchAssoc($set))
409  {
410  self::$preload_list_gui_data[$row["obj_id"]]["date"] = $row["latest"];
411  }
412 
413  $set = $ilDB->query("SELECT file_size,version,file_id".
414  " FROM file_data".
415  " WHERE ".$ilDB->in("file_id", $a_obj_ids, "", "integer"));
416  while($row = $ilDB->fetchAssoc($set))
417  {
418  self::$preload_list_gui_data[$row["file_id"]]["size"] = $row["file_size"];
419  self::$preload_list_gui_data[$row["file_id"]]["version"] = $row["version"];
420  }
421  }
Create styles array
The data for the language used.
global $ilDB

◆ canBeDelivered()

ilObjFileAccess::canBeDelivered ( ilWACPath  $ilWACPath)
Parameters
\ilWACPath$ilWACPath
Returns
bool

Implements ilWACCheckingClass.

Definition at line 42 of file class.ilObjFileAccess.php.

References ilWACPath\getPath(), and ilWACPath\getSecurePathId().

42  {
43  switch ($ilWACPath->getSecurePathId()) {
44  case 'previews':
45  $re = '/\/previews\/[\d\/]{0,}\/preview_([\d]{0,})\//uU';
46  break;
47  }
48  preg_match($re, $ilWACPath->getPath(), $matches);
49 
50  return $this->checkAccessToObjectId($matches[1]);
51  }
+ Here is the call graph for this function:

◆ getListGUIData()

static ilObjFileAccess::getListGUIData (   $a_obj_id)
static

Definition at line 423 of file class.ilObjFileAccess.php.

Referenced by ilObjFileListGUI\getProperties().

424  {
425  if(isset(self::$preload_list_gui_data[$a_obj_id]))
426  {
427  return self::$preload_list_gui_data[$a_obj_id];
428  }
429  }
+ Here is the caller graph for this function:

Field Documentation

◆ $_inlineFileExtensionsArray

ilObjFileAccess::$_inlineFileExtensionsArray
staticprotected

Contains an array of extensions separated by space.

Since this array is needed for every file object displayed on a repository page, we only create it once, and cache it here.

See also
function _isFileInline

Definition at line 62 of file class.ilObjFileAccess.php.

◆ $preload_list_gui_data

ilObjFileAccess::$preload_list_gui_data
staticprotected

Definition at line 65 of file class.ilObjFileAccess.php.


The documentation for this class was generated from the following file: