Skip to content

Commit 992d5d1

Browse files
authored
Merge pull request #18054 from craftcms/feature/entry-query
[6.x] Entry queries
2 parents 7a9add8 + 245ccdd commit 992d5d1

File tree

127 files changed

+11464
-723
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

127 files changed

+11464
-723
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace CraftCms\Cms\Database\Factories;
6+
7+
use craft\elements\Entry;
8+
use CraftCms\Cms\Element\Models\Draft;
9+
use CraftCms\Cms\Element\Models\Element;
10+
use CraftCms\Cms\User\Models\User;
11+
use Illuminate\Database\Eloquent\Factories\Factory;
12+
13+
final class DraftFactory extends Factory
14+
{
15+
protected $model = Draft::class;
16+
17+
#[\Override]
18+
public function definition(): array
19+
{
20+
return [
21+
'canonicalId' => Element::factory(),
22+
'creatorId' => User::factory(),
23+
'provisional' => fake()->boolean(),
24+
'name' => fake()->words(asText: true),
25+
'trackChanges' => fake()->boolean(),
26+
'dateLastMerged' => now(),
27+
'saved' => fake()->boolean(),
28+
];
29+
}
30+
31+
#[\Override]
32+
public function configure(): self
33+
{
34+
return $this->afterCreating(function (Draft $draft) {
35+
$element = Element::create([
36+
'type' => Entry::class,
37+
'canonicalId' => $draft->canonicalId,
38+
]);
39+
40+
$draft->update(['id' => $element->id]);
41+
});
42+
}
43+
}

database/Factories/ElementFactory.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@
1111
use CraftCms\Cms\Support\Str;
1212
use Illuminate\Database\Eloquent\Factories\Factory;
1313
use Illuminate\Support\Facades\DB;
14+
use Override;
1415

