function ContentDevelGenerate::develGenerateContentPreNode
Same name in other branches
- 8.x-1.x devel_generate/src/Plugin/DevelGenerate/ContentDevelGenerate.php \Drupal\devel_generate\Plugin\DevelGenerate\ContentDevelGenerate::develGenerateContentPreNode()
- 4.x devel_generate/src/Plugin/DevelGenerate/ContentDevelGenerate.php \Drupal\devel_generate\Plugin\DevelGenerate\ContentDevelGenerate::develGenerateContentPreNode()
Preprocesses $results before adding content.
Parameters
array $results: Results information.
3 calls to ContentDevelGenerate::develGenerateContentPreNode()
- ContentDevelGenerate::batchContentPreNode in devel_generate/
src/ Plugin/ DevelGenerate/ ContentDevelGenerate.php - Batch wrapper for calling ContentPreNode.
- ContentDevelGenerate::generateContent in devel_generate/
src/ Plugin/ DevelGenerate/ ContentDevelGenerate.php - Generate content when not in batch mode.
- ContentDevelGenerate::validateDrushParams in devel_generate/
src/ Plugin/ DevelGenerate/ ContentDevelGenerate.php - Responsible for validating Drush params.
File
-
devel_generate/
src/ Plugin/ DevelGenerate/ ContentDevelGenerate.php, line 598
Class
- ContentDevelGenerate
- Provides a ContentDevelGenerate plugin.
Namespace
Drupal\devel_generate\Plugin\DevelGenerateCode
protected function develGenerateContentPreNode(array &$results) : void {
$authors = $results['authors'];
// Remove non-selected users. !== 0 will leave the Anonymous user in if it
// was selected on the form or entered in the drush parameters.
$authors = array_filter($authors, static fn($k): bool => $k !== 0);
// Likewise remove non-selected roles.
$roles = $results['roles'];
$roles = array_filter($roles, static fn($k): bool => $k !== 0);
// If specific roles have been selected then also add up to 50 users who
// have one of these roles. There is no direct way randomise the selection
// using entity queries, so we use a database query instead.
if ($roles !== [] && !in_array('authenticated', $roles)) {
$query = $this->database
->select('user__roles', 'ur')
->fields('ur', [
'entity_id',
'roles_target_id',
])
->condition('roles_target_id', $roles, 'in')
->range(0, 50)
->orderRandom();
$uids = array_unique($query->execute()
->fetchCol());
// If the 'anonymous' role is selected, then add '0' to the user ids. Also
// do this if no users were specified and none were found with the role(s)
// requested. This makes it clear that no users were found. It would be
// worse to fall through and select completely random users who do not
// have any of the roles requested.
if (in_array('anonymous', $roles) || $authors === [] && $uids === []) {
$uids[] = '0';
}
$authors = array_unique(array_merge($authors, $uids));
}
// If still no authors have been collected, or the 'authenticated' role was
// requested then add a random set of users up to a maximum of 50.
if ($authors === [] || in_array('authenticated', $roles)) {
$query = $this->database
->select('users', 'u')
->fields('u', [
'uid',
])
->range(0, 50)
->orderRandom();
$uids = $query->execute()
->fetchCol();
$authors = array_unique(array_merge($authors, $uids));
}
$results['users'] = $authors;
}