// ######################################################################## // ######################### START MAIN SCRIPT ############################ // ######################################################################## print_cp_header($vbphrase['project_permissions']); if (empty($_REQUEST['do'])) { $_REQUEST['do'] = 'list'; } $issuetype_options = array(); $types = $db->query_read("\n\tSELECT *\n\tFROM " . TABLE_PREFIX . "pt_issuetype\n\tORDER BY displayorder\n"); while ($type = $db->fetch_array($types)) { $issuetype_options["{$type['issuetypeid']}"] = $vbphrase["issuetype_{$type['issuetypeid']}_singular"]; } // ######################################################################## if ($_POST['do'] == 'update') { $vbulletin->input->clean_array_gpc('r', array('usergroupid' => TYPE_UINT, 'projectid' => TYPE_UINT, 'permissions' => TYPE_ARRAY, 'ugpermissions' => TYPE_ARRAY_UINT, 'original' => TYPE_ARRAY, 'revert' => TYPE_ARRAY_UINT, 'force' => TYPE_ARRAY_UINT)); $vbulletin->pt_bitfields = build_project_bitfields(); require_once DIR . '/includes/functions_misc.php'; // figure out what the permission columns are, // so we can put in entries for any groups that don't have permissions $default_perms = array(); $perm_fields = $db->query_read("\n\t\tSHOW COLUMNS FROM " . TABLE_PREFIX . "pt_projectpermission\n\t\tLIKE '%permissions'\n\t"); while ($perm_field = $db->fetch_array($perm_fields)) { $default_perms[str_replace('permissions', '', $perm_field['Field'])] = 0; } if ($vbulletin->GPC['projectid']) { $projecttype_options = $db->query_read("\n\t\t\tSELECT *\n\t\t\tFROM " . TABLE_PREFIX . "pt_projecttype\n\t\t\tWHERE projectid = " . $vbulletin->GPC['projectid']); $issuetype_options = array(); while ($issuetype = $db->fetch_array($projecttype_options)) { $issuetype_options["{$issuetype['issuetypeid']}"] = $vbphrase["issuetype_{$issuetype['issuetypeid']}_singular"]; } }
/** * Builds a cache of users into the datastore who meet a criteria. * Accessed as [projectid][issuetypeid][userid] => username. * * @param String Name of the datastore item to update * @param String Function to callback to see if a particular usergroup matches * * @return array Users who met the criteria */ function build_pt_user_list($name, $callback) { global $db, $vbulletin; build_project_permissions(); build_project_bitfields(); $userlist = array(); $usergroups = array(); $usergroup_list = $db->query_read("\r\n\t\tSELECT usergroupid\r\n\t\tFROM " . TABLE_PREFIX . "usergroup\r\n\t"); while ($usergroup = $db->fetch_array($usergroup_list)) { $usergroups[] = $usergroup['usergroupid']; } $projects = $db->query_read("\r\n\t\tSELECT projectid\r\n\t\tFROM " . TABLE_PREFIX . "pt_project\r\n\t\tORDER BY projectid\r\n\t"); while ($project = $db->fetch_array($projects)) { $projectid = $project['projectid']; $userlist["{$projectid}"] = array(); $project_types = array(); $project_types_query = $db->query_read("\r\n\t\t\tSELECT projecttype.issuetypeid\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_projecttype AS projecttype\r\n\t\t\tWHERE projecttype.projectid = {$project['projectid']}\r\n\t\t"); while ($project_type = $db->fetch_array($project_types_query)) { $project_types[] = $project_type['issuetypeid']; } foreach ($project_types as $issuetypeid) { $userlisttype = array(); foreach ($usergroups as $usergroupid) { if (function_exists($callback) and call_user_func($callback, $usergroupid, $projectid, $issuetypeid)) { $userlisttype[] = $usergroupid; } } $userlist["{$projectid}"]["{$issuetypeid}"] = array(); if (!$userlisttype) { continue; } $users = $db->query_read("\r\n\t\t\t\tSELECT user.userid, user.username\r\n\t\t\t\tFROM " . TABLE_PREFIX . "user AS user\r\n\t\t\t\tINNER JOIN " . TABLE_PREFIX . "usergroup AS usergroup ON (user.usergroupid = usergroup.usergroupid)\r\n\t\t\t\tWHERE (user.usergroupid IN (" . implode(',', $userlisttype) . ")\r\n\t\t\t\t\tOR FIND_IN_SET(" . implode(', user.membergroupids) OR FIND_IN_SET(', $userlisttype) . ", user.membergroupids))\r\n\t\t\t\t\tAND (usergroup.genericoptions & " . $vbulletin->bf_ugp_genericoptions['isnotbannedgroup'] . ")\r\n\t\t\t\tORDER BY user.username\r\n\t\t\t"); while ($user = $db->fetch_array($users)) { $userlist["{$projectid}"]["{$issuetypeid}"]["{$user['userid']}"] = $user['username']; } } } build_datastore($name, serialize($userlist), 1); return $userlist; }