View Issue Details

IDProjectCategoryView StatusLast Update
0012009mantisbtapi soappublic2018-05-20 06:58
Reporterdominik Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status feedbackResolutionopen 
Product Version1.2.1 
Summary0012009: Some improvements in SOAP API
Description

Attached a patch file with some SOAP API improvements... Unfortunately I had private files in theses commits so I had to manually remove files -> if you have problems to apply the patch please let me know (or if you know how I can exlude files when creating patches please let me know as well ;-))

Improvements done:

translate_category_name_to_id(): check for category added - this allows to submit issues (mc_issue_add()) with category_id instead of category

Fixed bug with access rights when adding issues with target_versions

Added correction of time zone for due dates as config switch (in my installation the "correction" actually lead to wrong due dates)...

Tagspatch
Attached Files
2010-06-08_soap_improvements.patch (5,333 bytes)   
From ecab64156faf072cb5b5f859f031ef2773c79543 Mon Sep 17 00:00:00 2001
From: Dominik Blunk <dominik@blunk.ch>
Date: Thu, 27 May 2010 11:44:33 +0200
Subject: [PATCH 03/19] SOAP Improvements: check for category id added and fix for access right (field target_version)

---
 api/soap/mc_api.php       |    6 ++++++
 api/soap/mc_issue_api.php |   12 ++++++++----
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/api/soap/mc_api.php b/api/soap/mc_api.php
index bcd8cc4..6d795ad 100644
--- a/api/soap/mc_api.php
+++ b/api/soap/mc_api.php
@@ -228,6 +228,12 @@ function translate_category_name_to_id( $p_category_name, $p_project_id ) {
 			return $t_category_row['id'];
 		}
 	}
+	// 2010-05-27 Dominik: no category found by name - check if we have already a valid category id given
+	foreach( $t_cat_array as $t_category_row ) {
+		if( $t_category_row['id'] == $p_category_name ) {
+			return $t_category_row['id'];
+		}
+	}
 	return 0;
 }
 
diff --git a/api/soap/mc_issue_api.php b/api/soap/mc_issue_api.php
index f62a925..6ddb903 100644
--- a/api/soap/mc_issue_api.php
+++ b/api/soap/mc_issue_api.php
@@ -450,9 +450,9 @@ function mc_issue_add( $p_username, $p_password, $p_issue ) {
 	}
 
 	$t_project = $p_issue['project'];
-
+	
 	$t_project_id = mci_get_project_id( $t_project );
-
+	
 	if( !mci_has_readwrite_access( $t_user_id, $t_project_id ) ) {
 		return mci_soap_fault_access_denied( $t_user_id );
 	}
@@ -567,8 +567,12 @@ function mc_issue_add( $p_username, $p_password, $p_issue ) {
 	} else {
 		$t_bug_data->due_date = date_get_null();
 	}
-
+	
 	if( access_has_project_level( config_get( 'roadmap_update_threshold' ), $t_bug_data->project_id, $t_user_id ) ) {
+		$GLOBALS['msg'][] = sprintf('$t_bug_data->target_version', '');
+		// 2010-05-27 Dominik: because access rights for target version are checked again in BugData->__set() but no
+		// current project id may be determined via helper_get_current_project() it is required to set the project id here
+		$GLOBALS['g_project_override'] = $t_bug_data->project_id;
 		$t_bug_data->target_version = isset( $p_issue['target_version'] ) ? $p_issue['target_version'] : '';
 	}
 
