2021-05-05 21:21:05 +09:00
< ? php
2021-10-10 17:26:18 +09:00
declare ( strict_types = 1 );
2022-03-14 03:00:21 +09:00
namespace App\Test\Fixtures ;
2021-05-05 21:21:05 +09:00
2022-01-23 00:02:21 +09:00
use App\Core\ActorLocalRoles ;
2021-05-24 04:56:45 +09:00
use App\Core\VisibilityScope ;
2022-03-07 05:16:09 +09:00
use App\Entity\Activity ;
2021-09-18 11:22:27 +09:00
use App\Entity\Actor ;
2021-05-05 21:21:05 +09:00
use App\Entity\LocalUser ;
2021-05-07 06:53:25 +09:00
use App\Entity\Note ;
2022-03-07 05:16:09 +09:00
use Component\Conversation\Conversation ;
2021-12-28 05:33:56 +09:00
use Component\Group\Entity\GroupMember ;
use Component\Group\Entity\LocalGroup ;
2022-03-20 07:16:50 +09:00
use Component\Language\Entity\Language ;
2022-03-07 05:16:09 +09:00
use Component\Notification\Entity\Attention ;
use Component\Notification\Entity\Notification ;
2022-01-06 20:26:48 +09:00
use Component\Subscription\Entity\ActorSubscription ;
2021-05-05 21:21:05 +09:00
use Doctrine\Bundle\FixturesBundle\Fixture ;
use Doctrine\Persistence\ObjectManager ;
2022-03-20 07:16:50 +09:00
use Symfony\Component\Intl\Locales ;
2021-05-05 21:21:05 +09:00
2021-05-07 06:53:25 +09:00
class CoreFixtures extends Fixture
2021-05-05 21:21:05 +09:00
{
public function load ( ObjectManager $manager )
{
2022-03-20 07:16:50 +09:00
// Populate Initial Language values
foreach ( Locales :: getNames () as $key => $name ) {
$manager -> persist ( Language :: create ([ 'locale' => $key , 'short_display' => $key , 'long_display' => $name ]));
}
$manager -> flush ();
2021-05-07 06:53:25 +09:00
$actors = [];
$local_entities = [];
2021-08-19 01:26:37 +09:00
foreach ([
2022-03-07 05:16:09 +09:00
'taken_user' => [
LocalUser :: class ,
'setId' ,
[ 'password' => LocalUser :: hashPassword ( 'foobar' ), 'outgoing_email' => 'taken_user@provider.any' ],
2022-10-29 02:49:03 +09:00
[ 'roles' => ActorLocalRoles :: PARTICIPANT | ActorLocalRoles :: VISITOR , 'type' => Actor :: PERSON ],
2022-03-07 05:16:09 +09:00
],
'some_user' => [
LocalUser :: class ,
'setId' ,
[ 'password' => LocalUser :: hashPassword ( 'foobar' ), 'outgoing_email' => 'some_user@provider.any' ],
2022-10-29 02:49:03 +09:00
[ 'roles' => ActorLocalRoles :: PARTICIPANT | ActorLocalRoles :: VISITOR , 'type' => Actor :: PERSON ],
2022-03-07 05:16:09 +09:00
],
'admin' => [
LocalUser :: class ,
'setId' ,
[ 'password' => LocalUser :: hashPassword ( 'foobar' ), 'outgoing_email' => 'admin@provider.any' ],
2022-10-29 02:49:03 +09:00
[ 'roles' => ActorLocalRoles :: OPERATOR | ActorLocalRoles :: MODERATOR | ActorLocalRoles :: PARTICIPANT | ActorLocalRoles :: VISITOR , 'type' => Actor :: PERSON ],
2022-03-07 05:16:09 +09:00
],
'local_user_test_user' => [
LocalUser :: class ,
'setId' ,
[ 'password' => LocalUser :: hashPassword ( 'foobar' ), 'outgoing_email' => 'local_user_test_user@provider.any' ],
2022-10-29 02:49:03 +09:00
[ 'roles' => ActorLocalRoles :: PARTICIPANT | ActorLocalRoles :: VISITOR , 'type' => Actor :: PERSON ],
2022-03-07 05:16:09 +09:00
],
'form_personal_info_test_user' => [
LocalUser :: class ,
'setId' ,
[ 'password' => LocalUser :: hashPassword ( 'foobar' ), 'outgoing_email' => 'form_personal_info_test_user@provider.any' ],
2022-10-29 02:49:03 +09:00
[ 'roles' => ActorLocalRoles :: PARTICIPANT | ActorLocalRoles :: VISITOR , 'type' => Actor :: PERSON ],
2022-03-07 05:16:09 +09:00
],
'form_account_test_user' => [
LocalUser :: class ,
'setId' ,
[ 'password' => LocalUser :: hashPassword ( 'foobar' ), 'outgoing_email' => 'form_account_test_user@provider.any' ],
2022-10-29 02:49:03 +09:00
[ 'roles' => ActorLocalRoles :: PARTICIPANT | ActorLocalRoles :: VISITOR , 'type' => Actor :: PERSON ],
2022-03-07 05:16:09 +09:00
],
2022-03-08 10:46:50 +09:00
'taken_public_group' => [
2022-03-07 05:16:09 +09:00
LocalGroup :: class ,
'setActorId' ,
[],
[ 'roles' => ActorLocalRoles :: VISITOR , 'type' => Actor :: GROUP ],
],
2022-03-08 10:46:50 +09:00
'taken_private_group' => [
LocalGroup :: class ,
'setActorId' ,
[],
[ 'roles' => ActorLocalRoles :: VISITOR | ActorLocalRoles :: PRIVATE_GROUP , 'type' => Actor :: GROUP ],
],
2022-10-29 02:49:03 +09:00
'local_user_note_test' => [
LocalUser :: class ,
'setId' ,
[],
[ 'roles' => ActorLocalRoles :: PARTICIPANT | ActorLocalRoles :: VISITOR , 'type' => Actor :: PERSON ],
],
2021-11-24 07:34:35 +09:00
] as $nick => [ $entity , $method , $extra_create , $extra_create_actor ]) {
$actor = Actor :: create ( array_merge ([ 'nickname' => $nick , 'is_local' => true ], $extra_create_actor ));
2021-05-05 21:21:05 +09:00
$manager -> persist ( $actor );
2022-03-07 05:16:09 +09:00
// cannot use array spread for arrays with string keys
$ent = $entity :: create ( array_merge ([ 'nickname' => $nick ], $extra_create ));
2021-05-05 21:21:05 +09:00
$ent -> { $method }( $actor -> getId ());
2021-05-07 06:53:25 +09:00
$local_entities [ $nick ] = $ent ;
2021-05-05 21:21:05 +09:00
$manager -> persist ( $ent );
2021-11-08 22:44:35 +09:00
// Add self subscriptions
2022-03-07 05:16:09 +09:00
$manager -> persist ( ActorSubscription :: create ([ 'subscriber_id' => $actor -> getId (), 'subscribed_id' => $actor -> getId ()]));
2021-05-07 06:53:25 +09:00
$actors [ $nick ] = $actor ;
2021-05-05 21:21:05 +09:00
}
2021-05-07 06:53:25 +09:00
2021-11-11 21:27:10 +09:00
$notes = [];
2021-11-24 06:35:25 +09:00
$notes [] = Note :: create ([ 'actor_id' => $actors [ 'taken_user' ] -> getId (), 'content' => 'some other content' , 'content_type' => 'text/plain' , 'is_local' => true ]);
2022-03-08 10:46:50 +09:00
$notes [] = Note :: create ([ 'actor_id' => $actors [ 'taken_user' ] -> getId (), 'content' => 'private note' , 'scope' => VisibilityScope :: MESSAGE , 'content_type' => 'text/plain' , 'is_local' => false ]);
2022-10-29 02:49:03 +09:00
$notes [] = Note :: create ([ 'actor_id' => $actors [ 'local_user_note_test' ] -> getId (), 'content' => 'message' , 'scope' => VisibilityScope :: MESSAGE , 'content_type' => 'text/plain' , 'is_local' => false ]);
$notes [] = Note :: create ([ 'actor_id' => $actors [ 'local_user_note_test' ] -> getId (), 'content' => 'some other content' , 'content_type' => 'text/plain' , 'is_local' => false ]);
2021-05-24 04:56:45 +09:00
foreach ( $notes as $note ) {
$manager -> persist ( $note );
2022-03-07 05:16:09 +09:00
$activity = Activity :: create ([ 'actor_id' => $actors [ 'taken_user' ] -> getId (), 'verb' => 'create' , 'object_type' => 'note' , 'object_id' => $note -> getId (), 'source' => 'auto-test' ]);
Conversation :: assignLocalConversation ( $note , null );
$manager -> persist ( $activity );
2021-05-24 04:56:45 +09:00
}
2021-05-07 06:53:25 +09:00
2022-03-08 10:46:50 +09:00
$group_notes = [];
2022-03-14 00:03:03 +09:00
$group_notes [] = $public_group_note = Note :: create ([ 'actor_id' => $actors [ 'taken_user' ] -> getId (), 'content' => 'group note public' , 'scope' => VisibilityScope :: EVERYWHERE , 'content_type' => 'text/plain' , 'is_local' => true ]);
2022-10-29 02:49:03 +09:00
$group_notes [] = $private_group_note = Note :: create ([ 'actor_id' => $actors [ 'local_user_note_test' ] -> getId (), 'content' => 'group note private' , 'scope' => VisibilityScope :: GROUP , 'content_type' => 'text/plain' , 'is_local' => true ]);
2022-03-08 10:46:50 +09:00
foreach ( $group_notes as $note ) {
$manager -> persist ( $note );
$activity = Activity :: create ([ 'actor_id' => $actors [ 'taken_user' ] -> getId (), 'verb' => 'create' , 'object_type' => 'note' , 'object_id' => $note -> getId (), 'source' => 'auto-test' ]);
Conversation :: assignLocalConversation ( $note , null );
$manager -> persist ( $activity );
$manager -> persist ( Notification :: create ([ 'activity_id' => $activity -> getId (), 'target_id' => $local_entities [ 'taken_public_group' ] -> getActorId (), 'reason' => 'testing' ]));
$manager -> persist ( Notification :: create ([ 'activity_id' => $activity -> getId (), 'target_id' => $local_entities [ 'taken_private_group' ] -> getActorId (), 'reason' => 'testing' ]));
}
2022-03-15 03:33:47 +09:00
$manager -> persist ( Attention :: create ([ 'object_type' => Note :: schemaName (), 'object_id' => $public_group_note -> getId (), 'target_id' => $local_entities [ 'taken_public_group' ] -> getActorId ()]));
2022-03-08 10:46:50 +09:00
$manager -> persist ( GroupMember :: create ([ 'group_id' => $local_entities [ 'taken_private_group' ] -> getActorId (), 'actor_id' => $actors [ 'some_user' ] -> getId ()]));
2022-03-15 03:33:47 +09:00
$manager -> persist ( Attention :: create ([ 'object_type' => Note :: schemaName (), 'object_id' => $private_group_note -> getId (), 'target_id' => $local_entities [ 'taken_private_group' ] -> getActorId ()]));
2022-03-08 10:46:50 +09:00
2021-05-05 21:21:05 +09:00
$manager -> flush ();
}
}