Skip to content

Instantly share code, notes, and snippets.

@sebas5384
Created May 6, 2014 04:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sebas5384/e53ae978fddad831f011 to your computer and use it in GitHub Desktop.
Save sebas5384/e53ae978fddad831f011 to your computer and use it in GitHub Desktop.
/**
* Implements hook_install().
*/
function power_one_install() {
// The "generation_site" entity type already exists at this point.
// Create a new entity bundle using ECK's API.
$new_bundle = function($name, $label, $entity_type) {
$bundle = new Bundle();
$bundle->name = $name;
$bundle->label = $label;
$bundle->entity_type = $entity_type;
$bundle->save();
return $bundle;
};
// Add a field API field to the bundle.
$add = function($bundle, $type, $name, $label, $settings = array()) {
$options = array(
'field' => array('field_name' => $name, 'settings' => $settings),
'instance' => array('label' => $label, 'required' => TRUE),
);
$bundle->addField($type, $options);
};
$add_max = function($bundle, $type, $name, $label, $max_length) use ($add) {
$add($bundle, $type, $name, $label, array('max_length' => $max_length));
};
// Add a site entity reference field to the bundle.
$add_ref = function($bundle) {
$bundle->addField('entityreference', array(
'field' => array(
'field_name' => 'pow_site',
'settings' => array(
'target_type' => 'generation_site',
'bundle' => 'power_one',
'handler_settings' => array(
'sort' => array(
'direction' => 'ASC',
'property' => 'title',
'type' => 'property',
),
'target_bundles' => array(
'power_one' => 'power_one',
),
),
),
),
'instance' => array(
'label' => 'Site',
'required' => TRUE,
),
));
};
// Create and field our site bundle.
$bundle = $new_bundle('power_one', 'Power-One', 'generation_site');
$bundle->addField('date', array(
'field' => array(
'field_name' => 'pow_install_date',
'settings' => array(
'granularity' => array(
'day' => 'day',
'hour' => 0,
'minute' => 0,
'month' => 'month',
'second' => 0,
'year' => 'year',
),
),
),
'instance' => array(
'label' => 'Install date',
'required' => TRUE,
'settings' => array(
'default_value' => 'blank',
),
'widget' => array(
'settings' => array(
'year_range' => '2000:+3',
),
'type' => 'date_popup',
),
),
));
$add($bundle, 'list_boolean', 'pow_is_rgpv', 'Uses revenue grade meters');
$add($bundle, 'number_integer', 'pow_system_size', 'System size');
$add_max($bundle, 'text', 'pow_timezone', 'Timezone', 20);
$add_max($bundle, 'text', 'pow_system_size_units', 'System size units', 10);
// Create an entity type for devices.
$device = new EntityType();
$device->name = 'pow_device';
$device->label = 'Power-One Device';
$device->addProperty('pow_name', 'Device name', 'text', 'title');
$device->addProperty('pow_eid', 'Power-One Entity ID', 'positive_integer');
$device->addProperty('pow_logger_eid', 'Power-One Logger Entity ID', 'positive_integer');
$device->save();
// Add fields to Device bundle.
$bundle = $new_bundle('pow_device', 'Power-One Device', 'pow_device');
$add($bundle, 'list_boolean', 'pow_is_active', 'Active');
$add($bundle, 'text', 'pow_manufacturer', 'Manufacturer');
$add_max($bundle, 'text', 'pow_device_id', 'Device ID', 32);
$add_max($bundle, 'text', 'pow_device_type_id', 'Device type ID', 32);
$add_max($bundle, 'text', 'pow_device_number', 'Device number', 32);
$add_ref($bundle);
// Create an entity type for loggers.
$device = new EntityType();
$device->name = 'pow_logger';
$device->label = 'Power-One Logger';
$device->addProperty('pow_name', 'Logger name', 'text', 'title');
$device->addProperty('pow_eid', 'Power-One Entity ID', 'positive_integer');
$device->addProperty('pow_lid', 'Power-One Logger ID', 'text');
$device->save();
// Add fields to Logger bundle.
$bundle = $new_bundle('pow_logger', 'Power-One Logger', 'pow_logger');
$add($bundle, 'list_boolean', 'pow_is_active', 'Active');
$add($bundle, 'text', 'pow_manufacturer', 'Manufacturer');
$add_max($bundle, 'text', 'pow_mac_address', 'MAC Address', 32);
$add_max($bundle, 'text', 'pow_model', 'Model', 32);
$add_ref($bundle);
}
/**
* Implements hook_uninstall().
*/
function power_one_uninstall() {
$entity_types = array('pow_device', 'pow_logger');
foreach ($entity_types as $name) {
if ($type = EntityType::loadByName($name)) {
$type->delete();
}
}
if ($bundle = Bundle::loadByMachineName('generation_site_power_one')) {
$bundle->delete();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment