Skip to content

Commit

Permalink
Pass languageCode argument for some missing hooks #6117
Browse files Browse the repository at this point in the history
  • Loading branch information
afbora committed Jan 9, 2024
1 parent 7a4fb8a commit 191b923
Show file tree
Hide file tree
Showing 4 changed files with 168 additions and 6 deletions.
12 changes: 12 additions & 0 deletions src/Cms/PageActions.php
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,19 @@ public function changeTitle(
string $title,
string|null $languageCode = null
): static {
// if the `$languageCode` argument is not set and is not the default language
// the `$languageCode` argument is sent as the current language
if (
$languageCode === null &&
$language = $this->kirby()->language()
) {
if ($language->isDefault() === false) {
$languageCode = $language->code();
}
}

$arguments = ['page' => $this, 'title' => $title, 'languageCode' => $languageCode];

return $this->commit('changeTitle', $arguments, function ($page, $title, $languageCode) {
$page = $page->save(['title' => $title], $languageCode);

Expand Down
21 changes: 15 additions & 6 deletions src/Cms/SiteActions.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,25 @@ protected function commit(
*/
public function changeTitle(
string $title,
string $languageCode = null
string|null $languageCode = null
): static {
$site = $this;
$title = trim($title);
// if the `$languageCode` argument is not set and is not the default language
// the `$languageCode` argument is sent as the current language
if (
$languageCode === null &&
$language = $this->kirby()->language()
) {
if ($language->isDefault() === false) {
$languageCode = $language->code();
}
}

$arguments = ['site' => $this, 'title' => trim($title), 'languageCode' => $languageCode];

return $this->commit(
'changeTitle',
compact('site', 'title', 'languageCode'),
fn ($site, $title, $languageCode) =>
$site->save(['title' => $title], $languageCode)
$arguments,
fn ($site, $title, $languageCode) => $site->save(['title' => $title], $languageCode)
);
}

Expand Down
77 changes: 77 additions & 0 deletions tests/Cms/Pages/PageActionsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -1146,6 +1146,83 @@ public function testChangeTitleHooks()
$this->assertSame(2, $calls);
}

public function testChangeTitleBeforeHookDefaultLanguage()
{
$calls = 0;
$phpunit = $this;

$app = $this->app->clone([
'languages' => [
[
'code' => 'en',
'name' => 'English',
'default' => true
],
[
'code' => 'de',
'name' => 'Deutsch',
]
],
'hooks' => [
'page.changeTitle:before' => function (Page $page, $title, $languageCode) use ($phpunit, &$calls) {
$phpunit->assertSame('test', $page->title()->value);
$phpunit->assertSame('New Title', $title);
$phpunit->assertNull($languageCode);
$calls++;
},
]
]);

$app->impersonate('kirby');

$page = new Page([
'slug' => 'test'
]);

$page->changeTitle('New Title');

$this->assertSame(1, $calls);
}

public function testChangeTitleBeforeHookSecondaryLanguage()
{
$calls = 0;
$phpunit = $this;

$app = $this->app->clone([
'languages' => [
[
'code' => 'en',
'name' => 'English',
'default' => true
],
[
'code' => 'de',
'name' => 'Deutsch',
]
],
'hooks' => [
'page.changeTitle:before' => function (Page $page, $title, $languageCode) use ($phpunit, &$calls) {
$phpunit->assertSame('test', $page->title()->value);
$phpunit->assertSame('New Title', $title);
$phpunit->assertSame('de', $languageCode);
$calls++;
},
]
]);

$app->impersonate('kirby');
$app->setCurrentLanguage('de');

$page = new Page([
'slug' => 'test'
]);

$page->changeTitle('New Title', 'de');

$this->assertSame(1, $calls);
}

public function testCreateHooks()
{
$calls = 0;
Expand Down
64 changes: 64 additions & 0 deletions tests/Cms/Site/SiteActionsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,70 @@ public function testChangeTitleHooks()
$this->assertSame(2, $calls);
}

public function testChangeTitleHookBeforeHookDefaultLanguage()
{
$calls = 0;
$phpunit = $this;

$app = $this->app->clone([
'languages' => [
[
'code' => 'en',
'name' => 'English',
'default' => true
],
[
'code' => 'de',
'name' => 'Deutsch',
]
],
'hooks' => [
'site.changeTitle:before' => function (Site $site, $title, $languageCode) use ($phpunit, &$calls) {
$phpunit->assertNull($site->title()->value());
$phpunit->assertSame('New Title', $title);
$phpunit->assertNull($languageCode);
$calls++;
}
]
]);

$app->site()->changeTitle('New Title');

$this->assertSame(1, $calls);
}

public function testChangeTitleHookBeforeHookSecondaryLanguage()
{
$calls = 0;
$phpunit = $this;

$app = $this->app->clone([
'languages' => [
[
'code' => 'en',
'name' => 'English',
'default' => true
],
[
'code' => 'de',
'name' => 'Deutsch',
]
],
'hooks' => [
'site.changeTitle:before' => function (Site $site, $title, $languageCode) use ($phpunit, &$calls) {
$phpunit->assertNull($site->title()->value());
$phpunit->assertSame('New Title', $title);
$phpunit->assertSame('de', $languageCode);
$calls++;
}
]
]);

$app->site()->changeTitle('New Title', 'de');

$this->assertSame(1, $calls);
}

public function testUpdateHooks()
{
$calls = 0;
Expand Down

0 comments on commit 191b923

Please sign in to comment.