Skip to content

Commit 3a4fb33

Browse files
committed
Merge pull request edavis10#3 from NEXSTEP/master
some enchancements and fixes
2 parents a1f3b49 + 8e36a14 commit 3a4fb33

15 files changed

Lines changed: 143 additions & 73 deletions

app/controllers/questions_controller.rb

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@ def user_issue_filter
1414
end
1515

1616
def autocomplete_for_user_login
17-
if params[:issue_id]
17+
if params[:issue_id] && Setting.plugin_question_plugin[:only_members] == "1"
1818
@issue = Issue.find_by_id(params[:issue_id])
19-
base = issue.project.users
19+
base = @issue.project.users
2020
else
21-
User
21+
base = User
2222
end
23-
if params[:user]
24-
@users = base.active.all(:conditions => ["LOWER(login) LIKE :user OR LOWER(firstname) LIKE :user OR LOWER(lastname) LIKE :user", {:user => params[:user]+"%" }],
23+
q = (params[:q] || params[:term] || params[:user]).to_s.strip.downcase
24+
if q.present?
25+
@users = base.active.all(:conditions => ["LOWER(login) LIKE :user OR LOWER(firstname) LIKE :user OR LOWER(lastname) LIKE :user", {:user => q + "%" }],
2526
:limit => 10,
2627
:order => 'login ASC')
2728
end
@@ -35,7 +36,7 @@ def autocomplete_for_user_login
3536
def new_filter_for_questions_assigned_to(user_id)
3637
@project = Project.find(params[:project]) unless params[:project].nil?
3738

38-
@query = Query.new(:name => "_",
39+
@query = (ActiveSupport::Dependencies::search_for_file('issue_query') ? IssueQuery : Query).new(:name => "_",
3940
:filters => {'status_id' => {:operator => '*', :values => [""]}}
4041
)
4142
@query.project = @project unless params[:project].nil?

app/models/question_mailer.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ class QuestionMailer < Mailer
44
def asked_question(journal)
55
question = journal.question
66

7-
from = question.author ? "#{question.author.name} (#{l(:field_system_name)}) <#{Setting.mail_from}>" : nil
7+
from = question.author ? "#{question.author.name} (#{l(:field_system_name)} - #{I18n.t(:text_question)}) <#{Setting.mail_from}>" : nil
88
to = question.assigned_to ? question.assigned_to.mail : nil
9-
subject = "[Frage #{question.issue.project.name} ##{question.issue.id}] #{question.issue.subject}"
9+
subject = "[#{question.issue.project.name} ##{question.issue.id}] #{question.issue.subject}"
1010

1111
@from = from
1212
@question = question
@@ -23,11 +23,11 @@ def asked_question(journal)
2323
end
2424

2525
def answered_question(question, closing_journal)
26-
from = question.assigned_to ? "#{question.assigned_to.name} (#{l(:field_system_name)}) <#{Setting.mail_from}>" : nil
26+
from = question.assigned_to ? "#{question.assigned_to.name} (#{l(:field_system_name)} - #{I18n.t(:text_answer)}) <#{Setting.mail_from}>" : nil
2727
to = question.author ? question.author.mail : nil
28-
subject = "[#{I18n.t(:text_answer)} #{question.issue.project.name} ##{question.issue.id}] #{question.issue.subject}"
28+
subject = "[#{question.issue.project.name} ##{question.issue.id}] #{question.issue.subject}"
2929

30-
@from = "#{question.assigned_to.name} (#{l(:field_system_name)}) <#{Setting.mail_from}>" unless question.assigned_to.nil?
30+
@from = "#{question.assigned_to.name} (#{l(:field_system_name)} - #{I18n.t(:text_answer)}) <#{Setting.mail_from}>" unless question.assigned_to.nil?
3131
@question = question
3232
@issue = question.issue
3333
@journal = closing_journal
Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,7 @@
1-
<ul>
2-
<li><span style="font-weight: bold;"><%= l(:text_anyone) %></span></li>
3-
4-
<% if @issue %>
5-
<li>
6-
<span style="font-weight: bold;"><%= l(:field_issue) %> <%= l(:field_author) %></span> -
7-
<span class="field"><%= h @issue.author.login %></span>
8-
<span class="informal"> (<%= h(@issue.author.name(:lastname_coma_firstname)) %>)</span>
9-
</li>
10-
<% if @issue.assigned_to %>
11-
<li>
12-
<span style="font-weight: bold;"><%= l(:field_issue) %> <%= l(:field_assigned_to) %></span> -
13-
<span class="field"><%= h @issue.assigned_to.login %></span>
14-
<span class="informal"> (<%= h(@issue.assigned_to.name(:lastname_coma_firstname)) %>)</span>
15-
</li>
16-
<% end %>
17-
<% end %>
18-
19-
<% @users.each do |user| -%>
20-
<li><span class="field"><%= h user.login %></span><span class="informal"> (<%= h(user.name(:lastname_coma_firstname)) %>)</span></li>
21-
<% end -%>
22-
</ul>
1+
<%= raw @users.map {|user| {
2+
'id' => user.login,
3+
'label' => "#{user.login}: #{user.name(:lastname_coma_firstname)}",
4+
'value' => user.login
5+
}
6+
}.to_json
7+
%>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<p>
2+
<%= label_tag "settings[only_members]", l(:label_question_plugin_only_members) %>
3+
<%= select_tag 'settings[only_members]', options_for_select([
4+
[l(:text_question_all), 0],
5+
[l(:text_question_project_member), 1],
6+
], Setting.plugin_question_plugin[:only_members]) %>
7+
</p>
8+
<p>
9+
<%= label_tag "settings[close_all_questions]", l(:label_question_plugin_close_settings) %>
10+
<%= select_tag 'settings[close_all_questions]', options_for_select([
11+
[l(:text_question_close_all), 1],
12+
[l(:text_question_close_selected), 0],
13+
], Setting.plugin_question_plugin[:close_all_questions]) %>
14+
15+
</p>

config/locales/en.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,10 @@ en:
2020
text_questions_asked_by_me: "Questions asked by me"
2121
question_reminder_subject: "%{count} open question(s)"
2222
question_reminder_body: "%{count} open questions(s) that are assigned to you:"
23-
23+
label_question_plugin_only_members: Question can be assigned to
24+
text_question_all: Any user
25+
text_question_project_member: Project members only
26+
label_question_plugin_close_settings: When add comment close
27+
text_question_close_all: all opened questions in issue
28+
text_question_close_selected: only selected question
29+
field_question_to_answer: Answer question

config/locales/ru.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
ru:
2+
field_question_assign_to: Спросить у
3+
field_question_assigned_to: Вопрос к
4+
field_question_asked_by: Вопрос задал
5+
field_formatted_questions: Вопросы
6+
text_question: Вопрос
7+
text_question_answered: Вопрос отвечен
8+
text_answer: Ответ
9+
text_anyone: Все
10+
text_question_for: Вопрос к
11+
text_question_for_anyone: Вопрос ко всем
12+
text_questions_for_me: Вопросы ко мне
13+
text_question_asked: Вопрос задан
14+
text_question_remove: "<< Удалить вопрос >>"
15+
question_text_asked_by: "Автор вопроса"
16+
question_text_assigned_to: "Вопрос назначен"
17+
question_text_created_on: "Создан"
18+
question_text_ratio_questions_answered: "{{ratio}} вопросов отвечено"
19+
field_journal: "Journal"
20+
text_questions_asked_by_me: "Вопросы заданные мной"
21+
question_reminder_subject: "%{count} не отвеченных вопросов"
22+
question_reminder_body: "%{count} не отвеченных вопросов заданных Вам:"
23+
label_question_plugin_only_members: Вопрос может быть задан
24+
text_question_all: Любому пользователю
25+
text_question_project_member: Только участникам проекта
26+
label_question_plugin_close_settings: При добавлении комментария закрывать
27+
text_question_close_all: все неотвеченные вопросы в задаче
28+
text_question_close_selected: только выбранный вопрос
29+
field_question_to_answer: Ответ на вопрос

config/routes.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
if Rails::VERSION::MAJOR < 3
22
ActionController::Routing::Routes.draw do |map|
3-
map.connect 'questions/autocomplete_for_user_login/project/:id/issue/:issue_id',:controller=> 'questions', :action=> 'autocomplete_for_user_login'
3+
map.connect 'questions/autocomplete_for_user_login/project/:id/issue/:issue_id', :controller=> 'questions', :action=> 'autocomplete_for_user_login'
44
map.connect 'questions/my_issue_filter(/project/:project)' ,:controller=> 'questions', :action=> 'my_issue_filter'
55
map.connect 'questions/user_issue_filter/user/:user_id' ,:controller=> 'questions', :action=> 'user_issue_filter'
66
end

init.rb

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,21 @@
1818
require_dependency 'journal'
1919
Journal.send(:include, QuestionJournalPatch) unless Journal.included_modules.include? QuestionJournalPatch
2020

21-
require_dependency 'queries_helper'
22-
QueriesHelper.send(:include, QuestionQueriesHelperPatch) unless QueriesHelper.included_modules.include? QuestionQueriesHelperPatch
23-
24-
require_dependency 'query'
25-
Query.send(:include, QuestionQueryPatch) unless Query.included_modules.include? QuestionQueryPatch
21+
if ActiveSupport::Dependencies::search_for_file('issue_queries_helper')
22+
require_dependency 'issue_queries_helper'
23+
IssueQueriesHelper.send(:include, QuestionQueriesHelperPatch) unless QueriesHelper.included_modules.include? QuestionQueriesHelperPatch
24+
else
25+
require_dependency 'queries_helper'
26+
QueriesHelper.send(:include, QuestionQueriesHelperPatch) unless QueriesHelper.included_modules.include? QuestionQueriesHelperPatch
27+
end
28+
29+
if ActiveSupport::Dependencies::search_for_file('issue_query')
30+
require_dependency 'issue_query'
31+
IssueQuery.send(:include, QuestionQueryPatch) unless Query.included_modules.include? QuestionQueryPatch
32+
else
33+
require_dependency 'query'
34+
Query.send(:include, QuestionQueryPatch) unless Query.included_modules.include? QuestionQueryPatch
35+
end
2636
end
2737

2838
p = Redmine::Plugin.register :question_plugin do
@@ -34,6 +44,12 @@
3444
version '0.3.0'
3545

3646
requires_redmine :version_or_higher => '2.0.0'
47+
48+
settings :default => {
49+
:only_members => 1,
50+
:close_all_questions => 1,
51+
}, :partial => 'settings/question_plugin'
52+
3753
end
3854

3955
# Ensure ActionMailer knows where to find the views for the question plugin

lib/question_active_record_relation_patch.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ def self.included(base) # :nodoc:
1010
alias_method :count_before_question, :count
1111
alias_method :sum_before_question, :sum
1212
alias_method :find_before_question, :find
13+
alias_method :all_before_question, :all
1314
alias_method :find_ids_before_question, :find_ids
1415

1516
# Override ActiveRecord::Calculations.count
@@ -30,6 +31,12 @@ def find(*args)
3031
find_before_question(*args)
3132
end
3233

34+
# Override ActiveRecord::FinderMethods.all
35+
def all(*args)
36+
scan_for_options_hash_and_add_includes_if_needed(self.klass, args)
37+
all_before_question(*args)
38+
end
39+
3340
# Override ActiveRecord::FinderMethods.find_ids
3441
def find_ids(*args)
3542
relation = scan_where_clauses_and_add_includes_if_needed
@@ -73,7 +80,7 @@ def scan_for_options_hash_and_add_includes_if_needed(klass, args)
7380
def add_questions_to_the_includes(arg)
7481
if arg[:include]
7582
# Has includes
76-
if arg[:include].is_a?(Hash)
83+
if arg[:include].is_a?(Hash) || arg[:include].is_a?(Array)
7784
# Hash includes
7885
arg[:include] << :questions
7986
else

lib/question_hooks_base.rb

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,15 @@ class QuestionHooksBase < Redmine::Hook::ViewListener
66

77
def assigned_question_html(question)
88
html = "<span class=\"question-line\">"
9-
html << " <a name=\"question-#{h(question.id)}\" href=\"#question-#{h(question.id)}\">"
10-
html << "#{l(:text_question_for)} #{question.assigned_to.to_s}"
11-
html << " </a>"
12-
html << "<span>#{avatar(question.assigned_to, { :size => 16, :class => '' })}</span> </span>" if question.assigned_to && question.assigned_to.mail
9+
html << " #{l(:text_question_for)} "
10+
html << link_to_user(question.assigned_to)
11+
html << " <span>#{avatar(question.assigned_to, { :size => 24, :class => '' })}</span> </span>" if question.assigned_to && question.assigned_to.mail
1312
html
1413
end
1514

1615
def unassigned_question_html(question)
1716
html = "<span class=\"question-line\">"
18-
html << " <a name=\"question-#{h(question.id)}\" href=\"#question-#{h(question.id)}\">"
1917
html << l(:text_question_for_anyone)
20-
html << " </a>"
2118
html << "</span>"
2219
html
2320
end

0 commit comments

Comments
 (0)