function pieform_element_rolepermissions_get_value(Pieform $form, $element) { /*{{{*/ if (isset($element['value'])) { return $element['value']; } if (isset($element['defaultvalue'])) { $value = $element['defaultvalue']; } else { $value = group_get_default_artefact_permissions($element['group']); } if ($form->is_submitted()) { $global = $form->get_property('method') == 'get' ? $_GET : $_POST; $prefix = $form->get_name() . '_' . $element['name'] . '_p'; foreach ($value as $r => $perms) { foreach (array_keys(get_object_vars($perms)) as $p) { if ($r != 'admin') { $value[$r]->{$p} = param_boolean($prefix . '_' . $r . '_' . $p); } } } } return $value; }
function pieform_element_filebrowser_view_group_folder($group, $folder) { global $USER; if ($folder) { if (!$folder instanceof ArtefactTypeFolder) { $folder = new ArtefactTypeFolder($folder); } return $USER->can_view_artefact($folder); } require_once get_config('libroot') . 'group.php'; // Group root directory: use default grouptype artefact permissions if (!($role = group_user_access($group))) { return false; } $permissions = group_get_default_artefact_permissions($group); return $permissions[$role]->view; }
private function load_rolepermissions() { if (!$this->group) { return; } $records = get_records_array('artefact_access_role', 'artefact', $this->get('id')); if ($records) { $this->rolepermissions = array(); foreach ($records as $r) { $this->rolepermissions[$r->role] = (object) array('view' => (bool) $r->can_view, 'edit' => (bool) $r->can_edit, 'republish' => (bool) $r->can_republish); } } else { $this->rolepermissions = group_get_default_artefact_permissions($this->group); } }
function pieform_element_filebrowser_move(Pieform $form, $element, $data) { global $USER; $artefactid = $data['artefact']; // Artefact being moved $newparentid = $data['newparent']; // Folder to move it to try { $artefact = artefact_instance_from_id($artefactid); } catch (ArtefactNotFoundException $e) { $result = array('error' => true, 'message' => get_string('movingfailed', 'artefact.file'), 'newlist' => pieform_element_filebrowser_build_filelist($form, $element, $data['folder'])); return $result; } if (!$USER->can_edit_artefact($artefact)) { return array('error' => true, 'message' => get_string('movefailednotowner', 'artefact.file')); } if (!in_array($artefact->get('artefacttype'), PluginArtefactFile::get_artefact_types())) { return array('error' => true, 'message' => get_string('movefailednotfileartefact', 'artefact.file')); } if ($newparentid > 0) { if ($newparentid == $artefactid) { return array('error' => true, 'message' => get_string('movefaileddestinationinartefact', 'artefact.file')); } if ($newparentid == $artefact->get('parent')) { return array('error' => false, 'message' => get_string('filealreadyindestination', 'artefact.file')); } try { $newparent = artefact_instance_from_id($newparentid); } catch (ArtefactNotFoundException $e) { $parentfolder = $element['folder'] ? $element['folder'] : null; $result = array('error' => true, 'message' => get_string('movingfailed', 'artefact.file'), 'newlist' => pieform_element_filebrowser_build_filelist($form, $element, $data['folder'])); return $result; } if (!$USER->can_edit_artefact($newparent)) { return array('error' => true, 'message' => get_string('movefailednotowner', 'artefact.file')); } else { if ($newparent->get('locked')) { return array('error' => true, 'message' => get_string('cannoteditfoldersubmitted', 'artefact.file')); } } $group = $artefact->get('group'); if ($group && $group !== $newparent->get('group')) { return array('error' => true, 'message' => get_string('movefailednotowner', 'artefact.file')); } if ($newparent->get('artefacttype') != 'folder') { return array('error' => true, 'message' => get_string('movefaileddestinationnotfolder', 'artefact.file')); } $nextparentid = $newparent->get('parent'); while (!empty($nextparentid)) { if ($nextparentid != $artefactid) { $ancestor = artefact_instance_from_id($nextparentid); $nextparentid = $ancestor->get('parent'); } else { return array('error' => true, 'message' => get_string('movefaileddestinationinartefact', 'artefact.file')); } } } else { // $newparentid === 0 if ($artefact->get('parent') == null) { return array('error' => false, 'message' => get_string('filealreadyindestination', 'artefact.file')); } $group = $artefact->get('group'); if ($group) { // Use default grouptype artefact permissions to check if the // user can move a file to the group's root directory require_once get_config('libroot') . 'group.php'; $permissions = group_get_default_artefact_permissions($group); if (!$permissions[group_user_access($group)]->edit) { return array('error' => true, 'message' => get_string('movefailednotowner', 'artefact.file')); } } $newparentid = null; } if ($oldparentid = $artefact->get('parent')) { $oldparent = artefact_instance_from_id($oldparentid); if ($oldparent->get('locked')) { return array('error' => true, 'message' => get_string('cannotremovefromsubmittedfolder', 'artefact.file')); } } if ($artefact->move($newparentid)) { return array('error' => false, 'newlist' => pieform_element_filebrowser_build_filelist($form, $element, $data['folder'])); } return array('error' => true, 'message' => get_string('movefailed', 'artefact.file')); }