@@ -579,7 +583,7 @@ function mc_issue_add( $p_username, $p_password, $p_issue ) {
 	$t_bug_data->description = $t_description;
 	$t_bug_data->steps_to_reproduce = isset( $p_issue['steps_to_reproduce'] ) ? $p_issue['steps_to_reproduce'] : '';
 	$t_bug_data->additional_information = isset( $p_issue['additional_information'] ) ? $p_issue['additional_information'] : '';
-
+	
 	# submit the issue
 	$t_issue_id = $t_bug_data->create();
 
-- 
1.7.0.2.msysgit.0

From 0095c702f977a510ed3426b9e87dedf8c565ac97 Mon Sep 17 00:00:00 2001
From: Dominik Blunk <dominik@blunk.ch>
Date: Thu, 27 May 2010 16:34:51 +0200
Subject: [PATCH 04/19] Improvements in handling due date

---
 api/soap/mc_issue_api.php |   29 +++++++++++++++++++----------
 config_inc.php            |   15 +++++++++++----
 2 files changed, 30 insertions(+), 14 deletions(-)

diff --git a/api/soap/mc_issue_api.php b/api/soap/mc_issue_api.php
index 6ddb903..8eb4b9a 100644
--- a/api/soap/mc_issue_api.php
+++ b/api/soap/mc_issue_api.php
@@ -569,7 +569,6 @@ function mc_issue_add( $p_username, $p_password, $p_issue ) {
 	}
 	
 	if( access_has_project_level( config_get( 'roadmap_update_threshold' ), $t_bug_data->project_id, $t_user_id ) ) {
-		$GLOBALS['msg'][] = sprintf('$t_bug_data->target_version', '');
 		// 2010-05-27 Dominik: because access rights for target version are checked again in BugData->__set() but no
 		// current project id may be determined via helper_get_current_project() it is required to set the project id here
 		$GLOBALS['g_project_override'] = $t_bug_data->project_id;
@@ -1089,15 +1088,25 @@ function mc_issue_checkin( $p_username, $p_password, $p_issue_id, $p_comment, $p
  * @return int the timestamp
  */
 function mci_iso8601_to_timestamp( $p_date ) {
-	
-	// retrieve the offset, seems to be lost by nusoap
-	$t_utc_date = new DateTime( $p_date, new DateTimeZone( 'UTC' ) );
-	$t_timezone = new DateTimeZone( date_default_timezone_get() );
-	$t_offset = $t_timezone->getOffset( $t_utc_date ); 
-	
-	$t_raw_timestamp = iso8601_to_timestamp( $p_date );
-	
-	return $t_raw_timestamp - $t_offset;
+	// 2010-05-27 Dominik: if p_date is empty we return default null date (otherwise we'll get current date)
+	if ( empty($p_date) ) {
+		return date_get_null();
+	}
+	// 2010-05-27 Dominik: correction of time zone configurable
+	if ( config_get( 'due_date_timezone_correction' ) ) {
+		// retrieve the offset, seems to be lost by nusoap
+		$t_utc_date = new DateTime( $p_date, new DateTimeZone( 'UTC' ) );
+		$t_timezone = new DateTimeZone( date_default_timezone_get() );
+		$t_offset = $t_timezone->getOffset( $t_utc_date );
+		$t_raw_timestamp = iso8601_to_timestamp( $p_date );
+		$t_final_timestamp = $t_raw_timestamp - $t_offset;
+	}
+	else {
+		$t_final_timestamp = new DateTime( $p_date );
+		$t_final_timestamp = $t_final_timestamp->format('U');
+	}
+	// 2010-05-27 Dominik: if timestamp is <= 0 we return default null date (otherwise we'll get unix zero date which is 1970-01-01)
+	return $t_final_timestamp <= 0 ? date_get_null() : $t_final_timestamp;
 	
 }
2010-06-09_relationships_for_mc_issue_add.patch (1,101 bytes)   
From 675bdf31c79bc85d3c448cfc9e1632695ba1a2bd Mon Sep 17 00:00:00 2001
From: Dominik Blunk <dominik@blunk.ch>
Date: Tue, 1 Jun 2010 12:40:31 +0200
Subject: [PATCH 07/19] Added relationships to mc_issue_add()

---
 api/soap/mc_issue_api.php |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/api/soap/mc_issue_api.php b/api/soap/mc_issue_api.php
index 8eb4b9a..b4d25d1 100644
--- a/api/soap/mc_issue_api.php
+++ b/api/soap/mc_issue_api.php
@@ -587,6 +587,13 @@ function mc_issue_add( $p_username, $p_password, $p_issue ) {
 	$t_issue_id = $t_bug_data->create();
 
 	mci_issue_set_custom_fields( $t_issue_id, $p_issue['custom_fields'], false );
+	
+	// 2010-05-30 Dominik: add relationship
+	if ( is_array( $p_issue['relationships'] ) && count( $p_issue['relationships'] ) > 0 ) {
+		foreach ($p_issue['relationships'] as &$relationship) {
+			mc_issue_relationship_add( $p_username, $p_password, $t_issue_id, $relationship );
+		}
+	}
 
 	if( isset( $t_notes ) && is_array( $t_notes ) ) {
 		foreach( $t_notes as $t_note ) {
-- 
1.7.0.2.msysgit.0

Activities

rombert

rombert

2010-06-08 12:12

reporter   ~0025762

Thanks!

I'll take a look during the next week.

dominik

dominik

2010-06-09 02:11

reporter   ~0025771

Just added another small patch which allows to submit relationships when calling mc_issue_add() (no need to add relationships separately afterwards)...

Thanks for looking into the code!

rombert

rombert

2010-08-16 17:29

reporter   ~0026341

Hi Dominik,

Sorry for the late reply, here are my comments:

  1. Relationship patch:
  • the comment is not needed, it should be clear what is going on;
  • it would be nice if you could add a unit test to verify the submission of categories; have a look at test/soap/IssueAddTest.php .
  1. SOAP improvements patch:
  • please make sure not to have any whitespace changes;
  • do not use globals, they introduce unnecessary coupling;
  • split the patch into 2 parts: access rights checks, timezone fixes;
  • please provide tests for both fixes, modeled after the ones in test/soap.
  • I'm curious about the motivation behind the timezone fixes, please provide more context - ideally in the patch itself ( commit comment ).

Please reply with any questions you might have.

Thanks,

Robert

atrol

atrol

2018-05-20 06:58

developer   ~0059872

Unassigned after a long time of inactivity.