115 lines
3.8 KiB
PHP
115 lines
3.8 KiB
PHP
<?php namespace Lucent\Core\Record;
|
|
|
|
use Carbon\Carbon;
|
|
use Lucent\Core\Data\Record;
|
|
use Lucent\Core\Data\RecordPreview;
|
|
use Lucent\Core\Data\RecordStatus;
|
|
use Lucent\Core\Data\EdgeRecordPreview;
|
|
use Lucent\Core\Edge\EdgeModule;
|
|
use stdClass;
|
|
|
|
class RecordModule
|
|
{
|
|
public static function getStatus(Record $record): RecordStatus
|
|
{
|
|
if ($record->trashedBy) {
|
|
return RecordStatus::TRASHED;
|
|
} elseif ($record->publishedBy && $record->scheduledAt) {
|
|
return RecordStatus::SCHEDULED_AND_PUBLISHED;
|
|
} elseif ($record->publishedBy) {
|
|
return RecordStatus::PUBLISHED;
|
|
} elseif ($record->scheduledAt) {
|
|
return RecordStatus::SCHEDULED;
|
|
}
|
|
return RecordStatus::DRAFT;
|
|
}
|
|
|
|
public static function toDb(Record $record): array
|
|
{
|
|
return [
|
|
"id" => $record->id,
|
|
"schema_id" => $record->schemaId,
|
|
"title_field_id" => $record->titleFieldId,
|
|
"created_at" => $record->createdAt->toJSON(),
|
|
"created_by" => $record->createdBy,
|
|
"published_at" => empty($record->publishedAt)
|
|
? null
|
|
: $record->publishedAt->toJSON(),
|
|
"published_by" => $record->publishedBy,
|
|
"scheduled_at" => empty($record->scheduledAt)
|
|
? null
|
|
: $record->scheduledAt->toJSON(),
|
|
"scheduled_by" => $record->scheduledBy,
|
|
"trashed_at" => empty($record->trashedAt)
|
|
? null
|
|
: $record->trashedAt->toJSON(),
|
|
"trashed_by" => $record->trashedBy,
|
|
];
|
|
}
|
|
|
|
public static function fromDb(stdClass $data): Record
|
|
{
|
|
return new Record(
|
|
id: data_get($data, "id"),
|
|
schemaId: data_get($data, "schema_id"),
|
|
titleFieldId: data_get($data, "title_field_id"),
|
|
createdAt: Carbon::parse(data_get($data, "created_at")),
|
|
createdBy: data_get($data, "created_by"),
|
|
publishedAt: empty(data_get($data, "published_at"))
|
|
? null
|
|
: Carbon::parse(data_get($data, "published_at")),
|
|
publishedBy: data_get($data, "published_by"),
|
|
scheduledAt: empty(data_get($data, "scheduled_at"))
|
|
? null
|
|
: Carbon::parse(data_get($data, "scheduled_at")),
|
|
scheduledBy: data_get($data, "scheduled_by"),
|
|
trashedAt: empty(data_get($data, "trashed_at"))
|
|
? null
|
|
: Carbon::parse(data_get($data, "trashed_at")),
|
|
trashedBy: data_get($data, "trashed_by"),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @param Schema[] $schemas
|
|
* @param stdClass $data
|
|
* @return RecordPreview
|
|
*/
|
|
public static function recordPreviewFromDb(
|
|
array $schemas,
|
|
stdClass $data,
|
|
): RecordPreview {
|
|
return new RecordPreview(
|
|
id: data_get($data, "id"),
|
|
schemaId: data_get($data, "schema_id"),
|
|
schemaName: collect($schemas)
|
|
->where("id", data_get($data, "schema_id"))
|
|
->first()->name,
|
|
|
|
title: data_get($data, "title"),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @param Schema[] $schemas
|
|
* @param stdClass $data
|
|
* @return EdgeRecordPreview
|
|
*/
|
|
public static function edgeRecordPreviewFromDb(
|
|
array $schemas,
|
|
stdClass $data,
|
|
): EdgeRecordPreview {
|
|
return new EdgeRecordPreview(
|
|
edge: EdgeModule::fromDb($data),
|
|
recordPreview: new RecordPreview(
|
|
id: data_get($data, "record_id"),
|
|
schemaId: data_get($data, "record_schema_id"),
|
|
schemaName: collect($schemas)
|
|
->where("id", data_get($data, "record_schema_id"))
|
|
->first()->name,
|
|
title: data_get($data, "record_title"),
|
|
),
|
|
);
|
|
}
|
|
}
|