]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3825 remove MEASURE_FILTERS.SYSTEM and add breadcrumb
authorSimon Brandhof <simon.brandhof@gmail.com>
Fri, 30 Nov 2012 08:20:25 +0000 (09:20 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Fri, 30 Nov 2012 08:20:25 +0000 (09:20 +0100)
18 files changed:
plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties
sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterFactory.java
sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl
sonar-core/src/main/resources/org/sonar/core/resource/ResourceMapper.xml
sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterDecoderTest.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/measures_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/controllers/system_measure_filters_controller.rb [deleted file]
sonar-server/src/main/webapp/WEB-INF/app/helpers/application_helper.rb
sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_breadcrumb.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/measures/_filters.html.erb [deleted file]
sonar-server/src/main/webapp/WEB-INF/app/views/measures/manage.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/measures/search.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/system_measure_filters/index.html.erb [deleted file]
sonar-server/src/main/webapp/WEB-INF/db/migrate/356_create_measure_filters.rb
sonar-server/src/main/webapp/WEB-INF/db/migrate/357_move_existing_measure_filters.rb
sonar-server/src/main/webapp/stylesheets/layout.css
sonar-server/src/main/webapp/stylesheets/style.css

index fad4634ba8fc5ab2b7486d7bea77c74d2d2925f9..ab22ca13791cf439e11b6008dd622980e2088e12 100644 (file)
@@ -190,6 +190,7 @@ greater_than=Greater than
 help_tips=Help tips
 less_or_equals=Less or equals
 less_than=Less than
+manage=Manage
 move_left=Move left
 move_right=Move right
 new_violations=New violations
@@ -355,7 +356,6 @@ resource_deletion.page={0} Deletion
 update_key.page=Update Key
 project_quality_profiles.page=Quality Profiles
 bulk_deletion.page=Bulk Deletion
-system_measure_filters.page=System Measure Filters
 comparison.page=Comparison
 
 
@@ -399,13 +399,11 @@ measure_filter.name_too_long=Name is too long
 measure_filter.sharing=Sharing
 measure_filter.delete_confirm_title=Delete Filter
 measure_filter.are_you_sure_want_delete_filter_x=Are you sure that you want to delete the filter "{0}"?
-measure_filter.remove_from_system=Remove from system
-measure_filter.add_to_system=Add to system
 measure_filter.title_shared_filters=Shared Filters
-measure_filter.title_system_filters=System Filters
 measure_filter.key_like=Key like
 measure_filter.name_contains=Name contains
 measure_filter.only_favourites=Favourites only
+measure_filter.manage_filters=Manage Filters
 
 #------------------------------------------------------------------------------
 #
index e951420881c4d6b7aefcc24609372c91bc431df1..f81086d5c86b2711b456f2999247aa504afc0da0 100644 (file)
@@ -54,7 +54,7 @@ public class MeasureFilterFactory implements ServerComponent {
     if (properties.containsKey("onBaseComponents")) {
       filter.setOnBaseResourceChildren(Boolean.valueOf((String) properties.get("onBaseComponents")));
     }
-    filter.setResourceName((String) properties.get("nameRegexp"));
+    filter.setResourceName((String) properties.get("nameSearch"));
     filter.setResourceKeyRegexp((String) properties.get("keyRegexp"));
     if (properties.containsKey("fromDate")) {
       filter.setFromDate(toDate((String) properties.get("fromDate")));
index 8ad5551c6d339393a18a2dc85446371ec9aee296..76f26b33d853864b8ff1720c3694be33159609d3 100644 (file)
@@ -518,7 +518,6 @@ CREATE TABLE "SEMAPHORES" (
 CREATE TABLE "MEASURE_FILTERS" (
   "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
   "NAME" VARCHAR(100) NOT NULL,
-  "SYSTEM" BOOLEAN,
   "SHARED" BOOLEAN NOT NULL DEFAULT FALSE,
   "USER_ID" INTEGER,
   "DESCRIPTION" VARCHAR(4000),
index 044da26c78f30d6b216a44e6db29f2f34d9e93ac..3d14bcf1d62b63b4e647f7dd5331d8bd9c61034b 100644 (file)
@@ -79,7 +79,7 @@
     select * from snapshots where id=#{id}
   </select>
 
-  <select id="selectLastSnapshotByKey" parameterType="string" resultMap="snapshotResultMap">
+  <select id="selectLastSnapshotByResourceKey" parameterType="string" resultMap="snapshotResultMap">
     select s.* from snapshots s, projects p where p.kee=#{id} and p.enabled=${_true} and p.copy_resource_id is null and s.islast=${_true} and p.id=s.project_id
   </select>
 
index ce7ed550464eaec583257c23638014837e3a3d73..a4294dde99592509034c289b040b5b624fd749ca 100644 (file)
@@ -74,7 +74,7 @@ public class MeasureFilterDecoderTest {
     assertThat(filter.sort().isAsc()).isTrue();
     MeasureFilterCondition condition = filter.getMeasureConditions().get(0);
     assertThat(condition.metric().getKey()).isEqualTo("lines");
-    assertThat(condition.operator()).isEqualTo(">");
+    assertThat(condition.operator()).isEqualTo(MeasureFilterCondition.Operator.GREATER);
     assertThat(condition.value()).isEqualTo(123.0);
   }
 
index 7475ad4e4013c6bb37f8033e43aac3bb547846ae..ffe8afd23fdf2b2d8068ce9ede95942ce0bf86de 100644 (file)
 #
 class MeasuresController < ApplicationController
 
+  ROOT_BREADCRUMB = {:name => Api::Utils.message('layout.measures'), :url => {:action => 'index'}}
 
   # GET /measures/index
   def index
     @filter = MeasureFilter.new
+    add_breadcrumbs(ROOT_BREADCRUMB)
     render :action => 'search'
   end
 
   def search
+    add_breadcrumbs(ROOT_BREADCRUMB)
     if params[:id]
       @filter = MeasureFilter.find(params[:id])
+      add_breadcrumbs({:name => @filter.name, :url => {:action => 'filter', :id => @filter.id}})
     else
       @filter = MeasureFilter.new
+      add_breadcrumbs(message('search_verb'))
     end
     @filter.criteria=(params)
     @filter.enable_default_display
@@ -85,6 +90,7 @@ class MeasuresController < ApplicationController
   # GET /measures/manage
   def manage
     access_denied unless logged_in?
+    add_breadcrumbs(ROOT_BREADCRUMB, message('measure_filter.manage'))
     @shared_filters = MeasureFilter.find(:all,
                                          :include => :user,
                                          :conditions => ['shared=? and user_id<>?', true, current_user.id])
@@ -176,12 +182,6 @@ class MeasuresController < ApplicationController
     render :text => is_favourite.to_s, :status => 200
   end
 
-  # GET /measures/filters
-  def filters
-    verify_ajax_request
-    render :partial => 'measures/filters'
-  end
-
   private
   def find_filter(id)
     filter = MeasureFilter.find(id)
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/system_measure_filters_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/system_measure_filters_controller.rb
deleted file mode 100644 (file)
index 43cebd7..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Sonar, open source software quality management tool.
-# Copyright (C) 2008-2012 SonarSource
-# mailto:contact AT sonarsource DOT com
-#
-# Sonar is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 3 of the License, or (at your option) any later version.
-#
-# Sonar is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with Sonar; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
-#
-class SystemMeasureFiltersController < ApplicationController
-  SECTION = Navigation::SECTION_CONFIGURATION
-
-  # GET /system_measure_filters/index
-  def index
-    access_denied unless has_role?(:admin)
-
-    @system_filters = MeasureFilter.find(:all, :include => :user, :conditions => ['system=?', true])
-    Api::Utils.insensitive_sort!(@system_filters) { |f| f.name }
-
-    @shared_filters = MeasureFilter.find(:all, :include => :user, :conditions => ['shared=? and system=?', true, false])
-  end
-
-  # POST /system_measure_filters/add/<filter id>
-  def add
-    verify_post_request
-    access_denied unless has_role?(:admin)
-    require_parameters :id
-
-    filter = MeasureFilter.find(params[:id])
-    filter.system=true
-    unless filter.save
-      flash[:error]=filter.errors.full_messages.join("<br/>")
-    end
-    redirect_to :action => :index
-  end
-
-  # POST /system_measure_filters/remove/<filter id>
-  def remove
-    verify_post_request
-    access_denied unless has_role?(:admin)
-    require_parameters :id
-
-    filter = MeasureFilter.find(params[:id])
-    filter.system=false
-    unless filter.save
-      flash[:error]=filter.errors.full_messages.join("<br/>")
-    end
-    redirect_to :action => :index
-  end
-
-end
index e44991b418930ee77c17bb076718787eb77fb352..8a42d5e6545cec7ad420206e231343583e66ed89 100644 (file)
@@ -646,6 +646,8 @@ module ApplicationHelper
   # * <tt>:qualifiers</tt> - Array of resource qualifiers to filter.
   # * <tt>:resource_type_property</tt> -Filter on resource types on which the property is enabled, for example 'supportsGlobalDashboards'.
   # * <tt>:selected_resource</tt> - the resource that is selected by default.
+  # * <tt>:placeholder</tt> - the label to display when nothing is selected
+  # * <tt>:select2_options</tt> - hash of select2 options
   #
   def resource_select_tag(name, options={})
     width=options[:width]
@@ -673,6 +675,7 @@ module ApplicationHelper
       'formatSearching' => "function(){return '#{escape_javascript message('select2.searching')}'}",
       'formatInputTooShort' => "function(term, minLength){return '#{escape_javascript message('select2.tooShort', :params => [min_length])}'}"
     }
+    js_options['placeholder']= "'#{options[:placeholder]}'" if options.has_key?(:placeholder)
     js_options['width']= "'#{width}'" if width
     js_options['ajax']='{' + ajax_options.map { |k, v| "#{k}:#{v}" }.join(',') + '}'
     js_options.merge!(options[:select2_options]) if options[:select2_options]
@@ -700,6 +703,7 @@ module ApplicationHelper
   # * <tt>:html_id</tt> - The id of the HTML element. Default is the name.
   # * <tt>:key_prefix</tt> - Prefix added to metric keys. Default is ''
   # * <tt>:extra_values</tt> -
+  # * <tt>:placeholder</tt> - the label to display when nothing is selected
   #
   def metric_select_tag(name, metrics, options={})
     width=options[:width]||'250px'
@@ -729,6 +733,7 @@ module ApplicationHelper
         h
       end
     end
+    js_options['placeholder']= "'#{options[:placeholder]}'" if options.has_key?(:placeholder)
 
     key_prefix = options[:key_prefix]||''
     metrics.sort_by(&:short_name).inject(metrics_by_domain) do |h, metric|
index 6877f148f05d6a14d31f9e8960d8315377740fc6..b7c9b7164400fdf55f998b633d867f44b1a6bb2e 100644 (file)
@@ -22,7 +22,7 @@
                icon = breadcrumb[:icon]
           %>
             <% if icon %><img src="<%= ApplicationController.root_context -%>/images/<%= icon -%>" width="16" height="16"><% end %>
-            <%= link_to_if url, name, url -%>
+            <%= link_to_if url, h(name), url -%>
           <% elsif breadcrumb.respond_to?(:html) %>
             <%= breadcrumb.html -%>
           <% end %>
index e35d9b54758e635de973cfb2e51878c29d4c1955..1ae072d79b699cda2ef7f23c234a00a3cd3b2cbc 100644 (file)
               <a href="<%= ApplicationController.root_context -%>/manual_rules/index"><%= message('manual_rules.page') -%></a></li>
             <li class="<%= 'selected' if controller.controller_path=='admin_dashboards' -%>">
               <a href="<%= ApplicationController.root_context -%>/admin_dashboards/index"><%= message('default_dashboards.page') -%></a></li>
-            <li class="<%= 'selected' if controller.controller_path=='system_measure_filters' -%>">
-              <a href="<%= ApplicationController.root_context -%>/system_measure_filters"><%= message('system_measure_filters.page') -%></a></li>
             <% controller.java_facade.getPages(Navigation::SECTION_CONFIGURATION, nil, nil, nil, nil).each do |page|
               page_url = (page.isController() ? page.getId() : "/plugins/configuration/#{page.getId()}")
             %>
       <% end %>
     </div>
   <% end %>
-  <div id="content" class="<%= selected_section ? 'with_sidebar' : 'wo_sidebar' -%>">
+  <div <%= "id='content' class='with_sidebar'" if selected_section -%>>
     <% if @project %>
       <div class="print"><h2><%= @project.name(true) %></h2></div>
     <% end %>
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/measures/_filters.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/measures/_filters.html.erb
deleted file mode 100644 (file)
index 6a4e452..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<ul id="system-filters">
-  <%
-    system_filters = Api::Utils.insensitive_sort(MeasureFilter.find(:all, :include => :user, :conditions => ['system=?', true])) { |f| f.name }
-    system_filters.each do |filter| %>
-    <li>
-      <a href="<%= ApplicationController.root_context -%>/measures/filter/<%= filter.id -%>"><%= h filter.name -%></a>
-    </li>
-  <% end %>
-</ul>
-
-<% if logged_in? %>
-  <br/>
-  <div class="h2">My Favourites</div>
-  <ul id="fav-filters">
-    <% current_user.favourited_measure_filters.each do |filter| %>
-      <li>
-        <a href="<%= ApplicationController.root_context -%>/measures/filter/<%= filter.id -%>"><%= h filter.name -%></a>
-      </li>
-    <% end %>
-  </ul>
-  <br>
-  <a href="<%= ApplicationController.root_context -%>/measures/manage" class="link-action">Manage</a>
-<% end %>
index 4549dbbff090a00c1da2c2162cb3ac1ce14a0511..373ddf45969ba47fb92412e62e052a3b64e31159 100644 (file)
@@ -16,7 +16,6 @@
               star.removeClass('fav').addClass('notfav');
               star.attr('title', '<%= escape_javascript message('click_to_add_to_favourites') -%>');
             }
-            $j('#filters-sidebar').load(baseUrl + '/measures/filters');
           }
         });
       });
   </script>
 <% end %>
 
