View Issue Details

IDProjectCategoryView StatusLast Update
0006830mantisbtcustomizationpublic2019-05-14 09:42
ReporterDarkness Assigned Tovboctor  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version1.0.0rc5 
Fixed in Version1.1.0a3 
Summary0006830: custom_function_override_issue_delete_notify and custom_function_override_issue_update_notify are not being triggered
Description

When I create the following functions in custom_functions_inc.php:
custom_function_override_issue_delete_notify
custom_function_override_issue_update_notify
(and custom_function_override_issue_create_notify),

the first 2 are never called, I verified it by putting
die("X" . $p_issue_id . "X");
in this function

Additional Information

FIX:
bug_actiongroup.php:78 after bug_delete function add:
helper_call_custom_function( 'issue_delete_notify', array( $t_bug_id ) );

bugnote_add.php: 49 before print_successful_redirect_to_bug add:
helper_call_custom_function( 'issue_update_notify', array( $f_bug_id ) );

I first tried adding the fix for delete to bug_delete.php but that does not seem to work.

TagsNo tags attached.

Relationships

related to 0025757 acknowledged Custom function on Move ( bug action group ) 

Activities

Darkness

Darkness

2006-03-09 10:15

reporter   ~0012316

sorry, category should be customization

Darkness

Darkness

2006-03-13 06:52

reporter   ~0012327

after taking a closer look, the fix for custom_function_override_issue_delete_notify is not good. It should come before the bug_delete command, otherwise a non existant bug_id will be passed to the custom function.

liphos

liphos

2006-03-13 12:16

reporter   ~0012329

I also stumbled across this problem today, while trying to integrate Mantis with another system via e-mail.

IMHO helper_call_custom_function( 'issue_update_notify', array( $f_bug_id ) );
should be in the if-clause after the call to bugnote_add(..) so the custom functions only gets called if a bug note actually got added.

Thanks for the hint, anyway :)

Darkness

Darkness

2006-03-13 13:22

reporter   ~0012330

you are absolutely right.

liphos

liphos

2006-03-15 04:38

reporter   ~0012337

On second thought, it probably would make more sense to call custom function hooks directly from the Mantis API instead of the view pages, i.e. core/bug_api.php and core/bugnote_api.php rather than bug_add/_update/etc.

Maybe bugnotes should have their own verify and update hooks as well.

2007-02-06 23:18

 

6830.diff (9,175 bytes)   
Index: bug_actiongroup.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_actiongroup.php,v
retrieving revision 1.49
diff -u -r1.49 bug_actiongroup.php
--- bug_actiongroup.php	16 Dec 2006 20:12:55 -0000	1.49
+++ bug_actiongroup.php	7 Feb 2007 05:15:20 -0000
@@ -62,7 +62,10 @@
 			if ( access_can_close_bug( $t_bug_id ) &&
 					( $t_status < CLOSED ) &&
 					bug_check_workflow($t_status, CLOSED) ) {
+
+				# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $f_bug_id, $t_bug_data, $f_bugnote_text ) );
 				bug_close( $t_bug_id );
+				helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 			} else {
 				if ( ! access_can_close_bug( $t_bug_id ) ) {
 					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
@@ -82,8 +85,10 @@
 
 		case 'MOVE':
 			if ( access_has_bug_level( config_get( 'move_bug_threshold' ), $t_bug_id ) ) {
+				# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) );
 				$f_project_id = gpc_get_int( 'project_id' );
 				bug_set_field( $t_bug_id, 'project_id', $f_project_id );
+				helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 			} else {
 				$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
 			}
@@ -112,7 +117,9 @@
 			if ( access_has_bug_level( $t_threshold , $t_bug_id, $f_assign ) &&
 				 access_has_bug_level( config_get( 'update_bug_assign_threshold', config_get( 'update_bug_threshold' ) ), $t_bug_id ) &&
 					bug_check_workflow($t_status, $t_assign_status )	) {
+				# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) );
 				bug_assign( $t_bug_id, $f_assign );
+				helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 			} else {
 				if ( bug_check_workflow($t_status, $t_assign_status ) ) {
 					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
@@ -129,7 +136,9 @@
 						bug_check_workflow($t_status, $t_resolved_status ) ) {
 				$f_resolution = gpc_get_int( 'resolution' );
 				$f_fixed_in_version = gpc_get_string( 'fixed_in_version', '' );
+				# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) );
 				bug_resolve( $t_bug_id, $f_resolution, $f_fixed_in_version );
+				helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 			} else {
 				if ( ( $t_status < $t_resolved_status ) &&
 						bug_check_workflow($t_status, $t_resolved_status ) ) {
@@ -143,7 +152,9 @@
 		case 'UP_PRIOR':
 			if ( access_has_bug_level( config_get( 'update_bug_threshold' ), $t_bug_id ) ) {
 				$f_priority = gpc_get_int( 'priority' );
+				# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) );
 				bug_set_field( $t_bug_id, 'priority', $f_priority );
+				helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 			} else {
 				$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
 			}
@@ -154,7 +165,9 @@
 			$t_project = bug_get_field( $t_bug_id, 'project_id' );
 			if ( access_has_bug_level( access_get_status_threshold( $f_status, $t_project ), $t_bug_id ) ) {
 				if ( TRUE == bug_check_workflow($t_status, $f_status ) ) {
+					# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) );
 					bug_set_field( $t_bug_id, 'status', $f_status );
+					helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 				} else {
 					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_status' );
 				}
@@ -168,7 +181,9 @@
 			$t_project = bug_get_field( $t_bug_id, 'project_id' );
 			if ( access_has_bug_level( config_get( 'update_bug_threshold' ), $t_bug_id ) ) {
 				if ( category_exists( $t_project, $f_category ) ) {
+					# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) );
 					bug_set_field( $t_bug_id, 'category', $f_category );
+					helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 				} else {
 					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_category' );
 				}
@@ -183,7 +198,9 @@
 			
 			if ( access_has_bug_level( config_get( 'update_bug_threshold' ), $t_bug_id ) ) {
 				if ( version_exists( $t_project_id, $f_version ) ) {
+					# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) );
 					bug_set_field( $t_bug_id, 'fixed_in_version', $f_fixed_in_version );
+					helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 				} else {
 					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_failed' );
 				}
@@ -196,7 +213,9 @@
 
 			if ( access_has_bug_level( config_get( 'roadmap_view_threshold' ), $t_bug_id ) ) {
 				if ( version_exists( $t_project_id, $f_version ) ) {
+					# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) );
 					bug_set_field( $t_bug_id, 'target_version', $f_fixed_in_version );
+					helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 				} else {
 					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_failed' );
 				}
@@ -206,7 +225,9 @@
 		case 'VIEW_STATUS':
 			if ( access_has_bug_level( config_get( 'change_view_status_threshold' ), $t_bug_id ) ) {
 				$f_view_status = gpc_get_int( 'view_status' );
+				# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) );
 				bug_set_field( $t_bug_id, 'view_state', $f_view_status );
+				helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 			} else {
 				$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
 			}
@@ -216,7 +237,9 @@
 			if ( access_has_bug_level( config_get( 'set_bug_sticky_threshold' ), $t_bug_id ) ) {
 				$f_sticky = bug_get_field( $t_bug_id, 'sticky' );
 				// The new value is the inverted old value
+				# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) );
 				bug_set_field( $t_bug_id, 'sticky', intval( !$f_sticky ) );
+				helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 			} else {
 				$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
 			}
@@ -227,9 +250,11 @@
 				trigger_error( ERROR_GENERIC, ERROR );
 			}
 
+			# @@@ we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) );
 			$t_form_var = "custom_field_$f_custom_field_id";
 			$t_custom_field_value = gpc_get_custom_field( $t_form_var, $t_custom_field_def['type'], null );
 			custom_field_set_value( $f_custom_field_id, $t_bug_id, $t_custom_field_value );
+			helper_call_custom_function( 'issue_update_notify', array( $t_bug_id ) );
 			break;
 
 		default:
Index: bug_delete.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_delete.php,v
retrieving revision 1.40
diff -u -r1.40 bug_delete.php
--- bug_delete.php	25 Jul 2005 16:34:10 -0000	1.40
+++ bug_delete.php	7 Feb 2007 05:01:05 -0000
@@ -35,11 +35,7 @@
 
 	$t_bug = bug_get( $f_bug_id, true );
 
-	helper_call_custom_function( 'issue_delete_validate', array( $f_bug_id ) );
-
 	bug_delete( $f_bug_id );
 
-	helper_call_custom_function( 'issue_delete_notify', array( $f_bug_id ) );
-
 	print_successful_redirect( 'view_all_bug_page.php' );
 ?>
Index: core/bug_api.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/core/bug_api.php,v
retrieving revision 1.103
diff -u -r1.103 bug_api.php
--- core/bug_api.php	12 Dec 2006 18:26:29 -0000	1.103
+++ core/bug_api.php	7 Feb 2007 05:00:47 -0000
@@ -662,11 +662,19 @@
 		$t_bug_table		= config_get( 'mantis_bug_table' );
 		$t_bug_text_table	= config_get( 'mantis_bug_text_table' );
 
+		# call pre-deletion custom function
+		helper_call_custom_function( 'issue_delete_validate', array( $p_bug_id ) );
+
 		# log deletion of bug
 		history_log_event_special( $p_bug_id, BUG_DELETED, bug_format_id( $p_bug_id ) );
 
 		email_bug_deleted( $p_bug_id );
 
+		# call post-deletion custom function.  We call this here to allow the custom function to access the details of the bug before 
+		# they are deleted from the database given it's id.  The other option would be to move this to the end of the function and
+		# provide it with bug data rather than an id, but this will break backward compatibility.
+		helper_call_custom_function( 'issue_delete_notify', array( $f_bug_id ) );
+
 		# Unmonitor bug for all users
 		bug_unmonitor( $p_bug_id, null );
 
6830.diff (9,175 bytes)   
vboctor

vboctor

2007-02-06 23:26

manager   ~0014006

I've attached a patch that does the following:

  • Move the delete validate/notify inside the bug_api.php.
  • Call the delete notify while the bug details are still in the database.
  • Call update notify after changes done via the bug group actions.

Challenge:

  • A lot of the actions that we want to notify before and after are done via multiple API calls. What we need to do is to extend our APIs in a way where one call does the whole action and hence be able to move the calls within it. For example, when creating a bug, we call bug_create() and then set the custom fields after that.
  • Some APIs indicate the action to be done (e.g. bug_resolve()). In this case we don't have the bug data after the change (e.g. it should have status, fixed in, etc. modified).

More work to be done:

  • Make sure that MantisConnect also calls these notification events when appropriate.
  • Make sure the import scripts call these notification events when necessary.
  • Copy Issue should probably trigger the create bug notifications.

Please test the attached patch and let me know if you find issues with it. I didn't really test it yet. Also let me know if you think of other scenarios that are missing.

vboctor

vboctor

2007-02-19 23:25

manager   ~0014065

I will mark this issue as resolved. We can open new issues for any other changes that we decide to take further.

Related Changesets

MantisBT: master b828c85e

2007-02-20 05:24:15

vboctor

Details Diff
Fixed 0006830: custom_function_override_issue_delete_notify and custom_function_override_issue_update_notify are not being triggered.

git-svn-id: http://mantisbt.svn.sourceforge.net/svnroot/mantisbt/trunk@4275 <a class="text" href="/?p=mantisbt.git;a=object;h=f5dc347c">f5dc347c</a>-c33d-0410-90a0-b07cc1902cb9
Affected Issues
0006830
mod - bug_delete.php Diff File
mod - core/bug_api.php Diff File
mod - bug_actiongroup.php Diff File

Issue History

Date Modified Username Field Change
2006-03-09 10:13 Darkness New Issue
2006-03-09 10:15 Darkness Note Added: 0012316
2006-03-13 06:15 vboctor Category administration => customization
2006-03-13 06:52 Darkness Note Added: 0012327
2006-03-13 12:16 liphos Note Added: 0012329
2006-03-13 13:22 Darkness Note Added: 0012330
2006-03-15 04:38 liphos Note Added: 0012337
2007-02-06 23:18 vboctor File Added: 6830.diff
2007-02-06 23:26 vboctor Note Added: 0014006
2007-02-19 23:25 vboctor Status new => resolved
2007-02-19 23:25 vboctor Fixed in Version => 1.1.0a3
2007-02-19 23:25 vboctor Resolution open => fixed
2007-02-19 23:25 vboctor Assigned To => vboctor
2007-02-19 23:25 vboctor Note Added: 0014065
2007-05-08 03:43 vboctor Status resolved => closed
2019-05-14 09:39 dregad Changeset attached => MantisBT master b828c85e
2019-05-14 09:42 dregad Relationship added related to 0025757