function views1_import

Convert a Views 1 view to a Views 2 view.

2 calls to views1_import()
views_ui_convert1 in includes/convert.inc
Page callback for the tools - Views 1 convert page
views_ui_import_validate in includes/admin.inc
Validate handler to import a view

File

includes/convert.inc, line 173

Code

function views1_import($imported) {
    views_include_handlers();
    views_module_include('views_convert.inc');
    $view = views_new_view();
    $view->name = $imported->name;
    $view->description = $imported->description;
    if (!empty($imported->page) && !empty($imported->url)) {
        $page_display = $view->add_display('page');
    }
    if (!empty($imported->block)) {
        $block_display = $view->add_display('block');
    }
    $view->init_display();
    $handler =& $view->display['default']->handler;
    $handler->set_option('title', $imported->page_title);
    $handler->set_option('header', $imported->page_header);
    $handler->set_option('header_format', $imported->page_header_format);
    $handler->set_option('footer', $imported->page_footer);
    $handler->set_option('footer_format', $imported->page_footer_format);
    $handler->set_option('empty', $imported->page_empty);
    $handler->set_option('empty_format', $imported->page_empty_format);
    $handler->set_option('use_pager', $imported->use_pager);
    $handler->set_option('items_per_page', $imported->nodes_per_page);
    $handler->set_option('pager_element', 0);
    $handler->set_option('offset', 0);
    $access = array(
        'type' => 'none',
        'role' => array(),
        'perm' => '',
    );
    if ($imported->access) {
        $access['type'] = 'role';
        $access['role'] = drupal_map_assoc($imported->access);
    }
    $handler->set_option('access', $access);
    if (!empty($imported->page) && !empty($imported->url)) {
        $handler =& $view->display[$page_display]->handler;
        $url = str_replace('$arg', '%', $imported->url);
        $handler->set_option('path', $url);
        if ($imported->menu) {
            $menu = array(
                'type' => 'normal',
            );
            if ($imported->menu_tab) {
                $menu['type'] = 'tab';
            }
            if ($imported->menu_tab_default) {
                $menu['type'] = 'default tab';
            }
            $menu['title'] = $imported->menu_title ? $imported->menu_title : $imported->page_title;
            $handler->set_option('menu', $menu);
            if ($menu['type'] == 'default tab') {
                $tab_options = array(
                    'type' => 'none',
                );
                switch ($imported->menu_tab_default_parent_type) {
                    case 'tab':
                    case 'normal':
                        $tab_options['type'] = $imported->menu_tab_default_parent_type;
                        break;
                }
            }
            $tab_options['title'] = $imported->menu_parent_title;
            $tab_options['weight'] = $imported->menu_parent_tab_weight;
            $handler->set_option('tab_options', $tab_options);
        }
    }
    views1_convert_style($view, $handler, $imported->page_type);
    if (!empty($imported->block)) {
        $handler =& $view->display[$block_display]->handler;
        if (!empty($imported->block_title)) {
            if (!empty($imported->page)) {
                $handler->set_override('title');
            }
            $handler->set_option('title', $imported->block_title);
        }
        if (!empty($imported->page)) {
            $handler->set_override('use_pager');
        }
        $handler->set_option('use_pager', FALSE);
        if ($imported->nodes_per_block != $imported->nodes_per_page) {
            $handler->set_option('items_per_page', $imported->nodes_per_block);
            $handler->set_option('offset', 0);
        }
        if (empty($imported->block_use_page_header)) {
            if (!empty($imported->page)) {
                $handler->set_override('header');
            }
            if (!empty($imported->block_header)) {
                $handler->set_option('header', $imported->block_header);
                $handler->set_option('header_format', $imported->block_header_format);
            }
        }
        if (empty($imported->block_use_page_footer)) {
            if (!empty($imported->page)) {
                $handler->set_override('footer');
            }
            if (!empty($imported->block_footer)) {
                $handler->set_option('footer', $imported->block_footer);
                $handler->set_option('footer_format', $imported->block_footer_format);
            }
        }
        if (empty($imported->block_use_page_empty)) {
            if (!empty($imported->page)) {
                $handler->set_override('empty');
            }
            if (!empty($imported->block_empty)) {
                $handler->set_option('empty', $imported->block_empty);
                $handler->set_option('empty_format', $imported->block_empty_format);
            }
        }
        $handler->set_option('use_more', $imported->block_more);
        if (!empty($imported->page)) {
            $handler->set_override('style_plugin');
        }
        views1_convert_style($view, $handler, $imported->block_type);
    }
    // For each of the fields, arguments, filters, and sorts in the old view,
    // check if a handler for this item exists in Views 2 and add it,
    // then see if any other modules want to adapt it using hook_views_convert().
    foreach ($imported->field as $field) {
        $id = $view->add_item('default', 'field', $field['tablename'], $field['field'], array(
            'label' => $field['label'],
        ));
        if ($view->display_handler
            ->get_option('style_plugin') == 'table') {
            $options = $view->display_handler
                ->get_option('style_options');
            if (!empty($field['sortable'])) {
                $options['info'][$id]['sortable'] = TRUE;
                if (!empty($field['defaultsort'])) {
                    $options['default'] = $id;
                }
            }
            $view->display_handler
                ->set_option('style_options', $options);
        }
        foreach (module_implements('views_convert') as $module) {
            module_invoke($module, 'views_convert', 'default', 'field', $view, $field, $id);
        }
    }
    foreach ($imported->sort as $field) {
        $id = $view->add_item('default', 'sort', $field['tablename'], $field['field'], array(
            'order' => $field['sortorder'],
        ));
        foreach (module_implements('views_convert') as $module) {
            module_invoke($module, 'views_convert', 'default', 'sort', $view, $field, $id);
        }
    }
    $actions = array(
        'ignore',
        'not found',
        'ignore',
        'summary asc',
        'summary asc',
        'summary desc',
        'summary asc',
        'empty',
    );
    foreach ($imported->argument as $id => $field) {
        if ($field['type'] == 'rss_feed') {
            $feed_display = $view->new_display('feed');
            $feed_display->set_option('style_plugin', 'rss');
            $feed_display->set_option('row_plugin', 'node_rss');
            $feed_display->set_option('path', $view->display[$page_display]->handler
                ->get_option('path') . '/feed');
            $feed_display->set_option('page', $view->display[$page_display]->handler
                ->get_option('pager'));
            $displays = array();
            if (!empty($page_display)) {
                $displays[$page_display] = $page_display;
            }
            if (!empty($block_display)) {
                $displays[$block_display] = $block_display;
            }
            $feed_display->set_option('displays', $displays);
        }
        else {
            if (!empty($imported->view_args_php)) {
                $field['argoptions']['default_action'] = 'default';
                $field['argoptions']['default_argument_type'] = 'php';
                $field['argoptions']['default_argument_php'] = '$args = eval(\'' . str_replace("'", "\\'", $imported->view_args_php) . '\');' . "\n";
                $field['argoptions']['default_argument_php'] .= 'if (isset($args[' . $field['position'] . '])) {' . "\n";
                $field['argoptions']['default_argument_php'] .= '  return $args[' . $field['position'] . '];' . "\n";
                $field['argoptions']['default_argument_php'] .= '}';
                $field['argoptions']['validate_fail'] = $actions[$field['argdefault']];
            }
            else {
                $field['argoptions']['default_action'] = $actions[$field['argdefault']];
            }
            if (!empty($field['title'])) {
                $field['argoptions']['title'] = $field['title'];
            }
            if (!empty($field['wildcard'])) {
                $field['argoptions']['wildcard'] = $field['wildcard'];
            }
            if (!empty($field['wildcard_substitution'])) {
                $field['argoptions']['wildcard_substitution'] = $field['wildcard_substitution'];
            }
            // Arguments didn't used to be identified by table.name so we just have to
            // leave that out.
            foreach (module_implements('views_convert') as $module) {
                module_invoke($module, 'views_convert', 'default', 'argument', $view, $field, NULL);
            }
        }
    }
    foreach ($imported->filter as $key => $field) {
        $options = $field['value'] == '' ? array() : array(
            'value' => $field['value'],
        );
        $id = $view->add_item('default', 'filter', $field['tablename'], $field['field'], $options);
        foreach (module_implements('views_convert') as $module) {
            module_invoke($module, 'views_convert', 'default', 'filter', $view, $field, $id);
        }
        // Store the id in the exposed filter if there is one.
        foreach ($imported->exposed_filter as $key => $filter) {
            if ($field['tablename'] == $filter['tablename'] && $field['field'] == $filter['field']) {
                $imported->exposed_filter[$key]['id'] = $id;
            }
        }
    }
    // Exposed filters now get added to the filter array, not as a separate array.
    $count = 0;
    foreach ($imported->exposed_filter as $field) {
        $id = $field['id'];
        $item = $view->get_item('default', 'filter', $id);
        if (views_get_handler($item['table'], $item['field'], 'filter')) {
            $item['exposed'] = TRUE;
            // Use the count to emulate the old, hardcoded filter naming.
            $item['expose']['identifier'] = 'filter' . $count;
            $item['expose']['label'] = $field['label'];
            $item['expose']['operator'] = $field['operator'] ? 'op' . $count : '';
            $item['expose']['optional'] = $field['optional'];
            $item['expose']['single'] = $field['single'];
            $view->set_item('default', 'filter', $id, $item);
        }
        $count++;
        foreach (module_implements('views_convert') as $module) {
            module_invoke($module, 'views_convert', 'default', 'exposed_filter', $view, $field, $id);
        }
    }
    return $view;
}