Gazelle/sections/collages/add_artist.php
2013-05-27 08:00:58 +00:00

142 lines
4.2 KiB
PHP

<?
//NumTorrents is actually the number of things in the collage, the name just isn't generic.
authorize();
include(SERVER_ROOT.'/classes/validate.class.php');
$Val = new VALIDATE;
function add_artist($CollageID, $ArtistID) {
global $Cache, $LoggedUser, $DB;
$DB->query("SELECT MAX(Sort) FROM collages_artists WHERE CollageID='$CollageID'");
list($Sort) = $DB->next_record();
$Sort+=10;
$DB->query("SELECT ArtistID FROM collages_artists WHERE CollageID='$CollageID' AND ArtistID='$ArtistID'");
if ($DB->record_count() == 0) {
$DB->query("INSERT IGNORE INTO collages_artists
(CollageID, ArtistID, UserID, Sort, AddedOn)
VALUES
('$CollageID', '$ArtistID', '$LoggedUser[ID]', '$Sort', '" . sqltime() . "')");
$DB->query("UPDATE collages SET NumTorrents=NumTorrents+1, Updated = '" . sqltime() . "' WHERE ID='$CollageID'");
$Cache->delete_value('collage_'.$CollageID);
$Cache->delete_value('artists_collages_'.$ArtistID);
$Cache->delete_value('artists_collages_personal_'.$ArtistID);
$DB->query("SELECT UserID FROM users_collage_subs WHERE CollageID=$CollageID");
while (list($CacheUserID) = $DB->next_record()) {
$Cache->delete_value('collage_subs_user_new_'.$CacheUserID);
}
}
}
$CollageID = $_POST['collageid'];
if (!is_number($CollageID)) {
error(404);
}
$DB->query("SELECT UserID, CategoryID, Locked, NumTorrents, MaxGroups, MaxGroupsPerUser FROM collages WHERE ID='$CollageID'");
list($UserID, $CategoryID, $Locked, $NumTorrents, $MaxGroups, $MaxGroupsPerUser) = $DB->next_record();
if (!check_perms('site_collages_delete')) {
if ($Locked) {
$Err = "This collage is locked";
}
if ($CategoryID == 0 && $UserID != $LoggedUser['ID']) {
$Err = "You cannot edit someone else's personal collage";
}
if ($MaxGroups > 0 && $NumTorrents >= $MaxGroups) {
$Err = "This collage already holds its maximum allowed number of artists";
}
if (isset($Err)) {
error($Err);
}
}
if ($MaxGroupsPerUser > 0) {
$DB->query("SELECT COUNT(*) FROM collages_artists WHERE CollageID='$CollageID' AND UserID='$LoggedUser[ID]'");
list($GroupsForUser) = $DB->next_record();
if (!check_perms('site_collages_delete') && $GroupsForUser >= $MaxGroupsPerUser) {
error(403);
}
}
if ($_REQUEST['action'] == 'add_artist') {
$URLRegex = '/^https?:\/\/(www\.|ssl\.)?'.preg_quote(NONSSL_SITE_URL, '/').'\/artist\.php\?(page=[0-9]+&)?id=([0-9]+)/i';
$Val->SetFields('url', '1','regex','The URL must be a link to a artist on the site.',array('regex'=>$URLRegex));
$Err = $Val->ValidateForm($_POST);
if ($Err) {
error($Err);
}
$URL = $_POST['url'];
// Get artist ID
$URLRegex = '/artist\.php\?(page=[0-9]+&)?id=([0-9]+)/i';
preg_match($URLRegex, $URL, $Matches);
$ArtistID = $Matches[2];
if (!$ArtistID || (int) $ArtistID == 0) {
error(404);
}
$DB->query("SELECT ArtistID FROM artists_group WHERE ArtistID='$ArtistID'");
list($ArtistID) = $DB->next_record();
if (!$ArtistID) {
error('The artist was not found in the database.');
}
add_artist($CollageID, $ArtistID);
} else {
$URLRegex = '/^https?:\/\/(www\.|ssl\.)?'.NONSSL_SITE_URL.'\/artist\.php\?(page=[0-9]+&)?id=([0-9]+)/i';
$URLs = explode("\n",$_REQUEST['urls']);
$ArtistIDs = array();
$Err = '';
foreach ($URLs as $Key => &$URL) {
$URL = trim($URL);
if ($URL == '') {
unset($URLs[$Key]);
}
}
unset($URL);
if (!check_perms('site_collages_delete')) {
if ($MaxGroups > 0 && ($NumTorrents + count($URLs) > $MaxGroups)) {
$Err = "This collage can only hold $MaxGroups artists.";
}
if ($MaxGroupsPerUser > 0 && ($GroupsForUser + count($URLs) > $MaxGroupsPerUser)) {
$Err = "You may only have $MaxGroupsPerUser artists in this collage.";
}
}
foreach ($URLs as $URL) {
$Matches = array();
if (preg_match($URLRegex, $URL, $Matches)) {
$ArtistIDs[] = $Matches[3];
$ArtistID = $Matches[3];
} else {
$Err = "One of the entered URLs ($URL) does not correspond to an artist on the site.";
break;
}
$DB->query("SELECT ArtistID FROM artists_group WHERE ArtistID='$ArtistID'");
if (!$DB->record_count()) {
$Err = "One of the entered URLs ($URL) does not correspond to an artist on the site.";
break;
}
}
if ($Err) {
error($Err);
}
foreach ($ArtistIDs as $ArtistID) {
add_artist($CollageID, $ArtistID);
}
}
header('Location: collages.php?id='.$CollageID);