View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0009026 | mantisbt | api soap | public | 2008-04-01 19:39 | 2011-09-18 18:08 |
| Reporter | cabal95 | Assigned To | |||
| Priority | normal | Severity | feature | Reproducibility | N/A |
| Status | acknowledged | Resolution | open | ||
| Platform | iMac | OS | Mac OS X | OS Version | 10.5.2 |
| Product Version | 1.1.1 | ||||
| Summary | 0009026: Add new functionality to Soap API (assign issues, change status, custom filter) | ||||
| Description | This patch provides new functionality to the api soap system. It also adds (as a pre-requisite some new functionality to the mantis internal filtering system), changes are outlined per file: api/soap/mantisconnect.php:
api/soap/mc_filter_api.php:
api/soap/mc_issue_api.php:
core/filter_api.php:
I would love to find out "asap" if these changes will make it into a future version of Mantis and/or what API changes would need to be made. I have some changes to the CocoaMC project that rely upon this patch and would like to make sure those changes at least use the right API syntax (if a function needs to be renamed or whatever). | ||||
| Tags | No tags attached. | ||||
| Attached Files | mantis-1.1.1-api-rev1.patch (26,477 bytes)
diff -ur /Users/daniel/Downloads/mantis-1.1.1/api/soap/mantisconnect.php ./api/soap/mantisconnect.php
--- /Users/daniel/Downloads/mantis-1.1.1/api/soap/mantisconnect.php 2007-07-17 23:53:10.000000000 -0700
+++ ./api/soap/mantisconnect.php 2008-03-29 14:44:43.000000000 -0700
@@ -58,6 +58,22 @@
);
+ ### IntegerArray
+ $l_oServer->wsdl->addComplexType(
+ 'IntegerArray',
+ 'complexType',
+ 'array',
+ '',
+ 'SOAP-ENC:Array',
+ array(),
+ array(array(
+ 'ref' => 'SOAP-ENC:arrayType',
+ 'wsdl:arrayType' => 'xsd:integer[]'
+ )),
+ 'xsd:integer'
+ );
+
+
### ObjectRef
$l_oServer->wsdl->addComplexType(
'ObjectRef',
@@ -218,6 +234,89 @@
);
+ ### HistoryData
+ $l_oServer->wsdl->addComplexType(
+ 'HistoryData',
+ 'complexType',
+ 'struct',
+ 'all',
+ '',
+ array(
+ 'date_modified' => array( 'name' => 'date_modified', 'type' => 'xsd:dateTime', 'minOccurs' => '0'),
+ 'user' => array( 'name' => 'user', 'type' => 'tns:AccountData', 'minOccurs' => '0'),
+ 'note' => array( 'name' => 'note', 'type' => 'xsd:string', 'minOccurs' => '0'),
+ 'change' => array( 'name' => 'change', 'type' => 'xsd:string', 'minOccurs' => '0')
+ )
+ );
+
+ ### HistoryDataArray
+ $l_oServer->wsdl->addComplexType(
+ 'HistoryDataArray',
+ 'complexType',
+ 'array',
+ '',
+ 'SOAP-ENC:Array',
+ array(),
+ array(array(
+ 'ref' => 'SOAP-ENC:arrayType',
+ 'wsdl:arrayType' => 'tns:HistoryData[]'
+ )),
+ 'tns:HistoryData'
+ );
+
+
+ ### CustomFilterData
+ $l_oServer->wsdl->addComplexType(
+ 'CustomFilterData',
+ 'complexType',
+ 'struct',
+ 'all',
+ '',
+ array(
+ 'search' => array( 'name' => 'search', 'type' => 'xsd:string', 'minOccurs' => '0'),
+ 'show_category' => array( 'name' => 'show_category', 'type' => 'tns:StringArray', 'minOccurs' => '0'),
+ 'show_severity' => array( 'name' => 'show_severity', 'type' => 'tns:IntegerArray', 'minOccurs' => '0'),
+ 'show_status' => array( 'name' => 'show_status', 'type' => 'tns:IntegerArray', 'minOccurs' => '0'),
+ 'show_priority' => array( 'name' => 'show_priority', 'type' => 'tns:IntegerArray', 'minOccurs' => '0'),
+//UNUSED 'highlight_changed' => array( 'name' => 'highlight_changed', 'type' => '', 'minOccurs' => '0'),
+ 'reporter_id' => array( 'name' => 'reporter_id', 'type' => 'tns:IntegerArray', 'minOccurs' => '0'),
+ 'handler_id' => array( 'name' => 'handler_id', 'type' => 'tns:IntegerArray', 'minOccurs' => '0'),
+ 'project_id' => array( 'name' => 'project_id', 'type' => 'tns:IntegerArray', 'minOccurs' => '0'),
+ 'show_resolution' => array( 'name' => 'show_resolution', 'type' => 'tns:IntegerArray', 'minOccurs' => '0'),
+ 'show_build' => array( 'name' => 'show_build', 'type' => 'tns:StringArray', 'minOccurs' => '0'),
+ 'show_version' => array( 'name' => 'show_version', 'type' => 'tns:StringArray', 'minOccurs' => '0'),
+ 'user_monitor' => array( 'name' => 'user_monitor', 'type' => 'tns:IntegerArray', 'minOccurs' => '0'),
+ 'hide_status' => array( 'name' => 'hide_status', 'type' => 'tns:IntegerArray', 'minOccurs' => '0'),
+ 'sort' => array( 'name' => 'sort', 'type' => 'xsd:string', 'minOccurs' => '0'),
+ 'dir' => array( 'name' => 'dir', 'type' => 'xsd:string', 'minOccurs' => '0'),
+ 'sticky_issues' => array( 'name' => 'sticky_issues', 'type' => 'xsd:string', 'minOccurs' => '0'),
+ 'view_state' => array( 'name' => 'view_state', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'fixed_in_version' => array( 'name' => 'fixed_in_version', 'type' => 'tns:StringArray', 'minOccurs' => '0'),
+ 'target_version' => array( 'name' => 'target_version', 'type' => 'tns:StringArray', 'minOccurs' => '0'),
+ 'per_page' => array( 'name' => 'per_page', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'show_profile' => array( 'name' => 'show_profile', 'type' => 'tns:IntegerArray', 'minOccurs' => '0'),
+ 'platform' => array( 'name' => 'platform', 'type' => 'tns:StringArray', 'minOccurs' => '0'),
+ 'os' => array( 'name' => 'os', 'type' => 'tns:StringArray', 'minOccurs' => '0'),
+ 'os_build' => array( 'name' => 'os_build', 'type' => 'tns:StringArray', 'minOccurs' => '0'),
+ 'start_day' => array( 'name' => 'start_day', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'start_month' => array( 'name' => 'start_month', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'start_year' => array( 'name' => 'start_year', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'end_day' => array( 'name' => 'end_day', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'end_month' => array( 'name' => 'end_month', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'end_year' => array( 'name' => 'end_year', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+//UNUSED 'and_not_assigned' => array( 'name' => 'and_not_assigned', 'type' => '', 'minOccurs' => '0'),
+ 'do_filter_by_date' => array( 'name' => 'do_filter_by_date', 'type' => 'xsd:string', 'minOccurs' => '0'),
+ 'relationship_type' => array( 'name' => 'relationship_type', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'relationship_bug' => array( 'name' => 'relationship_bug', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'tag_string' => array( 'name' => 'tag_string', 'type' => 'xsd:string', 'minOccurs' => '0'),
+ 'tag_select' => array( 'name' => 'tag_select', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'show_issues' => array( 'name' => 'show_issues', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'hide_issues' => array( 'name' => 'hide_issues', 'type' => 'xsd:integer', 'minOccurs' => '0'),
+ 'last_updated' => array( 'name' => 'last_updated', 'tyep' => 'xsd:dateTime', 'minOccurs' => '0')
+ )
+ );
+
+
### IssueNoteData
$l_oServer->wsdl->addComplexType(
'IssueNoteData',
@@ -296,7 +395,8 @@
'attachments' => array( 'name' => 'attachments', 'type' => 'tns:AttachmentDataArray', 'minOccurs' => '0' ),
'relationships' => array( 'name' => 'relationships', 'type' => 'tns:RelationshipDataArray', 'minOccurs' => '0' ),
'notes' => array( 'name' => 'notes', 'type' => 'tns:IssueNoteDataArray', 'minOccurs' => '0' ),
- 'custom_fields' => array( 'name' => 'custom_fields', 'type' => 'tns:CustomFieldValueForIssueDataArray', 'minOccurs' => '0' )
+ 'custom_fields' => array( 'name' => 'custom_fields', 'type' => 'tns:CustomFieldValueForIssueDataArray', 'minOccurs' => '0' ),
+ 'history' => array ( 'name' => 'history', 'type' => 'tns:HistoryDataArray', 'minOccurs' => '0' )
)
);
@@ -989,6 +1089,42 @@
'Get the data for the specified issue attachment.'
);
+ ### mc_issue_assign
+ $l_oServer->register( 'mc_issue_assign',
+ array(
+ 'username' => 'xsd:string',
+ 'password' => 'xsd:string',
+ 'issue_id' => 'xsd:integer',
+ 'handler_id' => 'xsd:integer',
+ 'note' => 'tns:IssueNoteData'
+ ),
+ array(
+ 'return' => 'xsd:integer'
+ ),
+ $t_namespace,
+ false, false, false,
+ 'Assign the bug to the given user id, optionally provide a note.'
+ );
+
+ ### mc_issue_change_status
+ $l_oServer->register( 'mc_issue_change_status',
+ array(
+ 'username' => 'xsd:string',
+ 'password' => 'xsd:string',
+ 'issue_id' => 'xsd:integer',
+ 'status_id' => 'xsd:integer',
+ 'note' => 'tns:IssueNoteData',
+ 'resolution_id' => 'xsd:integer',
+ 'duplicate_id' => 'xsd:integer'
+ ),
+ array(
+ 'return' => 'xsd:integer'
+ ),
+ $t_namespace,
+ false, false, false,
+ 'Update the status of the given issue_id.'
+ );
+
###
### PUBLIC METHODS (defined in mc_project_api.php)
@@ -1332,6 +1468,23 @@
'Get the issue headers that match the specified filter and paging details.'
);
+ ### mc_custom_filter_get_issue_headers
+ $l_oServer->register( 'mc_custom_filter_get_issue_headers',
+ array(
+ 'username' => 'xsd:string',
+ 'password' => 'xsd:string',
+ 'filter' => 'tns:CustomFilterData',
+ 'page_number' => 'xsd:integer',
+ 'per_page' => 'xsd:integer'
+ ),
+ array(
+ 'return' => 'tns:IssueHeaderDataArray'
+ ),
+ $t_namespace,
+ false, false, false,
+ 'Get the issue headers that match the specified custom filter and paging details.'
+ );
+
### mc_config_get_string
$l_oServer->register( 'mc_config_get_string',
diff -ur /Users/daniel/Downloads/mantis-1.1.1/api/soap/mc_filter_api.php ./api/soap/mc_filter_api.php
--- /Users/daniel/Downloads/mantis-1.1.1/api/soap/mc_filter_api.php 2007-12-07 05:42:38.000000000 -0800
+++ ./api/soap/mc_filter_api.php 2008-03-28 16:03:17.000000000 -0700
@@ -157,33 +157,87 @@
$t_result = array();
$t_rows = filter_get_bug_rows( $p_page_number, $p_per_page, $t_page_count, $t_bug_count, $t_filter, $p_project_id );
- foreach( $t_rows as $t_issue_data ) {
- $t_id = $t_issue_data['id'];
-
- $t_issue = array();
-
- $t_issue['id'] = $t_id;
- $t_issue['view_state'] = $t_issue_data['view_state'];
- $t_issue['last_updated'] = timestamp_to_iso8601( $t_issue_data['last_updated'] );
-
- $t_issue['project'] = $t_issue_data['project_id'];
- $t_issue['category'] = mci_null_if_empty( $t_issue_data['category'] );
- $t_issue['priority'] = $t_issue_data['priority'];
- $t_issue['severity'] = $t_issue_data['severity'];
- $t_issue['status'] = $t_issue_data['status'];
-
- $t_issue['reporter'] = $t_issue_data['reporter_id'];
- $t_issue['summary'] = $t_issue_data['summary'];
- if( !empty( $t_issue_data['handler_id'] ) ) {
- $t_issue['handler'] = $t_issue_data['handler_id'];
- }
- $t_issue['resolution'] = $t_issue_data['resolution'];
-
- $t_issue['attachments_count'] = count( mci_issue_get_attachments( $t_issue_data['id'] ) );
- $t_issue['notes_count'] = count( mci_issue_get_notes( $t_issue_data['id'] ) );
+ foreach( $t_rows as $t_issue_data ) {
+ $t_id = $t_issue_data['id'];
- $t_result[] = $t_issue;
- }
+ $t_issue = array();
+
+ $t_issue['id'] = $t_id;
+ $t_issue['view_state'] = $t_issue_data['view_state'];
+ $t_issue['last_updated'] = timestamp_to_iso8601( $t_issue_data['last_updated'] );
+
+ $t_issue['project'] = $t_issue_data['project_id'];
+ $t_issue['category'] = mci_null_if_empty( $t_issue_data['category'] );
+ $t_issue['priority'] = $t_issue_data['priority'];
+ $t_issue['severity'] = $t_issue_data['severity'];
+ $t_issue['status'] = $t_issue_data['status'];
+
+ $t_issue['reporter'] = $t_issue_data['reporter_id'];
+ $t_issue['summary'] = $t_issue_data['summary'];
+ if( !empty( $t_issue_data['handler_id'] ) ) {
+ $t_issue['handler'] = $t_issue_data['handler_id'];
+ }
+ $t_issue['resolution'] = $t_issue_data['resolution'];
+
+ $t_issue['attachments_count'] = count( mci_issue_get_attachments( $t_issue_data['id'] ) );
+ $t_issue['notes_count'] = count( mci_issue_get_notes( $t_issue_data['id'] ) );
+
+ $t_result[] = $t_issue;
+ }
+
+ return $t_result;
+ }
+
+ /**
+ * Get the issue headers that match the specified custom filter and paging details.
+ *
+ * @param string $p_username The name of the user trying to access the filters.
+ * @param string $p_password The password of the user.
+ * @param Array $p_filter A CustomFilterData structure containing information about the filter.
+ * @param integer $p_page_number Start with the given page number (zero-based)
+ * @param integer $p_per_page Number of issues to display per page
+ * @return Array that represents an IssueDataArray structure
+ */
+ function mc_custom_filter_get_issue_headers( $p_username, $p_password, $p_filter, $p_page_number, $p_per_page ) {
+ $t_user_id = mci_check_login( $p_username, $p_password );
+ if ( $t_user_id === false ) {
+ return new soap_fault( 'Client', '', 'Access Denied' );
+ }
+
+ $t_page_count = 0;
+ $t_bug_count = 0;
+ $p_filter['_view_type'] = 'advanced';
+ $t_filter = filter_ensure_valid_filter( $p_filter );
+
+ $t_result = array();
+ $t_rows = filter_get_bug_rows( $p_page_number, $p_per_page, $t_page_count, $t_bug_count, $t_filter );
+ foreach( $t_rows as $t_issue_data ) {
+ $t_id = $t_issue_data['id'];
+
+ $t_issue = array();
+
+ $t_issue['id'] = $t_id;
+ $t_issue['view_state'] = $t_issue_data['view_state'];
+ $t_issue['last_updated'] = timestamp_to_iso8601( $t_issue_data['last_updated'] );
+
+ $t_issue['project'] = $t_issue_data['project_id'];
+ $t_issue['category'] = mci_null_if_empty( $t_issue_data['category'] );
+ $t_issue['priority'] = $t_issue_data['priority'];
+ $t_issue['severity'] = $t_issue_data['severity'];
+ $t_issue['status'] = $t_issue_data['status'];
+
+ $t_issue['reporter'] = $t_issue_data['reporter_id'];
+ $t_issue['summary'] = $t_issue_data['summary'];
+ if( !empty( $t_issue_data['handler_id'] ) ) {
+ $t_issue['handler'] = $t_issue_data['handler_id'];
+ }
+ $t_issue['resolution'] = $t_issue_data['resolution'];
+
+ $t_issue['attachments_count'] = count( mci_issue_get_attachments( $t_issue_data['id'] ) );
+ $t_issue['notes_count'] = count( mci_issue_get_notes( $t_issue_data['id'] ) );
+
+ $t_result[] = $t_issue;
+ }
return $t_result;
}
diff -ur /Users/daniel/Downloads/mantis-1.1.1/api/soap/mc_issue_api.php ./api/soap/mc_issue_api.php
--- /Users/daniel/Downloads/mantis-1.1.1/api/soap/mc_issue_api.php 2007-12-07 05:42:38.000000000 -0800
+++ ./api/soap/mc_issue_api.php 2008-03-27 17:28:23.000000000 -0700
@@ -106,6 +106,8 @@
$t_issue_data['notes'] = mci_issue_get_notes( $p_issue_id );
$t_issue_data['custom_fields'] = mci_issue_get_custom_fields( $p_issue_id );
+ $t_issue_data['history'] = mci_issue_get_history( $p_issue_id, $t_user_id );
+
return $t_issue_data;
}
@@ -473,19 +475,19 @@
}
if ( $v_priority == 0 ) {
- $v_priority = config_get( 'default_bug_priority' );
+ $t_priority_id = config_get( 'default_bug_priority' );
}
if ( $v_severity == 0 ) {
- $v_severity = config_get( 'default_bug_severity' );
+ $t_severity_id = config_get( 'default_bug_severity' );
}
if ( $v_view_state == 0 ) {
- $v_view_state = config_get( 'default_bug_view_status' );
+ $t_view_state_id = config_get( 'default_bug_view_status' );
}
if ( $v_reproducibility == 0 ) {
- $v_reproducibility = 10;
+ $t_reproducibility_id = confg_get( 'default_bug_reproducibility' );
}
$t_bug_data = new BugData;
@@ -983,4 +985,181 @@
return true;
}
+
+ /**
+ * Assign the bug to the given user id, optionally provide a note.
+ *
+ * @param string $p_username The name of the user trying to access the issue.
+ * @param string $p_password The password of the user.
+ * @param integer $p_issue_id The id of the issue to assign
+ * @param integer $p_handler_id The id of the user to assign the issue to.
+ * @param IssueNoteData $p_note The note to add.
+ * @return boolean true success, false : failure
+ */
+ function mc_issue_assign( $p_username, $p_password, $p_issue_id, $p_handler_id, $p_note = '') {
+ $t_user_id = mci_check_login( $p_username, $p_password );
+ if ( $t_user_id === false ) {
+ return new soap_fault( 'Client', '', 'Access Denied' );
+ }
+
+ if ( !bug_exists( $p_issue_id ) ) {
+ return new soap_fault( 'Client', '', "Issue '$p_issue_id' not found." );
+ }
+
+ $t_project_id = bug_get_field( $p_issue_id, 'project_id' );
+ if ( !mci_has_readwrite_access( $t_user_id, $t_project_id ) ) {
+ return new soap_fault( 'Client', '', 'Access Denied' );
+ }
+
+ if ( bug_is_readonly( $p_issue_id ) ) {
+ return new soap_fault( 'Client', '', "Issue '$p_issue_id' is readonly." );
+ }
+
+ $t_access = config_get( 'update_bug_assign_threshold', config_get( 'update_bug_threshold' ) );
+ if ( !access_has_bug_level( $t_access, $p_issue_id, $t_user_id) ) {
+ return new soap_fault( 'Client', '', "User '$t_user_id' does not have access right to assign issues." );
+ }
+
+ if ( $p_handler_id != NO_USER ) {
+ if ( !user_exists( $p_handler_id ) ) {
+ return new soap_fault( 'Client', '', "User '$p_handler_id' does not exist." );
+ }
+
+ if ( !access_has_bug_level( config_get( 'handle_bug_threshold' ), $p_issue_id, $p_handler_id ) ) {
+ return new soap_fault( 'Client', '', "User '$p_handler_id' does not have access right to handle issues." );
+ }
+ }
+
+ if ( isset( $p_note ) && is_array( $p_note ) && isset( $p_note['text'] ) ) {
+ if ( !access_has_bug_level( config_get( 'add_bugnote_threshold' ), $p_issue_id, $t_user_id ) ) {
+ return new soap_fault( 'Client', '', "User '$t_user_id' does not have access right to add notes to this issue." );
+ }
+
+ $t_note_text = $p_note['text'];
+
+ if ( isset( $p_note['view_state'] ) ) {
+ $t_view_state = $p_note['view_state'];
+ } else {
+ $t_view_state = config_get( 'default_bug_view_status' );
+ }
+
+ } else {
+ $t_note_text = '';
+ $t_view_state = config_get( 'default_bug_view_status' );
+ }
+
+ $t_view_state_id = mci_get_enum_id_from_objectref( 'view_state', $t_view_state );
+ return bug_assign( $p_issue_id, $p_handler_id, $t_note_text, $t_view_state_id == VS_PRIVATE );
+ }
+
+ /**
+ * Update the status of the given issue_id.
+ *
+ * @param string $p_username The name of the user trying to access the issue.
+ * @param string $p_password The password of the user.
+ * @param integer $p_issue_id The id of the issue to assign
+ * @param integer $p_status_id The id of the status to assign.
+ * @param IssueNoteData $p_note The note to add.
+ * @param integer $p_resolution_id The id of the resolution to use when $p_status_id == resolved.
+ * @param integer $p_duplicate_id The id of the duplicate bug when $p_resolution_id == duplicate.
+ * @return boolean true success, false : failure
+ */
+ function mc_issue_change_status( $p_username, $p_password, $p_issue_id, $p_status_id, $p_note = '', $p_resolution_id = '', $p_duplicate_id = '') {
+ $t_user_id = mci_check_login( $p_username, $p_password );
+ if ( $t_user_id === false ) {
+ return new soap_fault( 'Client', '', 'Access Denied' );
+ }
+
+ if ( !bug_exists( $p_issue_id ) ) {
+ return new soap_fault( 'Client', '', "Issue '$p_issue_id' not found." );
+ }
+
+ $t_project_id = bug_get_field( $p_issue_id, 'project_id' );
+ if ( !mci_has_readwrite_access( $t_user_id, $t_project_id ) ) {
+ return new soap_fault( 'Client', '', 'Access Denied' );
+ }
+
+ if ( bug_is_readonly( $p_issue_id ) ) {
+ return new soap_fault( 'Client', '', "Issue '$p_issue_id' is readonly." );
+ }
+
+ $t_access = access_get_status_threshold( $p_status_id, bug_get_field( $p_issue_id, 'project_id' ) );
+ if ( !access_has_bug_level( $t_access, $p_issue_id, $t_user_id) ) {
+ return new soap_fault( 'Client', '', "User '$t_user_id' does not have access right to set status level." );
+ }
+
+ if ( !access_has_bug_level( config_get( 'update_bug_threshold' ), $p_issue_id, $t_user_id) ) {
+ return new soap_fault( 'Client', '', "User '$t_user_id' does not have access right to update bug." );
+ }
+
+ if ( isset( $p_note ) && is_array( $p_note ) && isset( $p_note['text'] ) ) {
+ if ( !access_has_bug_level( config_get( 'add_bugnote_threshold' ), $p_issue_id, $t_user_id ) ) {
+ return new soap_fault( 'Client', '', "User '$t_user_id' does not have access right to add notes to this issue." );
+ }
+
+ $t_note_text = $p_note['text'];
+
+ if ( isset( $p_note['view_state'] ) ) {
+ $t_view_state = $p_note['view_state'];
+ } else {
+ $t_view_state = config_get( 'default_bug_view_status' );
+ }
+
+ } else {
+ $t_note_text = '';
+ $t_view_state = config_get( 'default_bug_view_status' );
+ }
+ $t_view_state_id = mci_get_enum_id_from_objectref( 'view_state', $t_view_state );
+
+ switch ( $p_status_id ) {
+ case CLOSED:
+ bug_close( $p_issue_id, $t_note_text, $t_view_state_id == VS_PRIVATE, '0:00' );
+ break;
+
+ case config_get( 'bug_resolved_status_threshold' ):
+ bug_resolve( $p_issue_id, $p_resolution_id, '', $t_note_text, $p_duplicate_id,
+ bug_get_field( $p_issue_id, 'handler_id' ), $t_view_state_id == VS_PRIVATE, '0:00' );
+ break;
+
+ case config_get( 'bug_reopen_status' ):
+ if ( bug_get_field( $p_issue_id, 'status' ) >= config_get( 'bug_resolved_status_threshold' ) ) {
+ bug_reopen( $p_issue_id, $t_note_text, '0:00', $t_view_state_id == VS_PRIVATE );
+ }
+ // Else fall through to default.
+
+ default:
+ bug_set_field( $p_issue_id, 'status', $p_status_id );
+ if ( !is_blank( $t_note_text ) ) {
+ bugnote_add( $p_issue_id, $t_note_text, '0:00', $t_view_state_id == VS_PRIVATE, '', $t_user_id );
+ }
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * Get the history of an issue.
+ *
+ * @param integer $p_issue_id The id of the issue to retrieve the history for.
+ * @param integer $p_user_id The id of the user requesting the history.
+ * @return Array that represents an HistoryData structure
+ */
+ function mci_issue_get_history( $p_issue_id, $p_user_id ) {
+ $t_histories = array();
+
+ if ( access_has_bug_level( config_get( 'view_history_threshold' ), $p_issue_id, $p_user_id ) ) {
+ $t_src_histories = history_get_raw_events_array( $p_issue_id );
+ foreach( $t_src_histories as $t_history_row) {
+ $t_history = history_localize_item( $t_history_row['field'], $t_history_row['type'], $t_history_row['old_value'], $t_history_row['new_value'] );
+ $t_history['date_modified'] = timestamp_to_iso8601( $t_history_row['date'] );
+ $t_history['user'] = mci_account_get_array_by_id( $t_history_row['userid'] );
+
+ $t_histories[] = $t_history;
+ }
+ }
+
+ return $t_histories;
+ }
+
?>
diff -ur /Users/daniel/Downloads/mantis-1.1.1/core/filter_api.php ./core/filter_api.php
--- /Users/daniel/Downloads/mantis-1.1.1/core/filter_api.php 2008-01-04 22:58:22.000000000 -0800
+++ ./core/filter_api.php 2008-03-29 14:49:43.000000000 -0700
@@ -71,6 +71,9 @@
define( 'FILTER_PROPERTY_RELATIONSHIP_BUG', 'relationship_bug' );
define( 'FILTER_PROPERTY_TAG_STRING', 'tag_string' );
define( 'FILTER_PROPERTY_TAG_SELECT', 'tag_select' );
+ define( 'FILTER_PROPERTY_SHOW_ISSUES', 'show_issues' );
+ define( 'FILTER_PROPERTY_HIDE_ISSUES', 'hide_issues' );
+ define( 'FILTER_PROPERTY_LAST_UPDATED', 'last_updated' );
###########################################################################
# Filter Query Parameter Names
@@ -113,6 +116,9 @@
define( 'FILTER_SEARCH_RELATIONSHIP_BUG', 'relationship_bug' );
define( 'FILTER_SEARCH_TAG_STRING', 'tag_string' );
define( 'FILTER_SEARCH_TAG_SELECT', 'tag_select' );
+ define( 'FILTER_SEARCH_SHOW_ISSUES', 'show_issues' );
+ define( 'FILTER_SEARCH_HIDE_ISSUES', 'hide_issues' );
+ define( 'FILTER_SEARCH_LAST_UPDATED', 'last_updated' );
# Checks the supplied value to see if it is an ANY value.
# $p_field_value - The value to check.
@@ -331,6 +337,18 @@
$t_query[] = filter_encode_field_and_value( FILTER_SEARCH_TAG_SELECT, $p_custom_filter[FILTER_PROPERTY_TAG_SELECT] );
}
+ if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_SHOW_ISSUES] ) ) {
+ $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_SHOW_ISSUES, $p_custom_filter[FILTER_PROPERTY_SHOW_ISSUES] );
+ }
+
+ if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_HIDE_ISSUES] ) ) {
+ $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_HIDE_ISSUES, $p_custom_filter[FILTER_PROPERTY_HIDE_ISSUES] );
+ }
+
+ if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_LAST_UPDATED] ) ) {
+ $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_LAST_UPDATED, $p_custom_filter[FILTER_PROPERTY_LAST_UPDATED] );
+ }
+
if ( isset( $p_custom_filter['custom_fields'] ) ) {
foreach( $p_custom_filter['custom_fields'] as $t_custom_field_id => $t_custom_field_values ) {
if ( !filter_str_field_is_any( $t_custom_field_values ) ) {
@@ -1140,6 +1158,39 @@
}
}
+ # show issues greater than or equal to...
+ $t_any_found = false;
+ $c_issue_id = $t_filter['show_issues'];
+ if ( 0 == $c_issue_id ) {
+ $t_any_found = true;
+ }
+ if ( !$t_any_found ) {
+ $t_show_issues = db_prepare_int( $c_issue_id );
+ array_push( $t_where_clauses, "($t_bug_table.id>='$t_show_issues')" );
+ }
+
+ # hide issues greater than or equal to (show less than)...
+ $t_any_found = false;
+ $c_issue_id = $t_filter['hide_issues'];
+ if ( 0 == $c_issue_id ) {
+ $t_any_found = true;
+ }
+ if ( !$t_any_found ) {
+ $t_hide_issues = db_prepare_int( $c_issue_id );
+ array_push( $t_where_clauses, "($t_bug_table.id<'$t_hide_issues')" );
+ }
+
+ # show issues with a updated date greater than...
+ $t_any_found = false;
+ $c_last_updated = $t_filter['last_updated'];
+ if ( 0 == $c_last_updated ) {
+ $t_any_found = true;
+ }
+ if ( !$t_any_found ) {
+ $t_last_updated = db_date( $c_last_updated );
+ array_push( $t_where_clauses, "($t_bug_table.last_updated>'$t_last_updated')" );
+ }
+
# custom field filters
if( ON == config_get( 'filter_by_custom_fields' ) ) {
# custom field filtering
@@ -3123,6 +3174,15 @@
if ( !isset( $p_filter_arr['tag_select'] ) ) {
$p_filter_arr['tag_select'] = gpc_get_string( 'tag_select', '' );
}
+ if ( !isset( $p_filter_arr['show_issues'] ) ) {
+ $p_filter_arr['show_issues'] = gpc_get_int( 'show_issues', 0 );
+ }
+ if ( !isset( $p_filter_arr['hide_issues'] ) ) {
+ $p_filter_arr['hide_issues'] = gpc_get_int( 'hide_issues', 0 );
+ }
+ if ( !isset( $p_filter_arr['last_updated'] ) ) {
+ $p_filter_arr['last_updated'] = gpc_get_int( 'last_updated', 0 );
+ }
$t_custom_fields = custom_field_get_ids(); # @@@ (thraxisp) This should really be the linked ids, but we don't know the project
$f_custom_fields_data = array();
| ||||
|
Reminder sent to: daryn Daryn, Could you have a look at the filter_api.php changes component of this whilst working on filter api? Paul |
|
|
Not to be a pest, but ping? If there is anything I can do to help move this along I would be happy to. Update patch, add features, make changes, etc. ? |
|
|
It would be helpful for you (to keep your changes updated) and for us if you can provide a git repository with your changes. See the link below for details: |
|
|
Never really used git before, though I have used cvs and svn quite a bit so I know the concepts, but just to clarify: |
|
|
this is a cool idea functionality to Soap API :-) |
|