Dependency Graph
View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0009301 | mantisbt | filters | public | 2008-06-25 16:45 | 2017-01-31 04:02 |
| Reporter | bbryant | Assigned To | cproensa | ||
| Priority | normal | Severity | feature | Reproducibility | always |
| Status | closed | Resolution | fixed | ||
| Target Version | 2.1.0 | Fixed in Version | 2.1.0 | ||
| Summary | 0009301: 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. | ||||
| Tags | patch | ||||
| 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;
}
}
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();
| ||||
|
hi, i made also a patch to manage the filter in 0009213. |
|
|
Hi bbryant, seems to be a simple fix and good enough for an intermediate version. |
|
|
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. |
|
|
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. |
|
|
Unassigned after having been assigned for a long time without progress. |
|
related to
child of
duplicate of