diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index ce2e39fa..ab1cb3e1 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -539,6 +539,18 @@ class ProjectsController < ApplicationController
end
end
+ def search
+ @token = params[:token]
+ @scope = params[:scope] || (params[:submit] ? [] : %w(issues news documents) )
+
+ if @token and @token.length > 2
+ @results = []
+ @results += @project.issues.find(:all, :include => :author, :conditions => ["issues.subject like ?", "%#{@token}%"] ) if @scope.include? 'issues'
+ @results += @project.news.find(:all, :conditions => ["news.title like ?", "%#{@token}%"], :include => :author ) if @scope.include? 'news'
+ @results += @project.documents.find(:all, :conditions => ["title like ?", "%#{@token}%"] ) if @scope.include? 'documents'
+ end
+ end
+
private
# Find project of id params[:id]
# if not found, redirect to project list
diff --git a/app/views/layouts/base.rhtml b/app/views/layouts/base.rhtml
index b359898f..53c346dc 100644
--- a/app/views/layouts/base.rhtml
+++ b/app/views/layouts/base.rhtml
@@ -93,6 +93,7 @@
<%= link_to l(:label_document_plural), {:controller => 'projects', :action => 'list_documents', :id => @project }, :class => "menuItem" %>
<%= link_to l(:label_member_plural), {:controller => 'projects', :action => 'list_members', :id => @project }, :class => "menuItem" %>
<%= link_to l(:label_attachment_plural), {:controller => 'projects', :action => 'list_files', :id => @project }, :class => "menuItem" %>
+ <%= link_to l(:label_search), {:controller => 'projects', :action => 'search', :id => @project }, :class => "menuItem" %>
<%= link_to l(:label_repository), {:controller => 'repositories', :action => 'show', :id => @project}, :class => "menuItem" if @project.repository and !@project.repository.new_record? %>
<%= link_to_if_authorized l(:label_settings), {:controller => 'projects', :action => 'settings', :id => @project }, :class => "menuItem" %>
@@ -116,6 +117,7 @@
<%= link_to l(:label_document_plural), :controller => 'projects', :action => 'list_documents', :id => @project %>
<%= link_to l(:label_member_plural), :controller => 'projects', :action => 'list_members', :id => @project %>
<%= link_to l(:label_attachment_plural), :controller => 'projects', :action => 'list_files', :id => @project %>
+ <%= link_to l(:label_search), :controller => 'projects', :action => 'search', :id => @project %>
<%= link_to l(:label_repository), :controller => 'repositories', :action => 'show', :id => @project if @project.repository and !@project.repository.new_record? %>
<%= link_to_if_authorized l(:label_settings), :controller => 'projects', :action => 'settings', :id => @project %>
diff --git a/app/views/projects/search.rhtml b/app/views/projects/search.rhtml
new file mode 100644
index 00000000..32e486fe
--- /dev/null
+++ b/app/views/projects/search.rhtml
@@ -0,0 +1,32 @@
+<%= l(:label_search) %>
+
+
+<% form_tag({:action => 'search', :id => @project}, :method => :get) do %>
+
<%= text_field_tag 'token', @token, :size => 30 %>
+<%= check_box_tag 'scope[]', 'issues', (@scope.include? 'issues') %>
+<%= check_box_tag 'scope[]', 'news', (@scope.include? 'news') %>
+<%= check_box_tag 'scope[]', 'documents', (@scope.include? 'documents') %>
+<%= submit_tag l(:button_submit), :name => 'submit' %>
+<% end %>
+
+
+<% if @results %>
+ <%= lwr(:label_result, @results.length) %>
+
+ <% @results.each do |e| %>
+
+ <% if e.is_a? Issue %>
+ <%= link_to "#{e.tracker.name} ##{e.id}", :controller => 'issues', :action => 'show', :id => e %>: <%= highlight(h(e.subject), @token) %>
+ <%= e.author.name %>, <%= format_time(e.created_on) %>
+ <% elsif e.is_a? News %>
+ <%=l(:label_news)%>: <%= link_to highlight(h(e.title), @token), :controller => 'news', :action => 'show', :id => e %>
+ <% unless e.summary.empty? %><%=h e.summary %>
<% end %>
+ <%= e.author.name %>, <%= format_time(e.created_on) %>
+ <% elsif e.is_a? Document %>
+ <%=l(:label_document)%>: <%= link_to highlight(h(e.title), @token), :controller => 'documents', :action => 'show', :id => e %>
+ <%= format_time(e.created_on) %>
+ <% end %>
+
+ <% end %>
+
+<% end %>
\ No newline at end of file
diff --git a/db/migrate/025_add_search_permission.rb b/db/migrate/025_add_search_permission.rb
new file mode 100644
index 00000000..212a4dc5
--- /dev/null
+++ b/db/migrate/025_add_search_permission.rb
@@ -0,0 +1,9 @@
+class AddSearchPermission < ActiveRecord::Migration
+ def self.up
+ Permission.create :controller => "projects", :action => "search", :description => "label_search", :sort => 130, :is_public => true, :mail_option => 0, :mail_enabled => 0
+ end
+
+ def self.down
+ Permission.find_by_controller_and_action('projects', 'roadmap').destroy
+ end
+end
diff --git a/lang/de.yml b/lang/de.yml
index 2bee78a3..4339cad9 100644
--- a/lang/de.yml
+++ b/lang/de.yml
@@ -315,6 +315,9 @@ label_sort_higher: Aufzurichten
label_sort_lower: Herabzusteigen
label_sort_lowest: Letzter
label_roadmap: Roadmap
+label_search: Suche
+label_result: %d Resultat
+label_result_plural: %d Resultate
button_login: Einloggen
button_submit: Einreichen
diff --git a/lang/en.yml b/lang/en.yml
index 0696bda5..27e3cb77 100644
--- a/lang/en.yml
+++ b/lang/en.yml
@@ -315,6 +315,9 @@ label_sort_higher: Move up
label_sort_lower: Move down
label_sort_lowest: Move to bottom
label_roadmap: Roadmap
+label_search: Search
+label_result: %d result
+label_result_plural: %d results
button_login: Login
button_submit: Submit
diff --git a/lang/es.yml b/lang/es.yml
index 9e7cbe9d..d09f58bb 100644
--- a/lang/es.yml
+++ b/lang/es.yml
@@ -315,6 +315,9 @@ label_sort_higher: Subir
label_sort_lower: Bajar
label_sort_lowest: Último
label_roadmap: Roadmap
+label_search: Búsqueda
+label_result: %d resultado
+label_result_plural: %d resultados
button_login: Conexión
button_submit: Someter
diff --git a/lang/fr.yml b/lang/fr.yml
index 77cd839d..30a4fb2d 100644
--- a/lang/fr.yml
+++ b/lang/fr.yml
@@ -315,6 +315,9 @@ label_sort_higher: Remonter
label_sort_lower: Descendre
label_sort_lowest: Descendre en dernier
label_roadmap: Roadmap
+label_search: Recherche
+label_result: %d résultat
+label_result_plural: %d résultats
button_login: Connexion
button_submit: Soumettre
diff --git a/lang/ja.yml b/lang/ja.yml
index 93d9e766..7336c578 100644
--- a/lang/ja.yml
+++ b/lang/ja.yml
@@ -316,6 +316,9 @@ label_sort_higher: 上へ
label_sort_lower: 下へ
label_sort_lowest: 一番下へ
label_roadmap: ロードマップ
+label_search: Search
+label_result: %d result
+label_result_plural: %d results
button_login: ログイン
button_submit: 変更
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
index 2f20c8e9..aaf332a1 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -243,6 +243,8 @@ legend {color: #505050;}
hr { border:none; border-bottom: dotted 1px #c0c0c0; }
table p {margin:0; padding:0;}
+strong.highlight { background-color: #FCFD8D;}
+
div.square {
border: 1px solid #999;
float: left;