Skip to content

Commit 3c25ccf

Browse files
committed
Merge branch 'develop'
* develop: Fix styling bugfix: do data for UserActivity bugfix: invalid records for page activity
2 parents 769030b + eede721 commit 3c25ccf

3 files changed

Lines changed: 95 additions & 101 deletions

File tree

src/Filament/Widgets/PageActivity.php

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use SolutionForest\InspireCms\Helpers\FilamentResourceHelper;
1515
use SolutionForest\InspireCms\Helpers\UIHelper;
1616
use SolutionForest\InspireCms\InspireCmsConfig;
17+
use SolutionForest\InspireCms\Models\Scopes\ContentVersionDetailScope;
1718

1819
class PageActivity extends BaseWidget
1920
{
@@ -42,7 +43,14 @@ public function table(Table $table): Table
4243

4344
Tables\Columns\TextColumn::make('published_at')
4445
->label(__('inspirecms::resources/content.published_at.label'))
45-
->getStateUsing(fn ($record) => $record->getLatestPublishedContentVersion()?->pivot->published_at?->diffForHumans())
46+
->getStateUsing(function (Model $record) {
47+
48+
if ($record->hasAttribute('__latest_version_publish_dt') && $record->__latest_version_publish_dt) {
49+
return $record->__latest_version_publish_dt->diffForHumans();
50+
}
51+
52+
return $record->getLatestPublishedContentVersion()?->pivot->published_at?->diffForHumans();
53+
})
4654
->width('5%'),
4755
Tables\Columns\TextColumn::make('updated_at')
4856
->label(__('inspirecms::resources/content.updated_at.label'))
@@ -60,13 +68,15 @@ protected function getRecordUrl(Model $record): ?string
6068

6169
protected function getLatestUpdatePagesQuery(): Builder
6270
{
63-
$query = InspireCmsConfig::getContentModelClass()::with([
64-
'publishedVersions',
65-
])->withoutGlobalScopes([
66-
\SolutionForest\InspireCms\Support\Models\Scopes\NestableTreeDetailScope::class,
67-
]);
68-
69-
return $query->orderByDesc('updated_at')->take(static::$totalTakeLatest);
71+
return InspireCmsConfig::getContentModelClass()::query()
72+
->with(['publishedVersions'])
73+
->withoutGlobalScopes([
74+
\SolutionForest\InspireCms\Support\Models\Scopes\NestableTreeDetailScope::class,
75+
])
76+
->withGlobalScope(ContentVersionDetailScope::class, new ContentVersionDetailScope)
77+
->orderByDesc('__latest_version_dt')
78+
->orderByDesc('updated_at')
79+
->take(static::$totalTakeLatest);
7080
}
7181

7282
// region Table Configuration

src/Filament/Widgets/UserActivity.php

Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Livewire\WithPagination;
88
use SolutionForest\InspireCms\Filament\Contracts\GuardWidget;
99
use SolutionForest\InspireCms\Filament\Widgets\Conceners\GuardWidgetTrait;
10+
use SolutionForest\InspireCms\Models\Contracts\UserLoginActivity;
1011

1112
class UserActivity extends Widget implements GuardWidget
1213
{
@@ -51,52 +52,21 @@ protected function getUserActivities()
5152
->simplePaginate(perPage: 5, pageName: $pageName, page: $this->getPage($pageName));
5253

5354
$activities->tap(function ($activities) use ($user) {
54-
$activities->setCollection($activities->getCollection()->map(function ($activity) use ($user) {
55+
$activities->setCollection($activities->getCollection()->map(function (UserLoginActivity $activity) use ($user) {
5556

5657
$activity->causer = $user;
5758
$activity->subject = $user;
5859

5960
$activity->description = $activity->ip_address;
6061

61-
$dtFormat = 'Y-m-d H:i:s';
62-
if ($activity->last_logged_in_at_utc != null) {
63-
$ts = $activity->last_logged_in_at_utc->format($dtFormat);
64-
$activity->last_logged_in_at_utc = Carbon::createFromFormat(
65-
$dtFormat,
66-
$ts,
67-
'UTC'
68-
);
69-
$activity->last_logged_in_at_local = Carbon::createFromFormat(
70-
$dtFormat,
71-
$ts,
72-
'UTC'
73-
)->setTimezone(config('app.timezone'));
74-
} else {
75-
$activity->last_logged_in_at_local = null;
76-
}
77-
78-
if ($activity->last_logged_out_at_utc != null) {
79-
$ts = $activity->last_logged_out_at_utc->format($dtFormat);
80-
$activity->last_logged_out_at_utc = Carbon::createFromFormat(
81-
$dtFormat,
82-
$ts,
83-
'UTC'
84-
);
85-
$activity->last_logged_out_at_local = Carbon::createFromFormat(
86-
$dtFormat,
87-
$ts,
88-
'UTC'
89-
)->setTimezone(config('app.timezone'));
90-
} else {
91-
$activity->last_logged_out_at_local = null;
92-
}
93-
$activity->last_logged_out_at_utc = \Carbon\Carbon::createFromFormat(
94-
$dtFormat,
95-
$activity->last_logged_out_at_utc->format($dtFormat),
96-
'UTC'
97-
);
62+
$activity->last_logged_in_at_utc = $this->convertDt($activity->last_logged_in_at_utc);
63+
$activity->last_logged_in_at_local = $this->convertDtToLocal($activity->last_logged_in_at_utc);
64+
65+
$activity->last_logged_out_at_utc = $this->convertDt($activity->last_logged_out_at_utc);
66+
$activity->last_logged_out_at_local = $this->convertDtToLocal($activity->last_logged_out_at_utc);
9867

9968
return $activity;
69+
10070
}));
10171
});
10272

@@ -114,4 +84,26 @@ protected function getUserActivities()
11484
return $this->getPage($pageName);
11585
});
11686
}
87+
88+
private function convertDt(?\Carbon\CarbonInterface $dateTime): ?\Carbon\CarbonInterface
89+
{
90+
if (is_null($dateTime)) {
91+
return null;
92+
}
93+
94+
$dtFormat = 'Y-m-d H:i:s';
95+
96+
$ts = $dateTime->format($dtFormat);
97+
98+
return Carbon::createFromFormat(
99+
$dtFormat,
100+
$ts,
101+
'UTC'
102+
);
103+
}
104+
105+
private function convertDtToLocal(?\Carbon\CarbonInterface $dateTime): ?\Carbon\CarbonInterface
106+
{
107+
return $this->convertDt($dateTime)?->setTimezone(config('app.timezone'));
108+
}
117109
}

src/Models/Scopes/ContentVersionDetailScope.php

Lines changed: 47 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -16,82 +16,74 @@ public function apply($builder, Model $model)
1616

1717
$query = $builder->getQuery();
1818

19-
$relatedFK = $model->contentVersions()->getForeignKeyName();
20-
$related = $model->contentVersions()->getRelated();
21-
$relatedPK = $related->getKeyName();
19+
$cvModel = $model->contentVersions()->getRelated();
20+
$cvFK = $model->contentVersions()->getForeignKeyName();
21+
$cvPK = $cvModel->getKeyName();
22+
$cvCreationColumn = $cvModel->getCreatedAtColumn();
2223

23-
$recordCreationColumn = $related->getCreatedAtColumn();
24+
/**
25+
* @var Model
26+
*/
27+
$cvPublishedModel = $cvModel->publishLog()->getRelated();
28+
$cvPublishedFK = $cvModel->publishLog()->getForeignKeyName();
2429

25-
$t1TableName = '_cv_t1';
26-
$t1Q = DB::table($related->getTable())
27-
->orderByDesc($recordCreationColumn) // sort by created_at desc
28-
->groupBy(
29-
$relatedFK, // group by content_id
30-
$recordCreationColumn, // include the ordered column in GROUP BY
31-
)
30+
$baseQ = DB::table($cvModel->getTable())
31+
->groupBy($cvFK)
3232
->select([
33-
DB::raw("MAX($relatedPK) AS latest_version_id"),
34-
$relatedFK,
33+
DB::raw("MAX($cvPK) AS joined_version_id"),
34+
$cvFK,
3535
]);
3636

37-
$t2_1TableName = '_cv_t2_publish';
38-
$t2_2TableName = '_cv_t2_all';
39-
$t2_1Q = DB::table($related->getTable(), $t2_1TableName)
37+
$cvAllQ = DB::table($cvModel->getTable(), '_cv_t2_all')
4038
->joinSub(
41-
$t1Q,
42-
$t1TableName,
39+
$baseQ,
40+
'_cv_t1_base',
4341
fn (JoinClause $join) => $join
44-
->on("$t1TableName.latest_version_id", '=', "$t2_1TableName.$relatedPK")
42+
->on('_cv_t1_base.joined_version_id', '=', "_cv_t2_all.$cvPK")
4543
)
46-
->where("$t2_1TableName.publish_state", 'publish')
47-
->orderByDesc("$t2_1TableName.$recordCreationColumn")
48-
->select([
49-
"$t2_1TableName.$relatedFK",
50-
"$t2_1TableName.publish_state",
51-
"$t2_1TableName.$relatedPK",
52-
"$t2_1TableName.$recordCreationColumn",
53-
"$t2_1TableName.to_data AS data",
54-
]);
55-
$t2_2Q = DB::table($related->getTable(), $t2_2TableName)
44+
->select('_cv_t2_all.*');
45+
46+
$cvPublishedQ = DB::table($cvModel->getTable(), '_cv_t2_p')
5647
->joinSub(
57-
$t1Q,
58-
$t1TableName,
48+
$baseQ,
49+
'_cv_t1_base',
5950
fn (JoinClause $join) => $join
60-
->on("$t1TableName.latest_version_id", '=', "$t2_2TableName.$relatedPK")
51+
->on('_cv_t1_base.joined_version_id', '=', "_cv_t2_p.$cvPK")
6152
)
62-
->orderByDesc("$t2_2TableName.$recordCreationColumn")
63-
->select([
64-
"$t2_2TableName.$relatedFK",
65-
"$t2_2TableName.publish_state",
66-
"$t2_2TableName.$relatedPK",
67-
"$t2_2TableName.$recordCreationColumn",
68-
"$t2_2TableName.to_data AS data",
69-
]);
53+
->whereExists(
54+
fn (\Illuminate\Database\Query\Builder | \Illuminate\Database\Eloquent\Builder $query) => $query
55+
->select(DB::raw(1))
56+
->from($cvPublishedModel->getTable(), '_cv_base_p')
57+
->where("_cv_base_p.$cvPublishedFK", '=', "_cv_t2_p.$cvPK")
58+
)
59+
->select('_cv_t2_p.*');
7060

61+
$cvAllTableName = '_cv_all';
62+
$cvPublishedTableName = '_cv_published';
7163
$query
7264
->leftJoinSub(
73-
$t2_1Q,
74-
$t2_1TableName,
65+
$cvAllQ,
66+
$cvAllTableName,
7567
fn (JoinClause $join) => $join
76-
->on($model->getQualifiedKeyName(), '=', "{$t2_1TableName}.{$relatedFK}")
68+
->on($model->getQualifiedKeyName(), '=', "$cvAllTableName.$cvFK")
7769
)
70+
->addSelect([
71+
DB::raw("{$cvAllTableName}.{$cvPK} AS __latest_version_id"),
72+
DB::raw("{$cvAllTableName}.{$cvCreationColumn} AS __latest_version_dt"),
73+
DB::raw("{$cvAllTableName}.to_data AS __latest_version_data"),
74+
])
7875
->leftJoinSub(
79-
$t2_2Q,
80-
$t2_2TableName,
76+
$cvPublishedQ,
77+
$cvPublishedTableName,
8178
fn (JoinClause $join) => $join
82-
->on($model->getQualifiedKeyName(), '=', "{$t2_2TableName}.{$relatedFK}")
79+
->on($model->getQualifiedKeyName(), '=', "$cvPublishedTableName.$cvFK")
8380
)
84-
->addSelect($model->qualifyColumn('*'))
8581
->addSelect([
86-
DB::raw("{$t2_1TableName}.{$relatedPK} AS __latest_version_publish_id"),
87-
DB::raw("{$t2_1TableName}.{$recordCreationColumn} AS __latest_version_publish_dt"),
88-
DB::raw("{$t2_1TableName}.data AS __latest_version_publish_data"),
82+
DB::raw("{$cvPublishedTableName}.{$cvPK} AS __latest_version_publish_id"),
83+
DB::raw("{$cvPublishedTableName}.{$cvCreationColumn} AS __latest_version_publish_dt"),
84+
DB::raw("{$cvPublishedTableName}.to_data AS __latest_version_publish_data"),
8985
])
90-
->addSelect([
91-
DB::raw("{$t2_2TableName}.{$relatedPK} AS __latest_version_id"),
92-
DB::raw("{$t2_2TableName}.{$recordCreationColumn} AS __latest_version_dt"),
93-
DB::raw("{$t2_2TableName}.data AS __latest_version_data"),
94-
]);
86+
->addSelect($model->qualifyColumn('*'));
9587

9688
$model->withCasts([
9789
'__latest_version_publish_dt' => 'datetime',

0 commit comments

Comments
 (0)