View Issue Details

IDProjectCategoryView StatusLast Update
0009301mantisbtfilterspublic2017-01-31 04:02
Reporterbbryant Assigned Tocproensa  
PrioritynormalSeverityfeatureReproducibilityalways
Status closedResolutionfixed 
Target Version2.1.0Fixed in Version2.1.0 
Summary0009301: Add support for updating a current filter
Description

This patch adds support for modifying a filter instead of having to go through multiple steps to change a filter and retain the same filter name.

Tagspatch
Attached Files
update_filters.patch (3,308 bytes)   
Index: query_store_page.php
===================================================================
--- query_store_page.php
+++ query_store_page.php
@@ -43,10 +43,34 @@
 		print "<br />$t_error_msg<br /><br />";
 	}
 
-	print lang_get( 'query_name' ) . ': ';
+	//print lang_get( 'query_name' ) . ': ';
 ?>
-	<form method="POST" action="query_store.php">
-	<input type="text" name="query_name"><br />
+	<form method="POST" action="query_store.php" name="query">
+	<table cellspacing="0" cellpadding="2">
+		<tr>
+			<td>
+				<?php print lang_get( 'query_name' ) . ': '; ?>
+			</td>
+			<td>
+				<input type="text" name="query_name">
+			</td>
+		</tr>
+		<tr>
+			<td>
+				<?php print lang_get( 'query_existing' ) . ': '; ?>
+			</td>
+			<td>
+				<select name="query_existing" onchange="javascript: document.forms.query.query_name.disabled = !!this.options[this.selectedIndex].length;">
+					<option value=""></option>
+					<?php 
+						foreach ($t_query_arr as $t_id => $t_name) {
+							echo "<option value=\"{$t_id}\">{$t_name}</option>\r\n";
+						}
+					?>
+				</select>
+			</td>
+		</tr>
+	</table>
 	<?php
 	if ( access_has_project_level( config_get( 'stored_query_create_shared_threshold' ) ) ) {
 		print '<input type="checkbox" name="is_public" value="on"> ';
Index: query_store.php
===================================================================
--- query_store.php
+++ query_store.php
@@ -19,27 +19,38 @@
 	auth_ensure_user_authenticated();
 	compress_enable();
 
-	$f_query_name = strip_tags( gpc_get_string( 'query_name' ) );
+	$f_query_id = gpc_get_int( 'query_existing' );
 	$f_is_public = gpc_get_bool( 'is_public' );
 	$f_all_projects = gpc_get_bool( 'all_projects' );
-
 	$t_query_redirect_url = 'query_store_page.php';
+	$f_query_name = null;
 
-	# We can't have a blank name
-	if ( is_blank( $f_query_name ) ) {
-		$t_query_redirect_url = $t_query_redirect_url . '?error_msg='
-			. urlencode( lang_get( 'query_blank_name' ) );
-		print_header_redirect( $t_query_redirect_url );
-	}
-
-	# Check and make sure they don't already have a
-	# query with the same name
-	$t_query_arr = filter_db_get_available_queries();
-	foreach( $t_query_arr as $t_id => $t_name )	{
-		if ( $f_query_name == $t_name ) {
+	if (!$f_query_id) {
+		$f_query_name = strip_tags( gpc_get_string( 'query_name' ) );
+		
+		# We can't have a blank name
+		if ( is_blank( $f_query_name ) ) {
 			$t_query_redirect_url = $t_query_redirect_url . '?error_msg='
-				. urlencode( lang_get( 'query_dupe_name' ) );
+				. urlencode( lang_get( 'query_blank_name' ) );
 			print_header_redirect( $t_query_redirect_url );
+		}
+
+		# Check and make sure they don't already have a
+		# query with the same name
+		$t_query_arr = filter_db_get_available_queries();
+		foreach( $t_query_arr as $t_id => $t_name )	{
+			if ( $f_query_name == $t_name ) {
+				$t_query_redirect_url = $t_query_redirect_url . '?error_msg='
+					. urlencode( lang_get( 'query_dupe_name' ) );
+				print_header_redirect( $t_query_redirect_url );
+				exit;
+			}
+		}
+	} else {
+		if (!($f_query_name = filter_get_field($f_query_id, "name"))) {
+			$t_query_redirect_url = $t_query_redirect_url . '?error_msg=' . 
+				urlencode( lang_get( 'query_invalid_id' ) );
+			print_header_redirect( $t_query_redirect_url );
 			exit;
 		}
 	}
update_filters.patch (3,308 bytes)   
filter.patch (4,925 bytes)   
diff --git a/lang/strings_english.txt b/lang/strings_english.txt
index cff3989..09b2299 100644
--- a/lang/strings_english.txt
+++ b/lang/strings_english.txt
@@ -1235,6 +1235,7 @@ $s_query_name_too_long = 'You cannot store a filter name with more than 64 chara
 $s_query_store_error = 'There was an error saving this filter.';
 $s_open_queries = 'Manage Filters';
 $s_query_delete_msg = 'Are you sure you wish to delete this filter?';
+$s_query_select = 'Select Filter';
 
 # bug_view_advanced_page.php
 $s_view_simple_link = 'View Simple';
diff --git a/lang/strings_french.txt b/lang/strings_french.txt
index 9c6f9af..87a4e80 100644
--- a/lang/strings_french.txt
+++ b/lang/strings_french.txt
@@ -972,6 +972,7 @@ $s_query_name_too_long = 'Vous ne pouvez pas sauvegarder un filtre avec un nom d
 $s_query_store_error = 'Une erreur s\'est produite durant la sauvegarde de ce filtre.';
 $s_open_queries = 'Gérer les filtres';
 $s_query_delete_msg = 'Êtes-vous certain de vouloir supprimer ce filtre ?';
+$s_query_select = 'Sélectionner le filtre';
 $s_view_simple_link = 'Rapport simplifié';
 $s_product_build = 'Build';
 $s_system_profile = 'Description du système';
diff --git a/query_store.php b/query_store.php
index 1dc7ede..4650b4a 100644
--- a/query_store.php
+++ b/query_store.php
@@ -37,7 +37,12 @@
 	auth_ensure_user_authenticated();
 	compress_enable();
 
-	$f_query_name = strip_tags( gpc_get_string( 'query_name' ) );
+	if( gpc_isset( 'query_name' ) ) {
+		$f_query_name = strip_tags( gpc_get_string( 'query_name' ) );
+	} elseif( gpc_isset( 'modified_filter_id' ) ) {
+		$f_query_name = strip_tags( gpc_get_string( 'modified_filter_id' ) );
+	}
+
 	$f_is_public = gpc_get_bool( 'is_public' );
 	$f_all_projects = gpc_get_bool( 'all_projects' );
 
@@ -59,13 +64,15 @@
 
 	# Check and make sure they don't already have a
 	# query with the same name
-	$t_query_arr = filter_db_get_available_queries();
-	foreach( $t_query_arr as $t_id => $t_name )	{
-		if ( $f_query_name == $t_name ) {
-			$t_query_redirect_url = $t_query_redirect_url . '?error_msg='
-				. urlencode( lang_get( 'query_dupe_name' ) );
-			print_header_redirect( $t_query_redirect_url );
-			exit;
+	if( !gpc_isset( 'modified_filter_id' ) &&  gpc_isset( 'query_name' ) ) {
+		$t_query_arr = filter_db_get_available_queries();
+		foreach( $t_query_arr as $t_id => $t_name )	{
+			if ( $f_query_name == $t_name ) {
+				$t_query_redirect_url = $t_query_redirect_url . '?error_msg='
+					. urlencode( lang_get( 'query_dupe_name' ) );
+				print_header_redirect( $t_query_redirect_url );
+				exit;
+			}
 		}
 	}
 
diff --git a/query_store_page.php b/query_store_page.php
index e7be5cf..d3ce126 100644
--- a/query_store_page.php
+++ b/query_store_page.php
@@ -62,7 +62,53 @@
 ?>
 	<form method="post" action="query_store.php">
 	<?php echo form_security_field( 'query_store' ) ?>
-	<input type="text" name="query_name" /><br />
+	<input type="text" name="query_name" id="query_name"<?php
+	if( ON == config_get( 'use_javascript' ) ) {
+		echo ' onkeyup="select_disable();"';
+	}
+	?> /><br /><br />
+	<?php 
+	$t_curr_user_filter_arr = array();
+	$t_curr_user_filter_arr = filter_db_get_available_queries();
+	?>
+	<?php if( count( $t_curr_user_filter_arr ) > 0 ): ?>
+
+	<?php if( ON == config_get( 'use_javascript' ) ): ?>
+	<script type="text/javascript">
+	function textbox_disable() {
+		if((document.getElementById('modified_filter_id').value) != " ") {
+			document.getElementById('query_name').value = "";
+			document.getElementById('query_name').disabled = true;
+		} else {
+			document.getElementById('query_name').disabled = false;
+		}
+	}
+	function select_disable() {
+		if((document.getElementById('query_name').value) != "") {
+			document.getElementById("modified_filter_id").value = " ";
+			document.getElementById('modified_filter_id').disabled = true;
+		} else {
+			document.getElementById('modified_filter_id').disabled = false;
+		}
+	}	
+	</script>
+	<?php endif ?>
+
+	<select name="modified_filter_id" id="modified_filter_id"<?php
+	if( ON == config_get( 'use_javascript' ) ) {
+		echo ' onchange="textbox_disable();"';
+	}
+	?>>
+	<option value=" "><?php echo lang_get( 'query_select' ) ?></option><?php 
+	foreach( $t_curr_user_filter_arr as $t_query_id => $t_modi_query_name ) {
+		if( filter_db_can_delete_filter( $t_query_id ) ) {
+	     echo '<option value="' . $t_modi_query_name . '">' . $t_modi_query_name . '</option>';
+		}
+	}
+	?>	
+	</select>
+	<?php endif ?>
+	<br /><br />
 	<?php
 	if ( access_has_project_level( config_get( 'stored_query_create_shared_threshold' ) ) ) {
 		print '<input type="checkbox" name="is_public" value="on" /> ';
@@ -78,6 +124,6 @@
 	<?php # CSRF protection not required here - form does not result in modifications ?>
 	<input type="submit" class="button" value="<?php print lang_get( 'go_back' ); ?>" />
 	</form>
+	</div>
 <?php
-	echo '</div>';
 	html_page_bottom();
filter.patch (4,925 bytes)   

Relationships

related to 0009213 closedcproensa manage filter 
child of 0021935 closedcproensa Filter api refactoring, manage stored filters 

Activities

mkornatzki

mkornatzki

2008-06-27 08:37

reporter   ~0018201

hi, i made also a patch to manage the filter in 0009213.
Daryn will review this patch against the recommodations in 0003803.
jreese maybe you can get in contact with him to coordinate the work. (i didn't know the workflow of the developer for mantis)

brody

brody

2008-07-08 09:23

reporter   ~0018340

Hi bbryant, seems to be a simple fix and good enough for an intermediate version.
Please tell me, which version of mantis is the base or
give the original file sizes of the patching files

sveyret

sveyret

2011-06-15 09:04

reporter   ~0029002

Hi, we are also interested in this evolution in our company. Someone (whose name is Kavita Maurya) made almost the same evolution than the one posted in this issue.
I attach the patch which is made with git against branch 1.2.x, hopping it will help you.

dhx

dhx

2011-07-12 06:56

reporter   ~0029147

Thanks for the updated patch Stéphane.

The 1.2.x branch is closed for new features (it's in a bugfix only mode). It may be possible to rewrite this patch for the 1.3.x (master) branch however quite a few things have changed.

Primarily, we no longer allow script tags, href="javascript:" URLs and onXYZ attributes in MantisBT's XHTML output. Rather, we use jQuery in javascript/common.js instead. Thus most of MantisBT's JavaScript from 1.2.x has been completely rewritten in the 1.3.x branch based on jQuery. This patch would need a similar rewrite.

Hope this information is useful.

atrol

atrol

2014-02-01 13:30

developer   ~0039273

Unassigned after having been assigned for a long time without progress.