ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
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...
 
 canBeDelivered (ilWACPath $ilWACPath)
 
Parameters
ilWACPath$ilWACPath
Returns
bool
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 if object type does not support centralized offline handling. 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 356 of file class.ilObjFileAccess.php.

References $DIC, $lng, and _getFileExtension().

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

357  {
358  global $DIC;
359  $lng = $DIC['lng'];
360 
361  $filenameWithoutExtension = $a_file_name;
362 
363  $extension = null;
364  if ($a_handle_extension) {
365  // Get the extension and the filename without the extension
366  $extension = ilObjFileAccess::_getFileExtension($a_file_name);
367  if (strlen($extension) > 0) {
368  $extension = '.' . $extension;
369  $filenameWithoutExtension = substr($a_file_name, 0, -strlen($extension));
370  }
371  }
372 
373  // create a regular expression from the language text copy_n_of_suffix, so that
374  // we can match it against $filenameWithoutExtension, and retrieve the number of the copy.
375  // for example, if copy_n_of_suffix is 'Copy (%1s)', this creates the regular
376  // expression '/ Copy \\([0-9]+)\\)$/'.
377  $nthCopyRegex = preg_replace('/([\^$.\[\]|()?*+{}])/', '\\\\${1}', ' '
378  . $lng->txt('copy_n_of_suffix'));
379  $nthCopyRegex = '/' . preg_replace('/%1\\\\\$s/', '([0-9]+)', $nthCopyRegex) . '$/';
380 
381  // Get the filename without any previously added number of copy.
382  // Determine the number of copy, if it has not been specified.
383  if (preg_match($nthCopyRegex, $filenameWithoutExtension, $matches)) {
384  // this is going to be at least the third copy of the filename
385  $filenameWithoutCopy = substr($filenameWithoutExtension, 0, -strlen($matches[0]));
386  if ($nth_copy == null) {
387  $nth_copy = $matches[1] + 1;
388  }
389  } else {
390  if (substr($filenameWithoutExtension, -strlen(' ' . $lng->txt('copy_of_suffix')))
391  == ' ' . $lng->txt('copy_of_suffix')
392  ) {
393  // this is going to be the second copy of the filename
394  $filenameWithoutCopy = substr($filenameWithoutExtension, 0, -strlen(' '
395  . $lng->txt('copy_of_suffix')));
396  if ($nth_copy == null) {
397  $nth_copy = 2;
398  }
399  } else {
400  // this is going to be the first copy of the filename
401  $filenameWithoutCopy = $filenameWithoutExtension;
402  if ($nth_copy == null) {
403  $nth_copy = 1;
404  }
405  }
406  }
407 
408  // Construct the new filename
409  if ($nth_copy > 1) {
410  // this is at least the second copy of the filename, append " - Copy ($nth_copy)"
411  $newFilename = $filenameWithoutCopy . sprintf(' '
412  . $lng->txt('copy_n_of_suffix'), $nth_copy)
413  . $extension;
414  } else {
415  // this is the first copy of the filename, append " - Copy"
416  $newFilename = $filenameWithoutCopy . ' ' . $lng->txt('copy_of_suffix') . $extension;
417  }
418 
419  return $newFilename;
420  }
global $DIC
Definition: saml.php:7
static _getFileExtension($a_file_name)
Gets the file extension of the specified file name.
$lng
+ 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 116 of file class.ilObjFileAccess.php.

References $DIC, and ilSharedResourceGUI\hasAccess().

117  {
118  global $DIC;
119  $ilAccess = $DIC['ilAccess'];
120 
121  $t_arr = explode("_", $a_target);
122 
123  // personal workspace context: do not force normal login
124  if (isset($t_arr[2]) && $t_arr[2] == "wsp") {
125  include_once "Services/PersonalWorkspace/classes/class.ilSharedResourceGUI.php";
126 
127  return ilSharedResourceGUI::hasAccess($t_arr[1]);
128  }
129 
130  if ($t_arr[0] != "file" || ((int) $t_arr[1]) <= 0) {
131  return false;
132  }
133 
134  if ($ilAccess->checkAccess("visible", "", $t_arr[1])
135  || $ilAccess->checkAccess("read", "", $t_arr[1])
136  ) {
137  return true;
138  }
139 
140  return false;
141  }
global $DIC
Definition: saml.php:7
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 89 of file class.ilObjFileAccess.php.

Referenced by ilObjFileListGUI\init().

