Pathologic was missing because of a .git folder inside.
[yaffs-website] / web / modules / contrib / devel / devel_generate / devel_generate.module
1 <?php
2
3 use Drupal\Core\Entity\EntityInterface;
4 use Drupal\Core\Field\FieldDefinitionInterface;
5 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
6 use Drupal\Component\Utility\Random;
7 use Drupal\devel_generate\DevelGenerateBase;
8 use Drupal\node\NodeInterface;
9
10 /**
11  * Implements hook_menu_links_discovered_alter().
12  */
13 function devel_generate_menu_links_discovered_alter(&$links) {
14   $devel_generate_plugins = $devel_generate_manager = \Drupal::service('plugin.manager.develgenerate')->getDefinitions();
15   foreach ($devel_generate_plugins as $id => $plugin) {
16     $label = $plugin['label'];
17     $links["devel_generate.$id"] = array(
18       'title' => "Generate $label",
19       'parent' => 'system.admin_config_development',
20       'description' => $plugin['description'],
21       'route_name' => "devel_generate.$id",
22     );
23   }
24 }
25
26 /**
27  * Implements hook_entity_insert().
28  *
29  * Inserts nodes properly based on generation options.
30  *
31  * @param \Drupal\Core\Entity\EntityInterface $entity
32  *  The base node created on submit. Inspects $node->devel_generate.
33  */
34 function devel_generate_entity_insert(EntityInterface $entity) {
35   if ($entity->getEntityTypeId() != 'node' || !isset($entity->devel_generate)) {
36     return;
37   }
38   /** @var \Drupal\node\NodeInterface $entity */
39   $results = $entity->devel_generate;
40
41   if (!empty($results['max_comments'])) {
42     foreach ($entity->getFieldDefinitions() as $field_name => $field_definition) {
43       if ($field_definition->getType() == 'comment' && $entity->get($field_name)->status == CommentItemInterface::OPEN) {
44         // Add comments for each comment field on entity.
45         devel_generate_add_comments($entity, $field_definition, $results['users'], $results['max_comments'], $results['title_length']);
46       }
47     }
48   }
49
50   // Add an url alias. Cannot happen before save because we don't know the nid.
51   if (!empty($results['add_alias'])) {
52     $path = array(
53       'source' => '/node/' . $entity->id(),
54       'alias' => '/node-' . $entity->id() . '-' . $entity->bundle(),
55     );
56     \Drupal::service('path.alias_storage')->save($path['source'], $path['alias']);
57   }
58
59   // Add node statistics.
60   if (!empty($results['add_statistics']) && \Drupal::moduleHandler()->moduleExists('statistics')) {
61     devel_generate_add_statistics($entity);
62   }
63 }
64
65 /**
66  * Create comments and add them to a node.
67  *
68  * @param \Drupal\node\NodeInterface $node
69  *   Node to add comments to.
70  * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
71  *   The field storage definition.
72  * @param array $users
73  *   Array of users to assign comment authors.
74  * @param int $max_comments
75  *   Max number of comments to generate per node.
76  * @param int $title_length
77  *   Max length of the title of the comments.
78  */
79 function devel_generate_add_comments(NodeInterface $node, FieldDefinitionInterface $field_definition, $users, $max_comments, $title_length = 8) {
80   $parents = array();
81   $field_name = $field_definition->getName();
82   $num_comments = mt_rand(1, $max_comments);
83   for ($i = 1; $i <= $num_comments; $i++) {
84     switch ($i % 3) {
85       case 0:
86         // No parent.
87       case 1:
88         // Top level parent.
89         $parents = \Drupal::entityQuery('comment')
90           ->condition('pid', 0)
91           ->condition('entity_id', $node->id())
92           ->condition('entity_type', 'node')
93           ->condition('field_name', $field_name)
94           ->range(0, 1)
95           ->execute();
96         break;
97       case 2:
98         // Non top level parent.
99         $parents = \Drupal::entityQuery('comment')
100           ->condition('pid', 0, '>')
101           ->condition('entity_id', $node->id())
102           ->condition('entity_type', 'node')
103           ->condition('field_name', $field_name)
104           ->range(0, 1)
105           ->execute();
106         break;
107     }
108     $random = new Random();
109     $stub = array(
110       'entity_type' => $node->getEntityTypeId(),
111       'entity_id' => $node->id(),
112       'field_name' => $field_name,
113       'name' => 'devel generate',
114       'mail' => 'devel_generate@example.com',
115       'timestamp' => mt_rand($node->getCreatedTime(), REQUEST_TIME),
116       'subject' => substr($random->sentences(mt_rand(2, $title_length), TRUE), 0, 63),
117       'uid' => $users[array_rand($users)],
118       'langcode' => $node->language()->getId(),
119     );
120     if ($parents) {
121       $stub['pid'] = current($parents);
122     }
123     $comment = entity_create('comment', $stub);
124
125     //Populate all core fields on behalf of field.module
126     DevelGenerateBase::populateFields($comment);
127     $comment->save();
128   }
129 }
130
131 /**
132  * Generate statistics information for a node.
133  *
134  * @param \Drupal\node\NodeInterface $node
135  *   A node object.
136  */
137 function devel_generate_add_statistics(NodeInterface $node) {
138   $statistic = array(
139     'nid' => $node->id(),
140     'totalcount' => mt_rand(0, 500),
141     'timestamp' => REQUEST_TIME - mt_rand(0, $node->getCreatedTime()),
142   );
143   $statistic['daycount'] = mt_rand(0, $statistic['totalcount']);
144   db_insert('node_counter')->fields($statistic)->execute();
145 }