class IngredientUnitUtility in Recipe 8.2
Provides the ingredient.unit service.
Hierarchy
- class \Drupal\ingredient\Utility\IngredientUnitUtility
Expanded class hierarchy of IngredientUnitUtility
2 files declare their use of IngredientUnitUtility
- IngredientFormatter.php in modules/
ingredient/ src/ Plugin/ Field/ FieldFormatter/ IngredientFormatter.php - IngredientWidget.php in modules/
ingredient/ src/ Plugin/ Field/ FieldWidget/ IngredientWidget.php
1 string reference to 'IngredientUnitUtility'
- ingredient.services.yml in modules/
ingredient/ ingredient.services.yml - modules/ingredient/ingredient.services.yml
1 service uses IngredientUnitUtility
- ingredient.unit in modules/
ingredient/ ingredient.services.yml - Drupal\ingredient\Utility\IngredientUnitUtility
File
- modules/
ingredient/ src/ Utility/ IngredientUnitUtility.php, line 10
Namespace
Drupal\ingredient\UtilityView source
class IngredientUnitUtility {
/**
* The ingredient.units configuration.
*
* @var \Drupal\Core\Config\ImmutableConfig
*/
protected $ingredientUnitConfig;
/**
* Constructs a new IngredientUnitUtility object.
*
* @param \Drupal\Core\Config\ConfigFactory $config_factory
* The config.factory service.
*/
public function __construct(ConfigFactory $config_factory) {
$this->ingredientUnitConfig = $config_factory
->get('ingredient.units');
}
/**
* Returns an array of units from configuration.
*
* @param string[] $sets_to_get
* An array of set id strings.
*
* @return string[]
* An array of units.
*/
public function getConfiguredUnits(array $sets_to_get = []) {
// The field settings will set disabled set values to 0 in configuration.
// Filter out any disabled values. This prevents custom unit sets with an
// ID of '0' and another solution may have to be found eventually.
$sets_to_get = array_filter($sets_to_get);
$unit_sets = $this->ingredientUnitConfig
->get('unit_sets');
$units = [];
foreach ($unit_sets as $set_id => $set) {
// Verify that the set contains an array of units.
if (empty($set['units']) || !is_array($set['units'])) {
continue;
}
// Skip the set if it's not in the $sets_to_get.
if (!empty($sets_to_get) && is_array($sets_to_get) && !in_array($set_id, $sets_to_get)) {
continue;
}
$units = array_merge($units, $set['units']);
}
return $units;
}
/**
* Sorts an array of units by the name element.
*
* @param array $units
* An array containing a 'name' element.
*
* @return array
* The sorted array of units.
*/
public function sortUnitsByName(array $units) {
uasort($units, function ($a, $b) {
return strcmp($a['name'], $b['name']);
});
return $units;
}
/**
* Returns options for a unit select form element.
*
* @todo The blank option should be created as the #empty_option in the
* individual select elements. Unfortunately, the default_unit element in
* the field settings form uses a #process function to set its options which
* seems to overwrite the #empty_option. Even setting the #empty_option
* during the #process step doesn't seem to work. This seems like a
* possible core bug and will probably have to be fixed there before we can
* complete this task.
*
* @param array $units
* An array of units.
*
* @return array
* An array of unit key/value pairs for use as select form element options.
*/
public function createUnitSelectOptions(array $units = []) {
// Put in a blank so non-matching units will not validate and save.
$options = [
'' => '',
];
foreach ($units as $unit_key => $unit) {
$text = $unit['name'];
if (!empty($unit['abbreviation'])) {
$text .= ' (' . $unit['abbreviation'] . ')';
}
$options[$unit_key] = $text;
}
return $options;
}
/**
* Returns options for a unit set select form element.
*
* @return array
* An array of all unit set names with unit names, keyed by set id.
*/
public function getUnitSetOptions() {
$unit_sets = $this->ingredientUnitConfig
->get('unit_sets');
$set_names = [];
foreach ($unit_sets as $key => $set) {
$set_name = $set['name'];
// Append a list of the unit names in the set, in parenthesis.
$unit_names = [];
foreach ($set['units'] as $unit) {
$unit_names[] = $unit['name'];
}
if (!empty($unit_names)) {
$set_name .= ' <em>(' . implode(', ', $unit_names) . ')</em>';
}
$set_names[$key] = $set_name;
}
return $set_names;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
IngredientUnitUtility:: |
protected | property | The ingredient.units configuration. | |
IngredientUnitUtility:: |
public | function | Returns options for a unit select form element. | |
IngredientUnitUtility:: |
public | function | Returns an array of units from configuration. | |
IngredientUnitUtility:: |
public | function | Returns options for a unit set select form element. | |
IngredientUnitUtility:: |
public | function | Sorts an array of units by the name element. | |
IngredientUnitUtility:: |
public | function | Constructs a new IngredientUnitUtility object. |