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;
}
示例#2
0
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;
}
示例#3
0
文件: lib.php 项目: kienv/mahara
 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);
     }
 }
示例#4
0
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'));
}