farmOS/modules/ui/action/src/Plugin/Derivative/FarmActions.php

74 lines
2.4 KiB
PHP

<?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 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';
}
}
return parent::getDerivativeDefinitions($base_plugin_definition);
}
}