diff options
| author | Philipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de> | 2024-09-24 10:53:31 +0200 |
|---|---|---|
| committer | Philipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de> | 2024-09-24 10:53:31 +0200 |
| commit | 4459dd7917f4d1c34f40bb68f0e991e9c3d53e4c (patch) | |
| tree | 5c07151ae61276d334e88f6309c30d439a85c12e /lib/filesystem/ResourceFolder.php | |
| parent | da0022e5c1abbf9825ae76debaabdff7e8623bb4 (diff) | |
| parent | 97a188592c679890a25c37ab78463add76a52ff7 (diff) | |
Merge branch 'main' into issue-3911issue-3911
Diffstat (limited to 'lib/filesystem/ResourceFolder.php')
| -rw-r--r-- | lib/filesystem/ResourceFolder.php | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/lib/filesystem/ResourceFolder.php b/lib/filesystem/ResourceFolder.php new file mode 100644 index 0000000..ce7b216 --- /dev/null +++ b/lib/filesystem/ResourceFolder.php @@ -0,0 +1,149 @@ +<?php + + +/** + * This is a folder type for files associated with Resource objects. + * Its purpose is to allow users to link or add relevant files + * to a Resource. + * An an example, one could attach a fire escape plan to a Building resource. + */ +class ResourceFolder extends StandardFolder +{ + public static function getTypeName() + { + return _('Ressourcen-Dateiordner'); + } + + public static function availableInRange($range_id_or_object, $user_id) + { + //A resource folder is not available for course, user, institute + //or message objects. Only when a range_id of a resource is given + //or a resource object we may return true. + + if ($range_id_or_object instanceof Resource) { + //$range_id_or_object contains a Resource object. + return true; + } else { + //$range_id_or_object contains an ID. + //If we find a resource object for that ID + //we can return true, otherwise we return false. + return Resource::exists($range_id_or_object); + } + } + + public function getIcon($role = Icon::DEFAULT_ROLE) + { + return Icon::create('resource', $role); + } + + public function isVisible($user_id) + { + if ($user_id == 'nobody') { + return false; + } + //Get the resource object: + $resource = Resource::find($this->range_id); + $user = User::find($user_id); + + if (($resource instanceof Resource) && ($user instanceof User)) { + return true; + } elseif ($user instanceof User) { + //Check global permissions: + return ResourceManager::userHasGlobalPermission( + $user, + 'admin' + ); + } + return false; + } + + public function isReadable($user_id) + { + if ($user_id == 'nobody') { + return false; + } + //Get the resource object: + $resource = Resource::find($this->range_id); + $user = User::find($user_id); + + if (($resource instanceof Resource) && ($user instanceof User)) { + return true; + } elseif ($user instanceof User) { + //Check global permissions: + return ResourceManager::userHasGlobalPermission( + $user, + 'admin' + ); + } + return false; + } + + public function isWritable($user_id) + { + $user = User::find($user_id); + + //Check global permissions: The user has to be + //a global resource admin or a root user. + return ResourceManager::userHasGlobalPermission( + $user, + 'admin' + ); + } + + public function isEditable($user_id) + { + //Thou shalt not edit ResourceFolder folder types! + return false; + } + + public function isSubfolderAllowed($user_id) + { + //Furthermore, thou shalt not create subfolders in a Resource folder! + return false; + } + + public function getSubfolder() + { + //No subfolders allowed, resulting in: + return []; + } + + public function getEditTemplate() + { + return ''; + } + + public function setDataFromEditTemplate($folderdata) + { + return MessageBox::error( + _('Ressourcenordner dürfen nicht geändert werden!') + ); + } + + public function createSubfolder(FolderType $foldertype) + { + //No subfolders allowed, resulting in: + return null; + } + + public function deleteSubfolder($subfolder_id) + { + //No subfolders allowed, resulting in: + return false; + } + + public function isFileDownloadable($file_ref_id, $user_id) + { + return $this->isReadable($user_id); + } + + public function isFileEditable($file_ref_id, $user_id) + { + return $this->isWritable($user_id); + } + + public function isFileWritable($file_ref_id, $user_id) + { + return $this->isWritable($user_id); + } +} |
