3
0
Fork 0
mirror of https://github.com/farmOS/farmOS.git synced 2024-02-23 11:37:38 +01:00
farmOS/modules/core/location/farm_location.module
2022-12-19 16:06:01 -05:00

148 lines
4.4 KiB
PHP

<?php
/**
* @file
* Contains farm_location.module.
*/
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
/**
* Implements hook_form_BASE_FORM_ID_alter().
*/
function farm_location_form_asset_form_alter(&$form, FormStateInterface $form_state, $form_id) {
// Check if the form has the required location fields.
if (isset($form['intrinsic_geometry']) && isset($form['is_fixed'])) {
// Set the visible state of the asset.intrinsic_geometry field.
// Only display if is_fixed is checked.
$form['intrinsic_geometry']['#states']['visible'] = [':input[name="is_fixed[value]"]' => ['checked' => TRUE]];
}
}
/**
* Implements hook_entity_base_field_info().
*/
function farm_location_entity_base_field_info(EntityTypeInterface $entity_type) {
\Drupal::moduleHandler()->loadInclude('farm_location', 'inc', 'farm_location.base_fields');
switch ($entity_type->id()) {
// Build asset base fields.
case 'asset':
return farm_location_asset_base_fields();
// Build log base fields.
case 'log':
return farm_location_log_base_fields();
default:
return [];
}
}
/**
* Implements hook_entity_base_field_info_alter().
*/
function farm_location_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) {
/** @var \Drupal\field\Entity\FieldConfig[] $fields */
// Prevent creating circular asset location.
if ($entity_type->id() == 'log' && !empty($fields['asset'])) {
$fields['asset']->addConstraint('CircularAssetLocation');
}
}
/**
* Sets the default value for asset is_location boolean field.
*
* @param \Drupal\Core\Entity\ContentEntityInterface $entity
* The entity being created.
* @param \Drupal\Core\Field\FieldDefinitionInterface $definition
* The field definition.
*
* @return array
* An array of default value keys with each entry keyed with the “value” key.
*
* @see \Drupal\Core\Field\FieldConfigBase::getDefaultValue()
*/
function farm_location_is_location_default_value(ContentEntityInterface $entity, FieldDefinitionInterface $definition): array {
$default = FALSE;
// Load the entity bundle.
$bundle = \Drupal::service('entity_type.manager')->getStorage('asset_type')->load($entity->bundle());
// Use the bundle's is_location third-party setting as a default.
$is_location = $bundle->getThirdPartySetting('farm_location', 'is_location');
if (!empty($is_location)) {
$default = TRUE;
}
return [
['value' => $default],
];
}
/**
* Sets the default value for asset is_fixed boolean field.
*
* @param \Drupal\Core\Entity\ContentEntityInterface $entity
* The entity being created.
* @param \Drupal\Core\Field\FieldDefinitionInterface $definition
* The field definition.
*
* @return array
* An array of default value keys with each entry keyed with the “value” key.
*
* @see \Drupal\Core\Field\FieldConfigBase::getDefaultValue()
*/
function farm_location_is_fixed_default_value(ContentEntityInterface $entity, FieldDefinitionInterface $definition): array {
$default = FALSE;
// Load the entity bundle.
$bundle = \Drupal::service('entity_type.manager')->getStorage('asset_type')->load($entity->bundle());
// Use the bundle's is_fixed third-party setting as a default.
$is_fixed = $bundle->getThirdPartySetting('farm_location', 'is_fixed');
if (!empty($is_fixed)) {
$default = TRUE;
}
return [
['value' => $default],
];
}
/**
* Sets the default value for log movement boolean field.
*
* @param \Drupal\Core\Entity\ContentEntityInterface $entity
* The entity being created.
* @param \Drupal\Core\Field\FieldDefinitionInterface $definition
* The field definition.
*
* @return array
* An array of default value keys with each entry keyed with the “value” key.
*
* @see \Drupal\Core\Field\FieldConfigBase::getDefaultValue()
*/
function farm_location_is_movement_default_value(ContentEntityInterface $entity, FieldDefinitionInterface $definition): array {
$default = FALSE;
// Load the entity bundle.
$bundle = \Drupal::service('entity_type.manager')->getStorage('log_type')->load($entity->bundle());
// Use the bundle's is_movement third-party setting as a default.
$is_movement = $bundle->getThirdPartySetting('farm_location', 'is_movement');
if (!empty($is_movement)) {
$default = TRUE;
}
return [
['value' => $default],
];
}