public function execute(HTTPRequestCustom $request) { AppContext::get_session()->csrf_get_protect(); $config = BugtrackerConfig::load(); $parameter = $request->get_string('parameter', ''); if (in_array($parameter, array('type', 'category', 'severity', 'priority', 'version'))) { switch ($parameter) { case 'type': $config->set_default_type(0); break; case 'category': $config->set_default_category(0); break; case 'severity': $config->set_default_severity(0); break; case 'priority': $config->set_default_priority(0); break; case 'version': $config->set_default_version(0); break; } BugtrackerConfig::save(); AppContext::get_response()->redirect(BugtrackerUrlBuilder::configuration()); } else { $controller = new UserErrorController(LangLoader::get_message('error', 'status-messages-common'), LangLoader::get_message('error.e_unexist_parameter', 'common', 'bugtracker')); $controller->set_response_classname(UserErrorController::ADMIN_RESPONSE); DispatchManager::redirect($controller); } }
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 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; }
public function get_actions_tree_links() { $lang = LangLoader::get('common', 'bugtracker'); $tree = new ModuleTreeLinks(); $tree->add_link(new ModuleLink($lang['actions.add'], BugtrackerUrlBuilder::add(), BugtrackerAuthorizationsService::check_authorizations()->write())); $tree->add_link(new AdminModuleLink(LangLoader::get_message('configuration', 'admin-common'), BugtrackerUrlBuilder::configuration())); $tree->add_link(new AdminModuleLink($lang['titles.admin.authorizations.manage'], BugtrackerUrlBuilder::authorizations())); return $tree; }
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 __construct($view, $title_page) { parent::__construct($view); $lang = LangLoader::get('common', 'bugtracker'); $this->set_title($lang['module_title']); $this->add_link(LangLoader::get_message('configuration', 'admin-common'), BugtrackerUrlBuilder::configuration()); $this->add_link(LangLoader::get_message('authorizations', 'common'), BugtrackerUrlBuilder::authorizations()); $env = $this->get_graphical_environment(); $env->set_page_title($title_page, $lang['module_title']); }
/** * @desc Send a PM to a member. * @param string $pm_type Type of PM ('assigned', 'comment', 'pending', 'in_progress', 'delete', 'edit', 'fixed', 'rejected', 'reopen') * @param int $recipient_id ID of the PM's recipient * @param int $bug_id ID of the bug which is concerned * @param string $message (optional) Message to include in the PM */ public static function send_PM($pm_type, $recipient_id, $bug_id, $message = '') { //Load module lang $lang = LangLoader::get('common', 'bugtracker'); //Send the PM if the recipient is not a guest if ($recipient_id > 0) { //Get current user $current_user = AppContext::get_current_user(); $author = $current_user->get_id() != User::VISITOR_LEVEL ? $current_user->get_display_name() : LangLoader::get_message('visitor', 'user-common'); $pm_content = StringVars::replace_vars($lang['pm.' . $pm_type . '.contents'], array('author' => $author, 'id' => $bug_id)) . (!empty($message) ? $pm_type != 'edit' ? StringVars::replace_vars($lang['pm.with_comment'], array('comment' => $message)) : StringVars::replace_vars($lang['pm.edit_fields'], array('fields' => $message)) : '') . ($pm_type != 'delete' ? StringVars::replace_vars($lang['pm.bug_link'], array('link' => BugtrackerUrlBuilder::detail($bug_id)->relative())) : ''); //Send the PM PrivateMsg::start_conversation($recipient_id, StringVars::replace_vars($lang['pm.' . $pm_type . '.title'], array('id' => $bug_id)), $pm_content, -1, PrivateMsg::SYSTEM_PM); } }
public function execute(HTTPRequestCustom $request) { $this->init($request); if (!$this->get_parameter_items_exists()) { $this->delete_parameter_in_config(); AppContext::get_response()->redirect(BugtrackerUrlBuilder::configuration()); } $this->build_form(); $tpl = new StringTemplate('# INCLUDE FORM #'); $tpl->add_lang($this->lang); if ($this->submit_button->has_been_submited() && $this->form->validate()) { if ($this->form->get_value('delete_parameter_and_content')) { $this->delete_parameter_and_bugs(); } else { $other_id = $this->form->get_value('move_into_another')->get_raw_value(); $this->move_into_another($other_id); } $this->delete_parameter_in_config(); AppContext::get_response()->redirect(BugtrackerUrlBuilder::configuration()); } $tpl->put('FORM', $this->form->display()); return new AdminBugtrackerDisplayResponse($tpl, $this->lang['config.delete_parameter.' . $this->parameter]); }
private function build_response(View $view) { $body_view = BugtrackerViews::build_body_view($view, 'stats'); $response = new SiteDisplayResponse($body_view); $graphical_environment = $response->get_graphical_environment(); $graphical_environment->set_page_title($this->lang['titles.stats'], $this->lang['module_title']); $graphical_environment->get_seo_meta_data()->set_canonical_url(BugtrackerUrlBuilder::stats()); $breadcrumb = $graphical_environment->get_breadcrumb(); $breadcrumb->add($this->lang['module_title'], BugtrackerUrlBuilder::home()); $breadcrumb->add($this->lang['titles.stats'], BugtrackerUrlBuilder::stats()); return $response; }
private function build_response(View $view) { $request = AppContext::get_request(); $body_view = BugtrackerViews::build_body_view($view, 'change_status', $this->bug->get_id()); $response = new SiteDisplayResponse($body_view); $graphical_environment = $response->get_graphical_environment(); $graphical_environment->set_page_title($this->lang['titles.change_status'] . ' #' . $this->bug->get_id(), $this->lang['module_title']); $graphical_environment->get_seo_meta_data()->set_canonical_url(BugtrackerUrlBuilder::change_status($this->bug->get_id())); $breadcrumb = $graphical_environment->get_breadcrumb(); $breadcrumb->add($this->lang['module_title'], BugtrackerUrlBuilder::home()); $breadcrumb->add($this->lang['titles.detail'] . ' #' . $this->bug->get_id(), BugtrackerUrlBuilder::detail($this->bug->get_id() . '-' . $this->bug->get_rewrited_title())); $breadcrumb->add($this->lang['titles.change_status'] . ' #' . $this->bug->get_id(), BugtrackerUrlBuilder::change_status($this->bug->get_id())); return $response; }
private function build_versions_table() { $versions = $this->config->get_versions(); $versions_table = new FileTemplate('bugtracker/AdminBugtrackerVersionsListController.tpl'); $versions_table->add_lang($this->lang); $key = 0; foreach ($versions as $key => $version) { $release_date = !empty($version['release_date']) && is_numeric($version['release_date']) ? new Date($version['release_date'], Timezone::SERVER_TIMEZONE) : null; $versions_table->assign_block_vars('versions', array('C_IS_DEFAULT' => $this->config->get_default_version() == $key, 'C_DETECTED_IN' => $version['detected_in'], 'ID' => $key, 'NAME' => stripslashes($version['name']), 'RELEASE_DATE' => !empty($release_date) ? $release_date->format(Date::FORMAT_ISO_DAY_MONTH_YEAR) : '', 'DAY' => !empty($release_date) ? $release_date->get_day() : date('d'), 'MONTH' => !empty($release_date) ? $release_date->get_month() : date('n'), 'YEAR' => !empty($release_date) ? $release_date->get_year() : date('Y'), 'LINK_DELETE' => BugtrackerUrlBuilder::delete_parameter('version', $key)->rel())); } $versions_table->put_all(array('C_VERSIONS' => !empty($versions), 'MAX_INPUT' => $this->max_input, 'NEXT_ID' => $key + 1, 'DAY' => date('d'), 'MONTH' => date('n'), 'YEAR' => date('Y'), 'C_DISPLAY_DEFAULT_DELETE_BUTTON' => $this->config->get_default_version(), 'LINK_DELETE_DEFAULT' => BugtrackerUrlBuilder::delete_default_parameter('version')->rel())); return $versions_table; }
private function generate_response(View $tpl) { $bug = $this->get_bug(); if ($bug->get_id() === null) { $body_view = BugtrackerViews::build_body_view($tpl, 'add'); $response = new SiteDisplayResponse($body_view); $graphical_environment = $response->get_graphical_environment(); $graphical_environment->set_page_title($this->lang['titles.add'], $this->lang['module_title']); $graphical_environment->get_seo_meta_data()->set_canonical_url(BugtrackerUrlBuilder::add()); $breadcrumb = $graphical_environment->get_breadcrumb(); $breadcrumb->add($this->lang['module_title'], BugtrackerUrlBuilder::home()); $breadcrumb->add($this->lang['titles.add'], BugtrackerUrlBuilder::add()); } else { $body_view = BugtrackerViews::build_body_view($tpl, 'edit', $bug->get_id()); $response = new SiteDisplayResponse($body_view); $graphical_environment = $response->get_graphical_environment(); $graphical_environment->set_page_title($this->lang['titles.edit'] . ' #' . $bug->get_id(), $this->lang['module_title']); $graphical_environment->get_seo_meta_data()->set_canonical_url(BugtrackerUrlBuilder::edit($bug->get_id())); $breadcrumb = $graphical_environment->get_breadcrumb(); $breadcrumb->add($this->lang['module_title'], BugtrackerUrlBuilder::home()); $breadcrumb->add($this->lang['titles.edit'] . ' #' . $bug->get_id(), BugtrackerUrlBuilder::edit($bug->get_id())); } return $response; }
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; }
public function get_array_tpl_vars() { $config = BugtrackerConfig::load(); $types = $config->get_types(); $categories = $config->get_categories(); $severities = $config->get_severities(); $priorities = $config->get_priorities(); $versions = $config->get_versions(); $status_list = $config->get_status_list(); $lang = LangLoader::get('common', 'bugtracker'); $user = $this->get_author_user(); $user_group_color = User::get_group_color($user->get_groups(), $user->get_level(), true); $number_comments = CommentsService::get_number_comments('bugtracker', $this->id); return array('C_PROGRESS' => $config->is_progress_bar_displayed(), 'C_FIX_DATE' => $this->fix_date != null, 'C_FIXED_IN' => $this->detected_in, 'C_FIXED' => $this->is_fixed(), 'C_PENDING' => $this->is_pending(), 'C_REPRODUCTIBLE' => $this->is_reproductible(), 'C_REPRODUCTION_METHOD' => $this->reproduction_method, 'C_AUTHOR_GROUP_COLOR' => !empty($user_group_color), 'C_AUTHOR_EXIST' => $user->get_id() !== User::VISITOR_LEVEL, 'C_MORE_THAN_ONE_COMMENT' => $number_comments > 1, 'ID' => $this->id, 'TITLE' => $this->title, 'CONTENTS' => FormatingHelper::second_parse($this->contents), 'SUBMIT_DATE_SHORT' => $this->submit_date->format(Date::FORMAT_DAY_MONTH_YEAR), 'SUBMIT_DATE' => $this->submit_date->format(Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE), 'FIX_DATE_SHORT' => $this->fix_date !== null ? $this->fix_date->format(Date::FORMAT_DAY_MONTH_YEAR) : '', 'FIX_DATE' => $this->fix_date !== null ? $this->fix_date->format(Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE) : '', 'TYPE' => isset($types[$this->type]) ? stripslashes($types[$this->type]) : $lang['notice.none'], 'CATEGORY' => isset($categories[$this->category]) ? stripslashes($categories[$this->category]) : $lang['notice.none_e'], 'SEVERITY' => isset($severities[$this->severity]) ? stripslashes($severities[$this->severity]['name']) : $lang['notice.none'], 'PRIORITY' => isset($priorities[$this->priority]) ? stripslashes($priorities[$this->priority]) : $lang['notice.none_e'], 'DETECTED_IN' => isset($versions[$this->detected_in]) ? stripslashes($versions[$this->detected_in]['name']) : $lang['notice.not_defined'], 'FIXED_IN' => isset($versions[$this->fixed_in]) ? stripslashes($versions[$this->fixed_in]['name']) : $lang['notice.not_defined'], 'PROGRESS' => $status_list[$this->status], 'STATUS' => LangLoader::get_message('status.' . $this->status, 'common', 'bugtracker'), 'REPRODUCTION_METHOD' => FormatingHelper::second_parse($this->reproduction_method), 'AUTHOR' => $user->get_display_name(), 'AUTHOR_LEVEL_CLASS' => UserService::get_level_class($user->get_level()), 'AUTHOR_GROUP_COLOR' => $user_group_color, 'NUMBER_COMMENTS' => $number_comments, 'U_AUTHOR_PROFILE' => UserUrlBuilder::profile($user->get_id())->rel(), 'U_LINK' => BugtrackerUrlBuilder::detail($this->id . '-' . $this->rewrited_title)->rel(), 'U_HISTORY' => BugtrackerUrlBuilder::history($this->id)->rel(), 'U_COMMENTS' => BugtrackerUrlBuilder::detail($this->id . '-' . $this->rewrited_title . '#comments-list')->rel()); }
private function build_response(View $view) { $versions = array_reverse($this->config->get_versions(), true); $request = AppContext::get_request(); $roadmap_id_version = $request->get_value('id_version', key($versions)); $roadmap_version = $request->get_value('version', Url::encode_rewrite($versions[key($versions)]['name'])); $roadmap_status = $request->get_value('status', 'all'); $field = $request->get_value('field', 'date'); $sort = $request->get_value('sort', 'desc'); $page = $request->get_int('page', 1); $body_view = BugtrackerViews::build_body_view($view, 'roadmap'); $response = new SiteDisplayResponse($body_view); $graphical_environment = $response->get_graphical_environment(); $graphical_environment->set_page_title($this->lang['titles.roadmap'], $this->lang['module_title']); $graphical_environment->get_seo_meta_data()->set_canonical_url(BugtrackerUrlBuilder::roadmap($roadmap_id_version, $roadmap_version, $roadmap_status, $field, $sort, $page)); $breadcrumb = $graphical_environment->get_breadcrumb(); $breadcrumb->add($this->lang['module_title'], BugtrackerUrlBuilder::home()); $breadcrumb->add($this->lang['titles.roadmap'], BugtrackerUrlBuilder::roadmap($roadmap_id_version, $roadmap_version, $roadmap_status, $field, $sort, $page)); 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; }