annotate sites/all/modules/entity/entity.features.inc @ 9:830c812b520f

added smtp module
author root <root@paio.local>
date Mon, 28 Oct 2013 15:34:27 +0000
parents ce11bbd8f642
children
rev   line source
danielebarchiesi@4 1 <?php
danielebarchiesi@4 2
danielebarchiesi@4 3 /**
danielebarchiesi@4 4 * @file
danielebarchiesi@4 5 * Provides Features integration for entity types using the CRUD API.
danielebarchiesi@4 6 */
danielebarchiesi@4 7
danielebarchiesi@4 8 /**
danielebarchiesi@4 9 * Returns the configured entity features controller.
danielebarchiesi@4 10 */
danielebarchiesi@4 11 function entity_features_get_controller($type) {
danielebarchiesi@4 12 $static = &drupal_static(__FUNCTION__);
danielebarchiesi@4 13 if (!isset($static[$type])) {
danielebarchiesi@4 14 $info = entity_get_info($type);
danielebarchiesi@4 15 $info += array('features controller class' => 'EntityDefaultFeaturesController');
danielebarchiesi@4 16 $static[$type] = $info['features controller class'] ? new $info['features controller class']($type) : FALSE;
danielebarchiesi@4 17 }
danielebarchiesi@4 18 return $static[$type];
danielebarchiesi@4 19 }
danielebarchiesi@4 20
danielebarchiesi@4 21 /**
danielebarchiesi@4 22 * Default controller handling features integration.
danielebarchiesi@4 23 */
danielebarchiesi@4 24 class EntityDefaultFeaturesController {
danielebarchiesi@4 25
danielebarchiesi@4 26 protected $type, $info;
danielebarchiesi@4 27
danielebarchiesi@4 28 public function __construct($type) {
danielebarchiesi@4 29 $this->type = $type;
danielebarchiesi@4 30 $this->info = entity_get_info($type);
danielebarchiesi@4 31 $this->info['entity keys'] += array('module' => 'module', 'status' => 'status');
danielebarchiesi@4 32 $this->statusKey = $this->info['entity keys']['status'];
danielebarchiesi@4 33 $this->moduleKey = $this->info['entity keys']['module'];
danielebarchiesi@4 34 if (!empty($this->info['bundle of'])) {
danielebarchiesi@4 35 $entity_info = entity_get_info($this->info['bundle of']);
danielebarchiesi@4 36 $this->bundleKey = $entity_info['bundle keys']['bundle'];
danielebarchiesi@4 37 }
danielebarchiesi@4 38 }
danielebarchiesi@4 39
danielebarchiesi@4 40 /**
danielebarchiesi@4 41 * Defines the result for hook_features_api().
danielebarchiesi@4 42 */
danielebarchiesi@4 43 public function api() {
danielebarchiesi@4 44 return array(
danielebarchiesi@4 45 // The entity type has to be the features component name.
danielebarchiesi@4 46 $this->type => array(
danielebarchiesi@4 47 'name' => $this->info['label'],
danielebarchiesi@4 48 'feature_source' => TRUE,
danielebarchiesi@4 49 'default_hook' => isset($this->info['export']['default hook']) ? $this->info['export']['default hook'] : 'default_' . $this->type,
danielebarchiesi@4 50 // Use the provided component callbacks making use of the controller.
danielebarchiesi@4 51 'base' => 'entity',
danielebarchiesi@4 52 'file' => drupal_get_path('module', 'entity') . '/entity.features.inc',
danielebarchiesi@4 53 ),
danielebarchiesi@4 54 );
danielebarchiesi@4 55 }
danielebarchiesi@4 56
danielebarchiesi@4 57 /**
danielebarchiesi@4 58 * Generates the result for hook_features_export_options().
danielebarchiesi@4 59 */
danielebarchiesi@4 60 public function export_options() {
danielebarchiesi@4 61 $options = array();
danielebarchiesi@4 62 foreach (entity_load_multiple_by_name($this->type, FALSE) as $name => $entity) {
danielebarchiesi@4 63 $options[$name] = entity_label($this->type, $entity);
danielebarchiesi@4 64 }
danielebarchiesi@4 65 return $options;
danielebarchiesi@4 66 }
danielebarchiesi@4 67
danielebarchiesi@4 68 /**
danielebarchiesi@4 69 * Generates the result for hook_features_export().
danielebarchiesi@4 70 */
danielebarchiesi@4 71 public function export($data, &$export, $module_name = '') {
danielebarchiesi@4 72 $pipe = array();
danielebarchiesi@4 73 foreach (entity_load_multiple_by_name($this->type, $data) as $name => $entity) {
danielebarchiesi@4 74 // If this entity is provided by a different module, add it as dependency.
danielebarchiesi@4 75 if (($entity->{$this->statusKey} & ENTITY_IN_CODE) && $entity->{$this->moduleKey} != $module_name) {
danielebarchiesi@4 76 $module = $entity->{$this->moduleKey};
danielebarchiesi@4 77 $export['dependencies'][$module] = $module;
danielebarchiesi@4 78 }
danielebarchiesi@4 79 // Otherwise export the entity.
danielebarchiesi@4 80 else {
danielebarchiesi@4 81 $export['features'][$this->type][$name] = $name;
danielebarchiesi@4 82
danielebarchiesi@4 83 // If this is a bundle of a fieldable entity, add its fields to the pipe.
danielebarchiesi@4 84 if (!empty($this->info['bundle of'])) {
danielebarchiesi@4 85 $fields = field_info_instances($this->info['bundle of'], $entity->{$this->bundleKey});
danielebarchiesi@4 86 foreach ($fields as $name => $field) {
danielebarchiesi@4 87 $pipe['field'][] = "{$field['entity_type']}-{$field['bundle']}-{$field['field_name']}";
danielebarchiesi@4 88 }
danielebarchiesi@4 89 }
danielebarchiesi@4 90 }
danielebarchiesi@4 91 }
danielebarchiesi@4 92 // Add the module providing the entity type as dependency.
danielebarchiesi@4 93 if ($data && !empty($this->info['module'])) {
danielebarchiesi@4 94 $export['dependencies'][$this->info['module']] = $this->info['module'];
danielebarchiesi@4 95 // In case entity is not already an indirect dependency, add it.
danielebarchiesi@4 96 // We can do so without causing redundant dependencies because,
danielebarchiesi@4 97 // if entity is an indirect dependency, Features will filter it out.
danielebarchiesi@4 98 $export['dependencies']['entity'] = 'entity';
danielebarchiesi@4 99 }
danielebarchiesi@4 100 return $pipe;
danielebarchiesi@4 101 }
danielebarchiesi@4 102
danielebarchiesi@4 103 /**
danielebarchiesi@4 104 * Generates the result for hook_features_export_render().
danielebarchiesi@4 105 */
danielebarchiesi@4 106 function export_render($module, $data, $export = NULL) {
danielebarchiesi@4 107 $output = array();
danielebarchiesi@4 108 $output[] = ' $items = array();';
danielebarchiesi@4 109 foreach (entity_load_multiple_by_name($this->type, $data) as $name => $entity) {
danielebarchiesi@4 110 $export = " \$items['$name'] = entity_import('{$this->type}', '";
danielebarchiesi@4 111 // Make sure to escape the characters \ and '.
danielebarchiesi@4 112 $export .= addcslashes(entity_export($this->type, $entity, ' '), '\\\'');
danielebarchiesi@4 113 $export .= "');";
danielebarchiesi@4 114 $output[] = $export;
danielebarchiesi@4 115 }
danielebarchiesi@4 116 $output[] = ' return $items;';
danielebarchiesi@4 117 $output = implode("\n", $output);
danielebarchiesi@4 118
danielebarchiesi@4 119 $hook = isset($this->info['export']['default hook']) ? $this->info['export']['default hook'] : 'default_' . $this->type;
danielebarchiesi@4 120 return array($hook => $output);
danielebarchiesi@4 121 }
danielebarchiesi@4 122
danielebarchiesi@4 123 /**
danielebarchiesi@4 124 * Generates the result for hook_features_revert().
danielebarchiesi@4 125 */
danielebarchiesi@4 126 function revert($module = NULL) {
danielebarchiesi@4 127 if ($defaults = features_get_default($this->type, $module)) {
danielebarchiesi@4 128 foreach ($defaults as $name => $entity) {
danielebarchiesi@4 129 entity_delete($this->type, $name);
danielebarchiesi@4 130 }
danielebarchiesi@4 131 }
danielebarchiesi@4 132 }
danielebarchiesi@4 133 }
danielebarchiesi@4 134
danielebarchiesi@4 135 /**
danielebarchiesi@4 136 * Implements of hook_features_api().
danielebarchiesi@4 137 */
danielebarchiesi@4 138 function entity_features_api() {
danielebarchiesi@4 139 $items = array();
danielebarchiesi@4 140 foreach (entity_crud_get_info() as $type => $info) {
danielebarchiesi@4 141 if (!empty($info['exportable']) && $controller = entity_features_get_controller($type)) {
danielebarchiesi@4 142 $items += $controller->api();
danielebarchiesi@4 143 }
danielebarchiesi@4 144 }
danielebarchiesi@4 145 return $items;
danielebarchiesi@4 146 }
danielebarchiesi@4 147
danielebarchiesi@4 148 /**
danielebarchiesi@4 149 * Features component callback.
danielebarchiesi@4 150 */
danielebarchiesi@4 151 function entity_features_export_options($entity_type) {
danielebarchiesi@4 152 return entity_features_get_controller($entity_type)->export_options();
danielebarchiesi@4 153 }
danielebarchiesi@4 154
danielebarchiesi@4 155 /**
danielebarchiesi@4 156 * Features component callback.
danielebarchiesi@4 157 */
danielebarchiesi@4 158 function entity_features_export($data, &$export, $module_name = '', $entity_type) {
danielebarchiesi@4 159 return entity_features_get_controller($entity_type)->export($data, $export, $module_name);
danielebarchiesi@4 160 }
danielebarchiesi@4 161
danielebarchiesi@4 162 /**
danielebarchiesi@4 163 * Features component callback.
danielebarchiesi@4 164 */
danielebarchiesi@4 165 function entity_features_export_render($module, $data, $export = NULL, $entity_type) {
danielebarchiesi@4 166 return entity_features_get_controller($entity_type)->export_render($module, $data, $export);
danielebarchiesi@4 167 }
danielebarchiesi@4 168
danielebarchiesi@4 169 /**
danielebarchiesi@4 170 * Features component callback.
danielebarchiesi@4 171 */
danielebarchiesi@4 172 function entity_features_revert($module = NULL, $entity_type) {
danielebarchiesi@4 173 return entity_features_get_controller($entity_type)->revert($module);
danielebarchiesi@4 174 }