/** * Deletes PT-related user data. Used in the userdata_delete hook. * * @param vB_DataManager_User User DM */ function process_pt_user_delete(&$dataman) { global $vbulletin, $db; // deleting a user, so update the issues and notes appropriately $db->query_write("\r\n\t\tUPDATE " . TABLE_PREFIX . "pt_issue SET\r\n\t\t\tsubmitusername = '******'username']) . "',\r\n\t\t\tsubmituserid = 0\r\n\t\tWHERE submituserid = " . $dataman->existing['userid'] . "\r\n\t"); $db->query_write("\r\n\t\tUPDATE " . TABLE_PREFIX . "pt_issuenote SET\r\n\t\t\tusername = '******'username']) . "',\r\n\t\t\tuserid = 0\r\n\t\tWHERE userid = " . $dataman->existing['userid'] . "\r\n\t"); $db->query_write("\r\n\t\tUPDATE " . TABLE_PREFIX . "pt_issue SET\r\n\t\t\tlastpostuserid = 0\r\n\t\tWHERE lastpostuserid = " . $dataman->existing['userid'] . "\r\n\t"); $db->query_write("\r\n\t\tDELETE FROM " . TABLE_PREFIX . "pt_issueassign\r\n\t\tWHERE userid = " . $dataman->existing['userid']); $db->query_write("\r\n\t\tUPDATE " . TABLE_PREFIX . "pt_issueprivatelastpost SET\r\n\t\t\tlastpostuserid = 0\r\n\t\tWHERE lastpostuserid = " . $dataman->existing['userid'] . "\r\n\t"); $db->query_write("\r\n\t\tDELETE FROM " . TABLE_PREFIX . "pt_issueread\r\n\t\tWHERE userid = " . $dataman->existing['userid']); $db->query_write("\r\n\t\tDELETE FROM " . TABLE_PREFIX . "pt_issuereport\r\n\t\tWHERE userid = " . $dataman->existing['userid'] . "\r\n\t\t\tAND public = 1\r\n\t"); $db->query_write("\r\n\t\tDELETE FROM " . TABLE_PREFIX . "pt_issuereportsubscribe\r\n\t\tWHERE userid = " . $dataman->existing['userid']); $db->query_write("\r\n\t\tDELETE FROM " . TABLE_PREFIX . "pt_issuesubscribe\r\n\t\tWHERE userid = " . $dataman->existing['userid']); $db->query_write("\r\n\t\tDELETE FROM " . TABLE_PREFIX . "pt_projectread\r\n\t\tWHERE userid = " . $dataman->existing['userid']); $db->query_write("\r\n\t\tDELETE FROM " . TABLE_PREFIX . "pt_projecttypesubscribe\r\n\t\tWHERE userid = " . $dataman->existing['userid']); require_once DIR . '/includes/adminfunctions_projecttools.php'; build_assignable_users(); build_pt_user_list('pt_report_users', 'pt_report_user_cache'); }
/** * Additional data to update after a delete call (such as denormalized values in other tables). * * @param boolean Do the query? */ function post_delete($doquery = true) { $projectid = intval($this->fetch_field('projectid')); $db =& $this->registry->db; // project related data $db->query_write("\r\n\t\t\tDELETE FROM " . TABLE_PREFIX . "pt_projecttype\r\n\t\t\tWHERE projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE FROM " . TABLE_PREFIX . "pt_projecttypeprivatelastpost\r\n\t\t\tWHERE projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE FROM " . TABLE_PREFIX . "pt_projectpermission\r\n\t\t\tWHERE projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE FROM " . TABLE_PREFIX . "pt_projectversion\r\n\t\t\tWHERE projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE FROM " . TABLE_PREFIX . "pt_projectversiongroup\r\n\t\t\tWHERE projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE FROM " . TABLE_PREFIX . "pt_projectcategory\r\n\t\t\tWHERE projectid = {$projectid}\r\n\t\t"); // MySQL 4 needs to use the non-aliased tables in multi-table deletes (#23024) $mysqlversion = $db->query_first("SELECT version() AS version"); $include_prefix = version_compare($mysqlversion['version'], '4.1.0', '<'); // clear out all the issue data $db->query_write("\r\n\t\t\tDELETE " . ($include_prefix ? TABLE_PREFIX . 'pt_' : '') . "issueassign\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_issueassign AS issueassign\r\n\t\t\tINNER JOIN " . TABLE_PREFIX . "pt_issue AS issue ON (issue.issueid = issueassign.issueid)\r\n\t\t\tWHERE issue.projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE " . ($include_prefix ? TABLE_PREFIX . 'pt_' : '') . "issueattach\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_issueattach AS issueattach\r\n\t\t\tINNER JOIN " . TABLE_PREFIX . "pt_issue AS issue ON (issue.issueid = issueattach.issueid)\r\n\t\t\tWHERE issue.projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE " . ($include_prefix ? TABLE_PREFIX . 'pt_' : '') . "issuechange\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_issuechange AS issuechange\r\n\t\t\tINNER JOIN " . TABLE_PREFIX . "pt_issue AS issue ON (issue.issueid = issuechange.issueid)\r\n\t\t\tWHERE issue.projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE " . ($include_prefix ? TABLE_PREFIX . 'pt_' : '') . "issuesubscribe\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_issuesubscribe AS issuesubscribe\r\n\t\t\tINNER JOIN " . TABLE_PREFIX . "pt_issue AS issue ON (issue.issueid = issuesubscribe.issueid)\r\n\t\t\tWHERE issue.projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE " . ($include_prefix ? TABLE_PREFIX . 'pt_' : '') . "issuetag\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_issuetag AS issuetag\r\n\t\t\tINNER JOIN " . TABLE_PREFIX . "pt_issue AS issue ON (issue.issueid = issuetag.issueid)\r\n\t\t\tWHERE issue.projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE " . ($include_prefix ? TABLE_PREFIX . 'pt_' : '') . "issuevote\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_issuevote AS issuevote\r\n\t\t\tINNER JOIN " . TABLE_PREFIX . "pt_issue AS issue ON (issue.issueid = issuevote.issueid)\r\n\t\t\tWHERE issue.projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE " . ($include_prefix ? TABLE_PREFIX . 'pt_' : '') . "issuedeletionlog\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_issuedeletionlog AS issuedeletionlog\r\n\t\t\tINNER JOIN " . TABLE_PREFIX . "pt_issue AS issue ON (issue.issueid = issuedeletionlog.primaryid AND issuedeletionlog.type = 'issue')\r\n\t\t\tWHERE issue.projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE " . ($include_prefix ? TABLE_PREFIX . 'pt_' : '') . "issuenote\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_issuenote AS issuenote\r\n\t\t\tINNER JOIN " . TABLE_PREFIX . "pt_issue AS issue ON (issue.issueid = issuenote.issueid)\r\n\t\t\tWHERE issue.projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE " . ($include_prefix ? TABLE_PREFIX . 'pt_' : '') . "issueprivatelastpost\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_issueprivatelastpost AS issueprivatelastpost\r\n\t\t\tINNER JOIN " . TABLE_PREFIX . "pt_issue AS issue ON (issue.issueid = issueprivatelastpost.issueid)\r\n\t\t\tWHERE issue.projectid = {$projectid}\r\n\t\t"); $db->query_write("\r\n\t\t\tDELETE FROM " . TABLE_PREFIX . "pt_issue\r\n\t\t\tWHERE projectid = {$projectid}\r\n\t\t"); require_once DIR . '/includes/adminfunctions_projecttools.php'; build_project_cache(); build_version_cache(); build_assignable_users(); // builds bitfields and perms as well build_pt_user_list('pt_report_users', 'pt_report_user_cache'); $this->update_project_forum_setting(false); ($hook = vBulletinHook::fetch_hook('pt_projectdata_delete')) ? eval($hook) : false; return true; }
} } if (!$vbulletin->GPC['projectid']) { // updating usergroup-level permissions $newpermval = 0; foreach ($vbulletin->GPC['ugpermissions'] as $bitval => $yesno) { if ($yesno) { $newpermval += $bitval; } } $db->query_write("\n\t\t\tUPDATE " . TABLE_PREFIX . "usergroup SET\n\t\t\t\tptpermissions = {$newpermval}\n\t\t\tWHERE usergroupid = " . $vbulletin->GPC['usergroupid']); require_once DIR . '/includes/functions_databuild.php'; build_forum_permissions(); } //build_project_permissions(); build_assignable_users(); build_pt_user_list('pt_report_users', 'pt_report_user_cache'); define('CP_REDIRECT', 'projectpermission.php?do=list' . ($vbulletin->GPC['projectid'] ? '&projectid=' . $vbulletin->GPC['projectid'] : '')); print_stop_message('project_permissions_saved'); } // ######################################################################## if ($_REQUEST['do'] == 'edit') { $vbulletin->input->clean_array_gpc('r', array('usergroupid' => TYPE_UINT, 'projectid' => TYPE_UINT)); $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; } $global_permissions = array(); foreach (array_keys($issuetype_options) as $typeid) { $global_permissions["{$typeid}"] = $default_perms;
/** * Builds the cache of projects into $vbulletin->pt_projects. * Accessed as [projectid] => <info, including [types]>. * Automatically builds categories, permissions, and assignable users. * * @return array Project cache */ function build_project_cache() { global $vbulletin, $db; $cache = array(); $projects = $db->query_read("\r\n\t\tSELECT *\r\n\t\tFROM " . TABLE_PREFIX . "pt_project\r\n\t\tORDER BY displayorder\r\n\t"); while ($project = $db->fetch_array($projects)) { $project_types = array(); $project_types_query = $db->query_read("\r\n\t\t\tSELECT issuetypeid, startstatusid\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']}"] = $project_type['startstatusid']; } $project['types'] = $project_types; $cache["{$project['projectid']}"] = $project; } build_datastore('pt_projects', serialize($cache), 1); $vbulletin->pt_projects = $cache; build_project_category_cache(); build_project_permissions(); build_assignable_users(); build_pt_user_list('pt_report_users', 'pt_report_user_cache'); return $cache; }