Skip to content

Commit 7814414

Browse files
committed
FOUR-25243
1 parent 4fe5efa commit 7814414

4 files changed

Lines changed: 119 additions & 1 deletion

File tree

‎ProcessMaker/Models/Screen.php‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,16 @@ public static function getScreenByKey(string $key) : ?self
305305
return $screen;
306306
}
307307

308+
public static function getScreenByKeyNonSystem(string $key) : ?self
309+
{
310+
$screen = self::firstWhere('key', $key);
311+
if (!$screen) {
312+
$screen = self::createScreenByKey($key, false);
313+
}
314+
315+
return $screen;
316+
}
317+
308318
private static function createScreenByKey(string $key, bool $isSystem = true, string $path = null): self
309319
{
310320
// If no path is provided, use the default path

‎database/seeders/ScreenEmailSeeder.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ class ScreenEmailSeeder extends Seeder
1414
*/
1515
public function run()
1616
{
17-
return Screen::getScreenByKey('default-email-task-notification');
17+
return Screen::getScreenByKeyNonSystem('default-email-task-notification');
1818
}
1919
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
namespace Tests\Unit;
4+
5+
use Database\Seeders\ScreenEmailSeeder;
6+
use Illuminate\Foundation\Testing\RefreshDatabase;
7+
use ProcessMaker\Models\Screen;
8+
use ProcessMaker\Models\ScreenCategory;
9+
use Tests\TestCase;
10+
11+
class ScreenEmailSeederTest extends TestCase
12+
{
13+
use RefreshDatabase;
14+
15+
private function upgrade()
16+
{
17+
$this->artisan('migrate', [
18+
'--path' => 'upgrades/2025_07_08_151252_update_default_email_task_notification_screen_category.php',
19+
])->run();
20+
}
21+
22+
public function test_seeder_creates_screen_without_system_flag()
23+
{
24+
$seeder = new ScreenEmailSeeder();
25+
$seeder->run();
26+
27+
$screen = Screen::where('key', 'default-email-task-notification')->first();
28+
29+
$this->assertNotNull($screen);
30+
$this->assertEquals('default-email-task-notification', $screen->key);
31+
32+
$systemCategory = ScreenCategory::where('name', 'System')->first();
33+
if ($systemCategory) {
34+
$this->assertFalse($screen->categories()->where('category_id', $systemCategory->id)->exists());
35+
}
36+
37+
$this->assertNull($screen->screen_category_id);
38+
}
39+
40+
public function test_get_screen_by_key_non_system_method()
41+
{
42+
$screen = Screen::getScreenByKeyNonSystem('default-email-task-notification');
43+
44+
$this->assertNotNull($screen);
45+
$this->assertEquals('default-email-task-notification', $screen->key);
46+
47+
$systemCategory = ScreenCategory::where('name', 'System')->first();
48+
if ($systemCategory) {
49+
$this->assertFalse($screen->categories()->where('category_id', $systemCategory->id)->exists());
50+
}
51+
52+
$this->assertNull($screen->screen_category_id);
53+
}
54+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
use ProcessMaker\Models\Screen;
7+
use ProcessMaker\Models\ScreenCategory;
8+
9+
class UpdateDefaultEmailTaskNotificationScreenCategory extends Migration
10+
{
11+
/**
12+
* Run the migrations.
13+
*
14+
* @return void
15+
*/
16+
public function up()
17+
{
18+
// Find the default email task notification screen
19+
$screen = Screen::where('key', 'default-email-task-notification')->first();
20+
21+
if ($screen) {
22+
// Remove the screen from the System category
23+
$systemCategory = ScreenCategory::where('is_system', 1)->first();
24+
25+
if ($systemCategory) {
26+
$screen->categories()->detach($systemCategory->id);
27+
}
28+
29+
// Set screen_category_id to null to remove any category association
30+
$screen->update(['screen_category_id' => null]);
31+
}
32+
}
33+
34+
/**
35+
* Reverse the migrations.
36+
*
37+
* @return void
38+
*/
39+
public function down()
40+
{
41+
// Find the default email task notification screen
42+
$screen = Screen::where('key', 'default-email-task-notification')->first();
43+
44+
if ($screen) {
45+
// Re-add the screen to the System category
46+
$systemCategory = ScreenCategory::where('is_system', 1)->first();
47+
48+
if ($systemCategory) {
49+
$screen->categories()->attach($systemCategory->id);
50+
$screen->update(['screen_category_id' => $systemCategory->id]);
51+
}
52+
}
53+
}
54+
}

0 commit comments

Comments
 (0)