-<div>
-  <div class="page-split-left">
-    <ul class="nav-pills" id="nav-pills">
-      <li><a href="<%= ApplicationController.root_context -%>/measures" id="search-pill">Search</a></li>
-      <li class="active"><a href="#" id="filters-pill">Filters</a></li>
-    </ul>
-
-    <div id="filters-sidebar">
-      <%= render :partial => 'measures/filters' -%>
-    </div>
-  </div>
-
-  <div class="page-split-right width100">
-    <h2>My Measure Filters</h2>
-    <table class="data marginbottom10" id="my-filters">
-      <thead>
-      <tr>
-        <th class="thin"></th>
-        <th><%= message('name') -%></th>
-        <th><%= message('measure_filter.sharing') -%></th>
-        <th class="right"><%= message('operations') -%></th>
+<h2>My Measure Filters</h2>
+<table class="data marginbottom10" id="my-filters">
+  <thead>
+  <tr>
+    <th class="thin"></th>
+    <th><%= message('name') -%></th>
+    <th><%= message('measure_filter.sharing') -%></th>
+    <th class="right"><%= message('operations') -%></th>
+  </tr>
+  </thead>
+  <tbody>
+  <% if current_user.measure_filters.empty? %>
+    <tr class="even">
+      <td colspan="4"><%= message('filters.no_filters') -%></td>
+    </tr>
+  <% else %>
+    <% current_user.measure_filters.each do |filter| %>
+      <tr id="my-<%= filter.name.parameterize -%>" class="<%= cycle('even', 'odd', :name => 'my-filters') -%>">
+        <td>
+          <%= measure_filter_star(filter, @fav_filter_ids.include?(filter.id)) -%>
+        </td>
+        <td>
+          <%= link_to h(filter.name), :action => 'filter', :id => filter.id -%>
+          <% if filter.description %>
+            <div><%= h filter.description -%></div>
+          <% end %>
+        </td>
+        <td>
+          <% if filter.shared %>
+            Shared with all users
+          <% else %>
+            Private
+          <% end %>
+        </td>
+        <td class="thin nowrap right">
+          <a id="edit_<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/measures/edit_form/<%= filter.id -%>" class="link-action open-modal"><%= message('edit') -%></a>
+          &nbsp;
+          <a id="copy-<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/measures/copy_form/<%= filter.id -%>" class="link-action open-modal"><%= message('copy') -%></a>
+          &nbsp;
+          <%= link_to_action message('delete'), "#{ApplicationController.root_context}/measures/delete/#{filter.id}",
+                             :class => 'link-action link-red',
+                             :id => "delete_#{filter.name.parameterize}",
+                             :confirm_button => message('delete'),
+                             :confirm_title => 'measure_filter.delete_confirm_title',
+                             :confirm_msg => 'measure_filter.are_you_sure_want_delete_filter_x',
+                             :confirm_msg_params => [filter.name] -%>
+        </td>
       </tr>
