summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/helpers/my_helper.rb11
-rw-r--r--app/views/my/blocks/_issues.erb26
-rw-r--r--lib/redmine/my_page.rb1
-rw-r--r--test/functional/my_controller_test.rb54
4 files changed, 91 insertions, 1 deletions
diff --git a/app/helpers/my_helper.rb b/app/helpers/my_helper.rb
index 5181def2d..2fa127226 100644
--- a/app/helpers/my_helper.rb
+++ b/app/helpers/my_helper.rb
@@ -118,6 +118,17 @@ module MyHelper
return issues, query
end
+ def issuequery_items(settings)
+ query = IssueQuery.visible.find_by_id(settings[:query_id])
+ return unless query
+
+ query.column_names = settings[:columns] if settings[:columns].present?
+ query.sort_criteria = settings[:sort] if settings[:sort].present?
+ issues = query.issues(:limit => 10)
+
+ return issues, query
+ end
+
def news_items
News.visible.
where(:project_id => User.current.projects.map(&:id)).
diff --git a/app/views/my/blocks/_issues.erb b/app/views/my/blocks/_issues.erb
index 1b208a297..0174bac2e 100644
--- a/app/views/my/blocks/_issues.erb
+++ b/app/views/my/blocks/_issues.erb
@@ -1,5 +1,6 @@
<% issues, query = issues_items(block, settings) %>
+<% if query %>
<div class="contextual">
<%= link_to_function l(:label_options), "$('##{block}-settings').toggle();", :class => 'icon-only icon-settings', :title => l(:label_options) %>
</div>
@@ -40,3 +41,28 @@
issues_path(query.as_params.merge(:format => 'atom', :key => User.current.rss_key)),
{:title => query.name}) %>
<% end %>
+
+<% else %>
+<% visible_queries = IssueQuery.visible.sorted %>
+
+<h3>
+ <%= l(:label_issue_plural) %>
+</h3>
+
+<div id="<%= block %>-settings">
+ <%= form_tag(my_page_path, :remote => true) do %>
+ <div class="box">
+ <p>
+ <label>
+ <%= l(:label_query) %>
+ <%= select_tag 'settings[issuequery][query_id]', content_tag("option") + options_from_collection_for_select(visible_queries, :id, :name, settings[:query_id]) %>
+ </label>
+ </p>
+ </div>
+ <p>
+ <%= submit_tag l(:button_save) %>
+ </p>
+ <% end %>
+</div>
+
+<% end %>
diff --git a/lib/redmine/my_page.rb b/lib/redmine/my_page.rb
index 06f750f4e..dc9c6928f 100644
--- a/lib/redmine/my_page.rb
+++ b/lib/redmine/my_page.rb
@@ -23,6 +23,7 @@ module Redmine
'issuesassignedtome' => {:label => :label_assigned_to_me_issues, :partial => 'my/blocks/issues'},
'issuesreportedbyme' => {:label => :label_reported_issues, :partial => 'my/blocks/issues'},
'issueswatched' => {:label => :label_watched_issues, :partial => 'my/blocks/issues'},
+ 'issuequery' => {:label => :label_issue_plural, :partial => 'my/blocks/issues'},
'news' => {:label => :label_news_latest, :partial => 'my/blocks/news'},
'calendar' => {:label => :label_calendar, :partial => 'my/blocks/calendar'},
'documents' => {:label => :label_document_plural, :partial => 'my/blocks/documents'},
diff --git a/test/functional/my_controller_test.rb b/test/functional/my_controller_test.rb
index f6c9d5ab2..f6771a1f5 100644
--- a/test/functional/my_controller_test.rb
+++ b/test/functional/my_controller_test.rb
@@ -19,7 +19,7 @@ require File.expand_path('../../test_helper', __FILE__)
class MyControllerTest < Redmine::ControllerTest
fixtures :users, :email_addresses, :user_preferences, :roles, :projects, :members, :member_roles,
- :issues, :issue_statuses, :trackers, :enumerations, :custom_fields, :auth_sources
+ :issues, :issue_statuses, :trackers, :enumerations, :custom_fields, :auth_sources, :queries
def setup
@request.session[:user_id] = 2
@@ -91,6 +91,58 @@ class MyControllerTest < Redmine::ControllerTest
assert_select 'table.issues.sort-by-due-date'
end
end
+
+ def test_page_with_issuequery_block_and_no_settings
+ user = User.find(2)
+ user.pref.my_page_layout = {'top' => ['issuequery']}
+ user.pref.save!
+
+ get :page
+ assert_response :success
+
+ assert_select '#block-issuequery' do
+ assert_select 'h3', :text => 'Issues'
+ assert_select 'select[name=?]', 'settings[issuequery][query_id]' do
+ assert_select 'option[value="5"]', :text => 'Open issues by priority and tracker'
+ end
+ end
+ end
+
+ def test_page_with_issuequery_block_and_selected_query
+ user = User.find(2)
+ query = IssueQuery.create!(:name => 'All issues', :user => user, :column_names => [:tracker, :subject, :status, :assigned_to])
+ user.pref.my_page_layout = {'top' => ['issuequery']}
+ user.pref.my_page_settings = {'issuequery' => {:query_id => query.id}}
+ user.pref.save!
+
+ get :page
+ assert_response :success
+
+ assert_select '#block-issuequery' do
+ # assert number of columns (columns from query + id column + checkbox column)
+ assert_select 'table.issues th', 6
+ # assert results limit
+ assert_select 'table.issues tr.issue', 10
+ assert_select 'table.issues td.assigned_to'
+ end
+ end
+
+ def test_page_with_issuequery_block_and_selected_query_and_custom_columns
+ user = User.find(2)
+ query = IssueQuery.create!(:name => 'All issues', :user => user, :column_names => [:tracker, :subject, :status, :assigned_to])
+ user.pref.my_page_layout = {'top' => ['issuequery']}
+ user.pref.my_page_settings = {'issuequery' => {:query_id => query.id, :columns => [:subject, :due_date]}}
+ user.pref.save!
+
+ get :page
+ assert_response :success
+
+ assert_select '#block-issuequery' do
+ # assert number of columns (columns from query + id column + checkbox column)
+ assert_select 'table.issues th', 4
+ assert_select 'table.issues th', :text => 'Due date'
+ end
+ end
def test_page_with_all_blocks
blocks = Redmine::MyPage.blocks.keys