3
0
Fork 0
mirror of https://github.com/farmOS/farmOS.git synced 2024-02-23 11:37:38 +01:00

Implement hooks for entity load, insert, update, and delete to maintain asset type inventory settings.

This commit is contained in:
Michael Stenta 2017-10-12 13:31:59 -04:00
parent 5789e39117
commit b658eba543

View file

@ -29,6 +29,125 @@ function farm_inventory_entity_view_alter(&$build, $type) {
);
}
/**
* Implements hook_entity_load().
*/
function farm_inventory_entity_load($entities, $type) {
// Only act on farm_asset_type entities.
if ($type != 'farm_asset_type') {
return;
}
// Load asset type inventory settings.
$settings = array();
$result = db_query('SELECT * FROM {farm_inventory_asset_type}');
foreach ($result as $row) {
if (!empty($row->type)) {
$settings[$row->type] = array(
'enabled' => $row->enabled,
'individual' => $row->individual,
);
}
}
// Iterate through the entities and add inventory settings.
foreach ($entities as $entity) {
// Get the asset type machine name.
$asset_type = $entity->type;
// If settings are available for the entity's bundle, add them.
if (!empty($settings[$asset_type])) {
$entity->inventory = $settings[$asset_type];
}
}
}
/**
* Implements hook_entity_insert().
*/
function farm_inventory_entity_insert($entity, $type) {
// Only act on farm_asset_type entities.
if ($type != 'farm_asset_type') {
return;
}
// Save asset type inventory settings.
_farm_inventory_asset_type_settings_save($entity);
}
/**
* Implements hook_entity_update().
*/
function farm_inventory_entity_update($entity, $type) {
// Only act on farm_asset_type entities.
if ($type != 'farm_asset_type') {
return;
}
// Save asset type inventory settings.
_farm_inventory_asset_type_settings_save($entity);
}
/**
* Helper function for saving asset type inventory settings when an asset type
* is inserted or updated.
*
* @param FarmAssetType $asset_type
* A farm asset type entity.
*/
function _farm_inventory_asset_type_settings_save($asset_type) {
// If the machine name is not set, bail.
if (empty($asset_type->type)) {
return;
}
// If inventory settings are provided, save them.
if (!empty($asset_type->inventory)) {
// First, delete existing settings.
_farm_inventory_asset_type_settings_delete($asset_type->type);
// Then, save new settings.
$record = array('type' => $asset_type->type);
$record = array_merge($record, $asset_type->inventory);
drupal_write_record('farm_inventory_asset_type', $record);
}
}
/**
* Implements hook_entity_update().
*/
function farm_inventory_entity_delete($entity, $type) {
// Only act on farm_asset_type entities.
if ($type != 'farm_asset_type') {
return;
}
// If the asset machine name is not set, bail.
if (empty($entity->type)) {
return;
}
// Delete settings for this asset type.
_farm_inventory_asset_type_settings_delete($entity->type);
}
/**
* Helper function for deleting asset type inventory settings.
*
* @param string $type
* The asset type machine name.
*/
function _farm_inventory_asset_type_settings_delete($type) {
db_query('DELETE FROM {farm_inventory_asset_type} WHERE type = :type', array(':type' => $type));
}
/**
* Calculate an asset's inventory level.
*