d2tools/TblEditor.php

231 lines
7.2 KiB
PHP
Raw Normal View History

2023-06-02 05:35:10 +00:00
<?php
session_start();
ob_start();
require_once './config.php';
require_once './_pdo.php';
require_once './src/D2Functions.php';
2023-06-13 07:14:37 +00:00
error_reporting(E_ALL);
2023-06-02 05:35:10 +00:00
set_time_limit(-1);
ini_set('max_input_time', '-1');
ini_set('max_execution_time', '0');
define('DB_FILE', $_SESSION['modname'] . ".db");
2023-06-13 07:14:37 +00:00
try {
PDO_Connect("sqlite:" . DB_FILE);
} catch (Exception $e) {
echo "Connection error: " . $e->getMessage();
2023-06-02 05:35:10 +00:00
}
2023-06-13 07:14:37 +00:00
$cmd = $_REQUEST['cmd'];
$tableName = $_REQUEST['tableName'];
//function dumpAndProcessTable($tableName) {
// // Set the path to the SQLite3 executable
// $sqlitePath = "bin\sqlite3.exe";
//
// // Dump the SQLite table to a TSV file
// $tsvFile = $tableName . ".txt";
// $dumpCommand = "bin\sqlite3.exe {$_SESSION['modname']}.db \"SELECT * FROM string\" -separator \"\t\" -cmd \".mode tabs\" -cmd \".headers off\" > \"{$_SESSION['tbl']}{$tsvFile}\"";
// shell_exec($dumpCommand);
//
// die();
//
// // Convert TSV to TBL
// // Run the executable with the TSV file as input
// $executablePath = "bin\EnquettarM.exe";
// $processCommand = "{$executablePath} -i \"{$_SESSION['tbl']}{$tsvFile}\"";
//
// // will be saved into ModString.tbl
//
// $etxt = 'ModString.txt';
// $etbl = 'ModString.tbl';
//
// shell_exec($processCommand);
//
// // now file is generated in rootdir, etbl, which we need to move to session tbl
// rename($etbl, "{$_SESSION['tbl']}/$tableName.tbl");
//
// // Remove the generated ModString.tbl
// //unlink($etbl);
//}
2023-06-14 03:15:23 +00:00
if ($cmd == "getTable") {
$filePath = "{$_SESSION['tbl']}/$tableName.tbl";
$executablePath = getcwd() . "\bin\EnquettarM.exe";
$processCommand = "{$executablePath} -e \"$filePath\"";
2023-06-14 03:15:23 +00:00
shell_exec($processCommand);
rename(getcwd() . "\ModString.txt", "{$_SESSION['tbl']}/$tableName.txt");
$filePath = "{$_SESSION['tbl']}/$tableName.txt";
$fileLines = file($filePath);
$rows = [];
$rowid = 1; // Starting rowid value
foreach ($fileLines as $line) {
$row = explode("\t", $line);
$key = $row[0];
2023-06-25 19:22:17 +00:00
$string = ($row[1]);
$rowData = [
'rowid' => $rowid,
'Key' => $key,
'String' => $string
];
$rows[] = $rowData;
$rowid++;
}
2023-06-13 07:14:37 +00:00
// Start the table with Bootstrap classes
$tableMarkup = '';
// Iterate over the rows
foreach ($rows as $row) {
2023-06-25 19:22:17 +00:00
$row['String'] = trim(str_replace('}', '&#10;', $row['String']));
$tableMarkup .= "<tr class='row-{$row['rowid']}'>";
2023-06-13 07:14:37 +00:00
2023-06-14 03:15:23 +00:00
$tableMarkup .= "<td style='width: 64px;'>{$row['rowid']}</td>";
2023-06-13 07:14:37 +00:00
// Display the Key column as a text input with Bootstrap form-control class
2023-06-14 03:15:23 +00:00
$tableMarkup .= "<td style='width: 20%;'><input type='text' value='{$row['Key']}' class='form-control'><span style='visibility: hidden;'>{$row['Key']}</span></td>";
2023-06-13 07:14:37 +00:00
// Display the String column as a textarea with Bootstrap form-control class
$tableMarkup .= "<td><textarea class='form-control'>{$row['String']}</textarea></td>";
2023-06-13 07:14:37 +00:00
// Add the Update and Delete links within a single td element
2023-06-14 03:15:23 +00:00
$tableMarkup .= "<td style='width: 100px;'><div>";
2023-06-13 07:14:37 +00:00
// Add the Update link with Bootstrap btn and btn-primary classes
$tableMarkup .= "<a href='#' class='update-link btn btn-primary' data-rowid='{$row['rowid']}'>Update</a>";
2023-06-13 07:14:37 +00:00
// Add the Delete link with Bootstrap btn and btn-danger classes
$tableMarkup .= "<a style='' href='#' class='delete-link btn btn-danger' data-rowid='{$row['rowid']}'>Delete</a>";
2023-06-13 07:14:37 +00:00
$tableMarkup .= "</div></td>";
2023-06-13 07:14:37 +00:00
$tableMarkup .= "</tr>";
2023-06-02 05:35:10 +00:00
}
2023-06-13 07:14:37 +00:00
// Return the table markup
echo $tableMarkup;
}
if ($cmd == "update") {
2023-06-25 19:22:17 +00:00
2023-06-14 09:44:04 +00:00
$string = str_replace('\n', '}', $_REQUEST['string']);
2023-06-25 19:22:17 +00:00
$query = "UPDATE $tableName SET Key = ?, String = ? WHERE Key = ?";
2023-06-14 09:44:04 +00:00
PDO_Execute($query, [$_REQUEST['key'], $string, $_REQUEST['key']]);
// Update the corresponding row in the text file
$filePath = "{$_SESSION['tbl']}/$tableName.txt";
$fileLines = file($filePath);
// Calculate the line number to update based on the rowid
$lineNumber = $_REQUEST['rowid'];
// Update the line in the file with the new key and string values
2023-06-14 09:44:04 +00:00
$fileLines[$lineNumber - 1] = "{$_REQUEST['key']}\t{$string}\n";
// Save the updated content back to the text file
file_put_contents($filePath, implode("", array_filter($fileLines)));
// Convert TXT to TBL
$executablePath = "bin\EnquettarM.exe";
$processCommand = "{$executablePath} -i \"{$_SESSION['tbl']}/$tableName.txt\"";
shell_exec($processCommand);
rename(getcwd() . "\ModString.tbl", "{$_SESSION['tbl']}/$tableName.tbl");
2023-06-25 19:22:17 +00:00
// Remove empty lines from end of file
// Read the file contents into an array of lines
$lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// Trim empty lines from the end of the array
while (!empty($lines) && trim(end($lines)) === '') {
array_pop($lines);
}
// Write the updated content back to the file
file_put_contents($filePath, implode(PHP_EOL, $lines));
2023-06-13 07:14:37 +00:00
}
2023-06-13 07:14:37 +00:00
if ($cmd == "delete") {
$query = "DELETE FROM $tableName WHERE Key = ?";
PDO_Execute($query, [$_REQUEST['key']]);
$rowid = $_REQUEST['rowid'];
$filePath = "{$_SESSION['tbl']}/$tableName.txt";
// Calculate the line number to delete based on the rowid
$lineNumber = $rowid - 1; // Assuming zero-indexed line numbers
2023-06-25 19:22:17 +00:00
// Read the lines of the text file into an array
$fileLines = file($filePath, FILE_IGNORE_NEW_LINES);
// Remove the line at the specified line number
if (isset($fileLines[$lineNumber])) {
unset($fileLines[$lineNumber]);
}
// Save the updated content back to the text file
file_put_contents($filePath, implode("\n", $fileLines));
2023-06-25 19:22:17 +00:00
// Convert TXT to TBL
$executablePath = "bin\EnquettarM.exe";
$processCommand = "{$executablePath} -i \"{$_SESSION['tbl']}/$tableName.txt\"";
shell_exec($processCommand);
2023-06-25 19:22:17 +00:00
rename(getcwd() . "\ModString.tbl", "{$_SESSION['tbl']}/$tableName.tbl");
2023-06-13 07:14:37 +00:00
echo $_REQUEST['rowid'] . " deleted";
}
if ($cmd == "add") {
$tableName = $_POST['tableName'];
$key = $_POST['Key'];
$string = $_POST['String'];
2023-06-25 19:22:17 +00:00
$filePath = "{$_SESSION['tbl']}/$tableName.txt";
2023-06-13 07:14:37 +00:00
// Create your insert statement using the provided values
$query = "INSERT INTO $tableName (Key, String) VALUES (?, ?)";
$params = array($key, $string);
// Execute the insert statement
$result = PDO_Execute($query, $params);
2023-06-13 07:14:37 +00:00
// Retrieve the last inserted rowid from the table
2023-06-25 19:22:17 +00:00
// $query = "SELECT last_insert_rowid() AS rowid";
// $result = PDO_FetchOne($query);
// Append the new row to the text file
$newLine = "{$key}\t{$string}";
2023-06-25 19:22:17 +00:00
file_put_contents($filePath, $newLine . PHP_EOL, FILE_APPEND);
// Get the line number of the newly inserted line
$fileContents = file_get_contents($filePath);
$linesArray = explode(PHP_EOL, $fileContents);
$result = count($linesArray) - 1;
// Convert TXT to TBL
$executablePath = "bin\EnquettarM.exe";
$processCommand = "{$executablePath} -i \"{$_SESSION['tbl']}/$tableName.txt\"";
shell_exec($processCommand);
rename(getcwd() . "\ModString.tbl", "{$_SESSION['tbl']}/$tableName.tbl");
2023-06-13 07:14:37 +00:00
echo $result;
}