1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
<?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(): string
{
return _('Ressourcen-Dateiordner');
}
public static function availableInRange(SimpleORMap|string $range_id_or_object, string $user_id): bool
{
//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(string $role = Icon::DEFAULT_ROLE): Icon
{
return Icon::create('resource', $role);
}
public function isVisible(string $user_id): bool
{
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(string $user_id): bool
{
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(string $user_id): bool
{
$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(string $user_id): bool
{
//Thou shalt not edit ResourceFolder folder types!
return false;
}
public function isSubfolderAllowed(string $user_id): bool
{
//Furthermore, thou shalt not create subfolders in a Resource folder!
return false;
}
public function getSubfolder()
{
//No subfolders allowed, resulting in:
return [];
}
public function setDataFromEditTemplate(array|ArrayAccess $folderdata): FolderType|MessageBox
{
return MessageBox::error(
_('Ressourcenordner dürfen nicht geändert werden!')
);
}
public function createSubfolder(FolderType $foldertype): ?FolderType
{
//No subfolders allowed, resulting in:
return null;
}
public function deleteSubfolder(string $subfolder_id): bool
{
//No subfolders allowed, resulting in:
return false;
}
public function isFileDownloadable(FileRef $file_ref, string $user_id): bool
{
return $this->isReadable($user_id);
}
public function isFileEditable(FileRef $file_ref, string $user_id): bool
{
return $this->isWritable($user_id);
}
public function isFileWritable(FileRef $file_ref, string $user_id): bool
{
return $this->isWritable($user_id);
}
}
|