%PDF- %PDF-
Direktori : /www/loslex_o/tracker/core/commands/ |
Current File : /www/loslex_o/tracker/core/commands/IssueViewPageCommand.php |
<?php # MantisBT - A PHP based bugtracking system # MantisBT is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # MantisBT is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with MantisBT. If not, see <http://www.gnu.org/licenses/>. require_api( 'access_api.php' ); require_api( 'authentication_api.php' ); require_api( 'bug_api.php' ); require_api( 'config_api.php' ); require_api( 'constant_inc.php' ); require_api( 'custom_field_api.php' ); require_api( 'date_api.php' ); require_api( 'email_api.php' ); require_api( 'error_api.php' ); require_api( 'event_api.php' ); require_api( 'file_api.php' ); require_api( 'helper_api.php' ); require_api( 'lang_api.php' ); require_api( 'last_visited_api.php' ); require_api( 'profile_api.php' ); require_api( 'relationship_api.php' ); require_api( 'string_api.php' ); require_api( 'user_api.php' ); require_once( dirname( __FILE__ ) . '/../../api/soap/mc_account_api.php' ); require_once( dirname( __FILE__ ) . '/../../api/soap/mc_api.php' ); require_once( dirname( __FILE__ ) . '/../../api/soap/mc_enum_api.php' ); require_once( dirname( __FILE__ ) . '/../../api/soap/mc_issue_api.php' ); require_once( dirname( __FILE__ ) . '/../../api/soap/mc_project_api.php' ); use Mantis\Exceptions\ClientException; /** * Sample: * { * "query": { * "id": 1234 * }, * "payload": { * }, * "options: { * "force_readonly": false * } * } */ /** * A command that returns issue information to view. */ class IssueViewPageCommand extends Command { /** * Constructor * * @param array $p_data The command data. */ function __construct( array $p_data ) { parent::__construct( $p_data ); } /** * Validate the data. */ function validate() { $t_issue_id = $this->query( 'id' ); bug_ensure_exists( $t_issue_id ); access_ensure_bug_level( config_get( 'view_bug_threshold' ), $t_issue_id ); } /** * Process the command. * * @returns array Command response */ protected function process() { $t_force_readonly = $this->option( 'force_readonly', false ); $t_anonymous_user = current_user_is_anonymous(); $t_user_id = auth_get_current_user_id(); $t_issue_id = $this->query( 'id' ); $t_issue_readonly = $t_force_readonly || bug_is_readonly( $t_issue_id ); ApiObjectFactory::$soap = false; $t_issue_data = bug_get( $t_issue_id, true ); $t_lang = mci_get_user_lang( $t_user_id ); $t_issue = mci_issue_data_as_array( $t_issue_data, $t_user_id, $t_lang ); $t_issue_id = (int)$t_issue['id']; $t_project_id = (int)$t_issue['project']['id']; # in case the current project is not the same project of the bug we are # viewing, override the current project. This to avoid problems with # categories and handlers lists etc. global $g_project_override; $g_project_override = $t_project_id; $t_issue_view = array(); $t_flags = array(); # Fields to show on the issue view page $t_fields = config_get( 'bug_view_page_fields' ); $t_fields = columns_filter_disabled( $t_fields ); $t_flags['summary_show'] = in_array( 'summary', $t_fields ); $t_flags['description_show'] = in_array( 'description', $t_fields ); # Versions $t_show_versions = version_should_show_product_version( $t_project_id ); $t_flags['versions_show'] = $t_show_versions; $t_flags['versions_product_version_show'] = $t_show_versions && in_array( 'product_version', $t_fields ); $t_flags['versions_fixed_in_version_show'] = $t_show_versions && in_array( 'fixed_in_version', $t_fields ); $t_flags['versions_product_build_show'] = $t_show_versions && in_array( 'product_build', $t_fields ) && config_get( 'enable_product_build' ) == ON; $t_flags['versions_target_version_show'] = $t_show_versions && in_array( 'target_version', $t_fields ) && access_has_bug_level( config_get( 'roadmap_view_threshold' ), $t_issue_id ); # Formatted version strings for display $t_issue_view['product_version'] = isset( $t_issue['version'] ) ? prepare_version_string( $t_project_id, $t_issue['version']['id'], false ) : ''; $t_issue_view['target_version'] = isset( $t_issue['target_version'] ) ? prepare_version_string( $t_project_id, $t_issue['target_version']['id'], false ) : ''; $t_issue_view['fixed_in_version'] = isset( $t_issue['fixed_in_version'] ) ? prepare_version_string( $t_project_id, $t_issue['fixed_in_version']['id'], false ) : ''; $t_issue_view['form_title'] = lang_get( 'bug_view_title' ); if( config_get_global( 'wiki_enable' ) == ON ) { $t_issue_view['wiki_link'] = 'wiki.php?id=' . $t_issue_id; } $t_flags['history_show'] = access_has_bug_level( config_get( 'view_history_threshold' ), $t_issue_id ); $t_flags['reminder_can_add'] = !current_user_is_anonymous() && !$t_issue_readonly && access_has_bug_level( config_get( 'bug_reminder_threshold' ), $t_issue_id ); $t_flags['id_show'] = in_array( 'id', $t_fields ); if( $t_flags['id_show'] ) { $t_issue_view['id_formatted'] = bug_format_id( $t_issue_id ); } $t_flags['created_at_show'] = in_array( 'date_submitted', $t_fields ); if( $t_flags['created_at_show'] ) { $t_issue_view['created_at'] = date( config_get( 'normal_date_format' ), strtotime( $t_issue['created_at'] ) ); } $t_flags['updated_at_show'] = in_array( 'last_updated', $t_fields ); if( $t_flags['updated_at_show'] ) { $t_issue_view['updated_at'] = date( config_get( 'normal_date_format' ), strtotime( $t_issue['updated_at'] ) ); } $t_flags['additional_information_show'] = isset( $t_issue['additional_information'] ) && !is_blank( $t_issue['additional_information'] ) && in_array( 'additional_info', $t_fields ); $t_flags['steps_to_reproduce_show'] = isset( $t_issue['steps_to_reproduce'] ) && !is_blank( $t_issue['steps_to_reproduce'] ) && in_array( 'steps_to_reproduce', $t_fields ); $t_flags['tags_show'] = in_array( 'tags', $t_fields ) && access_has_bug_level( config_get( 'tag_view_threshold' ), $t_issue_id ); $t_flags['tags_can_attach'] = $t_flags['tags_show'] && !$t_force_readonly && access_has_bug_level( config_get( 'tag_attach_threshold' ), $t_issue_id ); # Due date $t_flags['due_date_show'] = in_array( 'due_date', $t_fields ) && access_has_bug_level( config_get( 'due_date_view_threshold' ), $t_issue_id ); if( $t_flags['due_date_show'] ) { $t_issue_view['overdue'] = bug_overdue_level( $t_issue_id ); if( isset( $t_issue['due_date'] ) ) { $t_issue_view['due_date'] = date( config_get( 'normal_date_format' ), strtotime( $t_issue['due_date'] ) ); } else { $t_issue_view['due_date'] = ''; } } $t_flags['relationships_show'] = true; $t_flags['relationships_can_update'] = !$t_force_readonly && !bug_is_readonly( $t_issue_id ) && access_has_bug_level( config_get( 'update_bug_threshold' ), $t_issue_id ); $t_flags['sponsorships_show'] = config_get( 'enable_sponsorship' ) && access_has_bug_level( config_get( 'view_sponsorship_total_threshold' ), $t_issue_id ); $t_flags['profiles_show'] = config_get( 'enable_profiles' ) != OFF; $t_flags['profiles_platform_show'] = $t_flags['profiles_show'] && in_array( 'platform', $t_fields ); $t_flags['profiles_os_show'] = $t_flags['profiles_show'] && in_array( 'os', $t_fields ); $t_flags['profiles_os_build_show'] = $t_flags['profiles_show'] && in_array( 'os_build', $t_fields ); $t_flags['monitor_show'] = !$t_force_readonly && access_has_bug_level( config_get( 'show_monitor_list_threshold' ), $t_issue_id ); if( $t_flags['monitor_show'] ) { $t_flags['monitor_can_delete'] = access_has_bug_level( config_get( 'monitor_delete_others_bug_threshold' ), $t_issue_id ) ? true : false; $t_flags['monitor_can_add'] = access_has_bug_level( config_get( 'monitor_add_others_bug_threshold' ), $t_issue_id ) ? true : false; } if( !$t_force_readonly && !$t_anonymous_user ) { $t_is_monitoring = user_is_monitoring_bug( $t_user_id, $t_issue_id ); $t_flags['can_monitor'] = !$t_is_monitoring && access_has_bug_level( config_get( 'monitor_bug_threshold' ), $t_issue_id ); $t_flags['can_unmonitor'] = $t_is_monitoring; } else { $t_flags['can_monitor'] = false; $t_flags['can_unmonitor'] = false; } $t_flags['attachments_show'] = in_array( 'attachments', $t_fields ); $t_flags['category_show'] = in_array( 'category_id', $t_fields ); $t_flags['eta_show'] = in_array( 'eta', $t_fields ); $t_flags['handler_show'] = in_array( 'handler', $t_fields ); $t_flags['priority_show'] = in_array( 'priority', $t_fields ) && isset( $t_issue['priority'] ); $t_flags['project_show'] = in_array( 'project', $t_fields ) && isset( $t_issue['project'] ); $t_flags['projection_show'] = in_array( 'projection', $t_fields ) && isset( $t_issue['projection'] ); $t_flags['reporter_show'] = in_array( 'reporter', $t_fields ) && isset( $t_issue['reporter'] ); $t_flags['reproducibility_show'] = in_array( 'reproducibility', $t_fields ) && isset( $t_issue['reproducibility'] ); $t_flags['resolution_show'] = in_array( 'resolution', $t_fields ) && isset( $t_issue['resolution'] ); $t_flags['severity_show'] = in_array( 'severity', $t_fields ) && isset( $t_issue['severity'] ); $t_flags['status_show'] = in_array( 'status', $t_fields ) && isset( $t_issue['status'] ); $t_flags['view_state_show'] = in_array( 'view_state', $t_fields ) && isset( $t_issue['view_state'] ); $t_flags['can_update'] = !$t_issue_readonly && access_has_bug_level( config_get( 'update_bug_threshold' ), $t_issue_id ); $t_flags['can_assign'] = !$t_issue_readonly && access_has_bug_level( config_get( 'update_bug_assign_threshold', config_get( 'update_bug_threshold' ) ), $t_issue_id ); $t_flags['can_change_status'] = !$t_issue_readonly && access_has_bug_level( config_get( 'update_bug_status_threshold' ), $t_issue_id ); $t_flags['can_clone'] = !$t_issue_readonly && access_has_bug_level( config_get( 'report_bug_threshold' ), $t_issue_id ); $t_flags['can_reopen'] = !$t_force_readonly && access_can_reopen_bug( $t_issue_data ); $t_closed_status = config_get( 'bug_closed_status_threshold', null, null, $t_issue_data->project_id ); $t_flags['can_close'] = !$t_force_readonly && access_can_close_bug( $t_issue_data ) && bug_check_workflow( $t_issue_data->status, $t_closed_status ); $t_flags['can_move'] = !$t_issue_readonly && user_has_more_than_one_project( $t_user_id ) && access_has_bug_level( config_get( 'move_bug_threshold' ), $t_issue_id ); $t_flags['can_delete'] = !$t_issue_readonly && access_has_bug_level( config_get( 'delete_bug_threshold' ), $t_issue_id ); if( $t_force_readonly ) { $t_flags['can_sticky'] = false; $t_flags['can_unsticky'] = false; } else { $t_sticky = bug_get_field( $t_issue_id, 'sticky' ); $t_sticky_change = access_has_bug_level( config_get( 'set_bug_sticky_threshold' ), $t_issue_id ); $t_flags['can_sticky'] = !$t_sticky && $t_sticky_change; $t_flags['can_unsticky'] = $t_sticky && $t_sticky_change; } $t_related_custom_field_ids = custom_field_get_linked_ids( $t_project_id ); custom_field_cache_values( array( $t_issue_id ), $t_related_custom_field_ids ); $t_links = event_signal( 'EVENT_MENU_ISSUE', $t_issue_id ); $t_issue_view['links'] = $t_links; # Mark the added issue as visited so that it appears on the last visited list. last_visited_issue( $t_issue_id ); return array( 'issue' => $t_issue, 'issue_view' => $t_issue_view, 'flags' => $t_flags ); } }