Skip to content

Commit

Permalink
merge delete-mod.php and delete-modv.php; update index.php and script…
Browse files Browse the repository at this point in the history
…s accordingly. also in /build highlight missing mod with red and suggest removal, fix bug where index.php/builds would show missing mods as 'forge'
  • Loading branch information
cowpod committed Nov 2, 2024
1 parent f4f4204 commit 7570de7
Show file tree
Hide file tree
Showing 7 changed files with 201 additions and 200 deletions.
107 changes: 79 additions & 28 deletions functions/delete-mod.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@
header('Content-Type: application/json');
session_start();

if (empty($_GET['id'])) {
die("Id not specified.");
if (empty($_GET['id']) && empty($_GET['name'])) {
die("Id/name not specified.");
}
// if (empty($_GET['force'])) { // assume false
// die("Force not specified.");
// }
if (!$_SESSION['user']||$_SESSION['user']=="") {
die("Unauthorized request or login session has expired!");
}
Expand All @@ -13,40 +16,88 @@
exit();
}

global $db;
require_once("db.php");
if (!isset($db)){
$db=new Db;
$db->connect();
}

$db=new Db;
$db->connect();

$querybuilds = $db->query("SELECT id,name,mods FROM builds");
if (!empty($_GET['name'])) {
// delete all ids associated with name, if not in a build
$modq = $db->query("
SELECT id,type,filename
FROM `mods`
WHERE `name` = '".$db->sanitize($_GET['name'])."'"
);
foreach ($modq as $mod) {
if (!empty($_GET['force'])&&$_GET['force']=='true') {
error_log('force deleting mod name='.$_GET['name'].', id='.$mod['id']);
} else {
// check if a build has this id
$buildq = $db->query("
SELECT id,name
FROM builds
WHERE ',' || mods || ',' LIKE '%,' || ".$mod['id']." || ',%';
");
if ($buildq && sizeof($buildq)>0) {
// mod is in a build
// only get first build
die('{"status":"warn","message":"Cannot delete mod as it is in use!","bid":"'.$buildq[0]['id'].'","bname":"'.$buildq[0]['name'].'"}');
}
}

$warn='';
// mod not in any build
$db->execute("DELETE FROM `mods` WHERE `id` = '".$mod['id']."'");

//potentially destructive..
$modq = $db->query("SELECT * FROM `mods` WHERE `name` = '".$db->sanitize($_GET['id'])."'");
foreach ($modq as $mod) {
if ($querybuilds&&sizeof($querybuilds)>0) {
if (!empty($querybuilds[0]['mods'])) {
$mods=explode(',', $querybuilds[0]['mods']);
// check if theres any other mod entries with the same file
if ($mod['type']=='mod' && !(isset($_GET['force']) && $_GET['force']=='true')) {
$mod2q = $db->query("SELECT COUNT(*) as count FROM `mods` WHERE `filename` = '".$mod['filename']."'");
if ($mod2q && sizeof($mod2q)==1 && $mod2q[0]['count']>0) {
continue; // leave file on disk
}
} else {
unlink("../".$mod['type']."s/".$mod['filename']);
}
}
if (!empty($mods)&&in_array($mod['id'], $mods)) {
$warn.='Cannot delete version '.$mod['version'].' as it is used in build <a href=\'build?id='.$querybuilds[0]['id'].'\'>'.$querybuilds[0]['name'].'</a>';
error_log($warn);
continue;

die('{"status":"succ","message":"All versions of mod deleted."}');

} elseif(!empty($_GET['id'])) {
if (isset($_GET['force']) && $_GET['force']=='true') {
error_log('force deleting mod id='.$_GET['id']);
} else {
unlink("../".$mod['type']."s/".$mod['filename']);
$db->execute("DELETE FROM `mods` WHERE `id` = '".$mod['id']."'");
$querybuilds = $db->query("SELECT id,name,mods FROM builds");
foreach ($querybuilds as $build) {
if (empty($querybuilds[0]['mods'])) {
continue;
}
$build_mods = explode(',', $querybuilds[0]['mods']);
$build_id = !empty($querybuilds[0]['id']) ? $querybuilds[0]['id'] : null;
$build_name = !empty($querybuilds[0]['name']) ? $querybuilds[0]['name'] : null;
if (in_array($_GET['id'], $build_mods)) {
die('{"status":"error","message":"Cannot delete as it is in use!", "bid":"'.$build_id.'", "bname":"'.$build_name.'"}');
}
}
}
}

// $db->execute("DELETE FROM `mods` WHERE `name` = '".$db->sanitize($_GET['id'])."'");
// get filename for mod id (and if it exists)
$modq = $db->query("SELECT type,filename FROM `mods` WHERE `id` = '".$db->sanitize($_GET['id'])."'");
if ($modq) {
if(sizeof($modq)==0) {
die('{"status":"error","message":"Specified id does not exist."}');
}
$mod = $modq[0];
}

if ($warn!=='') {
die('{"status":"warn","message":"'.$warn.'"}');
// remove it from db
$db->execute("DELETE FROM `mods` WHERE `id` = '".$db->sanitize($_GET['id'])."'");

if ($mod['type']=='mod' && !(isset($_GET['force']) && $_GET['force']=='true')) {
// check if theres any other mod entries with the same file
$mod2q = $db->query("SELECT COUNT(*) as count FROM `mods` WHERE `filename` = '".$mod['filename']."'");
if ($mod2q && sizeof($mod2q)==1 && $mod2q[0]['count']>0) {
die('{"status":"succ","message":"Mod version deleted from database, but file is still in use by other mod version."}'); // leave file on disk
}
} else {
unlink("../".$mod['type']."s/".$mod['filename']);
die('{"status":"succ","message":"Mod version deleted."}');
}
}
die('{"status":"succ","message":"Deleted successfully"}');
exit();
64 changes: 0 additions & 64 deletions functions/delete-modv.php

This file was deleted.

Loading

0 comments on commit 7570de7

Please sign in to comment.