OSDN Git Service

Ability to search a project and its subprojects (#1264).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 20 May 2008 20:31:04 +0000 (20:31 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 20 May 2008 20:31:04 +0000 (20:31 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1439 e93f8b46-1217-0410-a6f0-8f06a7374b81

29 files changed:
app/controllers/search_controller.rb
app/helpers/search_helper.rb
lang/bg.yml
lang/cs.yml
lang/da.yml
lang/de.yml
lang/en.yml
lang/es.yml
lang/fi.yml
lang/fr.yml
lang/he.yml
lang/it.yml
lang/ja.yml
lang/ko.yml
lang/lt.yml
lang/nl.yml
lang/no.yml
lang/pl.yml
lang/pt-br.yml
lang/pt.yml
lang/ro.yml
lang/ru.yml
lang/sr.yml
lang/sv.yml
lang/th.yml
lang/uk.yml
lang/zh-tw.yml
lang/zh.yml
test/functional/search_controller_test.rb

index d93c638..d4ef01b 100644 (file)
@@ -30,11 +30,13 @@ class SearchController < ApplicationController
     @titles_only = !params[:titles_only].nil?
     
     projects_to_search =
-      case params[:projects]
+      case params[:scope]
       when 'all'
         nil
       when 'my_projects'
         User.current.memberships.collect(&:project)
+      when 'subprojects'
+        @project ? ([ @project ] + @project.active_children) : nil
       else
         @project
       end
index 6b5a2ce..d6a2fb9 100644 (file)
@@ -39,7 +39,8 @@ module SearchHelper
   def project_select_tag
     options = [[l(:label_project_all), 'all']]
     options << [l(:label_my_projects), 'my_projects'] unless User.current.memberships.empty?
+    options << [l(:label_and_its_subprojects, @project.name), 'subprojects'] unless @project.nil? || @project.active_children.empty?
     options << [@project.name, ''] unless @project.nil?
-    select_tag('projects', options_for_select(options, params[:projects].to_s)) if options.size > 1
+    select_tag('scope', options_for_select(options, params[:scope].to_s)) if options.size > 1
   end
 end
index b341d98..224177d 100644 (file)
@@ -618,3 +618,4 @@ setting_default_projects_public: Новите проекти са публичн
 error_scm_annotate: "Обектът не съществува или не може да бъде анотиран."
 label_planning: Планиране
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index 250c602..2126553 100644 (file)
@@ -623,3 +623,4 @@ enumeration_activities: Aktivity (sledování času)
 error_scm_annotate: "Položka neexistuje nebo nemůže být komentována."
 label_planning: Plánování
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index ff2ed98..3b5ca07 100644 (file)
@@ -620,3 +620,4 @@ setting_default_projects_public: Nye projekter er offentlige som default
 error_scm_annotate: "The entry does not exist or can not be annotated."
 label_planning: Planlægning
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index 77184cf..273bad2 100644 (file)
@@ -619,3 +619,4 @@ enumeration_issue_priorities: Ticket-Prioritäten
 enumeration_doc_categories: Dokumentenkategorien
 enumeration_activities: Aktivitäten (Zeiterfassung)
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index e39aec3..892a63a 100644 (file)
@@ -291,6 +291,7 @@ label_auth_source: Authentication mode
 label_auth_source_new: New authentication mode
 label_auth_source_plural: Authentication modes
 label_subproject_plural: Subprojects
+label_and_its_subprojects: %s and its subprojects
 label_min_max_length: Min - Max length
 label_list: List
 label_date: Date
index c6eef02..26009d7 100644 (file)
@@ -621,3 +621,4 @@ setting_default_projects_public: Los proyectos nuevos son públicos por defecto
 error_scm_annotate: "No existe la entrada o no ha podido ser anotada"
 label_planning: Planificación
 text_subprojects_destroy_warning: 'Sus subprojectos: %s también se eliminarán' 
+label_and_its_subprojects: %s and its subprojects
index 1a614a1..908ef12 100644 (file)
@@ -618,3 +618,4 @@ label_overall_activity: Kokonaishistoria
 error_scm_annotate: "Merkintää ei ole tai siihen ei voi lisätä selityksiä."
 label_planning: Suunnittelu
 text_subprojects_destroy_warning: 'Tämän alaprojekti(t): %s tullaan myös poistamaan.'
+label_and_its_subprojects: %s and its subprojects
index cbdda4f..8827edd 100644 (file)
@@ -291,6 +291,7 @@ label_auth_source: Mode d'authentification
 label_auth_source_new: Nouveau mode d'authentification
 label_auth_source_plural: Modes d'authentification
 label_subproject_plural: Sous-projets
+label_and_its_subprojects: %s et ses sous-projets
 label_min_max_length: Longueurs mini - maxi
 label_list: Liste
 label_date: Date
index a611c8c..71bc5e5 100644 (file)
@@ -618,3 +618,4 @@ setting_default_projects_public: פרויקטים חדשים הינם פומבי
 error_scm_annotate: "הכניסה לא קיימת או שלא ניתן לתאר אותה."
 label_planning: תכנון
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index 3d1dea0..1771e1b 100644 (file)
@@ -618,3 +618,4 @@ setting_default_projects_public: New projects are public by default
 error_scm_annotate: "The entry does not exist or can not be annotated."
 label_planning: Planning
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index 680d298..84f27a2 100644 (file)
@@ -619,3 +619,4 @@ setting_default_projects_public: デフォルトで新しいプロジェクト
 error_scm_annotate: "エントリが存在しない、もしくはアノテートできません。"
 label_planning: 計画
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index 4281f38..ee94c40 100644 (file)
@@ -618,3 +618,4 @@ setting_default_projects_public: New projects are public by default
 error_scm_annotate: "The entry does not exist or can not be annotated."
 label_planning: Planning
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index df7cd96..a588351 100644 (file)
@@ -619,3 +619,4 @@ setting_default_projects_public: New projects are public by default
 error_scm_annotate: "The entry does not exist or can not be annotated."
 label_planning: Planning
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index e487a7a..0175513 100644 (file)
@@ -619,3 +619,4 @@ setting_default_projects_public: New projects are public by default
 error_scm_annotate: "The entry does not exist or can not be annotated."
 label_planning: Planning
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index ccfa5c9..388e51d 100644 (file)
@@ -619,3 +619,4 @@ default_activity_development: Utvikling
 enumeration_issue_priorities: Sakssprioriteringer
 enumeration_doc_categories: Dokument-kategorier
 enumeration_activities: Aktiviteter (tidssporing)
+label_and_its_subprojects: %s and its subprojects
index cf10181..bc65b62 100644 (file)
@@ -618,3 +618,4 @@ setting_default_projects_public: Nowe projekty są domyślnie publiczne
 error_scm_annotate: "Wpis nie istnieje lub nie można do niego dodawać adnotacji."
 label_planning: Planning
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index 9facd8d..b1f8d20 100644 (file)
@@ -618,3 +618,4 @@ setting_default_projects_public: New projects are public by default
 error_scm_annotate: "The entry does not exist or can not be annotated."\r
 label_planning: Planning\r
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'\r
+label_and_its_subprojects: %s and its subprojects\r
index 6f51c8e..9d05867 100644 (file)
@@ -618,3 +618,4 @@ setting_default_projects_public: New projects are public by default
 error_scm_annotate: "The entry does not exist or can not be annotated."
 label_planning: Planning
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index 59edfeb..01127f5 100644 (file)
@@ -618,3 +618,4 @@ setting_default_projects_public: New projects are public by default
 error_scm_annotate: "The entry does not exist or can not be annotated."
 label_planning: Planning
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index f690098..4f0a4bb 100644 (file)
@@ -622,3 +622,4 @@ setting_default_projects_public: Новые проекты являются пу
 error_scm_annotate: "Данные отсутствуют или не могут быть подписаны."
 label_planning: Планирование
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index d9869c3..263bd11 100644 (file)
@@ -619,3 +619,4 @@ setting_default_projects_public: New projects are public by default
 error_scm_annotate: "The entry does not exist or can not be annotated."
 label_planning: Planning
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index c0f6912..5b0c57a 100644 (file)
@@ -619,3 +619,4 @@ setting_default_projects_public: New projects are public by default
 error_scm_annotate: "The entry does not exist or can not be annotated."
 label_planning: Planning
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index 2c506c6..643ee01 100644 (file)
@@ -621,3 +621,4 @@ default_activity_development: พัฒนา
 enumeration_issue_priorities: ความสำคัญของปัญหา
 enumeration_doc_categories: ประเภทเอกสาร
 enumeration_activities: กิจกรรม (ใช้ในการติดตามเวลา)
+label_and_its_subprojects: %s and its subprojects
index a52a056..e61fc5b 100644 (file)
@@ -620,3 +620,4 @@ setting_default_projects_public: New projects are public by default
 error_scm_annotate: "The entry does not exist or can not be annotated."
 label_planning: Planning
 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
+label_and_its_subprojects: %s and its subprojects
index d91c970..b524469 100644 (file)
@@ -619,3 +619,4 @@ default_activity_development: 開發
 enumeration_issue_priorities: 項目優先權
 enumeration_doc_categories: 文件分類
 enumeration_activities: 活動 (時間追蹤)
+label_and_its_subprojects: %s and its subprojects
index c8b8097..808dd1b 100644 (file)
@@ -619,3 +619,4 @@ default_activity_development: 开发
 enumeration_issue_priorities: 问题优先级
 enumeration_doc_categories: 文档类别
 enumeration_activities: 活动(时间跟踪)
+label_and_its_subprojects: %s and its subprojects
index b02f077..1c50562 100644 (file)
@@ -37,6 +37,14 @@ class SearchControllerTest < Test::Unit::TestCase
     assert assigns(:results).include?(Changeset.find(101))
   end
   
+  def test_search_project_and_subprojects
+    get :index, :id => 1, :q => 'recipe subproject', :scope => 'subprojects', :submit => 'Search'
+    assert_response :success
+    assert_template 'index'
+    assert assigns(:results).include?(Issue.find(1))
+    assert assigns(:results).include?(Issue.find(5))
+  end
+
   def test_search_without_searchable_custom_fields
     CustomField.update_all "searchable = #{ActiveRecord::Base.connection.quoted_false}"