Exemplo n.º 1
0
 /**
  * parameter definition for output of get_groups_by_id method
  *
  * Returns description of method result value
  * @return external_multiple_structure
  */
 public static function get_groups_by_id_returns()
 {
     $group_types = group_get_grouptypes();
     $group_edit_roles = array_keys(group_get_editroles_options());
     return new external_multiple_structure(new external_single_structure(array('id' => new external_value(PARAM_NUMBER, 'ID of the group'), 'name' => new external_value(PARAM_RAW, 'Group name'), 'shortname' => new external_value(PARAM_RAW, 'Group shortname for API only controlled groups'), 'description' => new external_value(PARAM_NOTAGS, 'Group description'), 'institution' => new external_value(PARAM_TEXT, 'Mahara institution - required for API controlled groups'), 'grouptype' => new external_value(PARAM_ALPHANUMEXT, 'Group type: ' . implode(',', $group_types)), 'category' => new external_value(PARAM_TEXT, 'Group category - the title of an existing group category'), 'editroles' => new external_value(PARAM_ALPHANUMEXT, 'Edit roles allowed: ' . implode(',', $group_edit_roles)), 'open' => new external_value(PARAM_INTEGER, 'Boolean 1/0 open - Users can join the group without approval from group administrators'), 'controlled' => new external_value(PARAM_INTEGER, 'Boolean 1/0 controlled - Group administrators can add users to the group without their consent, and members cannot choose to leave'), 'request' => new external_value(PARAM_INTEGER, 'Boolean 1/0 request - Users can send membership requests to group administrators'), 'submitpages' => new external_value(PARAM_INTEGER, 'Boolean 1/0 submitpages - Members can submit pages to the group'), 'public' => new external_value(PARAM_INTEGER, 'Boolean 1/0 public group'), 'viewnotify' => new external_value(PARAM_INTEGER, 'Boolean 1/0 for Shared page notifications'), 'usersautoadded' => new external_value(PARAM_INTEGER, 'Boolean 1/0 for auto-adding users'), 'members' => new external_multiple_structure(new external_single_structure(array('id' => new external_value(PARAM_NUMBER, 'member user Id'), 'username' => new external_value(PARAM_RAW, 'member username'), 'role' => new external_value(PARAM_ALPHANUMEXT, 'member role: admin, ')), 'Group membership')))));
 }
Exemplo n.º 2
0
/**
 * Returns a list of grouptype options to be used in the edit
 * group drop-down.
 */
