Elgg  Version master
Users.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Elgg\Database\Seeds;
4 
6 
12 class Users extends Seed {
13 
17  public function seed() {
18  $count_friends = function ($user) {
19  return elgg_count_entities([
20  'types' => 'user',
21  'relationship' => 'friend',
22  'relationship_guid' => $user->guid,
23  'inverse_relationship' => false,
24  'metadata_names' => '__faker',
25  ]);
26  };
27 
28  $exclude = [];
29 
30  $this->advance($this->getCount());
31 
32  $profile_fields_config = _elgg_services()->fields->get('user', 'user');
33  $profile_fields = [];
34  foreach ($profile_fields_config as $field) {
35  $profile_fields[$field['name']] = $field['#type'];
36  }
37 
38  while ($this->getCount() < $this->limit) {
39  if ($this->create) {
40  $user = $this->createUser([], [
41  'profile_fields' => $profile_fields,
42  ]);
43  } else {
44  $user = $this->getRandomUser($exclude);
45  }
46 
47  if (!$user) {
48  continue;
49  }
50 
51  $this->createIcon($user);
52 
53  $exclude[] = $user->guid;
54 
55  // Friend the user other members
56  // Create a friend access collection and add some random friends to it
57  if ($count_friends($user)) {
58  continue;
59  }
60 
61  $collection = elgg_create_access_collection('Best Fake Friends Collection', $user->guid, 'friends_collection');
62  if ($collection instanceof \ElggAccessCollection) {
63  $this->log("Created new friend collection for user {$user->getDisplayName()} [collection_id: {$collection->id}]");
64  }
65 
66  $friends_limit = $this->faker()->numberBetween(5, 10);
67 
68  $friends_exclude = [$user->guid];
69  while ($count_friends($user) < $friends_limit) {
70  $friend = $this->getRandomUser($friends_exclude);
71  if (!$friend) {
72  continue;
73  }
74 
75  $friends_exclude[] = $friend->guid;
76 
77  if ($user->addFriend($friend->guid, true)) {
78  $this->log("User {$user->getDisplayName()} [guid: {$user->guid}] friended user {$friend->getDisplayName()} [guid: {$friend->guid}]");
79 
80  if ($collection instanceof \ElggAccessCollection && $this->faker()->boolean()) {
81  $collection->addMember($friend->guid);
82  }
83 
84  // randomize the river activity
85  $since = $this->create_since;
86  $this->setCreateSince(max($user->time_created, $friend->time_created));
87 
88  // fix river item
89  $river = elgg_get_river([
90  'view' => 'river/relationship/friend/create',
91  'action_type' => 'friend',
92  'subject_guid' => $user->guid,
93  'object_guid' => $friend->guid,
94  ]);
95  /* @var $item \ElggRiverItem */
96  foreach ($river as $item) {
97  $update = Update::table('river');
98  $update->set('posted', $update->param($this->getRandomCreationTimestamp(), ELGG_VALUE_TIMESTAMP))
99  ->where($update->compare('id', '=', $item->id, ELGG_VALUE_ID));
100 
101  _elgg_services()->db->updateData($update);
102  }
103 
104  $this->create_since = $since;
105  }
106  }
107 
108  $this->advance();
109  }
110  }
111 
115  public function unseed() {
116 
117  /* @var $users \ElggBatch */
119  'type' => 'user',
120  'metadata_name' => '__faker',
121  'limit' => false,
122  'batch' => true,
123  'batch_inc_offset' => false,
124  ]);
125 
126  /* @var $user \ElggUser */
127  foreach ($users as $user) {
128  if ($user->delete()) {
129  $this->log("Deleted user {$user->guid}");
130  } else {
131  $this->log("Failed to delete user {$user->guid}");
132  }
133 
134  $this->advance();
135  }
136  }
137 
141  public static function getType() : string {
142  return 'user';
143  }
144 
148  protected function getCountOptions() : array {
149  return [
150  'type' => 'user',
151  ];
152  }
153 }
if(!$items) $item
Definition: delete.php:13
faker(string $locale= 'en_US')
Returns an instance of faker.
Definition: Seeding.php:48
if(empty($user_guids)) $users
Definition: ban.php:12
static table($table, $alias=null)
{}
Definition: Update.php:13
createUser(array $properties=[])
Create a new fake user.
const ELGG_VALUE_ID
Definition: constants.php:114
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
$user
Definition: ban.php:7
elgg_get_river(array $options=[])
Get river items.
Definition: river.php:101
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
const ELGG_VALUE_TIMESTAMP
Definition: constants.php:115
log($level, $message, array $context=[])
Log a message.
Definition: Loggable.php:58
setCreateSince($since= 'now')
Set a time for entities to be created after.
Definition: TimeHelpers.php:33
Abstract seed.
Definition: Seed.php:14
_elgg_services()
Get the global service provider.
Definition: elgglib.php:346
elgg_create_access_collection(string $name, int $owner_guid=0, string $subtype=null)
Creates a new access collection.
Definition: access.php:147
getCount()
Get the count of the seeded entities.
Definition: Seed.php:76