first commit

This commit is contained in:
2025-08-02 16:30:27 +02:00
commit 23646bfcee
14851 changed files with 1750626 additions and 0 deletions

View File

@@ -0,0 +1,277 @@
<?php
trait DatabaseCommunication
{
public function insertSQL($table, $SQLFields, $except = [], $types = [])
{
wpj_debug(['insertSQL', 'table' => $table, 'SQLFields' => $SQLFields, 'except' => $except, 'types' => $types]);
$conn = $this->getDbalConnection();
return $conn->insert(getTableName($table), $this->escapeFields($this->excludeFields($SQLFields, $except)), $types);
}
public function updateSQL($table, $SQLFields, $idArray, $except = [], $types = [])
{
wpj_debug(['updateSQL', 'table' => $table, 'SQLFields' => $SQLFields, 'idArray' => $idArray, 'except' => $except, 'types' => $types]);
$conn = $this->getDbalConnection();
return $conn->update(getTableName($table), $this->escapeFields($this->excludeFields($SQLFields, $except)), $idArray, $types);
}
public function deleteSQL($table, $idArray)
{
wpj_debug(['deleteSQL', 'table' => $table, 'idArray' => $idArray]);
$conn = $this->getDbalConnection();
return $conn->delete(getTableName($table), $idArray);
}
public function replaceSQL($table, $SQLFields, $except = [], $types = [])
{
wpj_debug(['replaceSQL', 'table' => $table, 'SQLFields' => $SQLFields, 'except' => $except, 'types' => $types]);
$conn = $this->getDbalConnection();
$values = $this->escapeFields($this->excludeFields($SQLFields, $except));
return $conn->executeUpdate("REPLACE INTO {$table}".$this->createInsert($values), $values, $types);
}
public function selectSQL($table, $idArray, $fields = null)
{
wpj_debug(['selectSQL', 'table' => $table, 'idArray' => $idArray, 'fields' => $fields]);
if ($fields) {
if (is_string(array_keys($fields)[0])) {
$fields = join(',', array_map(function ($alias, $value) {
return "{$value} as {$alias}";
}, array_keys($fields), $fields));
} else {
$fields = join(',', $fields);
}
} else {
$fields = '*';
}
$conn = $this->getDbalConnection();
$sql = "SELECT {$fields} FROM ".getTableName($table).' WHERE '.$this->createWhere($idArray);
return $conn->executeQuery($sql, $idArray);
}
/**
* @return Doctrine\DBAL\Query\QueryBuilder
*/
public function getQueryBuilder()
{
return sqlQueryBuilder();
}
public function getConnection()
{
return $this->getDbalConnection();
}
/**
* @return Doctrine\DBAL\Connection
*/
public function getDbalConnection()
{
$conn = sqlGetConnection();
static $initialized = false;
if (!$initialized) {
$platform = $conn->getDatabasePlatform();
$platform->registerDoctrineTypeMapping('enum', 'string');
$platform->registerDoctrineTypeMapping('point', 'string');
$initialized = true;
}
return $conn;
}
public function escapeFields($fields)
{
return array_combine(
array_map(function ($field) {
switch ($field) {
case 'interval':
case 'number':
case 'set':
return "`{$field}`";
default:
return $field;
}
}, array_keys($fields)),
array_values($fields));
}
public function filterFields($values, $fields)
{
return array_intersect_key($values, array_flip($fields));
}
public function excludeFields($values, $fields)
{
return array_diff_key($values, array_flip($fields));
}
public function createWhere($values)
{
$ret = [];
foreach ($values as $field => $value) {
$param = $field;
if (($pos = strpos($param, '.')) !== false) {
$param = substr($param, $pos + 1);
}
if ($value === null) {
$ret[] = "{$field} IS NULL";
} else {
$ret[] = "{$field} = :{$param}";
}
}
if (empty($ret)) {
$ret[] = '1=1';
}
return join(' AND ', $ret);
}
public function createUpdate($values)
{
return join(', ', array_map(function ($field) {
return "{$field} = :{$field}";
}, array_keys($values)));
}
public function createInsert($values)
{
$fields = array_keys($this->escapeFields($values));
return '('.join(', ', $fields).') VALUES ('.join(', ', array_map(function ($x) {
return ':'.$x;
}, $fields)).')';
}
public function fetchObject($table, $ID)
{
$SQL = sqlQuery('SELECT * FROM '.getTableName($table)." WHERE id='{$ID}' ");
if (sqlNumRows($SQL) == 1) {
return sqlFetchAssoc($SQL);
}
}
public function preparePrice(&$price)
{
if (($price === '') || ($price === null)) {
return null;
}
return $price = floatval(preg_replace('/[^\d\.-]/', '', str_replace(',', '.', $price)));
}
/**
* @param $price array [value, with_vat, vat]
*
* @return Decimal
*/
public function prepareVatPrice($price)
{
if ($price['value'] === '') {
return null;
}
$dbcfg = Settings::getDefault();
$priceWithVat = $price['with_vat'] ?? ($dbcfg['prod_prefer_price_vat'] == 'Y' || $dbcfg['prod_prefer_price_vat'] == 'F');
$vat = $price['vat'] ?? getAdminVat()['value'];
$price = toDecimal($this->preparePrice($price['value']));
if ($priceWithVat) {
$price = $price->removeVat($vat);
}
return $price;
}
public function prepareInt(&$number, $default = 0)
{
if (!is_numeric($number)) {
$number = $default;
}
return $number = intval(str_replace([',', ' '], ['.', ''], $number));
}
public function prepareBoolean(&$bool)
{
return $bool = ($bool == 'Y' || $bool == '1') ? 1 : 0;
}
public function prepareYesNo(&$bool)
{
$this->prepareBoolean($bool);
return $bool ? 'Y' : 'N';
}
public function prepareNull(&$value)
{
$value = trim($value);
return $value = $value == '' ? null : $value;
}
public function prepareDate($date)
{
if (empty($date)) {
return '';
}
if (!$date instanceof DateTime) {
$date = DateTime::createFromFormat(Settings::getDateFormat(), $date);
if ($date == false) {
$date = new DateTime();
}
}
return $date->format('Y-m-d');
}
public function prepareDateTime($datetime)
{
if (empty($datetime)) {
return '';
}
if (!$datetime instanceof DateTimeInterface) {
$format = Settings::getDateFormat().' '.Settings::getTimeFormat();
$datetime = DateTime::createFromFormat($format, $datetime);
if ($datetime == false) {
$datetime = new DateTime();
}
}
return $datetime->format('Y-m-d H:i:s');
}
/**
* @param Doctrine\DBAL\DBALException $e
*/
public function translateException($e)
{
$exception = $e->getPrevious();
switch (intval($exception->errorInfo[1])) {
case 1062:
// Message: Duplicate entry '17-ZE523' for key 'id_supplier_2'
preg_match("/Duplicate entry '([^']+)' for key '([^']+)'/", $exception->errorInfo[2], $matches);
$ErrStr = "Duplicitni kombinace {$matches[1]}";
return $ErrStr;
default:
return $e->getMessage();
}
}
}