private function init() { $this->lang = LangLoader::get('common', 'bugtracker'); $this->view = new FileTemplate('bugtracker/BugtrackerRoadmapListController.tpl'); $this->view->add_lang($this->lang); $this->config = BugtrackerConfig::load(); }
public function synchronize() { $this->bugs_number = array('total' => 0); $db_querier = PersistenceContext::get_querier(); $config = BugtrackerConfig::load(); $versions = $config->get_versions(); $result = $db_querier->select("SELECT status, COUNT(*) as bugs_number\r\n\t\tFROM " . BugtrackerSetup::$bugtracker_table . "\r\n\t\tGROUP BY status\r\n\t\tORDER BY status ASC"); foreach ($result as $row) { $this->bugs_number[$row['status']] = $row['bugs_number']; $this->bugs_number['total'] += $row['bugs_number']; } $result->dispose(); $result = $db_querier->select("SELECT @fixed_in:=fixed_in AS fixed_in, \r\n\t\tCOUNT(*) as bugs_number, \r\n\t\t(SELECT COUNT(*) FROM " . BugtrackerSetup::$bugtracker_table . " WHERE fixed_in = @fixed_in AND status = '" . Bug::FIXED . "') as fixed_bugs_number, \r\n\t\t(SELECT COUNT(*) FROM " . BugtrackerSetup::$bugtracker_table . " WHERE fixed_in = @fixed_in AND (status = '" . Bug::IN_PROGRESS . "' OR status = '" . Bug::REOPEN . "')) as in_progress_bugs_number\r\n\t\tFROM " . BugtrackerSetup::$bugtracker_table . "\r\n\t\tGROUP BY fixed_in\r\n\t\tORDER BY fixed_in ASC"); foreach ($result as $row) { if (!empty($row['fixed_in']) && isset($versions[$row['fixed_in']])) { $this->bugs_number_per_version[$row['fixed_in']] = array('all' => $row['bugs_number'], Bug::FIXED => $row['fixed_bugs_number'], Bug::IN_PROGRESS => $row['in_progress_bugs_number']); } } $result->dispose(); $result = $db_querier->select("SELECT member.*, COUNT(*) as bugs_number\r\n\t\tFROM " . BugtrackerSetup::$bugtracker_table . " bugtracker\r\n\t\tJOIN " . DB_TABLE_MEMBER . " member ON member.user_id = bugtracker.author_id\r\n\t\tWHERE status <> '" . Bug::REJECTED . "'\r\n\t\tGROUP BY author_id\r\n\t\tORDER BY bugs_number DESC\r\n\t\tLIMIT " . $config->get_stats_top_posters_number()); $i = 1; foreach ($result as $row) { $author = new User(); if (!empty($row['user_id'])) { $author->set_properties($row); } else { $author->init_visitor_user(); } $this->top_posters[$i] = array('user' => $author, 'bugs_number' => $row['bugs_number']); $i++; } $result->dispose(); }
private function check_page_exists() { if (!BugtrackerConfig::load()->are_stats_enabled()) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_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 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); } }
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 init(HTTPRequestCustom $request) { $id = $request->get_int('id', 0); $this->lang = LangLoader::get('common', 'bugtracker'); try { $this->bug = BugtrackerService::get_bug('WHERE id=:id', array('id' => $id)); } catch (RowNotFoundException $e) { $error_controller = new UserErrorController(LangLoader::get_message('error', 'status-messages-common'), $this->lang['error.e_unexist_bug']); DispatchManager::redirect($error_controller); } $this->view = new StringTemplate('# INCLUDE FORM #'); $this->view->add_lang($this->lang); $this->config = BugtrackerConfig::load(); }
/** * @desc Send a PM to a list of members. * @param string $pm_type Type of PM ('assigned', 'pending', 'in_progress', 'comment', 'delete', 'edit', 'fixed', 'rejected', 'reopen') * @param int $bug_id ID of the bug which is concerned * @param string $message (optional) Message to include in the PM * @param string[] $recipients_list (optional) Recipients to whom send the PM */ public static function send_PM_to_updaters($pm_type, $bug_id, $message = '', $recipients_list = array()) { //Load configuration $config = BugtrackerConfig::load(); $pm_enabled = $config->are_pm_enabled(); //Check is the sending of PM is enabled for the selected type $pm_type_enabled = ''; switch ($pm_type) { case 'assigned': $pm_type_enabled = $config->are_pm_assign_enabled(); break; case 'pending': $pm_type_enabled = $config->are_pm_pending_enabled(); break; case 'in_progress': $pm_type_enabled = $config->are_pm_in_progress_enabled(); break; case 'comment': $pm_type_enabled = $config->are_pm_comment_enabled(); break; case 'delete': $pm_type_enabled = $config->are_pm_delete_enabled(); break; case 'edit': $pm_type_enabled = $config->are_pm_edit_enabled(); break; case 'fixed': $pm_type_enabled = $config->are_pm_fix_enabled(); break; case 'rejected': $pm_type_enabled = $config->are_pm_reject_enabled(); break; case 'reopen': $pm_type_enabled = $config->are_pm_reopen_enabled(); break; } //Retrieve the list of members which updated the bug if (empty($recipients_list)) { $recipients_list = BugtrackerService::get_updaters_list($bug_id); } //Send the PM to each recipient foreach ($recipients_list as $recipient) { if ($pm_enabled && $pm_type_enabled) { self::send_PM($pm_type, $recipient, $bug_id, $message); } } }
private function build_view($request) { //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(); $user_assigned = $this->bug->get_assigned_to_id() && UserService::user_exists("WHERE user_id=:user_id", array('user_id' => $this->bug->get_assigned_to_id())) ? UserService::get_user($this->bug->get_assigned_to_id()) : ''; $user_assigned_group_color = $user_assigned ? User::get_group_color($user_assigned->get_groups(), $user_assigned->get_level(), true) : ''; $this->view->put_all($this->bug->get_array_tpl_vars()); $this->view->put_all(array('C_TYPES' => $types, 'C_CATEGORIES' => $categories, 'C_SEVERITIES' => $severities, 'C_PRIORITIES' => $priorities, 'C_VERSIONS' => $versions, 'C_EDIT_BUG' => BugtrackerAuthorizationsService::check_authorizations()->moderation() || $this->current_user->get_id() == $this->bug->get_assigned_to_id() || $this->current_user->get_id() == $this->bug->get_author_user()->get_id() && $this->bug->get_author_user()->get_id() != User::VISITOR_LEVEL, 'C_DELETE_BUG' => BugtrackerAuthorizationsService::check_authorizations()->moderation(), 'C_CHANGE_STATUS' => BugtrackerAuthorizationsService::check_authorizations()->moderation() || $this->current_user->get_id() == $this->bug->get_assigned_to_id(), 'C_USER_ASSIGNED_GROUP_COLOR' => !empty($user_assigned_group_color), 'C_USER_ASSIGNED' => $user_assigned, 'USER_ASSIGNED' => $user_assigned ? $user_assigned->get_display_name() : '', 'USER_ASSIGNED_LEVEL_CLASS' => $user_assigned ? UserService::get_level_class($user_assigned->get_level()) : '', 'USER_ASSIGNED_GROUP_COLOR' => $user_assigned_group_color, 'U_CHANGE_STATUS' => BugtrackerUrlBuilder::change_status($this->bug->get_id())->rel(), 'U_EDIT' => BugtrackerUrlBuilder::edit($this->bug->get_id(), 'detail')->rel(), 'U_DELETE' => BugtrackerUrlBuilder::delete($this->bug->get_id(), 'unsolved')->rel())); $comments_topic = new BugtrackerCommentsTopic(); $comments_topic->set_id_in_module($this->bug->get_id()); $comments_topic->set_url(BugtrackerUrlBuilder::detail_comments($this->bug->get_id() . '-' . $this->bug->get_rewrited_title())); $this->view->put('COMMENTS', $comments_topic->display()); }
public function execute_add_comment_event() { //Load module lang $lang = LangLoader::get('common', 'bugtracker'); //Load module configuration $config = BugtrackerConfig::load(); //Get the content of the comment $comment = stripslashes(FormatingHelper::strparse(AppContext::get_request()->get_poststring('comments_message', ''))); //Retrieve the id of the bug $bug_id = $this->comments_topic->get_id_in_module(); $now = new Date(); //New line in the bug history BugtrackerService::add_history(array('bug_id' => $bug_id, 'updater_id' => AppContext::get_current_user()->get_id(), 'update_date' => $now->get_timestamp(), 'change_comment' => $lang['notice.new_comment'])); //Send a PM to the list of members who updated the bug if the send of PM is enabled if ($config->are_pm_enabled() && $config->are_pm_comment_enabled()) { BugtrackerPMService::send_PM_to_updaters('comment', $bug_id, $comment); } return true; }
private function init(HTTPRequestCustom $request) { $this->lang = LangLoader::get('common', 'bugtracker'); $this->config = BugtrackerConfig::load(); //Get the parameter to delete $this->parameter = $request->get_string('parameter', ''); //Get the id of the parameter to delete $this->id = $request->get_int('id', ''); if (!in_array($this->parameter, array('type', 'category', 'version')) || empty($this->id)) { $controller = new UserErrorController(LangLoader::get_message('error', 'status-messages-common'), $this->lang['error.e_unexist_parameter']); $controller->set_response_classname(UserErrorController::ADMIN_RESPONSE); DispatchManager::redirect($controller); } $types = $this->config->get_types(); $categories = $this->config->get_categories(); $versions = $this->config->get_versions(); switch ($this->parameter) { case 'type': if (!isset($types[$this->id])) { //Error : unexist type $controller = new UserErrorController(LangLoader::get_message('error', 'status-messages-common'), $this->lang['error.e_unexist_type']); $controller->set_response_classname(UserErrorController::ADMIN_RESPONSE); DispatchManager::redirect($controller); } break; case 'category': if (!isset($categories[$this->id])) { //Error : unexist category $controller = new UserErrorController(LangLoader::get_message('error', 'status-messages-common'), $this->lang['error.e_unexist_category']); $controller->set_response_classname(UserErrorController::ADMIN_RESPONSE); DispatchManager::redirect($controller); } break; case 'version': if (!isset($versions[$this->id])) { //Error : unexist version $controller = new UserErrorController(LangLoader::get_message('error', 'status-messages-common'), $this->lang['error.e_unexist_version']); $controller->set_response_classname(UserErrorController::ADMIN_RESPONSE); DispatchManager::redirect($controller); } break; } }
private function build_select_versions($current_page) { $versions = $current_page == 'unsolved' ? BugtrackerConfig::load()->get_versions_detected() : BugtrackerConfig::load()->get_versions(); $versions = array_reverse($versions, true); $array_versions = array(); $array_versions[] = new FormFieldSelectChoiceOption(' ', ''); foreach ($versions as $key => $version) { $array_versions[] = new FormFieldSelectChoiceOption(stripslashes($version['name']), $key); } return $array_versions; }
private function get_pagination($history_lines_number, $page) { $pagination = new ModulePagination($page, $history_lines_number, (int) BugtrackerConfig::load()->get_items_per_page()); $pagination->set_url(BugtrackerUrlBuilder::history($this->bug->get_id(), '%d')); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } return $pagination; }
private function get_authorizations($bit) { return AppContext::get_current_user()->check_auth(BugtrackerConfig::load()->get_authorizations(), $bit); }
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 get_pagination($bugs_number, $page, $field, $sort, $filter, $filter_id) { $pagination = new ModulePagination($page, $bugs_number, (int) BugtrackerConfig::load()->get_items_per_page()); $pagination->set_url(BugtrackerUrlBuilder::unsolved($field, $sort, '%d', $filter, $filter_id)); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } return $pagination; }
private function init() { $this->lang = LangLoader::get('common', 'bugtracker'); $this->current_user = AppContext::get_current_user(); $this->config = BugtrackerConfig::load(); }
private function save() { //Save the authorizations list BugtrackerConfig::load()->set_authorizations($this->form->get_value('authorizations')->build_auth_array()); BugtrackerConfig::save(); }
private function init() { $this->config = BugtrackerConfig::load(); $this->lang = LangLoader::get('common', 'bugtracker'); }