* @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(): string { return _('Gruppenordner'); } public static function availableInRange(SimpleORMap|string $range_id_or_object, string $user_id): bool { $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(string $user_id): bool { 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(string $user_id): bool { 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(string $user_id): bool { 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(string $user_id): bool { 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(string $role = Icon::DEFAULT_ROLE): Icon { $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 \Flexi\Template|null A edit template for a instance of the type GroupFolder */ public function getEditTemplate(): ?\Flexi\Template { $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 FolderType|MessageBox The template with the edited data */ public function setDataFromEditTemplate(array|ArrayAccess $folderdata): FolderType|MessageBox { if ($folderdata['group'] == null){ return MessageBox::error(_('Es wurde keine gültige Gruppe ausgewählt.')); } $this->folderdata['data_content']['group'] = $folderdata['group']; return parent::setDataFromEditTemplate($folderdata); } /** * Returns the description template for a instance of a GroupFolder type * * @return \Flexi\Template|string|null A description template for a instance of the type GroupFolder */ public function getDescriptionTemplate(): \Flexi\Template|string|null { $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; } }