Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4283bc9bb1
|
||
|
|
fc4c3234a7
|
||
|
|
8d490e48aa
|
||
|
|
1dcab1abe2
|
||
|
|
bda12177eb
|
||
|
|
f037de014e
|
||
|
|
8a1820275d
|
||
|
|
da2801560d
|
||
|
|
dd855a6d6b
|
||
|
|
25548176bb
|
||
|
|
f31b801c03
|
||
|
|
346b1a0ca9
|
||
|
|
6fdd25ae4b
|
||
|
|
754a23706a
|
No files matched your search
@@ -16,6 +16,8 @@ interface IPersistentDataManager
|
||||
|
||||
public function loadRelationsFromDb(Model $model, bool $recursive = false, array $withRelations = []): void;
|
||||
|
||||
public function loadMultiRelationsFromDb(array $models, string $relation, bool $useRelations = false, array $withRelations = []): void;
|
||||
|
||||
public function saveToDb(Model $model): void;
|
||||
|
||||
public function deleteFromDb(Model $model): void;
|
||||
|
||||
@@ -8,6 +8,8 @@ abstract class Model
|
||||
|
||||
protected static array $relations = [];
|
||||
|
||||
protected static array $multiRelations = [];
|
||||
|
||||
protected $id = null;
|
||||
|
||||
private array $snapshot = [];
|
||||
@@ -27,6 +29,11 @@ abstract class Model
|
||||
return static::$relations;
|
||||
}
|
||||
|
||||
public static function getMultiRelations(): array
|
||||
{
|
||||
return static::$multiRelations;
|
||||
}
|
||||
|
||||
public function setId($id): void
|
||||
{
|
||||
$this->id = $id;
|
||||
|
||||
@@ -92,6 +92,40 @@ class PersistentDataManager implements IPersistentDataManager
|
||||
}
|
||||
}
|
||||
|
||||
public function loadMultiRelationsFromDb(array $models, string $relation, bool $useRelations = false, array $withRelations = []): void
|
||||
{
|
||||
if (count($models) === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$parentModelType = get_class($models[0]);
|
||||
$relationModelsSetter = 'set' . str_replace('_', '', ucwords($relation, '_'));
|
||||
[$relationModelType, $reverseRelation] = call_user_func([$parentModelType, 'getMultiRelations'])[$relation];
|
||||
$reverseRelationIdGetter = 'get' . str_replace('_', '', ucwords($reverseRelation, '_')) . 'Id';
|
||||
|
||||
$parentModelsById = [];
|
||||
foreach ($models as $model) {
|
||||
$parentModelsById[$model->getId()] = $model;
|
||||
}
|
||||
|
||||
$select = new Select($this->dbConnection);
|
||||
$select->where($reverseRelation . '_id', 'IN', array_keys($parentModelsById));
|
||||
|
||||
$relationsByParentModelId = [];
|
||||
foreach ($this->selectMultipleFromDb($select, $relationModelType, $useRelations, $withRelations) as $relationModel) {
|
||||
$reverseRelationId = $relationModel->$reverseRelationIdGetter();
|
||||
if (!isset($relationsByParentModelId[$reverseRelationId])) {
|
||||
$relationsByParentModelId[$reverseRelationId] = [];
|
||||
}
|
||||
$relationsByParentModelId[$reverseRelationId][] = $relationModel;
|
||||
}
|
||||
|
||||
foreach ($parentModelsById as $parentModelId => $parentModel) {
|
||||
$relationModels = $relationsByParentModelId[$parentModelId] ?? [];
|
||||
$parentModel->$relationModelsSetter($relationModels);
|
||||
}
|
||||
}
|
||||
|
||||
public function saveToDb(Model $model): void
|
||||
{
|
||||
$this->syncRelations($model);
|
||||
@@ -115,7 +149,7 @@ class PersistentDataManager implements IPersistentDataManager
|
||||
|
||||
if (count($modified) > 0) {
|
||||
if ($model instanceof ModelWithSlug && isset($modified['slug'])) {
|
||||
$modified['slug'] = $this->generateUniqueSlug($model, $modified['slug']);
|
||||
$diff['slug']['new'] = $modified['slug'] = $this->generateUniqueSlug($model, $modified['slug']);
|
||||
}
|
||||
|
||||
$modify->setId($id);
|
||||
@@ -278,7 +312,10 @@ class PersistentDataManager implements IPersistentDataManager
|
||||
$method = 'set' . str_replace('_', '', ucwords($relation, '_'));
|
||||
$model->$method($relationModel);
|
||||
} else {
|
||||
while (substr($key, 0, strlen($relation . '__')) === $relation . '__') {
|
||||
next($data);
|
||||
$key = key($data);
|
||||
}
|
||||
}
|
||||
|
||||
next($relations);
|
||||
|
||||
+6
-1
@@ -97,8 +97,13 @@ class Linker
|
||||
|
||||
fwrite($outputFileHandle, $extra[0]);
|
||||
while (($line = fgets($inputFileHandle)) !== false) {
|
||||
if (preg_match('/^\s*@include\((.*)\)\s*$/', $line, $matches) === 1) {
|
||||
$include = file_get_contents(ROOT . '/views/' . $matches[1] . '.php');
|
||||
fwrite($outputFileHandle, $include);
|
||||
} else {
|
||||
fwrite($outputFileHandle, $line);
|
||||
}
|
||||
}
|
||||
fwrite($outputFileHandle, $extra[1]);
|
||||
|
||||
fclose($inputFileHandle);
|
||||
@@ -134,7 +139,7 @@ class Linker
|
||||
{
|
||||
$output = [];
|
||||
|
||||
if (preg_match('/^[\w\/\.]+$/', $asset) === 1) {
|
||||
if (preg_match('/^http(s)?/', $asset) !== 1) {
|
||||
if (
|
||||
empty($_ENV['DEV']) &&
|
||||
filesize(ROOT . '/public/static/' . $asset) < self::INLINE_ASSET_LIMIT
|
||||
|
||||
Reference in new issue
Block a user