public static function build_filters($current_page, $nbr_bugs = 0)
 {
     $lang = LangLoader::get('common', 'bugtracker');
     $object = new self();
     $request = AppContext::get_request();
     $page = $request->get_int('page', 1);
     $filter = $request->get_value('filter', '');
     $filter_id = $request->get_value('filter_id', '');
     if (!empty($filter) && empty($filter_id)) {
         $filter = $filter_id = '';
     }
     $filters_tmp = $filters = !empty($filter) ? explode('-', $filter) : array();
     $nb_filters = count($filters);
     $filters_ids_tmp = $filters_ids = !empty($filter_id) ? explode('-', $filter_id) : array();
     $nb_filters_ids = count($filters_ids);
     if ($nb_filters != $nb_filters_ids) {
         for ($i = $nb_filters_ids; $i < $nb_filters; $i++) {
             $filters_ids[] = 0;
         }
     }
     $display_save_button = AppContext::get_current_user()->check_level(User::MEMBER_LEVEL) && count($filters) >= 1;
     $config = BugtrackerConfig::load();
     $types = $config->get_types();
     $categories = $config->get_categories();
     $severities = $config->get_severities();
     $versions = $config->get_versions_detected();
     $all_versions = $config->get_versions();
     $display_types = count($types);
     $display_categories = count($categories);
     $display_severities = count($severities);
     $display_versions = count($versions);
     $display_all_versions = count($all_versions);
     $filters_number = 1;
     if ($display_types) {
         $filters_number = $filters_number + 1;
     }
     if ($display_categories) {
         $filters_number = $filters_number + 1;
     }
     if ($display_severities) {
         $filters_number = $filters_number + 1;
     }
     if ($display_versions || $display_all_versions) {
         $filters_number = $filters_number + 1;
     }
     if (!empty($filters)) {
         $filters_number = $filters_number + 1;
     }
     $filters_view = new FileTemplate('bugtracker/BugtrackerFilter.tpl');
     $filters_view->add_lang($lang);
     $result = PersistenceContext::get_querier()->select("SELECT *\r\n\t\tFROM " . BugtrackerSetup::$bugtracker_users_filters_table . "\r\n\t\tWHERE page = :page AND user_id = :user_id", array('page' => $current_page, 'user_id' => AppContext::get_current_user()->get_id()), SelectQueryResult::FETCH_ASSOC);
     $saved_filters = false;
     while ($row = $result->fetch()) {
         $row_filters_tmp = $row_filters = !empty($row['filters']) ? explode('-', $row['filters']) : array();
         $row_filters_ids_tmp = $row_filters_ids = !empty($row['filters_ids']) ? explode('-', $row['filters_ids']) : array();
         sort($filters_tmp, SORT_STRING);
         sort($row_filters_tmp, SORT_STRING);
         sort($filters_ids_tmp, SORT_STRING);
         sort($row_filters_ids_tmp, SORT_STRING);
         if (implode('-', $filters_tmp) == implode('-', $row_filters_tmp) && implode('-', $filters_ids_tmp) == implode('-', $row_filters_ids_tmp)) {
             $display_save_button = false;
         }
         $filter_not_saved_value = '-------------';
         $filter_type_value = in_array('type', $row_filters) && $row_filters_ids[array_search('type', $row_filters)] && isset($types[$row_filters_ids[array_search('type', $row_filters)]]) ? $types[$row_filters_ids[array_search('type', $row_filters)]] : $filter_not_saved_value;
         $filter_category_value = in_array('category', $row_filters) && $row_filters_ids[array_search('category', $row_filters)] && isset($categories[$row_filters_ids[array_search('category', $row_filters)]]) ? $categories[$row_filters_ids[array_search('category', $row_filters)]] : $filter_not_saved_value;
         $filter_severity_value = in_array('severity', $row_filters) && $row_filters_ids[array_search('severity', $row_filters)] && isset($severities[$row_filters_ids[array_search('severity', $row_filters)]]) ? $severities[$row_filters_ids[array_search('severity', $row_filters)]]['name'] : $filter_not_saved_value;
         $filter_status_value = in_array('status', $row_filters) && $row_filters_ids[array_search('status', $row_filters)] && isset($lang['status.' . $row_filters_ids[array_search('status', $row_filters)]]) ? $lang['status.' . $row_filters_ids[array_search('status', $row_filters)]] : $filter_not_saved_value;
         $filter_version_value = $current_page == 'unsolved' ? in_array('detected_in', $row_filters) && $row_filters_ids[array_search('detected_in', $row_filters)] && isset($versions[$row_filters_ids[array_search('detected_in', $row_filters)]]) ? $versions[$row_filters_ids[array_search('detected_in', $row_filters)]]['name'] : $filter_not_saved_value : (in_array('fixed_in', $row_filters) && $row_filters_ids[array_search('fixed_in', $row_filters)] && isset($all_versions[$row_filters_ids[array_search('fixed_in', $row_filters)]]) ? $all_versions[$row_filters_ids[array_search('fixed_in', $row_filters)]]['name'] : $filter_not_saved_value);
         $filters_view->assign_block_vars('filters', array('ID' => $row['id'], 'FILTER' => '|	' . $filter_type_value . '	|	' . $filter_category_value . '	|	' . $filter_severity_value . '	|	' . $filter_status_value . '	|	' . $filter_version_value . '	|', 'LINK_FILTER' => $current_page == 'unsolved' ? BugtrackerUrlBuilder::unsolved('name', 'desc', 1, $row['filters'], $row['filters_ids'])->rel() : BugtrackerUrlBuilder::solved('name', 'desc', 1, $row['filters'], $row['filters_ids'])->rel()));
         $saved_filters = true;
     }
     $result->dispose();
     $filters_view->put_all(array('L_FILTERS' => $filters_number > 1 ? $lang['titles.filters'] : $lang['titles.filter'], 'C_FILTER' => count($filters) == 1, 'C_FILTERS' => count($filters) > 1, 'C_DISPLAY_TYPES' => $display_types, 'C_DISPLAY_CATEGORIES' => $display_categories, 'C_DISPLAY_SEVERITIES' => $display_severities, 'C_DISPLAY_VERSIONS' => $current_page == 'solved' ? $display_all_versions : $display_versions, 'C_DISPLAY_SAVE_BUTTON' => $display_save_button, 'C_SAVED_FILTERS' => $saved_filters, 'C_HAS_SELECTED_FILTERS' => $filters, 'FILTERS_NUMBER' => $filters_number, 'BUGS_NUMBER' => $nbr_bugs, 'LINK_FILTER_SAVE' => BugtrackerUrlBuilder::add_filter($current_page, $filter, $filter_id)->rel(), 'SELECT_TYPE' => $object->build_types_form($current_page, $filter == 'type' ? $filter_id : (in_array('type', $filters) ? $filters_ids[array_search('type', $filters)] : 0), $filters, $filters_ids)->display(), 'SELECT_CATEGORY' => $object->build_categories_form($current_page, $filter == 'category' ? $filter_id : (in_array('category', $filters) ? $filters_ids[array_search('category', $filters)] : 0), $filters, $filters_ids)->display(), 'SELECT_SEVERITY' => $object->build_severities_form($current_page, $filter == 'severity' ? $filter_id : (in_array('severity', $filters) ? $filters_ids[array_search('severity', $filters)] : 0), $filters, $filters_ids)->display(), 'SELECT_STATUS' => $object->build_status_form($current_page, $filter == 'status' ? $filter_id : (in_array('status', $filters) ? $filters_ids[array_search('status', $filters)] : 0), $filters, $filters_ids, $lang)->display(), 'SELECT_VERSION' => $object->build_versions_form($current_page, $current_page == 'unsolved' ? $filter == 'detected_in' ? $filter_id : (in_array('detected_in', $filters) ? $filters_ids[array_search('detected_in', $filters)] : 0) : ($filter == 'fixed_in' ? $filter_id : (in_array('fixed_in', $filters) ? $filters_ids[array_search('fixed_in', $filters)] : 0)), $filters, $filters_ids)->display()));
     return $filters_view;
 }