chore: snapshot current working tree changes

Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
This commit is contained in:
Fedor
2026-03-26 14:19:01 +03:00
parent aec27abeb0
commit 01c4fe80b5
1557 changed files with 2090933 additions and 20934 deletions

View File

@@ -0,0 +1,82 @@
<?php
/**
* Запуск GetProjectFull_one_query.sql для проверки.
* Использование: php sql/run_GetProjectFull.php [projectid]
* По умолчанию projectid = 354918
*/
error_reporting(E_ALL);
ini_set('display_errors', 1);
$projectid = isset($argv[1]) ? (int)$argv[1] : 354918;
$_SERVER['HTTP_HOST'] = 'localhost';
require_once dirname(__DIR__) . '/config.inc.php';
if (!isset($log) || !is_object($log)) {
$log = new class { function debug($m) {} function info($m) {} function error($m) {} function fatal($m) {} };
}
require_once dirname(__DIR__) . '/include/database/PearDatabase.php';
$adb = PearDatabase::getInstance();
if (!$adb) {
fwrite(STDERR, "Ошибка подключения к БД\n");
exit(1);
}
$sqlFile = __DIR__ . '/GetProjectFull_one_query.sql';
$sql = file_get_contents($sqlFile);
// Убрать однострочные комментарии (-- ...)
$sql = preg_replace('/--[^\n]*\n/', "\n", $sql);
// Убрать пустые строки подряд и пробелы в начале/конце
$sql = trim($sql);
// Подставить projectid вместо $1
$sql = str_replace('$1', $projectid, $sql);
set_time_limit(120);
ini_set('memory_limit', '256M');
// Режим проверки: только простой запрос (без тяжёлых подзапросов)
$simpleTest = (isset($argv[2]) && $argv[2] === '--simple');
if ($simpleTest) {
$sql = 'SELECT p.projectid, p.projectname, p.startdate, p.targetenddate, p.projectstatus
FROM vtiger_project p
INNER JOIN vtiger_crmentity e ON e.crmid = p.projectid AND e.deleted = 0
WHERE p.projectid = ? LIMIT 1';
$result = $adb->pquery($sql, array($projectid));
} else {
// Полный запрос выполняем через mysqli (PearDatabase с этим запросом даёт пустой результат)
$host = $dbconfig['db_server'];
$port = 3306;
if (!empty($dbconfig['db_port']) && preg_match('/:?(\d+)/', $dbconfig['db_port'], $m)) $port = (int)$m[1];
$mysqli = new mysqli($host, $dbconfig['db_username'], $dbconfig['db_password'], $dbconfig['db_name'], $port);
if ($mysqli->connect_error) {
fwrite(STDERR, "mysqli connect: " . $mysqli->connect_error . "\n");
exit(1);
}
$mysqli->set_charset('utf8');
$ok = $mysqli->real_query($sql);
if (!$ok) {
fwrite(STDERR, "mysqli error: " . $mysqli->error . "\n");
exit(1);
}
$res = $mysqli->store_result();
$row = $res ? $res->fetch_assoc() : null;
if ($res) $res->free();
$mysqli->close();
if (!$row) {
echo "Проект с projectid={$projectid} не найден или запрос вернул пусто.\n";
exit(0);
}
echo json_encode($row, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
exit(0);
}
if (!$result) {
fwrite(STDERR, "Ошибка запроса: " . print_r($adb->database->errorInfo(), true) . "\n");
exit(1);
}
$row = $adb->fetchByAssoc($result);
if (!$row) {
echo "Проект с projectid={$projectid} не найден или запрос вернул пусто.\n";
exit(0);
}
echo json_encode($row, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);