uuid_paragraphs.features.inc in UUID Features Integration 7
Features hooks for the uuid_paragraphs features component.
File
includes/uuid_paragraphs.features.incView source
<?php
/**
* @file
* Features hooks for the uuid_paragraphs features component.
*/
/**
* Implements hook_features_export_options().
*/
function uuid_paragraphs_features_export_options() {
$options = array();
$all_ids = array();
$enabled_bundles = array();
$entity_info = entity_get_info('paragraphs_item');
foreach ($entity_info['bundles'] as $key => $value) {
// Only allow enabled bundles to be exported.
if (variable_get("uuid_features_entity_paragraphs_item_{$key}", FALSE)) {
$enabled_bundles[] = $key;
}
}
if ($enabled_bundles) {
$efq_paragraphs_items = new EntityFieldQuery();
$efq_paragraphs_items
->entityCondition('entity_type', 'paragraphs_item');
$efq_paragraphs_items
->entityCondition('bundle', $enabled_bundles);
$efq_paragraphs_items
->addTag('uuid_paragraphs_features_export_options');
$result = $efq_paragraphs_items
->execute();
if (!empty($result['paragraphs_item'])) {
$all_ids = array_keys($result['paragraphs_item']);
}
$items = entity_load('paragraphs_item', $all_ids);
foreach ($items as $item) {
$info = $item
->instanceInfo();
$options[$item->uuid] = t('@type: @title', array(
'@type' => $info['label'] . " Field",
'@title' => $item->bundle . " - " . $item->item_id,
));
}
}
drupal_alter('uuid_paragraphs_features_export_options', $options);
return $options;
}
/**
* Implements hook_features_export().
*/
function uuid_paragraphs_features_export($data, &$export, $module_name = '') {
$export['dependencies']['paragraphs'] = 'paragraphs';
$export['dependencies']['uuid'] = 'uuid';
$export['dependencies']['uuid_features'] = 'uuid_features';
foreach ($data as $uuid) {
$export['features']['uuid_paragraphs'][$uuid] = $uuid;
}
return array();
}
/**
* Implements hook_features_export_render().
*/
function uuid_paragraphs_features_export_render($module, $data) {
$translatables = $code = $return = array();
$code[] = ' $paragraphs = array();';
$code[] = '';
foreach ($data as $uuid) {
$paragraphs = entity_uuid_load('paragraphs_item', array(
$uuid,
), array(), TRUE);
if (!count($paragraphs)) {
continue;
}
$paragraph = reset($paragraphs);
// Clone entity to avoid changes by reference.
$export = clone $paragraph;
// Do not export ids.
unset($export->item_id);
unset($export->revision_id);
$files = uuid_features_file_field_export($export, 'paragraphs_item');
$entity_type = 'paragraphs_item';
drupal_alter('uuid_entity_features_export_render', $entity_type, $export, $paragraph, $module);
$code[] = ' $paragraphs[] = ' . features_var_export(get_object_vars($export), ' ') . ';';
// Add packaged files, if any.
if (!empty($files)) {
foreach ($files as $filename => $src_path) {
$return[$filename] = $src_path;
}
}
}
if (!empty($translatables)) {
$code[] = features_translatables_export($translatables, ' ');
}
$code[] = ' return $paragraphs;';
$code = implode("\n", $code);
$return['uuid_features_default_paragraphs'] = $code;
return $return;
}
/**
* Implements hook_features_revert().
*/
function uuid_paragraphs_features_revert($module) {
uuid_paragraphs_features_rebuild($module);
}
/**
* Implements hook_features_rebuild().
*/
function uuid_paragraphs_features_rebuild($module) {
// Make sure all referenced entities exist.
if (module_exists('taxonomy')) {
// This module may not be installed.
taxonomy_features_rebuild($module);
}
field_features_rebuild($module);
uuid_node_features_rebuild($module);
cache_clear_all();
$paragraphs = features_get_default('uuid_paragraphs', $module);
if (!empty($paragraphs)) {
$entity_type = 'paragraphs_item';
foreach ($paragraphs as $paragraphs_item) {
try {
$fields = field_info_instances('paragraphs_item', $paragraphs_item['bundle']);
foreach ($fields as $field_name => $field_instance_config) {
$field_config = field_info_field($field_name);
if (isset($paragraphs_item[$field_name])) {
foreach ($paragraphs_item[$field_name] as $lang => $field_data) {
foreach ($field_data as $delta => $value) {
if ($field_config['type'] == 'entityreference' || $field_config['type'] == 'taxonomy_term_reference') {
$columns = array_keys($field_config['columns']);
$first_column = reset($columns);
if (isset($field_config['settings']['target_type'])) {
$target_entity = $field_config['settings']['target_type'];
}
elseif ($field_config['type'] == 'taxonomy_term_reference') {
$target_entity = 'taxonomy_term';
}
else {
throw new Exception('Unknown target.');
}
$ids = entity_get_id_by_uuid($target_entity, array(
$value[$first_column],
));
$paragraphs_item[$field_name][$lang][$delta][$first_column] = $ids ? reset($ids) : UUID_FEATURES_DEFAULT_FALLBACK_ID;
}
}
}
}
}
// Create a new paragraphs.
$paragraphs_item['original'] = TRUE;
$entity = entity_import('paragraphs_item', json_encode($paragraphs_item));
// Hack to ignore missing host entities.
/* @var ParagraphsItemEntity $entity */
$entity->is_new = FALSE;
// If this is an update, there will be a by-UUID matching paragraphs
// and we'll use that object for further processing.
$existing = entity_get_id_by_uuid('paragraphs_item', array(
$paragraphs_item['uuid'],
));
if (!empty($existing)) {
$entity = entity_load_single('paragraphs_item', $existing[$paragraphs_item['uuid']]);
foreach ($paragraphs_item as $key => $value) {
$entity->{$key} = $value;
}
}
drupal_alter('uuid_entity_features_rebuild', $entity_type, $entity, $paragraphs_item, $module);
uuid_features_file_field_import($entity, 'paragraphs_item', $module);
$entity
->save(TRUE);
} catch (Exception $e) {
}
}
module_invoke_all('uuid_entity_features_rebuild_complete', $entity_type, $paragraphs, $module);
}
uuid_node_features_rebuild($module);
}
Functions
Name![]() |
Description |
---|---|
uuid_paragraphs_features_export | Implements hook_features_export(). |
uuid_paragraphs_features_export_options | Implements hook_features_export_options(). |
uuid_paragraphs_features_export_render | Implements hook_features_export_render(). |
uuid_paragraphs_features_rebuild | Implements hook_features_rebuild(). |
uuid_paragraphs_features_revert | Implements hook_features_revert(). |