function group_get_grouptype_options($currentgrouptype = null)
{
    $groupoptions = array();
    $grouptypes = group_get_grouptypes();
    $enabled = array_map(create_function('$a', 'return $a->name;'), plugins_installed('grouptype'));
    if (is_null($currentgrouptype) || in_array($currentgrouptype, $enabled)) {
        $grouptypes = array_intersect($enabled, $grouptypes);
    }
    foreach ($grouptypes as $grouptype) {
        safe_require('grouptype', $grouptype);
        if (call_static_method('GroupType' . $grouptype, 'can_be_created_by_user')) {
            $roles = array();
            foreach (call_static_method('GroupType' . $grouptype, 'get_roles') as $role) {
                $roles[] = get_string($role, 'grouptype.' . $grouptype);
            }
            $groupoptions[$grouptype] = get_string('name', 'grouptype.' . $grouptype) . ': ' . join(', ', $roles);
        }
    }
    return $groupoptions;
}
Exemplo n.º 3
0
function editaccess_submit(Pieform $form, $values)
{
    global $SESSION, $institution, $collections, $views, $view;
    if ($values['accesslist']) {
        $dateformat = get_string('strftimedatetimeshort');
        foreach ($values['accesslist'] as &$item) {
            if (!empty($item['startdate'])) {
                $item['startdate'] = ptimetotime(strptime($item['startdate'], $dateformat));
            }
            if (!empty($item['stopdate'])) {
                $item['stopdate'] = ptimetotime(strptime($item['stopdate'], $dateformat));
            }
        }
    }
    $viewconfig = array('startdate' => $values['startdate'], 'stopdate' => $values['stopdate'], 'template' => (int) $values['template'], 'retainview' => isset($values['retainview']) ? (int) $values['retainview'] : 0, 'allowcomments' => (int) $values['allowcomments'], 'approvecomments' => (int) ($values['allowcomments'] && $values['approvecomments']), 'accesslist' => $values['accesslist']);
    $toupdate = array();
    if ($institution) {
        if (isset($values['copynewuser'])) {
            $viewconfig['copynewuser'] = (int) $values['copynewuser'];
        }
        if ($institution == 'mahara') {
            $createfor = array();
            foreach (group_get_grouptypes() as $grouptype) {
                if ($values['copyfornewgroups_' . $grouptype]) {
                    $createfor[] = $grouptype;
                }
            }
            $viewconfig['copynewgroups'] = $createfor;
        }
    }
    if (isset($values['collections'])) {
        foreach ($values['collections'] as $cid) {
            if (!isset($collections[$cid])) {
                throw new UserException(get_string('editaccessinvalidviewset', 'view'));
            }
            $toupdate = array_merge($toupdate, array_keys($collections[$cid]['views']));
        }
    }
    if (isset($values['views'])) {
        foreach ($values['views'] as $viewid) {
            if (!isset($views[$viewid])) {
                throw new UserException(get_string('editaccessinvalidviewset', 'view'));
            }
            $toupdate[] = $viewid;
        }
    } else {
        if ($view->get('type') == 'profile') {
            // Force default Advanced options
            $felements = $form->get_property('elements');
            if (!empty($felements['more']['elements'])) {
                foreach (array_keys($felements['more']['elements']) as $ename) {
                    if (property_exists($view, $ename)) {
                        $viewconfig[$ename] = $view->get($ename);
                    }
                }
            }
            $toupdate[] = $view->get('id');
        }
    }
    if (!empty($toupdate)) {
        View::update_view_access($viewconfig, $toupdate);
        if ($view->get('type') == 'profile') {
            // Ensure the user's institutions are still added to the access list
            $view->add_owner_institution_access();
            if (get_config('loggedinprofileviewaccess')) {
                // Force logged-in user access
                $viewaccess = new stdClass();
                $viewaccess->accesstype = 'loggedin';
                $view->add_access($viewaccess);
            }
        }
    }
    $SESSION->add_ok_msg(get_string('updatedaccessfornumviews', 'view', count($toupdate)));
    if ($view->get('owner')) {
        redirect('/view/share.php');
    }
    if ($view->get('group')) {
        redirect(get_config('wwwroot') . '/group/shareviews.php?group=' . $view->get('group'));
    }
    if ($view->get('institution')) {
        redirect(get_config('wwwroot') . '/view/institutionshare.php?institution=' . $view->get('institution'));
    }
    $view->post_edit_redirect();
}
Exemplo n.º 4
0
 /**
  * Create a test group
  * @param array $record
  * @throws ErrorException if creating failed
  * @return int new group id
  */
 public function create_group($record)
 {
     // Data validation
     $record['name'] = trim($record['name']);
     if ($ids = get_records_sql_array('SELECT id FROM {group} WHERE LOWER(TRIM(name)) = ?', array(strtolower($record['name'])))) {
         if (count($ids) > 1 || $ids[0]->id != $group_data->id) {
             throw new SystemException("Invalid group name '" . $record['name'] . "'. " . get_string('groupalreadyexists', 'group'));
         }
     }
     $record['owner'] = trim($record['owner']);
     $ids = get_records_sql_array('SELECT id FROM {usr} WHERE LOWER(TRIM(username)) = ?', array(strtolower($record['owner'])));
     if (!$ids || count($ids) > 1) {
         throw new SystemException("Invalid group owner '" . $record['owner'] . "'. The username does not exist or duplicated");
     }
     $members = array($ids[0]->id => 'admin');
     if (!empty($record['members'])) {
         foreach (explode(',', $record['members']) as $membername) {
             $ids = get_records_sql_array('SELECT id FROM {usr} WHERE LOWER(TRIM(username)) = ?', array(strtolower(trim($membername))));
             if (!$ids || count($ids) > 1) {
                 throw new SystemException("Invalid group member '" . $membername . "'. The username does not exist or duplicated");
             }
             $members[$ids[0]->id] = 'member';
         }
     }
     if (!empty($record['staff'])) {
         foreach (explode(',', $record['staff']) as $membername) {
             $ids = get_records_sql_array('SELECT id FROM {usr} WHERE LOWER(TRIM(username)) = ?', array(strtolower(trim($membername))));
             if (!$ids || count($ids) > 1) {
                 throw new SystemException("Invalid group staff '" . $membername . "'. The username does not exist or duplicated");
             }
             $members[$ids[0]->id] = 'staff';
         }
     }
     if (!empty($record['admins'])) {
         foreach (explode(',', $record['admins']) as $membername) {
             $ids = get_records_sql_array('SELECT id FROM {usr} WHERE LOWER(TRIM(username)) = ?', array(strtolower(trim($membername))));
             if (!$ids || count($ids) > 1) {
                 throw new SystemException("Invalid group admin '" . $membername . "'. The username does not exist or duplicated");
             }
             $members[$ids[0]->id] = 'admin';
         }
     }
     $availablegrouptypes = group_get_grouptypes();
     if (!in_array($record['grouptype'], $availablegrouptypes)) {
         throw new SystemException("Invalid grouptype '" . $record['grouptype'] . "'. This grouptype does not exist.\n" . "The available grouptypes are " . join(', ', $availablegrouptypes));
     }
     $availablegroupeditroles = array_keys(group_get_editroles_options());
     if (!in_array($record['editroles'], $availablegroupeditroles)) {
         throw new SystemException("Invalid group editroles '" . $record['editroles'] . "'. This edit role does not exist.\n" . "The available group editroles are " . join(', ', $availablegroupeditroles));
     }
     if (!empty($record['open'])) {
         if (!empty($record['controlled'])) {
             throw new SystemException('Invalid group membership setting. ' . get_string('membershipopencontrolled', 'group'));
         }
         if (!empty($record['request'])) {
             throw new SystemException('Invalid group membership setting. ' . get_string('membershipopenrequest', 'group'));
         }
     }
     if (!empty($record['invitefriends']) && !empty($record['suggestfriends'])) {
         throw new SystemException('Invalid friend invitation setting. ' . get_string('suggestinvitefriends', 'group'));
     }
     if (!empty($record['suggestfriends']) && empty($record['open']) && empty($record['request'])) {
         throw new SystemException('Invalid friend invitation setting. ' . get_string('suggestfriendsrequesterror', 'group'));
     }
     if (!empty($record['editwindowstart']) && !empty($record['editwindowend']) && $record['editwindowstart'] >= $record['editwindowend']) {
         throw new SystemException('Invalid group editability setting. ' . get_string('editwindowendbeforestart', 'group'));
     }
     $group_data = array('id' => null, 'name' => $record['name'], 'description' => isset($record['description']) ? $record['description'] : null, 'grouptype' => $record['grouptype'], 'open' => isset($record['open']) ? $record['open'] : 1, 'controlled' => isset($record['controlled']) ? $record['controlled'] : 0, 'request' => isset($record['request']) ? $record['request'] : 0, 'invitefriends' => isset($record['invitefriends']) ? $record['invitefriends'] : 0, 'suggestfriends' => isset($record['suggestfriends']) ? $record['suggestfriends'] : 0, 'category' => null, 'public' => 0, 'usersautoadded' => 0, 'viewnotify' => GROUP_ROLES_ALL, 'submittableto' => isset($record['submittableto']) ? $record['submittableto'] : 0, 'allowarchives' => isset($record['allowarchives']) ? $record['allowarchives'] : 0, 'editroles' => isset($record['editroles']) ? $record['editroles'] : 'all', 'hidden' => 0, 'hidemembers' => 0, 'hidemembersfrommembers' => 0, 'groupparticipationreports' => 0, 'urlid' => null, 'editwindowstart' => isset($record['editwindowstart']) ? $record['editwindowstart'] : null, 'editwindowend' => isset($record['editwindowend']) ? $record['editwindowend'] : null, 'sendnow' => 0, 'feedbacknotify' => GROUP_ROLES_ALL, 'members' => $members);
     // Create a new group
     db_begin();
     $group_data['id'] = group_create($group_data);
     db_commit();
     $this->groupcount++;
     return $group_data['id'];
 }
