Updated Warehouse

This commit is contained in:
Luca Haid
2025-02-04 19:06:08 +01:00
parent 514d5d5d7e
commit 7c8af7aed4
24 changed files with 1126 additions and 99 deletions
+4 -1
View File
@@ -8,7 +8,7 @@ class Helper {
* @param string $columnName The name of the column in the database table.
* @return string The SQL condition generated based on the filter value and column name.
*/
public static function generateFilterCondition($filterValue, string $columnName, bool $exactMatch = false): string {
public static function generateFilterCondition($filterValue, $columnName, bool $exactMatch = false): string {
$sql = "";
if (is_array($filterValue)) {
@@ -30,6 +30,9 @@ class Helper {
} else if (!empty($filterValue)) {
if ($exactMatch) {
$sql .= " AND `$columnName` = '" . $filterValue . "'";
} else if (strpos($columnName, "|") !== false) {
foreach (explode(" ", $filterValue) as $item)
$sql .= " AND CONCAT(" . join(",", explode("|", $columnName)) . ") LIKE '%" . str_replace("%", "", $item) . "%'";
} else if ($filterValue[0] === "%") {
$sql .= " AND `$columnName` LIKE '" . $filterValue . "'";
} else if ($filterValue[strlen($filterValue) - 1] === "%") {
+13 -9
View File
@@ -10,6 +10,8 @@
* @property array $additionalJSVariables
* @property array $infoMessages
* @property bool $onlyView
* @property array $defaultOrder
* @property array $autocompleteColumns
*/
class TTCrud extends mfBaseController {
public User $user;
@@ -251,18 +253,20 @@ class TTCrud extends mfBaseController {
}
protected function autocompleteAction() {
$searchedID = $this->request->searchedID;
$textKey = property_exists($this->model, 'name') ? 'name' : 'title';
if (strlen($searchedID) > 0) {
$filter = ['id' => $searchedID];
if (strlen($this->request->searchedID) > 0) {
$filter = ['id' => $this->request->searchedID];
$data = $this->model::getAll($filter, 10);
} else {
$filter = [$textKey => $this->request->q . '%'];
$data = $this->model::getAll($filter, 10);
if (isset($this->autocompleteColumns) && is_array($this->autocompleteColumns)) {
$filterKey = join('|', $this->autocompleteColumns);
} else {
$filterKey = $textKey;
}
$data = [];
if (count($data) < 11) {
$filter = [$textKey => $this->request->q];
$filter = [$filterKey => '%' . $this->request->q . '%'];
$lazyData = $this->model::getAll($filter, 10);
$data = array_merge($data, $lazyData);
$data = array_unique($data, SORT_REGULAR);
@@ -270,7 +274,6 @@ class TTCrud extends mfBaseController {
}
}
self::returnJson(array_map(function ($item) use ($textKey) {
return ['value' => $item->id, 'text' => $item->$textKey];
}, $data));
@@ -285,6 +288,7 @@ class TTCrud extends mfBaseController {
}
$data = (array) $this->model::get($id);
if (method_exists($this, 'getByIdParse') && !isset($_GET['disableParse'])) $data = $this->getByIdParse($data);
self::returnJson($data);
}
}
+9 -13
View File
@@ -81,17 +81,13 @@ class TTCrudBaseModel {
}
public static function get($id, $die= false): TTCrudBaseModel {
public static function get($id): TTCrudBaseModel {
$FronkDB = FronkDB::singleton();
$db = $FronkDB->link;
$id = $db->real_escape_string($id);
$table = self::getTable();
$sql = "SELECT * FROM `$table` WHERE `id` = $id";
if($die) {
die($sql);
}
$result = $db->query($sql);
// as TTCRudBaseModel is abstract, we need to get the class name of the child class
$class = get_called_class();
@@ -109,16 +105,16 @@ class TTCrudBaseModel {
return $result->fetch_assoc()['count'];
}
public static function getSQLFilter($filter): string {
if (empty($filter)) {
return "";
}
public static function getSQLFilter(array $filter): string {
if (empty($filter)) return '';
$sql = 'WHERE 1=1';
$calledClass = get_called_class();
$sql = "WHERE 1=1";
foreach ($filter as $key => $value) {
if (!property_exists(get_called_class(), $key)) {
http_response_code(500);
throw new Exception("Field $key does not exist in " . get_called_class());
foreach (explode('|', $key) as $column) {
if (!property_exists($calledClass, $column)) {
throw new InvalidArgumentException("Field $column does not exist in $calledClass");
}
}
$sql .= Helper::generateFilterCondition($value, $key, gettype($value) === "integer");
}