private function get_module_map($auth_mode) { $lang = LangLoader::get('common', 'bugtracker'); $config = BugtrackerConfig::load(); $current_user = AppContext::get_current_user(); $link = new SitemapLink($lang['module_title'], BugtrackerUrlBuilder::home(), Sitemap::FREQ_DEFAULT, Sitemap::PRIORITY_MAX); $module_map = new ModuleMap($link, 'bugtracker'); if ($auth_mode == Sitemap::AUTH_PUBLIC) { $this_auth = Authorizations::check_auth(RANK_TYPE, User::VISITOR_LEVEL, $config->get_authorizations(), BugtrackerAuthorizationsService::READ_AUTHORIZATIONS); } else { if ($auth_mode == Sitemap::AUTH_USER) { if ($current_user->get_level() == User::ADMIN_LEVEL) { $this_auth = true; } else { $this_auth = Authorizations::check_auth(RANK_TYPE, $current_user->get_level(), $config->get_authorizations(), BugtrackerAuthorizationsService::READ_AUTHORIZATIONS); } } } if ($this_auth) { $module_map->add(new SitemapLink($lang['titles.unsolved'], BugtrackerUrlBuilder::unsolved())); $module_map->add(new SitemapLink($lang['titles.solved'], BugtrackerUrlBuilder::solved())); if ($config->is_roadmap_enabled() && $config->get_versions()) { $module_map->add(new SitemapLink($lang['titles.roadmap'], BugtrackerUrlBuilder::roadmap())); } $module_map->add(new SitemapLink($lang['titles.stats'], BugtrackerUrlBuilder::stats())); } return $module_map; }
public function execute(HTTPRequestCustom $request) { $id = $request->get_int('id', 0); $page = $request->get_value('page', ''); $filter = $request->get_value('filter', ''); $filter_id = $request->get_value('filter_id', ''); //Add filter BugtrackerService::add_filter(array('user_id' => AppContext::get_current_user()->get_id(), 'page' => $page, 'filters' => $filter, 'filters_ids' => $filter_id)); AppContext::get_response()->redirect($request->get_url_referrer() ? $request->get_url_referrer() : BugtrackerUrlBuilder::unsolved(), LangLoader::get_message('success.add.filter', 'common', 'bugtracker')); }
public function execute(HTTPRequestCustom $request) { AppContext::get_session()->csrf_get_protect(); $this->init($request); $this->check_authorizations(); $this->build_form($request); if ($this->submit_button->has_been_submited() && $this->form->validate()) { $this->save(); AppContext::get_response()->redirect($this->form->get_value('referrer') ? $this->form->get_value('referrer') : BugtrackerUrlBuilder::unsolved(), StringVars::replace_vars(LangLoader::get_message('success.delete', 'common', 'bugtracker'), array('id' => $this->bug->get_id()))); } $this->view->put('FORM', $this->form->display()); return $this->build_response($this->view); }
private function save() { $bug = $this->get_bug(); if ($bug->get_id() === null) { $title = $this->form->get_value('title'); $bug->set_title($title); $bug->set_rewrited_title(Url::encode_rewrite($title)); $bug->set_contents($this->form->get_value('contents')); $bug->set_type($this->form->get_value('type') ? $this->form->get_value('type')->get_raw_value() : $this->config->get_default_type()); $bug->set_category($this->form->get_value('category') ? $this->form->get_value('category')->get_raw_value() : $this->config->get_default_category()); $bug->set_severity($this->form->get_value('severity') ? $this->form->get_value('severity')->get_raw_value() : $this->config->get_default_severity()); $bug->set_priority($this->form->get_value('priority') ? $this->form->get_value('priority')->get_raw_value() : $this->config->get_default_priority()); $bug->set_detected_in($this->form->get_value('detected_in') ? $this->form->get_value('detected_in')->get_raw_value() : $this->config->get_default_version()); $bug->set_reproductible($this->form->get_value('reproductible') ? true : 0); if ($bug->is_reproductible()) { $bug->set_reproduction_method($this->form->get_value('reproduction_method')); } //Bug creation $bug->set_id(BugtrackerService::add($bug)); if ($this->config->are_admin_alerts_enabled() && in_array($bug->get_severity(), $this->config->get_admin_alerts_levels())) { $alert = new AdministratorAlert(); $alert->set_entitled('[' . $this->lang['module_title'] . '] ' . $bug->get_title()); $alert->set_fixing_url(BugtrackerUrlBuilder::detail($bug->get_id() . '-' . $bug->get_rewrited_title())->relative()); switch ($bug->get_priority()) { case 1: switch ($bug->get_severity()) { case 1: $alert_priority = AdministratorAlert::ADMIN_ALERT_VERY_LOW_PRIORITY; break; case 2: $alert_priority = AdministratorAlert::ADMIN_ALERT_LOW_PRIORITY; break; default: $alert_priority = AdministratorAlert::ADMIN_ALERT_MEDIUM_PRIORITY; break; } break; case 2: switch ($bug->get_severity()) { case 1: $alert_priority = AdministratorAlert::ADMIN_ALERT_LOW_PRIORITY; break; default: $alert_priority = AdministratorAlert::ADMIN_ALERT_MEDIUM_PRIORITY; break; } break; case 3: switch ($bug->get_severity()) { case 1: $alert_priority = AdministratorAlert::ADMIN_ALERT_LOW_PRIORITY; break; case 2: $alert_priority = AdministratorAlert::ADMIN_ALERT_MEDIUM_PRIORITY; break; case 3: $alert_priority = AdministratorAlert::ADMIN_ALERT_HIGH_PRIORITY; break; default: $alert_priority = AdministratorAlert::ADMIN_ALERT_MEDIUM_PRIORITY; break; } break; case 4: switch ($bug->get_severity()) { case 2: $alert_priority = AdministratorAlert::ADMIN_ALERT_MEDIUM_PRIORITY; break; case 3: $alert_priority = AdministratorAlert::ADMIN_ALERT_HIGH_PRIORITY; break; default: $alert_priority = AdministratorAlert::ADMIN_ALERT_LOW_PRIORITY; break; } break; case 5: switch ($bug->get_severity()) { case 2: $alert_priority = AdministratorAlert::ADMIN_ALERT_HIGH_PRIORITY; break; case 3: $alert_priority = AdministratorAlert::ADMIN_ALERT_VERY_HIGH_PRIORITY; break; default: $alert_priority = AdministratorAlert::ADMIN_ALERT_MEDIUM_PRIORITY; break; } break; default: switch ($bug->get_severity()) { case 1: $alert_priority = AdministratorAlert::ADMIN_ALERT_LOW_PRIORITY; break; case 2: $alert_priority = AdministratorAlert::ADMIN_ALERT_MEDIUM_PRIORITY; break; case 3: $alert_priority = AdministratorAlert::ADMIN_ALERT_HIGH_PRIORITY; break; default: $alert_priority = AdministratorAlert::ADMIN_ALERT_MEDIUM_PRIORITY; break; } break; } $alert->set_priority($alert_priority); $alert->set_id_in_module($bug->get_id()); $alert->set_type('bugtracker'); AdministratorAlertService::save_alert($alert); } } else { $old_values = clone $bug; $now = new Date(); $types = $this->config->get_types(); $categories = $this->config->get_categories(); $severities = $this->config->get_severities(); $priorities = $this->config->get_priorities(); $versions = $this->config->get_versions(); $display_versions = count($versions) > 1; $status_list = $this->config->get_status_list(); $common_lang = LangLoader::get('common'); $title = $this->form->get_value('title', $old_values->get_title()); $bug->set_title($title); $bug->set_rewrited_title(Url::encode_rewrite($title)); $bug->set_contents($this->form->get_value('contents', $old_values->get_contents())); $bug->set_type($this->form->get_value('type') ? $this->form->get_value('type')->get_raw_value() : $old_values->get_type()); $bug->set_category($this->form->get_value('category') ? $this->form->get_value('category')->get_raw_value() : $old_values->get_category()); $bug->set_severity($this->form->get_value('severity') ? $this->form->get_value('severity')->get_raw_value() : $old_values->get_severity()); $bug->set_priority($this->form->get_value('priority') ? $this->form->get_value('priority')->get_raw_value() : $old_values->get_priority()); $bug->set_detected_in($this->form->get_value('detected_in') ? $this->form->get_value('detected_in')->get_raw_value() : $old_values->get_detected_in()); $bug->set_reproductible($this->form->get_value('reproductible') ? true : 0); if ($bug->is_reproductible()) { $bug->set_reproduction_method($this->form->get_value('reproduction_method', $old_values->get_reproduction_method())); } $pm_comment = ''; $modification = false; $fields = array('title', 'contents', 'type', 'category', 'severity', 'priority', 'detected_in', 'reproductible', 'reproduction_method'); $n_values = $bug->get_properties(); $o_values = $old_values->get_properties(); foreach ($fields as $field) { if ($o_values[$field] != $n_values[$field]) { $modification = true; $comment = ''; switch ($field) { case 'title': $new_value = stripslashes($n_values[$field]); $o_values[$field] = addslashes($o_values[$field]); $comment = ''; break; case 'contents': $o_values[$field] = ''; $n_values[$field] = ''; $comment = $this->lang['notice.contents_update']; break; case 'reproduction_method': $o_values[$field] = ''; $n_values[$field] = ''; $comment = $this->lang['notice.reproduction_method_update']; break; case 'type': $new_value = !empty($n_values[$field]) ? stripslashes($types[$n_values[$field]]) : $this->lang['notice.none']; break; case 'category': $new_value = !empty($n_values[$field]) ? stripslashes($categories[$n_values[$field]]) : $this->lang['notice.none_e']; break; case 'priority': $new_value = !empty($n_values[$field]) ? stripslashes($priorities[$n_values[$field]]) : $this->lang['notice.none_e']; break; case 'severity': $new_value = !empty($n_values[$field]) ? stripslashes($severities[$n_values[$field]]['name']) : $this->lang['notice.none']; break; case 'detected_in': $new_value = !empty($n_values[$field]) ? stripslashes($versions[$n_values[$field]]['name']) : $this->lang['notice.none_e']; break; case 'status': $new_value = $this->lang['status.' . $n_values[$field]]; break; case 'reproductible': $new_value = $n_values[$field] ? $common_lang['yes'] : $common_lang['no']; break; default: $new_value = $n_values[$field]; $comment = ''; } $pm_comment .= $field != 'contents' && $field != 'reproduction_method' ? $this->lang['labels.fields.' . $field] . ' : ' . stripslashes($new_value) . ' ' : ''; //Bug history update BugtrackerService::add_history(array('bug_id' => $bug->get_id(), 'updater_id' => $this->current_user->get_id(), 'update_date' => $now->get_timestamp(), 'updated_field' => $field, 'old_value' => $o_values[$field], 'new_value' => $n_values[$field], 'change_comment' => $comment)); } } if ($modification) { //Bug update BugtrackerService::update($bug); //Send PM to updaters if the option is enabled if ($this->config->are_pm_enabled() && $this->config->are_pm_edit_enabled() && !empty($pm_comment)) { BugtrackerPMService::send_PM_to_updaters('edit', $bug->get_id(), $pm_comment); } } } Feed::clear_cache('bugtracker'); BugtrackerStatsCache::invalidate(); AppContext::get_response()->redirect($this->form->get_value('referrer') ? $this->form->get_value('referrer') : BugtrackerUrlBuilder::unsolved(), StringVars::replace_vars($this->is_new_bug ? $this->lang['success.add'] : $this->lang['success.edit'], array('id' => $bug->get_id()))); }
private function build_response(View $view) { $request = AppContext::get_request(); $field = $request->get_value('field', 'date'); $sort = $request->get_value('sort', 'desc'); $page = $request->get_int('page', 1); $filter = $request->get_value('filter', ''); $filter_id = $request->get_value('filter_id', ''); $body_view = BugtrackerViews::build_body_view($view, 'unsolved'); $response = new SiteDisplayResponse($body_view); $graphical_environment = $response->get_graphical_environment(); $graphical_environment->set_page_title($this->lang['titles.unsolved'], $this->lang['module_title']); $graphical_environment->get_seo_meta_data()->set_canonical_url(BugtrackerUrlBuilder::unsolved($field, $sort, $page, $filter, $filter_id)); $breadcrumb = $graphical_environment->get_breadcrumb(); $breadcrumb->add($this->lang['module_title'], BugtrackerUrlBuilder::home()); $breadcrumb->add($this->lang['titles.unsolved'], BugtrackerUrlBuilder::unsolved($field, $sort, $page, $filter, $filter_id)); return $response; }
private function build_versions_form($current_page, $requested_version, $filters, $filters_ids) { $search_field = $current_page == 'unsolved' ? 'detected_in' : 'fixed_in'; if (in_array($search_field, $filters)) { $key = array_search($search_field, $filters); unset($filters[$key]); unset($filters_ids[$key]); } $filter = implode('-', $filters); $filter_id = implode('-', $filters_ids); $form = new HTMLForm('version-form', '', false); $fieldset = new FormFieldsetHorizontal('filter-version'); $form->add_fieldset($fieldset); $fieldset->add_field(new FormFieldSimpleSelectChoice('filter_version', '', $requested_version, $this->build_select_versions($current_page), array('events' => array('change' => 'if (HTMLForms.getField("filter_version").getValue() > 0) { document.location = "' . ($current_page == 'unsolved' ? BugtrackerUrlBuilder::unsolved('name', 'desc', 1, (!empty($filter) ? $filter . '-' : '') . 'fixed_in', !empty($filter_id) ? $filter_id . '-' : '')->rel() : BugtrackerUrlBuilder::solved('name', 'desc', 1, (!empty($filter) ? $filter . '-' : '') . 'fixed_in', !empty($filter_id) ? $filter_id . '-' : '')->rel()) . '" + HTMLForms.getField("filter_version").getValue(); } else { document.location = "' . ($current_page == 'unsolved' ? BugtrackerUrlBuilder::unsolved('name', 'desc', 1, $filter, $filter_id)->rel() : BugtrackerUrlBuilder::solved('name', 'desc', 1, $filter, $filter_id)->rel()) . '"; }')))); return $form; }