added a simple search engine. left to do:
- full content search (only subject/titles for now) - pagination - results presentation improvement git-svn-id: http://redmine.rubyforge.org/svn/trunk@279 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
93f07c78d6
commit
75324e4859
|
@ -539,6 +539,18 @@ class ProjectsController < ApplicationController
|
||||||
end
|
end
|
||||||
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
|
private
|
||||||
# Find project of id params[:id]
|
# Find project of id params[:id]
|
||||||
# if not found, redirect to project list
|
# if not found, redirect to project list
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
<%= link_to l(:label_document_plural), {:controller => 'projects', :action => 'list_documents', :id => @project }, :class => "menuItem" %>
|
<%= 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_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_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 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" %>
|
<%= link_to_if_authorized l(:label_settings), {:controller => 'projects', :action => 'settings', :id => @project }, :class => "menuItem" %>
|
||||||
</div>
|
</div>
|
||||||
|
@ -116,6 +117,7 @@
|
||||||
<li><%= link_to l(:label_document_plural), :controller => 'projects', :action => 'list_documents', :id => @project %></li>
|
<li><%= link_to l(:label_document_plural), :controller => 'projects', :action => 'list_documents', :id => @project %></li>
|
||||||
<li><%= link_to l(:label_member_plural), :controller => 'projects', :action => 'list_members', :id => @project %></li>
|
<li><%= link_to l(:label_member_plural), :controller => 'projects', :action => 'list_members', :id => @project %></li>
|
||||||
<li><%= link_to l(:label_attachment_plural), :controller => 'projects', :action => 'list_files', :id => @project %></li>
|
<li><%= link_to l(:label_attachment_plural), :controller => 'projects', :action => 'list_files', :id => @project %></li>
|
||||||
|
<li><%= link_to l(:label_search), :controller => 'projects', :action => 'search', :id => @project %></li>
|
||||||
<li><%= link_to l(:label_repository), :controller => 'repositories', :action => 'show', :id => @project if @project.repository and !@project.repository.new_record? %></li>
|
<li><%= link_to l(:label_repository), :controller => 'repositories', :action => 'show', :id => @project if @project.repository and !@project.repository.new_record? %></li>
|
||||||
<li><%= link_to_if_authorized l(:label_settings), :controller => 'projects', :action => 'settings', :id => @project %></li>
|
<li><%= link_to_if_authorized l(:label_settings), :controller => 'projects', :action => 'settings', :id => @project %></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
<h2><%= l(:label_search) %></h2>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<% form_tag({:action => 'search', :id => @project}, :method => :get) do %>
|
||||||
|
<p><%= text_field_tag 'token', @token, :size => 30 %>
|
||||||
|
<%= check_box_tag 'scope[]', 'issues', (@scope.include? 'issues') %> <label><%= l(:label_issue_plural) %></label>
|
||||||
|
<%= check_box_tag 'scope[]', 'news', (@scope.include? 'news') %> <label><%= l(:label_news_plural) %></label>
|
||||||
|
<%= check_box_tag 'scope[]', 'documents', (@scope.include? 'documents') %> <label><%= l(:label_document_plural) %></label></p>
|
||||||
|
<%= submit_tag l(:button_submit), :name => 'submit' %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<% if @results %>
|
||||||
|
<h3><%= lwr(:label_result, @results.length) %></h3>
|
||||||
|
<ul>
|
||||||
|
<% @results.each do |e| %>
|
||||||
|
<li><p>
|
||||||
|
<% if e.is_a? Issue %>
|
||||||
|
<%= link_to "#{e.tracker.name} ##{e.id}", :controller => 'issues', :action => 'show', :id => e %>: <%= highlight(h(e.subject), @token) %><br />
|
||||||
|
<i><%= e.author.name %>, <%= format_time(e.created_on) %></i>
|
||||||
|
<% elsif e.is_a? News %>
|
||||||
|
<%=l(:label_news)%>: <%= link_to highlight(h(e.title), @token), :controller => 'news', :action => 'show', :id => e %><br />
|
||||||
|
<% unless e.summary.empty? %><%=h e.summary %><br /><% end %>
|
||||||
|
<i><%= e.author.name %>, <%= format_time(e.created_on) %></i>
|
||||||
|
<% elsif e.is_a? Document %>
|
||||||
|
<%=l(:label_document)%>: <%= link_to highlight(h(e.title), @token), :controller => 'documents', :action => 'show', :id => e %><br />
|
||||||
|
<i><%= format_time(e.created_on) %></i>
|
||||||
|
<% end %>
|
||||||
|
</p></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
<% end %>
|
|
@ -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
|
|
@ -315,6 +315,9 @@ label_sort_higher: Aufzurichten
|
||||||
label_sort_lower: Herabzusteigen
|
label_sort_lower: Herabzusteigen
|
||||||
label_sort_lowest: Letzter
|
label_sort_lowest: Letzter
|
||||||
label_roadmap: Roadmap
|
label_roadmap: Roadmap
|
||||||
|
label_search: Suche
|
||||||
|
label_result: %d Resultat
|
||||||
|
label_result_plural: %d Resultate
|
||||||
|
|
||||||
button_login: Einloggen
|
button_login: Einloggen
|
||||||
button_submit: Einreichen
|
button_submit: Einreichen
|
||||||
|
|
|
@ -315,6 +315,9 @@ label_sort_higher: Move up
|
||||||
label_sort_lower: Move down
|
label_sort_lower: Move down
|
||||||
label_sort_lowest: Move to bottom
|
label_sort_lowest: Move to bottom
|
||||||
label_roadmap: Roadmap
|
label_roadmap: Roadmap
|
||||||
|
label_search: Search
|
||||||
|
label_result: %d result
|
||||||
|
label_result_plural: %d results
|
||||||
|
|
||||||
button_login: Login
|
button_login: Login
|
||||||
button_submit: Submit
|
button_submit: Submit
|
||||||
|
|
|
@ -315,6 +315,9 @@ label_sort_higher: Subir
|
||||||
label_sort_lower: Bajar
|
label_sort_lower: Bajar
|
||||||
label_sort_lowest: Último
|
label_sort_lowest: Último
|
||||||
label_roadmap: Roadmap
|
label_roadmap: Roadmap
|
||||||
|
label_search: Búsqueda
|
||||||
|
label_result: %d resultado
|
||||||
|
label_result_plural: %d resultados
|
||||||
|
|
||||||
button_login: Conexión
|
button_login: Conexión
|
||||||
button_submit: Someter
|
button_submit: Someter
|
||||||
|
|
|
@ -315,6 +315,9 @@ label_sort_higher: Remonter
|
||||||
label_sort_lower: Descendre
|
label_sort_lower: Descendre
|
||||||
label_sort_lowest: Descendre en dernier
|
label_sort_lowest: Descendre en dernier
|
||||||
label_roadmap: Roadmap
|
label_roadmap: Roadmap
|
||||||
|
label_search: Recherche
|
||||||
|
label_result: %d résultat
|
||||||
|
label_result_plural: %d résultats
|
||||||
|
|
||||||
button_login: Connexion
|
button_login: Connexion
|
||||||
button_submit: Soumettre
|
button_submit: Soumettre
|
||||||
|
|
|
@ -316,6 +316,9 @@ label_sort_higher: 上へ
|
||||||
label_sort_lower: 下へ
|
label_sort_lower: 下へ
|
||||||
label_sort_lowest: 一番下へ
|
label_sort_lowest: 一番下へ
|
||||||
label_roadmap: ロードマップ
|
label_roadmap: ロードマップ
|
||||||
|
label_search: Search
|
||||||
|
label_result: %d result
|
||||||
|
label_result_plural: %d results
|
||||||
|
|
||||||
button_login: ログイン
|
button_login: ログイン
|
||||||
button_submit: 変更
|
button_submit: 変更
|
||||||
|
|
|
@ -243,6 +243,8 @@ legend {color: #505050;}
|
||||||
hr { border:none; border-bottom: dotted 1px #c0c0c0; }
|
hr { border:none; border-bottom: dotted 1px #c0c0c0; }
|
||||||
table p {margin:0; padding:0;}
|
table p {margin:0; padding:0;}
|
||||||
|
|
||||||
|
strong.highlight { background-color: #FCFD8D;}
|
||||||
|
|
||||||
div.square {
|
div.square {
|
||||||
border: 1px solid #999;
|
border: 1px solid #999;
|
||||||
float: left;
|
float: left;
|
||||||
|
|
Loading…
Reference in New Issue