Elgg  Version master
Groups.php
Go to the documentation of this file.
1 <?php
2 
4 
10 class Groups extends Seed {
11 
15  public function seed() {
16  $this->advance($this->getCount());
17 
18  $count_members = function ($group) {
19  return elgg_count_entities([
20  'types' => 'user',
21  'relationship' => 'member',
22  'relationship_guid' => $group->getGUID(),
23  'inverse_relationship' => true,
24  'metadata_names' => '__faker',
25  ]);
26  };
27 
28  $exclude = [];
29 
30  $profile_fields_config = _elgg_services()->fields->get('group', 'group');
31  $profile_fields = [];
32  foreach ($profile_fields_config as $field) {
33  $profile_fields[$field['name']] = $field['#type'];
34  }
35 
36  while ($this->getCount() < $this->limit) {
37  if ($this->create) {
38  $group = $this->createGroup([
39  'access_id' => $this->getRandomGroupVisibility(),
40  'content_access_mode' => $this->getRandomGroupContentAccessMode(),
41  'membership' => $this->getRandomGroupMembership(),
42  ], [
43  'profile_fields' => $profile_fields,
44  'group_tool_options' => _elgg_services()->group_tools->all(),
45  ]);
46  } else {
47  $group = $this->getRandomGroup($exclude);
48  }
49 
50  if (!$group) {
51  continue;
52  }
53 
54  $this->createIcon($group);
55 
56  $exclude[] = $group->guid;
57 
58  if ($count_members($group) > 1) {
59  // exclude owner from count
60  continue;
61  }
62 
63  $members_limit = $this->faker()->numberBetween(1, 5);
64 
65  $members_exclude = [];
66 
67  while ($count_members($group) - 1 < $members_limit) {
68  $member = $this->getRandomUser($members_exclude);
69  if (!$member) {
70  continue;
71  }
72 
73  $members_exclude[] = $member->guid;
74 
75  if ($group->join($member)) {
76  $this->log("User {$member->getDisplayName()} [guid: {$member->guid}] joined group {$group->getDisplayName()} [guid: {$group->guid}]");
77  }
78 
79  if (!$group->isPublicMembership()) {
80  $invitee = $this->getRandomUser($members_exclude);
81  if ($invitee) {
82  $members_exclude[] = $invitee->guid;
83  if (!$group->isMember($invitee)) {
84  $group->addRelationship($invitee->guid, 'invited');
85  $this->log("User {$invitee->getDisplayName()} [guid: {$invitee->guid}] was invited to {$group->getDisplayName()} [guid: {$group->guid}]");
86  }
87  }
88 
89  $requestor = $this->getRandomUser($members_exclude);
90  if ($requestor) {
91  $members_exclude[] = $requestor->guid;
92  if (!$group->hasRelationship($requestor->guid, 'invited')
93  && !$group->isMember($requestor)
94  ) {
95  $requestor->addRelationship($group->guid, 'membership_request');
96  $this->log("User {$invitee->getDisplayName()} [guid: {$invitee->guid}] requested to join {$group->getDisplayName()} [guid: {$group->guid}]");
97  }
98  }
99  }
100  }
101 
102  $this->advance();
103  }
104  }
105 
109  public function unseed() {
110 
111  /* @var $groups \ElggBatch */
112  $groups = elgg_get_entities([
113  'type' => 'group',
114  'metadata_name' => '__faker',
115  'limit' => false,
116  'batch' => true,
117  'batch_inc_offset' => false,
118  ]);
119 
120  /* @var $group \ElggGroup */
121  foreach ($groups as $group) {
122  if ($group->delete()) {
123  $this->log("Deleted group {$group->guid}");
124  } else {
125  $this->log("Failed to delete group {$group->guid}");
126  }
127 
128  $this->advance();
129  }
130  }
131 
135  public static function getType(): string {
136  return 'group';
137  }
138 
142  protected function getCountOptions(): array {
143  return [
144  'type' => 'group',
145  ];
146  }
147 }
getRandomGroupVisibility()
Returns random visibility value.
faker(string $locale= 'en_US')
Returns an instance of faker.
Definition: Seeding.php:48
getRandomGroupContentAccessMode()
Returns random content access mode value.
createGroup(array $properties=[])
Create a new fake group.
elgg_get_entities(array $options=[])
Fetches/counts entities or performs a calculation on their properties.
Definition: entities.php:504
advance(int $step=1)
Advance progressbar.
Definition: Seed.php:96
elgg_count_entities(array $options=[])
Returns a count of entities.
Definition: entities.php:515
getRandomUser(array $exclude=[], bool $allow_create=true)
Returns random fake user.
Definition: Seeding.php:510
if(elgg_extract('required', $vars)) if(elgg_extract('disabled', $vars)) $field
Definition: field.php:38
createIcon(\ElggEntity $entity)
Create an icon for an entity.
Definition: Seeding.php:768
log($level, $message, array $context=[])
Log a message.
Definition: Loggable.php:58
Abstract seed.
Definition: Seed.php:14
_elgg_services()
Get the global service provider.
Definition: elgglib.php:346
getCount()
Get the count of the seeded entities.
Definition: Seed.php:76
getRandomGroupMembership()
Returns random membership mode.
getRandomGroup(array $exclude=[], bool $allow_create=true)
Returns random fake group.
Definition: Seeding.php:558