public function prepare_items()
 {
     $tab = $this->get_current_tab();
     // replace search results tab only
     if ($tab != 'search') {
         parent::prepare_items();
         exit;
     }
     include_once ABSPATH . 'wp-admin/includes/theme-install.php';
     global $tabs, $tab, $paged, $type, $term, $theme_field_defaults;
     wp_reset_vars(array('tab'));
     $paged = $this->get_pagenum();
     $repositories_ids = array();
     if (!isset($_GET['repos'])) {
         $rm = WPRC_Loader::getModel('repositories');
         $repos = $rm->getRepositoriesIds('enabled_repositories', 'themes');
         $repos_number = count($repos);
     } else {
         $repos_number = count($_GET['repos']);
     }
     $per_page = WPRC_THEMES_API_QUERY_THEMES_PER_PAGE;
     // These are the tabs which are shown on the page,
     $tabs = array();
     $tabs['dashboard'] = __('Search', 'installer');
     if ('search' == $tab) {
         $tabs['search'] = __('Search Results', 'installer');
     }
     $tabs['upload'] = __('Upload', 'installer');
     $tabs['featured'] = _x('Featured', 'Theme Installer', 'installer');
     //$tabs['popular']  = _x( 'Popular','Theme Installer' );
     $tabs['new'] = _x('Newest', 'Theme Installer', 'installer');
     $tabs['updated'] = _x('Recently Updated', 'Theme Installer', 'installer');
     $nonmenu_tabs = array('theme-information');
     // Valid actions to perform which do not have a Menu item.
     $tabs = apply_filters('install_themes_tabs', $tabs);
     $nonmenu_tabs = apply_filters('install_themes_nonmenu_tabs', $nonmenu_tabs);
     // If a non-valid menu tab has been selected, And its not a non-menu action.
     if (empty($tab) || !isset($tabs[$tab]) && !in_array($tab, (array) $nonmenu_tabs)) {
         $tab = key($tabs);
     }
     $args = array('page' => $paged, 'per_page' => $per_page, 'fields' => $theme_field_defaults);
     switch ($tab) {
         case 'search':
             $type = isset($_REQUEST['type']) ? stripslashes($_REQUEST['type']) : '';
             $term = isset($_REQUEST['s']) ? stripslashes($_REQUEST['s']) : '';
             switch ($type) {
                 case 'tag':
                     $terms = explode(',', $term);
                     $terms = array_map('trim', $terms);
                     $terms = array_map('sanitize_title_with_dashes', $terms);
                     $args['tag'] = $terms;
                     break;
                 case 'author':
                     $args['author'] = $term;
                     break;
                 case 'term':
                     // make search term default in case type does not exist (wp34)
                 // make search term default in case type does not exist (wp34)
                 default:
                     $args['search'] = $term;
                     break;
             }
             if (isset($_REQUEST['features']) && (is_array($_REQUEST['features']) || !empty($_REQUEST['features']))) {
                 $terms = $_REQUEST['features'];
                 $terms = array_map('trim', $terms);
                 $terms = array_map('sanitize_title_with_dashes', $terms);
                 $args['tag'] = $terms;
                 $_REQUEST['s'] = implode(',', $terms);
                 $_REQUEST['type'] = 'tag';
                 //$args['type'] = 'tag';
                 //$args['search'] = $_REQUEST['search'];
             }
             add_action('install_themes_table_header', 'install_theme_search_form');
             break;
         case 'featured':
             //case 'popular':
         //case 'popular':
         case 'new':
         case 'updated':
             $args['browse'] = $tab;
             break;
         default:
             $args = false;
     }
     if (!$args) {
         return;
     }
     $api = themes_api('query_themes', $args);
     if (is_wp_error($api)) {
         wp_die($api->get_error_message() . '</p> <p><a href="#" onclick="document.location.reload(); return false;">' . __('Try again', 'installer') . '</a>');
     }
     $repo_model = WPRC_Loader::getModel('repositories');
     if (isset($_GET['repos'])) {
         $repos = $_GET['repos'];
     } else {
         $rm = WPRC_Loader::getModel('repositories');
         $repos = $rm->getRepositoriesIds('enabled_repositories', 'themes');
     }
     // Filtering by repository if is the case...
     $this->repositories_tabs = array();
     // Do we need tabs?
     $this->results_per_repo = $api->results_per_repo;
     $repo_results_gt_zero = 0;
     foreach ($this->results_per_repo as $repo_results) {
         if ($repo_results['results'] > 0) {
             $repo_results_gt_zero++;
         }
     }
     if ($api->info['results'] > WPRC_THEMES_API_QUERY_THEMES_PER_PAGE && count($repos) > 1 && $repo_results_gt_zero > 1) {
         // We have too many results => we have to tab the results
         // Ordering repos by ID so Wordpress.org plugins wil appear most of the time at first place
         sort($repos);
         $tmp = array();
         foreach ($repos as $repo_id) {
             if (isset($this->results_per_repo[$repo_id]) && $this->results_per_repo[$repo_id]['results'] == 0) {
                 continue;
             }
             // We need the name of the repo
             $repo_info = $repo_model->getRepositoryByField('id', $repo_id);
             if ($repo_info) {
                 $this->repositories_tabs[] = array('id' => $repo_info->id, 'name' => $repo_info->repository_name);
             }
         }
         $filtered_api = new stdClass();
         $filtered_api->info['results'] = $api->info['results'];
         $filtered_api->info['page'] = $api->info['page'];
         $filtered_api->themes = array();
         // If we are currently on a tab, we'll show only those results
         if (is_array($this->repositories_tabs) && count($this->repositories_tabs) > 0) {
             $current_repo = isset($_GET['repo-tab']) ? $_GET['repo-tab'] : $this->repositories_tabs[0]['id'];
         }
         foreach ($api->themes as $theme) {
             if ($theme->repository_id == $current_repo) {
                 $filtered_api->themes[] = $theme;
             } else {
                 $filtered_api->info['results']--;
             }
         }
         $filtered_api->info['results'] = $this->results_per_repo[$current_repo]['results'];
         $filtered_api->info['total_pages'] = (int) ceil($filtered_api->info['results'] / WPRC_THEMES_API_QUERY_THEMES_PER_PAGE);
     } else {
         $filtered_api = $api;
     }
     $this->items = $filtered_api->themes;
     //$this->items = $api;
     $this->set_pagination_args(array('total_items' => $filtered_api->info['results'], 'per_page' => $per_page));
 }