-      </thead>
-      <tbody>
-      <% if current_user.measure_filters.empty? %>
-        <tr class="even">
-          <td colspan="4"><%= message('filters.no_filters') -%></td>
-        </tr>
-      <% else %>
-        <% current_user.measure_filters.each do |filter| %>
-          <tr id="my-<%= filter.name.parameterize -%>" class="<%= cycle('even', 'odd', :name => 'my-filters') -%>">
-            <td>
-              <%= measure_filter_star(filter, @fav_filter_ids.include?(filter.id)) -%>
-            </td>
-            <td>
-              <%= link_to h(filter.name), :action => 'filter', :id => filter.id -%>
-              <% if filter.description %>
-                <div><%= h filter.description -%></div>
-              <% end %>
-            </td>
-            <td>
-              <% if filter.shared %>
-                Shared with all users
-              <% else %>
-                Private
-              <% end %>
-            </td>
-            <td class="thin nowrap right">
-              <a id="edit_<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/measures/edit_form/<%= filter.id -%>" class="link-action open-modal"><%= message('edit') -%></a>
-              &nbsp;
-              <a id="copy-<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/measures/copy_form/<%= filter.id -%>" class="link-action open-modal"><%= message('copy') -%></a>
-              &nbsp;
-              <%= link_to_action message('delete'), "#{ApplicationController.root_context}/measures/delete/#{filter.id}",
-                                 :class => 'link-action link-red',
-                                 :id => "delete_#{filter.name.parameterize}",
-                                 :confirm_button => message('delete'),
-                                 :confirm_title => 'measure_filter.delete_confirm_title',
-                                 :confirm_msg => 'measure_filter.are_you_sure_want_delete_filter_x',
-                                 :confirm_msg_params => [filter.name] -%>
-            </td>
-          </tr>
-        <% end %>
-      <% end %>
-      </tbody>
-    </table>
-
-    <br/>
-
-    <h2>Shared Measure Filters</h2>
-    <table class="data" id="shared-filters">
-      <thead>
-      <tr>
-        <th class="thin"></th>
-        <th><%= message('name') -%></th>
-        <th><%= message('shared_by') -%></th>
-        <th class="right"><%= message('operations') -%></th>
+    <% end %>
+  <% end %>
+  </tbody>
+</table>
+
+<br/>
+
+<h2>Shared Measure Filters</h2>
+<table class="data" id="shared-filters">
+  <thead>
+  <tr>
+    <th class="thin"></th>
+    <th><%= message('name') -%></th>
+    <th><%= message('shared_by') -%></th>
+    <th class="right"><%= message('operations') -%></th>
+  </tr>
+  </thead>
+  <tbody>
+  <% if @shared_filters.empty? %>
+    <tr class="even">
+      <td colspan="4"><%= message('filters.no_filters') -%></td>
+    </tr>
+  <% else %>
+    <% @shared_filters.each do |filter| %>
+      <tr id="shared-<%= filter.name.parameterize -%>" class="<%= cycle('even', 'odd', :name => 'shared-filters') -%>">
+        <td>
+          <%= measure_filter_star(filter, @fav_filter_ids.include?(filter.id)) -%>
+        </td>
+        <td>
+          <%= link_to h(filter.name), :action => 'filter', :id => filter.id -%>
+          <% if filter.description %>
+            <div><%= h filter.description -%></div>
+          <% end %>
+        </td>
+        <td>
+          <%= filter.user ? h(filter.user.name) : '-' -%>
+        </td>
+        <td class="thin nowrap right">
+          <a id="copy-<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/measures/copy_form/<%= filter.id -%>" class="link-action open-modal"><%= message('copy') -%></a>
+        </td>
       </tr>
