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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
<?php
/**
* CourseGroupFolder.php
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.gruppe
*
* @author Dominik Feldschnieders <dofeldsc@uos.de>
* @copyright 2016 Stud.IP Core-Group
* @license http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
* @category Stud.IP
*/
class CourseGroupFolder extends StandardFolder
{
public static $sorter = 4;
// the id from the associated group
protected $group_id;
// tutor and higher of a course can do everything with this foldertype
protected $must_have_perm = "tutor";
/**
* Returns the name of the GroupFolder type.
*
* @return string the name of the GroupFolder type
*/
public static function getTypeName()
{
return _('Gruppenordner');
}
public static function availableInRange($range_id_or_object, $user_id)
{
$course = Course::toObject($range_id_or_object);
if ($course && !$course->isNew()) {
return Seminar_Perm::get()->have_studip_perm('tutor', $course->id, $user_id) && Statusgruppen::countBySql("range_id = ?" , [$course->id]);
}
return false;
}
/**
* This method check the permission (global and if he is in the group) for a given user
*
* @param string $user_id The User-ID
* @return bool True if user have permission, False otherwise
*/
public function checkPermission($user_id)
{
$group = new Statusgruppen($this->folderdata['data_content']['group']);
return $group->isMember($user_id)
|| ($user_id && is_object($GLOBALS['perm'])
&& $GLOBALS['perm']->have_studip_perm($this->must_have_perm, $this->range_id, $user_id));
}
/**
* Check if this GroupFolder instance is visible for this user or not.
*
* @param string $user_id The User-ID
* @return bool True, if the user is in this group or is the lecturer, false otherwise
*/
public function isVisible($user_id)
{
return $this->checkPermission($user_id);
}
/**
* Check if this GroupFolder instance is readable for this user or not.
*
* @param string $user_id The User-ID
* @return bool True, if the user is in this group or is the lecturer, false otherwise
*/
public function isReadable($user_id)
{
return $this->checkPermission($user_id);
}
/**
* Check if this GroupFolder instance is writable for this user or not.
*
* @param string $user_id The User-ID
* @return bool True, if the user is in this group or is the lecturer, false otherwise
*/
public function isWritable($user_id)
{
return $this->checkPermission($user_id);
}
/**
* Check if a Subfolder can be created.
*
* @return bool True, if the user is in this group or is the lecturer, false otherwise
*/
public function isSubfolderAllowed($user_id)
{
return $this->checkPermission($user_id);
}
/**
* This function returns the suitable Icon for this folder type (GroupFolder)
*
* @return Icon The icon object for this folder type
*/
public function getIcon($role = Icon::DEFAULT_ROLE)
{
$shape = $this->is_empty
? 'folder-group-empty'
: 'folder-group-full';
return Icon::create($shape, $role);
}
/**
* This method returns the special part for the edit template for the folder type GroupFolder
*
* @return mixed A edit template for a instance of the type GroupFolder
*/
public function getEditTemplate()
{
$template = $GLOBALS['template_factory']->open('filesystem/group_folder/edit.php');
$group = Statusgruppen::find($this->folderdata['data_content']['group'] ?? null);
$template->set_attribute('group', $group);
$template->set_attribute('folder', $this);
return $template;
}
/**
* Stores the data which was edited in the edit template
* @return mixed The template with the edited data
*/
public function setDataFromEditTemplate($request)
{
if ($request['group'] == null){
return MessageBox::error(_('Es wurde keine gültige Gruppe ausgewählt.'));
}
$this->folderdata['data_content']['group'] = $request['group'];
return parent::setDataFromEditTemplate($request);
}
/**
* Returns the description template for a instance of a GroupFolder type
*
* @return mixed A description template for a instance of the type GroupFolder
*/
public function getDescriptionTemplate()
{
$group = new Statusgruppen($this->folderdata['data_content']['group'] ?? null);
$template = $GLOBALS['template_factory']->open('filesystem/group_folder/description.php');
$template->type = self::getTypeName();
$template->folder = $this;
$template->groupname = $group->name;
$template->folderdata = $this->folderdata;
return $template;
}
}
|