90  {
91  $commands = array();
92  $commands[] = array(
93  "permission" => "read",
94  "cmd" => "sendfile",
95  "lang_var" => "download",
96  "default" => true,
97  );
98  $commands[] = array(
99  "permission" => "write",
100  "cmd" => "edit",
101  "lang_var" => "edit_content",
102  );
103  $commands[] = array(
104  "permission" => "write",
105  "cmd" => "versions",
106  "lang_var" => "versions",
107  );
108 
109  return $commands;
110  }
+ 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 301 of file class.ilObjFileAccess.php.

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

302  {
303  if (preg_match('/\.([a-z0-9]+)\z/i', $a_file_name, $matches) == 1) {
304  return strtolower($matches[1]);
305  } else {
306  return '';
307  }
308  }
+ Here is the caller graph for this function:

◆ _getPermanentDownloadLink()

static ilObjFileAccess::_getPermanentDownloadLink (   $ref_id)
static

Gets the permanent download link for the file.

Parameters
int$ref_id
Returns
string

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

References ilLink\_getStaticLink().

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

431  {
432  return ilLink::_getStaticLink($ref_id, "file", true, "_download");
433  }
+ 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 320 of file class.ilObjFileAccess.php.

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

321  {
322  return substr($a_file_name, 0, 1) == '.' || substr($a_file_name, -1, 1) == '~'
323  || substr($a_file_name, 0, 2) == '~$'
324  || $a_file_name == 'Thumbs.db';
325  }
+ 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 274 of file class.ilObjFileAccess.php.

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

275  {
276  if (self::$_inlineFileExtensionsArray
277  === null
278  ) { // the === makes a huge difference, if the array is empty
279  require_once 'Services/Administration/classes/class.ilSetting.php';
280  $settings = new ilSetting('file_access');
281  self::$_inlineFileExtensionsArray = preg_split('/ /', $settings->get('inline_file_extensions'), -1, PREG_SPLIT_NO_EMPTY);
282  }
283  $extension = self::_getFileExtension($a_file_name);
284 
285  return in_array($extension, self::$_inlineFileExtensionsArray);
286  }
+ 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 259 of file class.ilObjFileAccess.php.

References ilUtil\dirsize().

Referenced by ilObjFile\getDiskUsage().

260  {
261  include_once('Modules/File/classes/class.ilFSStorageFile.php');
262  $fileStorage = new ilFSStorageFile($a_id);
263  $dir = $fileStorage->getAbsolutePath();
264 
265  return ilUtil::dirsize($dir);
266  }
static dirsize($directory)
get size of a directory or a file.
Class ilFSStorageFile.
+ 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 148 of file class.ilObjFileAccess.php.

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

149  {
150  global $DIC;
151  $ilDB = $DIC['ilDB'];
152 
153  $q = "SELECT * FROM file_data WHERE file_id = " . $ilDB->quote($a_id, 'integer');
154  $r = $ilDB->query($q);
156 
157  return $row;
158  }
global $DIC
Definition: saml.php:7
$r
Definition: example_031.php:79
$row
global $ilDB

◆ _lookupFileSize() [1/2]

ilObjFileAccess::_lookupFileSize (   $a_id)

lookup size

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

References $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  $version_subdir = "/" . sprintf("%03d", ilObjFileAccess::_lookupVersion($a_id));
58  $file = $fss->getAbsolutePath() . '/' . $version_subdir . '/' . $row->file_name;
59  }
60 
61  if (is_file($file)) {
62  $size = filesize($file);
63  } else {
64  $size = 0;
65  }
66 
67  return $size;
68  }
$size
Definition: RandomTest.php:84
$r
Definition: example_031.php:79
$row
global $ilDB
Class ilFSStorageFile.
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 183 of file class.ilObjFileAccess.php.

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

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

184  {
185  global $DIC;
186  $ilDB = $DIC['ilDB'];
187 
188  $q = "SELECT file_size FROM file_data WHERE file_id = " . $ilDB->quote($a_id, 'integer');
189  $r = $ilDB->query($q);
191 
192  $size = $row->file_size;
193 
194  return $size;
195  }
$size
Definition: RandomTest.php:84
global $DIC
Definition: saml.php:7
$r
Definition: example_031.php:79
$row
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 204 of file class.ilObjFileAccess.php.

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

