Page 1 of 1

Calculate value for custom field on updating issue

Posted: 29 Jun 2020, 20:02
by pollevr
Hi all,

in Mantis v. 2.24.1 I'm trying to write a plugin for setting a value calculated automatically, based on the values of other fields or custom fields.

In my plugin there are following code:

Code: Select all

class MyPluginPlugin extends MantisPlugin {
	function register() {
		...
	}
	function hooks(){
		return array(
			'EVENT_MYPLUGIN_UPDATE'      => 'update',
		);
	}
	function events() {
		return array(
			'EVENT_MYPLUGIN_UPDATE'      => EVENT_UPDATE_BUG,
		);
	}
	function update( $p_issue_id, $p_bug_data, $p_bugnote_text ) {
		$t_id = custom_field_get_id_from_name('<my_custom_field_name>');
		custom_field_set_value( $t_id , $p_issue_id, <my_new_value>); 
		return $p_bug_data;
	}
	...
}
When I update an issue I'll expect that the custom field <my_custom_field_name> will save with the <my_new_value>.

Why not?


Thanks all,
Cristian

Re: Calculate value for custom field on updating issue

Posted: 08 Jul 2020, 18:10
by Starbuck
EVENT_UPDATE_BUG (Execute) : "This event allows plugins to perform post-processing of the bug data structure after being updated."
-- https://www.mantisbt.org/docs/master/en ... gle-plain/

Re: Calculate value for custom field on updating issue

Posted: 09 Jul 2020, 15:43
by pollevr
Sure,

so I'm expect that before it saves the record and after call my custom function update, so I get the old value and I can put the new value.

No?

Re: Calculate value for custom field on updating issue

Posted: 09 Jul 2020, 21:06
by Starbuck
Yes ... if I understand you correctly. From what I understand about what you're doing, you need the events for after user data has been entered, and before it has been posted to the database. See details under:
https://www.mantisbt.org/docs/master/en ... ction.html

You are handling this event:
EVENT_UPDATE_BUG (Execute)
This event allows plugins to perform post-processing of the bug data structure after being updated.
I think you want these events:
EVENT_REPORT_BUG_DATA (Chain)
This event allows plugins to perform pre-processing of the new bug data structure after being reported from the user, but before the data is saved to the database. At this point, the issue ID is not yet known, as the data has not yet been persisted.

EVENT_UPDATE_BUG_DATA (Chain)
This event allows plugins to perform pre-processing of the updated bug data structure after being modified by the user, but before being saved to the database.
Then (I believe) your custom field data will be saved with the actual bug item.

Also look at the type of the event : Execute or Chain. The parameters and return values are different.

For EVENT_UPDATE_BUG, you don't get the ID, bug data, and note text. The doc says
Parameters
<Complex>: Original bug data structure (see core/bug_api.php)
<Complex>: Updated bug data structure (see core/bug_api.php)
And be sure that the data you're saving matches the specs for the custom field. For example, don't allow saving a category that isn't listed in =categories. See chapter 7 of the developer's guide.

In summary:

Use the right event for your purpose.
Check the specs for the inbound/outbound parameters.

Does that help?

Re: Calculate value for custom field on updating issue

Posted: 10 Jul 2020, 17:40
by pollevr
Hi Starbuck,

thanks for your patience.

Your logical reasoning is correct, but my problem is technical.

If my code is:

Code: Select all

	function init() {
		plugin_event_hook( 'EVENT_UPDATE_BUG_DATA', 'updateBugData' );
	}

	function updateBugData( $p_bug_data_updated, $p_bug_data_original ) {
		error_log("^^^original summary:".$p_bug_data_original->summary."^^^", 0);
		error_log("^^^updated summary:".$p_bug_data_updated->summary."^^^", 0);
		return $p_bug_data_updated;
	}
The first error_log write a blank value (and not the new value of summary field as I expeted), instead the second error_log write the new value of summary field (and not the original value), so I don't understand my mistake and I'm confused.

What's wrong?
Why $p_bug_data_updated->summary is blank or null?

Re: Calculate value for custom field on updating issue

Posted: 11 Jul 2020, 16:03
by pollevr
Hi Starbuck,

now I understood, and my code is:

Code: Select all

	function updateBugData( $p_event, $p_bug_data_updated, $p_bug_data_original ) {
		var_dump($p_event);  //print the EVENT
		var_dump($p_bug_data_updated); //print the NEW data structure
		var_dump($p_bug_data_original); //print the ORIGINAL data structure
		...
		return $p_bug_data_updated;
	}
Now my target is modify and update some custom fields, but here I don't see any custom field... how can I do this?

I did this:

Code: Select all

	function updateBugData( $p_event, $p_bug_data_updated, $p_bug_data_original ) {
		...
		$bugDataId = $p_bug_data_updated->id;
		$myCustomVariable = <new_custom_value>;
		$myCustomFieldId = custom_field_get_id_from_name('<name_of_my_custom_field');
		custom_field_set_value( $mycustomFieldId , $bugDataId, $myCustomVariable);
		...
	}
But the new custom value not saved.

Thank you,
Cristian

Re: Calculate value for custom field on updating issue

Posted: 11 Jul 2020, 16:50
by pollevr
Found it!

For custom fields I call a new function for event EVENT_UPDATE_BUG, so the custom fields will save.

Thank you for your support.


Bye,
Cristian

Re: Calculate value for custom field on updating issue

Posted: 12 Feb 2022, 23:23
by tet-com@freemail.hu
Hi Christian, where can I found and download these plugin?