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; }