MultifieldEntityController.php in Multifield 7
File
MultifieldEntityController.php
View source
<?php
class MultifieldEntityController extends DrupalDefaultEntityController {
public function load($ids = array(), $conditions = array()) {
if (!empty($conditions)) {
throw new InvalidArgumentException('MultifieldEntityController does not support entity_load() using conditions.');
}
$entities = array();
$passed_ids = !empty($ids) ? array_flip($ids) : FALSE;
if ($this->cache) {
$entities += $this
->cacheGet($ids, $conditions);
if ($passed_ids) {
$ids = array_keys(array_diff_key($passed_ids, $entities));
}
}
if ($ids === FALSE || $ids) {
$entities += $this
->queryLoad($ids);
}
return $entities;
}
protected function queryLoad($ids) {
$multifields = multifield_get_fields();
foreach (array_keys($multifields) as $field_name) {
$query = new EntityFieldQuery();
if ($ids) {
$query
->fieldCondition($field_name, 'id', $ids, 'IN');
}
else {
$query
->fieldCondition($field_name, 'id', 0, '>');
}
if ($results = $query
->execute()) {
$pseudo_entities = array();
$field = field_info_field($field_name);
foreach ($results as $entity_type => $entities) {
$entities = entity_load($entity_type, array_keys($entities));
foreach ($entities as $entity) {
if ($items = field_get_items($entity_type, $entity, $field_name)) {
foreach ($items as $item) {
$pseudo_entities[$item['id']] = _multifield_field_item_to_entity($field['type'], $item);
}
}
}
}
$this
->cacheSet($pseudo_entities);
}
}
return array_intersect_key($this->entityCache, drupal_map_assoc($ids, $ids));
}
public function cacheSet($entities) {
$this->entityCache += $entities;
}
}