public function get_feed_data_struct($idcat = 0, $name = '') { $querier = PersistenceContext::get_querier(); $lang = LangLoader::get('common', 'bugtracker'); //Configuration load $config = BugtrackerConfig::load(); $types = $config->get_types(); $categories = $config->get_categories(); $severities = $config->get_severities(); $priorities = $config->get_priorities(); $versions = $config->get_versions_detected(); $site_name = GeneralConfig::load()->get_site_name(); $feed_module_name = $idcat == 1 ? $lang['titles.solved'] : $lang['titles.unsolved']; $data = new FeedData(); $data->set_title($feed_module_name . ' - ' . $site_name); $data->set_date(new Date()); $data->set_link(SyndicationUrlBuilder::rss('bugtracker', $idcat)); $data->set_host(HOST); $data->set_desc($feed_module_name . ' - ' . $site_name); $data->set_lang(LangLoader::get_message('xml_lang', 'main')); $data->set_auth_bit(BugtrackerAuthorizationsService::READ_AUTHORIZATIONS); $results = $querier->select("SELECT bugtracker.*, author.*\r\n\t\tFROM " . BugtrackerSetup::$bugtracker_table . " bugtracker\r\n\t\tLEFT JOIN " . DB_TABLE_MEMBER . " author ON author.user_id = bugtracker.author_id\r\n\t\tWHERE " . ($idcat == 1 ? "(status = '" . Bug::FIXED . "' OR status = '" . Bug::REJECTED . "')" : "status <> '" . Bug::FIXED . "' AND status <> '" . Bug::REJECTED . "'") . "\r\n\t\tORDER BY " . ($idcat == 1 ? "fix_date" : "submit_date") . " DESC"); foreach ($results as $row) { $bug = new Bug(); $bug->set_properties($row); $link = BugtrackerUrlBuilder::detail($bug->get_id() . '-' . $bug->get_rewrited_title()); $description = FormatingHelper::second_parse($bug->get_contents()); $description .= '<br /><br />' . $lang['labels.fields.reproductible'] . ' : ' . ($bug->is_reproductible() ? LangLoader::get_message('yes', 'common') : LangLoader::get_message('no', 'common')); if ($bug->is_reproductible()) { $description .= '<br />' . FormatingHelper::second_parse($bug->get_reproduction_method()) . '<br />'; } if ($types) { $description .= '<br />' . $lang['labels.fields.type'] . ' : ' . (isset($types[$bug->get_type()]) ? stripslashes($types[$bug->get_type()]) : $lang['notice.none']); } if ($categories) { $description .= '<br />' . $lang['labels.fields.category'] . ' : ' . (isset($categories[$bug->get_category()]) ? stripslashes($categories[$bug->get_category()]) : $lang['notice.none_e']); } if ($severities) { $description .= '<br />' . $lang['labels.fields.severity'] . ' : ' . (isset($severities[$bug->get_severity()]) ? stripslashes($severities[$bug->get_severity()]['name']) : $lang['notice.none']); } if ($priorities) { $description .= '<br />' . $lang['labels.fields.priority'] . ' : ' . (isset($priorities[$bug->get_priority()]) ? stripslashes($priorities[$bug->get_priority()]) : $lang['notice.none_e']); } if ($versions) { $description .= '<br />' . $lang['labels.fields.version'] . ' : ' . (isset($versions[$bug->get_detected_in()]) ? stripslashes($versions[$bug->get_detected_in()]['name']) : $lang['notice.not_defined']); } $item = new FeedItem(); $item->set_title($bug->get_title()); $item->set_link($link); $item->set_guid($link); $item->set_desc($description); $item->set_date($bug->get_submit_date()); $item->set_auth(BugtrackerAuthorizationsService::READ_AUTHORIZATIONS); $data->add_item($item); } $results->dispose(); return $data; }
private function build_view($request) { //Configuration load $config = BugtrackerConfig::load(); $severities = $config->get_severities(); $field = $request->get_value('field', 'date'); $sort = $request->get_value('sort', 'desc'); $current_page = $request->get_getint('page', 1); $filter = $request->get_value('filter', ''); $filter_id = $request->get_value('filter_id', ''); if (!empty($filter) && empty($filter_id)) { $filter = $filter_id = ''; } $filters = !empty($filter) ? explode('-', $filter) : array(); $nb_filters = count($filters); $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; } } $mode = $sort == 'top' ? 'ASC' : 'DESC'; switch ($field) { case 'id': $field_bdd = 'id'; break; case 'title': $field_bdd = 'title'; break; case 'status': $field_bdd = 'status'; break; default: $field_bdd = 'submit_date'; break; } $select_filters = ''; foreach ($filters as $key => $f) { $select_filters .= in_array($f, array('type', 'category', 'severity', 'status', 'detected_in')) && $filters_ids[$key] ? "AND " . $f . " = '" . $filters_ids[$key] . "'" : ''; } $stats_cache = BugtrackerStatsCache::load(); $bugs_number = BugtrackerService::count("WHERE status <> '" . Bug::FIXED . "' AND status <> '" . Bug::REJECTED . "'" . $select_filters); $pagination = $this->get_pagination($bugs_number, $current_page, $field, $sort, $filter, $filter_id); $result = PersistenceContext::get_querier()->select("SELECT b.*, member.*\n\t\tFROM " . BugtrackerSetup::$bugtracker_table . " b\n\t\tLEFT JOIN " . DB_TABLE_MEMBER . " member ON member.user_id = b.author_id\n\t\tWHERE status <> '" . Bug::FIXED . "' AND status <> '" . Bug::REJECTED . "'" . $select_filters . "\n\t\tORDER BY " . $field_bdd . " " . $mode . "\n\t\tLIMIT :number_items_per_page OFFSET :display_from", array('number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from())); $displayed_severities = array(); while ($row = $result->fetch()) { $bug = new Bug(); $bug->set_properties($row); if (!in_array($bug->get_severity(), $displayed_severities)) { $displayed_severities[] = $bug->get_severity(); } $this->view->assign_block_vars('bug', array_merge($bug->get_array_tpl_vars(), array('C_LINE_COLOR' => $bug->get_severity() && isset($severities[$bug->get_severity()]), 'LINE_COLOR' => stripslashes($severities[$bug->get_severity()]['color']), 'U_CHANGE_STATUS' => BugtrackerUrlBuilder::change_status($bug->get_id())->rel(), 'U_EDIT' => BugtrackerUrlBuilder::edit($bug->get_id(), 'unsolved', $current_page, $filter, $filter_id)->rel(), 'U_DELETE' => BugtrackerUrlBuilder::delete($bug->get_id(), 'unsolved', $current_page, $filter, $filter_id)->rel()))); } $result->dispose(); $bugs_colspan = BugtrackerAuthorizationsService::check_authorizations()->moderation() ? 5 : 4; if ($config->is_type_column_displayed()) { $bugs_colspan++; } if ($config->is_category_column_displayed()) { $bugs_colspan++; } if ($config->is_priority_column_displayed()) { $bugs_colspan++; } if ($config->is_detected_in_column_displayed()) { $bugs_colspan++; } $this->view->put_all(array('C_IS_ADMIN' => BugtrackerAuthorizationsService::check_authorizations()->moderation(), 'C_UNSOLVED' => true, 'C_BUGS' => $result->get_rows_count() > 0, 'C_DISPLAY_AUTHOR' => true, 'C_DISPLAY_TYPE_COLUMN' => $config->is_type_column_displayed(), 'C_DISPLAY_CATEGORY_COLUMN' => $config->is_category_column_displayed(), 'C_DISPLAY_PRIORITY_COLUMN' => $config->is_priority_column_displayed(), 'C_DISPLAY_DETECTED_IN_COLUMN' => $config->is_detected_in_column_displayed(), 'C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display(), 'BUGS_COLSPAN' => $bugs_colspan, 'L_NO_BUG' => empty($filters) ? $this->lang['notice.no_bug'] : (count($filters) > 1 ? $this->lang['notice.no_bug_matching_filters'] : $this->lang['notice.no_bug_matching_filter']), 'FILTER_LIST' => BugtrackerViews::build_filters('unsolved', $bugs_number), 'LEGEND' => BugtrackerViews::build_legend($displayed_severities, 'unsolved'), 'LINK_BUG_ID_TOP' => BugtrackerUrlBuilder::unsolved('id', 'top', $current_page, $filter, $filter_id)->rel(), 'LINK_BUG_ID_BOTTOM' => BugtrackerUrlBuilder::unsolved('id', 'bottom', $current_page, $filter, $filter_id)->rel(), 'LINK_BUG_TITLE_TOP' => BugtrackerUrlBuilder::unsolved('title', 'top', $current_page, $filter, $filter_id)->rel(), 'LINK_BUG_TITLE_BOTTOM' => BugtrackerUrlBuilder::unsolved('title', 'bottom', $current_page, $filter, $filter_id)->rel(), 'LINK_BUG_STATUS_TOP' => BugtrackerUrlBuilder::unsolved('status', 'top', $current_page, $filter, $filter_id)->rel(), 'LINK_BUG_STATUS_BOTTOM' => BugtrackerUrlBuilder::unsolved('status', 'bottom', $current_page, $filter, $filter_id)->rel(), 'LINK_BUG_DATE_TOP' => BugtrackerUrlBuilder::unsolved('date', 'top', $current_page, $filter, $filter_id)->rel(), 'LINK_BUG_DATE_BOTTOM' => BugtrackerUrlBuilder::unsolved('date', 'bottom', $current_page, $filter, $filter_id)->rel())); return $this->view; }
/** * @desc Return the content of a bug. * @param string $condition Restriction to apply to the list of bugs * @param string[] $parameters Parameters of the condition */ public static function get_bug($condition, array $parameters) { $row = self::$db_querier->select_single_row_query('SELECT bugtracker.*, author.* FROM ' . BugtrackerSetup::$bugtracker_table . ' bugtracker LEFT JOIN ' . DB_TABLE_MEMBER . ' author ON author.user_id = bugtracker.author_id ' . $condition, $parameters); $bug = new Bug(); $bug->set_properties($row); return $bug; }
private function build_view($request) { $severities = $this->config->get_severities(); $versions = array_reverse($this->config->get_versions(), true); if (!empty($versions)) { $roadmap_version = $request->get_int('id_version', 0); $roadmap_version_name = $request->get_value('version', ''); $roadmap_status = $request->get_value('status', 'all'); if ($roadmap_status !== 'all' && $roadmap_status !== Bug::FIXED && $roadmap_status !== Bug::IN_PROGRESS) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } if (empty($roadmap_version) && empty($roadmap_version_name)) { $roadmap_version = key($versions); $roadmap_version_name = Url::encode_rewrite($versions[key($versions)]['name']); } else { if (!isset($versions[$roadmap_version])) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } } $field = $request->get_value('field', BugtrackerUrlBuilder::DEFAULT_SORT_FIELD); $sort = $request->get_value('sort', BugtrackerUrlBuilder::DEFAULT_SORT_MODE); $current_page = $request->get_int('page', 1); $mode = $sort == 'top' ? 'ASC' : 'DESC'; switch ($field) { case 'id': $field_bdd = 'id'; break; case 'title': $field_bdd = 'title'; break; case 'severity': $field_bdd = 'severity'; break; case 'status': $field_bdd = 'status'; break; default: $field_bdd = 'fix_date'; break; } $stats_cache = BugtrackerStatsCache::load(); $bugs_number = $stats_cache->get_bugs_number_per_version($roadmap_version); $pagination = $this->get_pagination($bugs_number[$roadmap_status], $current_page, $roadmap_version, $roadmap_version_name, $roadmap_status, $field, $sort); $result = PersistenceContext::get_querier()->select("SELECT b.*, member.*\n\t\t\tFROM " . BugtrackerSetup::$bugtracker_table . " b\n\t\t\tLEFT JOIN " . DB_TABLE_MEMBER . " member ON member.user_id = b.author_id\n\t\t\tWHERE fixed_in = " . $roadmap_version . "\n\t\t\t" . ($roadmap_status != 'all' ? $roadmap_status == Bug::IN_PROGRESS ? "AND (b.status = '" . Bug::IN_PROGRESS . "' OR b.status = '" . Bug::REOPEN . "')" : "AND b.status = '" . Bug::FIXED . "'" : "") . "\n\t\t\tORDER BY " . $field_bdd . " " . $mode . "\n\t\t\tLIMIT :number_items_per_page OFFSET :display_from", array('number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from())); $displayed_severities = array(); while ($row = $result->fetch()) { $bug = new Bug(); $bug->set_properties($row); if (!in_array($bug->get_severity(), $displayed_severities)) { $displayed_severities[] = $bug->get_severity(); } $this->view->assign_block_vars('bug', array_merge($bug->get_array_tpl_vars(), array('C_LINE_COLOR' => !empty($row['severity']) && isset($severities[$row['severity']]), 'LINE_COLOR' => stripslashes($severities[$row['severity']]['color'])))); } $result->dispose(); $bugs_colspan = 4; if ($this->config->is_type_column_displayed()) { $bugs_colspan++; } if ($this->config->is_category_column_displayed()) { $bugs_colspan++; } if ($this->config->is_priority_column_displayed()) { $bugs_colspan++; } if ($this->config->is_detected_in_column_displayed()) { $bugs_colspan++; } $this->view->put_all(array('C_VERSIONS_AVAILABLE' => true, 'C_BUGS' => $bugs_number[$roadmap_status], 'C_STATUS_IN_PROGRESS' => $roadmap_status == Bug::IN_PROGRESS, 'C_DISPLAY_TYPE_COLUMN' => $this->config->is_type_column_displayed(), 'C_DISPLAY_CATEGORY_COLUMN' => $this->config->is_category_column_displayed(), 'C_DISPLAY_PRIORITY_COLUMN' => $this->config->is_priority_column_displayed(), 'C_DISPLAY_DETECTED_IN_COLUMN' => $this->config->is_detected_in_column_displayed(), 'C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display(), 'BUGS_COLSPAN' => $bugs_colspan, 'SELECT_VERSION' => $this->build_form(isset($versions[$roadmap_version]) ? $roadmap_version : 0, isset($versions[$roadmap_version]) ? Url::encode_rewrite($versions[$roadmap_version]['name']) : '', $roadmap_status, (int) $bugs_number[$roadmap_status], isset($versions[$roadmap_version]) ? $versions[$roadmap_version]['release_date'] : 0)->display(), 'LEGEND' => BugtrackerViews::build_legend($displayed_severities, 'roadmap'), 'LINK_BUG_ID_TOP' => BugtrackerUrlBuilder::roadmap($roadmap_version, $roadmap_version_name, $roadmap_status, 'id', 'top', $current_page)->rel(), 'LINK_BUG_ID_BOTTOM' => BugtrackerUrlBuilder::roadmap($roadmap_version, $roadmap_version_name, $roadmap_status, 'id', 'bottom', $current_page)->rel(), 'LINK_BUG_TITLE_TOP' => BugtrackerUrlBuilder::roadmap($roadmap_version, $roadmap_version_name, $roadmap_status, 'title', 'top', $current_page)->rel(), 'LINK_BUG_TITLE_BOTTOM' => BugtrackerUrlBuilder::roadmap($roadmap_version, $roadmap_version_name, $roadmap_status, 'title', 'bottom', $current_page)->rel(), 'LINK_BUG_SEVERITY_TOP' => BugtrackerUrlBuilder::roadmap($roadmap_version, $roadmap_version_name, $roadmap_status, 'severity', 'top', $current_page)->rel(), 'LINK_BUG_SEVERITY_BOTTOM' => BugtrackerUrlBuilder::roadmap($roadmap_version, $roadmap_version_name, $roadmap_status, 'severity', 'bottom', $current_page)->rel(), 'LINK_BUG_STATUS_TOP' => BugtrackerUrlBuilder::roadmap($roadmap_version, $roadmap_version_name, $roadmap_status, 'status', 'top', $current_page)->rel(), 'LINK_BUG_STATUS_BOTTOM' => BugtrackerUrlBuilder::roadmap($roadmap_version, $roadmap_version_name, $roadmap_status, 'status', 'bottom', $current_page)->rel(), 'LINK_BUG_DATE_TOP' => BugtrackerUrlBuilder::roadmap($roadmap_version, $roadmap_version_name, $roadmap_status, 'date', 'top', $current_page)->rel(), 'LINK_BUG_DATE_BOTTOM' => BugtrackerUrlBuilder::roadmap($roadmap_version, $roadmap_version_name, $roadmap_status, 'date', 'bottom', $current_page)->rel())); } return $this->view; }