-      </thead>
-      <tbody>
-      <% if @shared_filters.empty? %>
-        <tr class="even">
-          <td colspan="4"><%= message('filters.no_filters') -%></td>
-        </tr>
-      <% else %>
-        <% @shared_filters.each do |filter| %>
-          <tr id="shared-<%= filter.name.parameterize -%>" class="<%= cycle('even', 'odd', :name => 'shared-filters') -%>">
-            <td>
-              <%= measure_filter_star(filter, @fav_filter_ids.include?(filter.id)) -%>
-            </td>
-            <td>
-              <%= link_to h(filter.name), :action => 'filter', :id => filter.id -%>
-              <% if filter.description %>
-                <div><%= h filter.description -%></div>
-              <% end %>
-            </td>
-            <td>
-              <%= filter.user ? h(filter.user.name) : '-' -%>
-            </td>
-            <td class="thin nowrap right">
-              <a id="copy-<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/measures/copy_form/<%= filter.id -%>" class="link-action open-modal"><%= message('copy') -%></a>
-            </td>
-          </tr>
-
-        <% end %>
-      <% end %>
-      </tbody>
-    </table>
-
-  </div>
-
-</div>
-
-
-
-
-
-
-
 
+    <% end %>
+  <% end %>
+  </tbody>
+</table>
 
 
index 92dfe690edd9514d3b1a146a3653b2ceb6bda276..eb0ab93c6a6940bbf5cfcf7ab72ac29679e2bbe5 100644 (file)
     }
   </style>
 <% end %>
