-
-
Notifications
You must be signed in to change notification settings - Fork 265
/
FarmActions.php
98 lines (80 loc) · 3.64 KB
/
FarmActions.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
namespace Drupal\farm_ui_action\Plugin\Derivative;
use Drupal\Component\Plugin\Derivative\DeriverBase;
use Drupal\Component\Utility\Unicode;
/**
* Defines farmOS action links.
*/
class FarmActions extends DeriverBase {
/**
* {@inheritdoc}
*/
public function getDerivativeDefinitions($base_plugin_definition) {
// Load available entity types.
$entity_types = array_keys(\Drupal::entityTypeManager()->getDefinitions());
// Define the farmOS entity types we care about.
$farm_types = [
'asset',
'log',
'plan',
];
// Iterate through the farmOS entity types.
foreach ($farm_types as $type) {
// If the entity type does not exist, skip it.
if (!in_array($type, $entity_types)) {
continue;
}
// Generate a link to [entity-type]/add.
$name = 'farm.add.' . $type;
$this->derivatives[$name] = $base_plugin_definition;
$this->derivatives[$name]['title'] = 'Add ' . Unicode::ucfirst($type);
$this->derivatives[$name]['route_name'] = 'entity.' . $type . '.add_page';
// Add it to entity Views, if the farm_ui_views module is enabled.
if (\Drupal::moduleHandler()->moduleExists('farm_ui_views')) {
$this->derivatives[$name]['appears_on'][] = 'view.farm_' . $type . '.page';
// If this is a log, also add it to view.farm_log.page_user.
if ($type == 'log') {
$this->derivatives[$name]['appears_on'][] = 'view.farm_log.page_user';
}
}
// Add it to farm.dashboard, if the farm_ui_dashboard module is enabled.
if (\Drupal::moduleHandler()->moduleExists('farm_ui_dashboard')) {
$this->derivatives[$name]['appears_on'][] = 'farm.dashboard';
}
// Generate a link to [entity-type]/add/[bundle].
$name = 'farm.add.' . $type . '.bundle';
$this->derivatives[$name] = $base_plugin_definition;
$this->derivatives[$name]['route_name'] = 'entity.' . $type . '.add_form';
$this->derivatives[$name]['class'] = 'Drupal\farm_ui_action\Plugin\Menu\LocalAction\AddEntity';
$this->derivatives[$name]['entity_type'] = $type;
// Add the entity_bundles cache tag so action links are recreated after
// new bundles are installed.
$this->derivatives[$name]['cache_tags'] = ['entity_bundles'];
// Add it to entity bundle Views, if the farm_ui_views module is enabled.
if (\Drupal::moduleHandler()->moduleExists('farm_ui_views')) {
$this->derivatives[$name]['appears_on'][] = 'view.farm_' . $type . '.page_type';
$this->derivatives[$name]['bundle_parameter'] = 'arg_0';
}
// Generate links to [entity-type]/add/[bundle]?asset=[id] on asset pages.
if ($type == 'log') {
$bundles = \Drupal::service('entity_type.bundle.info')->getBundleInfo('log');
foreach ($bundles as $bundle => $bundle_info) {
$name = 'farm.asset.add.' . $type . '.' . $bundle;
$this->derivatives[$name] = $base_plugin_definition;
$this->derivatives[$name]['route_name'] = 'entity.' . $type . '.add_form';
$this->derivatives[$name]['class'] = 'Drupal\farm_ui_action\Plugin\Menu\LocalAction\AddEntity';
$this->derivatives[$name]['entity_type'] = $type;
$this->derivatives[$name]['bundle'] = $bundle;
$this->derivatives[$name]['appears_on'][] = 'entity.asset.canonical';
$this->derivatives[$name]['prepopulate'] = [
'asset' => [
'route_parameter' => 'asset',
],
];
$this->derivatives[$name]['cache_tags'] = ['entity_bundles'];
}
}
}
return parent::getDerivativeDefinitions($base_plugin_definition);
}
}