1516
final class ElementFactory extends Factory
1617
{
1718
protected $model = Element::class;
1819

19-
#[\Override]
20+
#[Override]
2021
public function definition(): array
2122
{
2223
return [
@@ -27,13 +28,16 @@ public function definition(): array
2728
];
2829
}
2930

30-
#[\Override]
31+
#[Override]
3132
public function configure(): self
3233
{
3334
return $this->afterCreating(function (Element $element) {
3435
DB::table(Table::ELEMENTS_SITES)
3536
->insert([
3637
'elementId' => $element->id,
38+
'title' => fake()->words(asText: true),
39+
'slug' => fake()->slug(),
40+
'uri' => fake()->slug(),
3741
'enabled' => true,
3842
'siteId' => Site::first()->id,
3943
'dateCreated' => $element->dateCreated,

database/Factories/EntryFactory.php

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99
use CraftCms\Cms\Entry\Models\EntryType;
1010
use CraftCms\Cms\Section\Models\Section;
1111
use Illuminate\Database\Eloquent\Factories\Factory;
12+
use Override;
1213

1314
final class EntryFactory extends Factory
1415
{
1516
protected $model = Entry::class;
1617

17-
#[\Override]
18+
#[Override]
1819
public function definition(): array
1920
{
2021
return [
@@ -27,4 +28,63 @@ public function definition(): array
2728
'dateUpdated' => $created,
2829
];
2930
}
31+
32+
#[Override]
33+
public function configure(): self
34+
{
35+
$this->afterCreating(function (Entry $entry) {
36+
$entry->element->update([
37+
'dateCreated' => $entry->postDate,
38+
'dateUpdated' => $entry->postDate,
39+
]);
40+
});
41+
42+
return $this;
43+
}
44+
45+
public function trashed(bool $trashed = true): self
46+
{
47+
return $this->state(fn (array $attributes) => [
48+
'id' => $attributes['id']->trashed($trashed),
49+
]);
50+
}
51+
52+
public function archived(bool $archived = true): self
53+
{
54+
return $this->state(fn (array $attributes) => [
55+
'id' => $attributes['id']->set('archived', $archived),
56+
]);
57+
}
58+
59+
public function enabled(bool $enabled = true): self
60+
{
61+
return $this->state(fn (array $attributes) => [
62+
'id' => $attributes['id']->set('enabled', $enabled),
63+
]);
64+
}
65+
66+
public function disabled(bool $disabled = true): self
67+
{
68+
return $this->state(fn (array $attributes) => [
69+
'id' => $attributes['id']->set('enabled', ! $disabled),
70+
]);
71+
}
72+
73+
public function pending(bool $pending = true): self
74+
{
75+
return $this->state(fn (array $attributes) => [
76+
'postDate' => $pending
77+
? fake()->dateTimeBetween('+1 day', '+1 year')
78+
: fake()->dateTime(),
79+
]);
80+
}
81+
82+
public function expired(bool $expired = true): self
83+
{
84+
return $this->state(fn (array $attributes) => [
85+
'expiryDate' => $expired
86+
? fake()->dateTime()
87+
: fake()->dateTimeBetween('+1 day', '+1 year'),
88+
]);
89+
}
3090
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace CraftCms\Cms\Database\Factories;
6+
7+
use CraftCms\Cms\User\Models\UserGroup;
8+
use Illuminate\Database\Eloquent\Factories\Factory;
9+
use Override;
10+
11+
final class UserGroupFactory extends Factory
12+
{
13+
protected $model = UserGroup::class;
14+
15+
#[Override]
16+
public function definition(): array
17+
{
18+
return [
19+
'name' => fake()->words(asText: true),
20+
'handle' => fake()->slug(),
21+
'description' => fake()->paragraph(),
22+
'dateCreated' => $date = fake()->dateTime(),
23+
'dateUpdated' => $date,
24+
];
25+
}
26+
}

src/Dashboard/Widgets/MyDrafts.php

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44

55
namespace CraftCms\Cms\Dashboard\Widgets;
66

7-
use Craft;
8-
use craft\elements\Entry;
97
use craft\helpers\Cp;
8+
use CraftCms\Cms\Element\Elements\Entry;
109
use CraftCms\Cms\Support\Html;
10+
use Illuminate\Support\Facades\Auth;
1111
use Illuminate\Support\Facades\Session;
12+
use Override;
1213

1314
use function CraftCms\Cms\t;
1415

@@ -17,7 +18,7 @@ final class MyDrafts extends Widget
1718
/**
1819
* {@inheritdoc}
1920
*/
20-
#[\Override]
21+
#[Override]
2122
public static function displayName(): string
2223
{
2324
return t('My Drafts');
@@ -26,7 +27,7 @@ public static function displayName(): string
2627
/**
2728
* {@inheritdoc}
2829
*/
29-
#[\Override]
30+
#[Override]
3031
protected static function allowMultipleInstances(): bool
3132
{
3233
return false;
@@ -40,13 +41,13 @@ protected static function allowMultipleInstances(): bool
4041
/**
4142
* {@inheritdoc}
4243
*/
43-
#[\Override]
44+
#[Override]
4445
public static function icon(): string
4546
{
4647
return 'scribble';
4748
}
4849

49-
#[\Override]
50+
#[Override]
5051
public static function getRules(): array
5152
{
5253
return [
@@ -57,7 +58,7 @@ public static function getRules(): array
5758
/**
5859
* {@inheritdoc}
5960
*/
60-
#[\Override]
61+
#[Override]
6162
public function getSettingsHtml(): string
6263
{
6364
return Cp::textFieldHtml([
@@ -73,22 +74,22 @@ public function getSettingsHtml(): string
7374
/**
7475
* {@inheritdoc}
7576
*/
76-
#[\Override]
77+
#[Override]
7778
public function getBodyHtml(): string
7879
{
79-
/** @var Entry[] $drafts */
80+
/** @var \craft\elements\ElementCollection<Entry> $drafts */
8081
$drafts = Entry::find()
8182
->drafts()
8283
->status(null)
83-
->draftCreator(Craft::$app->getUser()->getId())
84+
->draftCreator(Auth::user()->id)
8485
->section('*')
8586
->site('*')
8687
->unique()
87-
->orderBy(['dateUpdated' => SORT_DESC])
88+
->orderByDesc('dateUpdated')
8889
->limit($this->limit)
89-
->all();
90+
->get();
9091

91-
if (empty($drafts)) {
92+
if ($drafts->isEmpty()) {
9293
return Html::tag('div', t('You don’t have any active drafts.'), [
9394
'class' => ['zilch', 'small'],
9495
]);

src/Dashboard/Widgets/RecentEntries.php

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
namespace CraftCms\Cms\Dashboard\Widgets;
66

77
use Craft;
8-
use craft\elements\Entry;
9-
use craft\models\Section;
8+
use craft\elements\ElementCollection;
109
use craft\web\assets\recententries\RecentEntriesAsset;
10+
use CraftCms\Cms\Element\Elements\Entry;
1111
use CraftCms\Cms\Section\Enums\SectionType;
1212
use CraftCms\Cms\Support\Facades\Sections;
1313
use CraftCms\Cms\Support\Facades\Sites;
1414
use CraftCms\Cms\Support\Json;
15+
use Override;
1516

1617
use function CraftCms\Cms\t;
1718

@@ -20,7 +21,7 @@ final class RecentEntries extends Widget
2021
/**
2122
* {@inheritdoc}
2223
*/
23-
#[\Override]
24+
#[Override]
2425
public static function displayName(): string
2526
{
2627
return t('Recent Entries');
@@ -29,7 +30,7 @@ public static function displayName(): string
2930
/**
3031
* {@inheritdoc}
3132
*/
32-
#[\Override]
33+
#[Override]
3334
public static function icon(): string
3435
{
3536
return 'clock';
@@ -57,7 +58,7 @@ public function __construct(array $config = [])
5758
$this->siteId ??= Sites::getCurrentSite()->id;
5859
}
5960

60-
#[\Override]
61+
#[Override]
6162
public static function getRules(): array
6263
{
6364
return [
@@ -69,7 +70,7 @@ public static function getRules(): array
6970
/**
7071
* {@inheritdoc}
7172
*/
72-
#[\Override]
73+
#[Override]
7374
public function getSettingsHtml(): string
7475
{
7576
return Craft::$app->getView()->renderTemplate('_components/widgets/RecentEntries/settings.twig',
@@ -81,7 +82,7 @@ public function getSettingsHtml(): string
8182
/**
8283
* {@inheritdoc}
8384
*/
84-
#[\Override]
85+
#[Override]
8586
public function getTitle(): string
8687
{
8788
if (is_numeric($this->section) && $section = Sections::getSectionById((int) $this->section)) {
@@ -98,7 +99,7 @@ public function getTitle(): string
9899
// See if they are pulling entries from a different site
99100
$targetSiteId = $this->getTargetSiteId();
100101

101-
if ($targetSiteId !== null && $targetSiteId != Sites::getCurrentSite()->id) {
102+
if ($targetSiteId !== null && $targetSiteId !== Sites::getCurrentSite()->id) {
102103
$site = Sites::getSiteById($targetSiteId);
103104

104105
if ($site) {
@@ -115,7 +116,7 @@ public function getTitle(): string
115116
/**
116117
* {@inheritdoc}
117118
*/
118-
#[\Override]
119+
#[Override]
119120
public function getBodyHtml(): string
120121
{
121122
$params = [];
@@ -134,22 +135,20 @@ public function getBodyHtml(): string
134135

135136
return $view->renderTemplate('_components/widgets/RecentEntries/body.twig',
136137
[
137-
'entries' => $entries,
138+
'entries' => $entries->all(),
138139
]);
139140
}
140141

141142
/**
142143
* Returns the recent entries, based on the widget settings and user permissions.
143-
*
144-
* @return Entry[]
145144
*/
146-
private function getEntries(): array
145+
private function getEntries(): ElementCollection
147146
{
148147
$targetSiteId = $this->getTargetSiteId();
149148

150149
if ($targetSiteId === null) {
151150
// Hopeless
152-
return [];
151+
return new ElementCollection;
153152
}
154153

155154
// Normalize the target section ID value.
@@ -161,7 +160,7 @@ private function getEntries(): array
161160
}
162161

163162
if (! $targetSectionId) {
164-
return [];
163+
return new ElementCollection;
165164
}
166165

167166
return Entry::find()
@@ -171,8 +170,8 @@ private function getEntries(): array
171170
->siteId($targetSiteId)
172171
->limit($this->limit ?: 100)
173172
->with(['author'])
174-
->orderBy(['dateCreated' => SORT_DESC])
175-
->all();
173+
->orderByDesc('dateCreated')
174+
->get();
176175
}
177176

178177
/**

0 commit comments

Comments
 (0)