+<%
+   hidden_condition_indexes = []
+   for i in 1..3 do
+     unless @filter.criteria("c#{i}_metric") && @filter.criteria("c#{i}_val")
+       hidden_condition_indexes << i
+     end
+   end
+%>
 <% content_for :script do %>
   <script>
     function submitSearch() {
       });
       window.location = url;
     }
-    var filtersLoaded = false;
+    var hiddenConditionIndexes = [<%= hidden_condition_indexes.join(',') -%>];
     $j(document).ready(function () {
-        $j('#search-pill').on('click', function (e) {
-          $j('#search-pill').parent().addClass('active');
-          $j('#filters-pill').parent().removeClass('active');
-          $j('#search-form').show();
-          $j('#filters').hide();
-        });
-        $j('#filters-pill').on('click', function (e) {
-          $j('#search-pill').parent().removeClass('active');
-          $j('#filters-pill').parent().addClass('active');
-          $j('#search-form').hide();
-          $j('#filters').show();
-          if (!filtersLoaded) {
-            $j('#filters').load(baseUrl + '/measures/filters');
-            filtersLoaded = true;
+      $j('#select-lang').select2({allowClear:true, width:'100%', placeholder:'Languages'});
+      $j('#select-qualifiers').select2({allowClear:true, width:'100%', placeholder:'Resources'});
+      $j('#more-criteria')
+        .select2({allowClear:true, width:'100%', placeholder:'+ More Criteria'})
+        .on("change", function (e) {
+          $j("#criteria-" + e.val).insertBefore($j("#more-td")).show();
+          if (e.val == 'lang') {
+            $j("#select-" + e.val).select2("enable");
+            $j("#select-" + e.val).select2("focus");
+          }
+          $j("#more-criteria").select2("val", "");
+          if (e.val == 'metric') {
+            if (hiddenConditionIndexes.length > 0) {
+              var index = hiddenConditionIndexes.pop();
+              $j("#criteria-metric-" + index).insertBefore($j("#more-td")).show();
+              $j("#c" + index + "_metric").select2("focus");
+              if (hiddenConditionIndexes.length == 0) {
+                $j("#more-criteria option[value='metric']").remove();
+              }
+            }
+          } else {
+            $j("#more-criteria option[value='" + e.val + "']").remove();
           }
         });
-      }
-    );
+    });
   </script>
 <% end %>
-<div id="measure-filters">
+<div>
   <div class="page-split-left">
-    <ul class="nav-pills" id="nav-pills">
-      <li class="active"><a href="#" id="search-pill">Search</a></li>
-      <li><a href="#" id="filters-pill">Filters</a></li>
-    </ul>
-    <div id="filters" style="display:none"><%= image_tag 'loading.gif' -%></div>
+    <% if logged_in? %>
+      <ul id="filters">
+        <% current_user.favourited_measure_filters.each do |filter| %>
+          <li>
+            <a href="<%= ApplicationController.root_context -%>/measures/filter/<%= filter.id -%>"><%= h filter.name -%></a>
+          </li>
+        <% end %>
+      </ul>
+      <a href="<%= ApplicationController.root_context -%>/measures/manage" class="link-action"><%= message('manage') %></a>
+      <hr>
+    <% end %>
+
     <form id="search-form" method="GET" action="<%= ApplicationController.root_context -%>/measures/search">
       <% if @filter.id %>
         <input type="hidden" name="id" value="<%= @filter.id -%>">
                end
                end
             %>
-      <table class="width100">
+      <table class="spaced width100">
         <tbody>
         <tr>
-          <td class="width100">
-            Base:<br>
-            <%= resource_select_tag 'baseId', :resource_type_property => 'supportsGlobalDashboards', :width => '100%', :selected_resource => @filter.base_resource -%>
-          </td>
-        </tr>
-        <tr>
-          <td class="width100">
-            On components:<br>
-            <%= check_box_tag 'onBaseComponents', 'true', @filter.criteria['onBaseComponents'] -%>
+          <td>
+            <%= resource_select_tag 'baseId', :resource_type_property => 'supportsGlobalDashboards', :width => '100%', :selected_resource => @filter.base_resource, :placeholder => 'Path' -%>
           </td>
         </tr>
         <tr>
-          <td class="width100">
-            Qualifiers:<br>
+          <td>
             <%
-               qualifiers = Api::Utils.java_facade.getResourceTypesForFilter().map do |resource_type|
+               qualifiers = [['Components', 'components']].concat(Api::Utils.java_facade.getResourceTypesForFilter().map do |resource_type|
                  [message("qualifiers.#{resource_type.getQualifier()}"), resource_type.getQualifier()]
-               end
+               end)
             %>
-            <%= select_tag 'qualifiers[]', options_for_select([[message('any'), '']].concat(qualifiers), @filter.criteria['qualifiers']||''), :size => 5, :multiple => true, :class => 'large-input' -%>
+            <%= select_tag 'qualifiers[]', options_for_select(qualifiers, @filter.criteria['qualifiers']||''), :multiple => true, :id => 'select-qualifiers' -%>
           </td>
         </tr>
-        <tr>
+        <tr id="criteria-lang" <%= "style='display:none'" unless @filter.criteria('languages') -%>>
           <td>
-            Language:<br>
-            <% languages = [[message('any'), '']].concat(Api::Utils.languages.map { |lang| [lang.name, lang.key] }) %>
-            <%= select_tag 'languages[]', options_for_select(languages, @filter.criteria['languages']||''), :size => 5, :multiple => true, :class => 'large-input' -%>
+            <% languages = [['', '']].concat(Api::Utils.languages.map { |lang| [lang.name, lang.key] }) %>
+            <%= select_tag 'languages[]', options_for_select(languages, @filter.criteria['languages']), :multiple => true, :id => 'select-lang', 'data-placeholder' => 'Languages' -%>
           </td>
         </tr>
-        <tr>
-          <td class="width100">
+        <tr id="criteria-name" <%= "style='display:none'" unless @filter.criteria('nameSearch') -%>>
+          <td>
             <%= message('measure_filter.name_contains') -%>:<br>
-            <input type="text" name="nameRegexp" value="<%= h @filter.criteria['nameRegexp'] -%>" class="large-input"></td>
+            <input type="text" name="nameSearch" value="<%= h @filter.criteria['nameSearch'] -%>"></td>
         </tr>
-        <tr>
-          <td class="width100">
+        <tr id="criteria-key" <%= "style='display:none'" unless @filter.criteria('keyRegexp') -%>>
+          <td>
             <%= message('measure_filter.key_like') -%>:<br>
             <input type="text" name="keyRegexp" value="<%= h @filter.criteria['keyRegexp'] -%>" class="large-input"></td>
         </tr>
-        <tr>
+        <tr id="criteria-fav" <%= "style='display:none'" unless @filter.criteria('onFavourites') -%>>
           <td>
             <%= message 'measure_filter.only_favourites' %>:<br>
             <%= check_box_tag 'onFavourites', 'true', @filter.criteria['onFavourites']=='true' -%>
         </tr>
 
         <% condition_metrics = Metric.all.select { |m| m.numeric? } %>
-        <tr>
-          <td>
-            <br>
-            <%= metric_select_tag 'c1_metric', condition_metrics, :allow_empty => true, :selected_key => @filter.criteria('c1_metric'), :width => '180px' -%>
-            <%= select_tag 'c1_period', options_for_select([['Value', ''], ['Period 1', '1'], ['Period 2', '2'], ['Period 3', '3']], @filter.criteria('c1_period')) -%>
-            <%= select_tag 'c1_op', options_for_select([['Equals', 'eq'], ['Less than', 'lt'], ['Less or equals', 'lte'], ['Greater than', 'gt'], ['Greater or equals', 'gte']], @filter.criteria('c1_op')) -%>
-            <input type="text" size="5" name="c1_val" value="<%= h @filter.criteria('c1_val') -%>">
-            <br><br>
-          </td>
-        </tr>
-
-        <tr>
+        <% for i in 1..3 %>
+          <tr id="criteria-metric-<%= i -%>" <%= "style='display: none'" if hidden_condition_indexes.include?(i) -%>>
+            <td style="padding:10px 5px">
+              <%= metric_select_tag "c#{i}_metric", condition_metrics, :allow_empty => true, :selected_key => @filter.criteria("c#{i}_metric"), :width => '100%', :placeholder => 'Metric' -%>
+              <%= select_tag "c#{i}_period", options_for_select([['Value', ''], ['Period 1', '1'], ['Period 2', '2'], ['Period 3', '3']], @filter.criteria("c#{i}_period")) -%>
+              <br>
+              <%= select_tag "c#{i}_op", options_for_select([['=', 'eq'], ['<', 'lt'], ['<=', 'lte'], ['>', 'gt'], ['>=', 'gte']], @filter.criteria("c#{i}_op")) -%>
+              <input type="text" size="5" name="c<%= i -%>_val" value="<%= h @filter.criteria("c#{i}_val") -%>">
+            </td>
+          </tr>
+        <% end %>
+        <tr id="criteria-date" <%= "style='display:none'" unless @filter.criteria('fromDate') || @filter.criteria('toDate') -%>>
           <td>
+            From date:
+            <input type="text" name="fromDate" value="<%= @filter.criteria['fromDate'] -%>" size="10" maxlength="10">
             <br>
-            <%= metric_select_tag 'c2_metric', condition_metrics, :allow_empty => true, :selected_key => @filter.criteria('c2_metric'), :width => '180px' -%>
-            <%= select_tag 'c2_period', options_for_select([['Value', ''], ['Period 1', '1'], ['Period 2', '2'], ['Period 3', '3']], @filter.criteria('c2_period')) -%>
-            <%= select_tag 'c2_op', options_for_select([['Equals', 'eq'], ['Less than', 'lt'], ['Less or equals', 'lte'], ['Greater than', 'gt'], ['Greater or equals', 'gte']], @filter.criteria('c2_op')) -%>
-            <input type="text" size="5" name="c2_val" value="<%= h @filter.criteria('c2_val') -%>">
-            <br><br>
-          </td>
-        </tr>
-
-        <tr>
-          <td>
-            From date:<br>
-            <input type="text" name="fromDate" value="<%= @filter.criteria['fromDate'] -%>">
-          </td>
-        </tr>
-        <tr>
-          <td>
-            To date:<br>
-            <input type="text" name="toDate" value="<%= @filter.criteria['toDate'] -%>">
+            To date:
+            <input type="text" name="toDate" value="<%= @filter.criteria['toDate'] -%>" size="10" maxlength="10"><br>
+            <span class="note">year-month-day (2012-01-31)</span>
           </td>
         </tr>
-        <tr>
+        <tr id="criteria-age" <%= "style='display:none'" unless @filter.criteria('beforeDays') || @filter.criteria('afterDays') -%>>
           <td>
-            More than:<br>
-            <input type="text" name="beforeDays" value="<%= @filter.criteria['beforeDays'] -%>" size="4"> days ago
+            More than
+            <input type="text" name="beforeDays" value="<%= @filter.criteria['beforeDays'] -%>" size="3"> days ago
+            <br>Within the last
+            <input type="text" name="afterDays" value="<%= @filter.criteria['afterDays'] -%>" size="3"> days
           </td>
         </tr>
-        <tr>
-          <td>Within the last:<br>
-            <input type="text" name="afterDays" value="<%= @filter.criteria['afterDays'] -%>" size="4"> days
+        <tr id="more-td">
+          <td style="padding-top: 10px">
+            <select id="more-criteria">
+              <option value=""></option>
+              <option value="age">Age</option>
+              <option value="date">Date</option>
+              <option value="fav">Favourites Only</option>
+              <option value="key">Key</option>
+              <option value="lang">Language</option>
+              <option value="metric">Metric</option>
+              <option value="name">Name</option>
+            </select>
           </td>
         </tr>
+
         <tr>
           <td>
-            <br/>
-            <input type="button" name="search" value="Search" onclick="submitSearch()">
+            <input type="button" name="search" value="<%= message('search_verb') -%>" onclick="submitSearch()">
             <a href="<%= ApplicationController.root_context -%>/measures">New search</a>
           </td>
         </tr>
   </div>
 
   <% if @filter.results && @filter.display %>
-    <div id="filter-result" class="page-split-right">
+    <div class="page-split-right">
+      <div id="content">
 
-      <% if @filter.name %>
-        <p>
-          <span class="h3"><%= h @filter.name -%></span>
-          <% if @filter.description.present? %>
-            - <span><%= h @filter.description -%></span>
-          <% end %>
-        </p>
-      <% end %>
+        <% if @filter.name %>
+          <p>
+            <span class="h3"><%= h @filter.name -%></span>
+            <% if @filter.description.present? %>
+              - <span><%= h @filter.description -%></span>
+            <% end %>
+          </p>
+        <% end %>
 
-      <%
-         edit_mode = (params[:edit]=='true')
-         unless edit_mode
-      %>
-        <table class="width100">
-          <tr>
-            <td class="left">
-              Display as:
-              <% MeasureFilterDisplay.keys.each do |display_key| %>
-                <%= link_to_if display_key!=@filter.display.key, display_key, params.merge(:action => 'search', :display => display_key, :id => @filter.id) -%>
-              <% end %>
-            <td class="right">
-              <a id="edit" href="<%= url_for params.merge({:edit => true, :id => @filter.id}) -%>" class="button"><%= message('configure') -%></a>
-              <% if logged_in? %>
-                <% if @filter.id==nil || @filter.user_id==current_user.id %>
-                  <a id="save" href="<%= url_for params.merge({:action => 'save_form', :id => @filter.id}) -%>" class="button open-modal"><%= message('save') -%></a>
+        <%
+           edit_mode = (params[:edit]=='true')
+           unless edit_mode
+        %>
+          <table class="width100">
+            <tr>
+              <td class="left">
+                Display as:
+                <% MeasureFilterDisplay.keys.each do |display_key| %>
+                  <%= link_to_if display_key!=@filter.display.key, display_key, params.merge(:action => 'search', :display => display_key, :id => @filter.id) -%>
                 <% end %>
-                <% if @filter.id %>
-                  <a id="copy" href="<%= url_for params.merge({:action => 'copy_form', :id => @filter.id}) -%>" class="button open-modal"><%= message('copy') -%></a>
+              <td class="right">
+                <a id="edit" href="<%= url_for params.merge({:edit => true, :id => @filter.id}) -%>" class="button"><%= message('configure') -%></a>
+                <% if logged_in? %>
+                  <% if @filter.id==nil || @filter.user_id==current_user.id %>
+                    <a id="save" href="<%= url_for params.merge({:action => 'save_form', :id => @filter.id}) -%>" class="button open-modal"><%= message('save') -%></a>
+                  <% end %>
+                  <% if @filter.id %>
+                    <a id="copy" href="<%= url_for params.merge({:action => 'copy_form', :id => @filter.id}) -%>" class="button open-modal"><%= message('copy') -%></a>
+                  <% end %>
                 <% end %>
-              <% end %>
-              </tr>
-        </table>
-      <% end %>
-      <% if @filter.security_exclusions %>
-        <p class="notes"><%= message('results_not_display_due_to_security') -%></p>
-      <% end %>
-      <%= render :partial => "measures/display_#{@filter.display.class::KEY}", :locals => {:edit_mode => edit_mode} -%>
+                </tr>
+          </table>
+        <% end %>
+        <% if @filter.security_exclusions %>
+          <p class="notes"><%= message('results_not_display_due_to_security') -%></p>
+        <% end %>
+        <%= render :partial => "measures/display_#{@filter.display.class::KEY}", :locals => {:edit_mode => edit_mode} -%>
+      </div>
     </div>
   <% end %>
-
 </div>
\ No newline at end of file
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/system_measure_filters/index.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/system_measure_filters/index.html.erb
deleted file mode 100644 (file)
index 611351a..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-<h2><%= h message('measure_filter.title_system_filters') %></h2>
-<table class="data marginbottom10" id="system-filters">
-  <thead>
-  <tr>
-    <th><%= message('name') -%></th>
-    <th><%= message('shared_by') -%></th>
-    <th class="right"><%= message('operations') -%></th>
-  </tr>
-  </thead>
-  <tbody>
-  <% if @system_filters.empty? %>
-    <tr class="even">
-      <td colspan="3"><%= message('filters.no_filters') -%></td>
-    </tr>
-  <% else %>
-    <% @system_filters.each do |filter| %>
-      <tr id="system-<%= filter.name.parameterize -%>" class="<%= cycle('even', 'odd', :name => 'system-filters') -%>">
-        <td>
-          <%= link_to h(filter.name), :controller => 'measures', :action => 'filter', :id => filter.id -%>
-          <% if filter.description %>
-            <div><%= h filter.description -%></div>
-          <% end %>
-        </td>
-        <td>
-          <%= filter.user ? h(filter.user.name) : '-' -%>
-        </td>
-        <td class="thin nowrap right">
-          <%=  link_to message('measure_filter.remove_from_system'), {:action => :remove, :id => filter.id}, {:class => 'button', :method => :post} -%>
-        </td>
-      </tr>
-    <% end %>
-  <% end %>
-  </tbody>
-</table>
-
-<br/>
-
-<h2><%= h message('measure_filter.title_shared_filters') %></h2>
-<table class="data" id="shared-filters">
-  <thead>
-  <tr>
-    <th><%= message('name') -%></th>
-    <th><%= message('shared_by') -%></th>
-    <th class="right"><%= message('operations') -%></th>
-  </tr>
-  </thead>
-  <tbody>
-  <% if @shared_filters.empty? %>
-    <tr class="even">
-      <td colspan="4"><%= message('filters.no_filters') -%></td>
-    </tr>
-  <% else %>
-    <% @shared_filters.each do |filter| %>
-      <tr id="shared-<%= filter.name.parameterize -%>" class="<%= cycle('even', 'odd', :name => 'shared-filters') -%>">
-        <td>
-          <%= link_to h(filter.name), :controller => 'measures', :action => 'filter', :id => filter.id -%>
-          <% if filter.description %>
-            <div><%= h filter.description -%></div>
-          <% end %>
-        </td>
-        <td>
-          <%= filter.user ? h(filter.user.name) : '-' -%>
-        </td>
-        <td class="thin nowrap right">
-          <%=  link_to message('measure_filter.add_to_system'), {:action => :add, :id => filter.id}, {:class => 'button', :method => :post} -%>
-        </td>
-      </tr>
-    <% end %>
-  <% end %>
-  </tbody>
-</table>
index b7066509f5fd10bf09e8e1836a7003e2a9216872..30f5210435a97b1027e1b60039e5eb781f6ce6fe 100644 (file)
@@ -27,7 +27,6 @@ class CreateMeasureFilters < ActiveRecord::Migration
       t.column 'name', :string, :null => false, :limit => 100
       t.column 'user_id', :integer, :null => true
       t.column 'shared', :boolean, :default => false, :null => false
-      t.column 'system', :boolean
       t.column 'description', :string, :null => true, :limit => 4000
       t.column 'data', :text, :null => true
       t.timestamps
index ca5b45c4422fd70891195e5464ee6fbc532f6ff3..de458816e190a2b98f3abed022319ab80288bd37 100644 (file)
@@ -57,13 +57,12 @@ class MoveExistingMeasureFilters < ActiveRecord::Migration
     new_filter = MeasureFilter.new
     new_filter.name = old_filter.name
     new_filter.user_id = old_filter.user_id
-    new_filter.system = old_filter.user_id.nil?
     new_filter.shared = (old_filter.shared || old_filter.user_id.nil?)
     data = []
     data << 'onFavourites=true' if old_filter.favourites
     data << "baseId=#{old_filter.resource_id}" if old_filter.resource_id
     data << "pageSize=#{old_filter.page_size}" if old_filter.page_size
-    data << "display=#{old_filter.default_value || 'list'}"
+    data << "display=#{old_filter.default_view || 'list'}"
 
     columns = []
     asc = nil
index caebd92a378b5918e449cca16ff7b68eab65f8a6..3b23ed5a9d02782ecfcc304de84ad185eb692e2c 100644 (file)
@@ -218,11 +218,6 @@ body, a {
   margin: 0 8px;
 }
 
-#content {
-  padding-top: 8px;
-  width: auto;
-}
-
 #sb {
   width: 150px;
   position: absolute;
