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);
 }
Example #15
0
 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');
 }