/** * Delete a group, called after all of its torrents have been deleted. * IMPORTANT: Never call this unless you're certain the group is no longer used by any torrents * * @param int $GroupID */ public static function delete_group($GroupID) { $QueryID = G::$DB->get_query_id(); Misc::write_log("Group {$GroupID} automatically deleted (No torrents have this group)."); G::$DB->query("\n\t\t\tSELECT CategoryID\n\t\t\tFROM torrents_group\n\t\t\tWHERE ID = '{$GroupID}'"); list($Category) = G::$DB->next_record(); if ($Category == 1) { G::$Cache->decrement('stats_album_count'); } G::$Cache->decrement('stats_group_count'); // Collages G::$DB->query("\n\t\t\tSELECT CollageID\n\t\t\tFROM collages_torrents\n\t\t\tWHERE GroupID = '{$GroupID}'"); if (G::$DB->has_results()) { $CollageIDs = G::$DB->collect('CollageID'); G::$DB->query("\n\t\t\t\tUPDATE collages\n\t\t\t\tSET NumTorrents = NumTorrents - 1\n\t\t\t\tWHERE ID IN (" . implode(', ', $CollageIDs) . ')'); G::$DB->query("\n\t\t\t\tDELETE FROM collages_torrents\n\t\t\t\tWHERE GroupID = '{$GroupID}'"); foreach ($CollageIDs as $CollageID) { G::$Cache->delete_value("collage_{$CollageID}"); } G::$Cache->delete_value("torrent_collages_{$GroupID}"); } // Artists // Collect the artist IDs and then wipe the torrents_artist entry G::$DB->query("\n\t\t\tSELECT ArtistID\n\t\t\tFROM torrents_artists\n\t\t\tWHERE GroupID = {$GroupID}"); $Artists = G::$DB->collect('ArtistID'); G::$DB->query("\n\t\t\tDELETE FROM torrents_artists\n\t\t\tWHERE GroupID = '{$GroupID}'"); foreach ($Artists as $ArtistID) { if (empty($ArtistID)) { continue; } // Get a count of how many groups or requests use the artist ID G::$DB->query("\n\t\t\t\tSELECT COUNT(ag.ArtistID)\n\t\t\t\tFROM artists_group AS ag\n\t\t\t\t\tLEFT JOIN requests_artists AS ra ON ag.ArtistID = ra.ArtistID\n\t\t\t\tWHERE ra.ArtistID IS NOT NULL\n\t\t\t\t\tAND ag.ArtistID = '{$ArtistID}'"); list($ReqCount) = G::$DB->next_record(); G::$DB->query("\n\t\t\t\tSELECT COUNT(ag.ArtistID)\n\t\t\t\tFROM artists_group AS ag\n\t\t\t\t\tLEFT JOIN torrents_artists AS ta ON ag.ArtistID = ta.ArtistID\n\t\t\t\tWHERE ta.ArtistID IS NOT NULL\n\t\t\t\t\tAND ag.ArtistID = '{$ArtistID}'"); list($GroupCount) = G::$DB->next_record(); if ($ReqCount + $GroupCount == 0) { //The only group to use this artist Artists::delete_artist($ArtistID); } else { //Not the only group, still need to clear cache G::$Cache->delete_value("artist_groups_{$ArtistID}"); } } // Requests G::$DB->query("\n\t\t\tSELECT ID\n\t\t\tFROM requests\n\t\t\tWHERE GroupID = '{$GroupID}'"); $Requests = G::$DB->collect('ID'); G::$DB->query("\n\t\t\tUPDATE requests\n\t\t\tSET GroupID = NULL\n\t\t\tWHERE GroupID = '{$GroupID}'"); foreach ($Requests as $RequestID) { G::$Cache->delete_value("request_{$RequestID}"); } // comments Comments::delete_page('torrents', $GroupID); G::$DB->query("\n\t\t\tDELETE FROM torrents_group\n\t\t\tWHERE ID = '{$GroupID}'"); G::$DB->query("\n\t\t\tDELETE FROM torrents_tags\n\t\t\tWHERE GroupID = '{$GroupID}'"); G::$DB->query("\n\t\t\tDELETE FROM torrents_tags_votes\n\t\t\tWHERE GroupID = '{$GroupID}'"); G::$DB->query("\n\t\t\tDELETE FROM bookmarks_torrents\n\t\t\tWHERE GroupID = '{$GroupID}'"); G::$DB->query("\n\t\t\tDELETE FROM wiki_torrents\n\t\t\tWHERE PageID = '{$GroupID}'"); G::$Cache->delete_value("torrents_details_{$GroupID}"); G::$Cache->delete_value("torrent_group_{$GroupID}"); G::$Cache->delete_value("groups_artists_{$GroupID}"); G::$DB->set_query_id($QueryID); }
if (!is_number($CollageID) || !$CollageID) { error(404); } $DB->query("\n\tSELECT Name, CategoryID, UserID\n\tFROM collages\n\tWHERE ID = '{$CollageID}'"); list($Name, $CategoryID, $UserID) = $DB->next_record(MYSQLI_NUM, false); if (!check_perms('site_collages_delete') && $UserID !== $LoggedUser['ID']) { error(403); } $Reason = trim($_POST['reason']); if (!$Reason) { error('You must enter a reason!'); } $DB->query("\n\tSELECT GroupID\n\tFROM collages_torrents\n\tWHERE CollageID = '{$CollageID}'"); while (list($GroupID) = $DB->next_record()) { $Cache->delete_value("torrents_details_{$GroupID}"); $Cache->delete_value("torrent_collages_{$GroupID}"); $Cache->delete_value("torrent_collages_personal_{$GroupID}"); } //Personal collages have CategoryID 0 if ($CategoryID == 0) { $DB->query("\n\t\tDELETE FROM collages\n\t\tWHERE ID = '{$CollageID}'"); $DB->query("\n\t\tDELETE FROM collages_torrents\n\t\tWHERE CollageID = '{$CollageID}'"); Comments::delete_page('collages', $CollageID); } else { $DB->query("\n\t\tUPDATE collages\n\t\tSET Deleted = '1'\n\t\tWHERE ID = '{$CollageID}'"); Subscriptions::flush_subscriptions('collages', $CollageID); Subscriptions::flush_quote_notifications('collages', $CollageID); } Misc::write_log("Collage {$CollageID} ({$Name}) was deleted by " . $LoggedUser['Username'] . ": {$Reason}"); $Cache->delete_value("collage_{$CollageID}"); header('Location: collages.php');
error(403); } $CategoryName = $Categories[$CategoryID - 1]; //Do we need to get artists? if ($CategoryName === 'Music') { $ArtistForm = Requests::get_artists($RequestID); $ArtistName = Artists::display_artists($ArtistForm, false, true); $FullName = $ArtistName . $Title; } else { $FullName = $Title; } // Delete request, votes and tags $DB->query("DELETE FROM requests WHERE ID = '{$RequestID}'"); $DB->query("DELETE FROM requests_votes WHERE RequestID = '{$RequestID}'"); $DB->query("DELETE FROM requests_tags WHERE RequestID = '{$RequestID}'"); Comments::delete_page('requests', $RequestID); $DB->query("\n\tSELECT ArtistID\n\tFROM requests_artists\n\tWHERE RequestID = {$RequestID}"); $RequestArtists = $DB->to_array(); foreach ($RequestArtists as $RequestArtist) { $Cache->delete_value("artists_requests_{$RequestArtist}"); } $DB->query("\n\tDELETE FROM requests_artists\n\tWHERE RequestID = '{$RequestID}'"); $Cache->delete_value("request_artists_{$RequestID}"); G::$DB->query("\n\tREPLACE INTO sphinx_requests_delta\n\t\t(ID)\n\tVALUES\n\t\t({$RequestID})"); if ($UserID != $LoggedUser['ID']) { Misc::send_pm($UserID, 0, 'A request you created has been deleted', "The request \"{$FullName}\" was deleted by [url=" . site_url() . 'user.php?id=' . $LoggedUser['ID'] . ']' . $LoggedUser['Username'] . '[/url] for the reason: [quote]' . $_POST['reason'] . '[/quote]'); } Misc::write_log("Request {$RequestID} ({$FullName}) was deleted by user " . $LoggedUser['ID'] . ' (' . $LoggedUser['Username'] . ') for the reason: ' . $_POST['reason']); $Cache->delete_value("request_{$RequestID}"); $Cache->delete_value("request_votes_{$RequestID}"); if ($GroupID) {
/** * Deletes an artist and their requests, wiki, and tags. * Does NOT delete their torrents. * * @param int $ArtistID */ public static function delete_artist($ArtistID) { $QueryID = G::$DB->get_query_id(); G::$DB->query("\n\t\t\tSELECT Name\n\t\t\tFROM artists_group\n\t\t\tWHERE ArtistID = " . $ArtistID); list($Name) = G::$DB->next_record(MYSQLI_NUM, false); // Delete requests G::$DB->query("\n\t\t\tSELECT RequestID\n\t\t\tFROM requests_artists\n\t\t\tWHERE ArtistID = {$ArtistID}\n\t\t\t\tAND ArtistID != 0"); $Requests = G::$DB->to_array(); foreach ($Requests as $Request) { list($RequestID) = $Request; G::$DB->query('DELETE FROM requests WHERE ID=' . $RequestID); G::$DB->query('DELETE FROM requests_votes WHERE RequestID=' . $RequestID); G::$DB->query('DELETE FROM requests_tags WHERE RequestID=' . $RequestID); G::$DB->query('DELETE FROM requests_artists WHERE RequestID=' . $RequestID); } // Delete artist G::$DB->query('DELETE FROM artists_group WHERE ArtistID=' . $ArtistID); G::$DB->query('DELETE FROM artists_alias WHERE ArtistID=' . $ArtistID); G::$Cache->decrement('stats_artist_count'); // Delete wiki revisions G::$DB->query('DELETE FROM wiki_artists WHERE PageID=' . $ArtistID); // Delete tags G::$DB->query('DELETE FROM artists_tags WHERE ArtistID=' . $ArtistID); // Delete artist comments, subscriptions and quote notifications Comments::delete_page('artist', $ArtistID); G::$Cache->delete_value('artist_' . $ArtistID); G::$Cache->delete_value('artist_groups_' . $ArtistID); // Record in log if (!empty(G::$LoggedUser['Username'])) { $Username = G::$LoggedUser['Username']; } else { $Username = '******'; } Misc::write_log("Artist {$ArtistID} ({$Name}) was deleted by {$Username}"); G::$DB->set_query_id($QueryID); }