@@ -302,22 +297,23 @@ body, a {
   min-width: 180px;
   width: 180px;
   margin: 0;
-  -moz-box-sizing: border-box;
   display: table-cell;
   vertical-align: top;
   background-color: #EFEFEF;
   border: 1px solid #CCC;
   color: #666;
   line-height: 1.1em;
-  padding: 10px;
+  border-top: none;
+  border-left: none;
+  padding: 10px 5px;
 }
 
 .page-split-right {
   position: relative;
-  padding: 10px 0 0 10px;
   -moz-box-sizing: border-box;
   display: table-cell;
   margin: 0;
   vertical-align: top;
   width: 100%;
+  padding: 0 0 0 10px;
 }
\ No newline at end of file
index 698d1165c0e7041a3fbaefe4d50052f02d39dddf..fec5df6f81f3a5a288d3d6df350cacb12cc96100 100644 (file)
@@ -2268,7 +2268,7 @@ td.spacer-top {
 }
 
 select:not([multiple]) {
-  padding: 2px 5px;
+  padding: 1px 3px;
 }
 
 select.small-width {
@@ -2386,39 +2386,4 @@ textarea.width100 {
 
 .property table.data > thead > tr > th {
   vertical-align: top;
-}
-
-.nav-pills:before, .nav-pills:after {
-  content: "";
-  display: table;
-  line-height: 0;
-}
-
-.nav-pills:after {
-  clear: both;
-}
-
-.nav-pills > li {
-  float: left;
-}
-
-.nav-pills > li > a {
-  line-height: 14px;
-  margin-right: 2px;
-  padding-left: 10px;
-  padding-right: 10px;
-  display: block;
-}
-
-.nav-pills > li > a {
-  border-radius: 5px 5px 5px 5px;
-  margin-bottom: 2px;
-  margin-top: 2px;
-  padding-bottom: 6px;
-  padding-top: 6px;
-}
-
-.nav-pills > .active > a, .nav-pills > .active > a:hover {
-  background-color: #4b9fd5;
-  color: #FFFFFF;
 }
\ No newline at end of file