ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
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...
 
 canBeDelivered (ilWACPath $ilWACPath)
 

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.

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 }
static _getFileExtension($a_file_name)
Gets the file extension of the specified file name.
$lng
$DIC
Definition: xapitoken.php:46

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

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

+ 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

Reimplemented from ilObjectAccess.

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

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 }
static hasAccess($a_node_id, $a_is_portfolio=false)

References $DIC, and ilSharedResourceGUI\hasAccess().

+ 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"), );

Reimplemented from ilObjectAccess.

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

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" => "versions",
101 "lang_var" => "versions",
102 );
103 $commands[] = array(
104 "permission" => "write",
105 "cmd" => "edit",
106 "lang_var" => "settings",
107 );
108
109 return $commands;
110 }

Referenced by ilObjFileListGUI\init().

+ 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.

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 }

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

+ 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.

431 {
432 return ilLink::_getStaticLink($ref_id, "file", true, "_download");
433 }

References ilLink\_getStaticLink().

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

+ 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.

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 }

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

+ 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.

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 }
ILIAS Setting Class.

References _getFileExtension().

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

+ Here is the call graph for this function:
+ 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.

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 }
Class ilFSStorageFile.
static dirsize($directory)
get size of a directory or a file.

References ilUtil\dirsize().

Referenced by ilObjFile\getDiskUsage().

+ 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.

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);
155 $row = $r->fetchRow(ilDBConstants::FETCHMODE_ASSOC);
156
157 return $row;
158 }
global $ilDB

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

◆ _lookupFileSize() [1/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.

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);
190 $row = $r->fetchRow(ilDBConstants::FETCHMODE_OBJECT);
191
192 $size = $row->file_size;
193
194 return $size;
195 }
$size
Definition: RandomTest.php:84

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

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

+ Here is the caller graph for this function:

◆ _lookupFileSize() [2/2]

ilObjFileAccess::_lookupFileSize (   $a_id)

lookup size

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

45 {
46 global $ilDB;
47
48 $q = "SELECT * FROM file_data WHERE file_id = " . $ilDB->quote($a_id);
49 $r = $ilDB->query($q);
50 $row = $r->fetchRow(ilDBConstants::FETCHMODE_OBJECT);
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 }
static _lookupVersion($a_id)
lookup version

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

+ Here is the call 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.

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);
211 $row = $r->fetchRow(ilDBConstants::FETCHMODE_OBJECT);
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 }

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

+ 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.

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);
245 $row = $r->fetchRow(ilDBConstants::FETCHMODE_OBJECT);
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 }

References $DIC, $ilDB, _getFileExtension(), and ilDBConstants\FETCHMODE_OBJECT.

Referenced by ilObjectXMLWriter\__appendObjectProperties().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _lookupVersion() [1/2]

static ilObjFileAccess::_lookupVersion (   $a_id)
static

lookup version

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

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);
171 $row = $r->fetchRow(ilDBConstants::FETCHMODE_OBJECT);
172
173 $striped = ilUtil::stripSlashes($row->version);
174
175 return $striped > 0 ? $striped : 1;
176 }
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled

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

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

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _lookupVersion() [2/2]

ilObjFileAccess::_lookupVersion (   $a_id)

lookup version

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

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

References $ilDB, and ilDBConstants\FETCHMODE_OBJECT.

◆ _preloadData()

static ilObjFileAccess::_preloadData (   $a_obj_ids,
  $a_ref_ids 
)
static
Parameters
array$a_obj_ids
int[]$a_ref_ids

Reimplemented from ilObjectAccess.

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

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 }

References $DIC.

◆ canBeDelivered()

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

Reimplemented from ilObjectAccess.

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

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 }

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

+ 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.

469 {
470 if (isset(self::$preload_list_gui_data[$a_obj_id])) {
471 return self::$preload_list_gui_data[$a_obj_id];
472 }
473 }

Referenced by ilObjFileListGUI\getProperties().

+ 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 files: