View Issue Details

IDProjectCategoryView StatusLast Update
0004270mantisbtbugtrackerpublic2004-08-29 01:53
ReporterWandererAssigned Tothraxisp  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
PlatformAnyOSAnyOS VersionAny
Product Versiongit trunk 
Fixed in Version0.19.0rc1 
Summary0004270: Change status in mass treatment ignore defined workflow rules
Description

Update status on view_all allow assign to issue any status and jump over workflow

Steps To Reproduce

Define workflow, and use "Update status" from combo

TagsNo tags attached.
Attached Files
group.diff (7,172 bytes)   
Index: bug_actiongroup.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_actiongroup.php,v
retrieving revision 1.33
diff -u -r1.33 bug_actiongroup.php
--- bug_actiongroup.php	5 Aug 2004 10:22:38 -0000	1.33
+++ bug_actiongroup.php	8 Aug 2004 14:32:10 -0000
@@ -28,14 +28,21 @@
 
 	foreach( $f_bug_arr as $t_bug_id ) {
 		bug_ensure_exists( $t_bug_id );
+		$t_status = bug_get_field( $t_bug_id, 'status' );
 
 		switch ( $f_action ) {
 
 		case 'CLOSE':
-			if ( access_can_close_bug( $t_bug_id ) ) {
+			if ( access_can_close_bug( $t_bug_id ) &&
+					( $t_status < CLOSED ) && 
+					bug_check_workflow($t_status, CLOSED) ) {
 				bug_close( $t_bug_id );
 			} else {
-				$t_failed_ids[] = $t_bug_id;
+				if ( ! access_can_close_bug( $t_bug_id ) ) {
+					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
+				}else{
+					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_status' );
+				}
 			}
 			break;
 
@@ -43,7 +50,7 @@
 			if ( access_has_bug_level( config_get( 'delete_bug_threshold' ), $t_bug_id ) ) {
 				bug_delete( $t_bug_id );
 			} else {
-				$t_failed_ids[] = $t_bug_id;
+				$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
 			}
 			break;
 
@@ -52,7 +59,7 @@
 				$f_project_id = gpc_get_int( 'project_id' );
 				bug_set_field( $t_bug_id, 'project_id', $f_project_id );
 			} else {
-				$t_failed_ids[] = $t_bug_id;
+				$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
 			}
 			break;
 
@@ -62,28 +69,46 @@
 			if ( access_has_project_level( config_get( 'report_bug_threshold' ), $f_project_id ) ) {
 				bug_copy( $t_bug_id, $f_project_id, true, true, true, true, true, true );
 			} else {
-				$t_failed_ids[] = $t_bug_id;
+				$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
 			}
 			break;
 
 		case 'ASSIGN':
-			if ( access_has_bug_level( config_get( 'update_bug_threshold' ), $t_bug_id ) ) {
-				// @@@ Check that $f_assign has access to handle a bug.
-				$f_assign = gpc_get_int( 'assign' );
+			$f_assign = gpc_get_int( 'assign' );
+			if ( ON == config_get( 'auto_set_status_to_assigned' ) ) {
+				$t_ass_val = config_get( 'bug_assigned_status' );
+			} else {
+				$t_ass_val = $t_status;
+			}
+			if ( access_has_bug_level( config_get( 'update_bug_threshold' ), $t_bug_id ) &&
+					access_has_bug_level( config_get( 'handle_bug_threshold' ), $t_bug_id, $f_assign ) &&
+					bug_check_workflow($t_status, $t_ass_val )	) {
 				bug_assign( $t_bug_id, $f_assign );
 			} else {
-				$t_failed_ids[] = $t_bug_id;
+				if ( bug_check_workflow($t_status, $t_ass_val ) ) {
+					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
+				} else {
+					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_status' );
+				}
 			}
 			break;
 
 		case 'RESOLVE':
+			$t_resolved_status = config_get( 'bug_resolved_status_threshold' );
 			if ( access_has_bug_level( config_get( 'update_bug_threshold' ), $t_bug_id ) &&
-				 access_has_bug_level( config_get( 'handle_bug_threshold' ), $t_bug_id )) {
+				 access_has_bug_level( config_get( 'handle_bug_threshold' ), $t_bug_id ) &&
+				 		( $t_status < $t_resolved_status ) && 
+						bug_check_workflow($t_status, $t_resolved_status ) ) {
 				$f_resolution = gpc_get_int( 'resolution' );
 				$f_fixed_in_version = gpc_get_string( 'fixed_in_version', '' );
 				bug_resolve( $t_bug_id, $f_resolution, $f_fixed_in_version );
 			} else {
-				$t_failed_ids[] = $t_bug_id;
+				if ( ( $t_status < $t_resolved_status ) && 
+						bug_check_workflow($t_status, $t_resolved_status ) ) {
+					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
+				} else {
+					$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_status' );
+				}
 			}
 			break;
 
@@ -92,7 +117,7 @@
 				$f_priority = gpc_get_int( 'priority' );
 				bug_set_field( $t_bug_id, 'priority', $f_priority );
 			} else {
-				$t_failed_ids[] = $t_bug_id;
+				$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
 			}
 			break;
 
@@ -101,7 +126,7 @@
 				$f_status = gpc_get_int( 'status' );
 				bug_set_field( $t_bug_id, 'status', $f_status );
 			} else {
-				$t_failed_ids[] = $t_bug_id;
+				$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
 			}
 			break;
 
@@ -110,7 +135,7 @@
 				$f_view_status = gpc_get_int( 'view_status' );
 				bug_set_field( $t_bug_id, 'view_state', $f_view_status );
 			} else {
-				$t_failed_ids[] = $t_bug_id;
+				$t_failed_ids[$t_bug_id] = lang_get( 'bug_actiongroup_access' );
 			}
 			break;
 
@@ -125,13 +150,10 @@
 		html_page_top1();
 		html_page_top2();
 		
-		$t_links = array();		
-		foreach( $t_failed_ids as $t_id ) {
-			$t_links[] = string_get_bug_view_link( $t_id );
-		}
-		
 		echo '<div align="center">';
-		echo lang_get( 'bug_actiongroup_failed' ) . implode( ', ', $t_links ) . '<br />';
+		foreach( $t_failed_ids as $t_id => $t_reason ) {
+			printf("<p> %s: %s </p>\n", string_get_bug_view_link( $t_id ), $t_reason);
+		}
 		print_bracket_link( $t_redirect_url, lang_get( 'proceed' ) );
 		echo '</div>';
 		
Index: bug_actiongroup_page.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_actiongroup_page.php,v
retrieving revision 1.40
diff -u -r1.40 bug_actiongroup_page.php
--- bug_actiongroup_page.php	24 Jul 2004 11:48:33 -0000	1.40
+++ bug_actiongroup_page.php	8 Aug 2004 14:32:11 -0000
@@ -153,6 +153,12 @@
 </tr>
 	<?php
 	if ( isset( $t_question_title2 ) ) {
+		switch ( $f_action ) {
+			case 'RESOLVE':
+				$t_show_version = ( ON == config_get( 'show_product_version' ) ) 
+					|| ( ( AUTO == config_get( 'show_product_version' ) ) 
+								&& ( count( version_get_all_rows( $t_bug->project_id ) ) > 0 ) );
+				if ( $t_show_version ) { 
 	?>
 		<tr class="row-2">
 			<td class="category">
@@ -160,17 +166,14 @@
 			</td>
 			<td>
 				<select name="<?php echo $t_form2 ?>">
-					<?php
-						switch ( $f_action ) {
-							case 'RESOLVE':
-								print_version_option_list( '', null, VERSION_ALL );
-								break;
-						}
-					?>
+					<?php print_version_option_list( '', null, VERSION_ALL );?>
 				</select>
 			</td>
 		</tr>
 	<?php
+				}
+				break;
+		}			
 	}
 	?>
 <?php
Index: lang/strings_english.txt
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/lang/strings_english.txt,v
retrieving revision 1.197
diff -u -r1.197 strings_english.txt
--- lang/strings_english.txt	8 Aug 2004 11:39:15 -0000	1.197
+++ lang/strings_english.txt	8 Aug 2004 14:32:12 -0000
@@ -98,6 +98,8 @@
 
 # bug_actiongroup_page.php : mass treatment
 $s_bug_actiongroup_failed = 'You did not have appropriate permissions to perform that action on the following issues: ';
+$s_bug_actiongroup_access = 'You did not have appropriate permissions to perform that action.';
+$s_bug_actiongroup_status = 'This issue cannot be changed to the requested status';
 $s_close_bugs_conf_msg = 'Are you sure you wish to close these issues?';
 $s_delete_bugs_conf_msg = 'Are you sure you wish to delete these issues?';
 $s_move_bugs_conf_msg = 'Move issues to';
group.diff (7,172 bytes)   
group.tar.gz (14,039 bytes)

Relationships

related to 0003984 closedthraxisp Support definining and enforcing custom workflow 

Activities

vboctor

vboctor

2004-08-04 22:20

manager   ~0006646

When dealing with a group of issues, each issue may be in a different state and hence for some of the issues the new state may not be legal. I think we should probably apply the new status for the issues where it is legal and provide a summary at the end that new status has been applied to N out of M issues. Or just show operation successfull when the status was applied to all successfully.

What do you think?

thraxisp

thraxisp

2004-08-05 16:33

reporter   ~0006665

Last edited: 2004-08-05 17:29

The current implementation trys to apply the changes selected, then shows an error for those that fail (with a link to the issue). The feedback may need to be tuned a bit as it only gives one reason for all of the failures.

We can expand this to one line per failure with a more detailed reason. For rc1, I can easily add the workflow testing (already coded). I can add the reasons before final release.

edited on: 08-05-04 17:29

Wanderer

Wanderer

2004-08-05 19:14

developer   ~0006670

thraxisp, you think, that Mantis work this way... I SEE, that I can assign any status (if mass treatment applied to single message, no test for bundle) without errors and warnings. Try my demo :-)

thraxisp

thraxisp

2004-08-05 21:22

reporter   ~0006673

The current implementation only checks for access level before trying to do the change of status.

The defaults allow an UPDATER to change and close a bug. You can't really see any failures. If you chage the close threshold to MANAGER, you should see errors.

Wanderer

Wanderer

2004-08-06 01:00

developer   ~0006676

I spoke not about access rights - about workflow
I my workflow there are no ways return isssue from any status to new (as example) - in mass treatment no WF-rules applied to old->new status movement

thraxisp

thraxisp

2004-08-06 11:32

reporter   ~0006716

You are correct. I have made half of the changes required. I need input on how to present the failures. Currently, the message is "You did not have appropriate permissions to perform that action on the following issues: xxx, xxx, xxx". I'd like to change it to:


xxx - You do not have the appropriate permission to make this change
yyy - This status transition is not valid
zzz - etc...

Comments?

thraxisp

thraxisp

2004-08-08 09:34

reporter   ~0006812

Diffs and modules attached. I can commit them if you agree.

Wanderer

Wanderer

2004-08-10 03:46

developer   ~0006901

Yes, I see at at and can complaint about nothing (at least - yet)

jlatour

jlatour

2004-08-10 08:39

reporter   ~0006911

Yes, looks good. Go ahead and commit.

Sorry for the late reply, I somehow missed this issue.

thraxisp

thraxisp

2004-08-10 09:33

reporter   ~0006912

fixed in cvs