function views_plugin_query_default::get_result_entities

Returns the according entity objects for the given query results.

Overrides views_plugin_query::get_result_entities

File

plugins/views_plugin_query_default.inc, line 1643

Class

views_plugin_query_default
Object used to create a SELECT query.

Code

public function get_result_entities($results, $relationship = NULL) {
    $base_table = $this->base_table;
    $base_table_alias = $base_table;
    if (!empty($relationship)) {
        foreach ($this->view->relationship as $current) {
            if (isset($current->alias) && $current->alias == $relationship) {
                $base_table = $current->definition['base'];
                $base_table_alias = $relationship;
                break;
            }
        }
    }
    $table_data = views_fetch_data($base_table);
    // Bail out if the table has not specified the according entity-type.
    if (!isset($table_data['table']['entity type'])) {
        return FALSE;
    }
    $entity_type = $table_data['table']['entity type'];
    $info = entity_get_info($entity_type);
    $is_revision = !empty($table_data['table']['revision']);
    $id_alias = $this->get_field_alias($base_table_alias, $info['entity keys'][$is_revision ? 'revision' : 'id']);
    // Assemble the ids of the entities to load.
    $ids = array();
    foreach ($results as $key => $result) {
        if (isset($result->{$id_alias})) {
            $ids[$key] = $result->{$id_alias};
        }
    }
    if (!$is_revision) {
        $entities = entity_load($entity_type, $ids);
        // Re-key the array by row-index.
        $result = array();
        foreach ($ids as $key => $id) {
            $result[$key] = isset($entities[$id]) ? $entities[$id] : FALSE;
        }
    }
    else {
        // There's no way in core to load revisions in bulk.
        $result = array();
        foreach ($ids as $key => $id) {
            // Nodes can be dealt with in core.
            if ($entity_type == 'node') {
                $result[$key] = node_load(NULL, $id);
            }
            elseif (module_exists('entity')) {
                $result[$key] = entity_revision_load($entity_type, $id);
            }
            else {
                // Otherwise this isn't supported.
                watchdog('views', 'Attempt to load a revision on an unsupported entity type @entity_type.', array(
                    '@entity_type' => $entity_type,
                ), WATCHDOG_WARNING);
            }
        }
    }
    return array(
        $entity_type,
        $result,
    );
}