205  {
206  global $DIC;
207  $ilDB = $DIC['ilDB'];
208 
209  $q = "SELECT * FROM file_data WHERE file_id = " . $ilDB->quote($a_id, 'integer');
210  $r = $ilDB->query($q);
212 
213  require_once('Modules/File/classes/class.ilFSStorageFile.php');
214  $fss = new ilFSStorageFile($a_id);
215  $file = $fss->getAbsolutePath() . '/' . $row->file_name;
216 
217  if (@!is_file($file)) {
218  $version_subdir = "/" . sprintf("%03d", ilObjFileAccess::_lookupVersion($a_id));
219  $file = $fss->getAbsolutePath() . '/' . $version_subdir . '/' . $row->file_name;
220  }
221 
222  if (is_file($file)) {
223  $size = filesize($file);
224  } else {
225  $size = 0;
226  }
227 
228  return $size;
229  }
$size
Definition: RandomTest.php:84
global $DIC
Definition: saml.php:7
$r
Definition: example_031.php:79
$row
global $ilDB
Class ilFSStorageFile.
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 235 of file class.ilObjFileAccess.php.

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

Referenced by ilObjectXMLWriter\__appendObjectProperties().

236  {
237  include_once('Modules/File/classes/class.ilFSStorageFile.php');
238 
239  global $DIC;
240  $ilDB = $DIC['ilDB'];
241 
242  // BEGIN WebDAV: Filename suffix is determined by file title
243  $q = "SELECT * FROM object_data WHERE obj_id = " . $ilDB->quote($a_id, 'integer');
244  $r = $ilDB->query($q);
246  require_once 'Modules/File/classes/class.ilObjFile.php';
247 
248  return self::_getFileExtension($row->title);
249  // END WebDAV: Filename suffix is determined by file title
250  }
global $DIC
Definition: saml.php:7
$r
Definition: example_031.php:79
$row
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
$row
global $ilDB

◆ _lookupVersion() [2/2]

static ilObjFileAccess::_lookupVersion (   $a_id)
static

lookup version

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

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

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

165  {
166  global $DIC;
167  $ilDB = $DIC['ilDB'];
168 
169  $q = "SELECT version FROM file_data WHERE file_id = " . $ilDB->quote($a_id, 'integer');
170  $r = $ilDB->query($q);
172 
173  $striped = ilUtil::stripSlashes($row->version);
174 
175  return $striped > 0 ? $striped : 1;
176  }
global $DIC
Definition: saml.php:7
$r
Definition: example_031.php:79
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
$row
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
Parameters
array$a_obj_ids
int[]$a_ref_ids

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

References $DIC, and $row.

441  {
442  global $DIC;
443 
444  self::$preload_list_gui_data = array();
445 
446  $set = $DIC->database()->query("SELECT obj_id,max(hdate) latest" . " FROM history"
447  . " WHERE obj_type = " . $DIC->database()->quote("file", "text") . " AND "
448  . $DIC->database()->in("obj_id", $a_obj_ids, "", "integer") . " GROUP BY obj_id");
449  while ($row = $DIC->database()->fetchAssoc($set)) {
450  self::$preload_list_gui_data[$row["obj_id"]]["date"] = $row["latest"];
451  }
452 
453  $set = $DIC->database()->query("SELECT file_size, version, file_id, page_count" . " FROM file_data" . " WHERE "
454  . $DIC->database()->in("file_id", $a_obj_ids, "", "integer"));
455  while ($row = $DIC->database()->fetchAssoc($set)) {
456  self::$preload_list_gui_data[$row["file_id"]]["size"] = $row["file_size"];
457  self::$preload_list_gui_data[$row["file_id"]]["version"] = $row["version"];
458  self::$preload_list_gui_data[$row["file_id"]]["page_count"] = $row["page_count"];
459  }
460  }
global $DIC
Definition: saml.php:7
$row

◆ canBeDelivered()

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

Implements ilWACCheckingClass.

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

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

48  {
49  switch ($ilWACPath->getSecurePathId()) {
50  case 'previews':
51  $re = '/\/previews\/[\d\/]{0,}\/preview_([\d]{0,})\//uU';
52  break;
53  }
54  preg_match($re, $ilWACPath->getPath(), $matches);
55 
56  return $this->checkAccessToObjectId($matches[1]);
57  }
+ Here is the call graph for this function:

◆ getListGUIData()

static ilObjFileAccess::getListGUIData (   $a_obj_id)
static
Parameters
$a_obj_id
Returns
array

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

Referenced by ilObjFileListGUI\getProperties().

469  {
470  if (isset(self::$preload_list_gui_data[$a_obj_id])) {
471  return self::$preload_list_gui_data[$a_obj_id];
472  }
473  }
+ 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 71 of file class.ilObjFileAccess.php.

◆ $preload_list_gui_data

ilObjFileAccess::$preload_list_gui_data
staticprotected

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


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