define('INTERNAL', 1);
define('JSON', 1);
require dirname(dirname(__FILE__)) . '/init.php';
require_once 'group.php';
$data['error'] = false;
$data['message'] = null;
$initialgroups = param_integer_list('initialgroups', array());
$resultgroups = param_integer_list('resultgroups', array());
$userid = param_integer('userid');
$addtype = param_variable('addtype');
// Prevent group membership changing done by ordinary members, Tutors can only
// add members to group and cannot remove anyone. Group admins can do anything.
// With regard to invitation, both admins and tutors can invite people.
$allgroups = array_unique(array_merge($initialgroups, $resultgroups));
$groupdata = get_records_select_assoc('group', 'id IN (' . join(',', array_fill(0, count($allgroups), '?')) . ')', $allgroups);
foreach (group_get_grouptypes() as $grouptype) {
    safe_require('grouptype', $grouptype);
}
foreach ($allgroups as $groupid) {
    if (!($loggedinrole = group_user_access($groupid))) {
        json_reply('local', get_string('accessdenied', 'error'));
    }
    if ($loggedinrole == 'admin') {
        continue;
    }
    if (!in_array($loggedinrole, call_static_method('GroupType' . $groupdata[$groupid]->grouptype, 'get_view_assessing_roles'))) {
        json_reply('local', get_string('accessdenied', 'error'));
    }
    if (group_user_access($groupid, $userid) && in_array($groupid, array_diff($initialgroups, $resultgroups))) {
        json_reply('local', get_string('cantremovememberfromgroup', 'group', hsc($groupdata[$groupid]->name)));
    }
Exemplo n.º 6
0
function editaccess_submit(Pieform $form, $values)
{
    global $SESSION, $view, $new, $institution, $collection;
    if (param_boolean('back')) {
        if (!$collection) {
            redirect('/view/edit.php?id=' . $view->get('id') . '&new=' . $new);
        } else {
            redirect('/collection/views.php?id=' . $collection->get('id') . '&new=' . $new);
        }
    }
    if ($values['accesslist']) {
        $dateformat = get_string('strftimedatetimeshort');
        foreach ($values['accesslist'] as &$item) {
            if (!empty($item['startdate'])) {
                $item['startdate'] = ptimetotime(strptime($item['startdate'], $dateformat));
            }
            if (!empty($item['stopdate'])) {
                $item['stopdate'] = ptimetotime(strptime($item['stopdate'], $dateformat));
            }
        }
    }
    $view->set('startdate', $values['startdate']);
    $view->set('stopdate', $values['stopdate']);
    $istemplate = (int) $values['template'];
    $view->set('template', $istemplate);
    if (isset($values['copynewuser'])) {
        $view->set('copynewuser', (int) ($istemplate && $values['copynewuser']));
    }
    if ($institution == 'mahara') {
        $createfor = array();
        foreach (group_get_grouptypes() as $grouptype) {
            if ($istemplate && $values['copyfornewgroups_' . $grouptype]) {
                $createfor[] = $grouptype;
            }
        }
        $view->set('copynewgroups', $createfor);
    }
    $view->set('allowcomments', (int) $values['allowcomments']);
    if ($values['allowcomments']) {
        $view->set('approvecomments', (int) $values['approvecomments']);
    }
    db_begin();
    $view->commit();
    $view->set_access($values['accesslist']);
    if ($collection) {
        $collection->set_access($view->get('id'));
    }
    db_commit();
    if ($values['new']) {
        $str = $collection ? get_string('collectioncreatedsuccessfully', 'collection') : get_string('viewcreatedsuccessfully', 'view');
    } else {
        $str = $collection ? get_string('collectionaccesseditedsuccessfully', 'collection') : get_string('viewaccesseditedsuccessfully', 'view');
    }
    $SESSION->add_ok_msg($str);
    if (!$collection) {
        $view->post_edit_redirect();
    } else {
        $collection->post_edit_redirect();
    }
}
Exemplo n.º 7
0
/**
 * Returns a list of grouptype & jointype options to be used in create
 * group/edit group drop-downs.
 * 
 * If there is more than one group type with the same join type,
 * prefix the join types with the group type for display.
 */
function group_get_grouptype_options($currentgrouptype = null)
{
    $groupoptions = array();
    $jointypecount = array('open' => 0, 'invite' => 0, 'request' => 0, 'controlled' => 0);
    $grouptypes = group_get_grouptypes();
    $enabled = array_map(create_function('$a', 'return $a->name;'), plugins_installed('grouptype'));
    if (is_null($currentgrouptype) || in_array($currentgrouptype, $enabled)) {
        $grouptypes = array_intersect($enabled, $grouptypes);
    }
    foreach ($grouptypes as $grouptype) {
        safe_require('grouptype', $grouptype);
        if (call_static_method('GroupType' . $grouptype, 'can_be_created_by_user')) {
            $grouptypename = get_string('name', 'grouptype.' . $grouptype);
            foreach (call_static_method('GroupType' . $grouptype, 'allowed_join_types') as $jointype) {
                $jointypecount[$jointype]++;
                $groupoptions['jointype']["{$grouptype}.{$jointype}"] = get_string('membershiptype.' . $jointype, 'group');
                $groupoptions['grouptype']["{$grouptype}.{$jointype}"] = $grouptypename . ': ' . get_string('membershiptype.' . $jointype, 'group');
            }
        }
    }
    $duplicates = array_reduce($jointypecount, create_function('$a, $b', 'return $a || $b > 1;'));
    if ($duplicates) {
        return $groupoptions['grouptype'];
    }
    return $groupoptions['jointype'];
}
Exemplo n.º 8
0
function editaccess_submit(Pieform $form, $values)
{
    global $SESSION, $view, $new, $group, $institution;
    if (param_boolean('back')) {
        redirect('/view/blocks.php?id=' . $view->get('id') . '&new=' . $new);
    }
    $view->set_access($values['accesslist']);
    $view->set('startdate', $values['startdate']);
    $view->set('stopdate', $values['stopdate']);
    $istemplate = (int) $values['template'];
    $view->set('template', $istemplate);
    if (isset($values['copynewuser'])) {
        $view->set('copynewuser', (int) ($istemplate && $values['copynewuser']));
    }
    if ($institution == 'mahara') {
        $createfor = array();
        foreach (group_get_grouptypes() as $grouptype) {
            if ($istemplate && $values['copyfornewgroups_' . $grouptype]) {
                $createfor[] = $grouptype;
            }
        }
        $view->set('copynewgroups', $createfor);
    }
    $view->commit();
    if ($values['new']) {
        $str = get_string('viewcreatedsuccessfully', 'view');
    } else {
        $str = get_string('viewaccesseditedsuccessfully', 'view');
    }
    $SESSION->add_ok_msg($str);
    if ($group) {
        redirect('/view/groupviews.php?group=' . $group);
    }
    if ($institution) {
        redirect('/view/institutionviews.php?institution=' . $institution);
    }
    redirect('/view/');
}