function view::load_views

Static factory method to load a list of views based upon a $where clause.

Although this method could be implemented to simply iterate over views::load(), that would be very slow. Buiding the views externally from unified queries is much faster.

File

includes/view.inc, line 1830

Class

view
An object to contain all of the data to generate a view.

Code

public static function load_views() {
    $result = db_query("SELECT DISTINCT v.* FROM {views_view} v");
    $views = array();
    // Load all the views.
    foreach ($result as $data) {
        $view = new view();
        $view->load_row($data);
        $view->loaded = TRUE;
        $view->type = t('Normal');
        $views[$view->name] = $view;
        $names[$view->vid] = $view->name;
    }
    // Stop if we didn't get any views.
    if (!$views) {
        return array();
    }
    // Now load all the subtables.
    foreach (view::db_objects() as $key) {
        $object_name = "views_{$key}";
        $result = db_query("SELECT * FROM {{$object_name}} WHERE vid IN (:vids) ORDER BY vid, position", array(
            ':vids' => array_keys($names),
        ));
        foreach ($result as $data) {
            $object = new $object_name(FALSE);
            $object->load_row($data);
            // Because it can get complicated with this much indirection, make a
            // shortcut reference.
            $location =& $views[$names[$object->vid]]->{$key};
            // If we have a basic id field, load the item onto the view based on
            // this ID, otherwise push it on.
            if (!empty($object->id)) {
                $location[$object->id] = $object;
            }
            else {
                $location[] = $object;
            }
        }
    }
    return $views;
}