changeset 37:94944d00e43c

* Update to SVN trunk rev 4411
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Fri, 19 Nov 2010 13:24:41 +0000
parents 40f7cfd4df19
children 33d69fee1d99 150ceac17a8d
files .svn/all-wcprops .svn/entries app/.svn/all-wcprops app/.svn/entries app/controllers/.svn/all-wcprops app/controllers/.svn/entries app/controllers/.svn/text-base/application_controller.rb.svn-base app/controllers/.svn/text-base/calendars_controller.rb.svn-base app/controllers/.svn/text-base/context_menus_controller.rb.svn-base app/controllers/.svn/text-base/files_controller.rb.svn-base app/controllers/.svn/text-base/issue_moves_controller.rb.svn-base app/controllers/.svn/text-base/issues_controller.rb.svn-base app/controllers/.svn/text-base/my_controller.rb.svn-base app/controllers/.svn/text-base/news_controller.rb.svn-base app/controllers/.svn/text-base/previews_controller.rb.svn-base app/controllers/.svn/text-base/projects_controller.rb.svn-base app/controllers/.svn/text-base/settings_controller.rb.svn-base app/controllers/.svn/text-base/time_entry_reports_controller.rb.svn-base app/controllers/.svn/text-base/timelog_controller.rb.svn-base app/controllers/.svn/text-base/users_controller.rb.svn-base app/controllers/.svn/text-base/versions_controller.rb.svn-base app/controllers/.svn/text-base/wiki_controller.rb.svn-base app/controllers/application_controller.rb app/controllers/calendars_controller.rb app/controllers/context_menus_controller.rb app/controllers/files_controller.rb app/controllers/issue_moves_controller.rb app/controllers/issues_controller.rb app/controllers/my_controller.rb app/controllers/news_controller.rb app/controllers/previews_controller.rb app/controllers/projects_controller.rb app/controllers/settings_controller.rb app/controllers/time_entry_reports_controller.rb app/controllers/timelog_controller.rb app/controllers/users_controller.rb app/controllers/versions_controller.rb app/controllers/wiki_controller.rb app/helpers/.svn/all-wcprops app/helpers/.svn/entries app/helpers/.svn/text-base/application_helper.rb.svn-base app/helpers/.svn/text-base/gantt_helper.rb.svn-base app/helpers/.svn/text-base/issues_helper.rb.svn-base app/helpers/.svn/text-base/queries_helper.rb.svn-base app/helpers/.svn/text-base/search_helper.rb.svn-base app/helpers/.svn/text-base/settings_helper.rb.svn-base app/helpers/.svn/text-base/users_helper.rb.svn-base app/helpers/.svn/text-base/wiki_helper.rb.svn-base app/helpers/application_helper.rb app/helpers/gantt_helper.rb app/helpers/issues_helper.rb app/helpers/queries_helper.rb app/helpers/search_helper.rb app/helpers/settings_helper.rb app/helpers/users_helper.rb app/helpers/wiki_helper.rb app/models/.svn/all-wcprops app/models/.svn/entries app/models/.svn/text-base/custom_value.rb.svn-base app/models/.svn/text-base/issue.rb.svn-base app/models/.svn/text-base/journal_observer.rb.svn-base app/models/.svn/text-base/mail_handler.rb.svn-base app/models/.svn/text-base/mailer.rb.svn-base app/models/.svn/text-base/project.rb.svn-base app/models/.svn/text-base/query.rb.svn-base app/models/.svn/text-base/time_entry.rb.svn-base app/models/.svn/text-base/user.rb.svn-base app/models/.svn/text-base/wiki_content.rb.svn-base app/models/.svn/text-base/wiki_page.rb.svn-base app/models/custom_value.rb app/models/issue.rb app/models/journal_observer.rb app/models/mail_handler.rb app/models/mailer.rb app/models/project.rb app/models/query.rb app/models/repository/.svn/entries app/models/time_entry.rb app/models/user.rb app/models/wiki_content.rb app/models/wiki_page.rb app/sweepers/.svn/entries app/views/.svn/all-wcprops app/views/.svn/entries app/views/account/.svn/entries app/views/activities/.svn/entries app/views/admin/.svn/all-wcprops app/views/admin/.svn/entries app/views/admin/.svn/text-base/projects.rhtml.svn-base app/views/admin/projects.rhtml app/views/attachments/.svn/entries app/views/auth_sources/.svn/entries app/views/auto_completes/.svn/entries app/views/boards/.svn/entries app/views/calendars/.svn/all-wcprops app/views/calendars/.svn/entries app/views/calendars/.svn/text-base/show.html.erb.svn-base app/views/calendars/show.html.erb app/views/common/.svn/all-wcprops app/views/common/.svn/entries app/views/common/.svn/prop-base/403.rhtml.svn-base app/views/common/.svn/prop-base/404.rhtml.svn-base app/views/common/.svn/text-base/403.rhtml.svn-base app/views/common/.svn/text-base/404.rhtml.svn-base app/views/common/.svn/text-base/error.html.erb.svn-base app/views/common/403.rhtml app/views/common/404.rhtml app/views/common/error.html.erb app/views/context_menus/.svn/all-wcprops app/views/context_menus/.svn/entries app/views/context_menus/.svn/text-base/issues.html.erb.svn-base app/views/context_menus/issues.html.erb app/views/custom_fields/.svn/all-wcprops app/views/custom_fields/.svn/entries app/views/custom_fields/.svn/text-base/_form.rhtml.svn-base app/views/custom_fields/_form.rhtml app/views/documents/.svn/entries app/views/enumerations/.svn/entries app/views/files/.svn/all-wcprops app/views/files/.svn/entries app/views/files/.svn/text-base/index.html.erb.svn-base app/views/files/index.html.erb app/views/gantts/.svn/all-wcprops app/views/gantts/.svn/entries app/views/gantts/.svn/text-base/show.html.erb.svn-base app/views/gantts/show.html.erb app/views/groups/.svn/all-wcprops app/views/groups/.svn/entries app/views/groups/.svn/text-base/_users.html.erb.svn-base app/views/groups/_users.html.erb app/views/issue_categories/.svn/all-wcprops app/views/issue_categories/.svn/entries app/views/issue_categories/.svn/text-base/_form.rhtml.svn-base app/views/issue_categories/_form.rhtml app/views/issue_moves/.svn/all-wcprops app/views/issue_moves/.svn/entries app/views/issue_moves/.svn/text-base/new.rhtml.svn-base app/views/issue_moves/new.rhtml app/views/issue_relations/.svn/entries app/views/issue_statuses/.svn/entries app/views/issues/.svn/all-wcprops app/views/issues/.svn/entries app/views/issues/.svn/text-base/_action_menu.rhtml.svn-base app/views/issues/.svn/text-base/_form.rhtml.svn-base app/views/issues/.svn/text-base/bulk_edit.rhtml.svn-base app/views/issues/.svn/text-base/new.rhtml.svn-base app/views/issues/.svn/text-base/show.rhtml.svn-base app/views/issues/_action_menu.rhtml app/views/issues/_form.rhtml app/views/issues/bulk_edit.rhtml app/views/issues/new.rhtml app/views/issues/show.rhtml app/views/journals/.svn/entries app/views/layouts/.svn/all-wcprops app/views/layouts/.svn/entries app/views/layouts/.svn/text-base/mailer.text.html.erb.svn-base app/views/layouts/.svn/text-base/mailer.text.plain.erb.svn-base app/views/layouts/mailer.text.html.erb app/views/layouts/mailer.text.plain.erb app/views/ldap_auth_sources/.svn/entries app/views/mailer/.svn/all-wcprops app/views/mailer/.svn/entries app/views/mailer/.svn/text-base/wiki_content_added.text.html.rhtml.svn-base app/views/mailer/.svn/text-base/wiki_content_added.text.plain.rhtml.svn-base app/views/mailer/.svn/text-base/wiki_content_updated.text.html.rhtml.svn-base app/views/mailer/.svn/text-base/wiki_content_updated.text.plain.rhtml.svn-base app/views/mailer/wiki_content_added.text.html.rhtml app/views/mailer/wiki_content_added.text.plain.rhtml app/views/mailer/wiki_content_updated.text.html.rhtml app/views/mailer/wiki_content_updated.text.plain.rhtml app/views/members/.svn/entries app/views/messages/.svn/entries app/views/my/.svn/all-wcprops app/views/my/.svn/entries app/views/my/.svn/text-base/account.rhtml.svn-base app/views/my/.svn/text-base/page_layout.rhtml.svn-base app/views/my/account.rhtml app/views/my/blocks/.svn/all-wcprops app/views/my/blocks/.svn/entries app/views/my/blocks/.svn/text-base/_timelog.rhtml.svn-base app/views/my/blocks/_timelog.rhtml app/views/my/page_layout.rhtml app/views/news/.svn/all-wcprops app/views/news/.svn/entries app/views/news/.svn/text-base/_news.rhtml.svn-base app/views/news/.svn/text-base/edit.rhtml.svn-base app/views/news/.svn/text-base/index.rhtml.svn-base app/views/news/.svn/text-base/new.rhtml.svn-base app/views/news/.svn/text-base/show.rhtml.svn-base app/views/news/_news.rhtml app/views/news/edit.rhtml app/views/news/index.rhtml app/views/news/new.rhtml app/views/news/show.rhtml app/views/previews/.svn/entries app/views/projects/.svn/all-wcprops app/views/projects/.svn/entries app/views/projects/.svn/text-base/_form.rhtml.svn-base app/views/projects/.svn/text-base/index.xml.builder.svn-base app/views/projects/.svn/text-base/show.rhtml.svn-base app/views/projects/.svn/text-base/show.xml.builder.svn-base app/views/projects/_form.rhtml app/views/projects/index.xml.builder app/views/projects/settings/.svn/all-wcprops app/views/projects/settings/.svn/entries app/views/projects/settings/.svn/text-base/_members.rhtml.svn-base app/views/projects/settings/.svn/text-base/_versions.rhtml.svn-base app/views/projects/settings/_members.rhtml app/views/projects/settings/_versions.rhtml app/views/projects/show.rhtml app/views/projects/show.xml.builder app/views/queries/.svn/all-wcprops app/views/queries/.svn/entries app/views/queries/.svn/text-base/_filters.rhtml.svn-base app/views/queries/_filters.rhtml app/views/reports/.svn/entries app/views/repositories/.svn/entries app/views/roles/.svn/entries app/views/search/.svn/entries app/views/settings/.svn/all-wcprops app/views/settings/.svn/entries app/views/settings/.svn/text-base/_authentication.rhtml.svn-base app/views/settings/.svn/text-base/_notifications.rhtml.svn-base app/views/settings/_authentication.rhtml app/views/settings/_notifications.rhtml app/views/time_entry_reports/.svn/all-wcprops app/views/time_entry_reports/.svn/entries app/views/time_entry_reports/.svn/prop-base/_report_criteria.rhtml.svn-base app/views/time_entry_reports/.svn/prop-base/report.rhtml.svn-base app/views/time_entry_reports/.svn/text-base/_report_criteria.rhtml.svn-base app/views/time_entry_reports/.svn/text-base/report.rhtml.svn-base app/views/time_entry_reports/_report_criteria.rhtml app/views/time_entry_reports/report.rhtml app/views/timelog/.svn/all-wcprops app/views/timelog/.svn/entries app/views/timelog/.svn/prop-base/_report_criteria.rhtml.svn-base app/views/timelog/.svn/prop-base/details.rhtml.svn-base app/views/timelog/.svn/prop-base/index.html.erb.svn-base app/views/timelog/.svn/prop-base/report.rhtml.svn-base app/views/timelog/.svn/text-base/_date_range.rhtml.svn-base app/views/timelog/.svn/text-base/_list.rhtml.svn-base app/views/timelog/.svn/text-base/_report_criteria.rhtml.svn-base app/views/timelog/.svn/text-base/details.rhtml.svn-base app/views/timelog/.svn/text-base/edit.rhtml.svn-base app/views/timelog/.svn/text-base/index.html.erb.svn-base app/views/timelog/.svn/text-base/report.rhtml.svn-base app/views/timelog/_date_range.rhtml app/views/timelog/_list.rhtml app/views/timelog/_report_criteria.rhtml app/views/timelog/details.rhtml app/views/timelog/edit.rhtml app/views/timelog/index.html.erb app/views/timelog/report.rhtml app/views/trackers/.svn/entries app/views/users/.svn/all-wcprops app/views/users/.svn/entries app/views/users/.svn/prop-base/add.rhtml.svn-base app/views/users/.svn/prop-base/new.html.erb.svn-base app/views/users/.svn/text-base/_form.rhtml.svn-base app/views/users/.svn/text-base/_general.rhtml.svn-base app/views/users/.svn/text-base/_groups.rhtml.svn-base app/views/users/.svn/text-base/_mail_notifications.html.erb.svn-base app/views/users/.svn/text-base/_preferences.html.erb.svn-base app/views/users/.svn/text-base/add.rhtml.svn-base app/views/users/.svn/text-base/edit.rhtml.svn-base app/views/users/.svn/text-base/index.rhtml.svn-base app/views/users/.svn/text-base/new.html.erb.svn-base app/views/users/.svn/text-base/show.rhtml.svn-base app/views/users/_form.rhtml app/views/users/_general.rhtml app/views/users/_groups.rhtml app/views/users/_mail_notifications.html.erb app/views/users/_preferences.html.erb app/views/users/add.rhtml app/views/users/edit.rhtml app/views/users/index.rhtml app/views/users/new.html.erb app/views/users/show.rhtml app/views/versions/.svn/all-wcprops app/views/versions/.svn/entries app/views/versions/.svn/text-base/show.rhtml.svn-base app/views/versions/show.rhtml app/views/watchers/.svn/entries app/views/welcome/.svn/entries app/views/wiki/.svn/all-wcprops app/views/wiki/.svn/entries app/views/wiki/.svn/prop-base/date_index.html.erb.svn-base app/views/wiki/.svn/prop-base/index.html.erb.svn-base app/views/wiki/.svn/prop-base/special_date_index.rhtml.svn-base app/views/wiki/.svn/prop-base/special_page_index.rhtml.svn-base app/views/wiki/.svn/text-base/_sidebar.rhtml.svn-base app/views/wiki/.svn/text-base/annotate.rhtml.svn-base app/views/wiki/.svn/text-base/date_index.html.erb.svn-base app/views/wiki/.svn/text-base/destroy.rhtml.svn-base app/views/wiki/.svn/text-base/diff.rhtml.svn-base app/views/wiki/.svn/text-base/edit.rhtml.svn-base app/views/wiki/.svn/text-base/history.rhtml.svn-base app/views/wiki/.svn/text-base/index.html.erb.svn-base app/views/wiki/.svn/text-base/rename.rhtml.svn-base app/views/wiki/.svn/text-base/show.rhtml.svn-base app/views/wiki/.svn/text-base/special_date_index.rhtml.svn-base app/views/wiki/.svn/text-base/special_page_index.rhtml.svn-base app/views/wiki/_sidebar.rhtml app/views/wiki/annotate.rhtml app/views/wiki/date_index.html.erb app/views/wiki/destroy.rhtml app/views/wiki/diff.rhtml app/views/wiki/edit.rhtml app/views/wiki/history.rhtml app/views/wiki/index.html.erb app/views/wiki/rename.rhtml app/views/wiki/show.rhtml app/views/wiki/special_date_index.rhtml app/views/wiki/special_page_index.rhtml app/views/wikis/.svn/entries app/views/workflows/.svn/entries config/.svn/all-wcprops config/.svn/entries config/.svn/text-base/routes.rb.svn-base config/.svn/text-base/settings.yml.svn-base config/environments/.svn/all-wcprops config/environments/.svn/entries config/environments/.svn/text-base/production.rb.svn-base config/environments/.svn/text-base/test.rb.svn-base config/environments/production.rb config/environments/test.rb config/initializers/.svn/all-wcprops config/initializers/.svn/entries config/initializers/.svn/text-base/10-patches.rb.svn-base config/initializers/10-patches.rb config/locales/.svn/all-wcprops config/locales/.svn/entries config/locales/.svn/text-base/bg.yml.svn-base config/locales/.svn/text-base/bs.yml.svn-base config/locales/.svn/text-base/ca.yml.svn-base config/locales/.svn/text-base/cs.yml.svn-base config/locales/.svn/text-base/da.yml.svn-base config/locales/.svn/text-base/de.yml.svn-base config/locales/.svn/text-base/el.yml.svn-base config/locales/.svn/text-base/en-GB.yml.svn-base config/locales/.svn/text-base/en.yml.svn-base config/locales/.svn/text-base/es.yml.svn-base config/locales/.svn/text-base/eu.yml.svn-base config/locales/.svn/text-base/fi.yml.svn-base config/locales/.svn/text-base/fr.yml.svn-base config/locales/.svn/text-base/gl.yml.svn-base config/locales/.svn/text-base/he.yml.svn-base config/locales/.svn/text-base/hr.yml.svn-base config/locales/.svn/text-base/hu.yml.svn-base config/locales/.svn/text-base/id.yml.svn-base config/locales/.svn/text-base/it.yml.svn-base config/locales/.svn/text-base/ja.yml.svn-base config/locales/.svn/text-base/ko.yml.svn-base config/locales/.svn/text-base/lt.yml.svn-base config/locales/.svn/text-base/lv.yml.svn-base config/locales/.svn/text-base/mk.yml.svn-base config/locales/.svn/text-base/mn.yml.svn-base config/locales/.svn/text-base/nl.yml.svn-base config/locales/.svn/text-base/no.yml.svn-base config/locales/.svn/text-base/pl.yml.svn-base config/locales/.svn/text-base/pt-BR.yml.svn-base config/locales/.svn/text-base/pt.yml.svn-base config/locales/.svn/text-base/ro.yml.svn-base config/locales/.svn/text-base/ru.yml.svn-base config/locales/.svn/text-base/sk.yml.svn-base config/locales/.svn/text-base/sl.yml.svn-base config/locales/.svn/text-base/sr-YU.yml.svn-base config/locales/.svn/text-base/sr.yml.svn-base config/locales/.svn/text-base/sv.yml.svn-base config/locales/.svn/text-base/th.yml.svn-base config/locales/.svn/text-base/tr.yml.svn-base config/locales/.svn/text-base/uk.yml.svn-base config/locales/.svn/text-base/vi.yml.svn-base config/locales/.svn/text-base/zh-TW.yml.svn-base config/locales/.svn/text-base/zh.yml.svn-base config/locales/bg.yml config/locales/bs.yml config/locales/ca.yml config/locales/cs.yml config/locales/da.yml config/locales/de.yml config/locales/el.yml config/locales/en-GB.yml config/locales/en.yml config/locales/es.yml config/locales/eu.yml config/locales/fi.yml config/locales/fr.yml config/locales/gl.yml config/locales/he.yml config/locales/hr.yml config/locales/hu.yml config/locales/id.yml config/locales/it.yml config/locales/ja.yml config/locales/ko.yml config/locales/lt.yml config/locales/lv.yml config/locales/mk.yml config/locales/mn.yml config/locales/nl.yml config/locales/no.yml config/locales/pl.yml config/locales/pt-BR.yml config/locales/pt.yml config/locales/ro.yml config/locales/ru.yml config/locales/sk.yml config/locales/sl.yml config/locales/sr-YU.yml config/locales/sr.yml config/locales/sv.yml config/locales/th.yml config/locales/tr.yml config/locales/uk.yml config/locales/vi.yml config/locales/zh-TW.yml config/locales/zh.yml config/routes.rb config/settings.yml db/.svn/all-wcprops db/.svn/entries db/migrate/.svn/all-wcprops db/migrate/.svn/entries db/migrate/.svn/text-base/20100129193402_change_users_mail_notification_to_string.rb.svn-base db/migrate/.svn/text-base/20100129193813_update_mail_notification_values.rb.svn-base db/migrate/.svn/text-base/20101104182107_add_unique_index_on_members.rb.svn-base db/migrate/.svn/text-base/20101107130441_add_custom_fields_visible.rb.svn-base db/migrate/.svn/text-base/20101114115114_change_projects_name_limit.rb.svn-base db/migrate/.svn/text-base/20101114115359_change_projects_identifier_limit.rb.svn-base db/migrate/20100129193402_change_users_mail_notification_to_string.rb db/migrate/20100129193813_update_mail_notification_values.rb db/migrate/20101104182107_add_unique_index_on_members.rb db/migrate/20101107130441_add_custom_fields_visible.rb db/migrate/20101114115114_change_projects_name_limit.rb db/migrate/20101114115359_change_projects_identifier_limit.rb doc/.svn/all-wcprops doc/.svn/entries doc/.svn/text-base/CHANGELOG.svn-base doc/CHANGELOG extra/.svn/all-wcprops extra/.svn/entries extra/mail_handler/.svn/entries extra/sample_plugin/.svn/entries extra/sample_plugin/app/.svn/entries extra/sample_plugin/app/controllers/.svn/entries extra/sample_plugin/app/models/.svn/entries extra/sample_plugin/app/views/.svn/entries extra/sample_plugin/app/views/example/.svn/entries extra/sample_plugin/app/views/my/.svn/entries extra/sample_plugin/app/views/my/blocks/.svn/entries extra/sample_plugin/app/views/settings/.svn/entries extra/sample_plugin/assets/.svn/entries extra/sample_plugin/assets/images/.svn/entries extra/sample_plugin/assets/stylesheets/.svn/entries extra/sample_plugin/config/.svn/entries extra/sample_plugin/config/locales/.svn/entries extra/sample_plugin/db/.svn/entries extra/sample_plugin/db/migrate/.svn/entries extra/svn/.svn/all-wcprops extra/svn/.svn/entries extra/svn/.svn/text-base/Redmine.pm.svn-base extra/svn/.svn/text-base/reposman.rb.svn-base extra/svn/Redmine.pm extra/svn/reposman.rb files/.svn/entries lib/.svn/all-wcprops lib/.svn/entries lib/.svn/text-base/redcloth3.rb.svn-base lib/.svn/text-base/redmine.rb.svn-base lib/SVG/.svn/entries lib/SVG/Graph/.svn/entries lib/generators/.svn/entries lib/generators/redmine_plugin/.svn/entries lib/generators/redmine_plugin/templates/.svn/entries lib/generators/redmine_plugin_controller/.svn/entries lib/generators/redmine_plugin_controller/templates/.svn/entries lib/generators/redmine_plugin_model/.svn/entries lib/generators/redmine_plugin_model/templates/.svn/entries lib/plugins/.svn/entries lib/redcloth3.rb lib/redmine.rb lib/redmine/.svn/all-wcprops lib/redmine/.svn/entries lib/redmine/.svn/text-base/hook.rb.svn-base lib/redmine/.svn/text-base/i18n.rb.svn-base lib/redmine/.svn/text-base/menu_manager.rb.svn-base lib/redmine/.svn/text-base/notifiable.rb.svn-base lib/redmine/.svn/text-base/plugin.rb.svn-base lib/redmine/.svn/text-base/version.rb.svn-base lib/redmine/activity/.svn/entries lib/redmine/core_ext/.svn/entries lib/redmine/core_ext/string/.svn/entries lib/redmine/default_data/.svn/entries lib/redmine/export/.svn/entries lib/redmine/helpers/.svn/all-wcprops lib/redmine/helpers/.svn/entries lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base lib/redmine/helpers/gantt.rb lib/redmine/hook.rb lib/redmine/i18n.rb lib/redmine/menu_manager.rb lib/redmine/notifiable.rb lib/redmine/plugin.rb lib/redmine/scm/.svn/all-wcprops lib/redmine/scm/.svn/entries lib/redmine/scm/adapters/.svn/all-wcprops lib/redmine/scm/adapters/.svn/entries lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base lib/redmine/scm/adapters/git_adapter.rb lib/redmine/scm/adapters/mercurial/.svn/entries lib/redmine/version.rb lib/redmine/views/.svn/entries lib/redmine/views/my_page/.svn/entries lib/redmine/wiki_formatting/.svn/all-wcprops lib/redmine/wiki_formatting/.svn/entries lib/redmine/wiki_formatting/.svn/text-base/macros.rb.svn-base lib/redmine/wiki_formatting/macros.rb lib/redmine/wiki_formatting/textile/.svn/all-wcprops lib/redmine/wiki_formatting/textile/.svn/entries lib/redmine/wiki_formatting/textile/.svn/text-base/formatter.rb.svn-base lib/redmine/wiki_formatting/textile/formatter.rb lib/tasks/.svn/all-wcprops lib/tasks/.svn/entries lib/tasks/.svn/text-base/email.rake.svn-base lib/tasks/.svn/text-base/initializers.rake.svn-base lib/tasks/.svn/text-base/locales.rake.svn-base lib/tasks/.svn/text-base/migrate_from_mantis.rake.svn-base lib/tasks/email.rake lib/tasks/initializers.rake lib/tasks/locales.rake lib/tasks/migrate_from_mantis.rake log/.svn/entries public/.svn/all-wcprops public/.svn/entries public/help/.svn/all-wcprops public/help/.svn/entries public/help/.svn/text-base/wiki_syntax_detailed.html.svn-base public/help/wiki_syntax_detailed.html public/images/.svn/entries public/images/files/.svn/entries public/images/jstoolbar/.svn/entries public/javascripts/.svn/all-wcprops public/javascripts/.svn/entries public/javascripts/.svn/text-base/application.js.svn-base public/javascripts/application.js public/javascripts/calendar/.svn/entries public/javascripts/calendar/lang/.svn/entries public/javascripts/jstoolbar/.svn/entries public/javascripts/jstoolbar/lang/.svn/entries public/stylesheets/.svn/all-wcprops public/stylesheets/.svn/entries public/stylesheets/.svn/text-base/application.css.svn-base public/stylesheets/application.css public/themes/.svn/entries public/themes/alternate/.svn/entries public/themes/alternate/stylesheets/.svn/entries public/themes/classic/.svn/entries public/themes/classic/images/.svn/entries public/themes/classic/stylesheets/.svn/entries script/.svn/all-wcprops script/.svn/entries script/.svn/text-base/about.svn-base script/.svn/text-base/breakpointer.svn-base script/.svn/text-base/console.svn-base script/.svn/text-base/dbconsole.svn-base script/.svn/text-base/destroy.svn-base script/.svn/text-base/generate.svn-base script/.svn/text-base/plugin.svn-base script/.svn/text-base/runner.svn-base script/.svn/text-base/server.svn-base script/about script/breakpointer script/console script/dbconsole script/destroy script/generate script/performance/.svn/all-wcprops script/performance/.svn/entries script/performance/.svn/text-base/benchmarker.svn-base script/performance/.svn/text-base/profiler.svn-base script/performance/.svn/text-base/request.svn-base script/performance/benchmarker script/performance/profiler script/performance/request script/plugin script/process/.svn/all-wcprops script/process/.svn/entries script/process/.svn/text-base/inspector.svn-base script/process/.svn/text-base/reaper.svn-base script/process/.svn/text-base/spawner.svn-base script/process/.svn/text-base/spinner.svn-base script/process/inspector script/process/reaper script/process/spawner script/process/spinner script/runner script/server test/.svn/all-wcprops test/.svn/entries test/.svn/text-base/test_helper.rb.svn-base test/exemplars/.svn/all-wcprops test/exemplars/.svn/entries test/exemplars/.svn/text-base/project_exemplar.rb.svn-base test/exemplars/.svn/text-base/user_exemplar.rb.svn-base test/exemplars/project_exemplar.rb test/exemplars/user_exemplar.rb test/fixtures/.svn/all-wcprops test/fixtures/.svn/entries test/fixtures/.svn/text-base/custom_values.yml.svn-base test/fixtures/.svn/text-base/issues.yml.svn-base test/fixtures/.svn/text-base/users.yml.svn-base test/fixtures/custom_values.yml test/fixtures/diffs/.svn/entries test/fixtures/encoding/.svn/entries test/fixtures/files/.svn/entries test/fixtures/issues.yml test/fixtures/ldap/.svn/entries test/fixtures/mail_handler/.svn/all-wcprops test/fixtures/mail_handler/.svn/entries test/fixtures/mail_handler/.svn/text-base/issue_update_with_multiple_quoted_reply_above.eml.svn-base test/fixtures/mail_handler/.svn/text-base/issue_update_with_quoted_reply_above.eml.svn-base test/fixtures/mail_handler/.svn/text-base/ticket_on_given_project.eml.svn-base test/fixtures/mail_handler/.svn/text-base/ticket_reply_with_status.eml.svn-base test/fixtures/mail_handler/.svn/text-base/ticket_with_invalid_attributes.eml.svn-base test/fixtures/mail_handler/.svn/text-base/ticket_with_localized_attributes.eml.svn-base test/fixtures/mail_handler/issue_update_with_multiple_quoted_reply_above.eml test/fixtures/mail_handler/issue_update_with_quoted_reply_above.eml test/fixtures/mail_handler/ticket_on_given_project.eml test/fixtures/mail_handler/ticket_reply_with_status.eml test/fixtures/mail_handler/ticket_with_invalid_attributes.eml test/fixtures/mail_handler/ticket_with_localized_attributes.eml test/fixtures/mailer/.svn/entries test/fixtures/repositories/.svn/all-wcprops test/fixtures/repositories/.svn/entries test/fixtures/repositories/.svn/text-base/git_repository.tar.gz.svn-base test/fixtures/repositories/git_repository.tar.gz test/fixtures/users.yml test/functional/.svn/all-wcprops test/functional/.svn/entries test/functional/.svn/text-base/account_controller_test.rb.svn-base test/functional/.svn/text-base/attachments_controller_test.rb.svn-base test/functional/.svn/text-base/calendars_controller_test.rb.svn-base test/functional/.svn/text-base/comments_controller_test.rb.svn-base test/functional/.svn/text-base/context_menus_controller_test.rb.svn-base test/functional/.svn/text-base/documents_controller_test.rb.svn-base test/functional/.svn/text-base/files_controller_test.rb.svn-base test/functional/.svn/text-base/gantts_controller_test.rb.svn-base test/functional/.svn/text-base/groups_controller_test.rb.svn-base test/functional/.svn/text-base/issue_moves_controller_test.rb.svn-base test/functional/.svn/text-base/issues_controller_test.rb.svn-base test/functional/.svn/text-base/messages_controller_test.rb.svn-base test/functional/.svn/text-base/my_controller_test.rb.svn-base test/functional/.svn/text-base/news_controller_test.rb.svn-base test/functional/.svn/text-base/previews_controller_test.rb.svn-base test/functional/.svn/text-base/project_enumerations_controller_test.rb.svn-base test/functional/.svn/text-base/projects_controller_test.rb.svn-base test/functional/.svn/text-base/repositories_controller_test.rb.svn-base test/functional/.svn/text-base/repositories_cvs_controller_test.rb.svn-base test/functional/.svn/text-base/repositories_git_controller_test.rb.svn-base test/functional/.svn/text-base/repositories_subversion_controller_test.rb.svn-base test/functional/.svn/text-base/roles_controller_test.rb.svn-base test/functional/.svn/text-base/search_controller_test.rb.svn-base test/functional/.svn/text-base/settings_controller_test.rb.svn-base test/functional/.svn/text-base/time_entry_reports_controller_test.rb.svn-base test/functional/.svn/text-base/timelog_controller_test.rb.svn-base test/functional/.svn/text-base/users_controller_test.rb.svn-base test/functional/.svn/text-base/versions_controller_test.rb.svn-base test/functional/.svn/text-base/wiki_controller_test.rb.svn-base test/functional/account_controller_test.rb test/functional/attachments_controller_test.rb test/functional/calendars_controller_test.rb test/functional/comments_controller_test.rb test/functional/context_menus_controller_test.rb test/functional/documents_controller_test.rb test/functional/files_controller_test.rb test/functional/gantts_controller_test.rb test/functional/groups_controller_test.rb test/functional/issue_moves_controller_test.rb test/functional/issues_controller_test.rb test/functional/messages_controller_test.rb test/functional/my_controller_test.rb test/functional/news_controller_test.rb test/functional/previews_controller_test.rb test/functional/project_enumerations_controller_test.rb test/functional/projects_controller_test.rb test/functional/repositories_controller_test.rb test/functional/repositories_cvs_controller_test.rb test/functional/repositories_git_controller_test.rb test/functional/repositories_subversion_controller_test.rb test/functional/roles_controller_test.rb test/functional/search_controller_test.rb test/functional/settings_controller_test.rb test/functional/time_entry_reports_controller_test.rb test/functional/timelog_controller_test.rb test/functional/users_controller_test.rb test/functional/versions_controller_test.rb test/functional/wiki_controller_test.rb test/integration/.svn/all-wcprops test/integration/.svn/entries test/integration/.svn/prop-base/issues_api_test.rb.svn-base test/integration/.svn/prop-base/projects_api_test.rb.svn-base test/integration/.svn/text-base/account_test.rb.svn-base test/integration/.svn/text-base/admin_test.rb.svn-base test/integration/.svn/text-base/api_token_login_test.rb.svn-base test/integration/.svn/text-base/disabled_rest_api_test.rb.svn-base test/integration/.svn/text-base/http_basic_login_test.rb.svn-base test/integration/.svn/text-base/http_basic_login_with_api_token_test.rb.svn-base test/integration/.svn/text-base/issues_api_test.rb.svn-base test/integration/.svn/text-base/issues_test.rb.svn-base test/integration/.svn/text-base/projects_api_test.rb.svn-base test/integration/.svn/text-base/projects_test.rb.svn-base test/integration/.svn/text-base/routing_test.rb.svn-base test/integration/account_test.rb test/integration/admin_test.rb test/integration/api_test/.svn/all-wcprops test/integration/api_test/.svn/entries test/integration/api_test/.svn/prop-base/issues_test.rb.svn-base test/integration/api_test/.svn/prop-base/projects_test.rb.svn-base test/integration/api_test/.svn/text-base/disabled_rest_api_test.rb.svn-base test/integration/api_test/.svn/text-base/http_basic_login_test.rb.svn-base test/integration/api_test/.svn/text-base/http_basic_login_with_api_token_test.rb.svn-base test/integration/api_test/.svn/text-base/issues_test.rb.svn-base test/integration/api_test/.svn/text-base/projects_test.rb.svn-base test/integration/api_test/.svn/text-base/token_authentication_test.rb.svn-base test/integration/api_test/disabled_rest_api_test.rb test/integration/api_test/http_basic_login_test.rb test/integration/api_test/http_basic_login_with_api_token_test.rb test/integration/api_test/issues_test.rb test/integration/api_test/projects_test.rb test/integration/api_test/token_authentication_test.rb test/integration/api_token_login_test.rb test/integration/disabled_rest_api_test.rb test/integration/http_basic_login_test.rb test/integration/http_basic_login_with_api_token_test.rb test/integration/issues_api_test.rb test/integration/issues_test.rb test/integration/lib/.svn/entries test/integration/lib/redmine/.svn/entries test/integration/projects_api_test.rb test/integration/projects_test.rb test/integration/routing_test.rb test/mocks/.svn/entries test/mocks/development/.svn/entries test/mocks/test/.svn/entries test/test_helper.rb test/unit/.svn/all-wcprops test/unit/.svn/entries test/unit/.svn/text-base/issue_test.rb.svn-base test/unit/.svn/text-base/journal_observer_test.rb.svn-base test/unit/.svn/text-base/mail_handler_test.rb.svn-base test/unit/.svn/text-base/mailer_test.rb.svn-base test/unit/.svn/text-base/project_test.rb.svn-base test/unit/.svn/text-base/query_test.rb.svn-base test/unit/.svn/text-base/repository_git_test.rb.svn-base test/unit/.svn/text-base/repository_test.rb.svn-base test/unit/.svn/text-base/user_test.rb.svn-base test/unit/helpers/.svn/all-wcprops test/unit/helpers/.svn/entries test/unit/helpers/.svn/text-base/application_helper_test.rb.svn-base test/unit/helpers/application_helper_test.rb test/unit/issue_test.rb test/unit/journal_observer_test.rb test/unit/lib/.svn/all-wcprops test/unit/lib/.svn/entries test/unit/lib/redmine/.svn/all-wcprops test/unit/lib/redmine/.svn/entries test/unit/lib/redmine/.svn/text-base/i18n_test.rb.svn-base test/unit/lib/redmine/.svn/text-base/notifiable_test.rb.svn-base test/unit/lib/redmine/helpers/.svn/entries test/unit/lib/redmine/i18n_test.rb test/unit/lib/redmine/menu_manager/.svn/entries test/unit/lib/redmine/notifiable_test.rb test/unit/lib/redmine/scm/.svn/all-wcprops test/unit/lib/redmine/scm/.svn/entries test/unit/lib/redmine/scm/adapters/.svn/all-wcprops test/unit/lib/redmine/scm/adapters/.svn/entries test/unit/lib/redmine/scm/adapters/.svn/text-base/git_adapter_test.rb.svn-base test/unit/lib/redmine/scm/adapters/git_adapter_test.rb test/unit/lib/redmine/wiki_formatting/.svn/all-wcprops test/unit/lib/redmine/wiki_formatting/.svn/entries test/unit/lib/redmine/wiki_formatting/.svn/text-base/macros_test.rb.svn-base test/unit/lib/redmine/wiki_formatting/.svn/text-base/textile_formatter_test.rb.svn-base test/unit/lib/redmine/wiki_formatting/macros_test.rb test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb test/unit/mail_handler_test.rb test/unit/mailer_test.rb test/unit/project_test.rb test/unit/query_test.rb test/unit/repository_git_test.rb test/unit/repository_test.rb test/unit/user_test.rb tmp/.svn/entries tmp/cache/.svn/entries tmp/sessions/.svn/entries tmp/sockets/.svn/entries tmp/test/.svn/entries vendor/.svn/all-wcprops vendor/.svn/entries vendor/gems/.svn/entries vendor/gems/rubytree-0.5.2/.svn/entries vendor/gems/rubytree-0.5.2/lib/.svn/entries vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries vendor/gems/rubytree-0.5.2/test/.svn/entries vendor/plugins/.svn/all-wcprops vendor/plugins/.svn/entries vendor/plugins/acts_as_activity_provider/.svn/entries vendor/plugins/acts_as_activity_provider/lib/.svn/entries vendor/plugins/acts_as_attachable/.svn/entries vendor/plugins/acts_as_attachable/lib/.svn/entries vendor/plugins/acts_as_customizable/.svn/all-wcprops vendor/plugins/acts_as_customizable/.svn/entries vendor/plugins/acts_as_customizable/lib/.svn/all-wcprops vendor/plugins/acts_as_customizable/lib/.svn/entries vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb vendor/plugins/acts_as_event/.svn/entries vendor/plugins/acts_as_event/lib/.svn/entries vendor/plugins/acts_as_list/.svn/entries vendor/plugins/acts_as_list/lib/.svn/entries vendor/plugins/acts_as_list/lib/active_record/.svn/entries vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries vendor/plugins/acts_as_list/test/.svn/entries vendor/plugins/acts_as_searchable/.svn/entries vendor/plugins/acts_as_searchable/lib/.svn/entries vendor/plugins/acts_as_tree/.svn/entries vendor/plugins/acts_as_tree/lib/.svn/entries vendor/plugins/acts_as_tree/lib/active_record/.svn/entries vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries vendor/plugins/acts_as_tree/test/.svn/entries vendor/plugins/acts_as_tree/test/fixtures/.svn/entries vendor/plugins/acts_as_versioned/.svn/entries vendor/plugins/acts_as_versioned/lib/.svn/entries vendor/plugins/acts_as_versioned/test/.svn/entries vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries vendor/plugins/acts_as_watchable/.svn/entries vendor/plugins/acts_as_watchable/lib/.svn/entries vendor/plugins/awesome_nested_set/.svn/all-wcprops vendor/plugins/awesome_nested_set/.svn/entries vendor/plugins/awesome_nested_set/lib/.svn/all-wcprops vendor/plugins/awesome_nested_set/lib/.svn/entries vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries vendor/plugins/awesome_nested_set/rails/.svn/entries vendor/plugins/awesome_nested_set/test/.svn/entries vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries vendor/plugins/awesome_nested_set/test/db/.svn/entries vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries vendor/plugins/classic_pagination/.svn/entries vendor/plugins/classic_pagination/lib/.svn/entries vendor/plugins/classic_pagination/test/.svn/entries vendor/plugins/classic_pagination/test/fixtures/.svn/entries vendor/plugins/coderay-0.9.2/.svn/entries vendor/plugins/coderay-0.9.2/lib/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/entries vendor/plugins/engines/.svn/all-wcprops vendor/plugins/engines/.svn/entries vendor/plugins/engines/generators/.svn/all-wcprops vendor/plugins/engines/generators/.svn/entries vendor/plugins/engines/generators/plugin_migration/.svn/all-wcprops vendor/plugins/engines/generators/plugin_migration/.svn/entries vendor/plugins/engines/generators/plugin_migration/.svn/text-base/plugin_migration_generator.rb.svn-base vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries vendor/plugins/engines/lib/.svn/entries vendor/plugins/engines/lib/engines/.svn/entries vendor/plugins/engines/lib/engines/plugin/.svn/entries vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries vendor/plugins/engines/tasks/.svn/entries vendor/plugins/engines/test/.svn/entries vendor/plugins/engines/test/app/.svn/entries vendor/plugins/engines/test/app/controllers/.svn/entries vendor/plugins/engines/test/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/app/helpers/.svn/entries vendor/plugins/engines/test/app/models/.svn/entries vendor/plugins/engines/test/app/things/.svn/entries vendor/plugins/engines/test/app/views/.svn/entries vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries vendor/plugins/engines/test/app/views/namespace/.svn/entries vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries vendor/plugins/engines/test/app/views/notify_mail/.svn/entries vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries vendor/plugins/engines/test/functional/.svn/entries vendor/plugins/engines/test/lib/.svn/entries vendor/plugins/engines/test/plugins/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries vendor/plugins/engines/test/plugins/test_assets/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries vendor/plugins/engines/test/plugins/test_load_path/.svn/entries vendor/plugins/engines/test/plugins/test_migration/.svn/entries vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries vendor/plugins/engines/test/plugins/test_routing/.svn/entries vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries vendor/plugins/engines/test/plugins/test_testing/.svn/entries vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries vendor/plugins/engines/test/unit/.svn/entries vendor/plugins/engines/test/unit/test_testing/.svn/entries vendor/plugins/gravatar/.svn/all-wcprops vendor/plugins/gravatar/.svn/entries vendor/plugins/gravatar/lib/.svn/all-wcprops vendor/plugins/gravatar/lib/.svn/entries vendor/plugins/gravatar/lib/.svn/text-base/gravatar.rb.svn-base vendor/plugins/gravatar/lib/gravatar.rb vendor/plugins/gravatar/spec/.svn/entries vendor/plugins/open_id_authentication/.svn/entries vendor/plugins/open_id_authentication/generators/.svn/entries vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries vendor/plugins/open_id_authentication/lib/.svn/entries vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries vendor/plugins/open_id_authentication/tasks/.svn/entries vendor/plugins/open_id_authentication/test/.svn/entries vendor/plugins/prepend_engine_views/.svn/entries vendor/plugins/rfpdf/.svn/entries vendor/plugins/rfpdf/lib/.svn/entries vendor/plugins/rfpdf/lib/rfpdf/.svn/entries vendor/plugins/rfpdf/test/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries
diffstat 986 files changed, 21165 insertions(+), 13901 deletions(-) [+]
line wrap: on
line diff
--- a/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 24
-/svn/!svn/ver/4173/trunk
+/svn/!svn/ver/4411/trunk
 END
 Rakefile
 K 25
--- a/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-23T16:23:39.070168Z
-4173
-winterheart
+2010-11-17T18:27:38.712585Z
+4411
+jplang
 has-props
 
 
@@ -69,6 +69,9 @@
 
 307
 
+extra
+dir
+
 README.rdoc
 file
 
@@ -103,9 +106,6 @@
 
 208
 
-extra
-dir
-
 db
 dir
 
@@ -121,12 +121,6 @@
 script
 dir
 
-doc
-dir
-
-config
-dir
-
 .gitignore
 file
 
@@ -161,6 +155,12 @@
 
 322
 
+config
+dir
+
+doc
+dir
+
 lib
 dir
 
--- a/app/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 28
-/svn/!svn/ver/4172/trunk/app
+/svn/!svn/ver/4411/trunk/app
 END
--- a/app/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-11-17T18:27:38.712585Z
+4411
+jplang
 
 
 
--- a/app/controllers/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 40
-/svn/!svn/ver/4172/trunk/app/controllers
+/svn/!svn/ver/4411/trunk/app/controllers
 END
 issues_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 61
-/svn/!svn/ver/4083/trunk/app/controllers/issues_controller.rb
+/svn/!svn/ver/4411/trunk/app/controllers/issues_controller.rb
 END
 queries_controller.rb
 K 25
@@ -43,7 +43,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/3745/trunk/app/controllers/my_controller.rb
+/svn/!svn/ver/4224/trunk/app/controllers/my_controller.rb
 END
 comments_controller.rb
 K 25
@@ -67,7 +67,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 68
-/svn/!svn/ver/4059/trunk/app/controllers/context_menus_controller.rb
+/svn/!svn/ver/4242/trunk/app/controllers/context_menus_controller.rb
 END
 journals_controller.rb
 K 25
@@ -81,6 +81,12 @@
 V 64
 /svn/!svn/ver/3536/trunk/app/controllers/workflows_controller.rb
 END
+time_entry_reports_controller.rb
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/svn/!svn/ver/4232/trunk/app/controllers/time_entry_reports_controller.rb
+END
 reports_controller.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -93,53 +99,53 @@
 V 75
 /svn/!svn/ver/4075/trunk/app/controllers/project_enumerations_controller.rb
 END
+settings_controller.rb
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/4220/trunk/app/controllers/settings_controller.rb
+END
+timelog_controller.rb
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/4410/trunk/app/controllers/timelog_controller.rb
+END
 custom_fields_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 68
 /svn/!svn/ver/3627/trunk/app/controllers/custom_fields_controller.rb
 END
-timelog_controller.rb
+users_controller.rb
 K 25
 svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4087/trunk/app/controllers/timelog_controller.rb
-END
-settings_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/3176/trunk/app/controllers/settings_controller.rb
+V 60
+/svn/!svn/ver/4382/trunk/app/controllers/users_controller.rb
 END
 issue_moves_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 66
-/svn/!svn/ver/3940/trunk/app/controllers/issue_moves_controller.rb
-END
-users_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4066/trunk/app/controllers/users_controller.rb
+/svn/!svn/ver/4292/trunk/app/controllers/issue_moves_controller.rb
 END
 files_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 60
-/svn/!svn/ver/4085/trunk/app/controllers/files_controller.rb
+/svn/!svn/ver/4177/trunk/app/controllers/files_controller.rb
 END
 application_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 66
-/svn/!svn/ver/4075/trunk/app/controllers/application_controller.rb
+/svn/!svn/ver/4286/trunk/app/controllers/application_controller.rb
 END
-previews_controller.rb
+ldap_auth_sources_controller.rb
 K 25
 svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/3946/trunk/app/controllers/previews_controller.rb
+V 72
+/svn/!svn/ver/3744/trunk/app/controllers/ldap_auth_sources_controller.rb
 END
 auth_sources_controller.rb
 K 25
@@ -147,11 +153,11 @@
 V 67
 /svn/!svn/ver/3744/trunk/app/controllers/auth_sources_controller.rb
 END
-ldap_auth_sources_controller.rb
+previews_controller.rb
 K 25
 svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/3744/trunk/app/controllers/ldap_auth_sources_controller.rb
+V 63
+/svn/!svn/ver/4174/trunk/app/controllers/previews_controller.rb
 END
 search_controller.rb
 K 25
@@ -165,18 +171,18 @@
 V 63
 /svn/!svn/ver/3528/trunk/app/controllers/messages_controller.rb
 END
-versions_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4097/trunk/app/controllers/versions_controller.rb
-END
 issue_relations_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 70
 /svn/!svn/ver/3591/trunk/app/controllers/issue_relations_controller.rb
 END
+versions_controller.rb
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/4354/trunk/app/controllers/versions_controller.rb
+END
 boards_controller.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -193,7 +199,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4172/trunk/app/controllers/news_controller.rb
+/svn/!svn/ver/4174/trunk/app/controllers/news_controller.rb
 END
 trackers_controller.rb
 K 25
@@ -241,7 +247,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 63
-/svn/!svn/ver/4070/trunk/app/controllers/projects_controller.rb
+/svn/!svn/ver/4397/trunk/app/controllers/projects_controller.rb
 END
 account_controller.rb
 K 25
@@ -253,7 +259,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/4041/trunk/app/controllers/calendars_controller.rb
+/svn/!svn/ver/4388/trunk/app/controllers/calendars_controller.rb
 END
 issue_categories_controller.rb
 K 25
@@ -265,7 +271,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 61
-/svn/!svn/ver/4072/trunk/app/controllers/gantts_controller.rb
+/svn/!svn/ver/4388/trunk/app/controllers/gantts_controller.rb
 END
 documents_controller.rb
 K 25
@@ -277,7 +283,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/3632/trunk/app/controllers/wiki_controller.rb
+/svn/!svn/ver/4303/trunk/app/controllers/wiki_controller.rb
 END
 activities_controller.rb
 K 25
--- a/app/controllers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/controllers
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-11-17T18:27:38.712585Z
+4411
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-24T12:48:26.271687Z
-611e226f9845a33fb6fe28700968e7de
-2010-09-11T20:21:27.018967Z
-4083
-jbbarth
+2010-11-19T13:04:46.996826Z
+e6c77385e49176b593367b44e7b33f3e
+2010-11-17T18:27:38.712585Z
+4411
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-13034
+12834
 
 queries_controller.rb
 file
@@ -236,10 +236,10 @@
 
 
 
-2010-09-23T14:37:44.395735Z
-b178015d27e341adaa871e3800e94401
-2010-05-23T03:16:37.499264Z
-3745
+2010-11-19T13:04:46.996826Z
+b465d7aeca2d6b4cc11159ae9bc7349e
+2010-09-28T22:13:11.637219Z
+4224
 edavis10
 has-props
 
@@ -262,7 +262,7 @@
 
 
 
-6422
+6021
 
 comments_controller.rb
 file
@@ -372,10 +372,10 @@
 
 
 
-2010-09-24T12:48:26.271687Z
-8e09032afd0db141012e59a0f689b687
-2010-09-03T21:43:07.906158Z
-4059
+2010-11-19T13:04:46.996826Z
+2db29b69c3f0130e470a0a11dfc1f28b
+2010-10-08T03:09:51.863032Z
+4242
 jbbarth
 
 
@@ -398,7 +398,7 @@
 
 
 
-1647
+1821
 
 journals_controller.rb
 file
@@ -468,6 +468,40 @@
 
 3346
 
+time_entry_reports_controller.rb
+file
+
+
+
+
+2010-11-19T13:04:46.996826Z
+dadcb57d89dc3c90c5fa099b143c07f8
+2010-10-05T16:07:17.015270Z
+4232
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9308
+
 reports_controller.rb
 file
 
@@ -536,16 +570,16 @@
 
 856
 
-settings_controller.rb
+timelog_controller.rb
 file
 
 
 
 
-2010-09-23T14:37:44.399747Z
-b7f5a5cb777aa2418a71520c164da11a
-2009-12-17T18:21:02.630202Z
-3176
+2010-11-19T13:04:46.996826Z
+7984019db8d0beb1d7ff158390d4ad68
+2010-11-16T20:27:45.364396Z
+4410
 jplang
 has-props
 
@@ -568,7 +602,7 @@
 
 
 
-2337
+8623
 
 custom_fields_controller.rb
 file
@@ -604,16 +638,16 @@
 
 2373
 
-timelog_controller.rb
+settings_controller.rb
 file
 
 
 
 
-2010-09-24T12:48:26.271687Z
-7e5890e22da346ff06debe33cc4bf34d
-2010-09-14T19:02:25.847894Z
-4087
+2010-11-19T13:04:46.996826Z
+4328cabdf111342d147b245bc61bb75e
+2010-09-28T20:19:55.214366Z
+4220
 edavis10
 has-props
 
@@ -636,7 +670,41 @@
 
 
 
-14320
+2239
+
+issue_moves_controller.rb
+file
+
+
+
+
+2010-11-19T13:04:47.000764Z
+cacd6ffe0ce299e2ede9d45b7ef8af42
+2010-10-25T18:44:46.868009Z
+4292
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2441
 
 users_controller.rb
 file
@@ -644,11 +712,11 @@
 
 
 
-2010-09-24T12:48:26.275788Z
-df36e1f9ccb5879ba3aa7b34592c18cf
-2010-09-06T01:02:52.851079Z
-4066
-edavis10
+2010-11-19T13:04:47.000764Z
+3af0a81ba74621dc21d877a579b39d9c
+2010-11-07T14:15:01.891476Z
+4382
+jplang
 has-props
 
 
@@ -670,41 +738,7 @@
 
 
 
-5977
-
-issue_moves_controller.rb
-file
-
-
-
-
-2010-09-23T14:37:44.395735Z
-41a4ff4e0c4fab3e134a9bfa8136323a
-2010-08-13T14:59:04.653474Z
-3940
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2290
+7565
 
 files_controller.rb
 file
@@ -712,33 +746,33 @@
 
 
 
-2010-09-24T12:48:26.275788Z
-120cefe7fd45eda6957c2e633ceab0fb
-2010-09-14T16:24:07.840869Z
-4085
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1258
+2010-11-19T13:04:47.000764Z
+f0246e8f8dde5ea7b93e4dc2162181fc
+2010-09-26T08:07:41.604064Z
+4177
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1289
 
 application_controller.rb
 file
@@ -746,67 +780,67 @@
 
 
 
-2010-09-24T12:48:26.275788Z
-e93fc4710d9abbef72273a22b174eb27
-2010-09-10T16:00:49.687515Z
-4075
+2010-11-19T13:04:47.000764Z
+8f7d4c9d306ae9d59ea0e064466454d1
+2010-10-23T11:07:04.019894Z
+4286
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+13669
+
+previews_controller.rb
+file
+
+
+
+
+2010-11-19T13:04:47.000764Z
+c5ae4fae18159e70fd81c2487bb1daa1
+2010-09-24T16:26:46.819682Z
+4174
 edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-13486
-
-ldap_auth_sources_controller.rb
-file
-
-
-
-
-2010-09-23T14:37:44.395735Z
-5f7b9cb2e9c8a60db58ea0833cf481c5
-2010-05-23T03:16:31.304135Z
-3744
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-917
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+957
 
 auth_sources_controller.rb
 file
@@ -842,16 +876,16 @@
 
 2542
 
-previews_controller.rb
+ldap_auth_sources_controller.rb
 file
 
 
 
 
 2010-09-23T14:37:44.395735Z
-1407f3993f625a9fa14fa0e208c3df4f
-2010-08-18T15:01:35.032314Z
-3946
+5f7b9cb2e9c8a60db58ea0833cf481c5
+2010-05-23T03:16:31.304135Z
+3744
 edavis10
 
 
@@ -874,7 +908,7 @@
 
 
 
-835
+917
 
 search_controller.rb
 file
@@ -944,6 +978,40 @@
 
 5824
 
+versions_controller.rb
+file
+
+
+
+
+2010-11-19T13:04:47.000764Z
+a98fb262a20669600a85c0f72202c5e6
+2010-11-01T13:13:32.982466Z
+4354
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6241
+
 issue_relations_controller.rb
 file
 
@@ -978,40 +1046,6 @@
 
 2220
 
-versions_controller.rb
-file
-
-
-
-
-2010-09-24T12:48:26.275788Z
-9cc19ecc2f9e1ad458f27cdbcd450970
-2010-09-17T15:55:08.377083Z
-4097
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6136
-
 boards_controller.rb
 file
 
@@ -1086,10 +1120,10 @@
 
 
 
-2010-09-24T12:48:26.275788Z
-dd877e070cf218909dccfc0c67658914
-2010-09-23T15:20:19.085385Z
-4172
+2010-11-19T13:04:47.000764Z
+d9e36fcf69f18973b274648b7b70dccf
+2010-09-24T16:26:46.819682Z
+4174
 edavis10
 has-props
 
@@ -1112,7 +1146,7 @@
 
 
 
-3388
+3221
 
 trackers_controller.rb
 file
@@ -1358,11 +1392,11 @@
 
 
 
-2010-09-24T12:48:26.275788Z
-7a9d61829d2ebbcab2524e763a28235b
-2010-09-08T16:01:51.939478Z
-4070
-edavis10
+2010-11-19T13:04:47.000764Z
+b0f584d53a742f6c89b157030f9d6a8d
+2010-11-13T10:05:43.644565Z
+4397
+jplang
 has-props
 
 
@@ -1384,7 +1418,7 @@
 
 
 
-9973
+10011
 
 account_controller.rb
 file
@@ -1426,33 +1460,33 @@
 
 
 
-2010-09-24T12:48:26.275788Z
-cac7d6c5cbe1f559c89a3f41e79ea4b5
-2010-08-26T16:36:59.817467Z
-4041
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1354
+2010-11-19T13:04:47.000764Z
+0be20cab6d5ea49f428a90cf3afef3e3
+2010-11-07T22:38:10.728638Z
+4388
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1390
 
 issue_categories_controller.rb
 file
@@ -1494,11 +1528,11 @@
 
 
 
-2010-09-24T12:48:26.275788Z
+2010-11-19T13:04:47.000764Z
 81dbee1745da99b9ea499f3fbe1d3944
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-07T22:38:10.728638Z
+4388
+jplang
 
 
 
@@ -1562,11 +1596,11 @@
 
 
 
-2010-09-23T14:37:44.403745Z
-cb709bfbd3ba20cd9e7245a9575a720d
-2010-04-11T12:56:18.077630Z
-3632
-jplang
+2010-11-19T13:04:47.004764Z
+0af823002ab9c7e8f59b3d12cf6267e9
+2010-10-28T21:25:38.778234Z
+4303
+edavis10
 has-props
 
 
@@ -1588,7 +1622,7 @@
 
 
 
-9211
+10145
 
 activities_controller.rb
 file
--- a/app/controllers/.svn/text-base/application_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/application_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -153,8 +153,16 @@
 
   # Authorize the user for the requested action
   def authorize(ctrl = params[:controller], action = params[:action], global = false)
-    allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project, :global => global)
-    allowed ? true : deny_access
+    allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project || @projects, :global => global)
+    if allowed
+      true
+    else
+      if @project && @project.archived?
+        render_403 :message => :notice_not_authorized_archived_project
+      else
+        deny_access
+      end
+    end
   end
 
   # Authorize the user for the requested action outside a project
@@ -213,16 +221,19 @@
   def find_issues
     @issues = Issue.find_all_by_id(params[:id] || params[:ids])
     raise ActiveRecord::RecordNotFound if @issues.empty?
-    projects = @issues.collect(&:project).compact.uniq
-    if projects.size == 1
-      @project = projects.first
-    else
+    @projects = @issues.collect(&:project).compact.uniq
+    @project = @projects.first if @projects.size == 1
+  rescue ActiveRecord::RecordNotFound
+    render_404
+  end
+  
+  # Check if project is unique before bulk operations
+  def check_project_uniqueness
+    unless @project
       # TODO: let users bulk edit/move/destroy issues from different projects
       render_error 'Can not bulk edit/move/destroy issues from different projects'
       return false
     end
-  rescue ActiveRecord::RecordNotFound
-    render_404
   end
   
   # make sure that the user is a member of the project (or admin) if project is private
@@ -262,39 +273,33 @@
     redirect_to default
   end
   
-  def render_403
+  def render_403(options={})
     @project = nil
-    respond_to do |format|
-      format.html { render :template => "common/403", :layout => use_layout, :status => 403 }
-      format.atom { head 403 }
-      format.xml { head 403 }
-      format.js { head 403 }
-      format.json { head 403 }
-    end
+    render_error({:message => :notice_not_authorized, :status => 403}.merge(options))
     return false
   end
     
-  def render_404
-    respond_to do |format|
-      format.html { render :template => "common/404", :layout => use_layout, :status => 404 }
-      format.atom { head 404 }
-      format.xml { head 404 }
-      format.js { head 404 }
-      format.json { head 404 }
-    end
+  def render_404(options={})
+    render_error({:message => :notice_file_not_found, :status => 404}.merge(options))
     return false
   end
   
-  def render_error(msg)
+  # Renders an error response
+  def render_error(arg)
+    arg = {:message => arg} unless arg.is_a?(Hash)
+    
+    @message = arg[:message]
+    @message = l(@message) if @message.is_a?(Symbol)
+    @status = arg[:status] || 500
+    
     respond_to do |format|
-      format.html { 
-        flash.now[:error] = msg
-        render :text => '', :layout => use_layout, :status => 500
+      format.html {
+        render :template => 'common/error', :layout => use_layout, :status => @status
       }
-      format.atom { head 500 }
-      format.xml { head 500 }
-      format.js { head 500 }
-      format.json { head 500 }
+      format.atom { head @status }
+      format.xml { head @status }
+      format.js { head @status }
+      format.json { head @status }
     end
   end
 
--- a/app/controllers/.svn/text-base/calendars_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/calendars_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -8,6 +8,8 @@
   helper :projects
   helper :queries
   include QueriesHelper
+  helper :sort
+  include SortHelper
 
   def show
     if params[:year] and params[:year].to_i > 1900
--- a/app/controllers/.svn/text-base/context_menus_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/context_menus_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -16,17 +16,21 @@
     @projects = @issues.collect(&:project).compact.uniq
     @project = @projects.first if @projects.size == 1
 
-    @can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)),
+    @can = {:edit => User.current.allowed_to?(:edit_issues, @projects),
             :log_time => (@project && User.current.allowed_to?(:log_time, @project)),
-            :update => (@project && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && @allowed_statuses && !@allowed_statuses.empty?))),
+            :update => (User.current.allowed_to?(:edit_issues, @projects) || (User.current.allowed_to?(:change_status, @projects) && !@allowed_statuses.blank?)),
             :move => (@project && User.current.allowed_to?(:move_issues, @project)),
             :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
-            :delete => (@project && User.current.allowed_to?(:delete_issues, @project))
+            :delete => User.current.allowed_to?(:delete_issues, @projects)
             }
     if @project
       @assignables = @project.assignable_users
       @assignables << @issue.assigned_to if @issue && @issue.assigned_to && !@assignables.include?(@issue.assigned_to)
       @trackers = @project.trackers
+    else
+      #when multiple projects, we only keep the intersection of each set
+      @assignables = @projects.map(&:assignable_users).inject{|memo,a| memo & a}
+      @trackers = @projects.map(&:trackers).inject{|memo,t| memo & t}
     end
     
     @priorities = IssuePriority.all.reverse
--- a/app/controllers/.svn/text-base/files_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/files_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -28,7 +28,7 @@
     attachments = Attachment.attach_files(container, params[:attachments])
     render_attachment_warning_if_needed(container)
 
-    if !attachments.empty? && Setting.notified_events.include?('file_added')
+    if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
       Mailer.deliver_attachments_added(attachments[:files])
     end
     redirect_to project_files_path(@project)
--- a/app/controllers/.svn/text-base/issue_moves_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/issue_moves_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,6 +1,6 @@
 class IssueMovesController < ApplicationController
   default_search_scope :issues
-  before_filter :find_issues
+  before_filter :find_issues, :check_project_uniqueness
   before_filter :authorize
   
   def new
@@ -18,6 +18,7 @@
       @issues.each do |issue|
         issue.reload
         issue.init_journal(User.current)
+        issue.current_journal.notes = @notes if @notes.present?
         call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy })
         if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => extract_changed_attributes_for_move(params)})
           moved_issues << r
@@ -50,11 +51,13 @@
     @target_project ||= @project    
     @trackers = @target_project.trackers
     @available_statuses = Workflow.available_statuses(@project)
+    @notes = params[:notes]
+    @notes ||= ''
   end
 
   def extract_changed_attributes_for_move(params)
     changed_attributes = {}
-    [:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute|
+    [:assigned_to_id, :status_id, :start_date, :due_date, :priority_id].each do |valid_attribute|
       unless params[valid_attribute].blank?
         changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute])
       end
--- a/app/controllers/.svn/text-base/issues_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/issues_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -21,12 +21,13 @@
   
   before_filter :find_issue, :only => [:show, :edit, :update]
   before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :move, :perform_move, :destroy]
+  before_filter :check_project_uniqueness, :only => [:move, :perform_move]
   before_filter :find_project, :only => [:new, :create]
   before_filter :authorize, :except => [:index]
   before_filter :find_optional_project, :only => [:index]
   before_filter :check_for_default_issue_status, :only => [:new, :create]
   before_filter :build_new_issue_from_params, :only => [:new, :create]
-  accept_key_auth :index, :show
+  accept_key_auth :index, :show, :create, :update, :destroy
 
   rescue_from Query::StatementInvalid, :with => :query_statement_invalid
   
@@ -149,11 +150,7 @@
       end
     end
   end
-  
-  # Attributes that can be updated on workflow transition (without :edit permission)
-  # TODO: make it configurable (at least per role)
-  UPDATABLE_ATTRS_ON_TRANSITION = %w(status_id assigned_to_id fixed_version_id done_ratio) unless const_defined?(:UPDATABLE_ATTRS_ON_TRANSITION)
-  
+    
   def edit
     update_issue_from_params
 
@@ -193,8 +190,10 @@
   # Bulk edit a set of issues
   def bulk_edit
     @issues.sort!
-    @available_statuses = Workflow.available_statuses(@project)
-    @custom_fields = @project.all_issue_custom_fields
+    @available_statuses = @projects.map{|p|Workflow.available_statuses(p)}.inject{|memo,w|memo & w}
+    @custom_fields = @projects.map{|p|p.all_issue_custom_fields}.inject{|memo,c|memo & c}
+    @assignables = @projects.map(&:assignable_users).inject{|memo,a| memo & a}
+    @trackers = @projects.map(&:trackers).inject{|memo,t| memo & t}
   end
 
   def bulk_update
@@ -241,7 +240,7 @@
     end
     @issues.each(&:destroy)
     respond_to do |format|
-      format.html { redirect_to :action => 'index', :project_id => @project }
+      format.html { redirect_back_or_default(:action => 'index', :project_id => @project) }
       format.xml  { head :ok }
       format.json  { head :ok }
     end
@@ -270,20 +269,15 @@
     @priorities = IssuePriority.all
     @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
     @time_entry = TimeEntry.new
+    @time_entry.attributes = params[:time_entry]
     
     @notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil)
     @issue.init_journal(User.current, @notes)
-    # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed
-    if (@edit_allowed || !@allowed_statuses.empty?) && params[:issue]
-      attrs = params[:issue].dup
-      attrs.delete_if {|k,v| !UPDATABLE_ATTRS_ON_TRANSITION.include?(k) } unless @edit_allowed
-      attrs.delete(:status_id) unless @allowed_statuses.detect {|s| s.id.to_s == attrs[:status_id].to_s}
-      @issue.safe_attributes = attrs
-    end
-
+    @issue.safe_attributes = params[:issue]
   end
 
   # TODO: Refactor, lots of extra code in here
+  # TODO: Changing tracker on an existing issue should not trigger this
   def build_new_issue_from_params
     if params[:id].blank?
       @issue = Issue.new
@@ -300,12 +294,14 @@
       render_error l(:error_no_tracker_in_project)
       return false
     end
+    @issue.start_date ||= Date.today
     if params[:issue].is_a?(Hash)
       @issue.safe_attributes = params[:issue]
-      @issue.watcher_user_ids = params[:issue]['watcher_user_ids'] if User.current.allowed_to?(:add_issue_watchers, @project)
+      if User.current.allowed_to?(:add_issue_watchers, @project) && @issue.new_record?
+        @issue.watcher_user_ids = params[:issue]['watcher_user_ids']
+      end
     end
     @issue.author = User.current
-    @issue.start_date ||= Date.today
     @priorities = IssuePriority.all
     @allowed_statuses = @issue.new_statuses_allowed_to(User.current, true)
   end
--- a/app/controllers/.svn/text-base/my_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/my_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -54,7 +54,7 @@
     @pref = @user.pref
     if request.post?
       @user.attributes = params[:user]
-      @user.mail_notification = (params[:notification_option] == 'all')
+      @user.mail_notification = params[:notification_option] || 'only_my_events'
       @user.pref.attributes = params[:pref]
       @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
       if @user.save
@@ -66,12 +66,8 @@
         return
       end
     end
-    @notification_options = [[l(:label_user_mail_option_all), 'all'],
-                             [l(:label_user_mail_option_none), 'none']]
-    # Only users that belong to more than 1 project can select projects for which they are notified
-    # Note that @user.membership.size would fail since AR ignores :include association option when doing a count
-    @notification_options.insert 1, [l(:label_user_mail_option_selected), 'selected'] if @user.memberships.length > 1
-    @notification_option = @user.mail_notification? ? 'all' : (@user.notified_projects_ids.empty? ? 'none' : 'selected')    
+    @notification_options = @user.valid_notification_options
+    @notification_option = @user.mail_notification #? ? 'all' : (@user.notified_projects_ids.empty? ? 'none' : 'selected')    
   end
 
   # Manage user's password
--- a/app/controllers/.svn/text-base/news_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/news_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -18,10 +18,10 @@
 class NewsController < ApplicationController
   default_search_scope :news
   model_object News
-  before_filter :find_model_object, :except => [:new, :create, :index, :preview]
-  before_filter :find_project_from_association, :except => [:new, :create, :index, :preview]
-  before_filter :find_project, :only => [:new, :create, :preview]
-  before_filter :authorize, :except => [:index, :preview]
+  before_filter :find_model_object, :except => [:new, :create, :index]
+  before_filter :find_project_from_association, :except => [:new, :create, :index]
+  before_filter :find_project, :only => [:new, :create]
+  before_filter :authorize, :except => [:index]
   before_filter :find_optional_project, :only => :index
   accept_key_auth :index
   
@@ -78,11 +78,6 @@
     redirect_to :action => 'index', :project_id => @project
   end
   
-  def preview
-    @text = (params[:news] ? params[:news][:description] : nil)
-    render :partial => 'common/preview'
-  end
-  
 private
   def find_project
     @project = Project.find(params[:project_id])
--- a/app/controllers/.svn/text-base/previews_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/previews_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -16,6 +16,11 @@
     render :layout => false
   end
 
+  def news
+    @text = (params[:news] ? params[:news][:description] : nil)
+    render :partial => 'common/preview'
+  end
+
   private
   
   def find_project
--- a/app/controllers/.svn/text-base/projects_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/projects_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -93,7 +93,7 @@
           flash[:notice] = l(:notice_successful_create)
           redirect_to :controller => 'projects', :action => 'settings', :id => @project
         }
-        format.xml  { head :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) }
+        format.xml  { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) }
       end
     else
       respond_to do |format|
@@ -125,13 +125,13 @@
         if validate_parent_id && @project.copy(@source_project, :only => params[:only])
           @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
           flash[:notice] = l(:notice_successful_create)
-          redirect_to :controller => 'admin', :action => 'projects'
+          redirect_to :controller => 'projects', :action => 'settings'
         elsif !@project.new_record?
           # Project was created
           # But some objects were not copied due to validation failures
           # (eg. issues from disabled trackers)
           # TODO: inform about that
-          redirect_to :controller => 'admin', :action => 'projects'
+          redirect_to :controller => 'projects', :action => 'settings'
         end
       end
     end
--- a/app/controllers/.svn/text-base/settings_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/settings_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -26,7 +26,7 @@
   end
 
   def edit
-    @notifiables = %w(issue_added issue_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated)
+    @notifiables = Redmine::Notifiable.all
     if request.post? && params[:settings] && params[:settings].is_a?(Hash)
       settings = (params[:settings] || {}).dup.symbolize_keys
       settings.each do |name, value|
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/controllers/.svn/text-base/time_entry_reports_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,209 @@
+class TimeEntryReportsController < ApplicationController
+  menu_item :issues
+  before_filter :find_optional_project
+  before_filter :load_available_criterias
+
+  helper :sort
+  include SortHelper
+  helper :issues
+  helper :timelog
+  include TimelogHelper
+  helper :custom_fields
+  include CustomFieldsHelper
+
+  def report
+    @criterias = params[:criterias] || []
+    @criterias = @criterias.select{|criteria| @available_criterias.has_key? criteria}
+    @criterias.uniq!
+    @criterias = @criterias[0,3]
+    
+    @columns = (params[:columns] && %w(year month week day).include?(params[:columns])) ? params[:columns] : 'month'
+    
+    retrieve_date_range
+    
+    unless @criterias.empty?
+      sql_select = @criterias.collect{|criteria| @available_criterias[criteria][:sql] + " AS " + criteria}.join(', ')
+      sql_group_by = @criterias.collect{|criteria| @available_criterias[criteria][:sql]}.join(', ')
+      sql_condition = ''
+      
+      if @project.nil?
+        sql_condition = Project.allowed_to_condition(User.current, :view_time_entries)
+      elsif @issue.nil?
+        sql_condition = @project.project_condition(Setting.display_subprojects_issues?)
+      else
+        sql_condition = "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}"
+      end
+
+      sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours"
+      sql << " FROM #{TimeEntry.table_name}"
+      sql << time_report_joins
+      sql << " WHERE"
+      sql << " (%s) AND" % sql_condition
+      sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from), ActiveRecord::Base.connection.quoted_date(@to)]
+      sql << " GROUP BY #{sql_group_by}, tyear, tmonth, tweek, spent_on"
+      
+      @hours = ActiveRecord::Base.connection.select_all(sql)
+      
+      @hours.each do |row|
+        case @columns
+        when 'year'
+          row['year'] = row['tyear']
+        when 'month'
+          row['month'] = "#{row['tyear']}-#{row['tmonth']}"
+        when 'week'
+          row['week'] = "#{row['tyear']}-#{row['tweek']}"
+        when 'day'
+          row['day'] = "#{row['spent_on']}"
+        end
+      end
+      
+      @total_hours = @hours.inject(0) {|s,k| s = s + k['hours'].to_f}
+      
+      @periods = []
+      # Date#at_beginning_of_ not supported in Rails 1.2.x
+      date_from = @from.to_time
+      # 100 columns max
+      while date_from <= @to.to_time && @periods.length < 100
+        case @columns
+        when 'year'
+          @periods << "#{date_from.year}"
+          date_from = (date_from + 1.year).at_beginning_of_year
+        when 'month'
+          @periods << "#{date_from.year}-#{date_from.month}"
+          date_from = (date_from + 1.month).at_beginning_of_month
+        when 'week'
+          @periods << "#{date_from.year}-#{date_from.to_date.cweek}"
+          date_from = (date_from + 7.day).at_beginning_of_week
+        when 'day'
+          @periods << "#{date_from.to_date}"
+          date_from = date_from + 1.day
+        end
+      end
+    end
+    
+    respond_to do |format|
+      format.html { render :layout => !request.xhr? }
+      format.csv  { send_data(report_to_csv(@criterias, @periods, @hours), :type => 'text/csv; header=present', :filename => 'timelog.csv') }
+    end
+  end
+  
+  private
+
+  # TODO: duplicated in TimelogController
+  def find_optional_project
+    if !params[:issue_id].blank?
+      @issue = Issue.find(params[:issue_id])
+      @project = @issue.project
+    elsif !params[:project_id].blank?
+      @project = Project.find(params[:project_id])
+    end
+    deny_access unless User.current.allowed_to?(:view_time_entries, @project, :global => true)
+  end
+
+  # Retrieves the date range based on predefined ranges or specific from/to param dates
+  # TODO: duplicated in TimelogController
+  def retrieve_date_range
+    @free_period = false
+    @from, @to = nil, nil
+
+    if params[:period_type] == '1' || (params[:period_type].nil? && !params[:period].nil?)
+      case params[:period].to_s
+      when 'today'
+        @from = @to = Date.today
+      when 'yesterday'
+        @from = @to = Date.today - 1
+      when 'current_week'
+        @from = Date.today - (Date.today.cwday - 1)%7
+        @to = @from + 6
+      when 'last_week'
+        @from = Date.today - 7 - (Date.today.cwday - 1)%7
+        @to = @from + 6
+      when '7_days'
+        @from = Date.today - 7
+        @to = Date.today
+      when 'current_month'
+        @from = Date.civil(Date.today.year, Date.today.month, 1)
+        @to = (@from >> 1) - 1
+      when 'last_month'
+        @from = Date.civil(Date.today.year, Date.today.month, 1) << 1
+        @to = (@from >> 1) - 1
+      when '30_days'
+        @from = Date.today - 30
+        @to = Date.today
+      when 'current_year'
+        @from = Date.civil(Date.today.year, 1, 1)
+        @to = Date.civil(Date.today.year, 12, 31)
+      end
+    elsif params[:period_type] == '2' || (params[:period_type].nil? && (!params[:from].nil? || !params[:to].nil?))
+      begin; @from = params[:from].to_s.to_date unless params[:from].blank?; rescue; end
+      begin; @to = params[:to].to_s.to_date unless params[:to].blank?; rescue; end
+      @free_period = true
+    else
+      # default
+    end
+    
+    @from, @to = @to, @from if @from && @to && @from > @to
+    @from ||= (TimeEntry.earilest_date_for_project(@project) || Date.today)
+    @to   ||= (TimeEntry.latest_date_for_project(@project) || Date.today)
+  end
+
+  def load_available_criterias
+    @available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id",
+                                          :klass => Project,
+                                          :label => :label_project},
+                             'version' => {:sql => "#{Issue.table_name}.fixed_version_id",
+                                          :klass => Version,
+                                          :label => :label_version},
+                             'category' => {:sql => "#{Issue.table_name}.category_id",
+                                            :klass => IssueCategory,
+                                            :label => :field_category},
+                             'member' => {:sql => "#{TimeEntry.table_name}.user_id",
+                                         :klass => User,
+                                         :label => :label_member},
+                             'tracker' => {:sql => "#{Issue.table_name}.tracker_id",
+                                          :klass => Tracker,
+                                          :label => :label_tracker},
+                             'activity' => {:sql => "#{TimeEntry.table_name}.activity_id",
+                                           :klass => TimeEntryActivity,
+                                           :label => :label_activity},
+                             'issue' => {:sql => "#{TimeEntry.table_name}.issue_id",
+                                         :klass => Issue,
+                                         :label => :label_issue}
+                           }
+    
+    # Add list and boolean custom fields as available criterias
+    custom_fields = (@project.nil? ? IssueCustomField.for_all : @project.all_issue_custom_fields)
+    custom_fields.select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
+      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Issue' AND c.customized_id = #{Issue.table_name}.id)",
+                                             :format => cf.field_format,
+                                             :label => cf.name}
+    end if @project
+    
+    # Add list and boolean time entry custom fields
+    TimeEntryCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
+      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'TimeEntry' AND c.customized_id = #{TimeEntry.table_name}.id)",
+                                             :format => cf.field_format,
+                                             :label => cf.name}
+    end
+
+    # Add list and boolean time entry activity custom fields
+    TimeEntryActivityCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
+      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Enumeration' AND c.customized_id = #{TimeEntry.table_name}.activity_id)",
+                                             :format => cf.field_format,
+                                             :label => cf.name}
+    end
+
+    call_hook(:controller_timelog_available_criterias, { :available_criterias => @available_criterias, :project => @project })
+    @available_criterias
+  end
+
+  def time_report_joins
+    sql = ''
+    sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id"
+    sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id"
+    # TODO: rename hook
+    call_hook(:controller_timelog_time_report_joins, {:sql => sql} )
+    sql
+  end
+
+end
--- a/app/controllers/.svn/text-base/timelog_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/timelog_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -17,12 +17,11 @@
 
 class TimelogController < ApplicationController
   menu_item :issues
-  before_filter :find_project, :authorize, :only => [:edit, :destroy]
-  before_filter :find_optional_project, :only => [:report, :details]
-  before_filter :load_available_criterias, :only => [:report]
+  before_filter :find_project, :only => [:new, :create]
+  before_filter :find_time_entry, :only => [:edit, :update, :destroy]
+  before_filter :authorize, :except => [:index]
+  before_filter :find_optional_project, :only => [:index]
 
-  verify :method => :post, :only => :destroy, :redirect_to => { :action => :details }
-  
   helper :sort
   include SortHelper
   helper :issues
@@ -30,83 +29,7 @@
   helper :custom_fields
   include CustomFieldsHelper
   
-  def report
-    @criterias = params[:criterias] || []
-    @criterias = @criterias.select{|criteria| @available_criterias.has_key? criteria}
-    @criterias.uniq!
-    @criterias = @criterias[0,3]
-    
-    @columns = (params[:columns] && %w(year month week day).include?(params[:columns])) ? params[:columns] : 'month'
-    
-    retrieve_date_range
-    
-    unless @criterias.empty?
-      sql_select = @criterias.collect{|criteria| @available_criterias[criteria][:sql] + " AS " + criteria}.join(', ')
-      sql_group_by = @criterias.collect{|criteria| @available_criterias[criteria][:sql]}.join(', ')
-      sql_condition = ''
-      
-      if @project.nil?
-        sql_condition = Project.allowed_to_condition(User.current, :view_time_entries)
-      elsif @issue.nil?
-        sql_condition = @project.project_condition(Setting.display_subprojects_issues?)
-      else
-        sql_condition = "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}"
-      end
-
-      sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours"
-      sql << " FROM #{TimeEntry.table_name}"
-      sql << time_report_joins
-      sql << " WHERE"
-      sql << " (%s) AND" % sql_condition
-      sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from), ActiveRecord::Base.connection.quoted_date(@to)]
-      sql << " GROUP BY #{sql_group_by}, tyear, tmonth, tweek, spent_on"
-      
-      @hours = ActiveRecord::Base.connection.select_all(sql)
-      
-      @hours.each do |row|
-        case @columns
-        when 'year'
-          row['year'] = row['tyear']
-        when 'month'
-          row['month'] = "#{row['tyear']}-#{row['tmonth']}"
-        when 'week'
-          row['week'] = "#{row['tyear']}-#{row['tweek']}"
-        when 'day'
-          row['day'] = "#{row['spent_on']}"
-        end
-      end
-      
-      @total_hours = @hours.inject(0) {|s,k| s = s + k['hours'].to_f}
-      
-      @periods = []
-      # Date#at_beginning_of_ not supported in Rails 1.2.x
-      date_from = @from.to_time
-      # 100 columns max
-      while date_from <= @to.to_time && @periods.length < 100
-        case @columns
-        when 'year'
-          @periods << "#{date_from.year}"
-          date_from = (date_from + 1.year).at_beginning_of_year
-        when 'month'
-          @periods << "#{date_from.year}-#{date_from.month}"
-          date_from = (date_from + 1.month).at_beginning_of_month
-        when 'week'
-          @periods << "#{date_from.year}-#{date_from.to_date.cweek}"
-          date_from = (date_from + 7.day).at_beginning_of_week
-        when 'day'
-          @periods << "#{date_from.to_date}"
-          date_from = date_from + 1.day
-        end
-      end
-    end
-    
-    respond_to do |format|
-      format.html { render :layout => !request.xhr? }
-      format.csv  { send_data(report_to_csv(@criterias, @periods, @hours), :type => 'text/csv; header=present', :filename => 'timelog.csv') }
-    end
-  end
-  
-  def details
+  def index
     sort_init 'spent_on', 'desc'
     sort_update 'spent_on' => 'spent_on',
                 'user' => 'user_id',
@@ -162,24 +85,52 @@
       end
     end
   end
-  
-  def edit
-    (render_403; return) if @time_entry && !@time_entry.editable_by?(User.current)
+
+  def new
+    @time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today)
+    @time_entry.attributes = params[:time_entry]
+    
+    call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
+    render :action => 'edit'
+  end
+
+  verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
+  def create
     @time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today)
     @time_entry.attributes = params[:time_entry]
     
     call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
     
-    if request.post? and @time_entry.save
+    if @time_entry.save
       flash[:notice] = l(:notice_successful_update)
-      redirect_back_or_default :action => 'details', :project_id => @time_entry.project
-      return
+      redirect_back_or_default :action => 'index', :project_id => @time_entry.project
+    else
+      render :action => 'edit'
     end    
   end
   
+  def edit
+    @time_entry.attributes = params[:time_entry]
+    
+    call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
+  end
+
+  verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
+  def update
+    @time_entry.attributes = params[:time_entry]
+    
+    call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
+    
+    if @time_entry.save
+      flash[:notice] = l(:notice_successful_update)
+      redirect_back_or_default :action => 'index', :project_id => @time_entry.project
+    else
+      render :action => 'edit'
+    end    
+  end
+
+  verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed }
   def destroy
-    (render_404; return) unless @time_entry
-    (render_403; return) unless @time_entry.editable_by?(User.current)
     if @time_entry.destroy && @time_entry.destroyed?
       flash[:notice] = l(:notice_successful_delete)
     else
@@ -187,15 +138,23 @@
     end
     redirect_to :back
   rescue ::ActionController::RedirectBackError
-    redirect_to :action => 'details', :project_id => @time_entry.project
+    redirect_to :action => 'index', :project_id => @time_entry.project
   end
 
 private
+  def find_time_entry
+    @time_entry = TimeEntry.find(params[:id])
+    unless @time_entry.editable_by?(User.current)
+      render_403
+      return false
+    end
+    @project = @time_entry.project
+  rescue ActiveRecord::RecordNotFound
+    render_404
+  end
+
   def find_project
-    if params[:id]
-      @time_entry = TimeEntry.find(params[:id])
-      @project = @time_entry.project
-    elsif params[:issue_id]
+    if params[:issue_id]
       @issue = Issue.find(params[:issue_id])
       @project = @issue.project
     elsif params[:project_id]
@@ -264,61 +223,4 @@
     @to   ||= (TimeEntry.latest_date_for_project(@project) || Date.today)
   end
 
-  def load_available_criterias
-    @available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id",
-                                          :klass => Project,
-                                          :label => :label_project},
-                             'version' => {:sql => "#{Issue.table_name}.fixed_version_id",
-                                          :klass => Version,
-                                          :label => :label_version},
-                             'category' => {:sql => "#{Issue.table_name}.category_id",
-                                            :klass => IssueCategory,
-                                            :label => :field_category},
-                             'member' => {:sql => "#{TimeEntry.table_name}.user_id",
-                                         :klass => User,
-                                         :label => :label_member},
-                             'tracker' => {:sql => "#{Issue.table_name}.tracker_id",
-                                          :klass => Tracker,
-                                          :label => :label_tracker},
-                             'activity' => {:sql => "#{TimeEntry.table_name}.activity_id",
-                                           :klass => TimeEntryActivity,
-                                           :label => :label_activity},
-                             'issue' => {:sql => "#{TimeEntry.table_name}.issue_id",
-                                         :klass => Issue,
-                                         :label => :label_issue}
-                           }
-    
-    # Add list and boolean custom fields as available criterias
-    custom_fields = (@project.nil? ? IssueCustomField.for_all : @project.all_issue_custom_fields)
-    custom_fields.select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
-      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Issue' AND c.customized_id = #{Issue.table_name}.id)",
-                                             :format => cf.field_format,
-                                             :label => cf.name}
-    end if @project
-    
-    # Add list and boolean time entry custom fields
-    TimeEntryCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
-      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'TimeEntry' AND c.customized_id = #{TimeEntry.table_name}.id)",
-                                             :format => cf.field_format,
-                                             :label => cf.name}
-    end
-
-    # Add list and boolean time entry activity custom fields
-    TimeEntryActivityCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
-      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Enumeration' AND c.customized_id = #{TimeEntry.table_name}.activity_id)",
-                                             :format => cf.field_format,
-                                             :label => cf.name}
-    end
-
-    call_hook(:controller_timelog_available_criterias, { :available_criterias => @available_criterias, :project => @project })
-    @available_criterias
-  end
-
-  def time_report_joins
-    sql = ''
-    sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id"
-    sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id"
-    call_hook(:controller_timelog_time_report_joins, {:sql => sql} )
-    sql
-  end
 end
--- a/app/controllers/.svn/text-base/users_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/users_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -51,7 +51,6 @@
   
   def show
     @user = User.find(params[:id])
-    @custom_values = @user.custom_values
     
     # show projects based on current user visibility
     @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current))
@@ -71,53 +70,96 @@
     render_404
   end
 
-  def add
-    if request.get?
-      @user = User.new(:language => Setting.default_language)
+  def new
+    @notification_options = User::MAIL_NOTIFICATION_OPTIONS
+    @notification_option = Setting.default_notification_option
+
+    @user = User.new(:language => Setting.default_language)
+    @auth_sources = AuthSource.find(:all)
+  end
+  
+  verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
+  def create
+    @notification_options = User::MAIL_NOTIFICATION_OPTIONS
+    @notification_option = Setting.default_notification_option
+
+    @user = User.new(params[:user])
+    @user.admin = params[:user][:admin] || false
+    @user.login = params[:user][:login]
+    @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id
+
+    # TODO: Similar to My#account
+    @user.mail_notification = params[:notification_option] || 'only_my_events'
+    @user.pref.attributes = params[:pref]
+    @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
+
+    if @user.save
+      @user.pref.save
+      @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : [])
+
+      Mailer.deliver_account_information(@user, params[:password]) if params[:send_information]
+      flash[:notice] = l(:notice_successful_create)
+      redirect_to(params[:continue] ? {:controller => 'users', :action => 'new'} : 
+                                      {:controller => 'users', :action => 'edit', :id => @user})
+      return
     else
-      @user = User.new(params[:user])
-      @user.admin = params[:user][:admin] || false
-      @user.login = params[:user][:login]
-      @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id
-      if @user.save
-        Mailer.deliver_account_information(@user, params[:password]) if params[:send_information]
-        flash[:notice] = l(:notice_successful_create)
-        redirect_to(params[:continue] ? {:controller => 'users', :action => 'add'} : 
-                                        {:controller => 'users', :action => 'edit', :id => @user})
-        return
-      end
+      @auth_sources = AuthSource.find(:all)
+      @notification_option = @user.mail_notification
+
+      render :action => 'new'
     end
-    @auth_sources = AuthSource.find(:all)
   end
 
   def edit
     @user = User.find(params[:id])
-    if request.post?
-      @user.admin = params[:user][:admin] if params[:user][:admin]
-      @user.login = params[:user][:login] if params[:user][:login]
-      if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?)
-        @user.password, @user.password_confirmation = params[:password], params[:password_confirmation]
-      end
-      @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids]
-      @user.attributes = params[:user]
-      # Was the account actived ? (do it before User#save clears the change)
-      was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE])
-      if @user.save
-        if was_activated
-          Mailer.deliver_account_activated(@user)
-        elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil?
-          Mailer.deliver_account_information(@user, params[:password])
-        end
-        flash[:notice] = l(:notice_successful_update)
-        redirect_to :back
-      end
-    end
+    @notification_options = @user.valid_notification_options
+    @notification_option = @user.mail_notification
+
     @auth_sources = AuthSource.find(:all)
     @membership ||= Member.new
+  end
+  
+  verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
+  def update
+    @user = User.find(params[:id])
+    @notification_options = @user.valid_notification_options
+    @notification_option = @user.mail_notification
+
+    @user.admin = params[:user][:admin] if params[:user][:admin]
+    @user.login = params[:user][:login] if params[:user][:login]
+    if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?)
+      @user.password, @user.password_confirmation = params[:password], params[:password_confirmation]
+    end
+    @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids]
+    @user.attributes = params[:user]
+    # Was the account actived ? (do it before User#save clears the change)
+    was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE])
+    # TODO: Similar to My#account
+    @user.mail_notification = params[:notification_option] || 'only_my_events'
+    @user.pref.attributes = params[:pref]
+    @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
+
+    if @user.save
+      @user.pref.save
+      @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : [])
+
+      if was_activated
+        Mailer.deliver_account_activated(@user)
+      elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil?
+        Mailer.deliver_account_information(@user, params[:password])
+      end
+      flash[:notice] = l(:notice_successful_update)
+      redirect_to :back
+    else
+      @auth_sources = AuthSource.find(:all)
+      @membership ||= Member.new
+
+      render :action => :edit
+    end
   rescue ::ActionController::RedirectBackError
     redirect_to :controller => 'users', :action => 'edit', :id => @user
   end
-  
+
   def edit_membership
     @user = User.find(params[:id])
     @membership = Member.edit_membership(params[:membership_id], params[:membership], @user)
--- a/app/controllers/.svn/text-base/versions_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/versions_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -109,6 +109,10 @@
       if @version.update_attributes(attributes)
         flash[:notice] = l(:notice_successful_update)
         redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
+      else
+        respond_to do |format|
+          format.html { render :action => 'edit' }
+        end
       end
     end
   end
--- a/app/controllers/.svn/text-base/wiki_controller.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/.svn/text-base/wiki_controller.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -17,20 +17,39 @@
 
 require 'diff'
 
+# The WikiController follows the Rails REST controller pattern but with
+# a few differences
+#
+# * index - shows a list of WikiPages grouped by page or date
+# * new - not used
+# * create - not used
+# * show - will also show the form for creating a new wiki page
+# * edit - used to edit an existing or new page
+# * update - used to save a wiki page update to the database, including new pages
+# * destroy - normal
+#
+# Other member and collection methods are also used
+#
+# TODO: still being worked on
 class WikiController < ApplicationController
   default_search_scope :wiki_pages
   before_filter :find_wiki, :authorize
   before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy]
   
-  verify :method => :post, :only => [:destroy, :protect], :redirect_to => { :action => :index }
+  verify :method => :post, :only => [:protect], :redirect_to => { :action => :show }
 
   helper :attachments
   include AttachmentsHelper   
   helper :watchers
-  
+
+  # List of pages, sorted alphabetically and by parent (hierarchy)
+  def index
+    load_pages_grouped_by_date_without_content
+  end
+
   # display a page (in editing mode if it doesn't exist)
-  def index
-    page_title = params[:page]
+  def show
+    page_title = params[:id]
     @page = @wiki.find_or_new_page(page_title)
     if @page.new_record?
       if User.current.allowed_to?(:edit_wiki_pages, @project) && editable?
@@ -63,7 +82,7 @@
   
   # edit an existing page or a new one
   def edit
-    @page = @wiki.find_or_new_page(params[:page])    
+    @page = @wiki.find_or_new_page(params[:id])    
     return render_403 unless editable?
     @page.content = WikiContent.new(:page => @page) if @page.new_record?
     
@@ -71,34 +90,48 @@
     @content.text = initial_page_content(@page) if @content.text.blank?
     # don't keep previous comment
     @content.comments = nil
-    if request.get?
-      # To prevent StaleObjectError exception when reverting to a previous version
-      @content.version = @page.content.version
-    else
-      if !@page.new_record? && @content.text == params[:content][:text]
-        attachments = Attachment.attach_files(@page, params[:attachments])
-        render_attachment_warning_if_needed(@page)
-        # don't save if text wasn't changed
-        redirect_to :action => 'index', :id => @project, :page => @page.title
-        return
-      end
-      #@content.text = params[:content][:text]
-      #@content.comments = params[:content][:comments]
-      @content.attributes = params[:content]
-      @content.author = User.current
-      # if page is new @page.save will also save content, but not if page isn't a new record
-      if (@page.new_record? ? @page.save : @content.save)
-        attachments = Attachment.attach_files(@page, params[:attachments])
-        render_attachment_warning_if_needed(@page)
-        call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page})
-        redirect_to :action => 'index', :id => @project, :page => @page.title
-      end
-    end
+
+    # To prevent StaleObjectError exception when reverting to a previous version
+    @content.version = @page.content.version
   rescue ActiveRecord::StaleObjectError
     # Optimistic locking exception
     flash[:error] = l(:notice_locking_conflict)
   end
-  
+
+  verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
+  # Creates a new page or updates an existing one
+  def update
+    @page = @wiki.find_or_new_page(params[:id])    
+    return render_403 unless editable?
+    @page.content = WikiContent.new(:page => @page) if @page.new_record?
+    
+    @content = @page.content_for_version(params[:version])
+    @content.text = initial_page_content(@page) if @content.text.blank?
+    # don't keep previous comment
+    @content.comments = nil
+
+    if !@page.new_record? && params[:content].present? && @content.text == params[:content][:text]
+      attachments = Attachment.attach_files(@page, params[:attachments])
+      render_attachment_warning_if_needed(@page)
+      # don't save if text wasn't changed
+      redirect_to :action => 'show', :project_id => @project, :id => @page.title
+      return
+    end
+    @content.attributes = params[:content]
+    @content.author = User.current
+    # if page is new @page.save will also save content, but not if page isn't a new record
+    if (@page.new_record? ? @page.save : @content.save)
+      attachments = Attachment.attach_files(@page, params[:attachments])
+      render_attachment_warning_if_needed(@page)
+      call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page})
+      redirect_to :action => 'show', :project_id => @project, :id => @page.title
+    end
+
+  rescue ActiveRecord::StaleObjectError
+    # Optimistic locking exception
+    flash[:error] = l(:notice_locking_conflict)
+  end
+
   # rename a page
   def rename
     return render_403 unless editable?
@@ -107,13 +140,13 @@
     @original_title = @page.pretty_title
     if request.post? && @page.update_attributes(params[:wiki_page])
       flash[:notice] = l(:notice_successful_update)
-      redirect_to :action => 'index', :id => @project, :page => @page.title
+      redirect_to :action => 'show', :project_id => @project, :id => @page.title
     end
   end
   
   def protect
     @page.update_attribute :protected, params[:protected]
-    redirect_to :action => 'index', :id => @project, :page => @page.title
+    redirect_to :action => 'show', :project_id => @project, :id => @page.title
   end
 
   # show page history
@@ -139,7 +172,8 @@
     @annotate = @page.annotate(params[:version])
     render_404 unless @annotate
   end
-  
+
+  verify :method => :delete, :only => [:destroy], :redirect_to => { :action => :show }
   # Removes a wiki page and its history
   # Children can be either set as root pages, removed or reassigned to another parent page
   def destroy
@@ -166,41 +200,26 @@
       end
     end
     @page.destroy
-    redirect_to :action => 'special', :id => @project, :page => 'Page_index'
+    redirect_to :action => 'index', :project_id => @project
   end
 
-  # display special pages
-  def special
-    page_title = params[:page].downcase
-    case page_title
-    # show pages index, sorted by title
-    when 'page_index', 'date_index'
-      # eager load information about last updates, without loading text
-      @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on",
-                                      :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id",
-                                      :order => 'title'
-      @pages_by_date = @pages.group_by {|p| p.updated_on.to_date}
-      @pages_by_parent_id = @pages.group_by(&:parent_id)
-    # export wiki to a single html file
-    when 'export'
-      if User.current.allowed_to?(:export_wiki_pages, @project)
-        @pages = @wiki.pages.find :all, :order => 'title'
-        export = render_to_string :action => 'export_multiple', :layout => false
-        send_data(export, :type => 'text/html', :filename => "wiki.html")
-      else
-        redirect_to :action => 'index', :id => @project, :page => nil
-      end
-      return      
+  # Export wiki to a single html file
+  def export
+    if User.current.allowed_to?(:export_wiki_pages, @project)
+      @pages = @wiki.pages.find :all, :order => 'title'
+      export = render_to_string :action => 'export_multiple', :layout => false
+      send_data(export, :type => 'text/html', :filename => "wiki.html")
     else
-      # requested special page doesn't exist, redirect to default page
-      redirect_to :action => 'index', :id => @project, :page => nil
-      return
+      redirect_to :action => 'show', :project_id => @project, :id => nil
     end
-    render :action => "special_#{page_title}"
+  end
+
+  def date_index
+    load_pages_grouped_by_date_without_content
   end
   
   def preview
-    page = @wiki.find_page(params[:page])
+    page = @wiki.find_page(params[:id])
     # page is nil when previewing a new page
     return render_403 unless page.nil? || editable?(page)
     if page
@@ -215,13 +234,13 @@
     return render_403 unless editable?
     attachments = Attachment.attach_files(@page, params[:attachments])
     render_attachment_warning_if_needed(@page)
-    redirect_to :action => 'index', :page => @page.title
+    redirect_to :action => 'show', :id => @page.title, :project_id => @project
   end
 
 private
   
   def find_wiki
-    @project = Project.find(params[:id])
+    @project = Project.find(params[:project_id])
     @wiki = @project.wiki
     render_404 unless @wiki
   rescue ActiveRecord::RecordNotFound
@@ -230,7 +249,7 @@
   
   # Finds the requested page and returns a 404 error if it doesn't exist
   def find_existing_page
-    @page = @wiki.find_page(params[:page])
+    @page = @wiki.find_page(params[:id])
     render_404 if @page.nil?
   end
   
@@ -245,4 +264,14 @@
     extend helper unless self.instance_of?(helper)
     helper.instance_method(:initial_page_content).bind(self).call(page)
   end
+
+  # eager load information about last updates, without loading text
+  def load_pages_grouped_by_date_without_content
+    @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on",
+                                    :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id",
+                                    :order => 'title'
+    @pages_by_date = @pages.group_by {|p| p.updated_on.to_date}
+    @pages_by_parent_id = @pages.group_by(&:parent_id)
+  end
+  
 end
--- a/app/controllers/application_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/application_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -153,8 +153,16 @@
 
   # Authorize the user for the requested action
   def authorize(ctrl = params[:controller], action = params[:action], global = false)
-    allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project, :global => global)
-    allowed ? true : deny_access
+    allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project || @projects, :global => global)
+    if allowed
+      true
+    else
+      if @project && @project.archived?
+        render_403 :message => :notice_not_authorized_archived_project
+      else
+        deny_access
+      end
+    end
   end
 
   # Authorize the user for the requested action outside a project
@@ -213,16 +221,19 @@
   def find_issues
     @issues = Issue.find_all_by_id(params[:id] || params[:ids])
     raise ActiveRecord::RecordNotFound if @issues.empty?
-    projects = @issues.collect(&:project).compact.uniq
-    if projects.size == 1
-      @project = projects.first
-    else
+    @projects = @issues.collect(&:project).compact.uniq
+    @project = @projects.first if @projects.size == 1
+  rescue ActiveRecord::RecordNotFound
+    render_404
+  end
+  
+  # Check if project is unique before bulk operations
+  def check_project_uniqueness
+    unless @project
       # TODO: let users bulk edit/move/destroy issues from different projects
       render_error 'Can not bulk edit/move/destroy issues from different projects'
       return false
     end
-  rescue ActiveRecord::RecordNotFound
-    render_404
   end
   
   # make sure that the user is a member of the project (or admin) if project is private
@@ -262,39 +273,33 @@
     redirect_to default
   end
   
-  def render_403
+  def render_403(options={})
     @project = nil
-    respond_to do |format|
-      format.html { render :template => "common/403", :layout => use_layout, :status => 403 }
-      format.atom { head 403 }
-      format.xml { head 403 }
-      format.js { head 403 }
-      format.json { head 403 }
-    end
+    render_error({:message => :notice_not_authorized, :status => 403}.merge(options))
     return false
   end
     
-  def render_404
-    respond_to do |format|
-      format.html { render :template => "common/404", :layout => use_layout, :status => 404 }
-      format.atom { head 404 }
-      format.xml { head 404 }
-      format.js { head 404 }
-      format.json { head 404 }
-    end
+  def render_404(options={})
+    render_error({:message => :notice_file_not_found, :status => 404}.merge(options))
     return false
   end
   
-  def render_error(msg)
+  # Renders an error response
+  def render_error(arg)
+    arg = {:message => arg} unless arg.is_a?(Hash)
+    
+    @message = arg[:message]
+    @message = l(@message) if @message.is_a?(Symbol)
+    @status = arg[:status] || 500
+    
     respond_to do |format|
-      format.html { 
-        flash.now[:error] = msg
-        render :text => '', :layout => use_layout, :status => 500
+      format.html {
+        render :template => 'common/error', :layout => use_layout, :status => @status
       }
-      format.atom { head 500 }
-      format.xml { head 500 }
-      format.js { head 500 }
-      format.json { head 500 }
+      format.atom { head @status }
+      format.xml { head @status }
+      format.js { head @status }
+      format.json { head @status }
     end
   end
 
--- a/app/controllers/calendars_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/calendars_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -8,6 +8,8 @@
   helper :projects
   helper :queries
   include QueriesHelper
+  helper :sort
+  include SortHelper
 
   def show
     if params[:year] and params[:year].to_i > 1900
--- a/app/controllers/context_menus_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/context_menus_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -16,17 +16,21 @@
     @projects = @issues.collect(&:project).compact.uniq
     @project = @projects.first if @projects.size == 1
 
-    @can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)),
+    @can = {:edit => User.current.allowed_to?(:edit_issues, @projects),
             :log_time => (@project && User.current.allowed_to?(:log_time, @project)),
-            :update => (@project && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && @allowed_statuses && !@allowed_statuses.empty?))),
+            :update => (User.current.allowed_to?(:edit_issues, @projects) || (User.current.allowed_to?(:change_status, @projects) && !@allowed_statuses.blank?)),
             :move => (@project && User.current.allowed_to?(:move_issues, @project)),
             :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
-            :delete => (@project && User.current.allowed_to?(:delete_issues, @project))
+            :delete => User.current.allowed_to?(:delete_issues, @projects)
             }
     if @project
       @assignables = @project.assignable_users
       @assignables << @issue.assigned_to if @issue && @issue.assigned_to && !@assignables.include?(@issue.assigned_to)
       @trackers = @project.trackers
+    else
+      #when multiple projects, we only keep the intersection of each set
+      @assignables = @projects.map(&:assignable_users).inject{|memo,a| memo & a}
+      @trackers = @projects.map(&:trackers).inject{|memo,t| memo & t}
     end
     
     @priorities = IssuePriority.all.reverse
--- a/app/controllers/files_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/files_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -28,7 +28,7 @@
     attachments = Attachment.attach_files(container, params[:attachments])
     render_attachment_warning_if_needed(container)
 
-    if !attachments.empty? && Setting.notified_events.include?('file_added')
+    if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
       Mailer.deliver_attachments_added(attachments[:files])
     end
     redirect_to project_files_path(@project)
--- a/app/controllers/issue_moves_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/issue_moves_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -1,6 +1,6 @@
 class IssueMovesController < ApplicationController
   default_search_scope :issues
-  before_filter :find_issues
+  before_filter :find_issues, :check_project_uniqueness
   before_filter :authorize
   
   def new
@@ -18,6 +18,7 @@
       @issues.each do |issue|
         issue.reload
         issue.init_journal(User.current)
+        issue.current_journal.notes = @notes if @notes.present?
         call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy })
         if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => extract_changed_attributes_for_move(params)})
           moved_issues << r
@@ -50,11 +51,13 @@
     @target_project ||= @project    
     @trackers = @target_project.trackers
     @available_statuses = Workflow.available_statuses(@project)
+    @notes = params[:notes]
+    @notes ||= ''
   end
 
   def extract_changed_attributes_for_move(params)
     changed_attributes = {}
-    [:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute|
+    [:assigned_to_id, :status_id, :start_date, :due_date, :priority_id].each do |valid_attribute|
       unless params[valid_attribute].blank?
         changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute])
       end
--- a/app/controllers/issues_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/issues_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -21,12 +21,13 @@
   
   before_filter :find_issue, :only => [:show, :edit, :update]
   before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :move, :perform_move, :destroy]
+  before_filter :check_project_uniqueness, :only => [:move, :perform_move]
   before_filter :find_project, :only => [:new, :create]
   before_filter :authorize, :except => [:index]
   before_filter :find_optional_project, :only => [:index]
   before_filter :check_for_default_issue_status, :only => [:new, :create]
   before_filter :build_new_issue_from_params, :only => [:new, :create]
-  accept_key_auth :index, :show
+  accept_key_auth :index, :show, :create, :update, :destroy
 
   rescue_from Query::StatementInvalid, :with => :query_statement_invalid
   
@@ -149,11 +150,7 @@
       end
     end
   end
-  
-  # Attributes that can be updated on workflow transition (without :edit permission)
-  # TODO: make it configurable (at least per role)
-  UPDATABLE_ATTRS_ON_TRANSITION = %w(status_id assigned_to_id fixed_version_id done_ratio) unless const_defined?(:UPDATABLE_ATTRS_ON_TRANSITION)
-  
+    
   def edit
     update_issue_from_params
 
@@ -193,8 +190,10 @@
   # Bulk edit a set of issues
   def bulk_edit
     @issues.sort!
-    @available_statuses = Workflow.available_statuses(@project)
-    @custom_fields = @project.all_issue_custom_fields
+    @available_statuses = @projects.map{|p|Workflow.available_statuses(p)}.inject{|memo,w|memo & w}
+    @custom_fields = @projects.map{|p|p.all_issue_custom_fields}.inject{|memo,c|memo & c}
+    @assignables = @projects.map(&:assignable_users).inject{|memo,a| memo & a}
+    @trackers = @projects.map(&:trackers).inject{|memo,t| memo & t}
   end
 
   def bulk_update
@@ -241,7 +240,7 @@
     end
     @issues.each(&:destroy)
     respond_to do |format|
-      format.html { redirect_to :action => 'index', :project_id => @project }
+      format.html { redirect_back_or_default(:action => 'index', :project_id => @project) }
       format.xml  { head :ok }
       format.json  { head :ok }
     end
@@ -270,20 +269,15 @@
     @priorities = IssuePriority.all
     @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
     @time_entry = TimeEntry.new
+    @time_entry.attributes = params[:time_entry]
     
     @notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil)
     @issue.init_journal(User.current, @notes)
-    # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed
-    if (@edit_allowed || !@allowed_statuses.empty?) && params[:issue]
-      attrs = params[:issue].dup
-      attrs.delete_if {|k,v| !UPDATABLE_ATTRS_ON_TRANSITION.include?(k) } unless @edit_allowed
-      attrs.delete(:status_id) unless @allowed_statuses.detect {|s| s.id.to_s == attrs[:status_id].to_s}
-      @issue.safe_attributes = attrs
-    end
-
+    @issue.safe_attributes = params[:issue]
   end
 
   # TODO: Refactor, lots of extra code in here
+  # TODO: Changing tracker on an existing issue should not trigger this
   def build_new_issue_from_params
     if params[:id].blank?
       @issue = Issue.new
@@ -300,12 +294,14 @@
       render_error l(:error_no_tracker_in_project)
       return false
     end
+    @issue.start_date ||= Date.today
     if params[:issue].is_a?(Hash)
       @issue.safe_attributes = params[:issue]
-      @issue.watcher_user_ids = params[:issue]['watcher_user_ids'] if User.current.allowed_to?(:add_issue_watchers, @project)
+      if User.current.allowed_to?(:add_issue_watchers, @project) && @issue.new_record?
+        @issue.watcher_user_ids = params[:issue]['watcher_user_ids']
+      end
     end
     @issue.author = User.current
-    @issue.start_date ||= Date.today
     @priorities = IssuePriority.all
     @allowed_statuses = @issue.new_statuses_allowed_to(User.current, true)
   end
--- a/app/controllers/my_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/my_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -54,7 +54,7 @@
     @pref = @user.pref
     if request.post?
       @user.attributes = params[:user]
-      @user.mail_notification = (params[:notification_option] == 'all')
+      @user.mail_notification = params[:notification_option] || 'only_my_events'
       @user.pref.attributes = params[:pref]
       @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
       if @user.save
@@ -66,12 +66,8 @@
         return
       end
     end
-    @notification_options = [[l(:label_user_mail_option_all), 'all'],
-                             [l(:label_user_mail_option_none), 'none']]
-    # Only users that belong to more than 1 project can select projects for which they are notified
-    # Note that @user.membership.size would fail since AR ignores :include association option when doing a count
-    @notification_options.insert 1, [l(:label_user_mail_option_selected), 'selected'] if @user.memberships.length > 1
-    @notification_option = @user.mail_notification? ? 'all' : (@user.notified_projects_ids.empty? ? 'none' : 'selected')    
+    @notification_options = @user.valid_notification_options
+    @notification_option = @user.mail_notification #? ? 'all' : (@user.notified_projects_ids.empty? ? 'none' : 'selected')    
   end
 
   # Manage user's password
--- a/app/controllers/news_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/news_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -18,10 +18,10 @@
 class NewsController < ApplicationController
   default_search_scope :news
   model_object News
-  before_filter :find_model_object, :except => [:new, :create, :index, :preview]
-  before_filter :find_project_from_association, :except => [:new, :create, :index, :preview]
-  before_filter :find_project, :only => [:new, :create, :preview]
-  before_filter :authorize, :except => [:index, :preview]
+  before_filter :find_model_object, :except => [:new, :create, :index]
+  before_filter :find_project_from_association, :except => [:new, :create, :index]
+  before_filter :find_project, :only => [:new, :create]
+  before_filter :authorize, :except => [:index]
   before_filter :find_optional_project, :only => :index
   accept_key_auth :index
   
@@ -78,11 +78,6 @@
     redirect_to :action => 'index', :project_id => @project
   end
   
-  def preview
-    @text = (params[:news] ? params[:news][:description] : nil)
-    render :partial => 'common/preview'
-  end
-  
 private
   def find_project
     @project = Project.find(params[:project_id])
--- a/app/controllers/previews_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/previews_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -16,6 +16,11 @@
     render :layout => false
   end
 
+  def news
+    @text = (params[:news] ? params[:news][:description] : nil)
+    render :partial => 'common/preview'
+  end
+
   private
   
   def find_project
--- a/app/controllers/projects_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/projects_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -93,7 +93,7 @@
           flash[:notice] = l(:notice_successful_create)
           redirect_to :controller => 'projects', :action => 'settings', :id => @project
         }
-        format.xml  { head :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) }
+        format.xml  { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) }
       end
     else
       respond_to do |format|
@@ -125,13 +125,13 @@
         if validate_parent_id && @project.copy(@source_project, :only => params[:only])
           @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
           flash[:notice] = l(:notice_successful_create)
-          redirect_to :controller => 'admin', :action => 'projects'
+          redirect_to :controller => 'projects', :action => 'settings'
         elsif !@project.new_record?
           # Project was created
           # But some objects were not copied due to validation failures
           # (eg. issues from disabled trackers)
           # TODO: inform about that
-          redirect_to :controller => 'admin', :action => 'projects'
+          redirect_to :controller => 'projects', :action => 'settings'
         end
       end
     end
--- a/app/controllers/settings_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/settings_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -26,7 +26,7 @@
   end
 
   def edit
-    @notifiables = %w(issue_added issue_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated)
+    @notifiables = Redmine::Notifiable.all
     if request.post? && params[:settings] && params[:settings].is_a?(Hash)
       settings = (params[:settings] || {}).dup.symbolize_keys
       settings.each do |name, value|
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/controllers/time_entry_reports_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,209 @@
+class TimeEntryReportsController < ApplicationController
+  menu_item :issues
+  before_filter :find_optional_project
+  before_filter :load_available_criterias
+
+  helper :sort
+  include SortHelper
+  helper :issues
+  helper :timelog
+  include TimelogHelper
+  helper :custom_fields
+  include CustomFieldsHelper
+
+  def report
+    @criterias = params[:criterias] || []
+    @criterias = @criterias.select{|criteria| @available_criterias.has_key? criteria}
+    @criterias.uniq!
+    @criterias = @criterias[0,3]
+    
+    @columns = (params[:columns] && %w(year month week day).include?(params[:columns])) ? params[:columns] : 'month'
+    
+    retrieve_date_range
+    
+    unless @criterias.empty?
+      sql_select = @criterias.collect{|criteria| @available_criterias[criteria][:sql] + " AS " + criteria}.join(', ')
+      sql_group_by = @criterias.collect{|criteria| @available_criterias[criteria][:sql]}.join(', ')
+      sql_condition = ''
+      
+      if @project.nil?
+        sql_condition = Project.allowed_to_condition(User.current, :view_time_entries)
+      elsif @issue.nil?
+        sql_condition = @project.project_condition(Setting.display_subprojects_issues?)
+      else
+        sql_condition = "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}"
+      end
+
+      sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours"
+      sql << " FROM #{TimeEntry.table_name}"
+      sql << time_report_joins
+      sql << " WHERE"
+      sql << " (%s) AND" % sql_condition
+      sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from), ActiveRecord::Base.connection.quoted_date(@to)]
+      sql << " GROUP BY #{sql_group_by}, tyear, tmonth, tweek, spent_on"
+      
+      @hours = ActiveRecord::Base.connection.select_all(sql)
+      
+      @hours.each do |row|
+        case @columns
+        when 'year'
+          row['year'] = row['tyear']
+        when 'month'
+          row['month'] = "#{row['tyear']}-#{row['tmonth']}"
+        when 'week'
+          row['week'] = "#{row['tyear']}-#{row['tweek']}"
+        when 'day'
+          row['day'] = "#{row['spent_on']}"
+        end
+      end
+      
+      @total_hours = @hours.inject(0) {|s,k| s = s + k['hours'].to_f}
+      
+      @periods = []
+      # Date#at_beginning_of_ not supported in Rails 1.2.x
+      date_from = @from.to_time
+      # 100 columns max
+      while date_from <= @to.to_time && @periods.length < 100
+        case @columns
+        when 'year'
+          @periods << "#{date_from.year}"
+          date_from = (date_from + 1.year).at_beginning_of_year
+        when 'month'
+          @periods << "#{date_from.year}-#{date_from.month}"
+          date_from = (date_from + 1.month).at_beginning_of_month
+        when 'week'
+          @periods << "#{date_from.year}-#{date_from.to_date.cweek}"
+          date_from = (date_from + 7.day).at_beginning_of_week
+        when 'day'
+          @periods << "#{date_from.to_date}"
+          date_from = date_from + 1.day
+        end
+      end
+    end
+    
+    respond_to do |format|
+      format.html { render :layout => !request.xhr? }
+      format.csv  { send_data(report_to_csv(@criterias, @periods, @hours), :type => 'text/csv; header=present', :filename => 'timelog.csv') }
+    end
+  end
+  
+  private
+
+  # TODO: duplicated in TimelogController
+  def find_optional_project
+    if !params[:issue_id].blank?
+      @issue = Issue.find(params[:issue_id])
+      @project = @issue.project
+    elsif !params[:project_id].blank?
+      @project = Project.find(params[:project_id])
+    end
+    deny_access unless User.current.allowed_to?(:view_time_entries, @project, :global => true)
+  end
+
+  # Retrieves the date range based on predefined ranges or specific from/to param dates
+  # TODO: duplicated in TimelogController
+  def retrieve_date_range
+    @free_period = false
+    @from, @to = nil, nil
+
+    if params[:period_type] == '1' || (params[:period_type].nil? && !params[:period].nil?)
+      case params[:period].to_s
+      when 'today'
+        @from = @to = Date.today
+      when 'yesterday'
+        @from = @to = Date.today - 1
+      when 'current_week'
+        @from = Date.today - (Date.today.cwday - 1)%7
+        @to = @from + 6
+      when 'last_week'
+        @from = Date.today - 7 - (Date.today.cwday - 1)%7
+        @to = @from + 6
+      when '7_days'
+        @from = Date.today - 7
+        @to = Date.today
+      when 'current_month'
+        @from = Date.civil(Date.today.year, Date.today.month, 1)
+        @to = (@from >> 1) - 1
+      when 'last_month'
+        @from = Date.civil(Date.today.year, Date.today.month, 1) << 1
+        @to = (@from >> 1) - 1
+      when '30_days'
+        @from = Date.today - 30
+        @to = Date.today
+      when 'current_year'
+        @from = Date.civil(Date.today.year, 1, 1)
+        @to = Date.civil(Date.today.year, 12, 31)
+      end
+    elsif params[:period_type] == '2' || (params[:period_type].nil? && (!params[:from].nil? || !params[:to].nil?))
+      begin; @from = params[:from].to_s.to_date unless params[:from].blank?; rescue; end
+      begin; @to = params[:to].to_s.to_date unless params[:to].blank?; rescue; end
+      @free_period = true
+    else
+      # default
+    end
+    
+    @from, @to = @to, @from if @from && @to && @from > @to
+    @from ||= (TimeEntry.earilest_date_for_project(@project) || Date.today)
+    @to   ||= (TimeEntry.latest_date_for_project(@project) || Date.today)
+  end
+
+  def load_available_criterias
+    @available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id",
+                                          :klass => Project,
+                                          :label => :label_project},
+                             'version' => {:sql => "#{Issue.table_name}.fixed_version_id",
+                                          :klass => Version,
+                                          :label => :label_version},
+                             'category' => {:sql => "#{Issue.table_name}.category_id",
+                                            :klass => IssueCategory,
+                                            :label => :field_category},
+                             'member' => {:sql => "#{TimeEntry.table_name}.user_id",
+                                         :klass => User,
+                                         :label => :label_member},
+                             'tracker' => {:sql => "#{Issue.table_name}.tracker_id",
+                                          :klass => Tracker,
+                                          :label => :label_tracker},
+                             'activity' => {:sql => "#{TimeEntry.table_name}.activity_id",
+                                           :klass => TimeEntryActivity,
+                                           :label => :label_activity},
+                             'issue' => {:sql => "#{TimeEntry.table_name}.issue_id",
+                                         :klass => Issue,
+                                         :label => :label_issue}
+                           }
+    
+    # Add list and boolean custom fields as available criterias
+    custom_fields = (@project.nil? ? IssueCustomField.for_all : @project.all_issue_custom_fields)
+    custom_fields.select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
+      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Issue' AND c.customized_id = #{Issue.table_name}.id)",
+                                             :format => cf.field_format,
+                                             :label => cf.name}
+    end if @project
+    
+    # Add list and boolean time entry custom fields
+    TimeEntryCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
+      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'TimeEntry' AND c.customized_id = #{TimeEntry.table_name}.id)",
+                                             :format => cf.field_format,
+                                             :label => cf.name}
+    end
+
+    # Add list and boolean time entry activity custom fields
+    TimeEntryActivityCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
+      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Enumeration' AND c.customized_id = #{TimeEntry.table_name}.activity_id)",
+                                             :format => cf.field_format,
+                                             :label => cf.name}
+    end
+
+    call_hook(:controller_timelog_available_criterias, { :available_criterias => @available_criterias, :project => @project })
+    @available_criterias
+  end
+
+  def time_report_joins
+    sql = ''
+    sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id"
+    sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id"
+    # TODO: rename hook
+    call_hook(:controller_timelog_time_report_joins, {:sql => sql} )
+    sql
+  end
+
+end
--- a/app/controllers/timelog_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/timelog_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -17,12 +17,11 @@
 
 class TimelogController < ApplicationController
   menu_item :issues
-  before_filter :find_project, :authorize, :only => [:edit, :destroy]
-  before_filter :find_optional_project, :only => [:report, :details]
-  before_filter :load_available_criterias, :only => [:report]
+  before_filter :find_project, :only => [:new, :create]
+  before_filter :find_time_entry, :only => [:edit, :update, :destroy]
+  before_filter :authorize, :except => [:index]
+  before_filter :find_optional_project, :only => [:index]
 
-  verify :method => :post, :only => :destroy, :redirect_to => { :action => :details }
-  
   helper :sort
   include SortHelper
   helper :issues
@@ -30,83 +29,7 @@
   helper :custom_fields
   include CustomFieldsHelper
   
-  def report
-    @criterias = params[:criterias] || []
-    @criterias = @criterias.select{|criteria| @available_criterias.has_key? criteria}
-    @criterias.uniq!
-    @criterias = @criterias[0,3]
-    
-    @columns = (params[:columns] && %w(year month week day).include?(params[:columns])) ? params[:columns] : 'month'
-    
-    retrieve_date_range
-    
-    unless @criterias.empty?
-      sql_select = @criterias.collect{|criteria| @available_criterias[criteria][:sql] + " AS " + criteria}.join(', ')
-      sql_group_by = @criterias.collect{|criteria| @available_criterias[criteria][:sql]}.join(', ')
-      sql_condition = ''
-      
-      if @project.nil?
-        sql_condition = Project.allowed_to_condition(User.current, :view_time_entries)
-      elsif @issue.nil?
-        sql_condition = @project.project_condition(Setting.display_subprojects_issues?)
-      else
-        sql_condition = "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}"
-      end
-
-      sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours"
-      sql << " FROM #{TimeEntry.table_name}"
-      sql << time_report_joins
-      sql << " WHERE"
-      sql << " (%s) AND" % sql_condition
-      sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from), ActiveRecord::Base.connection.quoted_date(@to)]
-      sql << " GROUP BY #{sql_group_by}, tyear, tmonth, tweek, spent_on"
-      
-      @hours = ActiveRecord::Base.connection.select_all(sql)
-      
-      @hours.each do |row|
-        case @columns
-        when 'year'
-          row['year'] = row['tyear']
-        when 'month'
-          row['month'] = "#{row['tyear']}-#{row['tmonth']}"
-        when 'week'
-          row['week'] = "#{row['tyear']}-#{row['tweek']}"
-        when 'day'
-          row['day'] = "#{row['spent_on']}"
-        end
-      end
-      
-      @total_hours = @hours.inject(0) {|s,k| s = s + k['hours'].to_f}
-      
-      @periods = []
-      # Date#at_beginning_of_ not supported in Rails 1.2.x
-      date_from = @from.to_time
-      # 100 columns max
-      while date_from <= @to.to_time && @periods.length < 100
-        case @columns
-        when 'year'
-          @periods << "#{date_from.year}"
-          date_from = (date_from + 1.year).at_beginning_of_year
-        when 'month'
-          @periods << "#{date_from.year}-#{date_from.month}"
-          date_from = (date_from + 1.month).at_beginning_of_month
-        when 'week'
-          @periods << "#{date_from.year}-#{date_from.to_date.cweek}"
-          date_from = (date_from + 7.day).at_beginning_of_week
-        when 'day'
-          @periods << "#{date_from.to_date}"
-          date_from = date_from + 1.day
-        end
-      end
-    end
-    
-    respond_to do |format|
-      format.html { render :layout => !request.xhr? }
-      format.csv  { send_data(report_to_csv(@criterias, @periods, @hours), :type => 'text/csv; header=present', :filename => 'timelog.csv') }
-    end
-  end
-  
-  def details
+  def index
     sort_init 'spent_on', 'desc'
     sort_update 'spent_on' => 'spent_on',
                 'user' => 'user_id',
@@ -162,24 +85,52 @@
       end
     end
   end
-  
-  def edit
-    (render_403; return) if @time_entry && !@time_entry.editable_by?(User.current)
+
+  def new
+    @time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today)
+    @time_entry.attributes = params[:time_entry]
+    
+    call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
+    render :action => 'edit'
+  end
+
+  verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
+  def create
     @time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today)
     @time_entry.attributes = params[:time_entry]
     
     call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
     
-    if request.post? and @time_entry.save
+    if @time_entry.save
       flash[:notice] = l(:notice_successful_update)
-      redirect_back_or_default :action => 'details', :project_id => @time_entry.project
-      return
+      redirect_back_or_default :action => 'index', :project_id => @time_entry.project
+    else
+      render :action => 'edit'
     end    
   end
   
+  def edit
+    @time_entry.attributes = params[:time_entry]
+    
+    call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
+  end
+
+  verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
+  def update
+    @time_entry.attributes = params[:time_entry]
+    
+    call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
+    
+    if @time_entry.save
+      flash[:notice] = l(:notice_successful_update)
+      redirect_back_or_default :action => 'index', :project_id => @time_entry.project
+    else
+      render :action => 'edit'
+    end    
+  end
+
+  verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed }
   def destroy
-    (render_404; return) unless @time_entry
-    (render_403; return) unless @time_entry.editable_by?(User.current)
     if @time_entry.destroy && @time_entry.destroyed?
       flash[:notice] = l(:notice_successful_delete)
     else
@@ -187,15 +138,23 @@
     end
     redirect_to :back
   rescue ::ActionController::RedirectBackError
-    redirect_to :action => 'details', :project_id => @time_entry.project
+    redirect_to :action => 'index', :project_id => @time_entry.project
   end
 
 private
+  def find_time_entry
+    @time_entry = TimeEntry.find(params[:id])
+    unless @time_entry.editable_by?(User.current)
+      render_403
+      return false
+    end
+    @project = @time_entry.project
+  rescue ActiveRecord::RecordNotFound
+    render_404
+  end
+
   def find_project
-    if params[:id]
-      @time_entry = TimeEntry.find(params[:id])
-      @project = @time_entry.project
-    elsif params[:issue_id]
+    if params[:issue_id]
       @issue = Issue.find(params[:issue_id])
       @project = @issue.project
     elsif params[:project_id]
@@ -264,61 +223,4 @@
     @to   ||= (TimeEntry.latest_date_for_project(@project) || Date.today)
   end
 
-  def load_available_criterias
-    @available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id",
-                                          :klass => Project,
-                                          :label => :label_project},
-                             'version' => {:sql => "#{Issue.table_name}.fixed_version_id",
-                                          :klass => Version,
-                                          :label => :label_version},
-                             'category' => {:sql => "#{Issue.table_name}.category_id",
-                                            :klass => IssueCategory,
-                                            :label => :field_category},
-                             'member' => {:sql => "#{TimeEntry.table_name}.user_id",
-                                         :klass => User,
-                                         :label => :label_member},
-                             'tracker' => {:sql => "#{Issue.table_name}.tracker_id",
-                                          :klass => Tracker,
-                                          :label => :label_tracker},
-                             'activity' => {:sql => "#{TimeEntry.table_name}.activity_id",
-                                           :klass => TimeEntryActivity,
-                                           :label => :label_activity},
-                             'issue' => {:sql => "#{TimeEntry.table_name}.issue_id",
-                                         :klass => Issue,
-                                         :label => :label_issue}
-                           }
-    
-    # Add list and boolean custom fields as available criterias
-    custom_fields = (@project.nil? ? IssueCustomField.for_all : @project.all_issue_custom_fields)
-    custom_fields.select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
-      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Issue' AND c.customized_id = #{Issue.table_name}.id)",
-                                             :format => cf.field_format,
-                                             :label => cf.name}
-    end if @project
-    
-    # Add list and boolean time entry custom fields
-    TimeEntryCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
-      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'TimeEntry' AND c.customized_id = #{TimeEntry.table_name}.id)",
-                                             :format => cf.field_format,
-                                             :label => cf.name}
-    end
-
-    # Add list and boolean time entry activity custom fields
-    TimeEntryActivityCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
-      @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Enumeration' AND c.customized_id = #{TimeEntry.table_name}.activity_id)",
-                                             :format => cf.field_format,
-                                             :label => cf.name}
-    end
-
-    call_hook(:controller_timelog_available_criterias, { :available_criterias => @available_criterias, :project => @project })
-    @available_criterias
-  end
-
-  def time_report_joins
-    sql = ''
-    sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id"
-    sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id"
-    call_hook(:controller_timelog_time_report_joins, {:sql => sql} )
-    sql
-  end
 end
--- a/app/controllers/users_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/users_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -51,7 +51,6 @@
   
   def show
     @user = User.find(params[:id])
-    @custom_values = @user.custom_values
     
     # show projects based on current user visibility
     @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current))
@@ -71,53 +70,96 @@
     render_404
   end
 
-  def add
-    if request.get?
-      @user = User.new(:language => Setting.default_language)
+  def new
+    @notification_options = User::MAIL_NOTIFICATION_OPTIONS
+    @notification_option = Setting.default_notification_option
+
+    @user = User.new(:language => Setting.default_language)
+    @auth_sources = AuthSource.find(:all)
+  end
+  
+  verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
+  def create
+    @notification_options = User::MAIL_NOTIFICATION_OPTIONS
+    @notification_option = Setting.default_notification_option
+
+    @user = User.new(params[:user])
+    @user.admin = params[:user][:admin] || false
+    @user.login = params[:user][:login]
+    @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id
+
+    # TODO: Similar to My#account
+    @user.mail_notification = params[:notification_option] || 'only_my_events'
+    @user.pref.attributes = params[:pref]
+    @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
+
+    if @user.save
+      @user.pref.save
+      @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : [])
+
+      Mailer.deliver_account_information(@user, params[:password]) if params[:send_information]
+      flash[:notice] = l(:notice_successful_create)
+      redirect_to(params[:continue] ? {:controller => 'users', :action => 'new'} : 
+                                      {:controller => 'users', :action => 'edit', :id => @user})
+      return
     else
-      @user = User.new(params[:user])
-      @user.admin = params[:user][:admin] || false
-      @user.login = params[:user][:login]
-      @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id
-      if @user.save
-        Mailer.deliver_account_information(@user, params[:password]) if params[:send_information]
-        flash[:notice] = l(:notice_successful_create)
-        redirect_to(params[:continue] ? {:controller => 'users', :action => 'add'} : 
-                                        {:controller => 'users', :action => 'edit', :id => @user})
-        return
-      end
+      @auth_sources = AuthSource.find(:all)
+      @notification_option = @user.mail_notification
+
+      render :action => 'new'
     end
-    @auth_sources = AuthSource.find(:all)
   end
 
   def edit
     @user = User.find(params[:id])
-    if request.post?
-      @user.admin = params[:user][:admin] if params[:user][:admin]
-      @user.login = params[:user][:login] if params[:user][:login]
-      if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?)
-        @user.password, @user.password_confirmation = params[:password], params[:password_confirmation]
-      end
-      @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids]
-      @user.attributes = params[:user]
-      # Was the account actived ? (do it before User#save clears the change)
-      was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE])
-      if @user.save
-        if was_activated
-          Mailer.deliver_account_activated(@user)
-        elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil?
-          Mailer.deliver_account_information(@user, params[:password])
-        end
-        flash[:notice] = l(:notice_successful_update)
-        redirect_to :back
-      end
-    end
+    @notification_options = @user.valid_notification_options
+    @notification_option = @user.mail_notification
+
     @auth_sources = AuthSource.find(:all)
     @membership ||= Member.new
+  end
+  
+  verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
+  def update
+    @user = User.find(params[:id])
+    @notification_options = @user.valid_notification_options
+    @notification_option = @user.mail_notification
+
+    @user.admin = params[:user][:admin] if params[:user][:admin]
+    @user.login = params[:user][:login] if params[:user][:login]
+    if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?)
+      @user.password, @user.password_confirmation = params[:password], params[:password_confirmation]
+    end
+    @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids]
+    @user.attributes = params[:user]
+    # Was the account actived ? (do it before User#save clears the change)
+    was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE])
+    # TODO: Similar to My#account
+    @user.mail_notification = params[:notification_option] || 'only_my_events'
+    @user.pref.attributes = params[:pref]
+    @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
+
+    if @user.save
+      @user.pref.save
+      @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : [])
+
+      if was_activated
+        Mailer.deliver_account_activated(@user)
+      elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil?
+        Mailer.deliver_account_information(@user, params[:password])
+      end
+      flash[:notice] = l(:notice_successful_update)
+      redirect_to :back
+    else
+      @auth_sources = AuthSource.find(:all)
+      @membership ||= Member.new
+
+      render :action => :edit
+    end
   rescue ::ActionController::RedirectBackError
     redirect_to :controller => 'users', :action => 'edit', :id => @user
   end
-  
+
   def edit_membership
     @user = User.find(params[:id])
     @membership = Member.edit_membership(params[:membership_id], params[:membership], @user)
--- a/app/controllers/versions_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/versions_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -109,6 +109,10 @@
       if @version.update_attributes(attributes)
         flash[:notice] = l(:notice_successful_update)
         redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
+      else
+        respond_to do |format|
+          format.html { render :action => 'edit' }
+        end
       end
     end
   end
--- a/app/controllers/wiki_controller.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/controllers/wiki_controller.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -17,20 +17,39 @@
 
 require 'diff'
 
+# The WikiController follows the Rails REST controller pattern but with
+# a few differences
+#
+# * index - shows a list of WikiPages grouped by page or date
+# * new - not used
+# * create - not used
+# * show - will also show the form for creating a new wiki page
+# * edit - used to edit an existing or new page
+# * update - used to save a wiki page update to the database, including new pages
+# * destroy - normal
+#
+# Other member and collection methods are also used
+#
+# TODO: still being worked on
 class WikiController < ApplicationController
   default_search_scope :wiki_pages
   before_filter :find_wiki, :authorize
   before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy]
   
-  verify :method => :post, :only => [:destroy, :protect], :redirect_to => { :action => :index }
+  verify :method => :post, :only => [:protect], :redirect_to => { :action => :show }
 
   helper :attachments
   include AttachmentsHelper   
   helper :watchers
-  
+
+  # List of pages, sorted alphabetically and by parent (hierarchy)
+  def index
+    load_pages_grouped_by_date_without_content
+  end
+
   # display a page (in editing mode if it doesn't exist)
-  def index
-    page_title = params[:page]
+  def show
+    page_title = params[:id]
     @page = @wiki.find_or_new_page(page_title)
     if @page.new_record?
       if User.current.allowed_to?(:edit_wiki_pages, @project) && editable?
@@ -63,7 +82,7 @@
   
   # edit an existing page or a new one
   def edit
-    @page = @wiki.find_or_new_page(params[:page])    
+    @page = @wiki.find_or_new_page(params[:id])    
     return render_403 unless editable?
     @page.content = WikiContent.new(:page => @page) if @page.new_record?
     
@@ -71,34 +90,48 @@
     @content.text = initial_page_content(@page) if @content.text.blank?
     # don't keep previous comment
     @content.comments = nil
-    if request.get?
-      # To prevent StaleObjectError exception when reverting to a previous version
-      @content.version = @page.content.version
-    else
-      if !@page.new_record? && @content.text == params[:content][:text]
-        attachments = Attachment.attach_files(@page, params[:attachments])
-        render_attachment_warning_if_needed(@page)
-        # don't save if text wasn't changed
-        redirect_to :action => 'index', :id => @project, :page => @page.title
-        return
-      end
-      #@content.text = params[:content][:text]
-      #@content.comments = params[:content][:comments]
-      @content.attributes = params[:content]
-      @content.author = User.current
-      # if page is new @page.save will also save content, but not if page isn't a new record
-      if (@page.new_record? ? @page.save : @content.save)
-        attachments = Attachment.attach_files(@page, params[:attachments])
-        render_attachment_warning_if_needed(@page)
-        call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page})
-        redirect_to :action => 'index', :id => @project, :page => @page.title
-      end
-    end
+
+    # To prevent StaleObjectError exception when reverting to a previous version
+    @content.version = @page.content.version
   rescue ActiveRecord::StaleObjectError
     # Optimistic locking exception
     flash[:error] = l(:notice_locking_conflict)
   end
-  
+
+  verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
+  # Creates a new page or updates an existing one
+  def update
+    @page = @wiki.find_or_new_page(params[:id])    
+    return render_403 unless editable?
+    @page.content = WikiContent.new(:page => @page) if @page.new_record?
+    
+    @content = @page.content_for_version(params[:version])
+    @content.text = initial_page_content(@page) if @content.text.blank?
+    # don't keep previous comment
+    @content.comments = nil
+
+    if !@page.new_record? && params[:content].present? && @content.text == params[:content][:text]
+      attachments = Attachment.attach_files(@page, params[:attachments])
+      render_attachment_warning_if_needed(@page)
+      # don't save if text wasn't changed
+      redirect_to :action => 'show', :project_id => @project, :id => @page.title
+      return
+    end
+    @content.attributes = params[:content]
+    @content.author = User.current
+    # if page is new @page.save will also save content, but not if page isn't a new record
+    if (@page.new_record? ? @page.save : @content.save)
+      attachments = Attachment.attach_files(@page, params[:attachments])
+      render_attachment_warning_if_needed(@page)
+      call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page})
+      redirect_to :action => 'show', :project_id => @project, :id => @page.title
+    end
+
+  rescue ActiveRecord::StaleObjectError
+    # Optimistic locking exception
+    flash[:error] = l(:notice_locking_conflict)
+  end
+
   # rename a page
   def rename
     return render_403 unless editable?
@@ -107,13 +140,13 @@
     @original_title = @page.pretty_title
     if request.post? && @page.update_attributes(params[:wiki_page])
       flash[:notice] = l(:notice_successful_update)
-      redirect_to :action => 'index', :id => @project, :page => @page.title
+      redirect_to :action => 'show', :project_id => @project, :id => @page.title
     end
   end
   
   def protect
     @page.update_attribute :protected, params[:protected]
-    redirect_to :action => 'index', :id => @project, :page => @page.title
+    redirect_to :action => 'show', :project_id => @project, :id => @page.title
   end
 
   # show page history
@@ -139,7 +172,8 @@
     @annotate = @page.annotate(params[:version])
     render_404 unless @annotate
   end
-  
+
+  verify :method => :delete, :only => [:destroy], :redirect_to => { :action => :show }
   # Removes a wiki page and its history
   # Children can be either set as root pages, removed or reassigned to another parent page
   def destroy
@@ -166,41 +200,26 @@
       end
     end
     @page.destroy
-    redirect_to :action => 'special', :id => @project, :page => 'Page_index'
+    redirect_to :action => 'index', :project_id => @project
   end
 
-  # display special pages
-  def special
-    page_title = params[:page].downcase
-    case page_title
-    # show pages index, sorted by title
-    when 'page_index', 'date_index'
-      # eager load information about last updates, without loading text
-      @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on",
-                                      :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id",
-                                      :order => 'title'
-      @pages_by_date = @pages.group_by {|p| p.updated_on.to_date}
-      @pages_by_parent_id = @pages.group_by(&:parent_id)
-    # export wiki to a single html file
-    when 'export'
-      if User.current.allowed_to?(:export_wiki_pages, @project)
-        @pages = @wiki.pages.find :all, :order => 'title'
-        export = render_to_string :action => 'export_multiple', :layout => false
-        send_data(export, :type => 'text/html', :filename => "wiki.html")
-      else
-        redirect_to :action => 'index', :id => @project, :page => nil
-      end
-      return      
+  # Export wiki to a single html file
+  def export
+    if User.current.allowed_to?(:export_wiki_pages, @project)
+      @pages = @wiki.pages.find :all, :order => 'title'
+      export = render_to_string :action => 'export_multiple', :layout => false
+      send_data(export, :type => 'text/html', :filename => "wiki.html")
     else
-      # requested special page doesn't exist, redirect to default page
-      redirect_to :action => 'index', :id => @project, :page => nil
-      return
+      redirect_to :action => 'show', :project_id => @project, :id => nil
     end
-    render :action => "special_#{page_title}"
+  end
+
+  def date_index
+    load_pages_grouped_by_date_without_content
   end
   
   def preview
-    page = @wiki.find_page(params[:page])
+    page = @wiki.find_page(params[:id])
     # page is nil when previewing a new page
     return render_403 unless page.nil? || editable?(page)
     if page
@@ -215,13 +234,13 @@
     return render_403 unless editable?
     attachments = Attachment.attach_files(@page, params[:attachments])
     render_attachment_warning_if_needed(@page)
-    redirect_to :action => 'index', :page => @page.title
+    redirect_to :action => 'show', :id => @page.title, :project_id => @project
   end
 
 private
   
   def find_wiki
-    @project = Project.find(params[:id])
+    @project = Project.find(params[:project_id])
     @wiki = @project.wiki
     render_404 unless @wiki
   rescue ActiveRecord::RecordNotFound
@@ -230,7 +249,7 @@
   
   # Finds the requested page and returns a 404 error if it doesn't exist
   def find_existing_page
-    @page = @wiki.find_page(params[:page])
+    @page = @wiki.find_page(params[:id])
     render_404 if @page.nil?
   end
   
@@ -245,4 +264,14 @@
     extend helper unless self.instance_of?(helper)
     helper.instance_method(:initial_page_content).bind(self).call(page)
   end
+
+  # eager load information about last updates, without loading text
+  def load_pages_grouped_by_date_without_content
+    @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on",
+                                    :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id",
+                                    :order => 'title'
+    @pages_by_date = @pages.group_by {|p| p.updated_on.to_date}
+    @pages_by_parent_id = @pages.group_by(&:parent_id)
+  end
+  
 end
--- a/app/helpers/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 36
-/svn/!svn/ver/4166/trunk/app/helpers
+/svn/!svn/ver/4391/trunk/app/helpers
 END
 trackers_helper.rb
 K 25
@@ -79,7 +79,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/2794/trunk/app/helpers/wiki_helper.rb
+/svn/!svn/ver/4375/trunk/app/helpers/wiki_helper.rb
 END
 enumerations_helper.rb
 K 25
@@ -91,19 +91,19 @@
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/4166/trunk/app/helpers/issues_helper.rb
+/svn/!svn/ver/4281/trunk/app/helpers/issues_helper.rb
+END
+gantt_helper.rb
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/4283/trunk/app/helpers/gantt_helper.rb
 END
 queries_helper.rb
 K 25
 svn:wc:ra_dav:version-url
 V 54
-/svn/!svn/ver/3924/trunk/app/helpers/queries_helper.rb
-END
-gantt_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4072/trunk/app/helpers/gantt_helper.rb
+/svn/!svn/ver/4387/trunk/app/helpers/queries_helper.rb
 END
 mail_handler_helper.rb
 K 25
@@ -135,41 +135,47 @@
 V 53
 /svn/!svn/ver/333/trunk/app/helpers/welcome_helper.rb
 END
+workflows_helper.rb
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/1914/trunk/app/helpers/workflows_helper.rb
+END
 journals_helper.rb
 K 25
 svn:wc:ra_dav:version-url
 V 55
 /svn/!svn/ver/4062/trunk/app/helpers/journals_helper.rb
 END
-workflows_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/1914/trunk/app/helpers/workflows_helper.rb
-END
 reports_helper.rb
 K 25
 svn:wc:ra_dav:version-url
 V 53
 /svn/!svn/ver/629/trunk/app/helpers/reports_helper.rb
 END
+custom_fields_helper.rb
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/3675/trunk/app/helpers/custom_fields_helper.rb
+END
+settings_helper.rb
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/4222/trunk/app/helpers/settings_helper.rb
+END
 timelog_helper.rb
 K 25
 svn:wc:ra_dav:version-url
 V 54
 /svn/!svn/ver/3708/trunk/app/helpers/timelog_helper.rb
 END
-settings_helper.rb
+users_helper.rb
 K 25
 svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3222/trunk/app/helpers/settings_helper.rb
-END
-custom_fields_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/3675/trunk/app/helpers/custom_fields_helper.rb
+V 52
+/svn/!svn/ver/4230/trunk/app/helpers/users_helper.rb
 END
 issue_moves_helper.rb
 K 25
@@ -177,17 +183,11 @@
 V 58
 /svn/!svn/ver/3936/trunk/app/helpers/issue_moves_helper.rb
 END
-users_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3237/trunk/app/helpers/users_helper.rb
-END
 application_helper.rb
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/4103/trunk/app/helpers/application_helper.rb
+/svn/!svn/ver/4391/trunk/app/helpers/application_helper.rb
 END
 auth_sources_helper.rb
 K 25
@@ -199,7 +199,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/2822/trunk/app/helpers/search_helper.rb
+/svn/!svn/ver/4353/trunk/app/helpers/search_helper.rb
 END
 messages_helper.rb
 K 25
--- a/app/helpers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/helpers
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-20T18:50:14.663319Z
-4166
-edavis10
+2010-11-11T13:39:14.764400Z
+4391
+jplang
 
 
 
@@ -440,10 +440,10 @@
 
 
 
-2010-09-23T14:37:44.431779Z
-aee0a578b4bbfe95d2ede93a418824a6
-2009-06-28T11:55:49.957729Z
-2794
+2010-11-19T13:04:46.900732Z
+3e6762604b5e9a201b7a7bb2edc1f78f
+2010-11-06T14:30:32.528294Z
+4375
 jplang
 has-props
 
@@ -466,7 +466,7 @@
 
 
 
-2307
+2297
 
 enumerations_helper.rb
 file
@@ -508,11 +508,11 @@
 
 
 
-2010-09-24T12:48:25.903794Z
-f45b693d0286eacc66fde223d7306002
-2010-09-20T18:50:14.663319Z
-4166
-edavis10
+2010-11-19T13:04:46.900732Z
+b5569bf5b4ba507a522f4e371505ae0c
+2010-10-22T22:29:32.969473Z
+4281
+jplang
 has-props
 
 
@@ -534,7 +534,41 @@
 
 
 
-11249
+10075
+
+gantt_helper.rb
+file
+
+
+
+
+2010-11-19T13:04:46.900732Z
+dfac5226f31c3c232d7dcc9416172071
+2010-10-23T09:08:55.877887Z
+4283
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1988
 
 queries_helper.rb
 file
@@ -542,11 +576,11 @@
 
 
 
-2010-09-23T14:37:44.427784Z
-403463e02373d20faf0ed8988cfae033
-2010-08-08T07:07:20.961363Z
-3924
-jbbarth
+2010-11-19T13:04:46.900732Z
+6b997d023cc081b101be1949eb18f893
+2010-11-07T15:38:51.908839Z
+4387
+jplang
 has-props
 
 
@@ -568,41 +602,7 @@
 
 
 
-3785
-
-gantt_helper.rb
-file
-
-
-
-
-2010-09-24T12:48:25.903794Z
-bed98c36b12ec59c120d8da45f1511e0
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1027
+3722
 
 mail_handler_helper.rb
 file
@@ -774,6 +774,40 @@
 
 817
 
+workflows_helper.rb
+file
+
+
+
+
+2010-09-23T14:37:44.431779Z
+4f7bcbe149363ecb18080e3ce6c3f761
+2008-09-28T12:03:17.584169Z
+1914
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+824
+
 journals_helper.rb
 file
 
@@ -808,40 +842,6 @@
 
 2266
 
-workflows_helper.rb
-file
-
-
-
-
-2010-09-23T14:37:44.431779Z
-4f7bcbe149363ecb18080e3ce6c3f761
-2008-09-28T12:03:17.584169Z
-1914
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-824
-
 reports_helper.rb
 file
 
@@ -876,6 +876,74 @@
 
 1265
 
+custom_fields_helper.rb
+file
+
+
+
+
+2010-09-23T14:37:44.423776Z
+97753365c8eb76a948d7417d5db31079
+2010-04-16T15:34:05.970144Z
+3675
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5322
+
+settings_helper.rb
+file
+
+
+
+
+2010-11-19T13:04:46.900732Z
+868d0dc19e332ae2c817321637a8e31f
+2010-09-28T21:09:06.467392Z
+4222
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3858
+
 timelog_helper.rb
 file
 
@@ -910,108 +978,6 @@
 
 6636
 
-settings_helper.rb
-file
-
-
-
-
-2010-09-23T14:37:44.431779Z
-72a1f70b395a94a9efae4d1046d5df2b
-2009-12-23T17:56:39.685148Z
-3222
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3350
-
-custom_fields_helper.rb
-file
-
-
-
-
-2010-09-23T14:37:44.423776Z
-97753365c8eb76a948d7417d5db31079
-2010-04-16T15:34:05.970144Z
-3675
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5322
-
-users_helper.rb
-file
-
-
-
-
-2010-09-23T14:37:44.431779Z
-051113e44a01776675b1a38144a5fb8c
-2009-12-24T16:14:15.868995Z
-3237
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2645
-
 issue_moves_helper.rb
 file
 
@@ -1046,17 +1012,51 @@
 
 28
 
+users_helper.rb
+file
+
+
+
+
+2010-11-19T13:04:46.900732Z
+01b097606863e1e2938e7222d07fc2b7
+2010-09-30T18:22:46.611444Z
+4230
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2644
+
 application_helper.rb
 file
 
 
 
 
-2010-09-24T12:48:25.903794Z
-fed6be9c1540dab50fb9e194984395b3
-2010-09-20T02:55:14.397976Z
-4103
-edavis10
+2010-11-19T13:04:46.900732Z
+a9ac6edf6104b93a669ba1b0705f4fc6
+2010-11-11T13:39:14.764400Z
+4391
+jplang
 has-props
 
 
@@ -1078,7 +1078,7 @@
 
 
 
-33297
+34105
 
 auth_sources_helper.rb
 file
@@ -1120,10 +1120,10 @@
 
 
 
-2010-09-23T14:37:44.431779Z
-da0566fb2a355566f38723e4a11d1aab
-2009-07-18T09:46:20.387008Z
-2822
+2010-11-19T13:04:46.900732Z
+dedb3c62af67e076703aa2f60c97fb2b
+2010-11-01T12:55:15.292443Z
+4353
 jplang
 has-props
 
@@ -1146,7 +1146,7 @@
 
 
 
-2639
+2668
 
 messages_helper.rb
 file
--- a/app/helpers/.svn/text-base/application_helper.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/.svn/text-base/application_helper.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2010  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -34,25 +34,11 @@
   # Display a link if user is authorized
   #
   # @param [String] name Anchor text (passed to link_to)
-  # @param [Hash, String] options Hash params or url for the link target (passed to link_to).
-  #        This will checked by authorize_for to see if the user is authorized
+  # @param [Hash] options Hash params. This will checked by authorize_for to see if the user is authorized
   # @param [optional, Hash] html_options Options passed to link_to
   # @param [optional, Hash] parameters_for_method_reference Extra parameters for link_to
   def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
-    if options.is_a?(String)
-      begin
-        route = ActionController::Routing::Routes.recognize_path(options.gsub(/\?.*/,''), :method => options[:method] || :get)
-        link_controller = route[:controller]
-        link_action = route[:action]
-      rescue ActionController::RoutingError # Parse failed, not a route
-        link_controller, link_action = nil, nil
-      end
-    else
-      link_controller = options[:controller] || params[:controller]
-      link_action = options[:action]
-    end
-
-    link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(link_controller, link_action)
+    link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
   end
 
   # Display a link to remote if user is authorized
@@ -121,11 +107,6 @@
 
     link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision))
   end
-  
-  def link_to_project(project, options={})
-    options[:class] ||= 'project'
-    link_to(h(project), {:controller => 'projects', :action => 'show', :id => project}, :class => options[:class])
-  end
 
   # Generates a link to a project if active
   # Examples:
@@ -196,7 +177,7 @@
       content << "<ul class=\"pages-hierarchy\">\n"
       pages[node].each do |page|
         content << "<li>"
-        content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'index', :id => page.project, :page => page.title},
+        content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title},
                            :title => (page.respond_to?(:updated_on) ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
         content << "\n" + render_page_hierarchy(pages, page.id) if pages[page.id]
         content << "</li>\n"
@@ -257,15 +238,10 @@
   end
   
   # Yields the given block for each project with its level in the tree
+  #
+  # Wrapper for Project#project_tree
   def project_tree(projects, &block)
-    ancestors = []
-    projects.sort_by(&:lft).each do |project|
-      while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) 
-        ancestors.pop
-      end
-      yield project, ancestors.size
-      ancestors << project
-    end
+    Project.project_tree(projects, &block)
   end
   
   def project_nested_ul(projects, &block)
@@ -475,7 +451,7 @@
     text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr) { |macro, args| exec_macro(macro, obj, args) }
       
     parse_non_pre_blocks(text) do |text|
-      [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links].each do |method_name|
+      [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings].each do |method_name|
         send method_name, text, project, obj, attr, only_path, options
       end
     end
@@ -548,7 +524,7 @@
       esc, all, page, title = $1, $2, $3, $5
       if esc.nil?
         if page =~ /^([^\:]+)\:(.*)$/
-          link_project = Project.find_by_name($1) || Project.find_by_identifier($1)
+          link_project = Project.find_by_identifier($1) || Project.find_by_name($1)
           page = $2
           title ||= $1 if page.blank?
         end
@@ -565,7 +541,8 @@
             when :local; "#{title}.html"
             when :anchor; "##{title}"   # used for single-file wiki export
             else
-              url_for(:only_path => only_path, :controller => 'wiki', :action => 'index', :id => link_project, :page => Wiki.titleize(page), :anchor => anchor)
+              wiki_page_id = page.present? ? Wiki.titleize(page) : nil
+              url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, :id => wiki_page_id, :anchor => anchor)
             end
           link_to((title || page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new')))
         else
@@ -696,6 +673,50 @@
       leading + (link || "#{prefix}#{sep}#{identifier}")
     end
   end
+  
+  TOC_RE = /<p>\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE)
+  HEADING_RE = /<h(1|2|3|4)( [^>]+)?>(.+?)<\/h(1|2|3|4)>/i unless const_defined?(:HEADING_RE)
+  
+  # Headings and TOC
+  # Adds ids and links to headings and renders the TOC if needed unless options[:headings] is set to false
+  def parse_headings(text, project, obj, attr, only_path, options)
+    headings = []
+    text.gsub!(HEADING_RE) do
+      level, attrs, content = $1.to_i, $2, $3
+      item = strip_tags(content).strip
+      anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
+      headings << [level, anchor, item]
+      "<h#{level} #{attrs} id=\"#{anchor}\">#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a></h#{level}>"
+    end unless options[:headings] == false
+    
+    text.gsub!(TOC_RE) do
+      if headings.empty?
+        ''
+      else
+        div_class = 'toc'
+        div_class << ' right' if $1 == '>'
+        div_class << ' left' if $1 == '<'
+        out = "<ul class=\"#{div_class}\"><li>"
+        root = headings.map(&:first).min
+        current = root
+        started = false
+        headings.each do |level, anchor, item|
+          if level > current
+            out << '<ul><li>' * (level - current)
+          elsif level < current
+            out << "</li></ul>\n" * (current - level) + "</li><li>"
+          elsif started
+            out << '</li><li>'
+          end
+          out << "<a href=\"##{anchor}\">#{item}</a>"
+          current = level
+          started = true
+        end
+        out << '</li></ul>' * (current - root)
+        out << '</li></ul>'
+      end
+    end
+  end
 
   # Same as Rails' simple_format helper without using paragraphs
   def simple_format_without_paragraph(text)
--- a/app/helpers/.svn/text-base/gantt_helper.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/.svn/text-base/gantt_helper.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -16,6 +16,31 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 module GanttHelper
+
+  def gantt_zoom_link(gantt, in_or_out)
+    case in_or_out
+    when :in
+      if gantt.zoom < 4
+        link_to_remote(l(:text_zoom_in),
+                       {:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'},
+                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1))),
+                        :class => 'icon icon-zoom-in'})
+      else
+        content_tag('span', l(:text_zoom_in), :class => 'icon icon-zoom-in')
+      end
+      
+    when :out
+      if gantt.zoom > 1
+        link_to_remote(l(:text_zoom_out),
+                       {:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'},
+                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1))),
+                        :class => 'icon icon-zoom-out'})
+      else
+        content_tag('span', l(:text_zoom_out), :class => 'icon icon-zoom-out')
+      end
+    end
+  end
+  
   def number_of_issues_on_versions(gantt)
     versions = gantt.events.collect {|event| (event.is_a? Version) ? event : nil}.compact
 
--- a/app/helpers/.svn/text-base/issues_helper.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/.svn/text-base/issues_helper.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -246,30 +246,4 @@
     end
     export
   end
-
-  def gantt_zoom_link(gantt, in_or_out)
-    img_attributes = {:style => 'height:1.4em; width:1.4em; margin-left: 3px;'} # em for accessibility
-
-    case in_or_out
-    when :in
-      if gantt.zoom < 4
-        link_to_remote(l(:text_zoom_in) + image_tag('zoom_in.png', img_attributes.merge(:alt => l(:text_zoom_in))),
-                       {:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'},
-                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1)))})
-      else
-        l(:text_zoom_in) +
-          image_tag('zoom_in_g.png', img_attributes.merge(:alt => l(:text_zoom_in)))
-      end
-      
-    when :out
-      if gantt.zoom > 1
-        link_to_remote(l(:text_zoom_out) + image_tag('zoom_out.png', img_attributes.merge(:alt => l(:text_zoom_out))),
-                       {:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'},
-                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1)))})
-      else
-        l(:text_zoom_out) +
-          image_tag('zoom_out_g.png', img_attributes.merge(:alt => l(:text_zoom_out)))
-      end
-    end
-  end
 end
--- a/app/helpers/.svn/text-base/queries_helper.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/.svn/text-base/queries_helper.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -78,10 +78,9 @@
         # Give it a name, required to be valid
         @query = Query.new(:name => "_")
         @query.project = @project
-        if params[:fields] and params[:fields].is_a? Array
-          params[:fields].each do |field|
-            @query.add_filter(field, params[:operators][field], params[:values][field])
-          end
+        if params[:fields]
+          @query.filters = {}
+          @query.add_filters(params[:fields], params[:operators], params[:values])
         else
           @query.available_filters.keys.each do |field|
             @query.add_short_filter(field, params[field]) if params[field]
--- a/app/helpers/.svn/text-base/search_helper.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/.svn/text-base/search_helper.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -39,7 +39,7 @@
   end
   
   def type_label(t)
-    l("label_#{t.singularize}_plural")
+    l("label_#{t.singularize}_plural", :default => t.to_s.humanize)
   end
   
   def project_select_tag
--- a/app/helpers/.svn/text-base/settings_helper.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/.svn/text-base/settings_helper.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -71,4 +71,14 @@
     label = options.delete(:label)
     label != false ? content_tag("label", l(label || "setting_#{setting}")) : ''
   end
+
+  # Renders a notification field for a Redmine::Notifiable option
+  def notification_field(notifiable)
+    return content_tag(:label,
+                       check_box_tag('settings[notified_events][]',
+                                     notifiable.name,
+                                     Setting.notified_events.include?(notifiable.name)) +
+                         l_or_humanize(notifiable.name, :prefix => 'label_'),
+                       :class => notifiable.parent.present? ? "parent" : '')
+  end
 end
--- a/app/helpers/.svn/text-base/users_helper.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/.svn/text-base/users_helper.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -34,14 +34,14 @@
   end
   
   def change_status_link(user)
-    url = {:controller => 'users', :action => 'edit', :id => user, :page => params[:page], :status => params[:status], :tab => nil}
+    url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil}
     
     if user.locked?
-      link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :post, :class => 'icon icon-unlock'
+      link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock'
     elsif user.registered?
-      link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :post, :class => 'icon icon-unlock'
+      link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock'
     elsif user != User.current
-      link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :post, :class => 'icon icon-lock'
+      link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :put, :class => 'icon icon-lock'
     end
   end
   
--- a/app/helpers/.svn/text-base/wiki_helper.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/.svn/text-base/wiki_helper.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -24,7 +24,7 @@
       attrs << " selected='selected'" if selected == page
       indent = (level > 0) ? ('&nbsp;' * level * 2 + '&#187; ') : nil
       
-      s << "<option value='#{page.id}'>#{indent}#{h page.pretty_title}</option>\n" + 
+      s << "<option #{attrs}>#{indent}#{h page.pretty_title}</option>\n" + 
              wiki_page_options_for_select(pages, selected, page, level + 1)
     end
     s
--- a/app/helpers/application_helper.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/application_helper.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2010  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -34,25 +34,11 @@
   # Display a link if user is authorized
   #
   # @param [String] name Anchor text (passed to link_to)
-  # @param [Hash, String] options Hash params or url for the link target (passed to link_to).
-  #        This will checked by authorize_for to see if the user is authorized
+  # @param [Hash] options Hash params. This will checked by authorize_for to see if the user is authorized
   # @param [optional, Hash] html_options Options passed to link_to
   # @param [optional, Hash] parameters_for_method_reference Extra parameters for link_to
   def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
-    if options.is_a?(String)
-      begin
-        route = ActionController::Routing::Routes.recognize_path(options.gsub(/\?.*/,''), :method => options[:method] || :get)
-        link_controller = route[:controller]
-        link_action = route[:action]
-      rescue ActionController::RoutingError # Parse failed, not a route
-        link_controller, link_action = nil, nil
-      end
-    else
-      link_controller = options[:controller] || params[:controller]
-      link_action = options[:action]
-    end
-
-    link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(link_controller, link_action)
+    link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
   end
 
   # Display a link to remote if user is authorized
@@ -121,11 +107,6 @@
 
     link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision))
   end
-  
-  def link_to_project(project, options={})
-    options[:class] ||= 'project'
-    link_to(h(project), {:controller => 'projects', :action => 'show', :id => project}, :class => options[:class])
-  end
 
   # Generates a link to a project if active
   # Examples:
@@ -196,7 +177,7 @@
       content << "<ul class=\"pages-hierarchy\">\n"
       pages[node].each do |page|
         content << "<li>"
-        content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'index', :id => page.project, :page => page.title},
+        content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title},
                            :title => (page.respond_to?(:updated_on) ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
         content << "\n" + render_page_hierarchy(pages, page.id) if pages[page.id]
         content << "</li>\n"
@@ -257,15 +238,10 @@
   end
   
   # Yields the given block for each project with its level in the tree
+  #
+  # Wrapper for Project#project_tree
   def project_tree(projects, &block)
-    ancestors = []
-    projects.sort_by(&:lft).each do |project|
-      while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) 
-        ancestors.pop
-      end
-      yield project, ancestors.size
-      ancestors << project
-    end
+    Project.project_tree(projects, &block)
   end
   
   def project_nested_ul(projects, &block)
@@ -475,7 +451,7 @@
     text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr) { |macro, args| exec_macro(macro, obj, args) }
       
     parse_non_pre_blocks(text) do |text|
-      [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links].each do |method_name|
+      [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings].each do |method_name|
         send method_name, text, project, obj, attr, only_path, options
       end
     end
@@ -548,7 +524,7 @@
       esc, all, page, title = $1, $2, $3, $5
       if esc.nil?
         if page =~ /^([^\:]+)\:(.*)$/
-          link_project = Project.find_by_name($1) || Project.find_by_identifier($1)
+          link_project = Project.find_by_identifier($1) || Project.find_by_name($1)
           page = $2
           title ||= $1 if page.blank?
         end
@@ -565,7 +541,8 @@
             when :local; "#{title}.html"
             when :anchor; "##{title}"   # used for single-file wiki export
             else
-              url_for(:only_path => only_path, :controller => 'wiki', :action => 'index', :id => link_project, :page => Wiki.titleize(page), :anchor => anchor)
+              wiki_page_id = page.present? ? Wiki.titleize(page) : nil
+              url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, :id => wiki_page_id, :anchor => anchor)
             end
           link_to((title || page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new')))
         else
@@ -696,6 +673,50 @@
       leading + (link || "#{prefix}#{sep}#{identifier}")
     end
   end
+  
+  TOC_RE = /<p>\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE)
+  HEADING_RE = /<h(1|2|3|4)( [^>]+)?>(.+?)<\/h(1|2|3|4)>/i unless const_defined?(:HEADING_RE)
+  
+  # Headings and TOC
+  # Adds ids and links to headings and renders the TOC if needed unless options[:headings] is set to false
+  def parse_headings(text, project, obj, attr, only_path, options)
+    headings = []
+    text.gsub!(HEADING_RE) do
+      level, attrs, content = $1.to_i, $2, $3
+      item = strip_tags(content).strip
+      anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
+      headings << [level, anchor, item]
+      "<h#{level} #{attrs} id=\"#{anchor}\">#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a></h#{level}>"
+    end unless options[:headings] == false
+    
+    text.gsub!(TOC_RE) do
+      if headings.empty?
+        ''
+      else
+        div_class = 'toc'
+        div_class << ' right' if $1 == '>'
+        div_class << ' left' if $1 == '<'
+        out = "<ul class=\"#{div_class}\"><li>"
+        root = headings.map(&:first).min
+        current = root
+        started = false
+        headings.each do |level, anchor, item|
+          if level > current
+            out << '<ul><li>' * (level - current)
+          elsif level < current
+            out << "</li></ul>\n" * (current - level) + "</li><li>"
+          elsif started
+            out << '</li><li>'
+          end
+          out << "<a href=\"##{anchor}\">#{item}</a>"
+          current = level
+          started = true
+        end
+        out << '</li></ul>' * (current - root)
+        out << '</li></ul>'
+      end
+    end
+  end
 
   # Same as Rails' simple_format helper without using paragraphs
   def simple_format_without_paragraph(text)
--- a/app/helpers/gantt_helper.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/gantt_helper.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -16,6 +16,31 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 module GanttHelper
+
+  def gantt_zoom_link(gantt, in_or_out)
+    case in_or_out
+    when :in
+      if gantt.zoom < 4
+        link_to_remote(l(:text_zoom_in),
+                       {:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'},
+                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1))),
+                        :class => 'icon icon-zoom-in'})
+      else
+        content_tag('span', l(:text_zoom_in), :class => 'icon icon-zoom-in')
+      end
+      
+    when :out
+      if gantt.zoom > 1
+        link_to_remote(l(:text_zoom_out),
+                       {:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'},
+                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1))),
+                        :class => 'icon icon-zoom-out'})
+      else
+        content_tag('span', l(:text_zoom_out), :class => 'icon icon-zoom-out')
+      end
+    end
+  end
+  
   def number_of_issues_on_versions(gantt)
     versions = gantt.events.collect {|event| (event.is_a? Version) ? event : nil}.compact
 
--- a/app/helpers/issues_helper.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/issues_helper.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -246,30 +246,4 @@
     end
     export
   end
-
-  def gantt_zoom_link(gantt, in_or_out)
-    img_attributes = {:style => 'height:1.4em; width:1.4em; margin-left: 3px;'} # em for accessibility
-
-    case in_or_out
-    when :in
-      if gantt.zoom < 4
-        link_to_remote(l(:text_zoom_in) + image_tag('zoom_in.png', img_attributes.merge(:alt => l(:text_zoom_in))),
-                       {:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'},
-                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1)))})
-      else
-        l(:text_zoom_in) +
-          image_tag('zoom_in_g.png', img_attributes.merge(:alt => l(:text_zoom_in)))
-      end
-      
-    when :out
-      if gantt.zoom > 1
-        link_to_remote(l(:text_zoom_out) + image_tag('zoom_out.png', img_attributes.merge(:alt => l(:text_zoom_out))),
-                       {:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'},
-                       {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1)))})
-      else
-        l(:text_zoom_out) +
-          image_tag('zoom_out_g.png', img_attributes.merge(:alt => l(:text_zoom_out)))
-      end
-    end
-  end
 end
--- a/app/helpers/queries_helper.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/queries_helper.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -78,10 +78,9 @@
         # Give it a name, required to be valid
         @query = Query.new(:name => "_")
         @query.project = @project
-        if params[:fields] and params[:fields].is_a? Array
-          params[:fields].each do |field|
-            @query.add_filter(field, params[:operators][field], params[:values][field])
-          end
+        if params[:fields]
+          @query.filters = {}
+          @query.add_filters(params[:fields], params[:operators], params[:values])
         else
           @query.available_filters.keys.each do |field|
             @query.add_short_filter(field, params[field]) if params[field]
--- a/app/helpers/search_helper.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/search_helper.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -39,7 +39,7 @@
   end
   
   def type_label(t)
-    l("label_#{t.singularize}_plural")
+    l("label_#{t.singularize}_plural", :default => t.to_s.humanize)
   end
   
   def project_select_tag
--- a/app/helpers/settings_helper.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/settings_helper.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -71,4 +71,14 @@
     label = options.delete(:label)
     label != false ? content_tag("label", l(label || "setting_#{setting}")) : ''
   end
+
+  # Renders a notification field for a Redmine::Notifiable option
+  def notification_field(notifiable)
+    return content_tag(:label,
+                       check_box_tag('settings[notified_events][]',
+                                     notifiable.name,
+                                     Setting.notified_events.include?(notifiable.name)) +
+                         l_or_humanize(notifiable.name, :prefix => 'label_'),
+                       :class => notifiable.parent.present? ? "parent" : '')
+  end
 end
--- a/app/helpers/users_helper.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/users_helper.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -34,14 +34,14 @@
   end
   
   def change_status_link(user)
-    url = {:controller => 'users', :action => 'edit', :id => user, :page => params[:page], :status => params[:status], :tab => nil}
+    url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil}
     
     if user.locked?
-      link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :post, :class => 'icon icon-unlock'
+      link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock'
     elsif user.registered?
-      link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :post, :class => 'icon icon-unlock'
+      link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock'
     elsif user != User.current
-      link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :post, :class => 'icon icon-lock'
+      link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :put, :class => 'icon icon-lock'
     end
   end
   
--- a/app/helpers/wiki_helper.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/helpers/wiki_helper.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -24,7 +24,7 @@
       attrs << " selected='selected'" if selected == page
       indent = (level > 0) ? ('&nbsp;' * level * 2 + '&#187; ') : nil
       
-      s << "<option value='#{page.id}'>#{indent}#{h page.pretty_title}</option>\n" + 
+      s << "<option #{attrs}>#{indent}#{h page.pretty_title}</option>\n" + 
              wiki_page_options_for_select(pages, selected, page, level + 1)
     end
     s
--- a/app/models/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 35
-/svn/!svn/ver/4167/trunk/app/models
+/svn/!svn/ver/4404/trunk/app/models
 END
 document.rb
 K 25
@@ -13,7 +13,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/3801/trunk/app/models/mail_handler.rb
+/svn/!svn/ver/4404/trunk/app/models/mail_handler.rb
 END
 repository.rb
 K 25
@@ -25,7 +25,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4087/trunk/app/models/time_entry.rb
+/svn/!svn/ver/4277/trunk/app/models/time_entry.rb
 END
 token.rb
 K 25
@@ -37,7 +37,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/2637/trunk/app/models/journal_observer.rb
+/svn/!svn/ver/4221/trunk/app/models/journal_observer.rb
 END
 auth_source_ldap.rb
 K 25
@@ -81,6 +81,12 @@
 V 50
 /svn/!svn/ver/3240/trunk/app/models/enumeration.rb
 END
+issue.rb
+K 25
+svn:wc:ra_dav:version-url
+V 44
+/svn/!svn/ver/4394/trunk/app/models/issue.rb
+END
 time_entry_activity_custom_field.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -93,12 +99,6 @@
 V 50
 /svn/!svn/ver/3250/trunk/app/models/member_role.rb
 END
-issue.rb
-K 25
-svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/4105/trunk/app/models/issue.rb
-END
 issue_priority.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -111,23 +111,17 @@
 V 55
 /svn/!svn/ver/3169/trunk/app/models/message_observer.rb
 END
-wiki_content.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/3632/trunk/app/models/wiki_content.rb
-END
 watcher.rb
 K 25
 svn:wc:ra_dav:version-url
 V 46
 /svn/!svn/ver/3167/trunk/app/models/watcher.rb
 END
-wiki_page.rb
+wiki_content.rb
 K 25
 svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/3632/trunk/app/models/wiki_page.rb
+V 51
+/svn/!svn/ver/4296/trunk/app/models/wiki_content.rb
 END
 enabled_module.rb
 K 25
@@ -135,6 +129,12 @@
 V 53
 /svn/!svn/ver/2970/trunk/app/models/enabled_module.rb
 END
+wiki_page.rb
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/4296/trunk/app/models/wiki_page.rb
+END
 comment.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -151,7 +151,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4079/trunk/app/models/query.rb
+/svn/!svn/ver/4387/trunk/app/models/query.rb
 END
 member.rb
 K 25
@@ -169,7 +169,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 45
-/svn/!svn/ver/4167/trunk/app/models/mailer.rb
+/svn/!svn/ver/4373/trunk/app/models/mailer.rb
+END
+journal.rb
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/4062/trunk/app/models/journal.rb
 END
 workflow.rb
 K 25
@@ -177,12 +183,6 @@
 V 47
 /svn/!svn/ver/3709/trunk/app/models/workflow.rb
 END
-journal.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4062/trunk/app/models/journal.rb
-END
 user_custom_field.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -211,7 +211,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 43
-/svn/!svn/ver/4164/trunk/app/models/user.rb
+/svn/!svn/ver/4234/trunk/app/models/user.rb
 END
 auth_source.rb
 K 25
@@ -343,13 +343,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/3077/trunk/app/models/custom_value.rb
+/svn/!svn/ver/4382/trunk/app/models/custom_value.rb
 END
 project.rb
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4087/trunk/app/models/project.rb
+/svn/!svn/ver/4402/trunk/app/models/project.rb
 END
 document_category.rb
 K 25
--- a/app/models/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/models
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-20T23:17:51.402972Z
-4167
-edavis10
+2010-11-14T13:48:01.671461Z
+4404
+jplang
 
 
 
@@ -69,11 +69,11 @@
 
 
 
-2010-09-23T14:37:44.475780Z
-009baaf8ec2c62e225d84f9dc9898a23
-2010-06-20T16:22:36.211973Z
-3801
-edavis10
+2010-11-19T13:04:46.952746Z
+dd4785525bab24b6791967d66ffe6cb9
+2010-11-14T13:48:01.671461Z
+4404
+jplang
 has-props
 
 
@@ -95,7 +95,7 @@
 
 
 
-12708
+13455
 
 repository.rb
 file
@@ -137,33 +137,33 @@
 
 
 
-2010-09-24T12:48:25.923798Z
-005148fc17a331f651990b8784f70a3e
-2010-09-14T19:02:25.847894Z
+2010-11-19T13:04:46.956816Z
+aa2cc7da3c19ce52813f08949e6cefec
+2010-10-22T20:40:11.668687Z
+4277
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 4087
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4089
 
 token.rb
 file
@@ -205,10 +205,10 @@
 
 
 
-2010-09-23T14:37:44.475780Z
-0c8188293bba080a074aeb40a86e49f7
-2009-03-28T00:38:57.780983Z
-2637
+2010-11-19T13:04:46.956816Z
+7d895b3a013ce8f4e63dd4e7aab7eb20
+2010-09-28T20:20:00.843023Z
+4221
 edavis10
 has-props
 
@@ -231,7 +231,7 @@
 
 
 
-974
+1302
 
 auth_source_ldap.rb
 file
@@ -471,16 +471,16 @@
 
 3856
 
-issue.rb
+time_entry_activity_custom_field.rb
 file
 
 
 
 
-2010-09-24T12:48:25.923798Z
-d169fc23e9a8686dba8f414b92e0fe26
-2010-09-20T02:55:26.436604Z
-4105
+2010-09-23T14:37:44.487730Z
+d5549b2847a255d4bdd7185a670988b5
+2009-10-21T22:35:03.091600Z
+2952
 edavis10
 has-props
 
@@ -503,7 +503,7 @@
 
 
 
-31528
+896
 
 member_role.rb
 file
@@ -539,17 +539,17 @@
 
 2011
 
-time_entry_activity_custom_field.rb
+issue.rb
 file
 
 
 
 
-2010-09-23T14:37:44.487730Z
-d5549b2847a255d4bdd7185a670988b5
-2009-10-21T22:35:03.091600Z
-2952
-edavis10
+2010-11-19T13:04:46.956816Z
+35d32fdd4b71df26207f71005d93580e
+2010-11-12T11:34:53.754717Z
+4394
+jplang
 has-props
 
 
@@ -571,7 +571,7 @@
 
 
 
-896
+32352
 
 issue_priority.rb
 file
@@ -641,6 +641,40 @@
 
 979
 
+wiki_content.rb
+file
+
+
+
+
+2010-11-19T13:04:46.956816Z
+3cac6a9c934a472fcbdf99cd00e5bfbb
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4480
+
 watcher.rb
 file
 
@@ -675,17 +709,17 @@
 
 2093
 
-wiki_content.rb
+wiki_page.rb
 file
 
 
 
 
-2010-09-23T14:37:44.491776Z
-2ce4521051866ff5f654f8a8bddfc824
-2010-04-11T12:56:18.077630Z
-3632
-jplang
+2010-11-19T13:04:46.956816Z
+a45da72d99c7bc05ce93eb86205942e5
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
 has-props
 
 
@@ -707,7 +741,7 @@
 
 
 
-4458
+6720
 
 enabled_module.rb
 file
@@ -743,40 +777,6 @@
 
 1296
 
-wiki_page.rb
-file
-
-
-
-
-2010-09-23T14:37:44.491776Z
-e6b3c8e83cb441a021358acf5d246d21
-2010-04-11T12:56:18.077630Z
-3632
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6697
-
 comment.rb
 file
 
@@ -851,11 +851,11 @@
 
 
 
-2010-09-24T12:48:25.923798Z
-1cbc803eff5cf06cb8f3f133e5e7bed2
-2010-09-10T19:53:57.028875Z
-4079
-edavis10
+2010-11-19T13:04:46.956816Z
+ab1aeac4c9dd4c6ff846a281927b515a
+2010-11-07T15:38:51.908839Z
+4387
+jplang
 has-props
 
 
@@ -877,7 +877,7 @@
 
 
 
-26050
+26148
 
 member.rb
 file
@@ -953,11 +953,11 @@
 
 
 
-2010-09-24T12:48:25.923798Z
-46fe26aa1e0c5f59bdc2eab01a1c88e0
-2010-09-20T23:17:51.402972Z
-4167
-edavis10
+2010-11-19T13:04:46.956816Z
+1c4b2494e527ab830998b06f67b18f52
+2010-11-06T13:23:23.456511Z
+4373
+jplang
 has-props
 
 
@@ -979,7 +979,41 @@
 
 
 
-18478
+18490
+
+workflow.rb
+file
+
+
+
+
+2010-09-23T14:37:44.491776Z
+4561dfcb12b3fa066a9516c59a9eef94
+2010-04-30T12:19:51.238583Z
+3709
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4028
 
 journal.rb
 file
@@ -1015,40 +1049,6 @@
 
 3214
 
-workflow.rb
-file
-
-
-
-
-2010-09-23T14:37:44.491776Z
-4561dfcb12b3fa066a9516c59a9eef94
-2010-04-30T12:19:51.238583Z
-3709
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4028
-
 user_custom_field.rb
 file
 
@@ -1191,11 +1191,11 @@
 
 
 
-2010-09-24T12:48:25.927735Z
-911221c7bce8ea7ed20a36477f72d457
-2010-09-20T16:38:00.519430Z
-4164
-edavis10
+2010-11-19T13:04:46.956816Z
+de9dd6a174b66d7a7f16a699f1f1698f
+2010-10-06T05:08:38.847540Z
+4234
+jbbarth
 has-props
 
 
@@ -1217,7 +1217,7 @@
 
 
 
-13260
+15699
 
 auth_source.rb
 file
@@ -1939,10 +1939,10 @@
 
 
 
-2010-09-23T14:37:44.471831Z
-2fdf508dceb97028a97b4fee91368d92
-2009-11-20T12:57:52.379950Z
-3077
+2010-11-19T13:04:46.960863Z
+6938d61d0f9e1fc190bb1d0e6c05546e
+2010-11-07T14:15:01.891476Z
+4382
 jplang
 has-props
 
@@ -1965,7 +1965,7 @@
 
 
 
-2374
+2424
 
 project.rb
 file
@@ -1973,11 +1973,11 @@
 
 
 
-2010-09-24T12:48:25.927735Z
-fc2bd6fba523135882690f2d4b218277
-2010-09-14T19:02:25.847894Z
-4087
-edavis10
+2010-11-19T13:04:46.960863Z
+87ee5ad7f6983a739700f40cff0d65ae
+2010-11-14T12:33:14.198318Z
+4402
+jplang
 has-props
 
 
@@ -1999,7 +1999,7 @@
 
 
 
-29540
+30070
 
 document_category.rb
 file
--- a/app/models/.svn/text-base/custom_value.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/text-base/custom_value.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -34,6 +34,10 @@
     custom_field.editable?
   end
   
+  def visible?
+    custom_field.visible?
+  end
+  
   def required?
     custom_field.is_required?
   end
--- a/app/models/.svn/text-base/issue.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/text-base/issue.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -86,8 +86,8 @@
   }
 
   before_create :default_assign
-  before_save :reschedule_following_issues, :close_duplicates, :update_done_ratio_from_issue_status
-  after_save :update_nested_set_attributes, :update_parent_attributes, :create_journal
+  before_save :close_duplicates, :update_done_ratio_from_issue_status
+  after_save :reschedule_following_issues, :update_nested_set_attributes, :update_parent_attributes, :create_journal
   after_destroy :destroy_children
   after_destroy :update_parent_attributes
   
@@ -233,14 +233,35 @@
     lock_version
   ) unless const_defined?(:SAFE_ATTRIBUTES)
   
+  SAFE_ATTRIBUTES_ON_TRANSITION = %w(
+    status_id
+    assigned_to_id
+    fixed_version_id
+    done_ratio
+  ) unless const_defined?(:SAFE_ATTRIBUTES_ON_TRANSITION)
+
   # Safely sets attributes
   # Should be called from controllers instead of #attributes=
   # attr_accessible is too rough because we still want things like
   # Issue.new(:project => foo) to work
   # TODO: move workflow/permission checks from controllers to here
   def safe_attributes=(attrs, user=User.current)
-    return if attrs.nil?
-    attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES.include?(k)}
+    return unless attrs.is_a?(Hash)
+    
+    # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed
+    if new_record? || user.allowed_to?(:edit_issues, project)
+      attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES.include?(k)}
+    elsif new_statuses_allowed_to(user).any?
+      attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES_ON_TRANSITION.include?(k)}
+    else
+      return
+    end
+    
+    # Tracker must be set before since new_statuses_allowed_to depends on it.
+    if t = attrs.delete('tracker_id')
+      self.tracker_id = t
+    end
+    
     if attrs['status_id']
       unless new_statuses_allowed_to(user).collect(&:id).include?(attrs['status_id'].to_i)
         attrs.delete('status_id')
@@ -263,7 +284,7 @@
   end
   
   def done_ratio
-    if Issue.use_status_for_done_ratio? && status && status.default_done_ratio?
+    if Issue.use_status_for_done_ratio? && status && status.default_done_ratio
       status.default_done_ratio
     else
       read_attribute(:done_ratio)
@@ -326,7 +347,7 @@
   # Set the done_ratio using the status if that setting is set.  This will keep the done_ratios
   # even if the user turns off the setting later
   def update_done_ratio_from_issue_status
-    if Issue.use_status_for_done_ratio? && status && status.default_done_ratio?
+    if Issue.use_status_for_done_ratio? && status && status.default_done_ratio
       self.done_ratio = status.default_done_ratio
     end
   end
@@ -390,7 +411,9 @@
   
   # Users the issue can be assigned to
   def assignable_users
-    project.assignable_users
+    users = project.assignable_users
+    users << author if author
+    users.uniq.sort
   end
   
   # Versions that the issue can be assigned to
@@ -415,9 +438,10 @@
   # Returns the mail adresses of users that should be notified
   def recipients
     notified = project.notified_users
-    # Author and assignee are always notified unless they have been locked
-    notified << author if author && author.active?
-    notified << assigned_to if assigned_to && assigned_to.active?
+    # Author and assignee are always notified unless they have been
+    # locked or don't want to be notified
+    notified << author if author && author.active? && author.notify_about?(self)
+    notified << assigned_to if assigned_to && assigned_to.active? && assigned_to.notify_about?(self)
     notified.uniq!
     # Remove users that can not view the issue
     notified.reject! {|user| !visible?(user)}
@@ -714,7 +738,7 @@
       end
       
       # done ratio = weighted average ratio of leaves
-      unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio?
+      unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio
         leaves_count = p.leaves.count
         if leaves_count > 0
           average = p.leaves.average(:estimated_hours).to_f
--- a/app/models/.svn/text-base/journal_observer.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/text-base/journal_observer.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -17,6 +17,11 @@
 
 class JournalObserver < ActiveRecord::Observer
   def after_create(journal)
-    Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated')
+    if Setting.notified_events.include?('issue_updated') ||
+        (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) ||
+        (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
+        (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
+      Mailer.deliver_issue_edit(journal)
+    end
   end
 end
--- a/app/models/.svn/text-base/mail_handler.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/text-base/mail_handler.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -17,6 +17,7 @@
 
 class MailHandler < ActionMailer::Base
   include ActionView::Helpers::SanitizeHelper
+  include Redmine::I18n
 
   class UnauthorizedAction < StandardError; end
   class MissingInformation < StandardError; end
@@ -116,36 +117,20 @@
   # Creates a new issue
   def receive_issue
     project = target_project
-    tracker = (get_keyword(:tracker) && project.trackers.find_by_name(get_keyword(:tracker))) || project.trackers.find(:first)
-    category = (get_keyword(:category) && project.issue_categories.find_by_name(get_keyword(:category)))
-    priority = (get_keyword(:priority) && IssuePriority.find_by_name(get_keyword(:priority)))
-    status =  (get_keyword(:status) && IssueStatus.find_by_name(get_keyword(:status)))
-    assigned_to = (get_keyword(:assigned_to, :override => true) && find_user_from_keyword(get_keyword(:assigned_to, :override => true)))
-    due_date = get_keyword(:due_date, :override => true)
-    start_date = get_keyword(:start_date, :override => true)
-
     # check permission
     unless @@handler_options[:no_permission_check]
       raise UnauthorizedAction unless user.allowed_to?(:add_issues, project)
     end
 
-    issue = Issue.new(:author => user, :project => project, :tracker => tracker, :category => category, :priority => priority, :due_date => due_date, :start_date => start_date, :assigned_to => assigned_to)
-    # check workflow
-    if status && issue.new_statuses_allowed_to(user).include?(status)
-      issue.status = status
-    end
-    issue.subject = email.subject.chomp[0,255]
+    issue = Issue.new(:author => user, :project => project)
+    issue.safe_attributes = issue_attributes_from_keywords(issue)
+    issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)}
+    issue.subject = email.subject.to_s.chomp[0,255]
     if issue.subject.blank?
       issue.subject = '(no subject)'
     end
-    # custom fields
-    issue.custom_field_values = issue.available_custom_fields.inject({}) do |h, c|
-      if value = get_keyword(c.name, :override => true)
-        h[c.id] = value
-      end
-      h
-    end
     issue.description = cleaned_up_text_body
+    
     # add To and Cc as watchers before saving so the watchers can reply to Redmine
     add_watchers(issue)
     issue.save!
@@ -154,41 +139,19 @@
     issue
   end
   
-  def target_project
-    # TODO: other ways to specify project:
-    # * parse the email To field
-    # * specific project (eg. Setting.mail_handler_target_project)
-    target = Project.find_by_identifier(get_keyword(:project))
-    raise MissingInformation.new('Unable to determine target project') if target.nil?
-    target
-  end
-  
   # Adds a note to an existing issue
   def receive_issue_reply(issue_id)
-    status =  (get_keyword(:status) && IssueStatus.find_by_name(get_keyword(:status)))
-    due_date = get_keyword(:due_date, :override => true)
-    start_date = get_keyword(:start_date, :override => true)
-    assigned_to = (get_keyword(:assigned_to, :override => true) && find_user_from_keyword(get_keyword(:assigned_to, :override => true)))
-    
     issue = Issue.find_by_id(issue_id)
     return unless issue
     # check permission
     unless @@handler_options[:no_permission_check]
       raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project)
-      raise UnauthorizedAction unless status.nil? || user.allowed_to?(:edit_issues, issue.project)
     end
-
-    # add the note
+    
     journal = issue.init_journal(user, cleaned_up_text_body)
+    issue.safe_attributes = issue_attributes_from_keywords(issue)
+    issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)}
     add_attachments(issue)
-    # check workflow
-    if status && issue.new_statuses_allowed_to(user).include?(status)
-      issue.status = status
-    end
-    issue.start_date = start_date if start_date
-    issue.due_date = due_date if due_date
-    issue.assigned_to = assigned_to if assigned_to
-    
     issue.save!
     logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info
     journal
@@ -255,8 +218,8 @@
       @keywords[attr]
     else
       @keywords[attr] = begin
-        if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && plain_text_body.gsub!(/^#{attr.to_s.humanize}[ \t]*:[ \t]*(.+)\s*$/i, '')
-          $1.strip
+        if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && (v = extract_keyword!(plain_text_body, attr, options[:format]))
+          v
         elsif !@@handler_options[:issue][attr].blank?
           @@handler_options[:issue][attr]
         end
@@ -264,6 +227,59 @@
     end
   end
   
+  # Destructively extracts the value for +attr+ in +text+
+  # Returns nil if no matching keyword found
+  def extract_keyword!(text, attr, format=nil)
+    keys = [attr.to_s.humanize]
+    if attr.is_a?(Symbol)
+      keys << l("field_#{attr}", :default => '', :locale =>  user.language) if user
+      keys << l("field_#{attr}", :default => '', :locale =>  Setting.default_language)
+    end
+    keys.reject! {|k| k.blank?}
+    keys.collect! {|k| Regexp.escape(k)}
+    format ||= '.+'
+    text.gsub!(/^(#{keys.join('|')})[ \t]*:[ \t]*(#{format})\s*$/i, '')
+    $2 && $2.strip
+  end
+
+  def target_project
+    # TODO: other ways to specify project:
+    # * parse the email To field
+    # * specific project (eg. Setting.mail_handler_target_project)
+    target = Project.find_by_identifier(get_keyword(:project))
+    raise MissingInformation.new('Unable to determine target project') if target.nil?
+    target
+  end
+  
+  # Returns a Hash of issue attributes extracted from keywords in the email body
+  def issue_attributes_from_keywords(issue)
+    assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k)
+    assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to)
+    
+    {
+      'tracker_id' => ((k = get_keyword(:tracker)) && issue.project.trackers.find_by_name(k).try(:id)) || issue.project.trackers.find(:first).try(:id),
+      'status_id' =>  (k = get_keyword(:status)) && IssueStatus.find_by_name(k).try(:id),
+      'priority_id' => (k = get_keyword(:priority)) && IssuePriority.find_by_name(k).try(:id),
+      'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id),
+      'assigned_to_id' => assigned_to.try(:id),
+      'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id),
+      'start_date' => get_keyword(:start_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'),
+      'due_date' => get_keyword(:due_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'),
+      'estimated_hours' => get_keyword(:estimated_hours, :override => true),
+      'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0')
+    }.delete_if {|k, v| v.blank? }
+  end
+  
+  # Returns a Hash of issue custom field values extracted from keywords in the email body
+  def custom_field_values_from_keywords(customized)  
+    customized.custom_field_values.inject({}) do |h, v|
+      if value = get_keyword(v.custom_field.name, :override => true)
+        h[v.custom_field.id.to_s] = value
+      end
+      h
+    end
+  end
+  
   # Returns the text/plain part of the email
   # If not found (eg. HTML-only email), returns the body with tags removed
   def plain_text_body
@@ -318,7 +334,7 @@
   def cleanup_body(body)
     delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)}
     unless delimiters.empty?
-      regex = Regexp.new("^(#{ delimiters.join('|') })\s*[\r\n].*", Regexp::MULTILINE)
+      regex = Regexp.new("^[> ]*(#{ delimiters.join('|') })\s*[\r\n].*", Regexp::MULTILINE)
       body = body.gsub(regex, '')
     end
     body.strip
--- a/app/models/.svn/text-base/mailer.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/text-base/mailer.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -178,9 +178,9 @@
     message_id wiki_content
     recipients wiki_content.recipients
     cc(wiki_content.page.wiki.watcher_recipients - recipients)
-    subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :page => wiki_content.page.pretty_title)}"
+    subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :id => wiki_content.page.pretty_title)}"
     body :wiki_content => wiki_content,
-         :wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title)
+         :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title)
     render_multipart('wiki_content_added', body)
   end
   
@@ -195,10 +195,10 @@
     message_id wiki_content
     recipients wiki_content.recipients
     cc(wiki_content.page.wiki.watcher_recipients + wiki_content.page.watcher_recipients - recipients)
-    subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_updated, :page => wiki_content.page.pretty_title)}"
+    subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_updated, :id => wiki_content.page.pretty_title)}"
     body :wiki_content => wiki_content,
-         :wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title),
-         :wiki_diff_url => url_for(:controller => 'wiki', :action => 'diff', :id => wiki_content.project, :page => wiki_content.page.title, :version => wiki_content.version)
+         :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title),
+         :wiki_diff_url => url_for(:controller => 'wiki', :action => 'diff', :project_id => wiki_content.project, :id => wiki_content.page.title, :version => wiki_content.version)
     render_multipart('wiki_content_updated', body)
   end
 
--- a/app/models/.svn/text-base/project.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/text-base/project.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -20,6 +20,9 @@
   STATUS_ACTIVE     = 1
   STATUS_ARCHIVED   = 9
   
+  # Maximum length for project identifiers
+  IDENTIFIER_MAX_LENGTH = 100
+  
   # Specific overidden Activities
   has_many :time_entry_activities
   has_many :members, :include => [:user, :roles], :conditions => "#{User.table_name}.type='User' AND #{User.table_name}.status=#{User::STATUS_ACTIVE}"
@@ -64,11 +67,11 @@
   attr_protected :status, :enabled_module_names
   
   validates_presence_of :name, :identifier
-  validates_uniqueness_of :name, :identifier
+  validates_uniqueness_of :identifier
   validates_associated :repository, :wiki
-  validates_length_of :name, :maximum => 30
+  validates_length_of :name, :maximum => 255
   validates_length_of :homepage, :maximum => 255
-  validates_length_of :identifier, :in => 1..20
+  validates_length_of :identifier, :in => 1..IDENTIFIER_MAX_LENGTH
   # donwcase letters, digits, dashes but not digits only
   validates_format_of :identifier, :with => /^(?!\d+$)[a-z0-9\-]*$/, :if => Proc.new { |p| p.identifier_changed? }
   # reserved words
@@ -220,6 +223,10 @@
     self.status == STATUS_ACTIVE
   end
   
+  def archived?
+    self.status == STATUS_ARCHIVED
+  end
+  
   # Archives the project and its descendants
   def archive
     # Check that there is no issue of a non descendant project that is assigned
@@ -382,12 +389,13 @@
   
   # Returns the mail adresses of users that should be always notified on project events
   def recipients
-    members.select {|m| m.mail_notification? || m.user.mail_notification?}.collect {|m| m.user.mail}
+    notified_users.collect {|user| user.mail}
   end
   
   # Returns the users that should be notified on project events
   def notified_users
-    members.select {|m| m.mail_notification? || m.user.mail_notification?}.collect {|m| m.user}
+    # TODO: User part should be extracted to User#notify_about?
+    members.select {|m| m.mail_notification? || m.user.mail_notification == 'all'}.collect {|m| m.user}
   end
   
   # Returns an array of all custom fields enabled for project issues
@@ -564,6 +572,18 @@
       return nil
     end
   end
+
+  # Yields the given block for each project with its level in the tree
+  def self.project_tree(projects, &block)
+    ancestors = []
+    projects.sort_by(&:lft).each do |project|
+      while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) 
+        ancestors.pop
+      end
+      yield project, ancestors.size
+      ancestors << project
+    end
+  end
   
   private
   
--- a/app/models/.svn/text-base/query.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/text-base/query.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -196,10 +196,10 @@
     @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } unless user_values.empty?
     @available_filters["author_id"] = { :type => :list, :order => 5, :values => user_values } unless user_values.empty?
 
-    group_values = Group.all.collect {|g| [g.name, g.id] }
+    group_values = Group.all.collect {|g| [g.name, g.id.to_s] }
     @available_filters["member_of_group"] = { :type => :list_optional, :order => 6, :values => group_values } unless group_values.empty?
 
-    role_values = Role.givable.collect {|r| [r.name, r.id] }
+    role_values = Role.givable.collect {|r| [r.name, r.id.to_s] }
     @available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty?
     
     if User.current.logged?
@@ -258,8 +258,10 @@
 
   # Add multiple filters using +add_filter+
   def add_filters(fields, operators, values)
-    fields.each do |field|
-      add_filter(field, operators[field], values[field])
+    if fields.is_a?(Array) && operators.is_a?(Hash) && values.is_a?(Hash)
+      fields.each do |field|
+        add_filter(field, operators[field], values[field])
+      end
     end
   end
   
--- a/app/models/.svn/text-base/time_entry.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/text-base/time_entry.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -27,7 +27,7 @@
 
   acts_as_customizable
   acts_as_event :title => Proc.new {|o| "#{l_hours(o.hours)} (#{(o.issue || o.project).event_title})"},
-                :url => Proc.new {|o| {:controller => 'timelog', :action => 'details', :project_id => o.project, :issue_id => o.issue}},
+                :url => Proc.new {|o| {:controller => 'timelog', :action => 'index', :project_id => o.project, :issue_id => o.issue}},
                 :author => :user,
                 :description => :comments
 
--- a/app/models/.svn/text-base/user.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/text-base/user.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -33,6 +33,15 @@
     :username => '#{login}'
   }
 
+  MAIL_NOTIFICATION_OPTIONS = [
+                               [:all, :label_user_mail_option_all],
+                               [:selected, :label_user_mail_option_selected],
+                               [:none, :label_user_mail_option_none],
+                               [:only_my_events, :label_user_mail_option_only_my_events],
+                               [:only_assigned, :label_user_mail_option_only_assigned],
+                               [:only_owner, :label_user_mail_option_only_owner]
+                              ]
+
   has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)},
                                    :after_remove => Proc.new {|user, group| group.user_removed(user)}
   has_many :issue_categories, :foreign_key => 'assigned_to_id', :dependent => :nullify
@@ -65,7 +74,7 @@
   validates_confirmation_of :password, :allow_nil => true
 
   def before_create
-    self.mail_notification = false
+    self.mail_notification = Setting.default_notification_option if self.mail_notification.blank?
     true
   end
   
@@ -250,6 +259,17 @@
     notified_projects_ids
   end
 
+  # Only users that belong to more than 1 project can select projects for which they are notified
+  def valid_notification_options
+    # Note that @user.membership.size would fail since AR ignores
+    # :include association option when doing a count
+    if memberships.length < 1
+      MAIL_NOTIFICATION_OPTIONS.delete_if {|option| option.first == :selected}
+    else
+      MAIL_NOTIFICATION_OPTIONS
+    end
+  end
+
   # Find a user account by matching the exact login and then a case-insensitive
   # version.  Exact matches will be given priority.
   def self.find_by_login(login)
@@ -324,23 +344,35 @@
     !roles_for_project(project).detect {|role| role.member?}.nil?
   end
   
-  # Return true if the user is allowed to do the specified action on project
-  # action can be:
+  # Return true if the user is allowed to do the specified action on a specific context
+  # Action can be:
   # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit')
   # * a permission Symbol (eg. :edit_project)
-  def allowed_to?(action, project, options={})
-    if project
+  # Context can be:
+  # * a project : returns true if user is allowed to do the specified action on this project
+  # * a group of projects : returns true if user is allowed on every project
+  # * nil with options[:global] set : check if user has at least one role allowed for this action, 
+  #   or falls back to Non Member / Anonymous permissions depending if the user is logged
+  def allowed_to?(action, context, options={})
+    if context && context.is_a?(Project)
       # No action allowed on archived projects
-      return false unless project.active?
+      return false unless context.active?
       # No action allowed on disabled modules
-      return false unless project.allows_to?(action)
+      return false unless context.allows_to?(action)
       # Admin users are authorized for anything else
       return true if admin?
       
-      roles = roles_for_project(project)
+      roles = roles_for_project(context)
       return false unless roles
-      roles.detect {|role| (project.is_public? || role.member?) && role.allowed_to?(action)}
+      roles.detect {|role| (context.is_public? || role.member?) && role.allowed_to?(action)}
       
+    elsif context && context.is_a?(Array)
+      # Authorize if user is authorized on every element of the array
+      context.map do |project|
+        allowed_to?(action,project,options)
+      end.inject do |memo,allowed|
+        memo && allowed
+      end
     elsif options[:global]
       # Admin users are always authorized
       return true if admin?
@@ -359,6 +391,41 @@
     allowed_to?(action, nil, options.reverse_merge(:global => true))
   end
   
+  # Utility method to help check if a user should be notified about an
+  # event.
+  #
+  # TODO: only supports Issue events currently
+  def notify_about?(object)
+    case mail_notification.to_sym
+    when :all
+      true
+    when :selected
+      # Handled by the Project
+    when :none
+      false
+    when :only_my_events
+      if object.is_a?(Issue) && (object.author == self || object.assigned_to == self)
+        true
+      else
+        false
+      end
+    when :only_assigned
+      if object.is_a?(Issue) && object.assigned_to == self
+        true
+      else
+        false
+      end
+    when :only_owner
+      if object.is_a?(Issue) && object.author == self
+        true
+      else
+        false
+      end
+    else
+      false
+    end
+  end
+  
   def self.current=(user)
     @current_user = user
   end
--- a/app/models/.svn/text-base/wiki_content.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/text-base/wiki_content.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -54,7 +54,7 @@
                   :description => :comments,
                   :datetime => :updated_on,
                   :type => 'wiki-page',
-                  :url => Proc.new {|o| {:controller => 'wiki', :id => o.page.wiki.project_id, :page => o.page.title, :version => o.version}}
+                  :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.page.wiki.project, :id => o.page.title, :version => o.version}}
 
     acts_as_activity_provider :type => 'wiki_edits',
                               :timestamp => "#{WikiContent.versioned_table_name}.updated_on",
--- a/app/models/.svn/text-base/wiki_page.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/.svn/text-base/wiki_page.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -28,7 +28,7 @@
   acts_as_event :title => Proc.new {|o| "#{l(:label_wiki)}: #{o.title}"},
                 :description => :text,
                 :datetime => :created_on,
-                :url => Proc.new {|o| {:controller => 'wiki', :id => o.wiki.project, :page => o.title}}
+                :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.wiki.project, :id => o.title}}
 
   acts_as_searchable :columns => ['title', 'text'],
                      :include => [{:wiki => :project}, :content],
@@ -139,7 +139,7 @@
     parent_page = t.blank? ? nil : self.wiki.find_page(t)
     self.parent = parent_page
   end
-  
+
   protected
   
   def validate
--- a/app/models/custom_value.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/custom_value.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -34,6 +34,10 @@
     custom_field.editable?
   end
   
+  def visible?
+    custom_field.visible?
+  end
+  
   def required?
     custom_field.is_required?
   end
--- a/app/models/issue.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/issue.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -86,8 +86,8 @@
   }
 
   before_create :default_assign
-  before_save :reschedule_following_issues, :close_duplicates, :update_done_ratio_from_issue_status
-  after_save :update_nested_set_attributes, :update_parent_attributes, :create_journal
+  before_save :close_duplicates, :update_done_ratio_from_issue_status
+  after_save :reschedule_following_issues, :update_nested_set_attributes, :update_parent_attributes, :create_journal
   after_destroy :destroy_children
   after_destroy :update_parent_attributes
   
@@ -233,14 +233,35 @@
     lock_version
   ) unless const_defined?(:SAFE_ATTRIBUTES)
   
+  SAFE_ATTRIBUTES_ON_TRANSITION = %w(
+    status_id
+    assigned_to_id
+    fixed_version_id
+    done_ratio
+  ) unless const_defined?(:SAFE_ATTRIBUTES_ON_TRANSITION)
+
   # Safely sets attributes
   # Should be called from controllers instead of #attributes=
   # attr_accessible is too rough because we still want things like
   # Issue.new(:project => foo) to work
   # TODO: move workflow/permission checks from controllers to here
   def safe_attributes=(attrs, user=User.current)
-    return if attrs.nil?
-    attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES.include?(k)}
+    return unless attrs.is_a?(Hash)
+    
+    # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed
+    if new_record? || user.allowed_to?(:edit_issues, project)
+      attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES.include?(k)}
+    elsif new_statuses_allowed_to(user).any?
+      attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES_ON_TRANSITION.include?(k)}
+    else
+      return
+    end
+    
+    # Tracker must be set before since new_statuses_allowed_to depends on it.
+    if t = attrs.delete('tracker_id')
+      self.tracker_id = t
+    end
+    
     if attrs['status_id']
       unless new_statuses_allowed_to(user).collect(&:id).include?(attrs['status_id'].to_i)
         attrs.delete('status_id')
@@ -263,7 +284,7 @@
   end
   
   def done_ratio
-    if Issue.use_status_for_done_ratio? && status && status.default_done_ratio?
+    if Issue.use_status_for_done_ratio? && status && status.default_done_ratio
       status.default_done_ratio
     else
       read_attribute(:done_ratio)
@@ -326,7 +347,7 @@
   # Set the done_ratio using the status if that setting is set.  This will keep the done_ratios
   # even if the user turns off the setting later
   def update_done_ratio_from_issue_status
-    if Issue.use_status_for_done_ratio? && status && status.default_done_ratio?
+    if Issue.use_status_for_done_ratio? && status && status.default_done_ratio
       self.done_ratio = status.default_done_ratio
     end
   end
@@ -390,7 +411,9 @@
   
   # Users the issue can be assigned to
   def assignable_users
-    project.assignable_users
+    users = project.assignable_users
+    users << author if author
+    users.uniq.sort
   end
   
   # Versions that the issue can be assigned to
@@ -415,9 +438,10 @@
   # Returns the mail adresses of users that should be notified
   def recipients
     notified = project.notified_users
-    # Author and assignee are always notified unless they have been locked
-    notified << author if author && author.active?
-    notified << assigned_to if assigned_to && assigned_to.active?
+    # Author and assignee are always notified unless they have been
+    # locked or don't want to be notified
+    notified << author if author && author.active? && author.notify_about?(self)
+    notified << assigned_to if assigned_to && assigned_to.active? && assigned_to.notify_about?(self)
     notified.uniq!
     # Remove users that can not view the issue
     notified.reject! {|user| !visible?(user)}
@@ -714,7 +738,7 @@
       end
       
       # done ratio = weighted average ratio of leaves
-      unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio?
+      unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio
         leaves_count = p.leaves.count
         if leaves_count > 0
           average = p.leaves.average(:estimated_hours).to_f
--- a/app/models/journal_observer.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/journal_observer.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -17,6 +17,11 @@
 
 class JournalObserver < ActiveRecord::Observer
   def after_create(journal)
-    Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated')
+    if Setting.notified_events.include?('issue_updated') ||
+        (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) ||
+        (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
+        (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
+      Mailer.deliver_issue_edit(journal)
+    end
   end
 end
--- a/app/models/mail_handler.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/mail_handler.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -17,6 +17,7 @@
 
 class MailHandler < ActionMailer::Base
   include ActionView::Helpers::SanitizeHelper
+  include Redmine::I18n
 
   class UnauthorizedAction < StandardError; end
   class MissingInformation < StandardError; end
@@ -116,36 +117,20 @@
   # Creates a new issue
   def receive_issue
     project = target_project
-    tracker = (get_keyword(:tracker) && project.trackers.find_by_name(get_keyword(:tracker))) || project.trackers.find(:first)
-    category = (get_keyword(:category) && project.issue_categories.find_by_name(get_keyword(:category)))
-    priority = (get_keyword(:priority) && IssuePriority.find_by_name(get_keyword(:priority)))
-    status =  (get_keyword(:status) && IssueStatus.find_by_name(get_keyword(:status)))
-    assigned_to = (get_keyword(:assigned_to, :override => true) && find_user_from_keyword(get_keyword(:assigned_to, :override => true)))
-    due_date = get_keyword(:due_date, :override => true)
-    start_date = get_keyword(:start_date, :override => true)
-
     # check permission
     unless @@handler_options[:no_permission_check]
       raise UnauthorizedAction unless user.allowed_to?(:add_issues, project)
     end
 
-    issue = Issue.new(:author => user, :project => project, :tracker => tracker, :category => category, :priority => priority, :due_date => due_date, :start_date => start_date, :assigned_to => assigned_to)
-    # check workflow
-    if status && issue.new_statuses_allowed_to(user).include?(status)
-      issue.status = status
-    end
-    issue.subject = email.subject.chomp[0,255]
+    issue = Issue.new(:author => user, :project => project)
+    issue.safe_attributes = issue_attributes_from_keywords(issue)
+    issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)}
+    issue.subject = email.subject.to_s.chomp[0,255]
     if issue.subject.blank?
       issue.subject = '(no subject)'
     end
-    # custom fields
-    issue.custom_field_values = issue.available_custom_fields.inject({}) do |h, c|
-      if value = get_keyword(c.name, :override => true)
-        h[c.id] = value
-      end
-      h
-    end
     issue.description = cleaned_up_text_body
+    
     # add To and Cc as watchers before saving so the watchers can reply to Redmine
     add_watchers(issue)
     issue.save!
@@ -154,41 +139,19 @@
     issue
   end
   
-  def target_project
-    # TODO: other ways to specify project:
-    # * parse the email To field
-    # * specific project (eg. Setting.mail_handler_target_project)
-    target = Project.find_by_identifier(get_keyword(:project))
-    raise MissingInformation.new('Unable to determine target project') if target.nil?
-    target
-  end
-  
   # Adds a note to an existing issue
   def receive_issue_reply(issue_id)
-    status =  (get_keyword(:status) && IssueStatus.find_by_name(get_keyword(:status)))
-    due_date = get_keyword(:due_date, :override => true)
-    start_date = get_keyword(:start_date, :override => true)
-    assigned_to = (get_keyword(:assigned_to, :override => true) && find_user_from_keyword(get_keyword(:assigned_to, :override => true)))
-    
     issue = Issue.find_by_id(issue_id)
     return unless issue
     # check permission
     unless @@handler_options[:no_permission_check]
       raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project)
-      raise UnauthorizedAction unless status.nil? || user.allowed_to?(:edit_issues, issue.project)
     end
-
-    # add the note
+    
     journal = issue.init_journal(user, cleaned_up_text_body)
+    issue.safe_attributes = issue_attributes_from_keywords(issue)
+    issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)}
     add_attachments(issue)
-    # check workflow
-    if status && issue.new_statuses_allowed_to(user).include?(status)
-      issue.status = status
-    end
-    issue.start_date = start_date if start_date
-    issue.due_date = due_date if due_date
-    issue.assigned_to = assigned_to if assigned_to
-    
     issue.save!
     logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info
     journal
@@ -255,8 +218,8 @@
       @keywords[attr]
     else
       @keywords[attr] = begin
-        if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && plain_text_body.gsub!(/^#{attr.to_s.humanize}[ \t]*:[ \t]*(.+)\s*$/i, '')
-          $1.strip
+        if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && (v = extract_keyword!(plain_text_body, attr, options[:format]))
+          v
         elsif !@@handler_options[:issue][attr].blank?
           @@handler_options[:issue][attr]
         end
@@ -264,6 +227,59 @@
     end
   end
   
+  # Destructively extracts the value for +attr+ in +text+
+  # Returns nil if no matching keyword found
+  def extract_keyword!(text, attr, format=nil)
+    keys = [attr.to_s.humanize]
+    if attr.is_a?(Symbol)
+      keys << l("field_#{attr}", :default => '', :locale =>  user.language) if user
+      keys << l("field_#{attr}", :default => '', :locale =>  Setting.default_language)
+    end
+    keys.reject! {|k| k.blank?}
+    keys.collect! {|k| Regexp.escape(k)}
+    format ||= '.+'
+    text.gsub!(/^(#{keys.join('|')})[ \t]*:[ \t]*(#{format})\s*$/i, '')
+    $2 && $2.strip
+  end
+
+  def target_project
+    # TODO: other ways to specify project:
+    # * parse the email To field
+    # * specific project (eg. Setting.mail_handler_target_project)
+    target = Project.find_by_identifier(get_keyword(:project))
+    raise MissingInformation.new('Unable to determine target project') if target.nil?
+    target
+  end
+  
+  # Returns a Hash of issue attributes extracted from keywords in the email body
+  def issue_attributes_from_keywords(issue)
+    assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k)
+    assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to)
+    
+    {
+      'tracker_id' => ((k = get_keyword(:tracker)) && issue.project.trackers.find_by_name(k).try(:id)) || issue.project.trackers.find(:first).try(:id),
+      'status_id' =>  (k = get_keyword(:status)) && IssueStatus.find_by_name(k).try(:id),
+      'priority_id' => (k = get_keyword(:priority)) && IssuePriority.find_by_name(k).try(:id),
+      'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id),
+      'assigned_to_id' => assigned_to.try(:id),
+      'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id),
+      'start_date' => get_keyword(:start_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'),
+      'due_date' => get_keyword(:due_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'),
+      'estimated_hours' => get_keyword(:estimated_hours, :override => true),
+      'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0')
+    }.delete_if {|k, v| v.blank? }
+  end
+  
+  # Returns a Hash of issue custom field values extracted from keywords in the email body
+  def custom_field_values_from_keywords(customized)  
+    customized.custom_field_values.inject({}) do |h, v|
+      if value = get_keyword(v.custom_field.name, :override => true)
+        h[v.custom_field.id.to_s] = value
+      end
+      h
+    end
+  end
+  
   # Returns the text/plain part of the email
   # If not found (eg. HTML-only email), returns the body with tags removed
   def plain_text_body
@@ -318,7 +334,7 @@
   def cleanup_body(body)
     delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)}
     unless delimiters.empty?
-      regex = Regexp.new("^(#{ delimiters.join('|') })\s*[\r\n].*", Regexp::MULTILINE)
+      regex = Regexp.new("^[> ]*(#{ delimiters.join('|') })\s*[\r\n].*", Regexp::MULTILINE)
       body = body.gsub(regex, '')
     end
     body.strip
--- a/app/models/mailer.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/mailer.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -178,9 +178,9 @@
     message_id wiki_content
     recipients wiki_content.recipients
     cc(wiki_content.page.wiki.watcher_recipients - recipients)
-    subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :page => wiki_content.page.pretty_title)}"
+    subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :id => wiki_content.page.pretty_title)}"
     body :wiki_content => wiki_content,
-         :wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title)
+         :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title)
     render_multipart('wiki_content_added', body)
   end
   
@@ -195,10 +195,10 @@
     message_id wiki_content
     recipients wiki_content.recipients
     cc(wiki_content.page.wiki.watcher_recipients + wiki_content.page.watcher_recipients - recipients)
-    subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_updated, :page => wiki_content.page.pretty_title)}"
+    subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_updated, :id => wiki_content.page.pretty_title)}"
     body :wiki_content => wiki_content,
-         :wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title),
-         :wiki_diff_url => url_for(:controller => 'wiki', :action => 'diff', :id => wiki_content.project, :page => wiki_content.page.title, :version => wiki_content.version)
+         :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title),
+         :wiki_diff_url => url_for(:controller => 'wiki', :action => 'diff', :project_id => wiki_content.project, :id => wiki_content.page.title, :version => wiki_content.version)
     render_multipart('wiki_content_updated', body)
   end
 
--- a/app/models/project.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/project.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -20,6 +20,9 @@
   STATUS_ACTIVE     = 1
   STATUS_ARCHIVED   = 9
   
+  # Maximum length for project identifiers
+  IDENTIFIER_MAX_LENGTH = 100
+  
   # Specific overidden Activities
   has_many :time_entry_activities
   has_many :members, :include => [:user, :roles], :conditions => "#{User.table_name}.type='User' AND #{User.table_name}.status=#{User::STATUS_ACTIVE}"
@@ -64,11 +67,11 @@
   attr_protected :status, :enabled_module_names
   
   validates_presence_of :name, :identifier
-  validates_uniqueness_of :name, :identifier
+  validates_uniqueness_of :identifier
   validates_associated :repository, :wiki
-  validates_length_of :name, :maximum => 30
+  validates_length_of :name, :maximum => 255
   validates_length_of :homepage, :maximum => 255
-  validates_length_of :identifier, :in => 1..20
+  validates_length_of :identifier, :in => 1..IDENTIFIER_MAX_LENGTH
   # donwcase letters, digits, dashes but not digits only
   validates_format_of :identifier, :with => /^(?!\d+$)[a-z0-9\-]*$/, :if => Proc.new { |p| p.identifier_changed? }
   # reserved words
@@ -220,6 +223,10 @@
     self.status == STATUS_ACTIVE
   end
   
+  def archived?
+    self.status == STATUS_ARCHIVED
+  end
+  
   # Archives the project and its descendants
   def archive
     # Check that there is no issue of a non descendant project that is assigned
@@ -382,12 +389,13 @@
   
   # Returns the mail adresses of users that should be always notified on project events
   def recipients
-    members.select {|m| m.mail_notification? || m.user.mail_notification?}.collect {|m| m.user.mail}
+    notified_users.collect {|user| user.mail}
   end
   
   # Returns the users that should be notified on project events
   def notified_users
-    members.select {|m| m.mail_notification? || m.user.mail_notification?}.collect {|m| m.user}
+    # TODO: User part should be extracted to User#notify_about?
+    members.select {|m| m.mail_notification? || m.user.mail_notification == 'all'}.collect {|m| m.user}
   end
   
   # Returns an array of all custom fields enabled for project issues
@@ -564,6 +572,18 @@
       return nil
     end
   end
+
+  # Yields the given block for each project with its level in the tree
+  def self.project_tree(projects, &block)
+    ancestors = []
+    projects.sort_by(&:lft).each do |project|
+      while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) 
+        ancestors.pop
+      end
+      yield project, ancestors.size
+      ancestors << project
+    end
+  end
   
   private
   
--- a/app/models/query.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/query.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -196,10 +196,10 @@
     @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } unless user_values.empty?
     @available_filters["author_id"] = { :type => :list, :order => 5, :values => user_values } unless user_values.empty?
 
-    group_values = Group.all.collect {|g| [g.name, g.id] }
+    group_values = Group.all.collect {|g| [g.name, g.id.to_s] }
     @available_filters["member_of_group"] = { :type => :list_optional, :order => 6, :values => group_values } unless group_values.empty?
 
-    role_values = Role.givable.collect {|r| [r.name, r.id] }
+    role_values = Role.givable.collect {|r| [r.name, r.id.to_s] }
     @available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty?
     
     if User.current.logged?
@@ -258,8 +258,10 @@
 
   # Add multiple filters using +add_filter+
   def add_filters(fields, operators, values)
-    fields.each do |field|
-      add_filter(field, operators[field], values[field])
+    if fields.is_a?(Array) && operators.is_a?(Hash) && values.is_a?(Hash)
+      fields.each do |field|
+        add_filter(field, operators[field], values[field])
+      end
     end
   end
   
--- a/app/models/repository/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/repository/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/models/repository
 http://redmine.rubyforge.org/svn
 
--- a/app/models/time_entry.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/time_entry.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -27,7 +27,7 @@
 
   acts_as_customizable
   acts_as_event :title => Proc.new {|o| "#{l_hours(o.hours)} (#{(o.issue || o.project).event_title})"},
-                :url => Proc.new {|o| {:controller => 'timelog', :action => 'details', :project_id => o.project, :issue_id => o.issue}},
+                :url => Proc.new {|o| {:controller => 'timelog', :action => 'index', :project_id => o.project, :issue_id => o.issue}},
                 :author => :user,
                 :description => :comments
 
--- a/app/models/user.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/user.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -33,6 +33,15 @@
     :username => '#{login}'
   }
 
+  MAIL_NOTIFICATION_OPTIONS = [
+                               [:all, :label_user_mail_option_all],
+                               [:selected, :label_user_mail_option_selected],
+                               [:none, :label_user_mail_option_none],
+                               [:only_my_events, :label_user_mail_option_only_my_events],
+                               [:only_assigned, :label_user_mail_option_only_assigned],
+                               [:only_owner, :label_user_mail_option_only_owner]
+                              ]
+
   has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)},
                                    :after_remove => Proc.new {|user, group| group.user_removed(user)}
   has_many :issue_categories, :foreign_key => 'assigned_to_id', :dependent => :nullify
@@ -65,7 +74,7 @@
   validates_confirmation_of :password, :allow_nil => true
 
   def before_create
-    self.mail_notification = false
+    self.mail_notification = Setting.default_notification_option if self.mail_notification.blank?
     true
   end
   
@@ -250,6 +259,17 @@
     notified_projects_ids
   end
 
+  # Only users that belong to more than 1 project can select projects for which they are notified
+  def valid_notification_options
+    # Note that @user.membership.size would fail since AR ignores
+    # :include association option when doing a count
+    if memberships.length < 1
+      MAIL_NOTIFICATION_OPTIONS.delete_if {|option| option.first == :selected}
+    else
+      MAIL_NOTIFICATION_OPTIONS
+    end
+  end
+
   # Find a user account by matching the exact login and then a case-insensitive
   # version.  Exact matches will be given priority.
   def self.find_by_login(login)
@@ -324,23 +344,35 @@
     !roles_for_project(project).detect {|role| role.member?}.nil?
   end
   
-  # Return true if the user is allowed to do the specified action on project
-  # action can be:
+  # Return true if the user is allowed to do the specified action on a specific context
+  # Action can be:
   # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit')
   # * a permission Symbol (eg. :edit_project)
-  def allowed_to?(action, project, options={})
-    if project
+  # Context can be:
+  # * a project : returns true if user is allowed to do the specified action on this project
+  # * a group of projects : returns true if user is allowed on every project
+  # * nil with options[:global] set : check if user has at least one role allowed for this action, 
+  #   or falls back to Non Member / Anonymous permissions depending if the user is logged
+  def allowed_to?(action, context, options={})
+    if context && context.is_a?(Project)
       # No action allowed on archived projects
-      return false unless project.active?
+      return false unless context.active?
       # No action allowed on disabled modules
-      return false unless project.allows_to?(action)
+      return false unless context.allows_to?(action)
       # Admin users are authorized for anything else
       return true if admin?
       
-      roles = roles_for_project(project)
+      roles = roles_for_project(context)
       return false unless roles
-      roles.detect {|role| (project.is_public? || role.member?) && role.allowed_to?(action)}
+      roles.detect {|role| (context.is_public? || role.member?) && role.allowed_to?(action)}
       
+    elsif context && context.is_a?(Array)
+      # Authorize if user is authorized on every element of the array
+      context.map do |project|
+        allowed_to?(action,project,options)
+      end.inject do |memo,allowed|
+        memo && allowed
+      end
     elsif options[:global]
       # Admin users are always authorized
       return true if admin?
@@ -359,6 +391,41 @@
     allowed_to?(action, nil, options.reverse_merge(:global => true))
   end
   
+  # Utility method to help check if a user should be notified about an
+  # event.
+  #
+  # TODO: only supports Issue events currently
+  def notify_about?(object)
+    case mail_notification.to_sym
+    when :all
+      true
+    when :selected
+      # Handled by the Project
+    when :none
+      false
+    when :only_my_events
+      if object.is_a?(Issue) && (object.author == self || object.assigned_to == self)
+        true
+      else
+        false
+      end
+    when :only_assigned
+      if object.is_a?(Issue) && object.assigned_to == self
+        true
+      else
+        false
+      end
+    when :only_owner
+      if object.is_a?(Issue) && object.author == self
+        true
+      else
+        false
+      end
+    else
+      false
+    end
+  end
+  
   def self.current=(user)
     @current_user = user
   end
--- a/app/models/wiki_content.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/wiki_content.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -54,7 +54,7 @@
                   :description => :comments,
                   :datetime => :updated_on,
                   :type => 'wiki-page',
-                  :url => Proc.new {|o| {:controller => 'wiki', :id => o.page.wiki.project_id, :page => o.page.title, :version => o.version}}
+                  :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.page.wiki.project, :id => o.page.title, :version => o.version}}
 
     acts_as_activity_provider :type => 'wiki_edits',
                               :timestamp => "#{WikiContent.versioned_table_name}.updated_on",
--- a/app/models/wiki_page.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/models/wiki_page.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -28,7 +28,7 @@
   acts_as_event :title => Proc.new {|o| "#{l(:label_wiki)}: #{o.title}"},
                 :description => :text,
                 :datetime => :created_on,
-                :url => Proc.new {|o| {:controller => 'wiki', :id => o.wiki.project, :page => o.title}}
+                :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.wiki.project, :id => o.title}}
 
   acts_as_searchable :columns => ['title', 'text'],
                      :include => [{:wiki => :project}, :content],
@@ -139,7 +139,7 @@
     parent_page = t.blank? ? nil : self.wiki.find_page(t)
     self.parent = parent_page
   end
-  
+
   protected
   
   def validate
--- a/app/sweepers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/sweepers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/sweepers
 http://redmine.rubyforge.org/svn
 
--- a/app/views/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 34
-/svn/!svn/ver/4172/trunk/app/views
+/svn/!svn/ver/4409/trunk/app/views
 END
--- a/app/views/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-11-16T19:49:08.085592Z
+4409
+jplang
 
 
 
@@ -50,6 +50,9 @@
 workflows
 dir
 
+time_entry_reports
+dir
+
 reports
 dir
 
@@ -74,13 +77,13 @@
 files
 dir
 
-previews
+ldap_auth_sources
 dir
 
 auth_sources
 dir
 
-ldap_auth_sources
+previews
 dir
 
 search
@@ -89,10 +92,10 @@
 messages
 dir
 
-versions
+issue_relations
 dir
 
-issue_relations
+versions
 dir
 
 mailer
--- a/app/views/account/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/account/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/account
 http://redmine.rubyforge.org/svn
 
--- a/app/views/activities/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/activities/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/activities
 http://redmine.rubyforge.org/svn
 
--- a/app/views/admin/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/admin/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 40
-/svn/!svn/ver/4080/trunk/app/views/admin
+/svn/!svn/ver/4271/trunk/app/views/admin
 END
 info.rhtml
 K 25
@@ -37,5 +37,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/4080/trunk/app/views/admin/projects.rhtml
+/svn/!svn/ver/4271/trunk/app/views/admin/projects.rhtml
 END
--- a/app/views/admin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/admin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/admin
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-10T23:07:10.817821Z
-4080
-edavis10
+2010-10-22T15:11:04.321155Z
+4271
+jplang
 
 
 
@@ -202,11 +202,11 @@
 
 
 
-2010-09-24T12:48:28.359820Z
-5ed19629dda93ba07ab4e356099d19c4
-2010-09-10T23:07:10.817821Z
-4080
-edavis10
+2010-11-19T13:04:49.448967Z
+9aaefdc17951db18479f38fb0db73ea7
+2010-10-22T15:11:04.321155Z
+4271
+jplang
 has-props
 
 
@@ -228,5 +228,5 @@
 
 
 
-2198
+2136
 
--- a/app/views/admin/.svn/text-base/projects.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/admin/.svn/text-base/projects.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -19,7 +19,6 @@
 <table class="list">
   <thead><tr>
 	<th><%=l(:label_project)%></th>
-	<th><%=l(:field_description)%></th>
 	<th><%=l(:field_is_public)%></th>
 	<th><%=l(:field_created_on)%></th>
   <th></th>
@@ -27,8 +26,7 @@
   <tbody>
 <% project_tree(@projects) do |project, level| %>
   <tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
-	<td class="name"><%= link_to_project(project, :action => 'settings') %></td>
-	<td><%= textilizable project.short_description, :project => project %></td>
+	<td class="name"><span><%= link_to_project(project, {:action => 'settings'}, :title => project.short_description) %></span></td>
 	<td align="center"><%= checked_image project.is_public? %></td>
 	<td align="center"><%= format_date(project.created_on) %></td>
   <td class="buttons">
--- a/app/views/admin/projects.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/admin/projects.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -19,7 +19,6 @@
 <table class="list">
   <thead><tr>
 	<th><%=l(:label_project)%></th>
-	<th><%=l(:field_description)%></th>
 	<th><%=l(:field_is_public)%></th>
 	<th><%=l(:field_created_on)%></th>
   <th></th>
@@ -27,8 +26,7 @@
   <tbody>
 <% project_tree(@projects) do |project, level| %>
   <tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
-	<td class="name"><%= link_to_project(project, :action => 'settings') %></td>
-	<td><%= textilizable project.short_description, :project => project %></td>
+	<td class="name"><span><%= link_to_project(project, {:action => 'settings'}, :title => project.short_description) %></span></td>
 	<td align="center"><%= checked_image project.is_public? %></td>
 	<td align="center"><%= format_date(project.created_on) %></td>
   <td class="buttons">
--- a/app/views/attachments/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/attachments/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/attachments
 http://redmine.rubyforge.org/svn
 
--- a/app/views/auth_sources/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/auth_sources/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/auth_sources
 http://redmine.rubyforge.org/svn
 
--- a/app/views/auto_completes/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/auto_completes/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/auto_completes
 http://redmine.rubyforge.org/svn
 
--- a/app/views/boards/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/boards/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/boards
 http://redmine.rubyforge.org/svn
 
--- a/app/views/calendars/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/calendars/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4045/trunk/app/views/calendars
+/svn/!svn/ver/4238/trunk/app/views/calendars
 END
 show.html.erb
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/4045/trunk/app/views/calendars/show.html.erb
+/svn/!svn/ver/4238/trunk/app/views/calendars/show.html.erb
 END
--- a/app/views/calendars/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/calendars/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/calendars
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-26T16:37:21.560510Z
-4045
-edavis10
+2010-10-07T15:26:53.500793Z
+4238
+winterheart
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-24T12:48:28.963902Z
-a8b2469aff09bc51d836f40717281a44
-2010-08-26T16:37:21.560510Z
-4045
-edavis10
+2010-11-19T13:04:49.472856Z
+d47ece5d0e0ff017f3f1b5ce4b776ba0
+2010-10-07T15:26:53.500793Z
+4238
+winterheart
 has-props
 
 
@@ -58,5 +58,5 @@
 
 
 
-1880
+1946
 
--- a/app/views/calendars/.svn/text-base/show.html.erb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/calendars/.svn/text-base/show.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -26,7 +26,8 @@
                    }, :class => 'icon icon-checked' %>
                    
 <%= link_to_remote l(:button_clear),
-                   { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, 
+                   { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, 
+                     :method => :put,
                      :update => "content",
                    }, :class => 'icon icon-reload' if @query.new_record? %>
 </p>
@@ -37,9 +38,9 @@
 <%= render :partial => 'common/calendar', :locals => {:calendar => @calendar} %>
 
 <p class="legend cal">
-	<span class="starting"><%= l(:text_tip_task_begin_day) %></span>
-	<span class="ending"><%= l(:text_tip_task_end_day) %></span>
-	<span class="starting ending"><%= l(:text_tip_task_begin_end_day) %></span>
+	<span class="starting"><%= l(:text_tip_issue_begin_day) %></span>
+	<span class="ending"><%= l(:text_tip_issue_end_day) %></span>
+	<span class="starting ending"><%= l(:text_tip_issue_begin_end_day) %></span>
 </p>
 <% end %>
 
--- a/app/views/calendars/show.html.erb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/calendars/show.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -26,7 +26,8 @@
                    }, :class => 'icon icon-checked' %>
                    
 <%= link_to_remote l(:button_clear),
-                   { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, 
+                   { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, 
+                     :method => :put,
                      :update => "content",
                    }, :class => 'icon icon-reload' if @query.new_record? %>
 </p>
@@ -37,9 +38,9 @@
 <%= render :partial => 'common/calendar', :locals => {:calendar => @calendar} %>
 
 <p class="legend cal">
-	<span class="starting"><%= l(:text_tip_task_begin_day) %></span>
-	<span class="ending"><%= l(:text_tip_task_end_day) %></span>
-	<span class="starting ending"><%= l(:text_tip_task_begin_end_day) %></span>
+	<span class="starting"><%= l(:text_tip_issue_begin_day) %></span>
+	<span class="ending"><%= l(:text_tip_issue_end_day) %></span>
+	<span class="starting ending"><%= l(:text_tip_issue_begin_end_day) %></span>
 </p>
 <% end %>
 
--- a/app/views/common/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/common/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 41
-/svn/!svn/ver/3790/trunk/app/views/common
+/svn/!svn/ver/4286/trunk/app/views/common
 END
 _file.rhtml
 K 25
@@ -15,24 +15,18 @@
 V 56
 /svn/!svn/ver/2768/trunk/app/views/common/feed.atom.rxml
 END
+error.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/4286/trunk/app/views/common/error.html.erb
+END
 _preview.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 56
 /svn/!svn/ver/1699/trunk/app/views/common/_preview.rhtml
 END
-403.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/1032/trunk/app/views/common/403.rhtml
-END
-404.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/1032/trunk/app/views/common/404.rhtml
-END
 _diff.rhtml
 K 25
 svn:wc:ra_dav:version-url
--- a/app/views/common/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/common/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/common
 http://redmine.rubyforge.org/svn
 
 
 
-2010-06-19T22:52:15.523619Z
-3790
-edavis10
+2010-10-23T11:07:04.019894Z
+4286
+jplang
 
 
 
@@ -94,6 +94,40 @@
 
 1410
 
+error.html.erb
+file
+
+
+
+
+2010-11-19T13:04:49.456921Z
+882dace2c9ea129616067a2052cebef4
+2010-10-23T11:07:04.019894Z
+4286
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+156
+
 _preview.rhtml
 file
 
@@ -128,74 +162,6 @@
 
 160
 
-403.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.523788Z
-6d702bd53ba3e3fb3b1849b20ea05932
-2008-01-02T22:41:53.166620Z
-1032
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-130
-
-404.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.523788Z
-c6f0413a62e887c7638111e882e33d20
-2008-01-02T22:41:53.166620Z
-1032
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-130
-
 _diff.rhtml
 file
 
--- a/app/views/common/.svn/prop-base/403.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/app/views/common/.svn/prop-base/404.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/app/views/common/.svn/text-base/403.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<h2>403</h2>
-
-<p><%= l(:notice_not_authorized) %></p>
-<p><a href="javascript:history.back()">Back</a></p>
-
-<% html_title '403' %>
--- a/app/views/common/.svn/text-base/404.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<h2>404</h2>
-
-<p><%= l(:notice_file_not_found) %></p>
-<p><a href="javascript:history.back()">Back</a></p>
-
-<% html_title '404' %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/common/.svn/text-base/error.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,6 @@
+<h2><%=h @status %></h2>
+
+<p id="errorExplanation"><%=h @message %></p>
+<p><a href="javascript:history.back()">Back</a></p>
+
+<% html_title @status %>
--- a/app/views/common/403.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<h2>403</h2>
-
-<p><%= l(:notice_not_authorized) %></p>
-<p><a href="javascript:history.back()">Back</a></p>
-
-<% html_title '403' %>
--- a/app/views/common/404.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<h2>404</h2>
-
-<p><%= l(:notice_file_not_found) %></p>
-<p><a href="javascript:history.back()">Back</a></p>
-
-<% html_title '404' %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/common/error.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,6 @@
+<h2><%=h @status %></h2>
+
+<p id="errorExplanation"><%=h @message %></p>
+<p><a href="javascript:history.back()">Back</a></p>
+
+<% html_title @status %>
--- a/app/views/context_menus/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/context_menus/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/4059/trunk/app/views/context_menus
+/svn/!svn/ver/4409/trunk/app/views/context_menus
 END
 issues.html.erb
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/4059/trunk/app/views/context_menus/issues.html.erb
+/svn/!svn/ver/4409/trunk/app/views/context_menus/issues.html.erb
 END
--- a/app/views/context_menus/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/context_menus/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/context_menus
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-03T21:43:07.906158Z
-4059
-jbbarth
+2010-11-16T19:49:08.085592Z
+4409
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-24T12:48:26.291820Z
-8cf639a9f676637f0825ccf06013495c
-2010-09-03T21:43:07.906158Z
-4059
-jbbarth
+2010-11-19T13:04:47.016806Z
+1a873e0d09f011b6b274e955460d35a1
+2010-11-16T19:49:08.085592Z
+4409
+jplang
 has-props
 
 
@@ -58,5 +58,5 @@
 
 
 
-6709
+6698
 
--- a/app/views/context_menus/.svn/text-base/issues.html.erb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/context_menus/.svn/text-base/issues.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -9,7 +9,7 @@
 	        :class => 'icon-edit', :disabled => !@can[:edit] %></li>
 <% end %>
 
-  <% unless @allowed_statuses.empty? %>
+  <% if @allowed_statuses.present? %>
 	<li class="folder">			
 		<a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a>
 		<ul>
@@ -33,7 +33,6 @@
 	</li>
 	<% end %>
 
-  <% if @projects.size == 1 %>
 	<li class="folder">			
 		<a href="#" class="submenu"><%= l(:field_priority) %></a>
 		<ul>
@@ -43,8 +42,8 @@
 		<% end -%>
 		</ul>
 	</li>
-  <% end %>
 
+  <% #TODO: allow editing versions when multiple projects %>
 	<% unless @project.nil? || @project.shared_versions.open.empty? -%>
 	<li class="folder">			
 		<a href="#" class="submenu"><%= l(:field_fixed_version) %></a>
@@ -58,7 +57,7 @@
 		</ul>
 	</li>
 	<% end %>
-	<% unless @assignables.nil? || @assignables.empty? -%>
+	<% if @assignables.present? -%>
 	<li class="folder">			
 		<a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
 		<ul>
@@ -85,7 +84,7 @@
 	</li>
 	<% end -%>
 
-  <% if Issue.use_field_for_done_ratio? && @projects.size == 1 %>
+  <% if Issue.use_field_for_done_ratio? %>
 	<li class="folder">
 		<a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
 		<ul>
@@ -99,7 +98,7 @@
 
 <% if !@issue.nil? %>
 	<% if @can[:log_time] -%>
-	<li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue},
+	<li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue},
 	        :class => 'icon-time-add' %></li>
 	<% end %>
 	<% if User.current.logged? %>
@@ -115,7 +114,7 @@
 	                        :class => 'icon-copy', :disabled => !@can[:move]  %></li>
   <li><%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)),
 	                        :class => 'icon-move', :disabled => !@can[:move]  %></li>
-  <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id)},
+  <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id), :back_url => @back},
                             :method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %></li>
 
   <%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %>
--- a/app/views/context_menus/issues.html.erb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/context_menus/issues.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -9,7 +9,7 @@
 	        :class => 'icon-edit', :disabled => !@can[:edit] %></li>
 <% end %>
 
-  <% unless @allowed_statuses.empty? %>
+  <% if @allowed_statuses.present? %>
 	<li class="folder">			
 		<a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a>
 		<ul>
@@ -33,7 +33,6 @@
 	</li>
 	<% end %>
 
-  <% if @projects.size == 1 %>
 	<li class="folder">			
 		<a href="#" class="submenu"><%= l(:field_priority) %></a>
 		<ul>
@@ -43,8 +42,8 @@
 		<% end -%>
 		</ul>
 	</li>
-  <% end %>
 
+  <% #TODO: allow editing versions when multiple projects %>
 	<% unless @project.nil? || @project.shared_versions.open.empty? -%>
 	<li class="folder">			
 		<a href="#" class="submenu"><%= l(:field_fixed_version) %></a>
@@ -58,7 +57,7 @@
 		</ul>
 	</li>
 	<% end %>
-	<% unless @assignables.nil? || @assignables.empty? -%>
+	<% if @assignables.present? -%>
 	<li class="folder">			
 		<a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
 		<ul>
@@ -85,7 +84,7 @@
 	</li>
 	<% end -%>
 
-  <% if Issue.use_field_for_done_ratio? && @projects.size == 1 %>
+  <% if Issue.use_field_for_done_ratio? %>
 	<li class="folder">
 		<a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
 		<ul>
@@ -99,7 +98,7 @@
 
 <% if !@issue.nil? %>
 	<% if @can[:log_time] -%>
-	<li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue},
+	<li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue},
 	        :class => 'icon-time-add' %></li>
 	<% end %>
 	<% if User.current.logged? %>
@@ -115,7 +114,7 @@
 	                        :class => 'icon-copy', :disabled => !@can[:move]  %></li>
   <li><%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)),
 	                        :class => 'icon-move', :disabled => !@can[:move]  %></li>
-  <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id)},
+  <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id), :back_url => @back},
                             :method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %></li>
 
   <%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %>
--- a/app/views/custom_fields/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/custom_fields/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/3672/trunk/app/views/custom_fields
+/svn/!svn/ver/4382/trunk/app/views/custom_fields
 END
 _form.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 60
-/svn/!svn/ver/3510/trunk/app/views/custom_fields/_form.rhtml
+/svn/!svn/ver/4382/trunk/app/views/custom_fields/_form.rhtml
 END
 edit.rhtml
 K 25
--- a/app/views/custom_fields/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/custom_fields/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/custom_fields
 http://redmine.rubyforge.org/svn
 
 
 
-2010-04-16T15:33:49.924704Z
-3672
-edavis10
+2010-11-07T14:15:01.891476Z
+4382
+jplang
 
 
 
@@ -32,10 +32,10 @@
 
 
 
-2010-09-23T14:37:44.527783Z
-4a422eb0f307906a5015134deef6e66a
-2010-02-28T10:55:24.417498Z
-3510
+2010-11-19T13:04:48.192856Z
+7c1accc3dd22bd872e2e9b6a7f02a5c2
+2010-11-07T14:15:01.891476Z
+4382
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-3882
+3960
 
 edit.rhtml
 file
--- a/app/views/custom_fields/.svn/text-base/_form.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/custom_fields/.svn/text-base/_form.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -86,10 +86,12 @@
     
 <% when "UserCustomField" %>
     <p><%= f.check_box :is_required %></p>
+    <p><%= f.check_box :visible %></p>
     <p><%= f.check_box :editable %></p>
 
 <% when "ProjectCustomField" %>
     <p><%= f.check_box :is_required %></p>
+    <p><%= f.check_box :visible %></p>
     <p><%= f.check_box :searchable %></p>
 
 <% when "TimeEntryCustomField" %>
--- a/app/views/custom_fields/_form.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/custom_fields/_form.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -86,10 +86,12 @@
     
 <% when "UserCustomField" %>
     <p><%= f.check_box :is_required %></p>
+    <p><%= f.check_box :visible %></p>
     <p><%= f.check_box :editable %></p>
 
 <% when "ProjectCustomField" %>
     <p><%= f.check_box :is_required %></p>
+    <p><%= f.check_box :visible %></p>
     <p><%= f.check_box :searchable %></p>
 
 <% when "TimeEntryCustomField" %>
--- a/app/views/documents/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/documents/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/documents
 http://redmine.rubyforge.org/svn
 
--- a/app/views/enumerations/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/enumerations/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/enumerations
 http://redmine.rubyforge.org/svn
 
--- a/app/views/files/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/files/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 40
-/svn/!svn/ver/4085/trunk/app/views/files
+/svn/!svn/ver/4268/trunk/app/views/files
 END
 index.html.erb
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/4085/trunk/app/views/files/index.html.erb
+/svn/!svn/ver/4268/trunk/app/views/files/index.html.erb
 END
 new.html.erb
 K 25
--- a/app/views/files/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/files/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/files
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-14T16:24:07.840869Z
-4085
-edavis10
+2010-10-22T14:45:02.987126Z
+4268
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-24T12:48:27.722352Z
-178f4ae5a5527ba5ab517e9e5685d670
-2010-09-14T16:24:07.840869Z
-4085
-edavis10
+2010-11-19T13:04:49.392852Z
+05986f09d13424caeb68601c7c9ff16b
+2010-10-22T14:45:02.987126Z
+4268
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-1838
+1878
 
 new.html.erb
 file
--- a/app/views/files/.svn/text-base/index.html.erb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/files/.svn/text-base/index.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 <div class="contextual">
-<%= link_to_if_authorized l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add' %>
+<%= link_to(l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add') if User.current.allowed_to?(:manage_files, @project) %>
 </div>
 
 <h2><%=l(:label_attachment_plural)%></h2>
--- a/app/views/files/index.html.erb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/files/index.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 <div class="contextual">
-<%= link_to_if_authorized l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add' %>
+<%= link_to(l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add') if User.current.allowed_to?(:manage_files, @project) %>
 </div>
 
 <h2><%=l(:label_attachment_plural)%></h2>
--- a/app/views/gantts/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/gantts/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
 V 41
-/svn/!svn/ver/4074/trunk/app/views/gantts
+/svn/!svn/ver/4283/trunk/app/views/gantts
 END
 show.html.erb
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/4074/trunk/app/views/gantts/show.html.erb
+/svn/!svn/ver/4283/trunk/app/views/gantts/show.html.erb
 END
--- a/app/views/gantts/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/gantts/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/gantts
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-10T03:09:18.467829Z
-4074
-edavis10
+2010-10-23T09:08:55.877887Z
+4283
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-24T12:48:28.971835Z
-821f1ef595aacb4d32e9a449742c4d67
-2010-09-10T03:09:18.467829Z
-4074
-edavis10
+2010-11-19T13:04:49.480864Z
+e0ed1c5fd05cd8c8f3f930c443564ebc
+2010-10-23T09:08:55.877887Z
+4283
+jplang
 has-props
 
 
@@ -58,5 +58,5 @@
 
 
 
-6152
+6213
 
--- a/app/views/gantts/.svn/text-base/show.html.erb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/gantts/.svn/text-base/show.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -10,7 +10,7 @@
   </div>
 </fieldset>
 
-<p style="float:right;">
+<p class="contextual">
   <%= gantt_zoom_link(@gantt, :in) %>
   <%= gantt_zoom_link(@gantt, :out) %>
 </p>
@@ -29,7 +29,8 @@
                    }, :class => 'icon icon-checked' %>
                    
 <%= link_to_remote l(:button_clear),
-                   { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, 
+                   { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, 
+                   	 :method => :put,
                      :update => "content",
                    }, :class => 'icon icon-reload' if @query.new_record? %>
 </p>
--- a/app/views/gantts/show.html.erb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/gantts/show.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -10,7 +10,7 @@
   </div>
 </fieldset>
 
-<p style="float:right;">
+<p class="contextual">
   <%= gantt_zoom_link(@gantt, :in) %>
   <%= gantt_zoom_link(@gantt, :out) %>
 </p>
@@ -29,7 +29,8 @@
                    }, :class => 'icon icon-checked' %>
                    
 <%= link_to_remote l(:button_clear),
-                   { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, 
+                   { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, 
+                   	 :method => :put,
                      :update => "content",
                    }, :class => 'icon icon-reload' if @query.new_record? %>
 </p>
--- a/app/views/groups/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/groups/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 41
-/svn/!svn/ver/3734/trunk/app/views/groups
+/svn/!svn/ver/4312/trunk/app/views/groups
 END
 autocomplete_for_user.html.erb
 K 25
@@ -43,7 +43,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/3734/trunk/app/views/groups/_users.html.erb
+/svn/!svn/ver/4312/trunk/app/views/groups/_users.html.erb
 END
 show.html.erb
 K 25
--- a/app/views/groups/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/groups/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/groups
 http://redmine.rubyforge.org/svn
 
 
 
-2010-05-09T11:19:15.980195Z
-3734
-jplang
+2010-10-30T16:47:33.260585Z
+4312
+jbbarth
 
 
 
@@ -236,11 +236,11 @@
 
 
 
-2010-09-23T14:37:44.547775Z
-eff82d54d4b9afef8e057bce83a79055
-2010-05-09T11:19:15.980195Z
-3734
-jplang
+2010-11-19T13:04:49.444940Z
+7738dc0db4c4ad48e82613829c1e991a
+2010-10-30T16:47:33.260585Z
+4312
+jbbarth
 has-props
 
 
@@ -262,7 +262,7 @@
 
 
 
-1572
+1625
 
 show.html.erb
 file
--- a/app/views/groups/.svn/text-base/_users.html.erb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/groups/.svn/text-base/_users.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -29,7 +29,7 @@
   <% remote_form_for(:group, @group, :url => {:controller => 'groups', :action => 'add_users', :id => @group}, :method => :post) do |f| %>
     <fieldset><legend><%=l(:label_user_new)%></legend>
     
-		<p><%= text_field_tag 'user_search', nil %></p>
+		<p><%= label_tag "user_search", l(:label_user_search) %><%= text_field_tag 'user_search', nil %></p>
 		<%= observe_field(:user_search,
                  :frequency => 0.5,
                  :update => :users,
--- a/app/views/groups/_users.html.erb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/groups/_users.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -29,7 +29,7 @@
   <% remote_form_for(:group, @group, :url => {:controller => 'groups', :action => 'add_users', :id => @group}, :method => :post) do |f| %>
     <fieldset><legend><%=l(:label_user_new)%></legend>
     
-		<p><%= text_field_tag 'user_search', nil %></p>
+		<p><%= label_tag "user_search", l(:label_user_search) %><%= text_field_tag 'user_search', nil %></p>
 		<%= observe_field(:user_search,
                  :frequency => 0.5,
                  :update => :users,
--- a/app/views/issue_categories/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issue_categories/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/3549/trunk/app/views/issue_categories
+/svn/!svn/ver/4385/trunk/app/views/issue_categories
 END
 new.html.erb
 K 25
@@ -12,8 +12,8 @@
 _form.rhtml
 K 25
 svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/577/trunk/app/views/issue_categories/_form.rhtml
+V 63
+/svn/!svn/ver/4385/trunk/app/views/issue_categories/_form.rhtml
 END
 edit.rhtml
 K 25
--- a/app/views/issue_categories/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issue_categories/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/issue_categories
 http://redmine.rubyforge.org/svn
 
 
 
-2010-03-06T18:43:00.594668Z
-3549
+2010-11-07T14:56:12.614499Z
+4385
 jplang
 
 
@@ -66,10 +66,10 @@
 
 
 
-2010-09-23T14:37:44.551784Z
-18eb89247454858a8ee0d9ffe9f0e8f6
-2007-06-29T17:21:37.739022Z
-577
+2010-11-19T13:04:49.476971Z
+e0d28729320423a7b8fcb6309b58de9a
+2010-11-07T14:56:12.614499Z
+4385
 jplang
 has-props
 
@@ -92,7 +92,7 @@
 
 
 
-235
+240
 
 edit.rhtml
 file
--- a/app/views/issue_categories/.svn/text-base/_form.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issue_categories/.svn/text-base/_form.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -2,5 +2,5 @@
 
 <div class="box">
 <p><%= f.text_field :name, :size => 30, :required => true %></p>
-<p><%= f.select :assigned_to_id, @project.users.collect{|u| [u.name, u.id]}, :include_blank => true %></p>
+<p><%= f.select :assigned_to_id, @project.users.sort.collect{|u| [u.name, u.id]}, :include_blank => true %></p>
 </div>
--- a/app/views/issue_categories/_form.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issue_categories/_form.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -2,5 +2,5 @@
 
 <div class="box">
 <p><%= f.text_field :name, :size => 30, :required => true %></p>
-<p><%= f.select :assigned_to_id, @project.users.collect{|u| [u.name, u.id]}, :include_blank => true %></p>
+<p><%= f.select :assigned_to_id, @project.users.sort.collect{|u| [u.name, u.id]}, :include_blank => true %></p>
 </div>
--- a/app/views/issue_moves/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issue_moves/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/3936/trunk/app/views/issue_moves
+/svn/!svn/ver/4292/trunk/app/views/issue_moves
 END
 new.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 56
-/svn/!svn/ver/3936/trunk/app/views/issue_moves/new.rhtml
+/svn/!svn/ver/4292/trunk/app/views/issue_moves/new.rhtml
 END
--- a/app/views/issue_moves/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issue_moves/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/issue_moves
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-11T14:42:10.119704Z
-3936
+2010-10-25T18:44:46.868009Z
+4292
 edavis10
 
 
@@ -32,10 +32,10 @@
 
 
 
-2010-09-23T14:37:44.555783Z
-75404bb56747fe4f58e979b3452af027
-2010-08-11T14:42:10.119704Z
-3936
+2010-11-19T13:04:48.788846Z
+1ad6c5f00ec9a5a7509125da416b0b07
+2010-10-25T18:44:46.868009Z
+4292
 edavis10
 has-props
 
@@ -58,5 +58,5 @@
 
 
 
-2304
+2701
 
--- a/app/views/issue_moves/.svn/text-base/new.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issue_moves/.svn/text-base/new.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -34,6 +34,11 @@
 </p>
 
 <p>
+  <label><%= l(:field_priority) %></label>
+  <%= select_tag('priority_id', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(IssuePriority.all, :id, :name)) %>
+</p>
+
+<p>
   <label><%= l(:field_start_date) %></label>
   <%= text_field_tag 'start_date', '', :size => 10 %><%= calendar_for('start_date') %>
 </p>
@@ -43,6 +48,11 @@
   <%= text_field_tag 'due_date', '', :size => 10 %><%= calendar_for('due_date') %>
 </p>
 
+<fieldset><legend><%= l(:field_notes) %></legend>
+<%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit' %>
+<%= wikitoolbar_for 'notes' %>
+</fieldset>
+
 <%= call_hook(:view_issues_move_bottom, :issues => @issues, :target_project => @target_project, :copy => !!@copy) %>
 </div>
 
--- a/app/views/issue_moves/new.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issue_moves/new.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -34,6 +34,11 @@
 </p>
 
 <p>
+  <label><%= l(:field_priority) %></label>
+  <%= select_tag('priority_id', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(IssuePriority.all, :id, :name)) %>
+</p>
+
+<p>
   <label><%= l(:field_start_date) %></label>
   <%= text_field_tag 'start_date', '', :size => 10 %><%= calendar_for('start_date') %>
 </p>
@@ -43,6 +48,11 @@
   <%= text_field_tag 'due_date', '', :size => 10 %><%= calendar_for('due_date') %>
 </p>
 
+<fieldset><legend><%= l(:field_notes) %></legend>
+<%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit' %>
+<%= wikitoolbar_for 'notes' %>
+</fieldset>
+
 <%= call_hook(:view_issues_move_bottom, :issues => @issues, :target_project => @target_project, :copy => !!@copy) %>
 </div>
 
--- a/app/views/issue_relations/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issue_relations/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/issue_relations
 http://redmine.rubyforge.org/svn
 
--- a/app/views/issue_statuses/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issue_statuses/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/issue_statuses
 http://redmine.rubyforge.org/svn
 
--- a/app/views/issues/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 41
-/svn/!svn/ver/4165/trunk/app/views/issues
+/svn/!svn/ver/4311/trunk/app/views/issues
 END
 _relations.rhtml
 K 25
@@ -9,29 +9,29 @@
 V 58
 /svn/!svn/ver/4065/trunk/app/views/issues/_relations.rhtml
 END
-_action_menu.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4105/trunk/app/views/issues/_action_menu.rhtml
-END
 _history.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 56
 /svn/!svn/ver/4062/trunk/app/views/issues/_history.rhtml
 END
-_form.rhtml
+_action_menu.rhtml
 K 25
 svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/4165/trunk/app/views/issues/_form.rhtml
+V 60
+/svn/!svn/ver/4258/trunk/app/views/issues/_action_menu.rhtml
 END
 bulk_edit.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/4037/trunk/app/views/issues/bulk_edit.rhtml
+/svn/!svn/ver/4242/trunk/app/views/issues/bulk_edit.rhtml
+END
+_form.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/4311/trunk/app/views/issues/_form.rhtml
 END
 _form_update.rhtml
 K 25
@@ -73,7 +73,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/4014/trunk/app/views/issues/show.rhtml
+/svn/!svn/ver/4264/trunk/app/views/issues/show.rhtml
 END
 _form_custom_fields.rhtml
 K 25
@@ -81,18 +81,18 @@
 V 67
 /svn/!svn/ver/2827/trunk/app/views/issues/_form_custom_fields.rhtml
 END
+_list_simple.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/3924/trunk/app/views/issues/_list_simple.rhtml
+END
 _changesets.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 59
 /svn/!svn/ver/3898/trunk/app/views/issues/_changesets.rhtml
 END
-_list_simple.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/3924/trunk/app/views/issues/_list_simple.rhtml
-END
 _edit.rhtml
 K 25
 svn:wc:ra_dav:version-url
@@ -121,5 +121,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/3946/trunk/app/views/issues/new.rhtml
+/svn/!svn/ver/4311/trunk/app/views/issues/new.rhtml
 END
--- a/app/views/issues/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/issues
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-20T18:50:09.519311Z
-4165
-edavis10
+2010-10-30T16:15:31.867344Z
+4311
+jbbarth
 
 
 
@@ -60,6 +60,40 @@
 
 1816
 
+_action_menu.rhtml
+file
+
+
+
+
+2010-11-19T13:04:50.824922Z
+74c6e939ebb113c49a367fff0f463f63
+2010-10-15T23:11:05.712143Z
+4258
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1285
+
 _history.rhtml
 file
 
@@ -94,17 +128,18 @@
 
 859
 
-_action_menu.rhtml
+_form.rhtml
 file
 
 
 
 
-2010-09-24T12:48:29.596042Z
-d39cbd8da926ba1c0912674a25e0bbae
-2010-09-20T02:55:26.436604Z
-4105
-edavis10
+2010-11-19T13:04:50.824922Z
+7c3d2a41291eabbd1c7e28139be69e49
+2010-10-30T16:15:31.867344Z
+4311
+jbbarth
+has-props
 
 
 
@@ -125,8 +160,7 @@
 
 
 
-
-1228
+2033
 
 bulk_edit.rhtml
 file
@@ -134,11 +168,11 @@
 
 
 
-2010-09-23T14:37:44.571741Z
-2118a1220c381352190040dc4b80e7d4
-2010-08-24T15:27:12.793586Z
-4037
-edavis10
+2010-11-19T13:04:50.824922Z
+b60c0aee0477249fc72d3206e30a8a07
+2010-10-08T03:09:51.863032Z
+4242
+jbbarth
 has-props
 
 
@@ -160,41 +194,7 @@
 
 
 
-3344
-
-_form.rhtml
-file
-
-
-
-
-2010-09-24T12:48:29.596042Z
-c95e7aec098a5197f699f7ff5d9cfea5
-2010-09-20T18:50:09.519311Z
-4165
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2034
+3438
 
 _form_update.rhtml
 file
@@ -406,11 +406,11 @@
 
 
 
-2010-09-23T14:37:44.575742Z
-81fcfef3bb688e30577916647e05f02a
-2010-08-22T19:12:21.015911Z
-4014
-edavis10
+2010-11-19T13:04:50.824922Z
+1f2adc49d35b7299cebfc9aff8152908
+2010-10-19T19:26:07.436051Z
+4264
+jplang
 has-props
 
 
@@ -432,7 +432,7 @@
 
 
 
-5394
+5399
 
 _form_custom_fields.rhtml
 file
@@ -468,6 +468,40 @@
 
 353
 
+_changesets.rhtml
+file
+
+
+
+
+2010-09-23T14:37:44.571741Z
+4c03735a361a24cc60a70975502bace7
+2010-07-29T15:48:53.812065Z
+3898
+winterheart
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+509
+
 _list_simple.rhtml
 file
 
@@ -502,40 +536,6 @@
 
 989
 
-_changesets.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.571741Z
-4c03735a361a24cc60a70975502bace7
-2010-07-29T15:48:53.812065Z
-3898
-winterheart
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-509
-
 _edit.rhtml
 file
 
@@ -678,11 +678,11 @@
 
 
 
-2010-09-23T14:37:44.575742Z
-c1a3c605c3eed0e46487a4455acefad7
-2010-08-18T15:01:35.032314Z
-3946
-edavis10
+2010-11-19T13:04:50.824922Z
+9889d4cce0dfd6d224e85fc1f489c623
+2010-10-30T16:15:31.867344Z
+4311
+jbbarth
 has-props
 
 
@@ -704,5 +704,5 @@
 
 
 
-1118
+1154
 
--- a/app/views/issues/.svn/text-base/_action_menu.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/.svn/text-base/_action_menu.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,10 +1,10 @@
 <div class="contextual">
 <%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %>
-<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, :class => 'icon icon-time-add' %>
+<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add' %>
 <% replace_watcher ||= 'watcher' %>
 <%= watcher_tag(@issue, User.current, {:id => replace_watcher, :replace => ['watcher','watcher2']}) %>
 <%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %>
-<%= link_to_if_authorized l(:button_copy), new_issue_move_path(:id => @issue, :copy_options => {:copy => 't'}), :class => 'icon icon-copy' %>
-<%= link_to_if_authorized l(:button_move), new_issue_move_path(:id => @issue), :class => 'icon icon-move' %>
+<%= link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy' %>
+<%= link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move' %>
 <%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %>
 </div>
--- a/app/views/issues/.svn/text-base/_form.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/.svn/text-base/_form.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -8,8 +8,8 @@
 
 <p><%= f.text_field :subject, :size => 80, :required => true %></p>
                                      
-<% unless (@issue.new_record? && @issue.parent_issue_id.nil?) || !User.current.allowed_to?(:manage_subtasks, @project) %>
-<p><%= f.text_field :parent_issue_id, :size => 10 %></p>
+<% if User.current.allowed_to?(:manage_subtasks, @project) %>
+<p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10 %></p>
 <div id="parent_issue_candidates" class="autocomplete"></div>
 <%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
 <% end %>
@@ -26,11 +26,11 @@
 </div>
 
 <% if @issue.new_record? %>
-<p><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p>
+<p id="attachments_form"><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p>
 <% end %>
 
 <% if @issue.new_record? && User.current.allowed_to?(:add_issue_watchers, @project) -%>
-<p><label><%= l(:label_issue_watchers) %></label>
+<p id="watchers_form"><label><%= l(:label_issue_watchers) %></label>
 <% @issue.project.users.sort.each do |user| -%>
 <label class="floating"><%= check_box_tag 'issue[watcher_user_ids][]', user.id, @issue.watched_by?(user) %> <%=h user %></label>
 <% end -%>
--- a/app/views/issues/.svn/text-base/bulk_edit.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/.svn/text-base/bulk_edit.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -11,7 +11,7 @@
 <div class="splitcontentleft">
 <p>
 	<label><%= l(:field_tracker) %></label>
-	<%= select_tag('issue[tracker_id]', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@project.trackers, :id, :name)) %>
+	<%= select_tag('issue[tracker_id]', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@trackers, :id, :name)) %>
 </p>
 <% if @available_statuses.any? %>
 <p>
@@ -27,20 +27,25 @@
 	<label><%= l(:field_assigned_to) %></label> 
 	<%= select_tag('issue[assigned_to_id]', content_tag('option', l(:label_no_change_option), :value => '') +
                                  content_tag('option', l(:label_nobody), :value => 'none') +
-                                 options_from_collection_for_select(@project.assignable_users, :id, :name)) %>
+                                 options_from_collection_for_select(@assignables, :id, :name)) %>
 </p>
+<% if @project %>
 <p>
 	<label><%= l(:field_category) %></label> 
 	<%= select_tag('issue[category_id]', content_tag('option', l(:label_no_change_option), :value => '') +
                                 content_tag('option', l(:label_none), :value => 'none') +
                                 options_from_collection_for_select(@project.issue_categories, :id, :name)) %>
 </p>
+<% end %>
+<% #TODO: allow editing versions when multiple projects %>
+<% if @project %>
 <p>
 	<label><%= l(:field_fixed_version) %></label> 
 	<%= select_tag('issue[fixed_version_id]', content_tag('option', l(:label_no_change_option), :value => '') +
                                    content_tag('option', l(:label_none), :value => 'none') +
                                    version_options_for_select(@project.shared_versions.open)) %>
 </p>
+<% end %>
 
 <% @custom_fields.each do |custom_field| %>
 	<p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('issue', custom_field) %></p>
--- a/app/views/issues/.svn/text-base/new.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/.svn/text-base/new.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 <h2><%=l(:label_issue_new)%></h2>
 
 <% labelled_tabular_form_for :issue, @issue, :url => {:controller => 'issues', :action => 'create', :project_id => @project},
-                             :html => {:multipart => true, :id => 'issue-form'} do |f| %>
+                             :html => {:multipart => true, :id => 'issue-form', :class => 'tabular new-issue-form'} do |f| %>
     <%= error_messages_for 'issue' %>
     <div class="box">
     <%= render :partial => 'issues/form', :locals => {:f => f} %>
--- a/app/views/issues/.svn/text-base/show.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/.svn/text-base/show.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -32,7 +32,7 @@
     <th class="category"><%=l(:field_category)%>:</th><td class="category"><%=h @issue.category ? @issue.category.name : "-" %></td>
     <% if User.current.allowed_to?(:view_time_entries, @project) %>
     <th class="spent-time"><%=l(:label_spent_time)%>:</th>
-    <td class="spent-time"><%= @issue.spent_hours > 0 ? (link_to l_hours(@issue.spent_hours), {:controller => 'timelog', :action => 'details', :project_id => @project, :issue_id => @issue}) : "-" %></td>
+    <td class="spent-time"><%= @issue.spent_hours > 0 ? (link_to l_hours(@issue.spent_hours), {:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue}) : "-" %></td>
     <% end %>
 </tr>
 <tr>
@@ -44,18 +44,19 @@
 <%= render_custom_fields_rows(@issue) %>
 <%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %>
 </table>
+
+<% if @issue.description? || @issue.attachments.any? -%>
 <hr />
-
 <div class="contextual">
-<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment') unless @issue.description.blank? %>
+<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment') if @issue.description? %>
 </div>
                               
-<p><strong><%=l(:field_description)%></strong></p>
 <div class="wiki">
 <%= textilizable @issue, :description, :attachments => @issue.attachments %>
 </div>
 
 <%= link_to_attachments @issue %>
+<% end -%>
 
 <%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %>
 
--- a/app/views/issues/_action_menu.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/_action_menu.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,10 +1,10 @@
 <div class="contextual">
 <%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %>
-<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, :class => 'icon icon-time-add' %>
+<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add' %>
 <% replace_watcher ||= 'watcher' %>
 <%= watcher_tag(@issue, User.current, {:id => replace_watcher, :replace => ['watcher','watcher2']}) %>
 <%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %>
-<%= link_to_if_authorized l(:button_copy), new_issue_move_path(:id => @issue, :copy_options => {:copy => 't'}), :class => 'icon icon-copy' %>
-<%= link_to_if_authorized l(:button_move), new_issue_move_path(:id => @issue), :class => 'icon icon-move' %>
+<%= link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy' %>
+<%= link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move' %>
 <%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %>
 </div>
--- a/app/views/issues/_form.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/_form.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -8,8 +8,8 @@
 
 <p><%= f.text_field :subject, :size => 80, :required => true %></p>
                                      
-<% unless (@issue.new_record? && @issue.parent_issue_id.nil?) || !User.current.allowed_to?(:manage_subtasks, @project) %>
-<p><%= f.text_field :parent_issue_id, :size => 10 %></p>
+<% if User.current.allowed_to?(:manage_subtasks, @project) %>
+<p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10 %></p>
 <div id="parent_issue_candidates" class="autocomplete"></div>
 <%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
 <% end %>
@@ -26,11 +26,11 @@
 </div>
 
 <% if @issue.new_record? %>
-<p><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p>
+<p id="attachments_form"><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p>
 <% end %>
 
 <% if @issue.new_record? && User.current.allowed_to?(:add_issue_watchers, @project) -%>
-<p><label><%= l(:label_issue_watchers) %></label>
+<p id="watchers_form"><label><%= l(:label_issue_watchers) %></label>
 <% @issue.project.users.sort.each do |user| -%>
 <label class="floating"><%= check_box_tag 'issue[watcher_user_ids][]', user.id, @issue.watched_by?(user) %> <%=h user %></label>
 <% end -%>
--- a/app/views/issues/bulk_edit.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/bulk_edit.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -11,7 +11,7 @@
 <div class="splitcontentleft">
 <p>
 	<label><%= l(:field_tracker) %></label>
-	<%= select_tag('issue[tracker_id]', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@project.trackers, :id, :name)) %>
+	<%= select_tag('issue[tracker_id]', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@trackers, :id, :name)) %>
 </p>
 <% if @available_statuses.any? %>
 <p>
@@ -27,20 +27,25 @@
 	<label><%= l(:field_assigned_to) %></label> 
 	<%= select_tag('issue[assigned_to_id]', content_tag('option', l(:label_no_change_option), :value => '') +
                                  content_tag('option', l(:label_nobody), :value => 'none') +
-                                 options_from_collection_for_select(@project.assignable_users, :id, :name)) %>
+                                 options_from_collection_for_select(@assignables, :id, :name)) %>
 </p>
+<% if @project %>
 <p>
 	<label><%= l(:field_category) %></label> 
 	<%= select_tag('issue[category_id]', content_tag('option', l(:label_no_change_option), :value => '') +
                                 content_tag('option', l(:label_none), :value => 'none') +
                                 options_from_collection_for_select(@project.issue_categories, :id, :name)) %>
 </p>
+<% end %>
+<% #TODO: allow editing versions when multiple projects %>
+<% if @project %>
 <p>
 	<label><%= l(:field_fixed_version) %></label> 
 	<%= select_tag('issue[fixed_version_id]', content_tag('option', l(:label_no_change_option), :value => '') +
                                    content_tag('option', l(:label_none), :value => 'none') +
                                    version_options_for_select(@project.shared_versions.open)) %>
 </p>
+<% end %>
 
 <% @custom_fields.each do |custom_field| %>
 	<p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('issue', custom_field) %></p>
--- a/app/views/issues/new.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/new.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 <h2><%=l(:label_issue_new)%></h2>
 
 <% labelled_tabular_form_for :issue, @issue, :url => {:controller => 'issues', :action => 'create', :project_id => @project},
-                             :html => {:multipart => true, :id => 'issue-form'} do |f| %>
+                             :html => {:multipart => true, :id => 'issue-form', :class => 'tabular new-issue-form'} do |f| %>
     <%= error_messages_for 'issue' %>
     <div class="box">
     <%= render :partial => 'issues/form', :locals => {:f => f} %>
--- a/app/views/issues/show.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/issues/show.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -32,7 +32,7 @@
     <th class="category"><%=l(:field_category)%>:</th><td class="category"><%=h @issue.category ? @issue.category.name : "-" %></td>
     <% if User.current.allowed_to?(:view_time_entries, @project) %>
     <th class="spent-time"><%=l(:label_spent_time)%>:</th>
-    <td class="spent-time"><%= @issue.spent_hours > 0 ? (link_to l_hours(@issue.spent_hours), {:controller => 'timelog', :action => 'details', :project_id => @project, :issue_id => @issue}) : "-" %></td>
+    <td class="spent-time"><%= @issue.spent_hours > 0 ? (link_to l_hours(@issue.spent_hours), {:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue}) : "-" %></td>
     <% end %>
 </tr>
 <tr>
@@ -44,18 +44,19 @@
 <%= render_custom_fields_rows(@issue) %>
 <%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %>
 </table>
+
+<% if @issue.description? || @issue.attachments.any? -%>
 <hr />
-
 <div class="contextual">
-<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment') unless @issue.description.blank? %>
+<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment') if @issue.description? %>
 </div>
                               
-<p><strong><%=l(:field_description)%></strong></p>
 <div class="wiki">
 <%= textilizable @issue, :description, :attachments => @issue.attachments %>
 </div>
 
 <%= link_to_attachments @issue %>
+<% end -%>
 
 <%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %>
 
--- a/app/views/journals/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/journals/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/journals
 http://redmine.rubyforge.org/svn
 
--- a/app/views/layouts/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/layouts/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 42
-/svn/!svn/ver/4005/trunk/app/views/layouts
+/svn/!svn/ver/4362/trunk/app/views/layouts
 END
 base.rhtml
 K 25
@@ -13,13 +13,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/2887/trunk/app/views/layouts/mailer.text.plain.erb
+/svn/!svn/ver/4362/trunk/app/views/layouts/mailer.text.plain.erb
 END
 mailer.text.html.erb
 K 25
 svn:wc:ra_dav:version-url
 V 63
-/svn/!svn/ver/2887/trunk/app/views/layouts/mailer.text.html.erb
+/svn/!svn/ver/4362/trunk/app/views/layouts/mailer.text.html.erb
 END
 admin.rhtml
 K 25
--- a/app/views/layouts/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/layouts/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/layouts
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-19T16:57:44.231882Z
-4005
-winterheart
+2010-11-02T19:00:36.834304Z
+4362
+edavis10
 
 
 
@@ -66,10 +66,10 @@
 
 
 
-2010-09-23T14:37:44.583752Z
-9631cc13a2471d1bdde52f4d8cee6f18
-2009-09-13T17:14:35.707881Z
-2887
+2010-11-19T13:04:48.184855Z
+490231bbc42932a0f9e1735a94d06260
+2010-11-02T19:00:36.834304Z
+4362
 edavis10
 has-props
 
@@ -92,7 +92,7 @@
 
 
 
-46
+75
 
 mailer.text.html.erb
 file
@@ -100,10 +100,10 @@
 
 
 
-2010-09-23T14:37:44.583752Z
-bd4792711b615ebda6bb50b1f1158f0c
-2009-09-13T17:14:35.707881Z
-2887
+2010-11-19T13:04:48.184855Z
+5073a425d4e7896c725996f9cf35f74b
+2010-11-02T19:00:36.834304Z
+4362
 edavis10
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-646
+761
 
 admin.rhtml
 file
--- a/app/views/layouts/.svn/text-base/mailer.text.html.erb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/layouts/.svn/text-base/mailer.text.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -25,6 +25,7 @@
 </style>
 </head>
 <body>
+<span class="header"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_header) %></span>
 <%= yield %>
 <hr />
 <span class="footer"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_footer) %></span>
--- a/app/views/layouts/.svn/text-base/mailer.text.plain.erb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/layouts/.svn/text-base/mailer.text.plain.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,4 @@
+<%= Setting.emails_header %>
 <%= yield %>
 -- 
 <%= Setting.emails_footer %>
--- a/app/views/layouts/mailer.text.html.erb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/layouts/mailer.text.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -25,6 +25,7 @@
 </style>
 </head>
 <body>
+<span class="header"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_header) %></span>
 <%= yield %>
 <hr />
 <span class="footer"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_footer) %></span>
--- a/app/views/layouts/mailer.text.plain.erb	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/layouts/mailer.text.plain.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,4 @@
+<%= Setting.emails_header %>
 <%= yield %>
 -- 
 <%= Setting.emails_footer %>
--- a/app/views/ldap_auth_sources/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/ldap_auth_sources/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/ldap_auth_sources
 http://redmine.rubyforge.org/svn
 
--- a/app/views/mailer/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/mailer/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 41
-/svn/!svn/ver/3452/trunk/app/views/mailer
+/svn/!svn/ver/4296/trunk/app/views/mailer
 END
 wiki_content_added.text.plain.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 77
-/svn/!svn/ver/2749/trunk/app/views/mailer/wiki_content_added.text.plain.rhtml
+/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_added.text.plain.rhtml
 END
 account_activated.text.plain.rhtml
 K 25
@@ -79,7 +79,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 76
-/svn/!svn/ver/2749/trunk/app/views/mailer/wiki_content_added.text.html.rhtml
+/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_added.text.html.rhtml
 END
 test.text.plain.rhtml
 K 25
@@ -117,18 +117,18 @@
 V 64
 /svn/!svn/ver/3452/trunk/app/views/mailer/_issue_text_html.rhtml
 END
+attachments_added.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/3452/trunk/app/views/mailer/attachments_added.text.html.rhtml
+END
 news_added.text.plain.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 68
 /svn/!svn/ver/877/trunk/app/views/mailer/news_added.text.plain.rhtml
 END
-attachments_added.text.html.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/3452/trunk/app/views/mailer/attachments_added.text.html.rhtml
-END
 news_added.text.html.rhtml
 K 25
 svn:wc:ra_dav:version-url
@@ -141,41 +141,35 @@
 V 72
 /svn/!svn/ver/877/trunk/app/views/mailer/document_added.text.plain.rhtml
 END
+issue_add.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/2493/trunk/app/views/mailer/issue_add.text.plain.rhtml
+END
 document_added.text.html.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 72
 /svn/!svn/ver/3452/trunk/app/views/mailer/document_added.text.html.rhtml
 END
-issue_add.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/2493/trunk/app/views/mailer/issue_add.text.plain.rhtml
-END
 account_information.text.plain.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 77
 /svn/!svn/ver/877/trunk/app/views/mailer/account_information.text.plain.rhtml
 END
-message_posted.text.plain.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/932/trunk/app/views/mailer/message_posted.text.plain.rhtml
-END
 account_information.text.html.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 77
 /svn/!svn/ver/3452/trunk/app/views/mailer/account_information.text.html.rhtml
 END
-wiki_content_updated.text.plain.rhtml
+message_posted.text.plain.rhtml
 K 25
 svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/2749/trunk/app/views/mailer/wiki_content_updated.text.plain.rhtml
+V 72
+/svn/!svn/ver/932/trunk/app/views/mailer/message_posted.text.plain.rhtml
 END
 lost_password.text.plain.rhtml
 K 25
@@ -183,11 +177,17 @@
 V 72
 /svn/!svn/ver/1683/trunk/app/views/mailer/lost_password.text.plain.rhtml
 END
+wiki_content_updated.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_updated.text.plain.rhtml
+END
 wiki_content_updated.text.html.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 78
-/svn/!svn/ver/2749/trunk/app/views/mailer/wiki_content_updated.text.html.rhtml
+/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_updated.text.html.rhtml
 END
 lost_password.text.html.rhtml
 K 25
--- a/app/views/mailer/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/mailer/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/mailer
 http://redmine.rubyforge.org/svn
 
 
 
-2010-02-18T19:13:38.135448Z
-3452
-jplang
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-23T14:37:44.607738Z
-882607e6f82c2c4e7db74136ee974a5b
-2009-05-17T09:55:13.601447Z
-2749
-jplang
+2010-11-19T13:04:49.420968Z
+1729c597befa0c9411266eb9d1c5b577
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-197
+195
 
 account_activated.text.plain.rhtml
 file
@@ -440,11 +440,11 @@
 
 
 
-2010-09-23T14:37:44.607738Z
-21acbb8688d350bccc49d0b9f0fa7964
-2009-05-17T09:55:13.601447Z
-2749
-jplang
+2010-11-19T13:04:49.420968Z
+37e05984b98664e4b97c26b51196f9ab
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
 has-props
 
 
@@ -466,7 +466,7 @@
 
 
 
-225
+223
 
 test.text.plain.rhtml
 file
@@ -672,6 +672,40 @@
 
 629
 
+attachments_added.text.html.rhtml
+file
+
+
+
+
+2010-09-23T14:37:44.603754Z
+db9ef17343824d59b7a19db7036ee2f1
+2010-02-18T19:13:38.135448Z
+3452
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+144
+
 news_added.text.plain.rhtml
 file
 
@@ -706,40 +740,6 @@
 
 87
 
-attachments_added.text.html.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.603754Z
-db9ef17343824d59b7a19db7036ee2f1
-2010-02-18T19:13:38.135448Z
-3452
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-144
-
 news_added.text.html.rhtml
 file
 
@@ -808,6 +808,40 @@
 
 107
 
+issue_add.text.plain.rhtml
+file
+
+
+
+
+2010-09-23T14:37:44.603754Z
+52a0f774acd5b7aeeb3768de943af901
+2009-02-21T11:04:50.579477Z
+2493
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+224
+
 document_added.text.html.rhtml
 file
 
@@ -842,40 +876,6 @@
 
 163
 
-issue_add.text.plain.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.603754Z
-52a0f774acd5b7aeeb3768de943af901
-2009-02-21T11:04:50.579477Z
-2493
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-224
-
 account_information.text.plain.rhtml
 file
 
@@ -910,6 +910,40 @@
 
 295
 
+account_information.text.html.rhtml
+file
+
+
+
+
+2010-09-23T14:37:44.603754Z
+e7e91d7f18dd1547cfebafdf4822a18f
+2010-02-18T19:13:38.135448Z
+3452
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+368
+
 message_posted.text.plain.rhtml
 file
 
@@ -944,74 +978,6 @@
 
 68
 
-account_information.text.html.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.603754Z
-e7e91d7f18dd1547cfebafdf4822a18f
-2010-02-18T19:13:38.135448Z
-3452
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-368
-
-wiki_content_updated.text.plain.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.607738Z
-801160f7633227c04b4a3a8c249feeff
-2009-05-17T09:55:13.601447Z
-2749
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-290
-
 lost_password.text.plain.rhtml
 file
 
@@ -1046,6 +1012,40 @@
 
 97
 
+wiki_content_updated.text.plain.rhtml
+file
+
+
+
+
+2010-11-19T13:04:49.420968Z
+0cb005c22ad144fdbe29238b0080f28b
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+288
+
 lost_password.text.html.rhtml
 file
 
@@ -1086,11 +1086,11 @@
 
 
 
-2010-09-23T14:37:44.607738Z
-f7cca2b19b22b64036fdba45803b6805
-2009-05-17T09:55:13.601447Z
-2749
-jplang
+2010-11-19T13:04:49.420968Z
+f35cf0d09dd393a255db2d428a3d30f0
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
 has-props
 
 
@@ -1112,5 +1112,5 @@
 
 
 
-320
+318
 
--- a/app/views/mailer/.svn/text-base/wiki_content_added.text.html.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/mailer/.svn/text-base/wiki_content_added.text.html.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
-<p><%= l(:mail_body_wiki_content_added, :page => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), 
+<p><%= l(:mail_body_wiki_content_added, :id => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), 
 		  																  :author => h(@wiki_content.author)) %><br />
 <em><%=h @wiki_content.comments %></em></p>
--- a/app/views/mailer/.svn/text-base/wiki_content_added.text.plain.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/mailer/.svn/text-base/wiki_content_added.text.plain.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,4 +1,4 @@
-<%= l(:mail_body_wiki_content_added, :page => h(@wiki_content.page.pretty_title), 
+<%= l(:mail_body_wiki_content_added, :id => h(@wiki_content.page.pretty_title), 
 																		 :author => h(@wiki_content.author)) %>
 <%= @wiki_content.comments %>
 
--- a/app/views/mailer/.svn/text-base/wiki_content_updated.text.html.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/mailer/.svn/text-base/wiki_content_updated.text.html.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,4 +1,4 @@
-<p><%= l(:mail_body_wiki_content_updated, :page => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), 
+<p><%= l(:mail_body_wiki_content_updated, :id => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), 
   	    														      :author => h(@wiki_content.author)) %><br />
 <em><%=h @wiki_content.comments %></em></p>
 
--- a/app/views/mailer/.svn/text-base/wiki_content_updated.text.plain.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/mailer/.svn/text-base/wiki_content_updated.text.plain.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,4 +1,4 @@
-<%= l(:mail_body_wiki_content_updated, :page => h(@wiki_content.page.pretty_title), 
+<%= l(:mail_body_wiki_content_updated, :id => h(@wiki_content.page.pretty_title), 
 																			 :author => h(@wiki_content.author)) %>
 <%= @wiki_content.comments %>
 
--- a/app/views/mailer/wiki_content_added.text.html.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/mailer/wiki_content_added.text.html.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
-<p><%= l(:mail_body_wiki_content_added, :page => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), 
+<p><%= l(:mail_body_wiki_content_added, :id => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), 
 		  																  :author => h(@wiki_content.author)) %><br />
 <em><%=h @wiki_content.comments %></em></p>
--- a/app/views/mailer/wiki_content_added.text.plain.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/mailer/wiki_content_added.text.plain.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,4 +1,4 @@
-<%= l(:mail_body_wiki_content_added, :page => h(@wiki_content.page.pretty_title), 
+<%= l(:mail_body_wiki_content_added, :id => h(@wiki_content.page.pretty_title), 
 																		 :author => h(@wiki_content.author)) %>
 <%= @wiki_content.comments %>
 
--- a/app/views/mailer/wiki_content_updated.text.html.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/mailer/wiki_content_updated.text.html.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,4 +1,4 @@
-<p><%= l(:mail_body_wiki_content_updated, :page => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), 
+<p><%= l(:mail_body_wiki_content_updated, :id => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), 
   	    														      :author => h(@wiki_content.author)) %><br />
 <em><%=h @wiki_content.comments %></em></p>
 
--- a/app/views/mailer/wiki_content_updated.text.plain.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/mailer/wiki_content_updated.text.plain.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,4 +1,4 @@
-<%= l(:mail_body_wiki_content_updated, :page => h(@wiki_content.page.pretty_title), 
+<%= l(:mail_body_wiki_content_updated, :id => h(@wiki_content.page.pretty_title), 
 																			 :author => h(@wiki_content.author)) %>
 <%= @wiki_content.comments %>
 
--- a/app/views/members/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/members/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/members
 http://redmine.rubyforge.org/svn
 
--- a/app/views/messages/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/messages/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/messages
 http://redmine.rubyforge.org/svn
 
--- a/app/views/my/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/my/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 37
-/svn/!svn/ver/3775/trunk/app/views/my
+/svn/!svn/ver/4380/trunk/app/views/my
 END
 account.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/3745/trunk/app/views/my/account.rhtml
+/svn/!svn/ver/4223/trunk/app/views/my/account.rhtml
 END
 page.rhtml
 K 25
@@ -37,5 +37,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/3755/trunk/app/views/my/page_layout.rhtml
+/svn/!svn/ver/4380/trunk/app/views/my/page_layout.rhtml
 END
--- a/app/views/my/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/my/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/my
 http://redmine.rubyforge.org/svn
 
 
 
-2010-06-19T16:50:13.340830Z
-3775
-edavis10
+2010-11-07T12:36:19.797484Z
+4380
+jplang
 
 
 
@@ -32,10 +32,10 @@
 
 
 
-2010-09-23T14:37:44.619750Z
-4fb90e7d5633e4ec24100c38acdad03d
-2010-05-23T03:16:37.499264Z
-3745
+2010-11-19T13:04:47.012855Z
+746c4ac2d5bc111d91747aa0b0c54a5a
+2010-09-28T22:13:06.534232Z
+4223
 edavis10
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-2730
+1561
 
 page.rhtml
 file
@@ -205,11 +205,11 @@
 
 
 
-2010-09-23T14:37:44.623783Z
-c1260ac20d704693b8748cef7b7c58f9
-2010-05-26T21:52:03.637924Z
-3755
-edavis10
+2010-11-19T13:04:47.012855Z
+afbc3db612a251e1fcb34498f27c50b8
+2010-11-07T12:36:19.797484Z
+4380
+jplang
 has-props
 
 
@@ -231,5 +231,5 @@
 
 
 
-4115
+4274
 
--- a/app/views/my/.svn/text-base/account.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/my/.svn/text-base/account.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -32,24 +32,12 @@
 <div class="splitcontentright">
 <h3><%=l(:field_mail_notification)%></h3>
 <div class="box">
-<%= select_tag 'notification_option', options_for_select(@notification_options, @notification_option),
-                                      :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %>
-<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %>
-<p><% User.current.projects.each do |project| %>
-    <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br />
-<% end %></p>
-<p><em><%= l(:text_user_mail_option) %></em></p>
-<% end %>
-<p><label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %> <%= l(:label_user_mail_no_self_notified) %></label></p>
+<%= render :partial => 'users/mail_notifications' %>
 </div>
 
 <h3><%=l(:label_preferences)%></h3>
 <div class="box tabular">
-<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %>
-<p><%= pref_fields.check_box :hide_mail %></p>
-<p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p>
-<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p>
-<% end %>
+<%= render :partial => 'users/preferences' %>
 </div>
 
 </div>
--- a/app/views/my/.svn/text-base/page_layout.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/my/.svn/text-base/page_layout.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -5,9 +5,9 @@
     Sortable.destroy('list-left');
     Sortable.destroy('list-right');
     
-	Sortable.create("list-top", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=top', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-top")})}, only:'mypage-box', tag:'div'})
-	Sortable.create("list-left", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=left', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-left")})}, only:'mypage-box', tag:'div'})
-	Sortable.create("list-right", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=right', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-right")})}, only:'mypage-box', tag:'div'})
+	Sortable.create("list-top", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'top') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-top")})}, only:'mypage-box', tag:'div'})
+	Sortable.create("list-left", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'left') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-left")})}, only:'mypage-box', tag:'div'})
+	Sortable.create("list-right", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'right') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-right")})}, only:'mypage-box', tag:'div'})
 }
 
 function updateSelect() {
--- a/app/views/my/account.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/my/account.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -32,24 +32,12 @@
 <div class="splitcontentright">
 <h3><%=l(:field_mail_notification)%></h3>
 <div class="box">
-<%= select_tag 'notification_option', options_for_select(@notification_options, @notification_option),
-                                      :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %>
-<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %>
-<p><% User.current.projects.each do |project| %>
-    <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br />
-<% end %></p>
-<p><em><%= l(:text_user_mail_option) %></em></p>
-<% end %>
-<p><label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %> <%= l(:label_user_mail_no_self_notified) %></label></p>
+<%= render :partial => 'users/mail_notifications' %>
 </div>
 
 <h3><%=l(:label_preferences)%></h3>
 <div class="box tabular">
-<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %>
-<p><%= pref_fields.check_box :hide_mail %></p>
-<p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p>
-<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p>
-<% end %>
+<%= render :partial => 'users/preferences' %>
 </div>
 
 </div>
--- a/app/views/my/blocks/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/my/blocks/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/3734/trunk/app/views/my/blocks
+/svn/!svn/ver/4259/trunk/app/views/my/blocks
 END
 _issueswatched.rhtml
 K 25
@@ -31,7 +31,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/3734/trunk/app/views/my/blocks/_timelog.rhtml
+/svn/!svn/ver/4259/trunk/app/views/my/blocks/_timelog.rhtml
 END
 _documents.rhtml
 K 25
--- a/app/views/my/blocks/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/my/blocks/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/my/blocks
 http://redmine.rubyforge.org/svn
 
 
 
-2010-05-09T11:19:15.980195Z
-3734
-jplang
+2010-10-15T23:37:01.382819Z
+4259
+edavis10
 
 
 
@@ -168,11 +168,11 @@
 
 
 
-2010-09-23T14:37:44.623783Z
-4dfff03583b1da52a7f2fb8d20398928
-2010-05-09T11:19:15.980195Z
-3734
-jplang
+2010-11-19T13:04:47.008792Z
+2ba11e15a7f15f88fe061979d921b59d
+2010-10-15T23:37:01.382819Z
+4259
+edavis10
 has-props
 
 
@@ -194,7 +194,7 @@
 
 
 
-2282
+2284
 
 _documents.rhtml
 file
--- a/app/views/my/blocks/.svn/text-base/_timelog.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/my/blocks/.svn/text-base/_timelog.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -40,7 +40,7 @@
                                            :title => l(:button_edit) %>
         <%= link_to image_tag('delete.png'), {:controller => 'timelog', :action => 'destroy', :id => entry},
                                              :confirm => l(:text_are_you_sure),
-                                             :method => :post,
+                                             :method => :delete,
                                              :title => l(:button_delete) %>
     <% end -%>
     </td>
--- a/app/views/my/blocks/_timelog.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/my/blocks/_timelog.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -40,7 +40,7 @@
                                            :title => l(:button_edit) %>
         <%= link_to image_tag('delete.png'), {:controller => 'timelog', :action => 'destroy', :id => entry},
                                              :confirm => l(:text_are_you_sure),
-                                             :method => :post,
+                                             :method => :delete,
                                              :title => l(:button_delete) %>
     <% end -%>
     </td>
--- a/app/views/my/page_layout.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/my/page_layout.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -5,9 +5,9 @@
     Sortable.destroy('list-left');
     Sortable.destroy('list-right');
     
-	Sortable.create("list-top", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=top', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-top")})}, only:'mypage-box', tag:'div'})
-	Sortable.create("list-left", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=left', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-left")})}, only:'mypage-box', tag:'div'})
-	Sortable.create("list-right", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=right', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-right")})}, only:'mypage-box', tag:'div'})
+	Sortable.create("list-top", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'top') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-top")})}, only:'mypage-box', tag:'div'})
+	Sortable.create("list-left", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'left') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-left")})}, only:'mypage-box', tag:'div'})
+	Sortable.create("list-right", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'right') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-right")})}, only:'mypage-box', tag:'div'})
 }
 
 function updateSelect() {
--- a/app/views/news/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,19 +1,19 @@
 K 25
 svn:wc:ra_dav:version-url
 V 39
-/svn/!svn/ver/4172/trunk/app/views/news
+/svn/!svn/ver/4267/trunk/app/views/news
 END
 _news.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/3924/trunk/app/views/news/_news.rhtml
+/svn/!svn/ver/4214/trunk/app/views/news/_news.rhtml
 END
 show.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 50
-/svn/!svn/ver/4172/trunk/app/views/news/show.rhtml
+/svn/!svn/ver/4214/trunk/app/views/news/show.rhtml
 END
 _form.rhtml
 K 25
@@ -25,17 +25,17 @@
 K 25
 svn:wc:ra_dav:version-url
 V 50
-/svn/!svn/ver/4168/trunk/app/views/news/edit.rhtml
+/svn/!svn/ver/4214/trunk/app/views/news/edit.rhtml
 END
 index.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/4163/trunk/app/views/news/index.rhtml
+/svn/!svn/ver/4267/trunk/app/views/news/index.rhtml
 END
 new.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4163/trunk/app/views/news/new.rhtml
+/svn/!svn/ver/4214/trunk/app/views/news/new.rhtml
 END
--- a/app/views/news/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/news
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-10-22T14:42:38.351679Z
+4267
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-23T14:37:44.627781Z
-8a95983c16121228642f685334a98b43
-2010-08-08T07:07:20.961363Z
-3924
-jbbarth
+2010-11-19T13:04:49.428894Z
+2501c1cef884fd4a56abb3a4e736825f
+2010-09-27T16:51:12.033537Z
+4214
+edavis10
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-422
+384
 
 show.rhtml
 file
@@ -66,10 +66,10 @@
 
 
 
-2010-09-24T12:48:28.335892Z
-fb4ed9638d6d3f708b140d2ccbc013de
-2010-09-23T15:20:19.085385Z
-4172
+2010-11-19T13:04:49.428894Z
+c21730c749ee8533fadff9abbea6ffd8
+2010-09-27T16:51:12.033537Z
+4214
 edavis10
 has-props
 
@@ -92,7 +92,7 @@
 
 
 
-3025
+2897
 
 _form.rhtml
 file
@@ -134,10 +134,10 @@
 
 
 
-2010-09-24T12:48:28.335892Z
-03cd635f1021f3f088155b7106062d98
-2010-09-21T15:20:37.706826Z
-4168
+2010-11-19T13:04:49.432892Z
+dd2c968c6b42916bff9b9e5de055e007
+2010-09-27T16:51:12.033537Z
+4214
 edavis10
 has-props
 
@@ -160,7 +160,7 @@
 
 
 
-771
+733
 
 index.rhtml
 file
@@ -168,11 +168,11 @@
 
 
 
-2010-09-24T12:48:28.335892Z
-22895814fee421f0a7e4654059ede065
-2010-09-20T15:13:48.212792Z
-4163
-edavis10
+2010-11-19T13:04:49.432892Z
+764ec3719917039d0cac3d375ec819c4
+2010-10-22T14:42:38.351679Z
+4267
+jplang
 has-props
 
 
@@ -194,7 +194,7 @@
 
 
 
-2260
+2114
 
 new.rhtml
 file
@@ -202,10 +202,10 @@
 
 
 
-2010-09-24T12:48:28.335892Z
-834dc30ca0d2f96a37f2ef2a60d9aaf9
-2010-09-20T15:13:48.212792Z
-4163
+2010-11-19T13:04:49.432892Z
+1e7f24dd1dc6a117b245a76174e4c8ae
+2010-09-27T16:51:12.033537Z
+4214
 edavis10
 has-props
 
@@ -228,5 +228,5 @@
 
 
 
-733
+664
 
--- a/app/views/news/.svn/text-base/_news.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/.svn/text-base/_news.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 <p><%= link_to_project(news.project) + ': ' unless @project %>
-<%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %>
+<%= link_to h(news.title), news_path(news) %>
 <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
 <br />
 <% unless news.summary.blank? %><span class="summary"><%=h news.summary %></span><br /><% end %>
--- a/app/views/news/.svn/text-base/edit.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/.svn/text-base/edit.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,12 +1,12 @@
 <h2><%=l(:label_news)%></h2>
 
-<% labelled_tabular_form_for :news, @news, :url => { :action => "update" },
+<% labelled_tabular_form_for :news, @news, :url => news_path(@news),
                                            :html => { :id => 'news-form', :method => :put } do |f| %>
 <%= render :partial => 'form', :locals => { :f => f } %>
 <%= submit_tag l(:button_save) %>
 <%= link_to_remote l(:label_preview), 
-                   { :url => { :controller => 'news', :action => 'preview', :project_id => @project },
-                     :method => 'post',
+                   { :url => preview_news_path(:project_id => @project),
+                     :method => 'get',
                      :update => 'preview',
                      :with => "Form.serialize('news-form')"
                    }, :accesskey => accesskey(:preview) %>
--- a/app/views/news/.svn/text-base/index.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/.svn/text-base/index.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,19 +1,19 @@
 <div class="contextual">
-<%= link_to_if_authorized(l(:label_news_new),
-                          {:controller => 'news', :action => 'new', :project_id => @project},
-                          :class => 'icon icon-add',
-                          :onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project %>
+<%= link_to(l(:label_news_new),
+            new_project_news_path(@project),
+            :class => 'icon icon-add',
+            :onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project && User.current.allowed_to?(:manage_news, @project) %>
 </div>
 
 <div id="add-news" style="display:none;">
 <h2><%=l(:label_news_new)%></h2>
-<% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'create', :project_id => @project },
+<% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project),
                                            :html => { :id => 'news-form' } do |f| %>
 <%= render :partial => 'news/form', :locals => { :f => f } %>
 <%= submit_tag l(:button_create) %>
 <%= link_to_remote l(:label_preview), 
-                   { :url => { :controller => 'news', :action => 'preview', :project_id => @project },
-                     :method => 'post',
+                   { :url => preview_news_path(:project_id => @project),
+                     :method => 'get',
                      :update => 'preview',
                      :with => "Form.serialize('news-form')"
                    }, :accesskey => accesskey(:preview) %> |
@@ -29,7 +29,7 @@
 <% else %>
 <% @newss.each do |news| %>
     <h3><%= link_to_project(news.project) + ': ' unless news.project == @project %>
-    <%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %>
+    <%= link_to h(news.title), news_path(news) %>
     <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %></h3>
     <p class="author"><%= authoring news.created_on, news.author %></p>
     <div class="wiki">
--- a/app/views/news/.svn/text-base/new.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/.svn/text-base/new.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,12 +1,12 @@
 <h2><%=l(:label_news_new)%></h2>
 
-<% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'create', :project_id => @project },
+<% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project),
                                            :html => { :id => 'news-form' } do |f| %>
 <%= render :partial => 'news/form', :locals => { :f => f } %>
 <%= submit_tag l(:button_create) %>
 <%= link_to_remote l(:label_preview), 
-                   { :url => { :controller => 'news', :action => 'preview', :project_id => @project },
-                     :method => 'post',
+                   { :url => preview_news_path(:project_id => @project),
+                     :method => 'get',
                      :update => 'preview',
                      :with => "Form.serialize('news-form')"
                    }, :accesskey => accesskey(:preview) %>
--- a/app/views/news/.svn/text-base/show.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/.svn/text-base/show.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,23 +1,23 @@
 <div class="contextual">
 <%= link_to_if_authorized l(:button_edit), 
-                          {:controller => 'news', :action => 'edit', :id => @news},
+                          edit_news_path(@news),
                           :class => 'icon icon-edit',
                           :accesskey => accesskey(:edit),
                           :onclick => 'Element.show("edit-news"); return false;' %>
-<%= link_to_if_authorized l(:button_delete), {:controller => 'news', :action => 'destroy', :id => @news}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
+<%= link_to_if_authorized l(:button_delete), news_path(@news), :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del' %>
 </div>
 
 <h2><%= avatar(@news.author, :size => "24") %><%=h @news.title %></h2>
 
 <% if authorize_for('news', 'edit') %>
 <div id="edit-news" style="display:none;">
-<% labelled_tabular_form_for :news, @news, :url => { :action => "update", :id => @news },
+<% labelled_tabular_form_for :news, @news, :url => news_path(@news),
                                            :html => { :id => 'news-form', :method => :put } do |f| %>
 <%= render :partial => 'form', :locals => { :f => f } %>
 <%= submit_tag l(:button_save) %>
 <%= link_to_remote l(:label_preview), 
-                   { :url => { :controller => 'news', :action => 'preview', :project_id => @project },
-                     :method => 'post',
+                   { :url => preview_news_path(:project_id => @project),
+                     :method => 'get',
                      :update => 'preview',
                      :with => "Form.serialize('news-form')"
                    }, :accesskey => accesskey(:preview) %> |
--- a/app/views/news/_news.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/_news.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 <p><%= link_to_project(news.project) + ': ' unless @project %>
-<%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %>
+<%= link_to h(news.title), news_path(news) %>
 <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
 <br />
 <% unless news.summary.blank? %><span class="summary"><%=h news.summary %></span><br /><% end %>
--- a/app/views/news/edit.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/edit.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,12 +1,12 @@
 <h2><%=l(:label_news)%></h2>
 
-<% labelled_tabular_form_for :news, @news, :url => { :action => "update" },
+<% labelled_tabular_form_for :news, @news, :url => news_path(@news),
                                            :html => { :id => 'news-form', :method => :put } do |f| %>
 <%= render :partial => 'form', :locals => { :f => f } %>
 <%= submit_tag l(:button_save) %>
 <%= link_to_remote l(:label_preview), 
-                   { :url => { :controller => 'news', :action => 'preview', :project_id => @project },
-                     :method => 'post',
+                   { :url => preview_news_path(:project_id => @project),
+                     :method => 'get',
                      :update => 'preview',
                      :with => "Form.serialize('news-form')"
                    }, :accesskey => accesskey(:preview) %>
--- a/app/views/news/index.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/index.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,19 +1,19 @@
 <div class="contextual">
-<%= link_to_if_authorized(l(:label_news_new),
-                          {:controller => 'news', :action => 'new', :project_id => @project},
-                          :class => 'icon icon-add',
-                          :onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project %>
+<%= link_to(l(:label_news_new),
+            new_project_news_path(@project),
+            :class => 'icon icon-add',
+            :onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project && User.current.allowed_to?(:manage_news, @project) %>
 </div>
 
 <div id="add-news" style="display:none;">
 <h2><%=l(:label_news_new)%></h2>
-<% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'create', :project_id => @project },
+<% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project),
                                            :html => { :id => 'news-form' } do |f| %>
 <%= render :partial => 'news/form', :locals => { :f => f } %>
 <%= submit_tag l(:button_create) %>
 <%= link_to_remote l(:label_preview), 
-                   { :url => { :controller => 'news', :action => 'preview', :project_id => @project },
-                     :method => 'post',
+                   { :url => preview_news_path(:project_id => @project),
+                     :method => 'get',
                      :update => 'preview',
                      :with => "Form.serialize('news-form')"
                    }, :accesskey => accesskey(:preview) %> |
@@ -29,7 +29,7 @@
 <% else %>
 <% @newss.each do |news| %>
     <h3><%= link_to_project(news.project) + ': ' unless news.project == @project %>
-    <%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %>
+    <%= link_to h(news.title), news_path(news) %>
     <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %></h3>
     <p class="author"><%= authoring news.created_on, news.author %></p>
     <div class="wiki">
--- a/app/views/news/new.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/new.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,12 +1,12 @@
 <h2><%=l(:label_news_new)%></h2>
 
-<% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'create', :project_id => @project },
+<% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project),
                                            :html => { :id => 'news-form' } do |f| %>
 <%= render :partial => 'news/form', :locals => { :f => f } %>
 <%= submit_tag l(:button_create) %>
 <%= link_to_remote l(:label_preview), 
-                   { :url => { :controller => 'news', :action => 'preview', :project_id => @project },
-                     :method => 'post',
+                   { :url => preview_news_path(:project_id => @project),
+                     :method => 'get',
                      :update => 'preview',
                      :with => "Form.serialize('news-form')"
                    }, :accesskey => accesskey(:preview) %>
--- a/app/views/news/show.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/news/show.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,23 +1,23 @@
 <div class="contextual">
 <%= link_to_if_authorized l(:button_edit), 
-                          {:controller => 'news', :action => 'edit', :id => @news},
+                          edit_news_path(@news),
                           :class => 'icon icon-edit',
                           :accesskey => accesskey(:edit),
                           :onclick => 'Element.show("edit-news"); return false;' %>
-<%= link_to_if_authorized l(:button_delete), {:controller => 'news', :action => 'destroy', :id => @news}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
+<%= link_to_if_authorized l(:button_delete), news_path(@news), :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del' %>
 </div>
 
 <h2><%= avatar(@news.author, :size => "24") %><%=h @news.title %></h2>
 
 <% if authorize_for('news', 'edit') %>
 <div id="edit-news" style="display:none;">
-<% labelled_tabular_form_for :news, @news, :url => { :action => "update", :id => @news },
+<% labelled_tabular_form_for :news, @news, :url => news_path(@news),
                                            :html => { :id => 'news-form', :method => :put } do |f| %>
 <%= render :partial => 'form', :locals => { :f => f } %>
 <%= submit_tag l(:button_save) %>
 <%= link_to_remote l(:label_preview), 
-                   { :url => { :controller => 'news', :action => 'preview', :project_id => @project },
-                     :method => 'post',
+                   { :url => preview_news_path(:project_id => @project),
+                     :method => 'get',
                      :update => 'preview',
                      :with => "Form.serialize('news-form')"
                    }, :accesskey => accesskey(:preview) %> |
--- a/app/views/previews/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/previews/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/previews
 http://redmine.rubyforge.org/svn
 
--- a/app/views/projects/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,31 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 43
-/svn/!svn/ver/4097/trunk/app/views/projects
-END
-settings.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/2871/trunk/app/views/projects/settings.rhtml
-END
-_form.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3910/trunk/app/views/projects/_form.rhtml
-END
-index.xml.builder
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/3731/trunk/app/views/projects/index.xml.builder
-END
-index.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4069/trunk/app/views/projects/index.rhtml
+/svn/!svn/ver/4402/trunk/app/views/projects
 END
 copy.rhtml
 K 25
@@ -43,13 +19,25 @@
 K 25
 svn:wc:ra_dav:version-url
 V 60
-/svn/!svn/ver/3730/trunk/app/views/projects/show.xml.builder
+/svn/!svn/ver/4382/trunk/app/views/projects/show.xml.builder
+END
+settings.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/2871/trunk/app/views/projects/settings.rhtml
 END
 show.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 54
-/svn/!svn/ver/4095/trunk/app/views/projects/show.rhtml
+/svn/!svn/ver/4382/trunk/app/views/projects/show.rhtml
+END
+_form.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/4402/trunk/app/views/projects/_form.rhtml
 END
 _edit.rhtml
 K 25
@@ -63,12 +51,24 @@
 V 62
 /svn/!svn/ver/2990/trunk/app/views/projects/list_members.rhtml
 END
+index.xml.builder
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/4382/trunk/app/views/projects/index.xml.builder
+END
 _members_box.html.erb
 K 25
 svn:wc:ra_dav:version-url
 V 65
 /svn/!svn/ver/4009/trunk/app/views/projects/_members_box.html.erb
 END
+index.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/4069/trunk/app/views/projects/index.rhtml
+END
 destroy.rhtml
 K 25
 svn:wc:ra_dav:version-url
--- a/app/views/projects/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/projects
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-17T15:55:08.377083Z
-4097
-edavis10
+2010-11-14T12:33:14.198318Z
+4402
+jplang
 
 
 
@@ -26,142 +26,6 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
-settings.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.643780Z
-66d45b68c4615d2b502b2c6d06cf0951
-2009-09-12T09:13:13.676884Z
-2871
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-114
-
-_form.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.639741Z
-d332741d76f19cf9b39b22e0394caaa4
-2010-08-04T00:59:15.949103Z
-3910
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1978
-
-index.xml.builder
-file
-
-
-
-
-2010-09-23T14:37:44.643780Z
-1d385c279ed6afca9347a892c07c4ffb
-2010-05-01T14:21:59.060695Z
-3731
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-721
-
-index.rhtml
-file
-
-
-
-
-2010-09-24T12:48:28.959844Z
-cb60b85b211b8c78058e4ccc5cdefc82
-2010-09-07T15:00:27.481481Z
-4069
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1155
-
 copy.rhtml
 file
 
@@ -239,10 +103,10 @@
 
 
 
-2010-09-23T14:37:44.651752Z
-d929d078c5f7b1c69f90434ce06f9629
-2010-05-01T14:21:41.568021Z
-3730
+2010-11-19T13:04:49.468916Z
+2c71cdd8d404107942ca25fbd76f7099
+2010-11-07T14:15:01.891476Z
+4382
 jplang
 has-props
 
@@ -265,7 +129,41 @@
 
 
 
-679
+687
+
+settings.rhtml
+file
+
+
+
+
+2010-09-23T14:37:44.643780Z
+66d45b68c4615d2b502b2c6d06cf0951
+2009-09-12T09:13:13.676884Z
+2871
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+114
 
 show.rhtml
 file
@@ -273,11 +171,11 @@
 
 
 
-2010-09-24T12:48:28.959844Z
-a05a461d7466e582d0fc7d4c1fc286e7
-2010-09-17T04:22:46.020207Z
-4095
-edavis10
+2010-11-19T13:04:49.468916Z
+bbcdfa64f2a80d809b80b00c26fd0c8c
+2010-11-07T14:15:01.891476Z
+4382
+jplang
 has-props
 
 
@@ -299,7 +197,41 @@
 
 
 
-3476
+3499
+
+_form.rhtml
+file
+
+
+
+
+2010-11-19T13:04:49.468916Z
+a7153b3d30bc50efcce516bb73b04f3b
+2010-11-14T12:33:14.198318Z
+4402
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1944
 
 _edit.rhtml
 file
@@ -369,6 +301,40 @@
 
 391
 
+index.xml.builder
+file
+
+
+
+
+2010-11-19T13:04:49.472856Z
+0a17e1dac1d3e2ac43c08f0039802b8c
+2010-11-07T14:15:01.891476Z
+4382
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+729
+
 _members_box.html.erb
 file
 
@@ -403,6 +369,40 @@
 
 279
 
+index.rhtml
+file
+
+
+
+
+2010-09-24T12:48:28.959844Z
+cb60b85b211b8c78058e4ccc5cdefc82
+2010-09-07T15:00:27.481481Z
+4069
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1155
+
 destroy.rhtml
 file
 
--- a/app/views/projects/.svn/text-base/_form.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/.svn/text-base/_form.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -2,16 +2,16 @@
 
 <div class="box">
 <!--[form:project]-->
-<p><%= f.text_field :name, :required => true, :maxlength => 30 %><br /><em><%= l(:text_caracters_maximum, 30) %></em></p>
+<p><%= f.text_field :name, :required => true, :size => 60 %></p>
 
 <% unless @project.allowed_parents.compact.empty? %>
     <p><%= label(:project, :parent_id, l(:field_parent)) %><%= parent_project_select_tag(@project) %></p>
 <% end %>
 
 <p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p>
-<p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen?, :maxlength => 20 %>
+<p><%= f.text_field :identifier, :required => true, :size => 60, :disabled => @project.identifier_frozen? %>
 <% unless @project.identifier_frozen? %>
-<br /><em><%= l(:text_length_between, :min => 1, :max => 20) %> <%= l(:text_project_identifier_info) %></em>
+<br /><em><%= l(:text_length_between, :min => 1, :max => Project::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_project_identifier_info) %></em>
 <% end %></p>
 <p><%= f.text_field :homepage, :size => 60 %></p>
 <p><%= f.check_box :is_public %></p>
--- a/app/views/projects/.svn/text-base/index.xml.builder.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/.svn/text-base/index.xml.builder.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -8,7 +8,7 @@
       xml.description project.description
       xml.parent(:id => project.parent_id, :name => project.parent.name) unless project.parent.nil?
       xml.custom_fields do
-        project.custom_field_values.each do |custom_value|
+        project.visible_custom_field_values.each do |custom_value|
           xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name
         end
       end unless project.custom_field_values.empty?
--- a/app/views/projects/.svn/text-base/show.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/.svn/text-base/show.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -16,7 +16,7 @@
  	<li><%=l(:label_subproject_plural)%>:
 	    <%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li>
   <% end %>
-	<% @project.custom_values.each do |custom_value| %>
+	<% @project.visible_custom_field_values.each do |custom_value| %>
 	<% if !custom_value.value.blank? %>
 	   <li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
 	<% end %>
@@ -67,8 +67,8 @@
     <% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %>
     <h3><%= l(:label_spent_time) %></h3>
     <p><span class="icon icon-time"><%= l_hours(@total_hours) %></span></p>
-    <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'details', :project_id => @project}) %> |
-    <%= link_to(l(:label_report), {:controller => 'timelog', :action => 'report', :project_id => @project}) %></p>
+    <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'index', :project_id => @project}) %> |
+    <%= link_to(l(:label_report), {:controller => 'time_entry_reports', :action => 'report', :project_id => @project}) %></p>
     <% end %>
     <%= call_hook(:view_projects_show_sidebar_bottom, :project => @project) %>
 <% end %>
--- a/app/views/projects/.svn/text-base/show.xml.builder.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/.svn/text-base/show.xml.builder.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -7,7 +7,7 @@
   xml.homepage    @project.homepage
   
   xml.custom_fields do
-    @project.custom_field_values.each do |custom_value|
+    @project.visible_custom_field_values.each do |custom_value|
       xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name
     end
   end unless @project.custom_field_values.empty?
--- a/app/views/projects/_form.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/_form.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -2,16 +2,16 @@
 
 <div class="box">
 <!--[form:project]-->
-<p><%= f.text_field :name, :required => true, :maxlength => 30 %><br /><em><%= l(:text_caracters_maximum, 30) %></em></p>
+<p><%= f.text_field :name, :required => true, :size => 60 %></p>
 
 <% unless @project.allowed_parents.compact.empty? %>
     <p><%= label(:project, :parent_id, l(:field_parent)) %><%= parent_project_select_tag(@project) %></p>
 <% end %>
 
 <p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p>
-<p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen?, :maxlength => 20 %>
+<p><%= f.text_field :identifier, :required => true, :size => 60, :disabled => @project.identifier_frozen? %>
 <% unless @project.identifier_frozen? %>
-<br /><em><%= l(:text_length_between, :min => 1, :max => 20) %> <%= l(:text_project_identifier_info) %></em>
+<br /><em><%= l(:text_length_between, :min => 1, :max => Project::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_project_identifier_info) %></em>
 <% end %></p>
 <p><%= f.text_field :homepage, :size => 60 %></p>
 <p><%= f.check_box :is_public %></p>
--- a/app/views/projects/index.xml.builder	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/index.xml.builder	Fri Nov 19 13:24:41 2010 +0000
@@ -8,7 +8,7 @@
       xml.description project.description
       xml.parent(:id => project.parent_id, :name => project.parent.name) unless project.parent.nil?
       xml.custom_fields do
-        project.custom_field_values.each do |custom_value|
+        project.visible_custom_field_values.each do |custom_value|
           xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name
         end
       end unless project.custom_field_values.empty?
--- a/app/views/projects/settings/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/settings/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/4097/trunk/app/views/projects/settings
+/svn/!svn/ver/4371/trunk/app/views/projects/settings
 END
 _issue_categories.rhtml
 K 25
@@ -37,7 +37,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 68
-/svn/!svn/ver/4097/trunk/app/views/projects/settings/_versions.rhtml
+/svn/!svn/ver/4307/trunk/app/views/projects/settings/_versions.rhtml
 END
 _boards.rhtml
 K 25
@@ -49,5 +49,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 67
-/svn/!svn/ver/3748/trunk/app/views/projects/settings/_members.rhtml
+/svn/!svn/ver/4371/trunk/app/views/projects/settings/_members.rhtml
 END
--- a/app/views/projects/settings/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/settings/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/projects/settings
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-17T15:55:08.377083Z
-4097
-edavis10
+2010-11-06T12:04:24.600306Z
+4371
+jplang
 
 
 
@@ -202,11 +202,11 @@
 
 
 
-2010-09-24T12:48:28.400004Z
-968f7fd3c259f3f7d4b173c4e6096cb6
-2010-09-17T15:55:08.377083Z
-4097
-edavis10
+2010-11-19T13:04:49.460909Z
+4f26d985da6ada4c0d724095490050c5
+2010-10-29T22:40:02.439890Z
+4307
+jbbarth
 has-props
 
 
@@ -228,7 +228,7 @@
 
 
 
-1979
+2055
 
 _boards.rhtml
 file
@@ -270,11 +270,11 @@
 
 
 
-2010-09-23T14:37:44.651752Z
-0f929da546db6f63f0ecbf2b3647fa6d
-2010-05-24T20:21:08.426768Z
-3748
-edavis10
+2010-11-19T13:04:49.460909Z
+ed4707b71316abb3bdcba3d525f83c9e
+2010-11-06T12:04:24.600306Z
+4371
+jplang
 has-props
 
 
@@ -296,5 +296,5 @@
 
 
 
-3909
+4120
 
--- a/app/views/projects/settings/.svn/text-base/_members.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/settings/.svn/text-base/_members.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -55,10 +55,12 @@
 
 <div class="splitcontentright">
 <% if roles.any? && principals.any? %>
-  <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post) do |f| %>
+  <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post,
+									   :loading => "$('member-add-submit').disable()",
+									   :complete => "$('member-add-submit').enable()") do |f| %>
     <fieldset><legend><%=l(:label_member_new)%></legend>
     
-		<p><%= text_field_tag 'principal_search', nil %></p>
+		<p><%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %></p>
 		<%= observe_field(:principal_search,
                  :frequency => 0.5,
                  :update => :principals,
@@ -75,7 +77,7 @@
     	<label><%= check_box_tag 'member[role_ids][]', role.id %> <%=h role %></label>
    	<% end %></p>
    	
-    <p><%= submit_tag l(:button_add) %></p>
+    <p><%= submit_tag l(:button_add), :id => 'member-add-submit' %></p>
 		</fieldset>
   <% end %>
 <% end %>
--- a/app/views/projects/settings/.svn/text-base/_versions.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/settings/.svn/text-base/_versions.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -6,7 +6,7 @@
     <th><%= l(:field_description) %></th>
     <th><%= l(:field_status) %></th>
     <th><%= l(:field_sharing) %></th>
-    <th><%= l(:label_wiki_page) unless @project.wiki.nil? %></th>
+    <th><%= l(:label_wiki_page) %></th>
     <th style="width:15%"></th>
     </tr></thead>
 	<tbody>
@@ -17,7 +17,7 @@
     <td class="description"><%=h version.description %></td>
     <td class="status"><%= l("version_status_#{version.status}") %></td>
     <td class="sharing"><%=h format_version_sharing(version.sharing) %></td>
-    <td><%= link_to(h(version.wiki_page_title), :controller => 'wiki', :page => Wiki.titleize(version.wiki_page_title)) unless version.wiki_page_title.blank? || @project.wiki.nil? %></td>
+    <td><%= link_to_if_authorized(h(version.wiki_page_title), {:controller => 'wiki', :action => 'show', :project_id => version.project, :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %></td>
     <td class="buttons">
     	<% if version.project == @project %>
     		<%= link_to_if_authorized l(:button_edit),   {:controller => 'versions', :action => 'edit', :id => version }, :class => 'icon icon-edit' %>
--- a/app/views/projects/settings/_members.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/settings/_members.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -55,10 +55,12 @@
 
 <div class="splitcontentright">
 <% if roles.any? && principals.any? %>
-  <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post) do |f| %>
+  <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post,
+									   :loading => "$('member-add-submit').disable()",
+									   :complete => "$('member-add-submit').enable()") do |f| %>
     <fieldset><legend><%=l(:label_member_new)%></legend>
     
-		<p><%= text_field_tag 'principal_search', nil %></p>
+		<p><%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %></p>
 		<%= observe_field(:principal_search,
                  :frequency => 0.5,
                  :update => :principals,
@@ -75,7 +77,7 @@
     	<label><%= check_box_tag 'member[role_ids][]', role.id %> <%=h role %></label>
    	<% end %></p>
    	
-    <p><%= submit_tag l(:button_add) %></p>
+    <p><%= submit_tag l(:button_add), :id => 'member-add-submit' %></p>
 		</fieldset>
   <% end %>
 <% end %>
--- a/app/views/projects/settings/_versions.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/settings/_versions.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -6,7 +6,7 @@
     <th><%= l(:field_description) %></th>
     <th><%= l(:field_status) %></th>
     <th><%= l(:field_sharing) %></th>
-    <th><%= l(:label_wiki_page) unless @project.wiki.nil? %></th>
+    <th><%= l(:label_wiki_page) %></th>
     <th style="width:15%"></th>
     </tr></thead>
 	<tbody>
@@ -17,7 +17,7 @@
     <td class="description"><%=h version.description %></td>
     <td class="status"><%= l("version_status_#{version.status}") %></td>
     <td class="sharing"><%=h format_version_sharing(version.sharing) %></td>
-    <td><%= link_to(h(version.wiki_page_title), :controller => 'wiki', :page => Wiki.titleize(version.wiki_page_title)) unless version.wiki_page_title.blank? || @project.wiki.nil? %></td>
+    <td><%= link_to_if_authorized(h(version.wiki_page_title), {:controller => 'wiki', :action => 'show', :project_id => version.project, :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %></td>
     <td class="buttons">
     	<% if version.project == @project %>
     		<%= link_to_if_authorized l(:button_edit),   {:controller => 'versions', :action => 'edit', :id => version }, :class => 'icon icon-edit' %>
--- a/app/views/projects/show.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/show.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -16,7 +16,7 @@
  	<li><%=l(:label_subproject_plural)%>:
 	    <%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li>
   <% end %>
-	<% @project.custom_values.each do |custom_value| %>
+	<% @project.visible_custom_field_values.each do |custom_value| %>
 	<% if !custom_value.value.blank? %>
 	   <li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
 	<% end %>
@@ -67,8 +67,8 @@
     <% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %>
     <h3><%= l(:label_spent_time) %></h3>
     <p><span class="icon icon-time"><%= l_hours(@total_hours) %></span></p>
-    <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'details', :project_id => @project}) %> |
-    <%= link_to(l(:label_report), {:controller => 'timelog', :action => 'report', :project_id => @project}) %></p>
+    <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'index', :project_id => @project}) %> |
+    <%= link_to(l(:label_report), {:controller => 'time_entry_reports', :action => 'report', :project_id => @project}) %></p>
     <% end %>
     <%= call_hook(:view_projects_show_sidebar_bottom, :project => @project) %>
 <% end %>
--- a/app/views/projects/show.xml.builder	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/projects/show.xml.builder	Fri Nov 19 13:24:41 2010 +0000
@@ -7,7 +7,7 @@
   xml.homepage    @project.homepage
   
   xml.custom_fields do
-    @project.custom_field_values.each do |custom_value|
+    @project.visible_custom_field_values.each do |custom_value|
       xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name
     end
   end unless @project.custom_field_values.empty?
--- a/app/views/queries/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/queries/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 42
-/svn/!svn/ver/4093/trunk/app/views/queries
+/svn/!svn/ver/4387/trunk/app/views/queries
 END
 _columns.rhtml
 K 25
@@ -25,7 +25,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/4093/trunk/app/views/queries/_filters.rhtml
+/svn/!svn/ver/4387/trunk/app/views/queries/_filters.rhtml
 END
 index.rhtml
 K 25
--- a/app/views/queries/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/queries/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/queries
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-16T21:33:49.399868Z
-4093
-jbbarth
+2010-11-07T15:38:51.908839Z
+4387
+jplang
 
 
 
@@ -134,11 +134,11 @@
 
 
 
-2010-09-24T12:48:29.616044Z
-d479118259de825ac50b66801909c8f4
-2010-09-16T21:33:49.399868Z
-4093
-jbbarth
+2010-11-19T13:04:50.836916Z
+e57491c4634e00f0ef53c44959c58d46
+2010-11-07T15:38:51.908839Z
+4387
+jplang
 has-props
 
 
@@ -160,7 +160,7 @@
 
 
 
-4456
+4495
 
 index.rhtml
 file
--- a/app/views/queries/.svn/text-base/_filters.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/queries/.svn/text-base/_filters.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -114,3 +114,4 @@
 </td>
 </tr>
 </table>
+<%= hidden_field_tag 'fields[]', '' %>
--- a/app/views/queries/_filters.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/queries/_filters.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -114,3 +114,4 @@
 </td>
 </tr>
 </table>
+<%= hidden_field_tag 'fields[]', '' %>
--- a/app/views/reports/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/reports/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/reports
 http://redmine.rubyforge.org/svn
 
--- a/app/views/repositories/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/repositories/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/repositories
 http://redmine.rubyforge.org/svn
 
@@ -26,6 +26,74 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+_navigation.rhtml
+file
+
+
+
+
+2010-09-23T14:37:44.671737Z
+59dbb643c447518053d9cdb1a86cb5ef
+2009-11-24T17:55:45.336708Z
+3086
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+910
+
+revision.rhtml
+file
+
+
+
+
+2010-09-24T11:56:52.963971Z
+bd525284ca2c21084be84d21823b552a
+2009-12-22T23:23:54.920563Z
+3216
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1953
+
 stats.rhtml
 file
 
@@ -60,74 +128,6 @@
 
 581
 
-revision.rhtml
-file
-
-
-
-
-2010-09-24T11:56:52.963971Z
-bd525284ca2c21084be84d21823b552a
-2009-12-22T23:23:54.920563Z
-3216
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1953
-
-_navigation.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.671737Z
-59dbb643c447518053d9cdb1a86cb5ef
-2009-11-24T17:55:45.336708Z
-3086
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-910
-
 entry.rhtml
 file
 
@@ -196,6 +196,74 @@
 
 1724
 
+_dir_list.rhtml
+file
+
+
+
+
+2010-09-23T14:37:44.667779Z
+8c004b6e433ac1a6ca64c97a35512f28
+2008-01-02T22:41:53.166620Z
+1032
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+350
+
+changes.rhtml
+file
+
+
+
+
+2010-09-23T14:37:44.671737Z
+cde7a86a5ec0cf9915b0540c9acbb820
+2009-08-15T22:41:40.505056Z
+2840
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+636
+
 diff.rhtml
 file
 
@@ -230,74 +298,6 @@
 
 991
 
-changes.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.671737Z
-cde7a86a5ec0cf9915b0540c9acbb820
-2009-08-15T22:41:40.505056Z
-2840
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-636
-
-_dir_list.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.667779Z
-8c004b6e433ac1a6ca64c97a35512f28
-2008-01-02T22:41:53.166620Z
-1032
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-350
-
 annotate.rhtml
 file
 
@@ -332,6 +332,40 @@
 
 1420
 
+_revisions.rhtml
+file
+
+
+
+
+2010-09-24T11:56:52.952009Z
+e7a6bdebdc02cae051102093180af71e
+2009-12-22T23:23:54.920563Z
+3216
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1346
+
 show.rhtml
 file
 
@@ -366,40 +400,6 @@
 
 1461
 
-_revisions.rhtml
-file
-
-
-
-
-2010-09-24T11:56:52.952009Z
-e7a6bdebdc02cae051102093180af71e
-2009-12-22T23:23:54.920563Z
-3216
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1346
-
 revisions.rhtml
 file
 
@@ -434,6 +434,40 @@
 
 810
 
+_link_to_functions.rhtml
+file
+
+
+
+
+2010-09-23T14:37:44.667779Z
+a86ac8a045315f57fa32acb29c08f19f
+2009-09-01T12:13:17.386587Z
+2849
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+847
+
 committers.rhtml
 file
 
@@ -468,40 +502,6 @@
 
 857
 
-_link_to_functions.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.667779Z
-a86ac8a045315f57fa32acb29c08f19f
-2009-09-01T12:13:17.386587Z
-2849
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-847
-
 _breadcrumbs.rhtml
 file
 
--- a/app/views/roles/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/roles/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/roles
 http://redmine.rubyforge.org/svn
 
--- a/app/views/search/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/search/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/search
 http://redmine.rubyforge.org/svn
 
--- a/app/views/settings/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/settings/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 43
-/svn/!svn/ver/3859/trunk/app/views/settings
+/svn/!svn/ver/4362/trunk/app/views/settings
 END
 _issues.rhtml
 K 25
@@ -19,7 +19,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 65
-/svn/!svn/ver/3859/trunk/app/views/settings/_authentication.rhtml
+/svn/!svn/ver/4306/trunk/app/views/settings/_authentication.rhtml
 END
 _mail_handler.rhtml
 K 25
@@ -55,7 +55,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/3198/trunk/app/views/settings/_notifications.rhtml
+/svn/!svn/ver/4362/trunk/app/views/settings/_notifications.rhtml
 END
 _projects.rhtml
 K 25
--- a/app/views/settings/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/settings/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/settings
 http://redmine.rubyforge.org/svn
 
 
 
-2010-07-20T23:50:15.173990Z
-3859
+2010-11-02T19:00:36.834304Z
+4362
 edavis10
 
 
@@ -100,11 +100,11 @@
 
 
 
-2010-09-23T14:37:44.683778Z
-2de580f7dfb3779ee4f31dc76e717482
-2010-07-20T23:50:15.173990Z
-3859
-edavis10
+2010-11-19T13:04:48.200851Z
+8005b162966a27cd4e7c30022320b47e
+2010-10-29T22:28:24.886659Z
+4306
+jbbarth
 has-props
 
 
@@ -126,7 +126,7 @@
 
 
 
-1180
+1181
 
 _mail_handler.rhtml
 file
@@ -304,11 +304,11 @@
 
 
 
-2010-09-23T14:37:44.683778Z
-92e1b26a91b51f283320507abecc8871
-2009-12-19T20:07:09.039389Z
-3198
-jplang
+2010-11-19T13:04:48.200851Z
+3d9920b9875183abe7932cdfd335d36a
+2010-11-02T19:00:36.834304Z
+4362
+edavis10
 has-props
 
 
@@ -330,7 +330,7 @@
 
 
 
-1084
+1366
 
 _projects.rhtml
 file
--- a/app/views/settings/.svn/text-base/_authentication.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/settings/.svn/text-base/_authentication.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -3,7 +3,7 @@
 <div class="box tabular settings">
 <p><%= setting_check_box :login_required %></p>
 
-<p><%= setting_select :autologin, [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]}, :blank => :label_disabled %></p>
+<p><%= setting_select :autologin, [[l(:label_disabled), 0]] + [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]} %></p>
 
 <p><%= setting_select :self_registration, [[l(:label_disabled), "0"],
 							                             [l(:label_registration_activation_by_email), "1"],
--- a/app/views/settings/.svn/text-base/_notifications.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/settings/.svn/text-base/_notifications.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -7,13 +7,22 @@
 <p><%= setting_check_box :bcc_recipients %></p>
 
 <p><%= setting_check_box :plain_text_mail %></p>
+
+<p><%= setting_select(:default_notification_option, User::MAIL_NOTIFICATION_OPTIONS.collect {|o| [l(o.last), o.first.to_s]}) %></p>
+
 </div>
 
-<fieldset class="box settings" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
-	<%= setting_multiselect(:notified_events, 
-        @notifiables.collect {|notifiable| [l_or_humanize(notifiable, :prefix => 'label_'), notifiable]}, :label => false) %>
+<fieldset class="box" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
+<%= hidden_field_tag 'settings[notified_events][]', '' %>
+<% @notifiables.each do |notifiable| %>
+<%= notification_field notifiable %>
+<br />
+<% end %>
+<p><%= check_all_links('notified_events') %></p>
+</fieldset>
 
-	<p><%= check_all_links('notified_events') %></p>
+<fieldset class="box"><legend><%= l(:setting_emails_header) %></legend>
+<%= setting_text_area :emails_header, :label => false, :class => 'wiki-edit', :rows => 5 %>
 </fieldset>
 
 <fieldset class="box"><legend><%= l(:setting_emails_footer) %></legend>
--- a/app/views/settings/_authentication.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/settings/_authentication.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -3,7 +3,7 @@
 <div class="box tabular settings">
 <p><%= setting_check_box :login_required %></p>
 
-<p><%= setting_select :autologin, [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]}, :blank => :label_disabled %></p>
+<p><%= setting_select :autologin, [[l(:label_disabled), 0]] + [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]} %></p>
 
 <p><%= setting_select :self_registration, [[l(:label_disabled), "0"],
 							                             [l(:label_registration_activation_by_email), "1"],
--- a/app/views/settings/_notifications.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/settings/_notifications.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -7,13 +7,22 @@
 <p><%= setting_check_box :bcc_recipients %></p>
 
 <p><%= setting_check_box :plain_text_mail %></p>
+
+<p><%= setting_select(:default_notification_option, User::MAIL_NOTIFICATION_OPTIONS.collect {|o| [l(o.last), o.first.to_s]}) %></p>
+
 </div>
 
-<fieldset class="box settings" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
-	<%= setting_multiselect(:notified_events, 
-        @notifiables.collect {|notifiable| [l_or_humanize(notifiable, :prefix => 'label_'), notifiable]}, :label => false) %>
+<fieldset class="box" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
+<%= hidden_field_tag 'settings[notified_events][]', '' %>
+<% @notifiables.each do |notifiable| %>
+<%= notification_field notifiable %>
+<br />
+<% end %>
+<p><%= check_all_links('notified_events') %></p>
+</fieldset>
 
-	<p><%= check_all_links('notified_events') %></p>
+<fieldset class="box"><legend><%= l(:setting_emails_header) %></legend>
+<%= setting_text_area :emails_header, :label => false, :class => 'wiki-edit', :rows => 5 %>
 </fieldset>
 
 <fieldset class="box"><legend><%= l(:setting_emails_footer) %></legend>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/time_entry_reports/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/4239/trunk/app/views/time_entry_reports
+END
+report.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/4239/trunk/app/views/time_entry_reports/report.rhtml
+END
+_report_criteria.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/4232/trunk/app/views/time_entry_reports/_report_criteria.rhtml
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/time_entry_reports/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,96 @@
+10
+
+dir
+4411
+http://redmine.rubyforge.org/svn/trunk/app/views/time_entry_reports
+http://redmine.rubyforge.org/svn
+
+
+
+2010-10-07T15:51:09.349542Z
+4239
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+report.rhtml
+file
+
+
+
+
+2010-11-19T13:04:48.181514Z
+d896f5cf56b2a3cd64887f239e584fdc
+2010-10-07T15:51:09.349542Z
+4239
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3569
+
+_report_criteria.rhtml
+file
+
+
+
+
+2010-11-19T13:04:48.181514Z
+5fa73daf0a67b2a39fd10320bcd7ab45
+2010-10-05T16:07:17.015270Z
+4232
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+926
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/time_entry_reports/.svn/prop-base/_report_criteria.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/time_entry_reports/.svn/prop-base/report.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/time_entry_reports/.svn/text-base/_report_criteria.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,19 @@
+<% @hours.collect {|h| h[criterias[level]].to_s}.uniq.each do |value| %>
+<% hours_for_value = select_hours(hours, criterias[level], value) -%>
+<% next if hours_for_value.empty? -%>
+<tr class="<%= cycle('odd', 'even') %> <%= 'last-level' unless criterias.length > level+1 %>">
+<%= '<td></td>' * level %>
+<td><%= h(format_criteria_value(criterias[level], value)) %></td>
+<%= '<td></td>' * (criterias.length - level - 1) -%>
+  <% total = 0 -%>
+  <% @periods.each do |period| -%>
+    <% sum = sum_hours(select_hours(hours_for_value, @columns, period.to_s)); total += sum -%>
+    <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
+  <% end -%>
+  <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
+</tr>
+<% if criterias.length > level+1 -%>
+  <%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %>
+<% end -%>
+
+<% end %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/time_entry_reports/.svn/text-base/report.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,76 @@
+<div class="contextual">
+<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
+</div>
+
+<%= render_timelog_breadcrumb %>
+
+<h2><%= l(:label_spent_time) %></h2>
+
+<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %>
+  <% @criterias.each do |criteria| %>
+    <%= hidden_field_tag 'criterias[]', criteria, :id => nil %>
+  <% end %>
+  <%# TODO: get rid of the project_id field, that should already be in the URL %>
+  <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
+  <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %>
+  <%= render :partial => 'timelog/date_range' %>
+
+  <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'],
+                                                                            [l(:label_month), 'month'],
+                                                                            [l(:label_week), 'week'],
+                                                                            [l(:label_day_plural).titleize, 'day']], @columns),
+                                                        :onchange => "this.form.onsubmit();" %>
+
+  <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}),
+                                                          :onchange => "this.form.onsubmit();",
+                                                          :style => 'width: 200px',
+                                                          :id => nil,
+                                                          :disabled => (@criterias.length >= 3)) %>
+     <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns},
+                                           :method => :get,
+                                           :update => 'content'
+                                          }, :class => 'icon icon-reload' %></p>
+<% end %>
+
+<% unless @criterias.empty? %>
+<div class="total-hours">
+<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
+</div>
+
+<% unless @hours.empty? %>
+<table class="list" id="time-report">
+<thead>
+<tr>
+<% @criterias.each do |criteria| %>
+  <th><%= l_or_humanize(@available_criterias[criteria][:label]) %></th>
+<% end %>
+<% columns_width = (40 / (@periods.length+1)).to_i %>
+<% @periods.each do |period| %>
+  <th class="period" width="<%= columns_width %>%"><%= period %></th>
+<% end %>
+  <th class="total" width="<%= columns_width %>%"><%= l(:label_total) %></th>
+</tr>
+</thead>
+<tbody>
+<%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %>
+  <tr class="total">
+  <td><%= l(:label_total) %></td>
+  <%= '<td></td>' * (@criterias.size - 1) %>
+  <% total = 0 -%>
+  <% @periods.each do |period| -%>
+    <% sum = sum_hours(select_hours(@hours, @columns, period.to_s)); total += sum -%>
+    <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
+  <% end -%>
+  <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
+  </tr>
+</tbody>
+</table>
+
+<% other_formats_links do |f| %>
+	<%= f.link_to 'CSV', :url => params %>
+<% end %>
+<% end %>
+<% end %>
+
+<% html_title l(:label_spent_time), l(:label_report) %>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/time_entry_reports/_report_criteria.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,19 @@
+<% @hours.collect {|h| h[criterias[level]].to_s}.uniq.each do |value| %>
+<% hours_for_value = select_hours(hours, criterias[level], value) -%>
+<% next if hours_for_value.empty? -%>
+<tr class="<%= cycle('odd', 'even') %> <%= 'last-level' unless criterias.length > level+1 %>">
+<%= '<td></td>' * level %>
+<td><%= h(format_criteria_value(criterias[level], value)) %></td>
+<%= '<td></td>' * (criterias.length - level - 1) -%>
+  <% total = 0 -%>
+  <% @periods.each do |period| -%>
+    <% sum = sum_hours(select_hours(hours_for_value, @columns, period.to_s)); total += sum -%>
+    <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
+  <% end -%>
+  <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
+</tr>
+<% if criterias.length > level+1 -%>
+  <%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %>
+<% end -%>
+
+<% end %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/time_entry_reports/report.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,76 @@
+<div class="contextual">
+<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
+</div>
+
+<%= render_timelog_breadcrumb %>
+
+<h2><%= l(:label_spent_time) %></h2>
+
+<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %>
+  <% @criterias.each do |criteria| %>
+    <%= hidden_field_tag 'criterias[]', criteria, :id => nil %>
+  <% end %>
+  <%# TODO: get rid of the project_id field, that should already be in the URL %>
+  <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
+  <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %>
+  <%= render :partial => 'timelog/date_range' %>
+
+  <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'],
+                                                                            [l(:label_month), 'month'],
+                                                                            [l(:label_week), 'week'],
+                                                                            [l(:label_day_plural).titleize, 'day']], @columns),
+                                                        :onchange => "this.form.onsubmit();" %>
+
+  <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}),
+                                                          :onchange => "this.form.onsubmit();",
+                                                          :style => 'width: 200px',
+                                                          :id => nil,
+                                                          :disabled => (@criterias.length >= 3)) %>
+     <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns},
+                                           :method => :get,
+                                           :update => 'content'
+                                          }, :class => 'icon icon-reload' %></p>
+<% end %>
+
+<% unless @criterias.empty? %>
+<div class="total-hours">
+<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
+</div>
+
+<% unless @hours.empty? %>
+<table class="list" id="time-report">
+<thead>
+<tr>
+<% @criterias.each do |criteria| %>
+  <th><%= l_or_humanize(@available_criterias[criteria][:label]) %></th>
+<% end %>
+<% columns_width = (40 / (@periods.length+1)).to_i %>
+<% @periods.each do |period| %>
+  <th class="period" width="<%= columns_width %>%"><%= period %></th>
+<% end %>
+  <th class="total" width="<%= columns_width %>%"><%= l(:label_total) %></th>
+</tr>
+</thead>
+<tbody>
+<%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %>
+  <tr class="total">
+  <td><%= l(:label_total) %></td>
+  <%= '<td></td>' * (@criterias.size - 1) %>
+  <% total = 0 -%>
+  <% @periods.each do |period| -%>
+    <% sum = sum_hours(select_hours(@hours, @columns, period.to_s)); total += sum -%>
+    <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
+  <% end -%>
+  <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
+  </tr>
+</tbody>
+</table>
+
+<% other_formats_links do |f| %>
+	<%= f.link_to 'CSV', :url => params %>
+<% end %>
+<% end %>
+<% end %>
+
+<% html_title l(:label_spent_time), l(:label_report) %>
+
--- a/app/views/timelog/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/timelog/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,41 +1,29 @@
 K 25
 svn:wc:ra_dav:version-url
 V 42
-/svn/!svn/ver/3043/trunk/app/views/timelog
+/svn/!svn/ver/4250/trunk/app/views/timelog
 END
 _list.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 54
-/svn/!svn/ver/3043/trunk/app/views/timelog/_list.rhtml
+/svn/!svn/ver/4250/trunk/app/views/timelog/_list.rhtml
 END
-report.rhtml
+index.html.erb
 K 25
 svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/2893/trunk/app/views/timelog/report.rhtml
-END
-_report_criteria.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/1503/trunk/app/views/timelog/_report_criteria.rhtml
-END
-details.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/2895/trunk/app/views/timelog/details.rhtml
+V 57
+/svn/!svn/ver/4239/trunk/app/views/timelog/index.html.erb
 END
 edit.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/2946/trunk/app/views/timelog/edit.rhtml
+/svn/!svn/ver/4248/trunk/app/views/timelog/edit.rhtml
 END
 _date_range.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 60
-/svn/!svn/ver/2902/trunk/app/views/timelog/_date_range.rhtml
+/svn/!svn/ver/4235/trunk/app/views/timelog/_date_range.rhtml
 END
--- a/app/views/timelog/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/timelog/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/timelog
 http://redmine.rubyforge.org/svn
 
 
 
-2009-11-14T14:10:09.589573Z
-3043
-jplang
+2010-10-12T15:55:21.984670Z
+4250
+edavis10
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-23T14:37:44.691790Z
-4ccce502c5846d291cb6f447a270088c
-2009-11-14T14:10:09.589573Z
-3043
-jplang
+2010-11-19T13:04:48.784870Z
+128d8975cacb0db79fc14a461544db09
+2010-10-12T15:55:21.984670Z
+4250
+edavis10
 has-props
 
 
@@ -58,19 +58,19 @@
 
 
 
-1731
+1733
 
-report.rhtml
+index.html.erb
 file
 
 
 
 
-2010-09-23T14:37:44.691790Z
-d4d7e674e383ee8ff3ec998c7f79c0e3
-2009-09-20T09:30:41.402075Z
-2893
-jplang
+2010-11-19T13:04:48.784870Z
+404d6b75c96def01a9a6bf86a6f58697
+2010-10-07T15:51:09.349542Z
+4239
+edavis10
 has-props
 
 
@@ -92,75 +92,7 @@
 
 
 
-3562
-
-_report_criteria.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.691790Z
-5fa73daf0a67b2a39fd10320bcd7ab45
-2008-06-07T15:08:59.933638Z
-1503
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-926
-
-details.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.691790Z
-dd63fc253dacd5a2276337c08eef6ff5
-2009-09-20T14:06:57.257282Z
-2895
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1422
+1421
 
 edit.rhtml
 file
@@ -168,10 +100,10 @@
 
 
 
-2010-09-23T14:37:44.691790Z
-8a0ba6a20c98dd2462e40f684f623874
-2009-10-21T22:34:28.905707Z
-2946
+2010-11-19T13:04:48.784870Z
+3bb82a2517a120b7a44add17f3369082
+2010-10-11T15:31:42.953914Z
+4248
 edavis10
 has-props
 
@@ -194,7 +126,7 @@
 
 
 
-1065
+1322
 
 _date_range.rhtml
 file
@@ -202,10 +134,10 @@
 
 
 
-2010-09-23T14:37:44.691790Z
-2b0b5861c9909cd61032b34b2c224052
-2009-09-25T00:39:02.685664Z
-2902
+2010-11-19T13:04:48.784870Z
+43628f95cde9503c20744c3b9fe9dfcd
+2010-10-06T18:23:45.014848Z
+4235
 edavis10
 has-props
 
@@ -228,5 +160,5 @@
 
 
 
-1729
+1736
 
--- a/app/views/timelog/.svn/prop-base/_report_criteria.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/app/views/timelog/.svn/prop-base/details.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/timelog/.svn/prop-base/index.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- a/app/views/timelog/.svn/prop-base/report.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/app/views/timelog/.svn/text-base/_date_range.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/timelog/.svn/text-base/_date_range.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -28,9 +28,9 @@
 <div class="tabs">
 <% url_params = @free_period ? { :from => @from, :to => @to } : { :period => params[:period] } %>
 <ul>
-    <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'details', :project_id => @project, :issue_id => @issue }),
-                                       :class => (@controller.action_name == 'details' ? 'selected' : nil)) %></li>
-    <li><%= link_to(l(:label_report), url_params.merge({:controller => 'timelog', :action => 'report', :project_id => @project, :issue_id => @issue}),
+    <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue }),
+                                       :class => (@controller.action_name == 'index' ? 'selected' : nil)) %></li>
+    <li><%= link_to(l(:label_report), url_params.merge({:controller => 'time_entry_reports', :action => 'report', :project_id => @project, :issue_id => @issue}),
                                        :class => (@controller.action_name == 'report' ? 'selected' : nil)) %></li>
 </ul>
 </div>
--- a/app/views/timelog/.svn/text-base/_list.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/timelog/.svn/text-base/_list.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -31,7 +31,7 @@
                                        :title => l(:button_edit) %>
     <%= link_to image_tag('delete.png'), {:controller => 'timelog', :action => 'destroy', :id => entry, :project_id => nil},
                                          :confirm => l(:text_are_you_sure),
-                                         :method => :post,
+                                         :method => :delete,
                                          :title => l(:button_delete) %>
 <% end -%>
 </td>
--- a/app/views/timelog/.svn/text-base/_report_criteria.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-<% @hours.collect {|h| h[criterias[level]].to_s}.uniq.each do |value| %>
-<% hours_for_value = select_hours(hours, criterias[level], value) -%>
-<% next if hours_for_value.empty? -%>
-<tr class="<%= cycle('odd', 'even') %> <%= 'last-level' unless criterias.length > level+1 %>">
-<%= '<td></td>' * level %>
-<td><%= h(format_criteria_value(criterias[level], value)) %></td>
-<%= '<td></td>' * (criterias.length - level - 1) -%>
-  <% total = 0 -%>
-  <% @periods.each do |period| -%>
-    <% sum = sum_hours(select_hours(hours_for_value, @columns, period.to_s)); total += sum -%>
-    <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
-  <% end -%>
-  <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
-</tr>
-<% if criterias.length > level+1 -%>
-  <%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %>
-<% end -%>
-
-<% end %>
--- a/app/views/timelog/.svn/text-base/details.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-<div class="contextual">
-<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
-</div>
-
-<%= render_timelog_breadcrumb %>
-
-<h2><%= l(:label_spent_time) %></h2>
-
-<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %>
-<%# TOOD: remove the project_id and issue_id hidden fields, that information is
-already in the URI %>
-<%= hidden_field_tag('project_id', params[:project_id]) if @project %>
-<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %>
-<%= render :partial => 'date_range' %>
-<% end %>
-
-<div class="total-hours">
-<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
-</div>
-
-<% unless @entries.empty? %>
-<%= render :partial => 'list', :locals => { :entries => @entries }%>
-<p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p>
-
-<% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %>
-	<%= f.link_to 'CSV', :url => params %>
-<% end %>
-<% end %>
-
-<% html_title l(:label_spent_time), l(:label_details) %>
-
-<% content_for :header_tags do %>
-    <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %>
-<% end %>
--- a/app/views/timelog/.svn/text-base/edit.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/timelog/.svn/text-base/edit.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,6 +1,11 @@
 <h2><%= l(:label_spent_time) %></h2>
 
-<% labelled_tabular_form_for :time_entry, @time_entry, :url => {:action => 'edit', :id => @time_entry, :project_id => @time_entry.project} do |f| %>
+<% labelled_tabular_form_for(:time_entry, @time_entry, :url => {
+                               :action => (@time_entry.new_record? ? 'create' : 'update'),
+                               :id => @time_entry,
+                               :project_id => @time_entry.project
+                             },
+                             :html => {:method => @time_entry.new_record? ? :post : :put}) do |f| %>
 <%= error_messages_for 'time_entry' %>
 <%= back_url_hidden_field_tag %>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/timelog/.svn/text-base/index.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,35 @@
+<div class="contextual">
+<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
+</div>
+
+<%= render_timelog_breadcrumb %>
+
+<h2><%= l(:label_spent_time) %></h2>
+
+<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %>
+<%# TOOD: remove the project_id and issue_id hidden fields, that information is
+already in the URI %>
+<%= hidden_field_tag('project_id', params[:project_id]) if @project %>
+<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %>
+<%= render :partial => 'date_range' %>
+<% end %>
+
+<div class="total-hours">
+<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
+</div>
+
+<% unless @entries.empty? %>
+<%= render :partial => 'list', :locals => { :entries => @entries }%>
+<p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p>
+
+<% other_formats_links do |f| %>
+	<%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %>
+	<%= f.link_to 'CSV', :url => params %>
+<% end %>
+<% end %>
+
+<% html_title l(:label_spent_time), l(:label_details) %>
+
+<% content_for :header_tags do %>
+    <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %>
+<% end %>
--- a/app/views/timelog/.svn/text-base/report.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-<div class="contextual">
-<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
-</div>
-
-<%= render_timelog_breadcrumb %>
-
-<h2><%= l(:label_spent_time) %></h2>
-
-<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %>
-  <% @criterias.each do |criteria| %>
-    <%= hidden_field_tag 'criterias[]', criteria, :id => nil %>
-  <% end %>
-  <%# TODO: get rid of the project_id field, that should already be in the URL %>
-  <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
-  <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %>
-  <%= render :partial => 'date_range' %>
-
-  <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'],
-                                                                            [l(:label_month), 'month'],
-                                                                            [l(:label_week), 'week'],
-                                                                            [l(:label_day_plural).titleize, 'day']], @columns),
-                                                        :onchange => "this.form.onsubmit();" %>
-
-  <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}),
-                                                          :onchange => "this.form.onsubmit();",
-                                                          :style => 'width: 200px',
-                                                          :id => nil,
-                                                          :disabled => (@criterias.length >= 3)) %>
-     <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns},
-                                           :method => :get,
-                                           :update => 'content'
-                                          }, :class => 'icon icon-reload' %></p>
-<% end %>
-
-<% unless @criterias.empty? %>
-<div class="total-hours">
-<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
-</div>
-
-<% unless @hours.empty? %>
-<table class="list" id="time-report">
-<thead>
-<tr>
-<% @criterias.each do |criteria| %>
-  <th><%= l_or_humanize(@available_criterias[criteria][:label]) %></th>
-<% end %>
-<% columns_width = (40 / (@periods.length+1)).to_i %>
-<% @periods.each do |period| %>
-  <th class="period" width="<%= columns_width %>%"><%= period %></th>
-<% end %>
-  <th class="total" width="<%= columns_width %>%"><%= l(:label_total) %></th>
-</tr>
-</thead>
-<tbody>
-<%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %>
-  <tr class="total">
-  <td><%= l(:label_total) %></td>
-  <%= '<td></td>' * (@criterias.size - 1) %>
-  <% total = 0 -%>
-  <% @periods.each do |period| -%>
-    <% sum = sum_hours(select_hours(@hours, @columns, period.to_s)); total += sum -%>
-    <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
-  <% end -%>
-  <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
-  </tr>
-</tbody>
-</table>
-
-<% other_formats_links do |f| %>
-	<%= f.link_to 'CSV', :url => params %>
-<% end %>
-<% end %>
-<% end %>
-
-<% html_title l(:label_spent_time), l(:label_report) %>
-
--- a/app/views/timelog/_date_range.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/timelog/_date_range.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -28,9 +28,9 @@
 <div class="tabs">
 <% url_params = @free_period ? { :from => @from, :to => @to } : { :period => params[:period] } %>
 <ul>
-    <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'details', :project_id => @project, :issue_id => @issue }),
-                                       :class => (@controller.action_name == 'details' ? 'selected' : nil)) %></li>
-    <li><%= link_to(l(:label_report), url_params.merge({:controller => 'timelog', :action => 'report', :project_id => @project, :issue_id => @issue}),
+    <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue }),
+                                       :class => (@controller.action_name == 'index' ? 'selected' : nil)) %></li>
+    <li><%= link_to(l(:label_report), url_params.merge({:controller => 'time_entry_reports', :action => 'report', :project_id => @project, :issue_id => @issue}),
                                        :class => (@controller.action_name == 'report' ? 'selected' : nil)) %></li>
 </ul>
 </div>
--- a/app/views/timelog/_list.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/timelog/_list.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -31,7 +31,7 @@
                                        :title => l(:button_edit) %>
     <%= link_to image_tag('delete.png'), {:controller => 'timelog', :action => 'destroy', :id => entry, :project_id => nil},
                                          :confirm => l(:text_are_you_sure),
-                                         :method => :post,
+                                         :method => :delete,
                                          :title => l(:button_delete) %>
 <% end -%>
 </td>
--- a/app/views/timelog/_report_criteria.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-<% @hours.collect {|h| h[criterias[level]].to_s}.uniq.each do |value| %>
-<% hours_for_value = select_hours(hours, criterias[level], value) -%>
-<% next if hours_for_value.empty? -%>
-<tr class="<%= cycle('odd', 'even') %> <%= 'last-level' unless criterias.length > level+1 %>">
-<%= '<td></td>' * level %>
-<td><%= h(format_criteria_value(criterias[level], value)) %></td>
-<%= '<td></td>' * (criterias.length - level - 1) -%>
-  <% total = 0 -%>
-  <% @periods.each do |period| -%>
-    <% sum = sum_hours(select_hours(hours_for_value, @columns, period.to_s)); total += sum -%>
-    <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
-  <% end -%>
-  <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
-</tr>
-<% if criterias.length > level+1 -%>
-  <%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %>
-<% end -%>
-
-<% end %>
--- a/app/views/timelog/details.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-<div class="contextual">
-<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
-</div>
-
-<%= render_timelog_breadcrumb %>
-
-<h2><%= l(:label_spent_time) %></h2>
-
-<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %>
-<%# TOOD: remove the project_id and issue_id hidden fields, that information is
-already in the URI %>
-<%= hidden_field_tag('project_id', params[:project_id]) if @project %>
-<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %>
-<%= render :partial => 'date_range' %>
-<% end %>
-
-<div class="total-hours">
-<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
-</div>
-
-<% unless @entries.empty? %>
-<%= render :partial => 'list', :locals => { :entries => @entries }%>
-<p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p>
-
-<% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %>
-	<%= f.link_to 'CSV', :url => params %>
-<% end %>
-<% end %>
-
-<% html_title l(:label_spent_time), l(:label_details) %>
-
-<% content_for :header_tags do %>
-    <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %>
-<% end %>
--- a/app/views/timelog/edit.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/timelog/edit.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,6 +1,11 @@
 <h2><%= l(:label_spent_time) %></h2>
 
-<% labelled_tabular_form_for :time_entry, @time_entry, :url => {:action => 'edit', :id => @time_entry, :project_id => @time_entry.project} do |f| %>
+<% labelled_tabular_form_for(:time_entry, @time_entry, :url => {
+                               :action => (@time_entry.new_record? ? 'create' : 'update'),
+                               :id => @time_entry,
+                               :project_id => @time_entry.project
+                             },
+                             :html => {:method => @time_entry.new_record? ? :post : :put}) do |f| %>
 <%= error_messages_for 'time_entry' %>
 <%= back_url_hidden_field_tag %>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/timelog/index.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,35 @@
+<div class="contextual">
+<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
+</div>
+
+<%= render_timelog_breadcrumb %>
+
+<h2><%= l(:label_spent_time) %></h2>
+
+<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %>
+<%# TOOD: remove the project_id and issue_id hidden fields, that information is
+already in the URI %>
+<%= hidden_field_tag('project_id', params[:project_id]) if @project %>
+<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %>
+<%= render :partial => 'date_range' %>
+<% end %>
+
+<div class="total-hours">
+<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
+</div>
+
+<% unless @entries.empty? %>
+<%= render :partial => 'list', :locals => { :entries => @entries }%>
+<p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p>
+
+<% other_formats_links do |f| %>
+	<%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %>
+	<%= f.link_to 'CSV', :url => params %>
+<% end %>
+<% end %>
+
+<% html_title l(:label_spent_time), l(:label_details) %>
+
+<% content_for :header_tags do %>
+    <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %>
+<% end %>
--- a/app/views/timelog/report.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-<div class="contextual">
-<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
-</div>
-
-<%= render_timelog_breadcrumb %>
-
-<h2><%= l(:label_spent_time) %></h2>
-
-<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %>
-  <% @criterias.each do |criteria| %>
-    <%= hidden_field_tag 'criterias[]', criteria, :id => nil %>
-  <% end %>
-  <%# TODO: get rid of the project_id field, that should already be in the URL %>
-  <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
-  <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %>
-  <%= render :partial => 'date_range' %>
-
-  <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'],
-                                                                            [l(:label_month), 'month'],
-                                                                            [l(:label_week), 'week'],
-                                                                            [l(:label_day_plural).titleize, 'day']], @columns),
-                                                        :onchange => "this.form.onsubmit();" %>
-
-  <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}),
-                                                          :onchange => "this.form.onsubmit();",
-                                                          :style => 'width: 200px',
-                                                          :id => nil,
-                                                          :disabled => (@criterias.length >= 3)) %>
-     <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns},
-                                           :method => :get,
-                                           :update => 'content'
-                                          }, :class => 'icon icon-reload' %></p>
-<% end %>
-
-<% unless @criterias.empty? %>
-<div class="total-hours">
-<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
-</div>
-
-<% unless @hours.empty? %>
-<table class="list" id="time-report">
-<thead>
-<tr>
-<% @criterias.each do |criteria| %>
-  <th><%= l_or_humanize(@available_criterias[criteria][:label]) %></th>
-<% end %>
-<% columns_width = (40 / (@periods.length+1)).to_i %>
-<% @periods.each do |period| %>
-  <th class="period" width="<%= columns_width %>%"><%= period %></th>
-<% end %>
-  <th class="total" width="<%= columns_width %>%"><%= l(:label_total) %></th>
-</tr>
-</thead>
-<tbody>
-<%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %>
-  <tr class="total">
-  <td><%= l(:label_total) %></td>
-  <%= '<td></td>' * (@criterias.size - 1) %>
-  <% total = 0 -%>
-  <% @periods.each do |period| -%>
-    <% sum = sum_hours(select_hours(@hours, @columns, period.to_s)); total += sum -%>
-    <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
-  <% end -%>
-  <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
-  </tr>
-</tbody>
-</table>
-
-<% other_formats_links do |f| %>
-	<%= f.link_to 'CSV', :url => params %>
-<% end %>
-<% end %>
-<% end %>
-
-<% html_title l(:label_spent_time), l(:label_report) %>
-
--- a/app/views/trackers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/trackers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/trackers
 http://redmine.rubyforge.org/svn
 
--- a/app/views/users/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 40
-/svn/!svn/ver/4047/trunk/app/views/users
+/svn/!svn/ver/4382/trunk/app/views/users
 END
 _general.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/3037/trunk/app/views/users/_general.rhtml
+/svn/!svn/ver/4249/trunk/app/views/users/_general.rhtml
 END
 _memberships.rhtml
 K 25
@@ -19,35 +19,47 @@
 K 25
 svn:wc:ra_dav:version-url
 V 54
-/svn/!svn/ver/3160/trunk/app/views/users/_groups.rhtml
+/svn/!svn/ver/4230/trunk/app/views/users/_groups.rhtml
+END
+new.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/4229/trunk/app/views/users/new.html.erb
+END
+_mail_notifications.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 69
+/svn/!svn/ver/4223/trunk/app/views/users/_mail_notifications.html.erb
 END
 show.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/4047/trunk/app/views/users/show.rhtml
+/svn/!svn/ver/4382/trunk/app/views/users/show.rhtml
 END
 _form.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/3037/trunk/app/views/users/_form.rhtml
+/svn/!svn/ver/4223/trunk/app/views/users/_form.rhtml
 END
 edit.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/3495/trunk/app/views/users/edit.rhtml
+/svn/!svn/ver/4231/trunk/app/views/users/edit.rhtml
+END
+_preferences.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/4223/trunk/app/views/users/_preferences.html.erb
 END
 index.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/3600/trunk/app/views/users/index.rhtml
+/svn/!svn/ver/4231/trunk/app/views/users/index.rhtml
 END
-add.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3204/trunk/app/views/users/add.rhtml
-END
--- a/app/views/users/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/users
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-27T14:05:54.014502Z
-4047
-edavis10
+2010-11-07T14:15:01.891476Z
+4382
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-23T14:37:44.699769Z
-1ab6a8599eeede034b90f463a85d1042
-2009-11-13T18:11:10.447527Z
-3037
-jplang
+2010-11-19T13:04:49.388892Z
+27e27971f72ee72e276157b29606a4f8
+2010-10-11T20:34:33.692909Z
+4249
+jbbarth
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-398
+421
 
 _memberships.rhtml
 file
@@ -100,11 +100,11 @@
 
 
 
-2010-09-23T14:37:44.699769Z
-fd7d948f1de9d087496cfb8f01ff76db
-2009-12-12T11:05:06.206786Z
-3160
-jplang
+2010-11-19T13:04:49.388892Z
+f19cc195f524459954b4b4be5bfdcff5
+2010-09-30T18:22:46.611444Z
+4230
+edavis10
 has-props
 
 
@@ -126,7 +126,75 @@
 
 
 
-336
+366
+
+new.html.erb
+file
+
+
+
+
+2010-11-19T13:04:49.388892Z
+488647d93840c1ffa5834cc45817c1c3
+2010-09-29T16:00:45.891709Z
+4229
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+530
+
+_mail_notifications.html.erb
+file
+
+
+
+
+2010-11-19T13:04:49.388892Z
+9617ce493c6f68e4a861de49a13fc0b1
+2010-09-28T22:13:06.534232Z
+4223
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+872
 
 show.rhtml
 file
@@ -134,11 +202,11 @@
 
 
 
-2010-09-24T12:48:26.319756Z
-a56205296f0730d3ca46c249abcab568
-2010-08-27T14:05:54.014502Z
-4047
-edavis10
+2010-11-19T13:04:49.388892Z
+1914aa4c363a1dab0cdba1e49ccc13ff
+2010-11-07T14:15:01.891476Z
+4382
+jplang
 has-props
 
 
@@ -160,7 +228,7 @@
 
 
 
-2598
+2584
 
 _form.rhtml
 file
@@ -168,11 +236,11 @@
 
 
 
-2010-09-23T14:37:44.699769Z
-e0a6a33bb1cfe7131245520d553108e4
-2009-11-13T18:11:10.447527Z
-3037
-jplang
+2010-11-19T13:04:49.388892Z
+ac91549a6b11efcad3478c0c17248508
+2010-09-28T22:13:06.534232Z
+4223
+edavis10
 has-props
 
 
@@ -194,7 +262,7 @@
 
 
 
-1583
+1820
 
 edit.rhtml
 file
@@ -202,11 +270,11 @@
 
 
 
-2010-09-23T14:37:44.703792Z
-029f53d8ee91ea4b11874008ee6f3a71
-2010-02-26T16:01:04.817813Z
-3495
-jplang
+2010-11-19T13:04:49.392852Z
+25485f87d56ef17bf204588edb4a0bed
+2010-10-04T15:36:16.880272Z
+4231
+edavis10
 has-props
 
 
@@ -228,7 +296,41 @@
 
 
 
-416
+375
+
+_preferences.html.erb
+file
+
+
+
+
+2010-11-19T13:04:49.392852Z
+ebc1d625f2d6809ea491e7303f758e7a
+2010-09-28T22:13:06.534232Z
+4223
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+441
 
 index.rhtml
 file
@@ -236,11 +338,11 @@
 
 
 
-2010-09-23T14:37:44.703792Z
-16c60ad979f898ab6bfce6739979836c
-2010-03-17T20:46:22.413470Z
-3600
-jplang
+2010-11-19T13:04:49.392852Z
+ef23d8be0fbbefff33820156bb8f422a
+2010-10-04T15:36:16.880272Z
+4231
+edavis10
 has-props
 
 
@@ -262,39 +364,5 @@
 
 
 
-2162
+2152
 
-add.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.703792Z
-bcadf1f2d1761aa7cdd622920597f4bb
-2009-12-20T10:51:33.049429Z
-3204
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-527
-
--- a/app/views/users/.svn/prop-base/add.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/users/.svn/prop-base/new.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- a/app/views/users/.svn/text-base/_form.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/.svn/text-base/_form.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -32,4 +32,14 @@
 <%= password_field_tag 'password_confirmation', nil, :size => 25  %></p>
 </div>
 </div>
+
+<div class="box">
+<h3><%=l(:field_mail_notification)%></h3>
+<%= render :partial => 'users/mail_notifications' %>
+</div>
+
+<div class="box tabular">
+<h3><%=l(:label_preferences)%></h3>
+<%= render :partial => 'users/preferences' %>
+</div>
 <!--[eoform:user]-->
--- a/app/views/users/.svn/text-base/_general.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/.svn/text-base/_general.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
-<% labelled_tabular_form_for :user, @user, :url => { :controller => 'users', :action => "edit", :tab => nil }, :html => { :class => nil } do |f| %>
+<% labelled_tabular_form_for :user, @user, :url => { :controller => 'users', :action => "update", :tab => nil }, :html => { :method => :put, :class => nil } do |f| %>
 	<%= render :partial => 'form', :locals => { :f => f } %>
 	<% if @user.active? -%>
-		<p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label>
+		<p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p>
 	<% end -%>
 	<p><%= submit_tag l(:button_save) %></p>
 <% end %>
--- a/app/views/users/.svn/text-base/_groups.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/.svn/text-base/_groups.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,4 +1,4 @@
-<% form_for(:user, :url => { :action => 'edit' }) do %>
+<% form_for(:user, :url => { :action => 'update' }, :html => {:method => :put}) do %>
 <div class="box">
 <% Group.all.sort.each do |group| %>
 <label><%= check_box_tag 'user[group_ids][]', group.id, @user.groups.include?(group) %> <%=h group %></label><br />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/users/.svn/text-base/_mail_notifications.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,12 @@
+<p>
+<%= select_tag 'notification_option', options_for_select(@notification_options.collect {|o| [l(o.last), o.first]}, @notification_option.to_sym),
+                                      :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %>
+</p>
+<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %>
+<p><% @user.projects.each do |project| %>
+    <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br />
+<% end %></p>
+<p><em><%= l(:text_user_mail_option) %></em></p>
+<% end %>
+<p><label><%= l(:label_user_mail_no_self_notified) %></label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %></p>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/users/.svn/text-base/_preferences.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,6 @@
+<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %>
+<p><%= pref_fields.check_box :hide_mail %></p>
+<p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p>
+<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p>
+<% end %>
+
--- a/app/views/users/.svn/text-base/add.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-<h2><%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> &#187; <%=l(:label_user_new)%></h2>
-
-<% labelled_tabular_form_for :user, @user, :url => { :action => "add" }, :html => { :class => nil } do |f| %>
-	<%= render :partial => 'form', :locals => { :f => f } %>
-	<p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p>
-	<p>
-		<%= submit_tag l(:button_create) %>
-		<%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
-	</p>
-<% end %>
--- a/app/views/users/.svn/text-base/edit.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/.svn/text-base/edit.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 <div class="contextual">
-<%= link_to l(:label_profile), {:controller => 'users', :action => 'show', :id => @user}, :class => 'icon icon-user' %>
+<%= link_to l(:label_profile), user_path(@user), :class => 'icon icon-user' %>
 <%= change_status_link(@user) %>
 </div>
 
--- a/app/views/users/.svn/text-base/index.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/.svn/text-base/index.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 <div class="contextual">
-<%= link_to l(:label_user_new), {:action => 'add'}, :class => 'icon icon-add' %>
+<%= link_to l(:label_user_new), {:action => 'new'}, :class => 'icon icon-add' %>
 </div>
 
 <h2><%=l(:label_user_plural)%></h2>
@@ -30,7 +30,7 @@
   <tbody>
 <% for user in @users -%>
   <tr class="user <%= cycle("odd", "even") %> <%= %w(anon active registered locked)[user.status] %>">
-	<td class="username"><%= avatar(user, :size => "14") %><%= link_to h(user.login), :action => 'edit', :id => user %></td>
+	<td class="username"><%= avatar(user, :size => "14") %><%= link_to h(user.login), edit_user_path(user) %></td>
 	<td class="firstname"><%= h(user.firstname) %></td>
 	<td class="lastname"><%= h(user.lastname) %></td>
 	<td class="email"><%= mail_to(h(user.mail)) %></td>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/users/.svn/text-base/new.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,10 @@
+<h2><%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> &#187; <%=l(:label_user_new)%></h2>
+
+<% labelled_tabular_form_for :user, @user, :url => { :action => "create" }, :html => { :class => nil } do |f| %>
+	<%= render :partial => 'form', :locals => { :f => f } %>
+	<p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p>
+	<p>
+		<%= submit_tag l(:button_create) %>
+		<%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
+	</p>
+<% end %>
--- a/app/views/users/.svn/text-base/show.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/.svn/text-base/show.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 <div class="contextual">
-<%= link_to(l(:button_edit), {:controller => 'users', :action => 'edit', :id => @user}, :class => 'icon icon-edit') if User.current.admin? %>
+<%= link_to(l(:button_edit), edit_user_path(@user), :class => 'icon icon-edit') if User.current.admin? %>
 </div>
 
 <h2><%= avatar @user, :size => "50" %> <%=h @user.name %></h2>
@@ -9,7 +9,7 @@
 	<% unless @user.pref.hide_mail %>
 		<li><%=l(:field_mail)%>: <%= mail_to(h(@user.mail), nil, :encode => 'javascript') %></li>
 	<% end %>
-	<% for custom_value in @custom_values %>
+	<% @user.visible_custom_field_values.each do |custom_value| %>
 	<% if !custom_value.value.blank? %>
     <li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
 	<% end %>
--- a/app/views/users/_form.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/_form.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -32,4 +32,14 @@
 <%= password_field_tag 'password_confirmation', nil, :size => 25  %></p>
 </div>
 </div>
+
+<div class="box">
+<h3><%=l(:field_mail_notification)%></h3>
+<%= render :partial => 'users/mail_notifications' %>
+</div>
+
+<div class="box tabular">
+<h3><%=l(:label_preferences)%></h3>
+<%= render :partial => 'users/preferences' %>
+</div>
 <!--[eoform:user]-->
--- a/app/views/users/_general.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/_general.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
-<% labelled_tabular_form_for :user, @user, :url => { :controller => 'users', :action => "edit", :tab => nil }, :html => { :class => nil } do |f| %>
+<% labelled_tabular_form_for :user, @user, :url => { :controller => 'users', :action => "update", :tab => nil }, :html => { :method => :put, :class => nil } do |f| %>
 	<%= render :partial => 'form', :locals => { :f => f } %>
 	<% if @user.active? -%>
-		<p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label>
+		<p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p>
 	<% end -%>
 	<p><%= submit_tag l(:button_save) %></p>
 <% end %>
--- a/app/views/users/_groups.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/_groups.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,4 +1,4 @@
-<% form_for(:user, :url => { :action => 'edit' }) do %>
+<% form_for(:user, :url => { :action => 'update' }, :html => {:method => :put}) do %>
 <div class="box">
 <% Group.all.sort.each do |group| %>
 <label><%= check_box_tag 'user[group_ids][]', group.id, @user.groups.include?(group) %> <%=h group %></label><br />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/users/_mail_notifications.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,12 @@
+<p>
+<%= select_tag 'notification_option', options_for_select(@notification_options.collect {|o| [l(o.last), o.first]}, @notification_option.to_sym),
+                                      :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %>
+</p>
+<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %>
+<p><% @user.projects.each do |project| %>
+    <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br />
+<% end %></p>
+<p><em><%= l(:text_user_mail_option) %></em></p>
+<% end %>
+<p><label><%= l(:label_user_mail_no_self_notified) %></label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %></p>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/users/_preferences.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,6 @@
+<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %>
+<p><%= pref_fields.check_box :hide_mail %></p>
+<p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p>
+<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p>
+<% end %>
+
--- a/app/views/users/add.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-<h2><%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> &#187; <%=l(:label_user_new)%></h2>
-
-<% labelled_tabular_form_for :user, @user, :url => { :action => "add" }, :html => { :class => nil } do |f| %>
-	<%= render :partial => 'form', :locals => { :f => f } %>
-	<p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p>
-	<p>
-		<%= submit_tag l(:button_create) %>
-		<%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
-	</p>
-<% end %>
--- a/app/views/users/edit.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/edit.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 <div class="contextual">
-<%= link_to l(:label_profile), {:controller => 'users', :action => 'show', :id => @user}, :class => 'icon icon-user' %>
+<%= link_to l(:label_profile), user_path(@user), :class => 'icon icon-user' %>
 <%= change_status_link(@user) %>
 </div>
 
--- a/app/views/users/index.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/index.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 <div class="contextual">
-<%= link_to l(:label_user_new), {:action => 'add'}, :class => 'icon icon-add' %>
+<%= link_to l(:label_user_new), {:action => 'new'}, :class => 'icon icon-add' %>
 </div>
 
 <h2><%=l(:label_user_plural)%></h2>
@@ -30,7 +30,7 @@
   <tbody>
 <% for user in @users -%>
   <tr class="user <%= cycle("odd", "even") %> <%= %w(anon active registered locked)[user.status] %>">
-	<td class="username"><%= avatar(user, :size => "14") %><%= link_to h(user.login), :action => 'edit', :id => user %></td>
+	<td class="username"><%= avatar(user, :size => "14") %><%= link_to h(user.login), edit_user_path(user) %></td>
 	<td class="firstname"><%= h(user.firstname) %></td>
 	<td class="lastname"><%= h(user.lastname) %></td>
 	<td class="email"><%= mail_to(h(user.mail)) %></td>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/users/new.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,10 @@
+<h2><%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> &#187; <%=l(:label_user_new)%></h2>
+
+<% labelled_tabular_form_for :user, @user, :url => { :action => "create" }, :html => { :class => nil } do |f| %>
+	<%= render :partial => 'form', :locals => { :f => f } %>
+	<p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p>
+	<p>
+		<%= submit_tag l(:button_create) %>
+		<%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
+	</p>
+<% end %>
--- a/app/views/users/show.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/users/show.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 <div class="contextual">
-<%= link_to(l(:button_edit), {:controller => 'users', :action => 'edit', :id => @user}, :class => 'icon icon-edit') if User.current.admin? %>
+<%= link_to(l(:button_edit), edit_user_path(@user), :class => 'icon icon-edit') if User.current.admin? %>
 </div>
 
 <h2><%= avatar @user, :size => "50" %> <%=h @user.name %></h2>
@@ -9,7 +9,7 @@
 	<% unless @user.pref.hide_mail %>
 		<li><%=l(:field_mail)%>: <%= mail_to(h(@user.mail), nil, :encode => 'javascript') %></li>
 	<% end %>
-	<% for custom_value in @custom_values %>
+	<% @user.visible_custom_field_values.each do |custom_value| %>
 	<% if !custom_value.value.blank? %>
     <li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
 	<% end %>
--- a/app/views/versions/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/versions/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 43
-/svn/!svn/ver/4101/trunk/app/views/versions
+/svn/!svn/ver/4307/trunk/app/views/versions
 END
 index.html.erb
 K 25
@@ -19,7 +19,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 54
-/svn/!svn/ver/4101/trunk/app/views/versions/show.rhtml
+/svn/!svn/ver/4307/trunk/app/views/versions/show.rhtml
 END
 _form.rhtml
 K 25
--- a/app/views/versions/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/versions/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/versions
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-18T17:30:22.509570Z
-4101
+2010-10-29T22:40:02.439890Z
+4307
 jbbarth
 
 
@@ -100,10 +100,10 @@
 
 
 
-2010-09-24T12:48:28.303878Z
-ead91e611c5c576ba9128ca9bd97277f
-2010-09-18T17:30:22.509570Z
-4101
+2010-11-19T13:04:49.396842Z
+ae897448ea943e1856633a3683c17a79
+2010-10-29T22:40:02.439890Z
+4307
 jbbarth
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-1954
+1993
 
 _form.rhtml
 file
--- a/app/views/versions/.svn/text-base/show.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/versions/.svn/text-base/show.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,6 +1,6 @@
 <div class="contextual">
 <%= link_to_if_authorized l(:button_edit), {:controller => 'versions', :action => 'edit', :id => @version}, :class => 'icon icon-edit' %>
-<%= link_to_if_authorized(l(:button_edit_associated_wikipage, :page_title => @version.wiki_page_title), {:controller => 'wiki', :action => 'edit', :page => Wiki.titleize(@version.wiki_page_title)}, :class => 'icon icon-edit') unless @version.wiki_page_title.blank? || @project.wiki.nil? %>
+<%= link_to_if_authorized(l(:button_edit_associated_wikipage, :page_title => @version.wiki_page_title), {:controller => 'wiki', :action => 'edit', :project_id => @version.project, :id => Wiki.titleize(@version.wiki_page_title)}, :class => 'icon icon-edit') unless @version.wiki_page_title.blank? || @version.project.wiki.nil? %>
 <%= call_hook(:view_versions_show_contextual, { :version => @version, :project => @project }) %>
 </div>
 
--- a/app/views/versions/show.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/versions/show.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,6 +1,6 @@
 <div class="contextual">
 <%= link_to_if_authorized l(:button_edit), {:controller => 'versions', :action => 'edit', :id => @version}, :class => 'icon icon-edit' %>
-<%= link_to_if_authorized(l(:button_edit_associated_wikipage, :page_title => @version.wiki_page_title), {:controller => 'wiki', :action => 'edit', :page => Wiki.titleize(@version.wiki_page_title)}, :class => 'icon icon-edit') unless @version.wiki_page_title.blank? || @project.wiki.nil? %>
+<%= link_to_if_authorized(l(:button_edit_associated_wikipage, :page_title => @version.wiki_page_title), {:controller => 'wiki', :action => 'edit', :project_id => @version.project, :id => Wiki.titleize(@version.wiki_page_title)}, :class => 'icon icon-edit') unless @version.wiki_page_title.blank? || @version.project.wiki.nil? %>
 <%= call_hook(:view_versions_show_contextual, { :version => @version, :project => @project }) %>
 </div>
 
--- a/app/views/watchers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/watchers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/watchers
 http://redmine.rubyforge.org/svn
 
--- a/app/views/welcome/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/welcome/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/welcome
 http://redmine.rubyforge.org/svn
 
--- a/app/views/wiki/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 39
-/svn/!svn/ver/4092/trunk/app/views/wiki
+/svn/!svn/ver/4375/trunk/app/views/wiki
 END
 export_multiple.rhtml
 K 25
@@ -9,11 +9,17 @@
 V 61
 /svn/!svn/ver/3026/trunk/app/views/wiki/export_multiple.rhtml
 END
+index.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/4290/trunk/app/views/wiki/index.html.erb
+END
 show.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 50
-/svn/!svn/ver/3371/trunk/app/views/wiki/show.rhtml
+/svn/!svn/ver/4303/trunk/app/views/wiki/show.rhtml
 END
 export.rhtml
 K 25
@@ -25,43 +31,31 @@
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/3559/trunk/app/views/wiki/history.rhtml
-END
-special_page_index.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4092/trunk/app/views/wiki/special_page_index.rhtml
-END
-special_date_index.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4047/trunk/app/views/wiki/special_date_index.rhtml
+/svn/!svn/ver/4303/trunk/app/views/wiki/history.rhtml
 END
 edit.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 50
-/svn/!svn/ver/3500/trunk/app/views/wiki/edit.rhtml
+/svn/!svn/ver/4303/trunk/app/views/wiki/edit.rhtml
 END
 rename.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/1698/trunk/app/views/wiki/rename.rhtml
+/svn/!svn/ver/4375/trunk/app/views/wiki/rename.rhtml
 END
 _sidebar.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 54
-/svn/!svn/ver/3632/trunk/app/views/wiki/_sidebar.rhtml
+/svn/!svn/ver/4296/trunk/app/views/wiki/_sidebar.rhtml
 END
 diff.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 50
-/svn/!svn/ver/3128/trunk/app/views/wiki/diff.rhtml
+/svn/!svn/ver/4296/trunk/app/views/wiki/diff.rhtml
 END
 _content.rhtml
 K 25
@@ -73,11 +67,17 @@
 K 25
 svn:wc:ra_dav:version-url
 V 54
-/svn/!svn/ver/3585/trunk/app/views/wiki/annotate.rhtml
+/svn/!svn/ver/4296/trunk/app/views/wiki/annotate.rhtml
 END
 destroy.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/2676/trunk/app/views/wiki/destroy.rhtml
+/svn/!svn/ver/4296/trunk/app/views/wiki/destroy.rhtml
 END
+date_index.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/4303/trunk/app/views/wiki/date_index.html.erb
+END
--- a/app/views/wiki/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/wiki
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-16T21:26:30.564728Z
-4092
-jbbarth
+2010-11-06T14:30:32.528294Z
+4375
+jplang
 
 
 
@@ -60,17 +60,51 @@
 
 1176
 
+index.html.erb
+file
+
+
+
+
+2010-11-19T13:04:50.809800Z
+d47125b655bae6af3af29514ca23ec15
+2010-10-25T16:16:46.309025Z
+4290
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+894
+
 show.rhtml
 file
 
 
 
 
-2010-09-23T14:37:44.719778Z
-cd34ce34ba4d75de58ad8c2643dd1858
-2010-02-06T09:30:53.659842Z
-3371
-jplang
+2010-11-19T13:04:50.809800Z
+1ebc19864533a067dc46a3bc6f3e9b22
+2010-10-28T21:25:38.778234Z
+4303
+edavis10
 has-props
 
 
@@ -92,7 +126,7 @@
 
 
 
-3737
+3882
 
 export.rhtml
 file
@@ -134,78 +168,10 @@
 
 
 
-2010-09-23T14:37:44.719778Z
-00384fcdff6734983e2d36ed71f666bf
-2010-03-10T19:16:03.577089Z
-3559
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1495
-
-special_page_index.rhtml
-file
-
-
-
-
-2010-09-24T12:48:29.015971Z
-7c00c56b3b3fb34c4ebdc4d7f20c5e01
-2010-09-16T21:26:30.564728Z
-4092
-jbbarth
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-916
-
-special_date_index.rhtml
-file
-
-
-
-
-2010-09-24T12:48:29.015971Z
-a2538a8dea3592d9592ce74b95c88184
-2010-08-27T14:05:54.014502Z
-4047
+2010-11-19T13:04:50.812967Z
+d489789686b9d26149c0583f775ba238
+2010-10-28T21:25:38.778234Z
+4303
 edavis10
 has-props
 
@@ -228,7 +194,7 @@
 
 
 
-1113
+1582
 
 edit.rhtml
 file
@@ -236,11 +202,11 @@
 
 
 
-2010-09-23T14:37:44.719778Z
-f53404549c5ad3730761d4afd025c3bc
-2010-02-28T09:43:13.073123Z
-3500
-jplang
+2010-11-19T13:04:50.812967Z
+cc9828c34998619dbd4b4925bf511be8
+2010-10-28T21:25:38.778234Z
+4303
+edavis10
 has-props
 
 
@@ -262,7 +228,7 @@
 
 
 
-1260
+1282
 
 rename.rhtml
 file
@@ -270,10 +236,10 @@
 
 
 
-2010-09-23T14:37:44.719778Z
-9231847b74349b93a946c5046daa4bcb
-2008-07-26T11:46:24.917066Z
-1698
+2010-11-19T13:04:50.812967Z
+b45d32467f7beb06dbe055ecf7fdb247
+2010-11-06T14:30:32.528294Z
+4375
 jplang
 has-props
 
@@ -296,7 +262,7 @@
 
 
 
-429
+580
 
 _sidebar.rhtml
 file
@@ -304,11 +270,11 @@
 
 
 
-2010-09-23T14:37:44.719778Z
-baf90328359ee59f0123edd67897d66e
-2010-04-11T12:56:18.077630Z
-3632
-jplang
+2010-11-19T13:04:50.812967Z
+619db9d2a58a28c4b5c4baeaee88cc41
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
 has-props
 
 
@@ -330,7 +296,7 @@
 
 
 
-391
+343
 
 diff.rhtml
 file
@@ -338,11 +304,11 @@
 
 
 
-2010-09-23T14:37:44.719778Z
-a50fef8895fe6a7bf414f919d7dbec8b
-2009-12-06T17:04:33.026531Z
-3128
-jplang
+2010-11-19T13:04:50.812967Z
+0379bb47f37911b04eb8391f397ac4ec
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
 has-props
 
 
@@ -364,7 +330,7 @@
 
 
 
-827
+819
 
 _content.rhtml
 file
@@ -406,11 +372,11 @@
 
 
 
-2010-09-23T14:37:44.719778Z
-ea9a5c54a16a716cdc40736caac6d954
-2010-03-14T13:22:50.317701Z
-3585
-jplang
+2010-11-19T13:04:50.812967Z
+36a354ea1a705ec4843972e520ce2bd6
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
 has-props
 
 
@@ -432,7 +398,7 @@
 
 
 
-1214
+1212
 
 destroy.rhtml
 file
@@ -440,11 +406,11 @@
 
 
 
-2010-09-23T14:37:44.719778Z
-c4faab8bee0cd06ba2460db5f9333a32
-2009-04-21T12:19:56.547537Z
-2676
-jplang
+2010-11-19T13:04:50.812967Z
+5f032c821889bfc8bf9e6eeca1023f58
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
 has-props
 
 
@@ -466,5 +432,39 @@
 
 
 
-883
+908
 
+date_index.html.erb
+file
+
+
+
+
+2010-11-19T13:04:50.812967Z
+5edb3698546c4aad9913945d39005221
+2010-10-28T21:25:38.778234Z
+4303
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1117
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/wiki/.svn/prop-base/date_index.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/wiki/.svn/prop-base/index.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- a/app/views/wiki/.svn/prop-base/special_date_index.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/app/views/wiki/.svn/prop-base/special_page_index.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/app/views/wiki/.svn/text-base/_sidebar.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/.svn/text-base/_sidebar.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -4,6 +4,6 @@
 
 <h3><%= l(:label_wiki) %></h3>
 
-<%= link_to l(:field_start_page), {:action => 'index', :page => nil} %><br />
-<%= link_to l(:label_index_by_title), {:action => 'special', :page => 'Page_index'} %><br />
-<%= link_to l(:label_index_by_date), {:action => 'special', :page => 'Date_index'} %><br />
+<%= link_to l(:field_start_page), {:action => 'show', :id => nil} %><br />
+<%= link_to l(:label_index_by_title), {:action => 'index'} %><br />
+<%= link_to l(:label_index_by_date), {:action => 'date_index'} %><br />
--- a/app/views/wiki/.svn/text-base/annotate.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/.svn/text-base/annotate.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,12 +1,12 @@
 <div class="contextual">
-<%= link_to(l(:button_edit), {:action => 'edit', :page => @page.title}, :class => 'icon icon-edit') %>
-<%= link_to(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
+<%= link_to(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit') %>
+<%= link_to(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %>
 </div>
 
 <h2><%= @page.pretty_title %></h2>
 
 <p>
-<%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'index', :page => @page.title, :version => @annotate.content.version %>
+<%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'show', :id => @page.title, :version => @annotate.content.version %>
 <em>(<%= @annotate.content.author ? @annotate.content.author.name : "anonyme" %>, <%= format_time(@annotate.content.updated_on) %>)</em>
 </p>
 
@@ -18,7 +18,7 @@
 <% @annotate.lines.each do |line| -%>
 <tr class="bloc-<%= colors[line[0]] %>">
     <th class="line-num"><%= line_num %></th>
-    <td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'index', :id => @project, :page => @page.title, :version => line[0] %></td>
+    <td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'show', :project_id => @project, :id => @page.title, :version => line[0] %></td>
     <td class="author"><%= h(line[1]) %></td>
     <td class="line-code"><pre><%=h line[2] %></pre></td>
 </tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/wiki/.svn/text-base/date_index.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,33 @@
+<div class="contextual">
+<%= watcher_tag(@wiki, User.current) %>
+</div>
+
+<h2><%= l(:label_index_by_date) %></h2>
+
+<% if @pages.empty? %>
+<p class="nodata"><%= l(:label_no_data) %></p>
+<% end %>
+
+<% @pages_by_date.keys.sort.reverse.each do |date| %>
+<h3><%= format_date(date) %></h3>
+<ul>
+<% @pages_by_date[date].each do |page| %>
+    <li><%= link_to page.pretty_title, :action => 'show', :id => page.title, :project_id => page.project %></li>
+<% end %>
+</ul>
+<% end %>
+
+<% content_for :sidebar do %>
+  <%= render :partial => 'sidebar' %>
+<% end %>
+
+<% unless @pages.empty? %>
+<% other_formats_links do |f| %>
+	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
+	<%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
+<% end %>
+<% end %>
+
+<% content_for :header_tags do %>
+<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
+<% end %>
--- a/app/views/wiki/.svn/text-base/destroy.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/.svn/text-base/destroy.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,6 +1,6 @@
 <h2><%=h @page.pretty_title %></h2>
 
-<% form_tag({}) do %>
+<% form_tag({}, :method => :delete) do %>
 <div class="box">
 <p><strong><%= l(:text_wiki_page_destroy_question, :descendants => @descendants_count) %></strong></p>
 <p><label><%= radio_button_tag 'todo', 'nullify', true %> <%= l(:text_wiki_page_nullify_children) %></label><br />
@@ -15,5 +15,5 @@
 </div>
 
 <%= submit_tag l(:button_apply) %>
-<%= link_to l(:button_cancel), :controller => 'wiki', :action => 'index', :id => @project, :page => @page.title %>
+<%= link_to l(:button_cancel), :controller => 'wiki', :action => 'show', :project_id => @project, :id => @page.title %>
 <% end %>
--- a/app/views/wiki/.svn/text-base/diff.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/.svn/text-base/diff.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 <div class="contextual">
-<%= link_to(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
+<%= link_to(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %>
 </div>
 
 <h2><%= @page.pretty_title %></h2>
 
 <p>
-<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'index', :page => @page.title, :version => @diff.content_from.version %>
+<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'show', :id => @page.title, :version => @diff.content_from.version %>
 <em>(<%= @diff.content_from.author ? @diff.content_from.author.name : "anonyme" %>, <%= format_time(@diff.content_from.updated_on) %>)</em>
 &#8594;
-<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'index', :page => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %>
+<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'show', :id => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %>
 <em>(<%= @diff.content_to.author ? @diff.content_to.author.name : "anonyme" %>, <%= format_time(@diff.content_to.updated_on) %>)</em>
 </p>
 
--- a/app/views/wiki/.svn/text-base/edit.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/.svn/text-base/edit.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,6 +1,6 @@
 <h2><%=h @page.pretty_title %></h2>
 
-<% form_for :content, @content, :url => {:action => 'edit', :page => @page.title}, :html => {:multipart => true, :id => 'wiki_form'} do |f| %>
+<% form_for :content, @content, :url => {:action => 'update', :id => @page.title}, :html => {:method => :put, :multipart => true, :id => 'wiki_form'} do |f| %>
 <%= f.hidden_field :version %>
 <%= error_messages_for 'content' %>
 
@@ -10,8 +10,8 @@
 
 <p><%= submit_tag l(:button_save) %>
    <%= link_to_remote l(:label_preview), 
-                       { :url => { :controller => 'wiki', :action => 'preview', :id => @project, :page => @page.title },
-                         :method => 'post',
+                       { :url => { :controller => 'wiki', :action => 'preview', :project_id => @project, :id => @page.title },
+                         :method => :post,
                          :update => 'preview',
                          :with => "Form.serialize('wiki_form')",
                          :complete => "Element.scrollTo('preview')"
--- a/app/views/wiki/.svn/text-base/history.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/.svn/text-base/history.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -3,6 +3,7 @@
 <h3><%= l(:label_history) %></h3>
 
 <% form_tag({:action => "diff"}, :method => :get) do %>
+  <%= hidden_field_tag('project_id', h(@project.to_param)) %>
 <table class="list">
 <thead><tr>
     <th>#</th>
@@ -18,13 +19,13 @@
 <% line_num = 1 %>
 <% @versions.each do |ver| %>
 <tr class="<%= cycle("odd", "even") %>">
-    <td class="id"><%= link_to ver.version, :action => 'index', :page => @page.title, :version => ver.version %></td>
+    <td class="id"><%= link_to ver.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => ver.version %></td>
     <td class="checkbox"><%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < @versions.size) %></td>
     <td class="checkbox"><%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %></td>
     <td align="center"><%= format_time(ver.updated_on) %></td>
     <td><%= link_to_user ver.author %></td>
     <td><%=h ver.comments %></td>
-    <td align="center"><%= link_to l(:button_annotate), :action => 'annotate', :page => @page.title, :version => ver.version %></td>
+    <td align="center"><%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %></td>
 </tr>
 <% line_num += 1 %>
 <% end %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/wiki/.svn/text-base/index.html.erb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,26 @@
+<div class="contextual">
+<%= watcher_tag(@wiki, User.current) %>
+</div>
+
+<h2><%= l(:label_index_by_title) %></h2>
+
+<% if @pages.empty? %>
+<p class="nodata"><%= l(:label_no_data) %></p>
+<% end %>
+
+<%= render_page_hierarchy(@pages_by_parent_id) %>
+
+<% content_for :sidebar do %>
+  <%= render :partial => 'sidebar' %>
+<% end %>
+
+<% unless @pages.empty? %>
+<% other_formats_links do |f| %>
+	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
+	<%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
+<% end %>
+<% end %>
+
+<% content_for :header_tags do %>
+<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
+<% end %>
--- a/app/views/wiki/.svn/text-base/rename.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/.svn/text-base/rename.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -6,7 +6,7 @@
 <div class="box">
 <p><%= f.text_field :title, :required => true, :size => 100  %></p>
 <p><%= f.check_box :redirect_existing_links %></p>
-<p><%= f.text_field :parent_title, :size => 100  %></p>
+<p><%= f.select :parent_id, "<option value=''></option>" + wiki_page_options_for_select(@wiki.pages.all(:include => :parent) - @page.self_and_descendants, @page.parent), :label => :field_parent_title %></p>
 </div>
 <%= submit_tag l(:button_rename) %>
 <% end %>
--- a/app/views/wiki/.svn/text-base/show.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/.svn/text-base/show.rhtml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,25 +1,25 @@
 <div class="contextual">
 <% if @editable %>
-<%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :page => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %>
+<%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %>
 <%= watcher_tag(@page, User.current) %>
-<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :page => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %>
-<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :page => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %>
-<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :page => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %>
-<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :page => @page.title}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %>
-<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :page => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %>
+<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :id => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %>
+<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :id => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %>
+<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :id => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %>
+<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :id => @page.title}, :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %>
+<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :id => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %>
 <% end %>
-<%= link_to_if_authorized(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
+<%= link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %>
 </div>
 
-<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:page => parent.title}}) %>
+<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:id => parent.title, :project_id => parent.project}}) %>
 
 <% if @content.version != @page.content.version %>
     <p>    
-    <%= link_to(('&#171; ' + l(:label_previous)), :action => 'index', :page => @page.title, :version => (@content.version - 1)) + " - " if @content.version > 1 %>
+    <%= link_to(('&#171; ' + l(:label_previous)), :action => 'show', :id => @page.title, :project_id => @page.project, :version => (@content.version - 1)) + " - " if @content.version > 1 %>
     <%= "#{l(:label_version)} #{@content.version}/#{@page.content.version}" %>
-    <%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :page => @page.title, :version => @content.version) + ')' if @content.version > 1 %> - 
-    <%= link_to((l(:label_next) + ' &#187;'), :action => 'index', :page => @page.title, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %>
-    <%= link_to(l(:label_current_version), :action => 'index', :page => @page.title) %>
+    <%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :id => @page.title, :project_id => @page.project, :version => @content.version) + ')' if @content.version > 1 %> - 
+    <%= link_to((l(:label_next) + ' &#187;'), :action => 'show', :id => @page.title, :project_id => @page.project, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %>
+    <%= link_to(l(:label_current_version), :action => 'show', :id => @page.title, :project_id => @page.project) %>
     <br />
     <em><%= @content.author ? @content.author.name : "anonyme" %>, <%= format_time(@content.updated_on) %> </em><br />
     <%=h @content.comments %>
@@ -35,7 +35,7 @@
 <div id="wiki_add_attachment">
 <p><%= link_to l(:label_attachment_new), {}, :onclick => "Element.show('add_attachment_form'); Element.hide(this); Element.scrollTo('add_attachment_form'); return false;",
                                              :id => 'attach_files_link' %></p>
-<% form_tag({ :controller => 'wiki', :action => 'add_attachment', :page => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %>
+<% form_tag({ :controller => 'wiki', :action => 'add_attachment', :project_id => @project, :id => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %>
   <div class="box">
   <p><%= render :partial => 'attachments/form' %></p>
   </div>
@@ -46,8 +46,8 @@
 <% end %>
 
 <% other_formats_links do |f| %>
-	<%= f.link_to 'HTML', :url => {:page => @page.title, :version => @content.version} %>
-	<%= f.link_to 'TXT', :url => {:page => @page.title, :version => @content.version} %>
+	<%= f.link_to 'HTML', :url => {:id => @page.title, :version => @content.version} %>
+	<%= f.link_to 'TXT', :url => {:id => @page.title, :version => @content.version} %>
 <% end if User.current.allowed_to?(:export_wiki_pages, @project) %>
 
 <% content_for :header_tags do %>
--- a/app/views/wiki/.svn/text-base/special_date_index.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<div class="contextual">
-<%= watcher_tag(@wiki, User.current) %>
-</div>
-
-<h2><%= l(:label_index_by_date) %></h2>
-
-<% if @pages.empty? %>
-<p class="nodata"><%= l(:label_no_data) %></p>
-<% end %>
-
-<% @pages_by_date.keys.sort.reverse.each do |date| %>
-<h3><%= format_date(date) %></h3>
-<ul>
-<% @pages_by_date[date].each do |page| %>
-    <li><%= link_to page.pretty_title, :action => 'index', :page => page.title %></li>
-<% end %>
-</ul>
-<% end %>
-
-<% content_for :sidebar do %>
-  <%= render :partial => 'sidebar' %>
-<% end %>
-
-<% unless @pages.empty? %>
-<% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
-	<%= f.link_to('HTML', :url => {:action => 'special', :page => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
-<% end %>
-<% end %>
-
-<% content_for :header_tags do %>
-<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
-<% end %>
--- a/app/views/wiki/.svn/text-base/special_page_index.rhtml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-<div class="contextual">
-<%= watcher_tag(@wiki, User.current) %>
-</div>
-
-<h2><%= l(:label_index_by_title) %></h2>
-
-<% if @pages.empty? %>
-<p class="nodata"><%= l(:label_no_data) %></p>
-<% end %>
-
-<%= render_page_hierarchy(@pages_by_parent_id) %>
-
-<% content_for :sidebar do %>
-  <%= render :partial => 'sidebar' %>
-<% end %>
-
-<% unless @pages.empty? %>
-<% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
-	<%= f.link_to('HTML', :url => {:action => 'special', :page => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
-<% end %>
-<% end %>
-
-<% content_for :header_tags do %>
-<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
-<% end %>
--- a/app/views/wiki/_sidebar.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/_sidebar.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -4,6 +4,6 @@
 
 <h3><%= l(:label_wiki) %></h3>
 
-<%= link_to l(:field_start_page), {:action => 'index', :page => nil} %><br />
-<%= link_to l(:label_index_by_title), {:action => 'special', :page => 'Page_index'} %><br />
-<%= link_to l(:label_index_by_date), {:action => 'special', :page => 'Date_index'} %><br />
+<%= link_to l(:field_start_page), {:action => 'show', :id => nil} %><br />
+<%= link_to l(:label_index_by_title), {:action => 'index'} %><br />
+<%= link_to l(:label_index_by_date), {:action => 'date_index'} %><br />
--- a/app/views/wiki/annotate.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/annotate.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,12 +1,12 @@
 <div class="contextual">
-<%= link_to(l(:button_edit), {:action => 'edit', :page => @page.title}, :class => 'icon icon-edit') %>
-<%= link_to(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
+<%= link_to(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit') %>
+<%= link_to(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %>
 </div>
 
 <h2><%= @page.pretty_title %></h2>
 
 <p>
-<%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'index', :page => @page.title, :version => @annotate.content.version %>
+<%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'show', :id => @page.title, :version => @annotate.content.version %>
 <em>(<%= @annotate.content.author ? @annotate.content.author.name : "anonyme" %>, <%= format_time(@annotate.content.updated_on) %>)</em>
 </p>
 
@@ -18,7 +18,7 @@
 <% @annotate.lines.each do |line| -%>
 <tr class="bloc-<%= colors[line[0]] %>">
     <th class="line-num"><%= line_num %></th>
-    <td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'index', :id => @project, :page => @page.title, :version => line[0] %></td>
+    <td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'show', :project_id => @project, :id => @page.title, :version => line[0] %></td>
     <td class="author"><%= h(line[1]) %></td>
     <td class="line-code"><pre><%=h line[2] %></pre></td>
 </tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/wiki/date_index.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,33 @@
+<div class="contextual">
+<%= watcher_tag(@wiki, User.current) %>
+</div>
+
+<h2><%= l(:label_index_by_date) %></h2>
+
+<% if @pages.empty? %>
+<p class="nodata"><%= l(:label_no_data) %></p>
+<% end %>
+
+<% @pages_by_date.keys.sort.reverse.each do |date| %>
+<h3><%= format_date(date) %></h3>
+<ul>
+<% @pages_by_date[date].each do |page| %>
+    <li><%= link_to page.pretty_title, :action => 'show', :id => page.title, :project_id => page.project %></li>
+<% end %>
+</ul>
+<% end %>
+
+<% content_for :sidebar do %>
+  <%= render :partial => 'sidebar' %>
+<% end %>
+
+<% unless @pages.empty? %>
+<% other_formats_links do |f| %>
+	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
+	<%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
+<% end %>
+<% end %>
+
+<% content_for :header_tags do %>
+<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
+<% end %>
--- a/app/views/wiki/destroy.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/destroy.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,6 +1,6 @@
 <h2><%=h @page.pretty_title %></h2>
 
-<% form_tag({}) do %>
+<% form_tag({}, :method => :delete) do %>
 <div class="box">
 <p><strong><%= l(:text_wiki_page_destroy_question, :descendants => @descendants_count) %></strong></p>
 <p><label><%= radio_button_tag 'todo', 'nullify', true %> <%= l(:text_wiki_page_nullify_children) %></label><br />
@@ -15,5 +15,5 @@
 </div>
 
 <%= submit_tag l(:button_apply) %>
-<%= link_to l(:button_cancel), :controller => 'wiki', :action => 'index', :id => @project, :page => @page.title %>
+<%= link_to l(:button_cancel), :controller => 'wiki', :action => 'show', :project_id => @project, :id => @page.title %>
 <% end %>
--- a/app/views/wiki/diff.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/diff.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 <div class="contextual">
-<%= link_to(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
+<%= link_to(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %>
 </div>
 
 <h2><%= @page.pretty_title %></h2>
 
 <p>
-<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'index', :page => @page.title, :version => @diff.content_from.version %>
+<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'show', :id => @page.title, :version => @diff.content_from.version %>
 <em>(<%= @diff.content_from.author ? @diff.content_from.author.name : "anonyme" %>, <%= format_time(@diff.content_from.updated_on) %>)</em>
 &#8594;
-<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'index', :page => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %>
+<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'show', :id => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %>
 <em>(<%= @diff.content_to.author ? @diff.content_to.author.name : "anonyme" %>, <%= format_time(@diff.content_to.updated_on) %>)</em>
 </p>
 
--- a/app/views/wiki/edit.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/edit.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,6 +1,6 @@
 <h2><%=h @page.pretty_title %></h2>
 
-<% form_for :content, @content, :url => {:action => 'edit', :page => @page.title}, :html => {:multipart => true, :id => 'wiki_form'} do |f| %>
+<% form_for :content, @content, :url => {:action => 'update', :id => @page.title}, :html => {:method => :put, :multipart => true, :id => 'wiki_form'} do |f| %>
 <%= f.hidden_field :version %>
 <%= error_messages_for 'content' %>
 
@@ -10,8 +10,8 @@
 
 <p><%= submit_tag l(:button_save) %>
    <%= link_to_remote l(:label_preview), 
-                       { :url => { :controller => 'wiki', :action => 'preview', :id => @project, :page => @page.title },
-                         :method => 'post',
+                       { :url => { :controller => 'wiki', :action => 'preview', :project_id => @project, :id => @page.title },
+                         :method => :post,
                          :update => 'preview',
                          :with => "Form.serialize('wiki_form')",
                          :complete => "Element.scrollTo('preview')"
--- a/app/views/wiki/history.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/history.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -3,6 +3,7 @@
 <h3><%= l(:label_history) %></h3>
 
 <% form_tag({:action => "diff"}, :method => :get) do %>
+  <%= hidden_field_tag('project_id', h(@project.to_param)) %>
 <table class="list">
 <thead><tr>
     <th>#</th>
@@ -18,13 +19,13 @@
 <% line_num = 1 %>
 <% @versions.each do |ver| %>
 <tr class="<%= cycle("odd", "even") %>">
-    <td class="id"><%= link_to ver.version, :action => 'index', :page => @page.title, :version => ver.version %></td>
+    <td class="id"><%= link_to ver.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => ver.version %></td>
     <td class="checkbox"><%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < @versions.size) %></td>
     <td class="checkbox"><%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %></td>
     <td align="center"><%= format_time(ver.updated_on) %></td>
     <td><%= link_to_user ver.author %></td>
     <td><%=h ver.comments %></td>
-    <td align="center"><%= link_to l(:button_annotate), :action => 'annotate', :page => @page.title, :version => ver.version %></td>
+    <td align="center"><%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %></td>
 </tr>
 <% line_num += 1 %>
 <% end %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/wiki/index.html.erb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,26 @@
+<div class="contextual">
+<%= watcher_tag(@wiki, User.current) %>
+</div>
+
+<h2><%= l(:label_index_by_title) %></h2>
+
+<% if @pages.empty? %>
+<p class="nodata"><%= l(:label_no_data) %></p>
+<% end %>
+
+<%= render_page_hierarchy(@pages_by_parent_id) %>
+
+<% content_for :sidebar do %>
+  <%= render :partial => 'sidebar' %>
+<% end %>
+
+<% unless @pages.empty? %>
+<% other_formats_links do |f| %>
+	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
+	<%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
+<% end %>
+<% end %>
+
+<% content_for :header_tags do %>
+<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
+<% end %>
--- a/app/views/wiki/rename.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/rename.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -6,7 +6,7 @@
 <div class="box">
 <p><%= f.text_field :title, :required => true, :size => 100  %></p>
 <p><%= f.check_box :redirect_existing_links %></p>
-<p><%= f.text_field :parent_title, :size => 100  %></p>
+<p><%= f.select :parent_id, "<option value=''></option>" + wiki_page_options_for_select(@wiki.pages.all(:include => :parent) - @page.self_and_descendants, @page.parent), :label => :field_parent_title %></p>
 </div>
 <%= submit_tag l(:button_rename) %>
 <% end %>
--- a/app/views/wiki/show.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wiki/show.rhtml	Fri Nov 19 13:24:41 2010 +0000
@@ -1,25 +1,25 @@
 <div class="contextual">
 <% if @editable %>
-<%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :page => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %>
+<%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %>
 <%= watcher_tag(@page, User.current) %>
-<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :page => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %>
-<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :page => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %>
-<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :page => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %>
-<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :page => @page.title}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %>
-<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :page => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %>
+<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :id => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %>
+<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :id => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %>
+<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :id => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %>
+<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :id => @page.title}, :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %>
+<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :id => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %>
 <% end %>
-<%= link_to_if_authorized(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
+<%= link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %>
 </div>
 
-<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:page => parent.title}}) %>
+<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:id => parent.title, :project_id => parent.project}}) %>
 
 <% if @content.version != @page.content.version %>
     <p>    
-    <%= link_to(('&#171; ' + l(:label_previous)), :action => 'index', :page => @page.title, :version => (@content.version - 1)) + " - " if @content.version > 1 %>
+    <%= link_to(('&#171; ' + l(:label_previous)), :action => 'show', :id => @page.title, :project_id => @page.project, :version => (@content.version - 1)) + " - " if @content.version > 1 %>
     <%= "#{l(:label_version)} #{@content.version}/#{@page.content.version}" %>
-    <%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :page => @page.title, :version => @content.version) + ')' if @content.version > 1 %> - 
-    <%= link_to((l(:label_next) + ' &#187;'), :action => 'index', :page => @page.title, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %>
-    <%= link_to(l(:label_current_version), :action => 'index', :page => @page.title) %>
+    <%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :id => @page.title, :project_id => @page.project, :version => @content.version) + ')' if @content.version > 1 %> - 
+    <%= link_to((l(:label_next) + ' &#187;'), :action => 'show', :id => @page.title, :project_id => @page.project, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %>
+    <%= link_to(l(:label_current_version), :action => 'show', :id => @page.title, :project_id => @page.project) %>
     <br />
     <em><%= @content.author ? @content.author.name : "anonyme" %>, <%= format_time(@content.updated_on) %> </em><br />
     <%=h @content.comments %>
@@ -35,7 +35,7 @@
 <div id="wiki_add_attachment">
 <p><%= link_to l(:label_attachment_new), {}, :onclick => "Element.show('add_attachment_form'); Element.hide(this); Element.scrollTo('add_attachment_form'); return false;",
                                              :id => 'attach_files_link' %></p>
-<% form_tag({ :controller => 'wiki', :action => 'add_attachment', :page => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %>
+<% form_tag({ :controller => 'wiki', :action => 'add_attachment', :project_id => @project, :id => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %>
   <div class="box">
   <p><%= render :partial => 'attachments/form' %></p>
   </div>
@@ -46,8 +46,8 @@
 <% end %>
 
 <% other_formats_links do |f| %>
-	<%= f.link_to 'HTML', :url => {:page => @page.title, :version => @content.version} %>
-	<%= f.link_to 'TXT', :url => {:page => @page.title, :version => @content.version} %>
+	<%= f.link_to 'HTML', :url => {:id => @page.title, :version => @content.version} %>
+	<%= f.link_to 'TXT', :url => {:id => @page.title, :version => @content.version} %>
 <% end if User.current.allowed_to?(:export_wiki_pages, @project) %>
 
 <% content_for :header_tags do %>
--- a/app/views/wiki/special_date_index.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<div class="contextual">
-<%= watcher_tag(@wiki, User.current) %>
-</div>
-
-<h2><%= l(:label_index_by_date) %></h2>
-
-<% if @pages.empty? %>
-<p class="nodata"><%= l(:label_no_data) %></p>
-<% end %>
-
-<% @pages_by_date.keys.sort.reverse.each do |date| %>
-<h3><%= format_date(date) %></h3>
-<ul>
-<% @pages_by_date[date].each do |page| %>
-    <li><%= link_to page.pretty_title, :action => 'index', :page => page.title %></li>
-<% end %>
-</ul>
-<% end %>
-
-<% content_for :sidebar do %>
-  <%= render :partial => 'sidebar' %>
-<% end %>
-
-<% unless @pages.empty? %>
-<% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
-	<%= f.link_to('HTML', :url => {:action => 'special', :page => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
-<% end %>
-<% end %>
-
-<% content_for :header_tags do %>
-<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
-<% end %>
--- a/app/views/wiki/special_page_index.rhtml	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-<div class="contextual">
-<%= watcher_tag(@wiki, User.current) %>
-</div>
-
-<h2><%= l(:label_index_by_title) %></h2>
-
-<% if @pages.empty? %>
-<p class="nodata"><%= l(:label_no_data) %></p>
-<% end %>
-
-<%= render_page_hierarchy(@pages_by_parent_id) %>
-
-<% content_for :sidebar do %>
-  <%= render :partial => 'sidebar' %>
-<% end %>
-
-<% unless @pages.empty? %>
-<% other_formats_links do |f| %>
-	<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
-	<%= f.link_to('HTML', :url => {:action => 'special', :page => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
-<% end %>
-<% end %>
-
-<% content_for :header_tags do %>
-<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
-<% end %>
--- a/app/views/wikis/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/wikis/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/wikis
 http://redmine.rubyforge.org/svn
 
--- a/app/views/workflows/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/app/views/workflows/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/app/views/workflows
 http://redmine.rubyforge.org/svn
 
--- a/config/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 31
-/svn/!svn/ver/4173/trunk/config
+/svn/!svn/ver/4405/trunk/config
 END
 settings.yml
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4013/trunk/config/settings.yml
+/svn/!svn/ver/4362/trunk/config/settings.yml
 END
 email.yml.example
 K 25
@@ -19,7 +19,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 41
-/svn/!svn/ver/4172/trunk/config/routes.rb
+/svn/!svn/ver/4372/trunk/config/routes.rb
 END
 boot.rb
 K 25
--- a/config/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/config
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-23T16:23:39.070168Z
-4173
-winterheart
+2010-11-14T15:14:19.280754Z
+4405
+jplang
 has-props
 
 
@@ -32,10 +32,10 @@
 
 
 
-2010-09-23T14:37:44.815730Z
-a95b266d8b929a282cfb7bcc8441227b
-2010-08-22T18:42:00.112555Z
-4013
+2010-11-19T13:04:51.216928Z
+974e583c59b4497382d2aa08f2b2ff01
+2010-11-02T19:00:36.834304Z
+4362
 edavis10
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-4020
+4106
 
 email.yml.example
 file
@@ -103,11 +103,11 @@
 
 
 
-2010-09-24T12:48:29.787906Z
-ec1a5ef5a75a55fb2b1edbbfca6725d4
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-11-19T13:04:51.216928Z
+3817ace6dd9dfb2fda37c5a67605b5e0
+2010-11-06T13:22:23.662480Z
+4372
+jplang
 has-props
 
 
@@ -129,7 +129,7 @@
 
 
 
-16319
+14427
 
 boot.rb
 file
--- a/config/.svn/text-base/routes.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/.svn/text-base/routes.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -13,55 +13,20 @@
   
   map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow'
   map.connect 'help/:ctrl/:page', :controller => 'help'
-  
-  map.connect 'time_entries/:id/edit', :action => 'edit', :controller => 'timelog'
-  map.connect 'projects/:project_id/time_entries/new', :action => 'edit', :controller => 'timelog'
-  map.connect 'projects/:project_id/issues/:issue_id/time_entries/new', :action => 'edit', :controller => 'timelog'
-  
-  map.with_options :controller => 'timelog' do |timelog|
-    timelog.connect 'projects/:project_id/time_entries', :action => 'details'
-    
-    timelog.with_options :action => 'details', :conditions => {:method => :get}  do |time_details|
-      time_details.connect 'time_entries'
-      time_details.connect 'time_entries.:format'
-      time_details.connect 'issues/:issue_id/time_entries'
-      time_details.connect 'issues/:issue_id/time_entries.:format'
-      time_details.connect 'projects/:project_id/time_entries.:format'
-      time_details.connect 'projects/:project_id/issues/:issue_id/time_entries'
-      time_details.connect 'projects/:project_id/issues/:issue_id/time_entries.:format'
-    end
-    timelog.connect 'projects/:project_id/time_entries/report', :action => 'report'
-    timelog.with_options :action => 'report',:conditions => {:method => :get} do |time_report|
-      time_report.connect 'time_entries/report'
-      time_report.connect 'time_entries/report.:format'
-      time_report.connect 'projects/:project_id/time_entries/report.:format'
-    end
 
-    timelog.with_options :action => 'edit', :conditions => {:method => :get} do |time_edit|
-      time_edit.connect 'issues/:issue_id/time_entries/new'
-    end
-      
-    timelog.connect 'time_entries/:id/destroy', :action => 'destroy', :conditions => {:method => :post}
+  map.connect 'projects/:project_id/time_entries/report', :controller => 'time_entry_reports', :action => 'report'
+  map.with_options :controller => 'time_entry_reports', :action => 'report',:conditions => {:method => :get} do |time_report|
+    time_report.connect 'time_entries/report'
+    time_report.connect 'time_entries/report.:format'
+    time_report.connect 'projects/:project_id/time_entries/report.:format'
   end
+
+  # TODO: wasteful since this is also nested under issues, projects, and projects/issues
+  map.resources :time_entries, :controller => 'timelog'
   
   map.connect 'projects/:id/wiki', :controller => 'wikis', :action => 'edit', :conditions => {:method => :post}
   map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :get}
   map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :post}
-  map.with_options :controller => 'wiki' do |wiki_routes|
-    wiki_routes.with_options :conditions => {:method => :get} do |wiki_views|
-      wiki_views.connect 'projects/:id/wiki/:page', :action => 'special', :page => /page_index|date_index|export/i
-      wiki_views.connect 'projects/:id/wiki/:page', :action => 'index', :page => nil
-      wiki_views.connect 'projects/:id/wiki/:page/edit', :action => 'edit'
-      wiki_views.connect 'projects/:id/wiki/:page/rename', :action => 'rename'
-      wiki_views.connect 'projects/:id/wiki/:page/history', :action => 'history'
-      wiki_views.connect 'projects/:id/wiki/:page/diff/:version/vs/:version_from', :action => 'diff'
-      wiki_views.connect 'projects/:id/wiki/:page/annotate/:version', :action => 'annotate'
-    end
-    
-    wiki_routes.connect 'projects/:id/wiki/:page/:action', 
-      :action => /edit|rename|destroy|preview|protect/,
-      :conditions => {:method => :post}
-  end
   
   map.with_options :controller => 'messages' do |messages_routes|
     messages_routes.with_options :conditions => {:method => :get} do |messages_views|
@@ -129,56 +94,46 @@
   map.connect '/issues', :controller => 'issues', :action => 'index', :conditions => { :method => :post }
   map.connect '/issues/create', :controller => 'issues', :action => 'index', :conditions => { :method => :post }
   
-  map.resources :issues, :member => { :edit => :post }, :collection => {}
-  map.resources :issues, :path_prefix => '/projects/:project_id', :collection => { :create => :post }
+  map.resources :issues, :member => { :edit => :post }, :collection => {} do |issues|
+    issues.resources :time_entries, :controller => 'timelog'
+  end
+  
+  map.resources :issues, :path_prefix => '/projects/:project_id', :collection => { :create => :post } do |issues|
+    issues.resources :time_entries, :controller => 'timelog'
+  end
 
   map.with_options  :controller => 'issue_relations', :conditions => {:method => :post} do |relations|
     relations.connect 'issues/:issue_id/relations/:id', :action => 'new'
     relations.connect 'issues/:issue_id/relations/:id/destroy', :action => 'destroy'
   end
-  
-  map.with_options :controller => 'news' do |news_routes|
-    news_routes.with_options :conditions => {:method => :get} do |news_views|
-      news_views.connect 'news', :action => 'index'
-      news_views.connect 'projects/:project_id/news', :action => 'index'
-      news_views.connect 'projects/:project_id/news.:format', :action => 'index'
-      news_views.connect 'news.:format', :action => 'index'
-      news_views.connect 'projects/:project_id/news/new', :action => 'new'
-      news_views.connect 'news/:id', :action => 'show'
-      news_views.connect 'news/:id/edit', :action => 'edit'
-    end
-    news_routes.with_options do |news_actions|
-      news_actions.connect 'projects/:project_id/news', :action => 'create', :conditions => {:method => :post}
-      news_actions.connect 'news/:id/destroy', :action => 'destroy'
-    end
-    news_routes.connect 'news/:id/edit', :action => 'update', :conditions => {:method => :put}
 
-    news_routes.connect 'news/:id/comments', :controller => 'comments', :action => 'create', :conditions => {:method => :post}
-    news_routes.connect 'news/:id/comments/:comment_id', :controller => 'comments', :action => 'destroy', :conditions => {:method => :delete}
-  end
-  
   map.connect 'projects/:id/members/new', :controller => 'members', :action => 'new'
-  
+
   map.with_options :controller => 'users' do |users|
-    users.with_options :conditions => {:method => :get} do |user_views|
-      user_views.connect 'users', :action => 'index'
-      user_views.connect 'users/:id', :action => 'show', :id => /\d+/
-      user_views.connect 'users/new', :action => 'add'
-      user_views.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil
-    end
+    users.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil, :conditions => {:method => :get}
+    
     users.with_options :conditions => {:method => :post} do |user_actions|
-      user_actions.connect 'users', :action => 'add'
-      user_actions.connect 'users/new', :action => 'add'
-      user_actions.connect 'users/:id/edit', :action => 'edit'
       user_actions.connect 'users/:id/memberships', :action => 'edit_membership'
       user_actions.connect 'users/:id/memberships/:membership_id', :action => 'edit_membership'
       user_actions.connect 'users/:id/memberships/:membership_id/destroy', :action => 'destroy_membership'
     end
   end
 
+  map.resources :users, :member => {
+    :edit_membership => :post,
+    :destroy_membership => :post
+  },
+  :except => [:destroy]
+
   # For nice "roadmap" in the url for the index action
   map.connect 'projects/:project_id/roadmap', :controller => 'versions', :action => 'index'
 
+  map.all_news 'news', :controller => 'news', :action => 'index'
+  map.formatted_all_news 'news.:format', :controller => 'news', :action => 'index'
+  map.preview_news '/news/preview', :controller => 'previews', :action => 'news'
+  map.connect 'news/:id/comments', :controller => 'comments', :action => 'create', :conditions => {:method => :post}
+  map.connect 'news/:id/comments/:comment_id', :controller => 'comments', :action => 'destroy', :conditions => {:method => :delete}
+
   map.resources :projects, :member => {
     :copy => [:get, :post],
     :settings => :get,
@@ -189,6 +144,25 @@
     project.resource :project_enumerations, :as => 'enumerations', :only => [:update, :destroy]
     project.resources :files, :only => [:index, :new, :create]
     project.resources :versions, :collection => {:close_completed => :put}, :member => {:status_by => :post}
+    project.resources :news, :shallow => true
+    project.resources :time_entries, :controller => 'timelog', :path_prefix => 'projects/:project_id'
+
+    project.wiki_start_page 'wiki', :controller => 'wiki', :action => 'show', :conditions => {:method => :get}
+    project.wiki_index 'wiki/index', :controller => 'wiki', :action => 'index', :conditions => {:method => :get}
+    project.wiki_diff 'wiki/:id/diff/:version', :controller => 'wiki', :action => 'diff', :version => nil
+    project.wiki_diff 'wiki/:id/diff/:version/vs/:version_from', :controller => 'wiki', :action => 'diff'
+    project.wiki_annotate 'wiki/:id/annotate/:version', :controller => 'wiki', :action => 'annotate'
+    project.resources :wiki, :except => [:new, :create], :member => {
+      :rename => [:get, :post],
+      :history => :get,
+      :preview => :any,
+      :protect => :post,
+      :add_attachment => :post
+    }, :collection => {
+      :export => :get,
+      :date_index => :get
+    }
+
   end
 
   # Destroy uses a get request to prompt the user before the actual DELETE request
--- a/config/.svn/text-base/settings.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/.svn/text-base/settings.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -184,3 +184,7 @@
   default: ''
 rest_api_enabled:
   default: 0
+default_notification_option:
+  default: 'only_my_events'
+emails_header:
+  default: ''
--- a/config/environments/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/environments/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4096/trunk/config/environments
+/svn/!svn/ver/4405/trunk/config/environments
 END
 test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/3782/trunk/config/environments/test.rb
+/svn/!svn/ver/4405/trunk/config/environments/test.rb
 END
 development.rb
 K 25
@@ -37,5 +37,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/4096/trunk/config/environments/production.rb
+/svn/!svn/ver/4182/trunk/config/environments/production.rb
 END
--- a/config/environments/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/environments/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/config/environments
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-17T04:31:17.141340Z
-4096
-edavis10
+2010-11-14T15:14:19.280754Z
+4405
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-23T14:37:44.735734Z
-1fa42b22c11a8e93841c995532c617ae
-2010-06-19T19:01:53.900446Z
-3782
-edavis10
+2010-11-19T13:04:51.212937Z
+08b25fdea5e3e041116340c3c3090b18
+2010-11-14T15:14:19.280754Z
+4405
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-1176
+1168
 
 development.rb
 file
@@ -202,10 +202,10 @@
 
 
 
-2010-09-24T12:48:29.771795Z
-5446300cf963a718609cb6d37eca8bc4
-2010-09-17T04:31:17.141340Z
-4096
+2010-11-19T13:04:51.212937Z
+17a6fbb168f3951191541f0f5a554454
+2010-09-26T16:54:38.112012Z
+4182
 edavis10
 has-props
 
@@ -228,5 +228,5 @@
 
 
 
-1064
+1169
 
--- a/config/environments/.svn/text-base/production.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/environments/.svn/text-base/production.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -11,7 +11,10 @@
 # config.logger        = SyslogLogger.new
 #
 # Rotate logs bigger than 1MB, keeps no more than 7 rotated logs around.
+# When setting a new Logger, make sure to set it's log level too.
+#
 # config.logger = Logger.new(config.log_path, 7, 1048576)
+# config.logger.level = Logger::INFO
 
 # Full error reports are disabled and caching is turned on
 config.action_controller.consider_all_requests_local = false
--- a/config/environments/.svn/text-base/test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/environments/.svn/text-base/test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -17,7 +17,7 @@
 config.action_mailer.delivery_method = :test
 
 config.action_controller.session = { 
-  :session_key => "_test_session",
+  :key => "_test_session",
   :secret => "some secret phrase for the tests."
 }
 
--- a/config/environments/production.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/environments/production.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -11,7 +11,10 @@
 # config.logger        = SyslogLogger.new
 #
 # Rotate logs bigger than 1MB, keeps no more than 7 rotated logs around.
+# When setting a new Logger, make sure to set it's log level too.
+#
 # config.logger = Logger.new(config.log_path, 7, 1048576)
+# config.logger.level = Logger::INFO
 
 # Full error reports are disabled and caching is turned on
 config.action_controller.consider_all_requests_local = false
--- a/config/environments/test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/environments/test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -17,7 +17,7 @@
 config.action_mailer.delivery_method = :test
 
 config.action_controller.session = { 
-  :session_key => "_test_session",
+  :key => "_test_session",
   :secret => "some secret phrase for the tests."
 }
 
--- a/config/initializers/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/initializers/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/3235/trunk/config/initializers
+/svn/!svn/ver/4389/trunk/config/initializers
 END
 inflections.rb
 K 25
@@ -19,7 +19,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/3235/trunk/config/initializers/10-patches.rb
+/svn/!svn/ver/4389/trunk/config/initializers/10-patches.rb
 END
 backtrace_silencers.rb
 K 25
--- a/config/initializers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/initializers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/config/initializers
 http://redmine.rubyforge.org/svn
 
 
 
-2009-12-23T20:55:42.873227Z
-3235
+2010-11-09T19:44:37.907646Z
+4389
 jplang
 has-props
 
@@ -100,10 +100,10 @@
 
 
 
-2010-09-23T14:37:44.743734Z
-56e489ddcf34c62aa4f7f690b747f521
-2009-12-23T20:55:42.873227Z
-3235
+2010-11-19T13:04:51.204890Z
+82c05bf7e87e057a6a3dd5d74a56ee7c
+2010-11-09T19:44:37.907646Z
+4389
 jplang
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-2448
+3061
 
 backtrace_silencers.rb
 file
--- a/config/initializers/.svn/text-base/10-patches.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/initializers/.svn/text-base/10-patches.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -78,3 +78,17 @@
 end
 
 ActionMailer::Base.send :include, AsynchronousMailer
+
+# TODO: Hack to support i18n 4.x on Rails 2.3.5.  Remove post 2.3.6.
+# See http://www.redmine.org/issues/6428 and http://www.redmine.org/issues/5608
+module I18n
+  module Backend
+    module Base
+      def warn_syntax_deprecation!(*args)
+        return if @skip_syntax_deprecation
+        warn "The {{key}} interpolation syntax in I18n messages is deprecated. Please use %{key} instead.\nDowngrade your i18n gem to 0.3.7 (everything above must be deinstalled) to remove this warning, see http://www.redmine.org/issues/5608 for more information."
+        @skip_syntax_deprecation = true
+      end
+    end
+  end
+end
--- a/config/initializers/10-patches.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/initializers/10-patches.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -78,3 +78,17 @@
 end
 
 ActionMailer::Base.send :include, AsynchronousMailer
+
+# TODO: Hack to support i18n 4.x on Rails 2.3.5.  Remove post 2.3.6.
+# See http://www.redmine.org/issues/6428 and http://www.redmine.org/issues/5608
+module I18n
+  module Backend
+    module Base
+      def warn_syntax_deprecation!(*args)
+        return if @skip_syntax_deprecation
+        warn "The {{key}} interpolation syntax in I18n messages is deprecated. Please use %{key} instead.\nDowngrade your i18n gem to 0.3.7 (everything above must be deinstalled) to remove this warning, see http://www.redmine.org/issues/5608 for more information."
+        @skip_syntax_deprecation = true
+      end
+    end
+  end
+end
--- a/config/locales/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,263 +1,263 @@
 K 25
 svn:wc:ra_dav:version-url
 V 39
-/svn/!svn/ver/4173/trunk/config/locales
+/svn/!svn/ver/4384/trunk/config/locales
 END
 lt.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/lt.yml
+/svn/!svn/ver/4384/trunk/config/locales/lt.yml
 END
 sr-YU.yml
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4169/trunk/config/locales/sr-YU.yml
+/svn/!svn/ver/4384/trunk/config/locales/sr-YU.yml
 END
 ro.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/ro.yml
+/svn/!svn/ver/4384/trunk/config/locales/ro.yml
 END
 lv.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/lv.yml
+/svn/!svn/ver/4384/trunk/config/locales/lv.yml
 END
 zh.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/zh.yml
+/svn/!svn/ver/4384/trunk/config/locales/zh.yml
 END
 pt.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/pt.yml
+/svn/!svn/ver/4384/trunk/config/locales/pt.yml
 END
 ca.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/ca.yml
+/svn/!svn/ver/4384/trunk/config/locales/ca.yml
 END
 pt-BR.yml
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4169/trunk/config/locales/pt-BR.yml
+/svn/!svn/ver/4384/trunk/config/locales/pt-BR.yml
 END
 tr.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/tr.yml
+/svn/!svn/ver/4384/trunk/config/locales/tr.yml
 END
 ru.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4171/trunk/config/locales/ru.yml
+/svn/!svn/ver/4384/trunk/config/locales/ru.yml
 END
 en-GB.yml
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4169/trunk/config/locales/en-GB.yml
+/svn/!svn/ver/4384/trunk/config/locales/en-GB.yml
 END
 id.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/id.yml
+/svn/!svn/ver/4384/trunk/config/locales/id.yml
 END
 el.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/el.yml
+/svn/!svn/ver/4384/trunk/config/locales/el.yml
 END
 en.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/en.yml
+/svn/!svn/ver/4382/trunk/config/locales/en.yml
 END
 gl.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/gl.yml
+/svn/!svn/ver/4384/trunk/config/locales/gl.yml
 END
 cs.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4173/trunk/config/locales/cs.yml
+/svn/!svn/ver/4384/trunk/config/locales/cs.yml
+END
+mk.yml
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/4384/trunk/config/locales/mk.yml
 END
 es.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/es.yml
+/svn/!svn/ver/4384/trunk/config/locales/es.yml
 END
-mk.yml
+ko.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/mk.yml
+/svn/!svn/ver/4384/trunk/config/locales/ko.yml
+END
+eu.yml
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/4384/trunk/config/locales/eu.yml
 END
 zh-TW.yml
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4173/trunk/config/locales/zh-TW.yml
-END
-eu.yml
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4169/trunk/config/locales/eu.yml
-END
-ko.yml
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4169/trunk/config/locales/ko.yml
+/svn/!svn/ver/4384/trunk/config/locales/zh-TW.yml
 END
 mn.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/mn.yml
+/svn/!svn/ver/4384/trunk/config/locales/mn.yml
 END
 it.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/it.yml
+/svn/!svn/ver/4384/trunk/config/locales/it.yml
 END
 sk.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/sk.yml
+/svn/!svn/ver/4384/trunk/config/locales/sk.yml
 END
 sl.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/sl.yml
+/svn/!svn/ver/4384/trunk/config/locales/sl.yml
 END
 uk.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/uk.yml
+/svn/!svn/ver/4384/trunk/config/locales/uk.yml
+END
+da.yml
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/4384/trunk/config/locales/da.yml
 END
 sr.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/sr.yml
+/svn/!svn/ver/4384/trunk/config/locales/sr.yml
 END
-da.yml
+bg.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/da.yml
+/svn/!svn/ver/4384/trunk/config/locales/bg.yml
+END
+de.yml
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/4384/trunk/config/locales/de.yml
 END
 sv.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/sv.yml
-END
-de.yml
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4169/trunk/config/locales/de.yml
-END
-bg.yml
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4169/trunk/config/locales/bg.yml
+/svn/!svn/ver/4384/trunk/config/locales/sv.yml
 END
 ja.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4173/trunk/config/locales/ja.yml
+/svn/!svn/ver/4384/trunk/config/locales/ja.yml
 END
 he.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/he.yml
+/svn/!svn/ver/4384/trunk/config/locales/he.yml
 END
 fi.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/fi.yml
+/svn/!svn/ver/4384/trunk/config/locales/fi.yml
 END
 bs.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/bs.yml
+/svn/!svn/ver/4384/trunk/config/locales/bs.yml
 END
 fr.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/fr.yml
+/svn/!svn/ver/4382/trunk/config/locales/fr.yml
 END
 nl.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/nl.yml
+/svn/!svn/ver/4384/trunk/config/locales/nl.yml
 END
 hr.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/hr.yml
+/svn/!svn/ver/4384/trunk/config/locales/hr.yml
 END
 pl.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/pl.yml
+/svn/!svn/ver/4384/trunk/config/locales/pl.yml
 END
 th.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/th.yml
+/svn/!svn/ver/4384/trunk/config/locales/th.yml
 END
 no.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/no.yml
+/svn/!svn/ver/4384/trunk/config/locales/no.yml
 END
 hu.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/hu.yml
+/svn/!svn/ver/4384/trunk/config/locales/hu.yml
 END
 vi.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4169/trunk/config/locales/vi.yml
+/svn/!svn/ver/4384/trunk/config/locales/vi.yml
 END
--- a/config/locales/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/config/locales
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-23T16:23:39.070168Z
-4173
-winterheart
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-24T12:48:29.703937Z
-8d312a53522467462ce1e04d6dc8559c
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.152964Z
+3c3e846c8a61fc0306fcac52e8a6db63
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-42971
+43469
 
 sr-YU.yml
 file
@@ -66,33 +66,33 @@
 
 
 
-2010-09-24T12:48:29.703937Z
-dc55d1b76bd2609ff50f0eeba066f0f2
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-40089
+2010-11-19T13:04:51.152964Z
+4270faebfc0875178412531d9945e450
+2010-11-07T14:18:13.240686Z
+4384
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+40597
 
 ro.yml
 file
@@ -100,11 +100,11 @@
 
 
 
-2010-09-24T12:48:29.703937Z
-a53816dd2bef5bdb8cd5673d75ff476d
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.152964Z
+a34852b28eb42df6bf3d98b6e4cfe8dc
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -126,7 +126,7 @@
 
 
 
-39144
+39642
 
 lv.yml
 file
@@ -134,33 +134,33 @@
 
 
 
-2010-09-24T12:48:29.707889Z
-04c7d28b6c34d34e280f5bccb09cc990
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-40111
+2010-11-19T13:04:51.152964Z
+77f6e9e4ebc4ece3ff5a79b62ee8a48b
+2010-11-07T14:18:13.240686Z
+4384
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+40602
 
 zh.yml
 file
@@ -168,11 +168,11 @@
 
 
 
-2010-09-24T12:48:29.707889Z
-c2dcc09a003836b556dd2e332b988131
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.156936Z
+daf438594b071cc80e58e6704bbb8409
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -194,7 +194,7 @@
 
 
 
-37212
+37725
 
 pt.yml
 file
@@ -202,11 +202,11 @@
 
 
 
-2010-09-24T12:48:29.707889Z
-2d38e6a7c8c1989d3c31b1d6865ec265
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.156936Z
+c9804b3b18de0884db4bb8d3305d0d59
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -228,7 +228,7 @@
 
 
 
-39754
+41198
 
 ca.yml
 file
@@ -236,11 +236,11 @@
 
 
 
-2010-09-24T12:48:29.707889Z
-b0b5be4539b723cbf97185851d355552
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.156936Z
+eec5aa8638e2792dd612c8938750d81e
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -262,7 +262,7 @@
 
 
 
-40954
+41462
 
 pt-BR.yml
 file
@@ -270,11 +270,11 @@
 
 
 
-2010-09-24T12:48:29.711820Z
-ca8305cd99de4bed0ba08a8edaa3ef83
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.160924Z
+7fd270dbed421920ffba7910fec83c98
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -296,7 +296,7 @@
 
 
 
-40501
+41080
 
 tr.yml
 file
@@ -304,11 +304,11 @@
 
 
 
-2010-09-24T12:48:29.711820Z
-e782356e16dc42959977cb5a9aaa1f45
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.160924Z
+6d497cb5cf2b3dc069bced1f7ab3e917
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -330,7 +330,7 @@
 
 
 
-39205
+39711
 
 ru.yml
 file
@@ -338,11 +338,11 @@
 
 
 
-2010-09-24T12:48:29.711820Z
-73be51c0cede8bce9c37d710aaef1ff1
-2010-09-22T19:45:30.172104Z
-4171
-winterheart
+2010-11-19T13:04:51.160924Z
+bf6486d652d78029c05e10c1bb49a93d
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -364,7 +364,7 @@
 
 
 
-60838
+61533
 
 en-GB.yml
 file
@@ -372,33 +372,33 @@
 
 
 
-2010-09-24T12:48:29.711820Z
-d959f171f66003fe8191d8e47a5fe67b
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-37457
+2010-11-19T13:04:51.160924Z
+b3c07f1bb7aa053e2314562eeff18c71
+2010-11-07T14:18:13.240686Z
+4384
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+37977
 
 id.yml
 file
@@ -406,11 +406,11 @@
 
 
 
-2010-09-24T12:48:29.715835Z
-ea5458eb3e0d4b38f5c9b73ef03fe90d
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.164928Z
+b21510420c8cfb4c3ca3d90982f50c86
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -432,7 +432,7 @@
 
 
 
-38784
+39277
 
 el.yml
 file
@@ -440,11 +440,11 @@
 
 
 
-2010-09-24T12:48:29.715835Z
-43266733dbb73649edddb2d5815fa51b
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.164928Z
+ec14094c510964ef65cab6198c26153e
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -466,7 +466,7 @@
 
 
 
-53923
+54374
 
 en.yml
 file
@@ -474,11 +474,11 @@
 
 
 
-2010-09-24T12:48:29.715835Z
-255f81f55e0d6c8ff82b29b61ffed871
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.164928Z
+dc0460b9c8f49b986b833f6a0e42d39a
+2010-11-07T14:15:01.891476Z
+4382
+jplang
 has-props
 
 
@@ -500,7 +500,7 @@
 
 
 
-37482
+38014
 
 gl.yml
 file
@@ -508,11 +508,11 @@
 
 
 
-2010-09-24T12:48:29.715835Z
-abc632b18133f3500b3dd05f57e9378b
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.168928Z
+1fe7f6095d46fe8f8bc5b49d72e2443c
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -534,7 +534,7 @@
 
 
 
-39814
+40309
 
 cs.yml
 file
@@ -542,11 +542,11 @@
 
 
 
-2010-09-24T12:48:29.719859Z
-6e8071957b966d6a8f86e1c05ab54cae
-2010-09-23T16:23:39.070168Z
-4173
-winterheart
+2010-11-19T13:04:51.168928Z
+13a9181b35a59a4f65ebcfcbbf3cdfd2
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -568,7 +568,41 @@
 
 
 
-39630
+40854
+
+mk.yml
+file
+
+
+
+
+2010-11-19T13:04:51.168928Z
+bf188cf4f7e8b821c0272a8f39e9e2de
+2010-11-07T14:18:13.240686Z
+4384
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+47710
 
 es.yml
 file
@@ -576,11 +610,11 @@
 
 
 
-2010-09-24T12:48:29.719859Z
-dfe54b5b3df4729ccd32457e9bd4e411
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.168928Z
+b2c1421e14275dd03308e69e24869a89
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -602,41 +636,75 @@
 
 
 
-42519
+43011
 
-mk.yml
+zh-TW.yml
 file
 
 
 
 
-2010-09-24T12:48:29.719859Z
-29ccbe63f00197715dac0af7a48948bf
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-47241
+2010-11-19T13:04:51.168928Z
+a400517e4ac5ec29285455a34430d5c7
+2010-11-07T14:18:13.240686Z
+4384
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+42011
+
+eu.yml
+file
+
+
+
+
+2010-11-19T13:04:51.172928Z
+8b0c7dfb3b2e99ffee4e65b1015d6091
+2010-11-07T14:18:13.240686Z
+4384
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+40663
 
 ko.yml
 file
@@ -644,11 +712,11 @@
 
 
 
-2010-09-24T12:48:29.723862Z
-b772e80bc84527c52c65fc3ba323d83e
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.172928Z
+436d7edeba50962c6fdb9faf6bdf3dce
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -670,75 +738,7 @@
 
 
 
-43255
-
-eu.yml
-file
-
-
-
-
-2010-09-24T12:48:29.719859Z
-8e45505ae9b216b825f6653d976fed30
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-40157
-
-zh-TW.yml
-file
-
-
-
-
-2010-09-24T12:48:29.719859Z
-771ede071092664861220ffb0e975fe8
-2010-09-23T16:23:39.070168Z
-4173
-winterheart
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-41483
+43751
 
 mn.yml
 file
@@ -746,33 +746,33 @@
 
 
 
-2010-09-24T12:48:29.723862Z
-dd4ce6787e9315f3346c8f56a85a0fe9
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-51926
+2010-11-19T13:04:51.172928Z
+d4363b3560295e0a69987fedb561d447
+2010-11-07T14:18:13.240686Z
+4384
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+52377
 
 it.yml
 file
@@ -780,11 +780,11 @@
 
 
 
-2010-09-24T12:48:29.723862Z
-4eca662beac78c06a4b1919de9f56556
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.172928Z
+2a5286abf1ef2ef909cbcb254e229ebd
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -806,7 +806,7 @@
 
 
 
-40178
+40686
 
 sk.yml
 file
@@ -814,11 +814,11 @@
 
 
 
-2010-09-24T12:48:29.723862Z
-a5fd7d501ceab618ba6808dd5f56ac5e
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.172928Z
+36ffd38b0ec52602e1671d36e0f6e9c5
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -840,7 +840,7 @@
 
 
 
-40419
+40919
 
 sl.yml
 file
@@ -848,11 +848,11 @@
 
 
 
-2010-09-24T12:48:29.723862Z
-b3008af867361f371f067c96aa0117fc
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.176929Z
+fe0bcf8cf9643fa50fe3d21828434cf4
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -874,7 +874,7 @@
 
 
 
-38600
+39097
 
 uk.yml
 file
@@ -882,11 +882,11 @@
 
 
 
-2010-09-24T12:48:29.727858Z
-4d320f6006d26969f08e2efb483bd709
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.176929Z
+db46f6a810e0dc67f1bac92a71b0948d
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -908,7 +908,41 @@
 
 
 
-46219
+46669
+
+sr.yml
+file
+
+
+
+
+2010-11-19T13:04:51.176929Z
+248adf243f4bb59ac110d11530753c7b
+2010-11-07T14:18:13.240686Z
+4384
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+53786
 
 da.yml
 file
@@ -916,11 +950,11 @@
 
 
 
-2010-09-24T12:48:29.731846Z
-c5d900369c88522a92ba2546882646de
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.180928Z
+79fdefd9c5c9db00ee25aa63e771e626
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -942,19 +976,19 @@
 
 
 
-38693
+39199
 
-sr.yml
+sv.yml
 file
 
 
 
 
-2010-09-24T12:48:29.727858Z
-ebf019d58581ebc1fd17553c09f7acd1
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.180928Z
+41611818eaab75a3265b787b7b4cf575
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -976,7 +1010,41 @@
 
 
 
-53325
+41581
+
+de.yml
+file
+
+
+
+
+2010-11-19T13:04:51.180928Z
+953288c28f8e952ddcc2db0bea13fe9a
+2010-11-07T14:18:13.240686Z
+4384
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+41776
 
 bg.yml
 file
@@ -984,11 +1052,11 @@
 
 
 
-2010-09-24T12:48:29.731846Z
-352a62d205b07b845f0adce28cb63d15
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.180928Z
+47e98f0f9ee99de7fd6cf56ba3412107
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1010,75 +1078,7 @@
 
 
 
-45470
-
-de.yml
-file
-
-
-
-
-2010-09-24T12:48:29.731846Z
-56091e110569c87df775a1a9935060dc
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-41281
-
-sv.yml
-file
-
-
-
-
-2010-09-24T12:48:29.731846Z
-baa63e9443671e1fd346d60e4ddc1521
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-41037
+52771
 
 ja.yml
 file
@@ -1086,11 +1086,11 @@
 
 
 
-2010-09-24T12:48:29.731846Z
-1e3539913eaf8d37ea7a2a57fabc3e8c
-2010-09-23T16:23:39.070168Z
-4173
-winterheart
+2010-11-19T13:04:51.184942Z
+180b2fd40dbb9ca6136d07d3886856ed
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1112,7 +1112,7 @@
 
 
 
-44980
+45539
 
 he.yml
 file
@@ -1120,11 +1120,11 @@
 
 
 
-2010-09-24T12:48:29.735865Z
-f7992b036be151f88a9e0966780c612a
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.184942Z
+c973a0f6b6038c4d94f59cb67a6362ef
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1146,7 +1146,7 @@
 
 
 
-43911
+44657
 
 fi.yml
 file
@@ -1154,11 +1154,11 @@
 
 
 
-2010-09-24T12:48:29.735865Z
-0a188f9b2652801a82be0d1e378b7aa7
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.188959Z
+d34af39e6c4e4a51dc0e5294b2fa6ebf
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1180,7 +1180,7 @@
 
 
 
-39851
+40365
 
 bs.yml
 file
@@ -1188,11 +1188,11 @@
 
 
 
-2010-09-24T12:48:29.735865Z
-608c8fa2f482f744f0cefb0f4248a1cc
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.188959Z
+3b1917239f864b8251f47ed4179bbeb9
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1214,7 +1214,7 @@
 
 
 
-39610
+40112
 
 fr.yml
 file
@@ -1222,11 +1222,11 @@
 
 
 
-2010-09-24T12:48:29.735865Z
-76819e14f31cc7d6afba22b00e1944da
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.188959Z
+e5250df57dd3200252731533f635f3ff
+2010-11-07T14:15:01.891476Z
+4382
+jplang
 has-props
 
 
@@ -1248,7 +1248,7 @@
 
 
 
-41681
+42247
 
 nl.yml
 file
@@ -1256,11 +1256,11 @@
 
 
 
-2010-09-24T12:48:29.739830Z
-9c8ae2781ab6840c9c3812337a0b736a
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.192925Z
+5fc86161f1f72c9a027cb9083e79a18e
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1282,7 +1282,7 @@
 
 
 
-39162
+39665
 
 hr.yml
 file
@@ -1290,11 +1290,11 @@
 
 
 
-2010-09-24T12:48:29.739830Z
-8a3ca64a856a4cd1ea792941be1051db
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.192925Z
+ea3dd89af05481d2c32934831258791d
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1316,7 +1316,7 @@
 
 
 
-39271
+39778
 
 pl.yml
 file
@@ -1324,11 +1324,11 @@
 
 
 
-2010-09-24T12:48:29.739830Z
-139a3bc99dba793a92f9b4f797c9d04c
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.192925Z
+262779f7ff6c420704d894caed2efb10
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1350,7 +1350,7 @@
 
 
 
-41757
+42269
 
 th.yml
 file
@@ -1358,11 +1358,11 @@
 
 
 
-2010-09-24T12:48:29.739830Z
-a522d5ecaa0583e30a7e592e98ce6bac
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.196941Z
+e56c0107ce9b73575b17bacafb4a5a4e
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1384,7 +1384,7 @@
 
 
 
-52099
+52528
 
 no.yml
 file
@@ -1392,11 +1392,11 @@
 
 
 
-2010-09-24T12:48:29.743854Z
-ebbbed8ecfff22c16b6cfe0bcecd3f12
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.196941Z
+b2ada0f5e3c0bd1dd09da8a258928d94
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1418,7 +1418,7 @@
 
 
 
-37656
+38166
 
 hu.yml
 file
@@ -1426,11 +1426,11 @@
 
 
 
-2010-09-24T12:48:29.743854Z
-7ec87ad7dd6926dacda0f12c3dce91fb
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.196941Z
+5c4f617d0f309ca0dbd6429553dd0ced
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1452,7 +1452,7 @@
 
 
 
-42185
+42678
 
 vi.yml
 file
@@ -1460,11 +1460,11 @@
 
 
 
-2010-09-24T12:48:29.743854Z
-d2da1eed28eb609e12ab3cae38ea1f69
-2010-09-22T16:06:29.391472Z
-4169
-winterheart
+2010-11-19T13:04:51.196941Z
+85061e0562f86bb4aceeacab6dd6bb24
+2010-11-07T14:18:13.240686Z
+4384
+jplang
 has-props
 
 
@@ -1486,5 +1486,5 @@
 
 
 
-42762
+43252
 
--- a/config/locales/.svn/text-base/bg.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/bg.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -9,12 +9,12 @@
       short: "%b %d"
       long: "%B %d, %Y"
       
-    day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
-    abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
+    day_names: [ÐеделÑ, Понеделник, Вторник, СрÑда, Четвъртък, Петък, Събота]
+    abbr_day_names: [Ðед, Пон, Вто, СрÑ, Чет, Пет, Съб]
       
     # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
-    abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
+    month_names: [~, Януари, Февруари, Март, Ðприл, Май, Юни, Юли, ÐвгуÑÑ‚, Септември, Октомври, Ðоември, Декември]
+    abbr_month_names: [~, Яну, Фев, Мар, Ðпр, Май, Юни, Юли, Ðвг, Сеп, Окт, Ðое, Дек]
     # Used in date_select and datime_select.
     order: [ :year, :month, :day ]
 
@@ -31,38 +31,38 @@
     distance_in_words:
       half_a_minute: "half a minute"
       less_than_x_seconds:
-        one:   "less than 1 second"
-        other: "less than {{count}} seconds"
+        one:   "по-малко от 1 Ñекунда"
+        other: "по-малко от {{count}} Ñекунди"
       x_seconds:
-        one:   "1 second"
-        other: "{{count}} seconds"
+        one:   "1 Ñекунда"
+        other: "{{count}} Ñекунди"
       less_than_x_minutes:
-        one:   "less than a minute"
-        other: "less than {{count}} minutes"
+        one:   "по-малко от 1 минута"
+        other: "по-малко от {{count}} минути"
       x_minutes:
-        one:   "1 minute"
-        other: "{{count}} minutes"
+        one:   "1 минута"
+        other: "{{count}} минути"
       about_x_hours:
-        one:   "about 1 hour"
-        other: "about {{count}} hours"
+        one:   "около 1 чаÑ"
+        other: "около {{count}} чаÑа"
       x_days:
-        one:   "1 day"
-        other: "{{count}} days"
+        one:   "1 ден"
+        other: "{{count}} дена"
       about_x_months:
-        one:   "about 1 month"
-        other: "about {{count}} months"
+        one:   "около 1 меÑец"
+        other: "около {{count}} меÑеца"
       x_months:
-        one:   "1 month"
-        other: "{{count}} months"
+        one:   "1 меÑец"
+        other: "{{count}} меÑеца"
       about_x_years:
-        one:   "about 1 year"
-        other: "about {{count}} years"
+        one:   "около 1 година"
+        other: "около {{count}} години"
       over_x_years:
-        one:   "over 1 year"
-        other: "over {{count}} years"
+        one:   "над 1 година"
+        other: "над {{count}} години"
       almost_x_years:
-        one:   "almost 1 year"
-        other: "almost {{count}} years"
+        one:   "почти 1 година"
+        other: "почти {{count}} години"
 
   number:
     format:
@@ -87,7 +87,7 @@
 # Used in array.to_sentence.
   support:
     array:
-      sentence_connector: "and"
+      sentence_connector: "и"
       skip_last_comma: false
       
   activerecord:
@@ -106,17 +106,16 @@
         taken: "вече ÑъщеÑтвува"
         not_a_number: "не е чиÑло"
         not_a_date: "е невалидна дата"
-        greater_than: "must be greater than {{count}}"
-        greater_than_or_equal_to: "must be greater than or equal to {{count}}"
-        equal_to: "must be equal to {{count}}"
-        less_than: "must be less than {{count}}"
-        less_than_or_equal_to: "must be less than or equal to {{count}}"
-        odd: "must be odd"
-        even: "must be even"
+        greater_than: "трÑбва да бъде по-голÑм[a/о] от {{count}}"
+        greater_than_or_equal_to: "трÑбва да бъде по-голÑм[a/о] от или равен[a/o] на {{count}}"
+        equal_to: "трÑбва да бъде равен[a/o] на {{count}}"
+        less_than: "трÑбва да бъде по-малък[a/o] от {{count}}"
+        less_than_or_equal_to: "трÑбва да бъде по-малък[a/o] от или равен[a/o] на {{count}}"
+        odd: "трÑбва да бъде нечетен[a/o]"
+        even: "трÑбва да бъде четен[a/o]"
         greater_than_start_date: "трÑбва да е Ñлед началната дата"
         not_same_project: "не е от ÑÑŠÑ‰Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚"
         circular_dependency: "Тази Ñ€ÐµÐ»Ð°Ñ†Ð¸Ñ Ñ‰Ðµ доведе до безкрайна завиÑимоÑÑ‚"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
 
   actionview_instancetag_blank_option: Изберете
   
@@ -171,7 +170,7 @@
   field_mail: Email
   field_filename: Файл
   field_filesize: Големина
-  field_downloads: Downloads
+  field_downloads: Изтеглени файлове
   field_author: Ðвтор
   field_created_on: От дата
   field_updated_on: Обновена
@@ -186,10 +185,10 @@
   field_title: Заглавие
   field_project: Проект
   field_issue: Задача
-  field_status: СтатуÑ
+  field_status: СъÑтоÑние
   field_notes: Бележка
   field_is_closed: Затворена задача
-  field_is_default: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾ подразбиране
+  field_is_default: СъÑтоÑние по подразбиране
   field_tracker: Тракер
   field_subject: ОтноÑно
   field_due_date: Крайна дата
@@ -217,12 +216,11 @@
   field_port: Порт
   field_account: Профил
   field_base_dn: Base DN
-  field_attr_login: Login attribute
-  field_attr_firstname: Firstname attribute
-  field_attr_lastname: Lastname attribute
-  field_attr_mail: Email attribute
+  field_attr_login: Ðтрибут Login 
+  field_attr_firstname: Ðтрибут Първо име (Firstname)
+  field_attr_lastname: Ðтрибут Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ (Lastname)
+  field_attr_mail: Ðтрибут Email
   field_onthefly: Динамично Ñъздаване на потребител
-  field_start_date: Ðачална дата
   field_done_ratio: % ПрогреÑ
   field_auth_source: Ðачин на оторизациÑ
   field_hide_mail: Скрий e-mail адреÑа ми
@@ -249,12 +247,12 @@
   setting_login_required: ИзиÑкване за вход в ÑиÑтемата
   setting_self_registration: РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ потребители
   setting_attachment_max_size: МакÑимална големина на прикачен файл
-  setting_issues_export_limit: Лимит за екÑпорт на задачи
+  setting_issues_export_limit: МакÑимален брой задачи за екÑпорт
   setting_mail_from: E-mail Ð°Ð´Ñ€ÐµÑ Ð·Ð° емиÑии
   setting_host_name: ХоÑÑ‚
   setting_text_formatting: Форматиране на текÑта
   setting_wiki_compression: Wiki компреÑиране на иÑториÑта
-  setting_feeds_limit: Лимит на Feeds
+  setting_feeds_limit: МакÑимален брой за емиÑии
   setting_autofetch_changesets: Ðвтоматично обработване на ревизиите
   setting_sys_api_enabled: Разрешаване на WS за управление
   setting_commit_ref_keywords: ОтбелÑзващи ключови думи
@@ -270,9 +268,9 @@
   label_project_new: Ðов проект
   label_project_plural: Проекти
   label_x_projects:
-    zero:  no projects
-    one:   1 project
-    other: "{{count}} projects"
+    zero:  0 проекти
+    one:   1 проект
+    other: "{{count}} проекта"
   label_project_all: Ð’Ñички проекти
   label_project_latest: ПоÑледни проекти
   label_issue: Задача
@@ -293,9 +291,9 @@
   label_tracker_plural: Тракери
   label_tracker_new: Ðов тракер
   label_workflow: Работен процеÑ
-  label_issue_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð½Ð° задача
-  label_issue_status_plural: СтатуÑи на задачи
-  label_issue_status_new: Ðов ÑтатуÑ
+  label_issue_status: СъÑтоÑние на задача
+  label_issue_status_plural: СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи
+  label_issue_status_new: Ðово ÑÑŠÑтоÑние
   label_issue_category: ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°
   label_issue_category_plural: Категории задачи
   label_issue_category_new: Ðова категориÑ
@@ -323,14 +321,14 @@
   label_registered_on: РегиÑтрациÑ
   label_activity: ДейноÑÑ‚
   label_new: Ðов
-  label_logged_as: Логнат като
+  label_logged_as: ВлÑзъл като
   label_environment: Среда
   label_authentication: ОторизациÑ
   label_auth_source: Ðачин на оторозациÑ
   label_auth_source_new: Ðов начин на оторизациÑ
   label_auth_source_plural: Ðачини на оторизациÑ
   label_subproject_plural: Подпроекти
-  label_min_max_length: Мин. - МакÑ. дължина
+  label_min_max_length: Минимална - макÑимална дължина
   label_list: СпиÑък
   label_date: Дата
   label_integer: ЦелочиÑлен
@@ -339,10 +337,10 @@
   label_text: Дълъг текÑÑ‚
   label_attribute: Ðтрибут
   label_attribute_plural: Ðтрибути
-  label_download: "{{count}} Download"
-  label_download_plural: "{{count}} Downloads"
+  label_download: "{{count}} изтеглÑне"
+  label_download_plural: "{{count}} изтеглÑниÑ"
   label_no_data: ÐÑма изходни данни
-  label_change_status: ПромÑна на ÑтатуÑа
+  label_change_status: ПромÑна на ÑÑŠÑтоÑнието
   label_history: ИÑториÑ
   label_attachment: Файл
   label_attachment_new: Ðов файл
@@ -369,21 +367,21 @@
   label_closed_issues: затворена
   label_closed_issues_plural: затворени
   label_x_open_issues_abbr_on_total:
-    zero:  0 open / {{total}}
-    one:   1 open / {{total}}
-    other: "{{count}} open / {{total}}"
+    zero:  0 отворени / {{total}}
+    one:   1 отворена / {{total}}
+    other: "{{count}} отворени / {{total}}"
   label_x_open_issues_abbr:
-    zero:  0 open
-    one:   1 open
-    other: "{{count}} open"
+    zero:  0 отворени
+    one:   1 отворена
+    other: "{{count}} отворени"
   label_x_closed_issues_abbr:
-    zero:  0 closed
-    one:   1 closed
-    other: "{{count}} closed"
+    zero:  0 затворени
+    one:   1 затворена
+    other: "{{count}} затворени"
   label_total: Общо
   label_permissions: Права
-  label_current_status: Текущ ÑтатуÑ
-  label_new_statuses_allowed: Позволени ÑтатуÑи
+  label_current_status: Текущо ÑÑŠÑтоÑние
+  label_new_statuses_allowed: Позволени ÑÑŠÑтоÑниÑ
   label_all: вÑички
   label_none: никакви
   label_next: Следващ
@@ -394,7 +392,7 @@
   label_per_page: Ðа Ñтраница
   label_calendar: Календар
   label_months_from: меÑеца от
-  label_gantt: Gantt
+  label_gantt: Мрежов график
   label_internal: Вътрешен
   label_last_changes: "поÑледни {{count}} промени"
   label_change_view_all: Виж вÑички промени
@@ -402,9 +400,9 @@
   label_comment: Коментар
   label_comment_plural: Коментари
   label_x_comments:
-    zero: no comments
-    one: 1 comment
-    other: "{{count}} comments"
+    zero: 0 коментари
+    one: 1 коментар
+    other: "{{count}} коментари"
   label_comment_add: ДобавÑне на коментар
   label_comment_added: Добавен коментар
   label_comment_delete: Изтриване на коментари
@@ -453,13 +451,13 @@
   label_wiki: Wiki
   label_wiki_edit: Wiki редакциÑ
   label_wiki_edit_plural: Wiki редакции
-  label_wiki_page: Wiki page
-  label_wiki_page_plural: Wiki pages
+  label_wiki_page: Wiki Ñтраница
+  label_wiki_page_plural: Wiki Ñтраници
   label_index_by_title: ИндекÑ
   label_index_by_date: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ дата
   label_current_version: Текуща верÑиÑ
   label_preview: Преглед
-  label_feed_plural: Feeds
+  label_feed_plural: ЕмиÑии
   label_changes_details: Подробни промени
   label_issue_tracking: Тракинг
   label_spent_time: Отделено време
@@ -478,7 +476,7 @@
   label_permissions_report: Справка за права
   label_watched_issues: Ðаблюдавани задачи
   label_related_issues: Свързани задачи
-  label_applied_status: Промени ÑтатуÑа на
+  label_applied_status: УÑтановено ÑÑŠÑтоÑние
   label_loading: Зареждане...
   label_relation_new: Ðова релациÑ
   label_relation_delete: Изтриване на релациÑ
@@ -488,10 +486,10 @@
   label_blocked_by: блокирана от
   label_precedes: предшеÑтва
   label_follows: изпълнÑва Ñе Ñлед
-  label_end_to_start: end to start
-  label_end_to_end: end to end
-  label_start_to_start: start to start
-  label_start_to_end: start to end
+  label_end_to_start: край към начало
+  label_end_to_end: край към край
+  label_start_to_start: начало към начало
+  label_start_to_end: начало към край
   label_stay_logged_in: Запомни ме
   label_disabled: забранено
   label_show_completed_versions: Показване на реализирани верÑии
@@ -534,7 +532,7 @@
   button_clear: ИзчиÑти
   button_lock: Заключване
   button_unlock: Отключване
-  button_download: Download
+  button_download: ИзтеглÑне
   button_list: СпиÑък
   button_view: Преглед
   button_move: ПремеÑтване
@@ -544,8 +542,8 @@
   button_sort: Сортиране
   button_log_time: ОтделÑне на време
   button_rollback: Върни Ñе към тази ревизиÑ
-  button_watch: Ðаблюдавай
-  button_unwatch: Спри наблюдението
+  button_watch: Ðаблюдаване
+  button_unwatch: Край на наблюдението
   button_reply: Отговор
   button_archive: Ðрхивиране
   button_unarchive: Разархивиране
@@ -582,11 +580,11 @@
   default_role_manager: Мениджър
   default_role_developer: Разработчик
   default_role_reporter: Публикуващ
-  default_tracker_bug: Бъг
+  default_tracker_bug: Грешка
   default_tracker_feature: ФункционалноÑÑ‚
   default_tracker_support: Поддръжка
   default_issue_status_new: Ðова
-  default_issue_status_in_progress: In Progress
+  default_issue_status_in_progress: Изпълнение
   default_issue_status_resolved: Приключена
   default_issue_status_feedback: Обратна връзка
   default_issue_status_closed: Затворена
@@ -648,7 +646,7 @@
   label_age: ВъзраÑÑ‚
   notice_default_data_loaded: Примерната информациÑта е уÑпешно заредена.
   text_load_default_configuration: Зареждане на примерна информациÑ
-  text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑтатуÑи на задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ."
+  text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑÑŠÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ."
   error_can_t_load_default_data: "Грешка при зареждане на примерната информациÑ: {{value}}"
   button_update: ОбновÑване
   label_change_properties: ПромÑна на наÑтройки
@@ -707,208 +705,221 @@
   setting_default_projects_public: Ðовите проекти Ñа публични по подразбиране
   error_scm_annotate: "Обектът не ÑъщеÑтвува или не може да бъде анотиран."
   label_planning: Планиране
-  text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted."
-  label_and_its_subprojects: "{{value}} and its subprojects"
-  mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
-  mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
-  text_user_wrote: "{{value}} wrote:"
-  label_duplicated_by: duplicated by
-  setting_enabled_scm: Enabled SCM
-  text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_enumeration_destroy_question: "{{count}} objects are assigned to this value."
-  label_incoming_emails: Incoming emails
-  label_generate_key: Generate a key
-  setting_mail_handler_api_enabled: Enable WS for incoming emails
-  setting_mail_handler_api_key: API key
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
-  field_parent_title: Parent page
-  label_issue_watchers: Watchers
-  setting_commit_logs_encoding: Commit messages encoding
-  button_quote: Quote
-  setting_sequential_project_identifiers: Generate sequential project identifiers
-  notice_unable_delete_version: Unable to delete version
-  label_renamed: renamed
-  label_copied: copied
-  setting_plain_text_mail: plain text only (no HTML)
-  permission_view_files: View files
-  permission_edit_issues: Edit issues
-  permission_edit_own_time_entries: Edit own time logs
-  permission_manage_public_queries: Manage public queries
-  permission_add_issues: Add issues
+  text_subprojects_destroy_warning: "Ðеговите подпроекти: {{value}} Ñъщо ще бъдат изтрити."
+  label_and_its_subprojects: "{{value}} и неговите подпроекти"
+  mail_body_reminder: "{{count}} задачи, назначени на Ð²Ð°Ñ Ñа Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок в Ñледващите {{days}} дни:"
+  mail_subject_reminder: "{{count}} задачи Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок Ñ Ñледващите {{days}} дни"
+  text_user_wrote: "{{value}} напиÑа:"
+  label_duplicated_by: дублирана от
+  setting_enabled_scm: Разрешена SCM
+  text_enumeration_category_reassign_to: 'ПреÑвържете ги към тази ÑтойноÑÑ‚:'
+  text_enumeration_destroy_question: "{{count}} обекта Ñа Ñвързани Ñ Ñ‚Ð°Ð·Ð¸ ÑтойноÑÑ‚."
+  label_incoming_emails: ВходÑщи e-mail-и
+  label_generate_key: Генериране на ключ
+  setting_mail_handler_api_enabled: Разрешаване на WS за входÑщи e-mail-и
+  setting_mail_handler_api_key: API ключ
+  text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и извеÑтиÑта не Ñа разрешени.\nКонфигурирайте Ð²Ð°ÑˆÐ¸Ñ SMTP Ñървър в config/email.yml и реÑтартирайте Redmine, за да ги разрешите."
+  field_parent_title: РодителÑка Ñтраница
+  label_issue_watchers: Ðаблюдатели
+  setting_commit_logs_encoding: Кодова таблица на ÑъобщениÑта при поверÑване
+  button_quote: Цитат
+  setting_sequential_project_identifiers: Генериране на поÑледователни проектни идентификатори
+  notice_unable_delete_version: ÐевъзможноÑÑ‚ за изтриване на верÑиÑ
+  label_renamed: преименуван
+  label_copied: копиран
+  setting_plain_text_mail: Ñамо чиÑÑ‚ текÑÑ‚ (без HTML)
+  permission_view_files: Разглеждане на файлове
+  permission_edit_issues: Редактиране на задачи
+  permission_edit_own_time_entries: Редактиране на ÑобÑтвените time logs
+  permission_manage_public_queries: Управление на публичните заÑвки
+  permission_add_issues: ДобавÑне на задачи
   permission_log_time: Log spent time
-  permission_view_changesets: View changesets
-  permission_view_time_entries: View spent time
-  permission_manage_versions: Manage versions
-  permission_manage_wiki: Manage wiki
-  permission_manage_categories: Manage issue categories
-  permission_protect_wiki_pages: Protect wiki pages
-  permission_comment_news: Comment news
-  permission_delete_messages: Delete messages
-  permission_select_project_modules: Select project modules
-  permission_manage_documents: Manage documents
-  permission_edit_wiki_pages: Edit wiki pages
-  permission_add_issue_watchers: Add watchers
-  permission_view_gantt: View gantt chart
-  permission_move_issues: Move issues
-  permission_manage_issue_relations: Manage issue relations
-  permission_delete_wiki_pages: Delete wiki pages
-  permission_manage_boards: Manage boards
-  permission_delete_wiki_pages_attachments: Delete attachments
-  permission_view_wiki_edits: View wiki history
-  permission_add_messages: Post messages
-  permission_view_messages: View messages
-  permission_manage_files: Manage files
-  permission_edit_issue_notes: Edit notes
-  permission_manage_news: Manage news
-  permission_view_calendar: View calendrier
-  permission_manage_members: Manage members
-  permission_edit_messages: Edit messages
-  permission_delete_issues: Delete issues
-  permission_view_issue_watchers: View watchers list
-  permission_manage_repository: Manage repository
-  permission_commit_access: Commit access
-  permission_browse_repository: Browse repository
-  permission_view_documents: View documents
-  permission_edit_project: Edit project
-  permission_add_issue_notes: Add notes
-  permission_save_queries: Save queries
-  permission_view_wiki_pages: View wiki
-  permission_rename_wiki_pages: Rename wiki pages
-  permission_edit_time_entries: Edit time logs
-  permission_edit_own_issue_notes: Edit own notes
-  setting_gravatar_enabled: Use Gravatar user icons
-  label_example: Example
+  permission_view_changesets: Разглеждане на changesets
+  permission_view_time_entries: Разглеждане на изразходваното време
+  permission_manage_versions: Управление на верÑиите
+  permission_manage_wiki: Управление на wiki
+  permission_manage_categories: Управление на категориите задачи
+  permission_protect_wiki_pages: Заключване на wiki Ñтраници
+  permission_comment_news: Коментиране на новини
+  permission_delete_messages: Изтриване на ÑъобщениÑ
+  permission_select_project_modules: Избор на проектни модули
+  permission_manage_documents: Управление на документи
+  permission_edit_wiki_pages: Редактиране на wiki Ñтраници
+  permission_add_issue_watchers: ДобавÑне на наблюдатели
+  permission_view_gantt: Разглеждане на мрежов график
+  permission_move_issues: ПремеÑтване на задачи
+  permission_manage_issue_relations: Управление на връзките между задачите
+  permission_delete_wiki_pages: Изтриване на wiki Ñтраници
+  permission_manage_boards: Управление на boards
+  permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове
+  permission_view_wiki_edits: Разглеждане на wiki иÑториÑ
+  permission_add_messages: Публикуване на ÑъобщениÑ
+  permission_view_messages: Разглеждане на ÑъобщениÑ
+  permission_manage_files: Управление на файлове
+  permission_edit_issue_notes: Редактиране на бележки
+  permission_manage_news: Управление на новини
+  permission_view_calendar: Разглеждане на календари
+  permission_manage_members: Управление на членовете (на екип)
+  permission_edit_messages: Редактиране на ÑъобщениÑ
+  permission_delete_issues: Изтриване на задачи
+  permission_view_issue_watchers: Разглеждане на ÑпиÑък Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ð¸
+  permission_manage_repository: Управление на хранилища
+  permission_commit_access: ПоверÑване
+  permission_browse_repository: Разглеждане на хранилища
+  permission_view_documents: Разглеждане на документи
+  permission_edit_project: Редактиране на проект
+  permission_add_issue_notes: Добаване на бележки
+  permission_save_queries: Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚Ð²Ð°Ð½Ð¸Ñ (queries)
+  permission_view_wiki_pages: Разглеждане на wiki
+  permission_rename_wiki_pages: Преименуване на wiki Ñтраници
+  permission_edit_time_entries: Редактиране на time logs
+  permission_edit_own_issue_notes: Редактиране на ÑобÑтвени бележки
+  setting_gravatar_enabled: Използване на портребителÑки икони от Gravatar
+  label_example: Пример
   text_repository_usernames_mapping: "Select ou update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
-  permission_edit_own_messages: Edit own messages
-  permission_delete_own_messages: Delete own messages
-  label_user_activity: "{{value}}'s activity"
-  label_updated_time_by: "Updated by {{author}} {{age}} ago"
-  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-  setting_diff_max_lines_displayed: Max number of diff lines displayed
-  text_plugin_assets_writable: Plugin assets directory writable
-  warning_attachments_not_saved: "{{count}} file(s) could not be saved."
-  button_create_and_continue: Create and continue
-  text_custom_field_possible_values_info: 'One line for each value'
+  permission_edit_own_messages: Редактиране на ÑобÑтвени ÑъобщениÑ
+  permission_delete_own_messages: Изтриване на ÑобÑтвени ÑъобщениÑ
+  label_user_activity: "ÐктивноÑÑ‚ на {{value}}"
+  label_updated_time_by: "Обновена от {{author}} преди {{age}}"
+  text_diff_truncated: '... Този diff не е пълен, понеже е Ð½Ð°Ð´Ñ…Ð²ÑŠÑ€Ð»Ñ Ð¼Ð°ÐºÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€, който може да бъде показан.'
+  setting_diff_max_lines_displayed: МакÑимален брой показани diff редове
+  text_plugin_assets_writable: Папката на приÑтавките е разрешена за запиÑ
+  warning_attachments_not_saved: "{{count}} файла не бÑха запиÑани."
+  button_create_and_continue: Създаване и продължаване
+  text_custom_field_possible_values_info: 'Една ÑтойноÑÑ‚ на ред'
   label_display: Display
   field_editable: Editable
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  field_watcher: Watcher
-  setting_openid: Allow OpenID login and registration
+  setting_repository_log_display_limit: МакÑимален брой на показванете ревизии в лог файла
+  setting_file_max_size_displayed: МакÑимален размер на текÑтовите файлове, показвани inline
+  field_watcher: Ðаблюдател
+  setting_openid: Рарешаване на OpenID вход и региÑтрациÑ
   field_identity_url: OpenID URL
-  label_login_with_open_id_option: or login with OpenID
-  field_content: Content
-  label_descending: Descending
-  label_sort: Sort
-  label_ascending: Ascending
-  label_date_from_to: From {{start}} to {{end}}
+  label_login_with_open_id_option: или вход чрез OpenID
+  field_content: Съдържание
+  label_descending: ÐамалÑващ
+  label_sort: Сортиране
+  label_ascending: ÐараÑтващ
+  label_date_from_to: От {{start}} до {{end}}
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do?
-  text_wiki_page_reassign_children: Reassign child pages to this parent page
-  text_wiki_page_nullify_children: Keep child pages as root pages
-  text_wiki_page_destroy_children: Delete child pages and all their descendants
-  setting_password_min_length: Minimum password length
-  field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
-  label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
-  permission_add_project: Create project
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  label_view_all_revisions: View all revisions
-  label_tag: Tag
-  label_branch: Branch
-  error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
-  error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
-  text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
-  text_journal_set_to: "{{label}} set to {{value}}"
-  text_journal_deleted: "{{label}} deleted ({{old}})"
-  label_group_plural: Groups
-  label_group: Group
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  text_journal_added: "{{label}} {{value}} added"
-  field_active: Active
-  enumeration_system_activity: System Activity
-  permission_delete_issue_watchers: Delete watchers
-  version_status_closed: closed
-  version_status_locked: locked
-  version_status_open: open
-  error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
-  label_user_anonymous: Anonymous
-  button_move_and_follow: Move and follow
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_gravatar_default: Default Gravatar image
+  text_wiki_page_destroy_question: Тази Ñтраница има {{descendants}} Ñтраници деца и descendant(s). Какво желаете да правите?
+  text_wiki_page_reassign_children: Преназначаване на Ñтраниците деца на тази родителÑка Ñтраница
+  text_wiki_page_nullify_children: Запазване на тези Ñтраници като коренни Ñтраници
+  text_wiki_page_destroy_children: Изтриване на Ñтраниците деца и вÑички техни descendants
+  setting_password_min_length: Минимална дължина на парола
+  field_group_by: Групиране на резултатите по
+  mail_subject_wiki_content_updated: "Wiki Ñтраницата '{{id}}' не беше обновена"
+  label_wiki_content_added: Wiki Ñтраница беше добавена
+  mail_subject_wiki_content_added: "Wiki Ñтраницата '{{id}}' беше добавена"
+  mail_body_wiki_content_added: Wiki Ñтраницата '{{id}}' беше добавена от {{author}}.
+  label_wiki_content_updated: Wiki Ñтраница беше обновена
+  mail_body_wiki_content_updated: Wiki Ñтраницата '{{id}}' беше обновена от {{author}}.
+  permission_add_project: Създаване на проект
+  setting_new_project_user_role_id: РолÑ, давана на потребител, Ñъздаващ проекти, който не е админиÑтратор
+  label_view_all_revisions: Разглеждане на вÑички ревизии
+  label_tag: ВерÑиÑ
+  label_branch: работен вариант
+  error_no_tracker_in_project: ÐÑма аÑоциирани тракери Ñ Ñ‚Ð¾Ð·Ð¸ проект. Проверете наÑтройките на проекта.
+  error_no_default_issue_status: ÐÑма уÑтановено подразбиращо Ñе ÑÑŠÑтоÑние за задачите. ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐµÑ‚Ðµ вашата ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ (Вижте "ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ -> СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи").
+  text_journal_changed: "{{label}} променен от {{old}} на {{new}}"
+  text_journal_set_to: "{{label}} уÑтановен на {{value}}"
+  text_journal_deleted: "{{label}} изтрит ({{old}})"
+  label_group_plural: Групи
+  label_group: Група
+  label_group_new: Ðова група
+  label_time_entry_plural: Използвано време
+  text_journal_added: "Добавено {{label}} {{value}}"
+  field_active: Ðктивен
+  enumeration_system_activity: СиÑтемна активноÑÑ‚
+  permission_delete_issue_watchers: Изтриване на наблюдатели
+  version_status_closed: затворена
+  version_status_locked: заключена
+  version_status_open: отворена
+  error_can_not_reopen_issue_on_closed_version: Задача, аÑоциирана ÑÑŠÑ Ð·Ð°Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð° верÑÐ¸Ñ Ð½Ðµ може да бъде отворена отново
+  label_user_anonymous: Ðнонимен
+  button_move_and_follow: ПремеÑтване и продължаване
+  setting_default_projects_modules: Ðктивирани модули по подразбиране за нов проект
+  setting_gravatar_default: Подразбиращо Ñе изображение от Gravatar
   field_sharing: Sharing
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_system: With all projects
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_tree: With project tree
-  label_version_sharing_none: Not shared
-  error_can_not_archive_project: This project can not be archived
-  button_duplicate: Duplicate
-  button_copy_and_follow: Copy and follow
-  label_copy_source: Source
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_status: Use the issue status
-  error_issue_done_ratios_not_updated: Issue done ratios not updated.
-  error_workflow_copy_target: Please select target tracker(s) and role(s)
-  setting_issue_done_ratio_issue_field: Use the issue field
-  label_copy_same_as_target: Same as target
-  label_copy_target: Target
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  error_workflow_copy_source: Please select a source tracker or role
-  label_update_issue_done_ratios: Update issue done ratios
-  setting_start_of_week: Start calendars on
-  permission_view_issues: View Issues
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_revision_id: Revision {{value}}
-  label_api_access_key: API access key
-  label_api_access_key_created_on: API access key created {{value}} ago
-  label_feeds_access_key: RSS access key
-  notice_api_access_key_reseted: Your API access key was reset.
-  setting_rest_api_enabled: Enable REST web service
-  label_missing_api_access_key: Missing an API access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  button_show: Show
-  text_line_separated: Multiple values allowed (one line for each value).
-  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
-  permission_add_subprojects: Create subprojects
-  label_subproject_new: New subproject
+  label_version_sharing_hierarchy: С проектна йерархиÑ
+  label_version_sharing_system: С вÑички проекти
+  label_version_sharing_descendants: С подпроекти
+  label_version_sharing_tree: С дърво на проектите
+  label_version_sharing_none: Ðе Ñподелен
+  error_can_not_archive_project: Този проект не може да бъде архивиран
+  button_duplicate: Дублиране
+  button_copy_and_follow: Копиране и продължаване
+  label_copy_source: Източник
+  setting_issue_done_ratio: ИзчиÑление на процента на готово задачи Ñ
+  setting_issue_done_ratio_issue_status: Използване на ÑÑŠÑтоÑниетона задачите
+  error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен.
+  error_workflow_copy_target: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ тракер(и) и Ñ€Ð¾Ð»Ñ (роли).
+  setting_issue_done_ratio_issue_field: Използване на поле 'задача'
+  label_copy_same_as_target: Също като целта
+  label_copy_target: Цел
+  notice_issue_done_ratios_updated: Обновен процент на завършените задачи.
+  error_workflow_copy_source: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ source тракер или ролÑ
+  label_update_issue_done_ratios: ОбновÑване на процента на завършените задачи
+  setting_start_of_week: Първи ден на Ñедмицата
+  permission_view_issues: Разглеждане на задачите
+  label_display_used_statuses_only: Показване Ñамо на ÑÑŠÑтоÑниÑта, използвани от този тракер
+  label_revision_id: Ð ÐµÐ²Ð¸Ð·Ð¸Ñ {{value}}
+  label_api_access_key: API ключ за доÑтъп
+  label_api_access_key_created_on: API ключ за доÑтъп е Ñъздаден преди {{value}}
+  label_feeds_access_key: RSS access ключ
+  notice_api_access_key_reseted: ВашиÑÑ‚ API ключ за доÑтъп беше изчиÑтен.
+  setting_rest_api_enabled: Разрешаване на REST web ÑървиÑ
+  label_missing_api_access_key: ЛипÑващ API ключ
+  label_missing_feeds_access_key: ЛипÑващ RSS ключ за доÑтъп
+  button_show: Показване
+  text_line_separated: Позволени Ñа много ÑтойноÑти (по едно на ред).
+  setting_mail_handler_body_delimiters: ОтрÑзване на e-mail-ите Ñлед един от тези редове
+  permission_add_subprojects: Създаване на подпроекти
+  label_subproject_new: Ðов подпроект
   text_own_membership_delete_confirmation: |-
-    You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
-    Are you sure you want to continue?
-  label_close_versions: Close completed versions
+    Вие Ñте на път да премахнете нÑкои или вÑички ваши Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ е възможно Ñлед това на да не можете да редатирате този проект.
+    Сигурен ли Ñте, че иÑкате да продължите?
+  label_close_versions: ЗатварÑне на завършените верÑии
   label_board_sticky: Sticky
-  label_board_locked: Locked
-  permission_export_wiki_pages: Export wiki pages
+  label_board_locked: Заключена
+  permission_export_wiki_pages: ЕкÑпорт на wiki Ñтраници
   setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Manage project activities
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_profile: Profile
-  permission_manage_subtasks: Manage subtasks
-  field_parent_issue: Parent task
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect ({{value}})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
+  permission_manage_project_activities: Управление на дейноÑтите на проекта
+  error_unable_delete_issue_status: ÐевъзможноÑÑ‚ за изтриване на ÑÑŠÑтоÑние на задача
+  label_profile: Профил
+  permission_manage_subtasks: Управление на подзадачите
+  field_parent_issue: РодителÑка задача
+  label_subtask_plural: Подзадачи
+  label_project_copy_notifications: Изпращане на Send e-mail извеÑÑ‚Ð¸Ñ Ð¿Ð¾ време на копирането на проекта
+  error_can_not_delete_custom_field: ÐевъзможноÑÑ‚ за изтриване на потребителÑко поле
+  error_unable_to_connect: ÐевъзможноÑÑ‚ за Ñвързване Ñ ({{value}})
+  error_can_not_remove_role: Тази Ñ€Ð¾Ð»Ñ Ñе използва и не може да бъде изтрита.
+  error_can_not_delete_tracker: Този тракер Ñъдържа задачи и не може да бъде изтрит.
   field_principal: Principal
   label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
+  notice_failed_to_save_members: "ÐевъзможноÑÑ‚ за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° член(ове): {{errors}}."
+  text_zoom_out: ÐамалÑване
+  text_zoom_in: Увеличаване
+  notice_unable_delete_time_entry: ÐевъзможноÑÑ‚ за изтриване на Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° time log.
+  label_overall_spent_time: Общо употребено време
   field_time_entries: Log time
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  text_tip_issue_end_day: issue ending this day
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  field_member_of_group: Assignee's group
   project_module_gantt: Gantt
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  text_tip_issue_begin_end_day: issue beginning and ending this day
+  setting_default_notification_option: Default notification option
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  text_tip_issue_begin_day: issue beginning this day
+  label_user_mail_option_only_assigned: Only for things I am assigned to
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  field_assigned_to_role: Assignee's role
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/bs.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/bs.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -252,7 +252,6 @@
   field_attr_lastname: Atribut za prezime
   field_attr_mail: Atribut za email
   field_onthefly: 'Kreiranje korisnika "On-the-fly"'
-  field_start_date: PoÄetak
   field_done_ratio: % Realizovano
   field_auth_source: Mod za authentifikaciju
   field_hide_mail: Sakrij moju email adresu
@@ -676,7 +675,6 @@
   label_search_titles_only: Pretraži samo naslove
   label_user_mail_option_all: "Za bilo koji događaj na svim mojim projektima"
   label_user_mail_option_selected: "Za bilo koji događaj na odabranim projektima..."
-  label_user_mail_option_none: "Samo za stvari koje ja gledam ili sam u njih ukljuÄen"
   label_user_mail_no_self_notified: "Ne želim notifikaciju za promjene koje sam ja napravio"
   label_registration_activation_by_email: aktivacija korisniÄkog raÄuna email-om
   label_registration_manual_activation: ruÄna aktivacija korisniÄkog raÄuna
@@ -750,9 +748,9 @@
   text_subprojects_destroy_warning: "Podprojekt(i): {{value}} će takođe biti izbrisani."
   text_workflow_edit: Odaberite ulogu i podruÄje aktivnosti za ispravku toka promjena na aktivnosti
   text_are_you_sure: Da li ste sigurni ?
-  text_tip_task_begin_day: zadatak poÄinje danas
-  text_tip_task_end_day: zadatak završava danas
-  text_tip_task_begin_end_day: zadatak zapoÄinje i zavrÅ¡ava danas
+  text_tip_issue_begin_day: zadatak poÄinje danas
+  text_tip_issue_end_day: zadatak završava danas
+  text_tip_issue_begin_end_day: zadatak zapoÄinje i zavrÅ¡ava danas
   text_project_identifier_info: 'Samo mala slova (a-z), brojevi i crtice su dozvoljeni.<br />Nakon snimanja, identifikator se ne može mijenjati.'
   text_caracters_maximum: "maksimum {{count}} karaktera."
   text_caracters_minimum: "Dužina mora biti najmanje {{count}} znakova."
@@ -830,12 +828,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -927,8 +925,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/ca.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/ca.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -195,10 +195,10 @@
   mail_body_account_activation_request: "S'ha registrat un usuari nou ({{value}}). El seu compte està pendent d'aprovació:"
   mail_subject_reminder: "{{count}} assumptes venceran els següents {{days}} dies"
   mail_body_reminder: "{{count}} assumptes que teniu assignades venceran els següents {{days}} dies:"
-  mail_subject_wiki_content_added: "S'ha afegit la pàgina wiki «{{page}}»"
-  mail_body_wiki_content_added: "En {{author}} ha afegit la pàgina wiki «{{page}}»."
-  mail_subject_wiki_content_updated: "S'ha actualitzat la pàgina wiki «{{page}}»"
-  mail_body_wiki_content_updated: "En {{author}} ha actualitzat la pàgina wiki «{{page}}»."
+  mail_subject_wiki_content_added: "S'ha afegit la pàgina wiki «{{id}}»"
+  mail_body_wiki_content_added: "En {{author}} ha afegit la pàgina wiki «{{id}}»."
+  mail_subject_wiki_content_updated: "S'ha actualitzat la pàgina wiki «{{id}}»"
+  mail_body_wiki_content_updated: "En {{author}} ha actualitzat la pàgina wiki «{{id}}»."
   
   gui_validation_error: 1 error
   gui_validation_error_plural: "{{count}} errors"
@@ -264,7 +264,6 @@
   field_attr_lastname: Atribut del cognom
   field_attr_mail: Atribut del correu electrònic
   field_onthefly: "Creació de l'usuari «al vol»"
-  field_start_date: Inici
   field_done_ratio: % realitzat
   field_auth_source: "Mode d'autenticació"
   field_hide_mail: "Oculta l'adreça de correu electrònic"
@@ -725,7 +724,6 @@
   label_search_titles_only: Cerca només en els títols
   label_user_mail_option_all: "Per qualsevol esdeveniment en tots els meus projectes"
   label_user_mail_option_selected: "Per qualsevol esdeveniment en els projectes seleccionats..."
-  label_user_mail_option_none: "Només per les coses que vigilo o hi estic implicat"
   label_user_mail_no_self_notified: "No vull ser notificat pels canvis que faig jo mateix"
   label_registration_activation_by_email: activació del compte per correu electrònic
   label_registration_manual_activation: activació del compte manual
@@ -842,9 +840,9 @@
   text_journal_set_to: "{{label}} s'ha establert a {{value}}"
   text_journal_deleted: "{{label}} s'ha suprimit ({{old}})"
   text_journal_added: "S'ha afegit {{label}} {{value}}"
-  text_tip_task_begin_day: "tasca que s'inicia aquest dia"
-  text_tip_task_end_day: tasca que finalitza aquest dia
-  text_tip_task_begin_end_day: "tasca que s'inicia i finalitza aquest dia"
+  text_tip_issue_begin_day: "tasca que s'inicia aquest dia"
+  text_tip_issue_end_day: tasca que finalitza aquest dia
+  text_tip_issue_begin_end_day: "tasca que s'inicia i finalitza aquest dia"
   text_project_identifier_info: "Es permeten lletres en minúscules (a-z), números i guions.<br />Un cop desat, l'identificador no es pot modificar."
   text_caracters_maximum: "{{count}} caràcters com a màxim."
   text_caracters_minimum: "Com a mínim ha de tenir {{count}} caràcters."
@@ -916,8 +914,19 @@
   enumeration_activities: Activitats (seguidor de temps)
   enumeration_system_activity: Activitat del sistema
 
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/cs.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/cs.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -24,8 +24,8 @@
       time: "%H:%M"
       short: "%d %b %H:%M"
       long: "%B %d, %Y %H:%M"
-    am: "am"
-    pm: "pm"
+    am: "dop."
+    pm: "odp."
     
   datetime:
     distance_in_words:
@@ -61,8 +61,8 @@
         one:   "více než 1 rok"
         other: "více než {{count}} roky"
       almost_x_years:
-        one:   "almost 1 year"
-        other: "almost {{count}} years"
+        one:   "témeř 1 rok"
+        other: "téměř {{count}} roky"
 
   number:
     format:
@@ -116,7 +116,7 @@
         greater_than_start_date: "musí být vÄ›tší než poÄáteÄní datum"
         not_same_project: "nepatří stejnému projektu"
         circular_dependency: "Tento vztah by vytvořil cyklickou závislost"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "Úkol nemůže být spojen s jedním z jeho dílÄích úkolů"
 
   # Updated by Josef Liška <jl@chl.cz>
   # CZ translation by Maxim Krušina | Massimo Filippi, s.r.o. | maxim@mxm.cz
@@ -150,19 +150,19 @@
   notice_successful_connection: Úspěšné připojení.
   notice_file_not_found: Stránka na kterou se snažíte zobrazit neexistuje nebo byla smazána.
   notice_locking_conflict: Údaje byly změněny jiným uživatelem.
-  notice_scm_error: Entry and/or revision doesn't exist in the repository.
+  notice_scm_error: Záznam a/nebo revize neexistuje v repozitáři.
   notice_not_authorized: Nemáte dostateÄná práva pro zobrazení této stránky.
   notice_email_sent: "Na adresu {{value}} byl odeslán email"
   notice_email_error: "Při odesílání emailu nastala chyba ({{value}})"
   notice_feeds_access_key_reseted: Váš klÃ­Ä pro přístup k RSS byl resetován.
-  notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}."
+  notice_failed_to_save_issues: "Chyba při uložení {{count}} úkolu(ů) z {{total}} vybraných: {{ids}}."
   notice_no_issue_selected: "Nebyl zvolen žádný úkol. Prosím, zvolte úkoly, které chcete editovat"
   notice_account_pending: "Váš úÄet byl vytvoÅ™en, nyní Äeká na schválení administrátorem."
   notice_default_data_loaded: Výchozí konfigurace úspěšně nahrána.
   
   error_can_t_load_default_data: "Výchozí konfigurace nebyla nahrána: {{value}}"
-  error_scm_not_found: "Položka a/nebo revize neexistují v repository."
-  error_scm_command_failed: "Při pokusu o přístup k repository došlo k chybě: {{value}}"
+  error_scm_not_found: "Položka a/nebo revize neexistují v repozitáři."
+  error_scm_command_failed: "Při pokusu o přístup k repozitáři došlo k chybě: {{value}}"
   error_issue_not_found_in_project: 'Úkol nebyl nalezen nebo nepatří k tomuto projektu'
   
   mail_subject_lost_password: "Vaše heslo ({{value}})"
@@ -210,10 +210,10 @@
   field_due_date: Uzavřít do
   field_assigned_to: Přiřazeno
   field_priority: Priorita
-  field_fixed_version: Přiřazeno k verzi
+  field_fixed_version: Cílová verze
   field_user: Uživatel
   field_role: Role
-  field_homepage: Homepage
+  field_homepage: Domovská stránka
   field_is_public: Veřejný
   field_parent: Nadřazený projekt
   field_is_in_roadmap: Úkoly zobrazené v plánu
@@ -237,7 +237,6 @@
   field_attr_lastname: Příjemní (atribut)
   field_attr_mail: Email (atribut)
   field_onthefly: Automatické vytváření uživatelů
-  field_start_date: ZaÄátek
   field_done_ratio: % Hotovo
   field_auth_source: AutentifikaÄní mód
   field_hide_mail: Nezobrazovat můj email
@@ -265,18 +264,18 @@
   setting_app_subtitle: Podtitulek aplikace
   setting_welcome_text: Uvítací text
   setting_default_language: Výchozí jazyk
-  setting_login_required: Auten. vyžadována
+  setting_login_required: Autentifikace vyžadována
   setting_self_registration: Povolena automatická registrace
   setting_attachment_max_size: Maximální velikost přílohy
   setting_issues_export_limit: Limit pro export úkolů
   setting_mail_from: Odesílat emaily z adresy
   setting_bcc_recipients: Příjemci skryté kopie (bcc)
-  setting_host_name: Host name
+  setting_host_name: Jméno serveru
   setting_text_formatting: Formátování textu
-  setting_wiki_compression: Komperese historie Wiki
-  setting_feeds_limit: Feed content limit
+  setting_wiki_compression: Komprese historie Wiki
+  setting_feeds_limit: Limit obsahu příspěvků
   setting_default_projects_public: Nové projekty nastavovat jako veřejné
-  setting_autofetch_changesets: Autofetch commits
+  setting_autofetch_changesets: Automaticky stahovat commity
   setting_sys_api_enabled: Povolit WS pro správu repozitory
   setting_commit_ref_keywords: KlíÄová slova pro odkazy
   setting_commit_fix_keywords: KlíÄová slova pro uzavÅ™ení
@@ -290,8 +289,8 @@
   setting_protocol: Protokol
   setting_per_page_options: Povolené poÄty řádků na stránce
   setting_user_format: Formát zobrazení uživatele
-  setting_activity_days_default: Days displayed on project activity
-  setting_display_subprojects_issues: Display subprojects issues on main projects by default
+  setting_activity_days_default: Dny zobrazené v Äinnosti projektu
+  setting_display_subprojects_issues: Automaticky zobrazit úkoly podprojektu v hlavním projektu
   
   project_module_issue_tracking: Sledování úkolů
   project_module_time_tracking: Sledování Äasu
@@ -299,7 +298,7 @@
   project_module_documents: Dokumenty
   project_module_files: Soubory
   project_module_wiki: Wiki
-  project_module_repository: Repository
+  project_module_repository: Repozitář
   project_module_boards: Diskuse
   
   label_user: Uživatel
@@ -309,16 +308,16 @@
   label_project_new: Nový projekt
   label_project_plural: Projekty
   label_x_projects:
-    zero:  no projects
-    one:   1 project
-    other: "{{count}} projects"
+    zero:  žádné projekty
+    one:   1 projekt
+    other: "{{count}} projekty(ů)"
   label_project_all: Všechny projekty
   label_project_latest: Poslední projekty
   label_issue: Úkol
   label_issue_new: Nový úkol
   label_issue_plural: Úkoly
   label_issue_view_all: Všechny úkoly
-  label_issues_by: "Úkoly od uživatele {{value}}"
+  label_issues_by: "Úkoly podle {{value}}"
   label_issue_added: Úkol přidán
   label_issue_updated: Úkol aktualizován
   label_document: Dokument
@@ -335,7 +334,7 @@
   label_tracker: Fronta
   label_tracker_plural: Fronty
   label_tracker_new: Nová fronta
-  label_workflow: Workflow
+  label_workflow: Průběh práce
   label_issue_status: Stav úkolu
   label_issue_status_plural: Stavy úkolů
   label_issue_status_new: Nový stav
@@ -378,14 +377,14 @@
   label_list: Seznam
   label_date: Datum
   label_integer: Celé Äíslo
-  label_float: Desetiné Äíslo
+  label_float: Desetinné Äíslo
   label_boolean: Ano/Ne
   label_string: Text
   label_text: Dlouhý text
   label_attribute: Atribut
   label_attribute_plural: Atributy
-  label_download: "{{count}} Download"
-  label_download_plural: "{{count}} Downloads"
+  label_download: "{{count}} stažení"
+  label_download_plural: "{{count}} stažení"
   label_no_data: Žádné položky
   label_change_status: Změnit stav
   label_history: Historie
@@ -416,17 +415,17 @@
   label_closed_issues: uzavřený
   label_closed_issues_plural: uzavřené
   label_x_open_issues_abbr_on_total:
-    zero:  0 open / {{total}}
-    one:   1 open / {{total}}
-    other: "{{count}} open / {{total}}"
+    zero:  0 otevřených / {{total}}
+    one:   1 otevřený / {{total}}
+    other: "{{count}} otevřených / {{total}}"
   label_x_open_issues_abbr:
-    zero:  0 open
-    one:   1 open
-    other: "{{count}} open"
+    zero:  0 otevřených
+    one:   1 otevřený
+    other: "{{count}} otevřených"
   label_x_closed_issues_abbr:
-    zero:  0 closed
-    one:   1 closed
-    other: "{{count}} closed"
+    zero:  0 uzavřených
+    one:   1 uzavřený
+    other: "{{count}} uzavřených"
   label_total: Celkem
   label_permissions: Práva
   label_current_status: Aktuální stav
@@ -450,9 +449,9 @@
   label_comment: Komentář
   label_comment_plural: Komentáře
   label_x_comments:
-    zero: no comments
-    one: 1 comment
-    other: "{{count}} comments"
+    zero: žádné komentáře
+    one: 1 komentář
+    other: "{{count}} komentářů"
   label_comment_add: Přidat komentáře
   label_comment_added: Komentář přidán
   label_comment_delete: Odstranit komentář
@@ -482,8 +481,8 @@
   label_contains: obsahuje
   label_not_contains: neobsahuje
   label_day_plural: dny
-  label_repository: Repository
-  label_repository_plural: Repository
+  label_repository: Repozitář
+  label_repository_plural: Repozitáře
   label_browse: Procházet
   label_modification: "{{count}} změna"
   label_modification_plural: "{{count}} změn"
@@ -532,7 +531,7 @@
   label_diff_inline: uvnitÅ™
   label_diff_side_by_side: vedle sebe
   label_options: Nastavení
-  label_copy_workflow_from: Kopírovat workflow z
+  label_copy_workflow_from: Kopírovat průběh práce z
   label_permissions_report: Přehled práv
   label_watched_issues: Sledované úkoly
   label_related_issues: Související úkoly
@@ -553,7 +552,7 @@
   label_stay_logged_in: Zůstat přihlášený
   label_disabled: zakázán
   label_show_completed_versions: Ukázat dokonÄené verze
-  label_me: mÄ›
+  label_me: já
   label_board: Fórum
   label_board_new: Nové fórum
   label_board_plural: Fóra
@@ -576,18 +575,17 @@
   label_module_plural: Moduly
   label_added_time_by: "Přidáno uživatelem {{author}} před {{age}}"
   label_updated_time: "Aktualizováno před {{value}}"
-  label_jump_to_a_project: Zvolit projekt...
+  label_jump_to_a_project: Vyberte projekt...
   label_file_plural: Soubory
   label_changeset_plural: Changesety
   label_default_columns: Výchozí sloupce
   label_no_change_option: (beze změny)
-  label_bulk_edit_selected_issues: Bulk edit selected issues
+  label_bulk_edit_selected_issues: Hromadná úprava vybraných úkolů
   label_theme: Téma
   label_default: Výchozí
   label_search_titles_only: Vyhledávat pouze v názvech
   label_user_mail_option_all: "Pro všechny události všech mých projektů"
   label_user_mail_option_selected: "Pro všechny události vybraných projektů..."
-  label_user_mail_option_none: "Pouze pro události které sleduji nebo které se mne týkají"
   label_user_mail_no_self_notified: "Nezasílat informace o mnou vytvořených změnách"
   label_registration_activation_by_email: aktivace úÄtu emailem
   label_registration_manual_activation: manuální aktivace úÄtu
@@ -600,7 +598,7 @@
   label_scm: SCM
   label_plugins: Doplňky
   label_ldap_authentication: Autentifikace LDAP
-  label_downloads_abbr: D/L
+  label_downloads_abbr: Staž.
   label_optional_description: Volitelný popis
   label_add_another_file: Přidat další soubor
   label_preferences: Nastavení
@@ -653,33 +651,33 @@
   text_regexp_info: napÅ™. ^[A-Z0-9]+$
   text_min_max_length_info: 0 znamená bez limitu
   text_project_destroy_confirmation: Jste si jisti, že chcete odstranit tento projekt a všechna související data ?
-  text_workflow_edit: Vyberte roli a frontu k editaci workflow
+  text_workflow_edit: Vyberte roli a frontu k editaci průběhu práce
   text_are_you_sure: Jste si jisti?
-  text_tip_task_begin_day: úkol zaÄíná v tento den
-  text_tip_task_end_day: úkol konÄí v tento den
-  text_tip_task_begin_end_day: úkol zaÄíná a konÄí v tento den
+  text_tip_issue_begin_day: úkol zaÄíná v tento den
+  text_tip_issue_end_day: úkol konÄí v tento den
+  text_tip_issue_begin_end_day: úkol zaÄíná a konÄí v tento den
   text_project_identifier_info: 'Jsou povolena malá písmena (a-z), Äísla a pomlÄky.<br />Po uložení již není možné identifikátor zmÄ›nit.'
   text_caracters_maximum: "{{count}} znaků maximálně."
   text_caracters_minimum: "Musí být alespoň {{count}} znaků dlouhé."
   text_length_between: "Délka mezi {{min}} a {{max}} znaky."
-  text_tracker_no_workflow: Pro tuto frontu není definován žádný workflow
+  text_tracker_no_workflow: Pro tuto frontu není definován žádný průběh práce
   text_unallowed_characters: Nepovolené znaky
   text_comma_separated: Povoleno více hodnot (oddÄ›lÄ›né Äárkou).
-  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
+  text_issues_ref_in_commit_messages: Odkazování a opravování úkolů ve zprávách commitů
   text_issue_added: "Úkol {{id}} byl vytvořen uživatelem {{author}}."
   text_issue_updated: "Úkol {{id}} byl aktualizován uživatelem {{author}}."
-  text_wiki_destroy_confirmation: Opravdu si přejete odstranit tuto WIKI a celý její obsah?
+  text_wiki_destroy_confirmation: Opravdu si přejete odstranit tuto Wiki a celý její obsah?
   text_issue_category_destroy_question: "Některé úkoly ({{count}}) jsou přiřazeny k této kategorii. Co s nimi chtete udělat?"
   text_issue_category_destroy_assignments: Zrušit přiřazení ke kategorii
   text_issue_category_reassign_to: Přiřadit úkoly do této kategorie
   text_user_mail_option: "U projektů, které nebyly vybrány, budete dostávat oznámení pouze o vaÅ¡ich Äi o sledovaných položkách (napÅ™. o položkách jejichž jste autor nebo ke kterým jste pÅ™iÅ™azen(a))."
-  text_no_configuration_data: "Role, fronty, stavy úkolů ani workflow nebyly zatím nakonfigurovány.\nVelice doporuÄujeme nahrát výchozí konfiguraci.Po té si můžete vÅ¡e upravit"
+  text_no_configuration_data: "Role, fronty, stavy úkolů ani průbÄ›h práce nebyly zatím nakonfigurovány.\nVelice doporuÄujeme nahrát výchozí konfiguraci. Po té si můžete vÅ¡e upravit"
   text_load_default_configuration: Nahrát výchozí konfiguraci
   text_status_changed_by_changeset: "Použito v changesetu {{value}}."
   text_issues_destroy_confirmation: 'Opravdu si přejete odstranit všechny zvolené úkoly?'
   text_select_project_modules: 'Aktivní moduly v tomto projektu:'
   text_default_administrator_account_changed: Výchozí nastavení administrátorského úÄtu zmÄ›nÄ›no
-  text_file_repository_writable: Povolen zápis do repository
+  text_file_repository_writable: Povolen zápis do adresáře ukládání souborů
   text_rmagick_available: RMagick k dispozici (volitelné)
   text_destroy_time_entries_question: "U úkolů, které chcete odstranit je evidováno {{hours}} práce. Co chete udělat?"
   text_destroy_time_entries: Odstranit evidované hodiny.
@@ -693,7 +691,7 @@
   default_tracker_feature: Požadavek
   default_tracker_support: Podpora
   default_issue_status_new: Nový
-  default_issue_status_in_progress: In Progress
+  default_issue_status_in_progress: Ve vývoji
   default_issue_status_resolved: Vyřešený
   default_issue_status_feedback: Čeká se
   default_issue_status_closed: Uzavřený
@@ -705,7 +703,7 @@
   default_priority_high: Vysoká
   default_priority_urgent: Urgentní
   default_priority_immediate: Okamžitá
-  default_activity_design: Design
+  default_activity_design: Návhr
   default_activity_development: Vývoj
   
   enumeration_issue_priorities: Priority úkolů
@@ -718,8 +716,8 @@
   mail_body_reminder: "{{count}} úkol(ů), které máte přiřazeny má termín během několik dní ({{days}}):"
   mail_subject_reminder: "{{count}} úkol(ů) má termín během několik dní ({{days}})"
   text_user_wrote: "{{value}} napsal:"
-  label_duplicated_by: duplicated by
-  setting_enabled_scm: Povoleno SCM
+  label_duplicated_by: duplikováno od
+  setting_enabled_scm: Povolené SCM
   text_enumeration_category_reassign_to: 'Přeřadit je do této:'
   text_enumeration_destroy_question: "Několik ({{count}}) objektů je přiřazeno k této hodnotě."
   label_incoming_emails: Příchozí e-maily
@@ -745,22 +743,22 @@
   permission_view_changesets: Zobrazování sady změn
   permission_view_time_entries: Zobrazení stráveného Äasu
   permission_manage_versions: Spravování verzí
-  permission_manage_wiki: Spravování wiki
+  permission_manage_wiki: Spravování Wiki
   permission_manage_categories: Spravování kategorií úkolů
-  permission_protect_wiki_pages: ZabezpeÄení wiki stránek
+  permission_protect_wiki_pages: ZabezpeÄení Wiki stránek
   permission_comment_news: Komentování novinek
   permission_delete_messages: Mazání zpráv
   permission_select_project_modules: Výběr modulů projektu
   permission_manage_documents: Správa dokumentů
-  permission_edit_wiki_pages: Upravování stránek wiki
+  permission_edit_wiki_pages: Upravování stránek Wiki
   permission_add_issue_watchers: Přidání sledujících uživatelů
   permission_view_gantt: Zobrazené Ganttova diagramu
   permission_move_issues: Přesouvání úkolů
   permission_manage_issue_relations: Spravování vztahů mezi úkoly
-  permission_delete_wiki_pages: Mazání stránek na wiki
+  permission_delete_wiki_pages: Mazání stránek na Wiki
   permission_manage_boards: Správa diskusních fór
   permission_delete_wiki_pages_attachments: Mazání příloh
-  permission_view_wiki_edits: Prohlížení historie wiki
+  permission_view_wiki_edits: Prohlížení historie Wiki
   permission_add_messages: Posílání zpráv
   permission_view_messages: Prohlížení zpráv
   permission_manage_files: Spravování souborů
@@ -772,26 +770,26 @@
   permission_delete_issues: Mazání úkolů
   permission_view_issue_watchers: Zobrazení seznamu sledujícíh uživatelů
   permission_manage_repository: Spravování repozitáře
-  permission_commit_access: Commit access
+  permission_commit_access: Commit přístup
   permission_browse_repository: Procházení repozitáře
   permission_view_documents: Prohlížení dokumentů
   permission_edit_project: Úprava projektů
   permission_add_issue_notes: Přidávání poznámek
   permission_save_queries: Ukládání dotazů
-  permission_view_wiki_pages: Prohlížení wiki
-  permission_rename_wiki_pages: Přejmenovávání wiki stránek
+  permission_view_wiki_pages: Prohlížení Wiki
+  permission_rename_wiki_pages: Přejmenovávání Wiki stránek
   permission_edit_time_entries: Upravování záznamů o stráveném Äasu
   permission_edit_own_issue_notes: Upravování vlastních poznámek
   setting_gravatar_enabled: Použít uživatelské ikony Gravatar
   label_example: Příklad
-  text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé  se shodným Redmine uživateslkým jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
+  text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživatelským jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
   permission_edit_own_messages: Upravit vlastní zprávy
   permission_delete_own_messages: Smazat vlastní zprávy
   label_user_activity: "Aktivita uživatele: {{value}}"
   label_updated_time_by: "Akutualizováno: {{author}} před: {{age}}"
   text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.'
   setting_diff_max_lines_displayed: Maximální poÄet zobrazenách řádků rozdílů
-  text_plugin_assets_writable: Plugin assets directory writable
+  text_plugin_assets_writable: Možnost zápisu do adresáře plugin assets
   warning_attachments_not_saved: "{{count}} soubor(ů) nebylo možné uložit."
   button_create_and_continue: VytvoÅ™it a pokraÄovat
   text_custom_field_possible_values_info: 'Každá hodnota na novém řádku'
@@ -810,111 +808,122 @@
   label_date_from_to: Od {{start}} do {{end}}
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do?
-  text_wiki_page_reassign_children: Reassign child pages to this parent page
-  text_wiki_page_nullify_children: Keep child pages as root pages
-  text_wiki_page_destroy_children: Delete child pages and all their descendants
-  setting_password_min_length: Minimum password length
-  field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
-  label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
-  permission_add_project: Create project
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  label_view_all_revisions: View all revisions
+  text_wiki_page_destroy_question: Tato stránka má {{descendants}} podstránek a potomků. Co chcete udělat?
+  text_wiki_page_reassign_children: PÅ™iÅ™adit podstránky k tomuto rodiÄi
+  text_wiki_page_nullify_children: Ponechat podstránky jako kořenové stránky
+  text_wiki_page_destroy_children: Smazat podstránky a všechny jejich potomky
+  setting_password_min_length: Minimální délka hesla
+  field_group_by: Seskupovat výsledky podle
+  mail_subject_wiki_content_updated: "'{{id}}' Wiki stránka byla aktualizována"
+  label_wiki_content_added: Wiki stránka přidána
+  mail_subject_wiki_content_added: "'{{id}}' Wiki stránka byla přidána"
+  mail_body_wiki_content_added: "'{{id}}' Wiki stránka byla přidána od {{author}}."
+  label_wiki_content_updated: Wiki stránka aktualizována
+  mail_body_wiki_content_updated: "'{{id}}' Wiki stránka byla aktualizována od {{author}}."
+  permission_add_project: Vytvořit projekt
+  setting_new_project_user_role_id: Role přiřazená uživateli bez práv administrátora, který projekt vytvořil
+  label_view_all_revisions: Zobrazit všechny revize
   label_tag: Tag
   label_branch: Branch
-  error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
-  error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
-  text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
-  text_journal_set_to: "{{label}} set to {{value}}"
-  text_journal_deleted: "{{label}} deleted ({{old}})"
-  label_group_plural: Groups
-  label_group: Group
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  text_journal_added: "{{label}} {{value}} added"
-  field_active: Active
-  enumeration_system_activity: System Activity
-  permission_delete_issue_watchers: Delete watchers
-  version_status_closed: closed
-  version_status_locked: locked
-  version_status_open: open
-  error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
-  label_user_anonymous: Anonymous
-  button_move_and_follow: Move and follow
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_gravatar_default: Default Gravatar image
-  field_sharing: Sharing
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_system: With all projects
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_tree: With project tree
-  label_version_sharing_none: Not shared
-  error_can_not_archive_project: This project can not be archived
-  button_duplicate: Duplicate
-  button_copy_and_follow: Copy and follow
-  label_copy_source: Source
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_status: Use the issue status
-  error_issue_done_ratios_not_updated: Issue done ratios not updated.
-  error_workflow_copy_target: Please select target tracker(s) and role(s)
-  setting_issue_done_ratio_issue_field: Use the issue field
-  label_copy_same_as_target: Same as target
-  label_copy_target: Target
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  error_workflow_copy_source: Please select a source tracker or role
-  label_update_issue_done_ratios: Update issue done ratios
-  setting_start_of_week: Start calendars on
-  permission_view_issues: View Issues
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_revision_id: Revision {{value}}
-  label_api_access_key: API access key
-  label_api_access_key_created_on: API access key created {{value}} ago
-  label_feeds_access_key: RSS access key
-  notice_api_access_key_reseted: Your API access key was reset.
-  setting_rest_api_enabled: Enable REST web service
-  label_missing_api_access_key: Missing an API access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  button_show: Show
-  text_line_separated: Multiple values allowed (one line for each value).
-  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
-  permission_add_subprojects: Create subprojects
-  label_subproject_new: New subproject
+  error_no_tracker_in_project: Žádná fronta nebyla přiřazena tomuto projektu. Prosím zkontroluje nastavení projektu.
+  error_no_default_issue_status: Není nastaven výchozí stav úkolu. Prosím zkontrolujte nastavení ("Administrace -> Stavy úkolů").
+  text_journal_changed: "{{label}} změněn z {{old}} na {{new}}"
+  text_journal_set_to: "{{label}} nastaven na {{value}}"
+  text_journal_deleted: "{{label}} smazán ({{old}})"
+  label_group_plural: Skupiny
+  label_group: Skupina
+  label_group_new: Nová skupina
+  label_time_entry_plural: Strávený Äas
+  text_journal_added: "{{label}} {{value}} přidán"
+  field_active: Aktivní
+  enumeration_system_activity: Systémová aktivita
+  permission_delete_issue_watchers: Smazat přihlížející
+  version_status_closed: zavřený
+  version_status_locked: uzamÄený
+  version_status_open: otevřený
+  error_can_not_reopen_issue_on_closed_version: Úkol přiřazený k uzavřené verzi nemůže být znovu otevřen
+  label_user_anonymous: Anonymní
+  button_move_and_follow: Přesunout a následovat
+  setting_default_projects_modules: Výchozí zapnutné moduly pro nový projekt
+  setting_gravatar_default: Výchozí Gravatar
+  field_sharing: Sdílení
+  label_version_sharing_hierarchy: S hierarchií projektu
+  label_version_sharing_system: Se všemi projekty
+  label_version_sharing_descendants: S podprojekty
+  label_version_sharing_tree: Se stromem projektu
+  label_version_sharing_none: Nesdíleno
+  error_can_not_archive_project: Tento projekt nemůže být archivován
+  button_duplicate: Duplikát
+  button_copy_and_follow: Kopírovat a následovat
+  label_copy_source: Zdroj
+  setting_issue_done_ratio: SpoÄítat koeficient dokonÄení úkolu s
+  setting_issue_done_ratio_issue_status: Použít stav úkolu
+  error_issue_done_ratios_not_updated: Koeficient dokonÄení úkolu nebyl aktualizován.
+  error_workflow_copy_target: Prosím vyberte cílovou frontu(y) a roly(e)
+  setting_issue_done_ratio_issue_field: Použít pole úkolu
+  label_copy_same_as_target: Stejný jako cíl
+  label_copy_target: Cíl
+  notice_issue_done_ratios_updated: Koeficienty dokonÄení úkolu byly aktualizovány.
+  error_workflow_copy_source: Prosím vyberte zdrojovou frontu nebo roly
+  label_update_issue_done_ratios: Aktualizovat koeficienty dokonÄení úkolů
+  setting_start_of_week: ZaÄínat kalendáře
+  permission_view_issues: Zobrazit úkoly
+  label_display_used_statuses_only: Zobrazit pouze stavy které jsou použité touto frontou
+  label_revision_id: Revize {{value}}
+  label_api_access_key: API přístupový klíÄ
+  label_api_access_key_created_on: API přístupový klÃ­Ä vytvoÅ™en {{value}} 
+  label_feeds_access_key: RSS přístupový klíÄ
+  notice_api_access_key_reseted: Váš API přístupový klÃ­Ä byl resetován.
+  setting_rest_api_enabled: Zapnout službu REST
+  label_missing_api_access_key: ChybÄ›jící přístupový klÃ­Ä API
+  label_missing_feeds_access_key: ChybÄ›jící přístupový klÃ­Ä RSS
+  button_show: Zobrazit
+  text_line_separated: Více hodnot povoleno (jeden řádek pro každou hodnotu).
+  setting_mail_handler_body_delimiters: Zkrátit e-maily po jednom z těchto řádků
+  permission_add_subprojects: Vytvořit podprojekty
+  label_subproject_new: Nový podprojekt
   text_own_membership_delete_confirmation: |-
-    You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
-    Are you sure you want to continue?
-  label_close_versions: Close completed versions
-  label_board_sticky: Sticky
-  label_board_locked: Locked
-  permission_export_wiki_pages: Export wiki pages
-  setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Manage project activities
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_profile: Profile
-  permission_manage_subtasks: Manage subtasks
-  field_parent_issue: Parent task
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect ({{value}})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
+    Chystáte se odebrat si některá nebo všechny svá oprávnění a potom již nemusíte být schopni upravit tento projekt.
+    Opravdu chcete pokraÄovat?
+  label_close_versions: Zavřít dokonÄené verze
+  label_board_sticky: Nálepka
+  label_board_locked: UzamÄeno
+  permission_export_wiki_pages: Exportovat Wiki stránky
+  setting_cache_formatted_text: Ukládat formátovaný text do vyrovnávací paměti
+  permission_manage_project_activities: Spravovat aktivity projektu
+  error_unable_delete_issue_status: Nelze smazat stavy úkolů
+  label_profile: Profil
+  permission_manage_subtasks: Spravovat podúkoly
+  field_parent_issue: RodiÄovský úkol
+  label_subtask_plural: Podúkol
+  label_project_copy_notifications: Odeslat email oznámení v průběhu kopie projektu
+  error_can_not_delete_custom_field: Nelze smazat volitelné pole
+  error_unable_to_connect: Nelze se připojit ({{value}})
+  error_can_not_remove_role: Tato role je právě používaná a nelze ji smazat.
+  error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nemůže být smazán.
+  field_principal: Hlavní
+  label_my_page_block: Bloky na mé stránce
+  notice_failed_to_save_members: "NepodaÅ™ilo se uložit Älena(y): {{errors}}."
+  text_zoom_out: Oddálit
+  text_zoom_in: Přiblížit
+  notice_unable_delete_time_entry: Nelze smazat Äas ze záznamu.
+  label_overall_spent_time: CelkovÄ› strávený Äas
+  field_time_entries: Zaznamenaný Äas
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  project_module_calendar: Kalendář
+  button_edit_associated_wikipage: "Upravit přiřazenou Wiki stránku: {{page_title}}"
+  text_are_you_sure_with_children: Smazat úkol vÄetnÄ› vÅ¡ech podúkolů?
+  field_text: Textové pole
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/da.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/da.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -250,7 +250,6 @@
   field_attr_lastname: Efternavn attribut
   field_attr_mail: Email attribut
   field_onthefly: løbende brugeroprettelse
-  field_start_date: Start
   field_done_ratio: % Færdig
   field_auth_source: Sikkerhedsmetode
   field_hide_mail: Skjul min email
@@ -594,7 +593,6 @@
   label_search_titles_only: Søg kun i titler
   label_user_mail_option_all: "For alle hændelser på mine projekter"
   label_user_mail_option_selected: "For alle hændelser på de valgte projekter..."
-  label_user_mail_option_none: "Kun for ting jeg overvåger eller jeg er involveret i"
   label_user_mail_no_self_notified: "Jeg ønsker ikke besked om ændring foretaget af mig selv"
   label_registration_activation_by_email: kontoaktivering på email
   label_registration_manual_activation: manuel kontoaktivering
@@ -657,9 +655,9 @@
   text_project_destroy_confirmation: Er du sikker på at du vil slette dette projekt og alle relaterede data?
   text_workflow_edit: Vælg en rolle samt en type, for at redigere arbejdsgangen
   text_are_you_sure: Er du sikker?
-  text_tip_task_begin_day: opgaven begynder denne dag
-  text_tip_task_end_day: opaven slutter denne dag
-  text_tip_task_begin_end_day: opgaven begynder og slutter denne dag
+  text_tip_issue_begin_day: opgaven begynder denne dag
+  text_tip_issue_end_day: opaven slutter denne dag
+  text_tip_issue_begin_end_day: opgaven begynder og slutter denne dag
   text_project_identifier_info: 'Små bogstaver (a-z), numre og bindestreg er tilladt.<br />Denne er en unik identifikation for projektet, og kan defor ikke rettes senere.'
   text_caracters_maximum: "max {{count}} karakterer."
   text_caracters_minimum: "Skal være mindst {{count}} karakterer lang."
@@ -832,12 +830,12 @@
   text_wiki_page_destroy_children: Slet undersider ogalle deres afledte sider.
   setting_password_min_length: Mindste længde på kodeord
   field_group_by: Gruppér resultater efter
-  mail_subject_wiki_content_updated: "'{{page}}' wikisiden er blevet opdateret"
+  mail_subject_wiki_content_updated: "'{{id}}' wikisiden er blevet opdateret"
   label_wiki_content_added: Wiki side tilføjet
-  mail_subject_wiki_content_added: "'{{page}}' wikisiden er blevet tilføjet"
-  mail_body_wiki_content_added: The '{{page}}' wikiside er blevet tilføjet af {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wikisiden er blevet tilføjet"
+  mail_body_wiki_content_added: The '{{id}}' wikiside er blevet tilføjet af {{author}}.
   label_wiki_content_updated: Wikiside opdateret
-  mail_body_wiki_content_updated: Wikisiden '{{page}}' er blevet opdateret af {{author}}.
+  mail_body_wiki_content_updated: Wikisiden '{{id}}' er blevet opdateret af {{author}}.
   permission_add_project: Opret projekt
   setting_new_project_user_role_id: Denne rolle gives til en bruger, som ikke er administrator, og som opretter et projekt
   label_view_all_revisions: Se alle revisioner
@@ -929,8 +927,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/de.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/de.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -211,10 +211,10 @@
   mail_body_account_activation_request: "Ein neuer Benutzer ({{value}}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:"
   mail_subject_reminder: "{{count}} Tickets müssen in den nächsten {{days}} Tagen abgegeben werden"
   mail_body_reminder: "{{count}} Tickets, die Ihnen zugewiesen sind, müssen in den nächsten {{days}} Tagen abgegeben werden:"
-  mail_subject_wiki_content_added: "Wiki-Seite '{{page}}' hinzugefügt"
-  mail_body_wiki_content_added: "Die Wiki-Seite '{{page}}' wurde von {{author}} hinzugefügt."
-  mail_subject_wiki_content_updated: "Wiki-Seite '{{page}}' erfolgreich aktualisiert"
-  mail_body_wiki_content_updated: "Die Wiki-Seite '{{page}}' wurde von {{author}} aktualisiert."
+  mail_subject_wiki_content_added: "Wiki-Seite '{{id}}' hinzugefügt"
+  mail_body_wiki_content_added: "Die Wiki-Seite '{{id}}' wurde von {{author}} hinzugefügt."
+  mail_subject_wiki_content_updated: "Wiki-Seite '{{id}}' erfolgreich aktualisiert"
+  mail_body_wiki_content_updated: "Die Wiki-Seite '{{id}}' wurde von {{author}} aktualisiert."
 
   gui_validation_error: 1 Fehler
   gui_validation_error_plural: "{{count}} Fehler"
@@ -280,7 +280,6 @@
   field_attr_lastname: Name-Attribut
   field_attr_mail: E-Mail-Attribut
   field_onthefly: On-the-fly-Benutzererstellung
-  field_start_date: Beginn
   field_done_ratio: % erledigt
   field_auth_source: Authentifizierungs-Modus
   field_hide_mail: E-Mail-Adresse nicht anzeigen
@@ -741,7 +740,6 @@
   label_search_titles_only: Nur Titel durchsuchen
   label_user_mail_option_all: "Für alle Ereignisse in all meinen Projekten"
   label_user_mail_option_selected: "Für alle Ereignisse in den ausgewählten Projekten..."
-  label_user_mail_option_none: "Nur für Dinge, die ich beobachte oder an denen ich beteiligt bin"
   label_user_mail_no_self_notified: "Ich möchte nicht über Änderungen benachrichtigt werden, die ich selbst durchführe."
   label_registration_activation_by_email: Kontoaktivierung durch E-Mail
   label_registration_manual_activation: Manuelle Kontoaktivierung
@@ -792,6 +790,8 @@
   label_profile: Profil
   label_subtask_plural: Unteraufgaben
   label_project_copy_notifications: Sende Mailbenachrichtigungen beim Kopieren des Projekts.
+  label_principal_search: "Nach Benutzer oder Gruppe suchen:"
+  label_user_search: "Nach Benutzer suchen:"
   
   button_login: Anmelden
   button_submit: OK
@@ -800,7 +800,7 @@
   button_uncheck_all: Alles abwählen
   button_delete: Löschen
   button_create: Anlegen
-  button_create_and_continue: Anlegen + nächstes Ticket
+  button_create_and_continue: Anlegen und weiter
   button_test: Testen
   button_edit: Bearbeiten
   button_edit_associated_wikipage: "Zugehörige Wikiseite bearbeiten: {{page_title}}"
@@ -832,7 +832,7 @@
   button_copy: Kopieren
   button_copy_and_follow: Kopieren und Ticket anzeigen
   button_annotate: Annotieren
-  button_update: Aktualisieren
+  button_update: Bearbeiten
   button_configure: Konfigurieren
   button_quote: Zitieren
   button_duplicate: Duplizieren
@@ -859,9 +859,9 @@
   text_journal_set_to: "{{label}} wurde auf {{value}} gesetzt"
   text_journal_deleted: "{{label}} {{old}} wurde gelöscht"
   text_journal_added: "{{label}} {{value}} wurde hinzugefügt"
-  text_tip_task_begin_day: Aufgabe, die an diesem Tag beginnt
-  text_tip_task_end_day: Aufgabe, die an diesem Tag endet
-  text_tip_task_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet
+  text_tip_issue_begin_day: Aufgabe, die an diesem Tag beginnt
+  text_tip_issue_end_day: Aufgabe, die an diesem Tag endet
+  text_tip_issue_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet
   text_project_identifier_info: 'Kleinbuchstaben (a-z), Ziffern und Bindestriche erlaubt.<br />Einmal gespeichert, kann die Kennung nicht mehr geändert werden.'
   text_caracters_maximum: "Max. {{count}} Zeichen."
   text_caracters_minimum: "Muss mindestens {{count}} Zeichen lang sein."
@@ -933,7 +933,16 @@
   enumeration_activities: Aktivitäten (Zeiterfassung)
   enumeration_system_activity: System-Aktivität
 
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  field_start_date: Start date
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/el.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/el.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -179,10 +179,10 @@
   mail_body_account_activation_request: "'Ένας νέος χÏήστης ({{value}}) έχει εγγÏαφεί. Ο λογαÏιασμός είναι σε στάδιο αναμονής της έγκÏισης σας:"
   mail_subject_reminder: "{{count}} θέμα(τα) με Ï€Ïοθεσμία στις επόμενες {{days}} ημέÏες"
   mail_body_reminder: "{{count}}θέμα(τα)  που έχουν ανατεθεί σε σας, με Ï€Ïοθεσμία στις επόμενες {{days}} ημέÏες:"
-  mail_subject_wiki_content_added: "'Ï€Ïοστέθηκε η σελίδα wiki {{page}}' "
-  mail_body_wiki_content_added: "Η σελίδα wiki '{{page}}' Ï€Ïοστέθηκε από τον {{author}}."
-  mail_subject_wiki_content_updated: "'ενημεÏώθηκε η σελίδα wiki {{page}}' "
-  mail_body_wiki_content_updated: "Η σελίδα wiki  '{{page}}' ενημεÏώθηκε από τον {{author}}."
+  mail_subject_wiki_content_added: "'Ï€Ïοστέθηκε η σελίδα wiki {{id}}' "
+  mail_body_wiki_content_added: "Η σελίδα wiki '{{id}}' Ï€Ïοστέθηκε από τον {{author}}."
+  mail_subject_wiki_content_updated: "'ενημεÏώθηκε η σελίδα wiki {{id}}' "
+  mail_body_wiki_content_updated: "Η σελίδα wiki  '{{id}}' ενημεÏώθηκε από τον {{author}}."
   
   gui_validation_error: 1 σφάλμα
   gui_validation_error_plural: "{{count}} σφάλματα"
@@ -247,7 +247,6 @@
   field_attr_lastname:  Ιδιότητα επωνÏμου
   field_attr_mail: Ιδιότητα email
   field_onthefly: Άμεση δημιουÏγία χÏήστη
-  field_start_date: Εκκίνηση
   field_done_ratio: % επιτεÏχθη
   field_auth_source: ΤÏόπος πιστοποίησης
   field_hide_mail: ΑπόκÏυψη διεÏθυνσης email
@@ -678,7 +677,6 @@
   label_search_titles_only: Αναζήτηση τίτλων μόνο
   label_user_mail_option_all: "Για όλες τις εξελίξεις σε όλα τα έÏγα μου"
   label_user_mail_option_selected: "Για όλες τις εξελίξεις μόνο στα επιλεγμένα έÏγα..."
-  label_user_mail_option_none: "Μόνο για Ï€Ïάγματα που παÏακολουθώ ή συμμετέχω ενεÏγά"
   label_user_mail_no_self_notified: "Δεν θέλω να ειδοποιοÏμαι για τις δικές μου αλλαγές"
   label_registration_activation_by_email: ενεÏγοποίηση λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï Î¼Îµ email
   label_registration_manual_activation: χειÏοκίνητη ενεÏγοποίηση λογαÏιασμοÏ
@@ -761,9 +759,9 @@
   text_subprojects_destroy_warning: "Επίσης το(α) επιμέÏους έÏγο(α): {{value}}  θα διαγÏαφοÏν."
   text_workflow_edit: Επιλέξτε ένα Ïόλο και έναν ανιχνευτή για να επεξεÏγαστείτε  τη Ïοή εÏγασίας
   text_are_you_sure: Είστε σίγουÏος ;
-  text_tip_task_begin_day: καθήκοντα που ξεκινάνε σήμεÏα
-  text_tip_task_end_day: καθήκοντα που τελειώνουν σήμεÏα
-  text_tip_task_begin_end_day: καθήκοντα που ξεκινάνε και τελειώνουν σήμεÏα
+  text_tip_issue_begin_day: καθήκοντα που ξεκινάνε σήμεÏα
+  text_tip_issue_end_day: καθήκοντα που τελειώνουν σήμεÏα
+  text_tip_issue_begin_end_day: καθήκοντα που ξεκινάνε και τελειώνουν σήμεÏα
   text_project_identifier_info: 'ΕπιτÏέπονται μόνο μικÏά πεζά γÏάμματα (a-z), αÏιθμοί και παÏλες. <br /> Μετά την αποθήκευση, το αναγνωÏιστικό δεν μποÏεί να αλλάξει.'
   text_caracters_maximum: "μέγιστος αÏιθμός {{count}} χαÏακτήÏες."
   text_caracters_minimum: "ΠÏέπει να πεÏιέχει τουλάχιστον {{count}} χαÏακτήÏες."
@@ -913,8 +911,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/en-GB.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/en-GB.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -84,7 +84,7 @@
           byte:
             one: "Byte"
             other: "Bytes"
-          kb: "KB"
+          kb: "kB"
           mb: "MB"
           gb: "GB"
           tb: "TB"
@@ -189,10 +189,10 @@
   mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:"
   mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
   mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}."
   
   gui_validation_error: 1 error
   gui_validation_error_plural: "{{count}} errors"
@@ -257,7 +257,7 @@
   field_attr_lastname: Lastname attribute
   field_attr_mail: Email attribute
   field_onthefly: On-the-fly user creation
-  field_start_date: Start
+  field_start_date: Start date
   field_done_ratio: % Done
   field_auth_source: Authentication mode
   field_hide_mail: Hide my email address
@@ -711,7 +711,7 @@
   label_search_titles_only: Search titles only
   label_user_mail_option_all: "For any event on all my projects"
   label_user_mail_option_selected: "For any event on the selected projects only..."
-  label_user_mail_option_none: "Only for things I watch or I'm involved in"
+  label_user_mail_option_none: "No events"
   label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
   label_registration_activation_by_email: account activation by email
   label_registration_manual_activation: manual account activation
@@ -825,9 +825,9 @@
   text_journal_set_to: "{{label}} set to {{value}}"
   text_journal_deleted: "{{label}} deleted ({{old}})"
   text_journal_added: "{{label}} {{value}} added"
-  text_tip_task_begin_day: task beginning this day
-  text_tip_task_end_day: task ending this day
-  text_tip_task_begin_end_day: task beginning and ending this day
+  text_tip_issue_begin_day: task beginning this day
+  text_tip_issue_end_day: task ending this day
+  text_tip_issue_begin_end_day: task beginning and ending this day
   text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
   text_caracters_maximum: "{{count}} characters maximum."
   text_caracters_minimum: "Must be at least {{count}} characters long."
@@ -922,3 +922,12 @@
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/en.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/en.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -81,7 +81,7 @@
           byte:
             one: "Byte"
             other: "Bytes"
-          kb: "KB"
+          kb: "kB"
           mb: "MB"
           gb: "GB"
           tb: "TB"
@@ -150,6 +150,7 @@
   notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
   notice_locking_conflict: Data has been updated by another user.
   notice_not_authorized: You are not authorized to access this page.
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
   notice_email_sent: "An email was sent to {{value}}"
   notice_email_error: "An error occurred while sending mail ({{value}})"
   notice_feeds_access_key_reseted: Your RSS access key was reset.
@@ -192,10 +193,10 @@
   mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:"
   mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
   mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}."
   
   gui_validation_error: 1 error
   gui_validation_error_plural: "{{count}} errors"
@@ -261,7 +262,7 @@
   field_attr_lastname: Lastname attribute
   field_attr_mail: Email attribute
   field_onthefly: On-the-fly user creation
-  field_start_date: Start
+  field_start_date: Start date
   field_done_ratio: % Done
   field_auth_source: Authentication mode
   field_hide_mail: Hide my email address
@@ -293,9 +294,10 @@
   field_group_by: Group results by
   field_sharing: Sharing
   field_parent_issue: Parent task
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
+  field_member_of_group: "Assignee's group"
+  field_assigned_to_role: "Assignee's role"
   field_text: Text field
+  field_visible: Visible
   
   setting_app_title: Application title
   setting_app_subtitle: Application subtitle
@@ -324,6 +326,7 @@
   setting_issue_list_default_columns: Default columns displayed on the issue list
   setting_repositories_encodings: Repositories encodings
   setting_commit_logs_encoding: Commit messages encoding
+  setting_emails_header: Emails header
   setting_emails_footer: Emails footer
   setting_protocol: Protocol
   setting_per_page_options: Objects per page options
@@ -350,6 +353,7 @@
   setting_start_of_week: Start calendars on
   setting_rest_api_enabled: Enable REST web service
   setting_cache_formatted_text: Cache formatted text
+  setting_default_notification_option: Default notification option
   
   permission_add_project: Create project
   permission_add_subprojects: Create subprojects
@@ -725,7 +729,10 @@
   label_search_titles_only: Search titles only
   label_user_mail_option_all: "For any event on all my projects"
   label_user_mail_option_selected: "For any event on the selected projects only..."
-  label_user_mail_option_none: "Only for things I watch or I'm involved in"
+  label_user_mail_option_none: "No events"
+  label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in"
+  label_user_mail_option_only_assigned: "Only for things I am assigned to"
+  label_user_mail_option_only_owner: "Only for things I am the owner of"
   label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
   label_registration_activation_by_email: account activation by email
   label_registration_manual_activation: manual account activation
@@ -776,6 +783,8 @@
   label_profile: Profile
   label_subtask_plural: Subtasks
   label_project_copy_notifications: Send email notifications during the project copy
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
   
   button_login: Login
   button_submit: Submit
@@ -844,9 +853,9 @@
   text_journal_set_to: "{{label}} set to {{value}}"
   text_journal_deleted: "{{label}} deleted ({{old}})"
   text_journal_added: "{{label}} {{value}} added"
-  text_tip_task_begin_day: task beginning this day
-  text_tip_task_end_day: task ending this day
-  text_tip_task_begin_end_day: task beginning and ending this day
+  text_tip_issue_begin_day: issue beginning this day
+  text_tip_issue_end_day: issue ending this day
+  text_tip_issue_begin_end_day: issue beginning and ending this day
   text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
   text_caracters_maximum: "{{count}} characters maximum."
   text_caracters_minimum: "Must be at least {{count}} characters long."
--- a/config/locales/.svn/text-base/es.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/es.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -313,7 +313,6 @@
   field_role: Perfil
   field_searchable: Incluir en las búsquedas
   field_spent_on: Fecha
-  field_start_date: Fecha de inicio
   field_start_page: Página principal
   field_status: Estado
   field_subject: Tema
@@ -636,7 +635,6 @@
   label_user_activity: "Actividad de {{value}}"
   label_user_mail_no_self_notified: "No quiero ser avisado de cambios hechos por mí"
   label_user_mail_option_all: "Para cualquier evento en todos mis proyectos"
-  label_user_mail_option_none: "Sólo para elementos monitorizados o relacionados conmigo"
   label_user_mail_option_selected: "Para cualquier evento de los proyectos seleccionados..."
   label_user_new: Nuevo usuario
   label_user_plural: Usuarios
@@ -821,9 +819,9 @@
   text_select_project_modules: 'Seleccione los módulos a activar para este proyecto:'
   text_status_changed_by_changeset: "Aplicado en los cambios {{value}}"
   text_subprojects_destroy_warning: "Los proyectos secundarios: {{value}} también se eliminarán"
-  text_tip_task_begin_day: tarea que comienza este día
-  text_tip_task_begin_end_day: tarea que comienza y termina este día
-  text_tip_task_end_day: tarea que termina este día
+  text_tip_issue_begin_day: tarea que comienza este día
+  text_tip_issue_begin_end_day: tarea que comienza y termina este día
+  text_tip_issue_end_day: tarea que termina este día
   text_tracker_no_workflow: No hay ningún flujo de trabajo definido para este tipo de petición
   text_unallowed_characters: Caracteres no permitidos
   text_user_mail_option: "De los proyectos no seleccionados, sólo recibirá notificaciones sobre elementos monitorizados o elementos en los que esté involucrado (por ejemplo, peticiones de las que usted sea autor o asignadas a usted)."
@@ -855,12 +853,12 @@
   text_wiki_page_destroy_children: Eliminar páginas hijas y todos sus descendientes
   setting_password_min_length: Longitud mínima de la contraseña
   field_group_by: Agrupar resultados por
-  mail_subject_wiki_content_updated: "La página wiki '{{page}}' ha sido actualizada"
+  mail_subject_wiki_content_updated: "La página wiki '{{id}}' ha sido actualizada"
   label_wiki_content_added: Página wiki añadida
-  mail_subject_wiki_content_added: "Se ha añadido la página wiki '{{page}}'."
-  mail_body_wiki_content_added: "{{author}} ha añadido la página wiki '{{page}}'."
+  mail_subject_wiki_content_added: "Se ha añadido la página wiki '{{id}}'."
+  mail_body_wiki_content_added: "{{author}} ha añadido la página wiki '{{id}}'."
   label_wiki_content_updated: Página wiki actualizada
-  mail_body_wiki_content_updated: La página wiki '{{page}}' ha sido actualizada por {{author}}.
+  mail_body_wiki_content_updated: La página wiki '{{id}}' ha sido actualizada por {{author}}.
   permission_add_project: Crear proyecto
   setting_new_project_user_role_id: Permiso asignado a un usuario no-administrador para crear proyectos
   label_view_all_revisions: Ver todas las revisiones
@@ -953,8 +951,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/eu.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/eu.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -188,10 +188,10 @@
   mail_body_account_activation_request: "Erabiltzaile berri bat ({{value}}) erregistratu da. Kontua zure onarpenaren zain dago:"
   mail_subject_reminder: "{{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a"
   mail_body_reminder: "Zuri esleituta dauden {{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki orria gehitu da"
-  mail_body_wiki_content_added: "{{author}}-(e)k '{{page}}' wiki orria gehitu du."
-  mail_subject_wiki_content_updated: "'{{page}}' wiki orria eguneratu da"
-  mail_body_wiki_content_updated: "{{author}}-(e)k '{{page}}' wiki orria eguneratu du."
+  mail_subject_wiki_content_added: "'{{id}}' wiki orria gehitu da"
+  mail_body_wiki_content_added: "{{author}}-(e)k '{{id}}' wiki orria gehitu du."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki orria eguneratu da"
+  mail_body_wiki_content_updated: "{{author}}-(e)k '{{id}}' wiki orria eguneratu du."
   
   gui_validation_error: akats 1
   gui_validation_error_plural: "{{count}} akats"
@@ -257,7 +257,6 @@
   field_attr_lastname: Abizenak atributua
   field_attr_mail: Eposta atributua
   field_onthefly: Zuzeneko erabiltzaile sorrera
-  field_start_date: Hasiera
   field_done_ratio: Egindako %
   field_auth_source: Autentikazio modua
   field_hide_mail: Nire eposta helbidea ezkutatu
@@ -707,7 +706,6 @@
   label_search_titles_only: Izenburuetan bakarrik bilatu
   label_user_mail_option_all: "Nire proiektu guztietako gertakari guztientzat"
   label_user_mail_option_selected: "Hautatutako proiektuetako edozein gertakarientzat..."
-  label_user_mail_option_none: "Nik behatu edo parte hartze dudan gauzetarako bakarrik"
   label_user_mail_no_self_notified: "Ez dut nik egiten ditudan aldeketen jakinarazpenik jaso nahi"
   label_registration_activation_by_email: kontuak epostaz gaitu
   label_registration_manual_activation: kontuak eskuz gaitu
@@ -821,9 +819,9 @@
   text_journal_set_to: "{{label}}-k {{value}} balioa hartu du"
   text_journal_deleted: "{{label}} ezabatuta ({{old}})"
   text_journal_added: "{{label}} {{value}} gehituta"
-  text_tip_task_begin_day: gaur hasten diren atazak
-  text_tip_task_end_day: gaur bukatzen diren atazak
-  text_tip_task_begin_end_day: gaur hasi eta bukatzen diren atazak
+  text_tip_issue_begin_day: gaur hasten diren atazak
+  text_tip_issue_end_day: gaur bukatzen diren atazak
+  text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren atazak
   text_project_identifier_info: 'Letra xeheak (a-z), zenbakiak eta marrak erabil daitezke bakarrik.<br />Gorde eta gero identifikadorea ezin da aldatu.'
   text_caracters_maximum: "{{count}} karaktere gehienez."
   text_caracters_minimum: "Gutxienez {{count}} karaktereetako luzerakoa izan behar du."
@@ -917,8 +915,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/fi.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/fi.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -262,7 +262,6 @@
   field_attr_lastname: Sukunimenmääre
   field_attr_mail: Sähköpostinmääre
   field_onthefly: Automaattinen käyttäjien luonti
-  field_start_date: Alku
   field_done_ratio: % Tehty
   field_auth_source: Varmennusmuoto
   field_hide_mail: Piiloita sähköpostiosoitteeni
@@ -579,7 +578,6 @@
   label_search_titles_only: Hae vain otsikot
   label_user_mail_option_all: "Kaikista tapahtumista kaikissa projekteistani"
   label_user_mail_option_selected: "Kaikista tapahtumista vain valitsemistani projekteista..."
-  label_user_mail_option_none: "Vain tapahtumista joita valvon tai olen mukana"
   label_user_mail_no_self_notified: "En halua muistutusta muutoksista joita itse teen"
   label_registration_activation_by_email: tilin aktivointi sähköpostitse
   label_registration_manual_activation: tilin aktivointi käsin
@@ -636,9 +634,9 @@
   text_project_destroy_confirmation: Oletko varma että haluat poistaa tämän projektin ja kaikki siihen kuuluvat tiedot?
   text_workflow_edit: Valitse rooli ja tapahtuma muokataksesi työnkulkua
   text_are_you_sure: Oletko varma?
-  text_tip_task_begin_day: tehtävä joka alkaa tänä päivänä
-  text_tip_task_end_day: tehtävä joka loppuu tänä päivänä
-  text_tip_task_begin_end_day: tehtävä joka alkaa ja loppuu tänä päivänä
+  text_tip_issue_begin_day: tehtävä joka alkaa tänä päivänä
+  text_tip_issue_end_day: tehtävä joka loppuu tänä päivänä
+  text_tip_issue_begin_end_day: tehtävä joka alkaa ja loppuu tänä päivänä
   text_project_identifier_info: 'Pienet kirjaimet (a-z), numerot ja viivat ovat sallittu.<br />Tallentamisen jälkeen tunnistetta ei voi muuttaa.'
   text_caracters_maximum: "{{count}} merkkiä enintään."
   text_caracters_minimum: "Täytyy olla vähintään {{count}} merkkiä pitkä."
@@ -841,12 +839,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -938,8 +936,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/fr.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/fr.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -169,6 +169,7 @@
   notice_file_not_found: "La page à laquelle vous souhaitez accéder n'existe pas ou a été supprimée."
   notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
   notice_not_authorized: "Vous n'êtes pas autorisés à accéder à cette page."
+  notice_not_authorized_archived_project: Le projet auquel vous tentez d'accéder a été archivé.
   notice_email_sent: "Un email a été envoyé à {{value}}"
   notice_email_error: "Erreur lors de l'envoi de l'email ({{value}})"
   notice_feeds_access_key_reseted: "Votre clé d'accès aux flux RSS a été réinitialisée."
@@ -203,10 +204,10 @@
   mail_body_account_activation_request: "Un nouvel utilisateur ({{value}}) s'est inscrit. Son compte nécessite votre approbation :"
   mail_subject_reminder: "{{count}} demande(s) arrivent à échéance ({{days}})"
   mail_body_reminder: "{{count}} demande(s) qui vous sont assignées arrivent à échéance dans les {{days}} prochains jours :"
-  mail_subject_wiki_content_added: "Page wiki '{{page}}' ajoutée"
-  mail_body_wiki_content_added: "La page wiki '{{page}}' a été ajoutée par {{author}}."
-  mail_subject_wiki_content_updated: "Page wiki '{{page}}' mise à jour"
-  mail_body_wiki_content_updated: "La page wiki '{{page}}' a été mise à jour par {{author}}."
+  mail_subject_wiki_content_added: "Page wiki '{{id}}' ajoutée"
+  mail_body_wiki_content_added: "La page wiki '{{id}}' a été ajoutée par {{author}}."
+  mail_subject_wiki_content_updated: "Page wiki '{{id}}' mise à jour"
+  mail_body_wiki_content_updated: "La page wiki '{{id}}' a été mise à jour par {{author}}."
   
   gui_validation_error: 1 erreur
   gui_validation_error_plural: "{{count}} erreurs"
@@ -271,7 +272,6 @@
   field_attr_lastname: Attribut Nom
   field_attr_mail: Attribut Email
   field_onthefly: Création des utilisateurs à la volée
-  field_start_date: Début
   field_done_ratio: % réalisé
   field_auth_source: Mode d'authentification
   field_hide_mail: Cacher mon adresse mail
@@ -303,6 +303,7 @@
   field_sharing: Partage
   field_active: Actif
   field_parent_issue: Tâche parente
+  field_visible: Visible
   
   setting_app_title: Titre de l'application
   setting_app_subtitle: Sous-titre de l'application
@@ -718,7 +719,6 @@
   label_search_titles_only: Uniquement dans les titres
   label_user_mail_option_all: "Pour tous les événements de tous mes projets"
   label_user_mail_option_selected: "Pour tous les événements des projets sélectionnés..."
-  label_user_mail_option_none: "Seulement pour ce que je surveille ou à quoi je participe"
   label_user_mail_no_self_notified: "Je ne veux pas être notifié des changements que j'effectue"
   label_registration_activation_by_email: activation du compte par email
   label_registration_manual_activation: activation manuelle du compte
@@ -773,6 +773,8 @@
   label_profile: Profil
   label_subtask_plural: Sous-tâches
   label_project_copy_notifications: Envoyer les notifications durant la copie du projet
+  label_principal_search: "Rechercher un utilisateur ou un groupe :"
+  label_user_search: "Rechercher un utilisateur :"
   
   button_login: Connexion
   button_submit: Soumettre
@@ -833,9 +835,9 @@
   text_subprojects_destroy_warning: "Ses sous-projets : {{value}} seront également supprimés."
   text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow
   text_are_you_sure: Êtes-vous sûr ?
-  text_tip_task_begin_day: tâche commençant ce jour
-  text_tip_task_end_day: tâche finissant ce jour
-  text_tip_task_begin_end_day: tâche commençant et finissant ce jour
+  text_tip_issue_begin_day: tâche commençant ce jour
+  text_tip_issue_end_day: tâche finissant ce jour
+  text_tip_issue_begin_end_day: tâche commençant et finissant ce jour
   text_project_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres et tirets sont autorisés.<br />Un fois sauvegardé, l''identifiant ne pourra plus être modifié.'
   text_caracters_maximum: "{{count}} caractères maximum."
   text_caracters_minimum: "{{count}} caractères minimum."
@@ -930,9 +932,16 @@
   label_overall_spent_time: Temps passé global
   field_time_entries: Log time
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Modifier la page de Wiki associée: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  project_module_calendar: Calendrier
+  button_edit_associated_wikipage: "Modifier la page wiki associée: {{page_title}}"
+  text_are_you_sure_with_children: Supprimer la demande et toutes ses sous-demandes ?
+  field_text: Champ texte
+  label_user_mail_option_only_owner: Seulement pour ce que j'ai créé
+  setting_default_notification_option: Option de notification par défaut
+  label_user_mail_option_only_my_events: Seulement pour ce que je surveille
+  label_user_mail_option_only_assigned: Seulement pour ce qui m'est assigné
+  label_user_mail_option_none: Aucune notification
+  field_member_of_group: Groupe de l'assigné
+  field_assigned_to_role: Rôle de l'assigné
+  field_start_date: Start date
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/gl.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/gl.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -290,7 +290,6 @@
   field_role: Perfil
   field_searchable: Incluír nas búsquedas
   field_spent_on: Data
-  field_start_date: Data de inicio
   field_start_page: Páxina principal
   field_status: Estado
   field_subject: Tema
@@ -613,7 +612,6 @@
   label_user_activity: "Actividade de {{value}}"
   label_user_mail_no_self_notified: "Non quero ser avisado de cambios feitos por min"
   label_user_mail_option_all: "Para calquera evento en tódolos proxectos"
-  label_user_mail_option_none: "Só para elementos monitorizados ou relacionados comigo"
   label_user_mail_option_selected: "Para calquera evento dos proxectos seleccionados..."
   label_user_new: Novo usuario
   label_user_plural: Usuarios
@@ -798,9 +796,9 @@
   text_select_project_modules: 'Seleccione os módulos a activar para este proxecto:'
   text_status_changed_by_changeset: "Aplicado nos cambios {{value}}"
   text_subprojects_destroy_warning: "Os proxectos secundarios: {{value}} tamén se eliminarán"
-  text_tip_task_begin_day: tarefa que comeza este día
-  text_tip_task_begin_end_day: tarefa que comeza e remata este día
-  text_tip_task_end_day: tarefa que remata este día
+  text_tip_issue_begin_day: tarefa que comeza este día
+  text_tip_issue_begin_end_day: tarefa que comeza e remata este día
+  text_tip_issue_end_day: tarefa que remata este día
   text_tracker_no_workflow: Non hai ningún fluxo de traballo definido para este tipo de petición
   text_unallowed_characters: Caracteres non permitidos
   text_user_mail_option: "Dos proxectos non seleccionados, só recibirá notificacións sobre elementos monitorizados ou elementos nos que estea involucrado (por exemplo, peticións das que vostede sexa autor ou asignadas a vostede)."
@@ -832,12 +830,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -929,8 +927,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/he.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/he.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -104,7 +104,7 @@
         inclusion: "×œ× × ×›×œ×œ ברשימה"
         exclusion: "×œ× ×–×ž×™×Ÿ"
         invalid: "×œ× ×•×œ×™×“×™"
-        confirmation: "×œ× ×ª×•×× ×œ×ישורו"
+        confirmation: "×œ× ×ª×•×× ×œ×ישור"
         accepted: "חייב ב×ישור"
         empty: "חייב להכלל"
         blank: "חייב להכלל"
@@ -122,8 +122,8 @@
         even: "חייב להיות זוגי"
         greater_than_start_date: "חייב להיות מ×וחר יותר מת×ריך ההתחלה"
         not_same_project: "×œ× ×©×™×™×š ל×ותו הפרויקט"
-        circular_dependency: "הקשר הזה יצור תלות מעגלית"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        circular_dependency: "קשר זה יצור תלות מעגלית"
+        cant_link_an_issue_with_a_descendant: "×œ× × ×™×ª×Ÿ לקשר × ×•×©× ×œ×ª×ªÖ¾×ž×©×™×ž×” שלו"
 
   actionview_instancetag_blank_option: בחר בבקשה
 
@@ -144,7 +144,7 @@
   notice_account_wrong_password: סיסמה שגויה
   notice_account_register_done: החשבון נוצר בהצלחה. להפעלת החשבון לחץ על הקישור שנשלח לדו×"ל שלך.
   notice_account_unknown_email: משתמש ×œ× ×ž×•×›×¨.
-  notice_can_t_change_password: החשבון ×”×–×” משתמש במקור ×ימות חיצוני. שינוי סיסמה הינו בילתי ×פשר
+  notice_can_t_change_password: החשבון ×”×–×” משתמש במקור הזדהות חיצוני. שינוי סיסמה הינו בילתי ×פשר
   notice_account_lost_email_sent: דו×"ל ×¢× ×”×•×¨×ות לבחירת סיסמה חדשה נשלח ×ליך.
   notice_account_activated: חשבונך הופעל. ×תה יכול להתחבר כעת.
   notice_successful_create: יצירה מוצלחת.
@@ -154,8 +154,9 @@
   notice_file_not_found: הדף ש×תה מנסה לגשת ×ליו ×ינו ×§×™×™× ×ו שהוסר.
   notice_locking_conflict: המידע עודכן על ידי משתמש ×חר.
   notice_not_authorized: ×ינך מורשה לר×ות דף ×–×”.
+  notice_not_authorized_archived_project: הפרויקט ש×תה מנסה לגשת ×ליו × ×ž×¦× ×‘×רכיון.
   notice_email_sent: "דו×ל נשלח לכתובת {{value}}"
-  notice_email_error: "×רעה שגי××” בעט שליחת הדו×ל ({{value}})"
+  notice_email_error: "×רעה שגי××” בעת שליחת הדו×ל ({{value}})"
   notice_feeds_access_key_reseted: מפתח ×”Ö¾RSS שלך ×ופס.
   notice_api_access_key_reseted: מפתח הגישה שלך ל־API ×ופס.
   notice_failed_to_save_issues: "נכשרת בשמירת {{count}} נוש×\×™× ×‘ {{total}} נבחרו: {{ids}}."
@@ -168,7 +169,7 @@
   notice_issue_done_ratios_updated: ×חוזי התקדמות ×œ× ×•×©× ×¢×•×“×›× ×•.
 
   error_can_t_load_default_data: "×פשרויות ברירת המחדל ×œ× ×”×¦×œ×™×—×• להיטען: {{value}}"
-  error_scm_not_found: כניסה ו\×ו גירסה ××™× × ×§×™×™×ž×™× ×‘×ž×גר.
+  error_scm_not_found: כניסה ו\×ו מהדורה ××™× × ×§×™×™×ž×™× ×‘×ž×גר.
   error_scm_command_failed: "×רעה שגי××” בעת ניסון גישה למ×גר: {{value}}"
   error_scm_annotate: "הכניסה ×œ× ×§×™×™×ž×ª ×ו ×©×œ× × ×™×ª×Ÿ לת×ר ×ותה."
   error_issue_not_found_in_project: 'הנוש××™× ×œ× × ×ž×¦×ו ×ו ××™× × ×©×™×›×™× ×œ×¤×¨×•×™×§×˜'
@@ -194,12 +195,12 @@
   mail_body_account_information: פרטי החשבון שלך
   mail_subject_account_activation_request: "בקשת הפעלה לחשבון {{value}}"
   mail_body_account_activation_request: "משתמש חדש ({{value}}) נרש×. החשבון שלו מחכה ל×ישור שלך:"
-  mail_subject_reminder: "{{count}} נוש××™× ×ž×™×¢×“×™× ×œ×”×’×©×” ×‘×™×ž×™× ×”×§×¨×•×‘×™× ({{days}})"
+  mail_subject_reminder: "{{count}} נוש××™× ×ž×™×•×¢×“×™× ×œ×”×’×©×” ×‘×™×ž×™× ×”×§×¨×•×‘×™× ({{days}})"
   mail_body_reminder: "{{count}} נוש××™× ×©×ž×™×•×¢×“×™× ×ליך ×ž×™×•×¢×“×™× ×œ×”×’×©×” בתוך {{days}} ימי×:"
-  mail_subject_wiki_content_added: "דף ×”Ö¾wiki â€'{{page}}' נוסף"
-  mail_body_wiki_content_added: דף ×”Ö¾wiki â€'{{page}}' נוסף ×¢"×™ {{author}}.
-  mail_subject_wiki_content_updated: "דף ×”Ö¾wiki â€'{{page}}' עודכן"
-  mail_body_wiki_content_updated: דף ×”Ö¾wiki â€'{{page}}' עודכן ×¢"×™ {{author}}.
+  mail_subject_wiki_content_added: "דף ×”Ö¾wiki â€'{{id}}' נוסף"
+  mail_body_wiki_content_added: דף ×”Ö¾wiki â€'{{id}}' נוסף ×¢"×™ {{author}}.
+  mail_subject_wiki_content_updated: "דף ×”Ö¾wiki â€'{{id}}' עודכן"
+  mail_body_wiki_content_updated: דף ×”Ö¾wiki â€'{{id}}' עודכן ×¢"×™ {{author}}.
 
   gui_validation_error: שגי××” 1
   gui_validation_error_plural: "{{count}} שגי×ות"
@@ -248,7 +249,7 @@
   field_login: ×©× ×ž×©×ª×ž×©
   field_mail_notification: הודעות דו×"ל
   field_admin: ניהול
-  field_last_login_on: חיבור ×חרון
+  field_last_login_on: התחברות ×חרונה
   field_language: שפה
   field_effective_date: ת×ריך
   field_password: סיסמה
@@ -265,9 +266,8 @@
   field_attr_lastname: תכונת ×©× ×ž×©×¤×—×”
   field_attr_mail: תכונת דו×"ל
   field_onthefly: יצירת ×ž×©×ª×ž×©×™× ×–×¨×™×–×”
-  field_start_date: ת×ריך התחלה
   field_done_ratio: % גמור
-  field_auth_source: מצב ×ימות
+  field_auth_source: מקור הזדהות
   field_hide_mail: ×”×—×‘× ×ת כתובת הדו×"ל שלי
   field_comments: הערות
   field_url: URL
@@ -284,6 +284,7 @@
   field_redirect_existing_links: העבר ×§×™×©×•×¨×™× ×§×™×™×ž×™×
   field_estimated_hours: זמן משוער
   field_column_names: עמודות
+  field_time_entries: ×¨×™×©×•× ×–×ž× ×™×
   field_time_zone: ×יזור זמן
   field_searchable: ניתן לחיפוש
   field_default_value: ערך ברירת מחדל
@@ -296,13 +297,14 @@
   field_group_by: קבץ ×ת התוצ×ות לפי
   field_sharing: שיתוף
   field_parent_issue: משימת ×ב
+  field_text: שדה טקסט
 
   setting_app_title: כותרת ישו×
   setting_app_subtitle: תת־כותרת ישו×
   setting_welcome_text: טקסט "ברוך הב×"
   setting_default_language: שפת ברירת מחדל
-  setting_login_required: דרוש ×ימות
-  setting_self_registration: ×פשר הרשמות עצמית
+  setting_login_required: דרושה הזדהות
+  setting_self_registration: ×פשר הרשמה עצמית
   setting_attachment_max_size: גודל דבוקה מקסימ×לי
   setting_issues_export_limit: גבול ×™×¦×•× × ×•×©××™×
   setting_mail_from: כתובת שליחת דו×"ל
@@ -310,14 +312,14 @@
   setting_plain_text_mail: טקסט פשוט בלבד (×œ×œ× HTML)
   setting_host_name: ×©× ×©×¨×ª
   setting_text_formatting: עיצוב טקסט
-  setting_wiki_compression: כיווץ היסטורית WIKI
+  setting_wiki_compression: כיווץ היסטורית wiki
   setting_feeds_limit: גבול תוכן הזנות
   setting_default_projects_public: ×¤×¨×•×™×§×˜×™× ×—×“×©×™× ×”×™× × ×¤×•×ž×‘×™×™× ×›×‘×¨×™×¨×ª מחדל
-  setting_autofetch_changesets: משיכה ×וטומטית של עידכוני×
+  setting_autofetch_changesets: משיכה ×וטומטית של שינויי×
   setting_sys_api_enabled: ×פשר שירות רשת לניהול המ×גר
   setting_commit_ref_keywords: מילות מפתח מקשרות
   setting_commit_fix_keywords: מילות מפתח מתקנות
-  setting_autologin: חיבור ×וטומטי
+  setting_autologin: התחברות ×וטומטית
   setting_date_format: פורמט ת×ריך
   setting_time_format: פורמט זמן
   setting_cross_project_issue_relations: הרשה קישור נוש××™× ×‘×™×Ÿ פרויקטי×
@@ -339,17 +341,18 @@
   setting_gravatar_default: תמונת Gravatar ברירת מחדל
   setting_diff_max_lines_displayed: מספר מירבי של שורות בתצוגת שינויי×
   setting_file_max_size_displayed: גודל מירבי של מלל המוצג בתוך השורה
-  setting_repository_log_display_limit: מספר מירבי של גירס×ות המוצגות ביומן קובץ
+  setting_repository_log_display_limit: מספר מירבי של מהדורות המוצגות ביומן קובץ
   setting_openid: ×פשר התחברות ×•×¨×™×©×•× ×‘×מצעות OpenID
-  setting_password_min_length: ×ורך ×¡×™×¡×ž× ×ž×™× ×™×ž×לי
+  setting_password_min_length: ×ורך סיסמה מינימ×לי
   setting_new_project_user_role_id: התפקיד שמוגדר למשתמש פשוט ×שר יוצר פרויקט
   setting_default_projects_modules: ×ž×•×“×•×œ×™× ×ž××•×¤×©×¨×™× ×‘×‘×¨×™×¨×ª מחדל עבור ×¤×¨×•×™×§×˜×™× ×—×“×©×™×
   setting_issue_done_ratio: חשב ×חוז התקדמות ×‘× ×•×©× ×¢×
   setting_issue_done_ratio_issue_field: השתמש בשדה הנוש×
   setting_issue_done_ratio_issue_status: השתמש במצב הנוש×
-  setting_start_of_week: התחל ×™×•×ž× ×™× ×œ×¤×™
+  setting_start_of_week: השבוע מתחיל ביו×
   setting_rest_api_enabled: ×פשר שירות רשת REST
   setting_cache_formatted_text: שמור טקסט מעוצב במטמון
+  setting_default_notification_option: ×פשרות התר××” ברירת־מחדל
 
   permission_add_project: יצירת פרויקט
   permission_add_subprojects: יצירת תתי־פרויקט
@@ -376,9 +379,9 @@
   permission_add_issue_watchers: הוספת צופי×
   permission_delete_issue_watchers: הסרת צופי×
   permission_log_time: תיעוד זמן שהושקע
-  permission_view_time_entries: צפיה בזמן שהושקע
+  permission_view_time_entries: צפיה ×‘×¨×™×©×•× ×–×ž× ×™×
   permission_edit_time_entries: עריכת ×¨×™×©×•× ×–×ž× ×™×
-  permission_edit_own_time_entries: עריכת לוג הזמן של עצמו
+  permission_edit_own_time_entries: עריכת ×¨×™×©×•× ×”×–×ž× ×™× ×©×œ עצמו
   permission_manage_news: ניהול חדשות
   permission_comment_news: תגובה לחדשות
   permission_manage_documents: ניהול מסמכי×
@@ -395,7 +398,7 @@
   permission_protect_wiki_pages: הגנה על כל דפי wiki
   permission_manage_repository: ניהול מ×גר
   permission_browse_repository: סיור במ×גר
-  permission_view_changesets: צפיה בקבוצות שינויי×
+  permission_view_changesets: צפיה בסדרות שינויי×
   permission_commit_access: ×ישור הפקדות
   permission_manage_boards: ניהול לוחות
   permission_view_messages: צפיה בהודעות
@@ -415,6 +418,8 @@
   project_module_wiki: Wiki
   project_module_repository: מ×גר
   project_module_boards: לוחות
+  project_module_calendar: לוח שנה
+  project_module_gantt: ×’×נט
 
   label_user: משתמש
   label_user_plural: משתמשי×
@@ -439,7 +444,7 @@
   label_document: מסמך
   label_document_new: מסמך חדש
   label_document_plural: מסמכי×
-  label_document_added: מוסמך נוסף
+  label_document_added: מסמך נוסף
   label_role: תפקיד
   label_role_plural: תפקידי×
   label_role_new: תפקיד חדש
@@ -464,7 +469,7 @@
   label_enumeration_new: ערך חדש
   label_information: מידע
   label_information_plural: מידע
-  label_please_login: התחבר בבקשה
+  label_please_login: × × ×”×ª×—×‘×¨
   label_register: הרשמה
   label_login_with_open_id_option: ×ו התחבר ב×מצעות OpenID
   label_password_lost: ×בדה הסיסמה?
@@ -479,7 +484,7 @@
   label_help: עזרה
   label_reported_issues: נוש××™× ×©×“×•×•×—×•
   label_assigned_to_me_issues: נוש××™× ×©×”×•×¦×‘×• לי
-  label_last_login: חיבור ×חרון
+  label_last_login: התחברות ×חרונה
   label_registered_on: × ×¨×©× ×‘×ª×ריך
   label_activity: פעילות
   label_overall_activity: פעילות כוללת
@@ -487,10 +492,10 @@
   label_new: חדש
   label_logged_as: מחובר כ
   label_environment: סביבה
-  label_authentication: ×ישור
-  label_auth_source: מצב ×ישור
-  label_auth_source_new: מצב ×ישור חדש
-  label_auth_source_plural: מצבי ×ישור
+  label_authentication: הזדהות
+  label_auth_source: מקור הזדהות
+  label_auth_source_new: מקור הזדהות חדש
+  label_auth_source_plural: מקורות הזדהות
   label_subproject_plural: תת־פרויקטי×
   label_subproject_new: תת־פרויקט חדש
   label_and_its_subprojects: "{{value}} וכל ×ª×ª×™Ö¾×”×¤×¨×•×™×§×˜×™× ×©×œ×•"
@@ -521,7 +526,7 @@
   label_news_plural: חדשות
   label_news_latest: חדשות ×חרונות
   label_news_view_all: צפה בכל החדשות
-  label_news_added: חדשות הוספו
+  label_news_added: חדשות נוספו
   label_settings: הגדרות
   label_overview: מבט רחב
   label_version: גירסה
@@ -575,7 +580,7 @@
     one: הערה ×חת
     other: "{{count}} הערות"
   label_comment_add: הוסף תגובה
-  label_comment_added: תגובה הוספה
+  label_comment_added: תגובה נוספה
   label_comment_delete: מחק תגובות
   label_query: ש×ילתה ×ישית
   label_query_plural: ש×ילתות ×ישיות
@@ -593,7 +598,7 @@
   label_all_time: תמיד
   label_yesterday: ×תמול
   label_this_week: השבוע
-  label_last_week: שבוע שעבר
+  label_last_week: השבוע שעבר
   label_last_n_days: "ב־{{count}} ×™×ž×™× ×חרוני×"
   label_this_month: החודש
   label_last_month: חודש שעבר
@@ -612,19 +617,19 @@
   label_modification_plural: "{{count}} שינויי×"
   label_branch: ×¢× ×£
   label_tag: סימון
-  label_revision: גירסה
-  label_revision_plural: גירס×ות
-  label_revision_id: גירסה {{value}}
-  label_associated_revisions: גירס×ות קשורות
+  label_revision: מהדורה
+  label_revision_plural: מהדורות
+  label_revision_id: מהדורה {{value}}
+  label_associated_revisions: מהדורות קשורות
   label_added: נוסף
   label_modified: שונה
   label_copied: הועתק
   label_renamed: ×”×©× ×©×•× ×”
   label_deleted: נמחק
-  label_latest_revision: גירסה ×חרונה
-  label_latest_revision_plural: גירס×ות ×חרונות
-  label_view_revisions: צפה בגירס×ות
-  label_view_all_revisions: צפה בכל הגירס×ות
+  label_latest_revision: מהדורה ×חרונה
+  label_latest_revision_plural: מהדורות ×חרונות
+  label_view_revisions: צפה במהדורות
+  label_view_all_revisions: צפה בכל המהדורות
   label_max_size: גודל מקסימ×לי
   label_sort_highest: ×”×–×– לר×שית
   label_sort_higher: הזז למעלה
@@ -638,10 +643,10 @@
   label_result_plural: תוצ×ות
   label_all_words: כל המילי×
   label_wiki: Wiki
-  label_wiki_edit: ערוך Wiki
-  label_wiki_edit_plural: עריכות Wiki
+  label_wiki_edit: ערוך wiki
+  label_wiki_edit_plural: עריכות wiki
   label_wiki_page: דף Wiki
-  label_wiki_page_plural: דפי Wiki
+  label_wiki_page_plural: דפי wiki
   label_index_by_title: סדר על פי כותרת
   label_index_by_date: סדר על פי ת×ריך
   label_current_version: גירסה נוכחית
@@ -694,7 +699,7 @@
   label_message_plural: הודעות
   label_message_last: הודעה ×חרונה
   label_message_new: הודעה חדשה
-  label_message_posted: הודעה הוספה
+  label_message_posted: הודעה נוספה
   label_reply_plural: השבות
   label_send_information: שלח מידע על חשבון למשתמש
   label_year: שנה
@@ -703,18 +708,18 @@
   label_date_from: מת×ריך
   label_date_to: עד
   label_language_based: מבוסס שפה
-  label_sort_by: "מין לפי {{value}}"
+  label_sort_by: "מיין לפי {{value}}"
   label_send_test_email: שלח דו×"ל בדיקה
   label_feeds_access_key: מפתח גישה ל־RSS
   label_missing_feeds_access_key: חסר מפתח גישה ל־RSS
   label_feeds_access_key_created_on: "מפתח הזנת RSS נוצר לפני{{value}}"
   label_module_plural: מודולי×
-  label_added_time_by: "נוסף על ידי {{author}} לפני {{age}} "
+  label_added_time_by: 'נוסף ע"י {{author}} לפני {{age}}'
   label_updated_time_by: 'עודכן ע"י {{author}} לפני {{age}}'
   label_updated_time: "עודכן לפני {{value}} "
   label_jump_to_a_project: קפוץ לפרויקט...
   label_file_plural: קבצי×
-  label_changeset_plural: ×וסף שינוי×
+  label_changeset_plural: סדרות שינויי×
   label_default_columns: עמודת ברירת מחדל
   label_no_change_option: (×ין שינוי×)
   label_bulk_edit_selected_issues: ערוך ×ת הנוש××™× ×”×ž×¡×•×ž× ×™×
@@ -723,7 +728,9 @@
   label_search_titles_only: חפש בכותרות בלבד
   label_user_mail_option_all: "לכל ×ירוע בכל ×”×¤×¨×•×™×§×˜×™× ×©×œ×™"
   label_user_mail_option_selected: "לכל ×ירוע ×‘×¤×¨×•×™×§×˜×™× ×©×‘×—×¨×ª×™ בלבד..."
-  label_user_mail_option_none: "רק לנוש××™× ×©×× ×™ צופה ×ו קשור ×ליה×"
+  label_user_mail_option_only_my_events: עבור ×“×‘×¨×™× ×©×× ×™ צופה ×ו מעורב ×‘×”× ×‘×œ×‘×“
+  label_user_mail_option_only_assigned: עבור ×“×‘×¨×™× ×©×× ×™ ×חר××™ ×¢×œ×™×”× ×‘×œ×‘×“
+  label_user_mail_option_only_owner: עבור ×“×‘×¨×™× ×©×× ×™ ×”×‘×¢×œ×™× ×©×œ×”× ×‘×œ×‘×“
   label_user_mail_no_self_notified: "×× ×™ ×œ× ×¨×•×¦×” שיודיעו לי על ×©×™× ×•×™×™× ×©×× ×™ מבצע"
   label_registration_activation_by_email: הפעל חשבון ב×מצעות דו×"ל
   label_registration_manual_activation: הפעלת חשבון ידנית
@@ -735,7 +742,7 @@
   label_more: עוד
   label_scm: מערכת ניהול תצורה
   label_plugins: תוספי×
-  label_ldap_authentication: ×ימות LDAP
+  label_ldap_authentication: הזדהות LDAP
   label_downloads_abbr: D/L
   label_optional_description: תי×ור רשות
   label_add_another_file: הוסף עוד קובץ
@@ -752,8 +759,8 @@
   label_ascending: בסדר עולה
   label_descending: בסדר יורד
   label_date_from_to: 'מת×ריך {{start}} ועד ת×ריך {{end}}'
-  label_wiki_content_added: הדף נוסף ל־wiki
-  label_wiki_content_updated: דף ה־wiki עודכן
+  label_wiki_content_added: נוסף דף ל־wiki
+  label_wiki_content_updated: דף wiki עודכן
   label_group: קבוצה
   label_group_plural: קבוצות
   label_group_new: קבוצה חדשה
@@ -785,6 +792,7 @@
   button_create_and_continue: צור ופתח חדש
   button_test: בדוק
   button_edit: ערוך
+  button_edit_associated_wikipage: "ערוך דף wiki מקושר: {{page_title}}"
   button_add: הוסף
   button_change: שנה
   button_apply: החל
@@ -800,8 +808,8 @@
   button_cancel: בטל
   button_activate: הפעל
   button_sort: מיין
-  button_log_time: זמן לוג
-  button_rollback: חזור לגירסה זו
+  button_log_time: ×¨×™×©×•× ×–×ž× ×™×
+  button_rollback: חזור למהדורה זו
   button_watch: צפה
   button_unwatch: בטל צפיה
   button_reply: השב
@@ -809,7 +817,7 @@
   button_unarchive: ×”×•×¦× ×ž×”×רכיון
   button_reset: ×פס
   button_rename: שנה ש×
-  button_change_password: שנה סיסמ×
+  button_change_password: שנה סיסמה
   button_copy: העתק
   button_copy_and_follow: העתק ועקוב
   button_annotate: הוסף תי×ור מסגרת
@@ -836,13 +844,14 @@
   text_subprojects_destroy_warning: "תת־הפרויקט\×™×: {{value}} ימחקו ×’× ×›×Ÿ."
   text_workflow_edit: בחר תפקיד וסיווג כדי לערוך ×ת זרימת העבודה
   text_are_you_sure: ×”×× ×תה בטוח?
+  text_are_you_sure_with_children: ×”×× ×œ×ž×—×•×§ ×ת ×”× ×•×©× ×•×ת כל בניו?
   text_journal_changed: "{{label}} השתנה מ{{old}} ל{{new}}"
   text_journal_set_to: "{{label}} נקבע ל{{value}}"
   text_journal_deleted: "{{label}} נמחק ({{old}})"
   text_journal_added: "{{label}} {{value}} נוסף"
-  text_tip_task_begin_day: מטלה המתחילה היו×
-  text_tip_task_end_day: מטלה המסתיימת היו×
-  text_tip_task_begin_end_day: מטלה המתחילה ומסתיימת היו×
+  text_tip_issue_begin_day: מטלה המתחילה היו×
+  text_tip_issue_end_day: מטלה המסתיימת היו×
+  text_tip_issue_begin_end_day: מטלה המתחילה ומסתיימת היו×
   text_project_identifier_info: '×ותיות לטיניות (a-z), ×ž×¡×¤×¨×™× ×•×ž×§×¤×™×.<br />ברגע שנשמר, ×œ× × ×™×ª×Ÿ לשנות ×ת המזהה.'
   text_caracters_maximum: "×ž×§×¡×™×ž×•× {{count}} תווי×."
   text_caracters_minimum: "חייב להיות לפחות ב×ורך של {{count}} תווי×."
@@ -852,8 +861,8 @@
   text_comma_separated: הכנסת ×¢×¨×›×™× ×ž×¨×•×‘×™× ×ž×•×ª×¨×ª (×ž×•×¤×¨×“×™× ×‘×¤×¡×™×§×™×).
   text_line_separated: ניתן להזין מספר ×¢×¨×›×™× (שורה ×חת לכל ערך).
   text_issues_ref_in_commit_messages: קישור ×•×ª×™×§×•× × ×•×©××™× ×‘×”×•×“×¢×•×ª הפקדה
-  text_issue_added: "×”× ×•×©× {{id}} דווח (by {{author}})."
-  text_issue_updated: "×”× ×•×©× {{id}} עודכן (by {{author}})."
+  text_issue_added: "×”× ×•×©× {{id}} דווח (בידי {{author}})."
+  text_issue_updated: "×”× ×•×©× {{id}} עודכן (בידי {{author}})."
   text_wiki_destroy_confirmation: ×”×× ×תה בטוח שברצונך למחוק ×ת ×”WIKI ×”×–×” ו×ת כל תוכנו?
   text_issue_category_destroy_question: "כמה נוש××™× ({{count}}) ×ž×•×¦×‘×™× ×œ×§×˜×’×•×¨×™×” הזו. מה ברצונך לעשות?"
   text_issue_category_destroy_assignments: הסר הצבת קטגוריה
@@ -875,7 +884,7 @@
   text_user_wrote: "{{value}} כתב:"
   text_enumeration_destroy_question: "{{count}} ××•×‘×™×§×˜×™× ×ž×•×¦×‘×™× ×œ×¢×¨×š ×–×”."
   text_enumeration_category_reassign_to: 'הצב מחדש לערך הזה:'
-  text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ config/email.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.'
+  text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ /etc/redmine/&lt;instance&gt;/email.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.'
   text_repository_usernames_mapping: "בחר ×ו עדכן ×ת משתמש Redmine הממופה לכל ×©× ×ž×©×ª×ž×© ביומן המ×גר.\n×ž×©×ª×ž×©×™× ×‘×¢×œ×™ ×©× ×ו כתובת דו×ר ×–×”×” ב־Redmine ובמ×גר ×ž×ž×•×¤×™× ×‘×ופן ×וטומטי."
   text_diff_truncated: '... ×”×©×™× ×•×™×™× ×¢×•×‘×¨×™× ×ת מספר השורות המירבי לתצוגה, ולכן ×”× ×§×•×¦×¦×•.'
   text_custom_field_possible_values_info: שורה ×חת לכל ערך
@@ -915,11 +924,11 @@
   enumeration_doc_categories: קטגוריות מסמכי×
   enumeration_activities: פעילויות (מעקב ×חר זמני×)
   enumeration_system_activity: פעילות מערכת
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/hr.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/hr.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -184,10 +184,10 @@
   mail_body_account_activation_request: "Novi korisnik ({{value}}) je registriran. Njegov korisniÄki raÄun Äeka vaÅ¡e odobrenje:"
   mail_subject_reminder: "{{count}} predmet(a) dospijeva sljedećih {{days}} dana"
   mail_body_reminder: "{{count}} vama dodijeljen(ih) predmet(a) dospijeva u sljedećih {{days}} dana:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}."
   
   gui_validation_error: 1 pogreška
   gui_validation_error_plural: "{{count}} pogrešaka"
@@ -253,7 +253,6 @@
   field_attr_lastname: Atribut prezimena
   field_attr_mail: Atribut e-pošte
   field_onthefly: "Izrada korisnika \"u hodu\""
-  field_start_date: Pocetak
   field_done_ratio: % UÄinjeno
   field_auth_source: Vrsta prijavljivanja
   field_hide_mail: Sakrij moju adresu e-pošte
@@ -701,7 +700,6 @@
   label_search_titles_only: Pretraživanje samo naslova
   label_user_mail_option_all: "Za bilo koji događaj na svim mojim projektima"
   label_user_mail_option_selected: "Za bilo koji događaj samo za izabrane projekte..."
-  label_user_mail_option_none: "Samo za stvari koje pratim ili u kojima sudjelujem"
   label_user_mail_no_self_notified: "Ne želim primati obavijesti o promjenama koje sam napravim"
   label_registration_activation_by_email: aktivacija putem e-pošte
   label_registration_manual_activation: ruÄna aktivacija
@@ -815,9 +813,9 @@
   text_journal_set_to: "{{label}} postavi na {{value}}"
   text_journal_deleted: "{{label}} izbrisano ({{old}})"
   text_journal_added: "{{label}} {{value}} added"  
-  text_tip_task_begin_day: Zadaci koji poÄinju ovog dana
-  text_tip_task_end_day: zadaci koji se završavaju ovog dana
-  text_tip_task_begin_end_day: Zadaci koji poÄinju i zavrÅ¡avaju se ovog dana
+  text_tip_issue_begin_day: Zadaci koji poÄinju ovog dana
+  text_tip_issue_end_day: zadaci koji se završavaju ovog dana
+  text_tip_issue_begin_end_day: Zadaci koji poÄinju i zavrÅ¡avaju se ovog dana
   text_project_identifier_info: 'mala slova (a-z), brojevi i crtice su dozvoljeni.<br />Jednom snimljen identifikator se ne može mijenjati!'
   text_caracters_maximum: "Najviše {{count}} znakova."
   text_caracters_minimum: "Mora biti dugaÄko najmanje {{count}} znakova."
@@ -920,8 +918,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/hu.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/hu.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -260,7 +260,6 @@
   field_attr_lastname: Vezetéknév
   field_attr_mail: E-mail
   field_onthefly: On-the-fly felhasználó létrehozás
-  field_start_date: Kezdés dátuma
   field_done_ratio: Elkészült (%)
   field_auth_source: Azonosítási mód
   field_hide_mail: Rejtse el az e-mail címem
@@ -612,7 +611,6 @@
   label_search_titles_only: Keresés csak a címekben
   label_user_mail_option_all: "Minden eseményről minden saját projektemben"
   label_user_mail_option_selected: "Minden eseményről a kiválasztott projektekben..."
-  label_user_mail_option_none: "Csak a megfigyelt dolgokról, vagy, amiben részt veszek"
   label_user_mail_no_self_notified: "Nem kérek értesítést az általam végzett módosításokról"
   label_registration_activation_by_email: Fiók aktiválása e-mailben
   label_registration_manual_activation: Manuális fiók aktiválás
@@ -682,9 +680,9 @@
   text_subprojects_destroy_warning: "Az alprojekt(ek): {{value}} szintén törlésre kerülnek."
   text_workflow_edit: Válasszon egy szerepkört, és egy feladat típust a workflow szerkesztéséhez
   text_are_you_sure: Biztos benne ?
-  text_tip_task_begin_day: a feladat ezen a napon kezdődik
-  text_tip_task_end_day: a feladat ezen a napon ér véget
-  text_tip_task_begin_end_day: a feladat ezen a napon kezdődik és ér véget
+  text_tip_issue_begin_day: a feladat ezen a napon kezdődik
+  text_tip_issue_end_day: a feladat ezen a napon ér véget
+  text_tip_issue_begin_end_day: a feladat ezen a napon kezdődik és ér véget
   text_project_identifier_info: 'Kis betűk (a-z), számok és kötőjel megengedett.<br />Mentés után az azonosítót megváltoztatni nem lehet.'
   text_caracters_maximum: "maximum {{count}} karakter."
   text_caracters_minimum: "Legkevesebb {{count}} karakter hosszúnek kell lennie."
@@ -839,12 +837,12 @@
   text_wiki_page_destroy_children: Minden aloldal és leszármazottjának törlése
   setting_password_min_length: Minimum jelszó hosszúság
   field_group_by: Szerint csoportosítva
-  mail_subject_wiki_content_updated: "'{{page}}' wiki oldal frissítve"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki oldal frissítve"
   label_wiki_content_added: Wiki oldal hozzáadva
-  mail_subject_wiki_content_added: "Új wiki oldal: '{{page}}'"
-  mail_body_wiki_content_added: A '{{page}}' wiki oldalt {{author}} hozta létre.
+  mail_subject_wiki_content_added: "Új wiki oldal: '{{id}}'"
+  mail_body_wiki_content_added: A '{{id}}' wiki oldalt {{author}} hozta létre.
   label_wiki_content_updated: Wiki oldal frissítve
-  mail_body_wiki_content_updated: A '{{page}}' wiki oldalt {{author}} frissítette.
+  mail_body_wiki_content_updated: A '{{id}}' wiki oldalt {{author}} frissítette.
   permission_add_project: Projekt létrehozása
   setting_new_project_user_role_id: Projekt létrehozási jog nem adminisztrátor felhasználóknak
   label_view_all_revisions: Minden revízió megtekintése
@@ -936,8 +934,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/id.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/id.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -181,10 +181,10 @@
   mail_body_account_activation_request: "Pengguna baru ({{value}}) sudan didaftarkan. Akun tersebut menunggu persetujuan anda:"
   mail_subject_reminder: "{{count}} masalah harus selesai pada hari berikutnya ({{days}})"
   mail_body_reminder: "{{count}} masalah yang ditugaskan pada anda harus selesai dalam {{days}} hari kedepan:"
-  mail_subject_wiki_content_added: "'{{page}}' halaman wiki sudah ditambahkan"
-  mail_body_wiki_content_added: "The '{{page}}' halaman wiki sudah ditambahkan oleh {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' halaman wiki sudah diperbarui"
-  mail_body_wiki_content_updated: "The '{{page}}' halaman wiki sudah diperbarui oleh {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' halaman wiki sudah ditambahkan"
+  mail_body_wiki_content_added: "The '{{id}}' halaman wiki sudah ditambahkan oleh {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' halaman wiki sudah diperbarui"
+  mail_body_wiki_content_updated: "The '{{id}}' halaman wiki sudah diperbarui oleh {{author}}."
   
   gui_validation_error: 1 kesalahan
   gui_validation_error_plural: "{{count}} kesalahan"
@@ -251,7 +251,6 @@
   field_attr_lastname: Atribut nama belakang
   field_attr_mail: Atribut email
   field_onthefly: Pembuatan pengguna seketika
-  field_start_date: Mulai
   field_done_ratio: % Selesai
   field_auth_source: Mode otentikasi
   field_hide_mail: Sembunyikan email saya
@@ -688,7 +687,6 @@
   label_search_titles_only: Cari judul saja
   label_user_mail_option_all: "Untuk semua kejadian pada semua proyek saya"
   label_user_mail_option_selected: "Hanya untuk semua kejadian pada proyek yang saya pilih ..."
-  label_user_mail_option_none: "Hanya pada hal-hal yang saya pantau atau saya terlibat di dalamnya"
   label_user_mail_no_self_notified: "Saya tak ingin diberitahu untuk perubahan yang saya buat sendiri"
   label_user_mail_assigned_only_mail_notification: "Kirim email hanya bila saya ditugaskan untuk masalah terkait"
   label_user_mail_block_mail_notification: "Saya tidak ingin menerima email. Terima kasih."  
@@ -796,9 +794,9 @@
   text_journal_set_to: "{{label}} di set ke {{value}}"
   text_journal_deleted: "{{label}} dihapus ({{old}})"
   text_journal_added: "{{label}} {{value}} ditambahkan"
-  text_tip_task_begin_day: tugas dimulai hari itu
-  text_tip_task_end_day: tugas berakhir hari itu
-  text_tip_task_begin_end_day: tugas dimulai dan berakhir hari itu
+  text_tip_issue_begin_day: tugas dimulai hari itu
+  text_tip_issue_end_day: tugas berakhir hari itu
+  text_tip_issue_begin_end_day: tugas dimulai dan berakhir hari itu
   text_project_identifier_info: 'Yang diijinkan hanya huruf kecil (a-z), angka dan tanda minus.<br />Sekali disimpan, pengenal tidak bisa diubah.'
   text_caracters_maximum: "maximum {{count}} karakter."
   text_caracters_minimum: "Setidaknya harus sepanjang {{count}} karakter."
@@ -921,8 +919,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/it.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/it.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -232,7 +232,6 @@
   field_attr_lastname: Attributo cognome
   field_attr_mail: Attributo email
   field_onthefly: Creazione utente "al volo"
-  field_start_date: Inizio
   field_done_ratio: % completato
   field_auth_source: Modalità di autenticazione
   field_hide_mail: Nascondi il mio indirizzo email
@@ -572,9 +571,9 @@
   text_project_destroy_confirmation: Sei sicuro di voler eliminare il progetto e tutti i dati ad esso collegati?
   text_workflow_edit: Seleziona un ruolo ed un tracker per modificare il workflow
   text_are_you_sure: Sei sicuro ?
-  text_tip_task_begin_day: attività che iniziano in questa giornata
-  text_tip_task_end_day: attività che terminano in questa giornata
-  text_tip_task_begin_end_day: attività che iniziano e terminano in questa giornata
+  text_tip_issue_begin_day: attività che iniziano in questa giornata
+  text_tip_issue_end_day: attività che terminano in questa giornata
+  text_tip_issue_begin_end_day: attività che iniziano e terminano in questa giornata
   text_project_identifier_info: "Lettere minuscole (a-z), numeri e trattini permessi.<br />Una volta salvato, l'identificativo non può essere modificato."
   text_caracters_maximum: "massimo {{count}} caratteri."
   text_length_between: "Lunghezza compresa tra {{min}} e {{max}} caratteri."
@@ -632,7 +631,6 @@
   text_user_mail_option: "Per i progetti non selezionati, riceverai solo le notifiche riguardanti le cose che osservi o nelle quali sei coinvolto (per esempio segnalazioni che hai creato o che ti sono state assegnate)."
   label_user_mail_option_selected: "Solo per gli eventi relativi ai progetti selezionati..."
   label_user_mail_option_all: "Per ogni evento relativo ad uno dei miei progetti"
-  label_user_mail_option_none: "Solo per argomenti che osservo o che mi riguardano"
   setting_emails_footer: Piè di pagina email
   label_float: Decimale
   button_copy: Copia
@@ -820,12 +818,12 @@
   text_wiki_page_destroy_children: Elimina le pagine figlie e tutta la discendenza
   setting_password_min_length: Lunghezza minima password
   field_group_by: Raggruppa risultati per
-  mail_subject_wiki_content_updated: "La pagina wiki '{{page}}' è stata aggiornata"
+  mail_subject_wiki_content_updated: "La pagina wiki '{{id}}' è stata aggiornata"
   label_wiki_content_added: Aggiunta pagina al wiki
-  mail_subject_wiki_content_added: "La pagina '{{page}}' è stata aggiunta al wiki"
-  mail_body_wiki_content_added: La pagina '{{page}}' è stata aggiunta al wiki da {{author}}.
+  mail_subject_wiki_content_added: "La pagina '{{id}}' è stata aggiunta al wiki"
+  mail_body_wiki_content_added: La pagina '{{id}}' è stata aggiunta al wiki da {{author}}.
   label_wiki_content_updated: Aggiornata pagina wiki
-  mail_body_wiki_content_updated: La pagina '{{page}}' wiki è stata aggiornata da{{author}}.
+  mail_body_wiki_content_updated: La pagina '{{id}}' wiki è stata aggiornata da{{author}}.
   permission_add_project: Crea progetto
   setting_new_project_user_role_id: Ruolo assegnato agli utenti non amministratori che creano un progetto
   label_view_all_revisions: Mostra tutte le revisioni
@@ -917,8 +915,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/ja.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/ja.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -175,6 +175,7 @@
   notice_file_not_found: アクセスã—よã†ã¨ã—ãŸãƒšãƒ¼ã‚¸ã¯å­˜åœ¨ã—ãªã„ã‹å‰Šé™¤ã•れã¦ã„ã¾ã™ã€‚
   notice_locking_conflict: 別ã®ãƒ¦ãƒ¼ã‚¶ãŒãƒ‡ãƒ¼ã‚¿ã‚’æ›´æ–°ã—ã¦ã„ã¾ã™ã€‚
   notice_not_authorized: ã“ã®ãƒšãƒ¼ã‚¸ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯èªè¨¼ãŒå¿…è¦ã§ã™ã€‚
+  notice_not_authorized_archived_project: ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã¯æ›¸åº«ã«ä¿å­˜ã•れã¦ã„ã¾ã™ã€‚
   notice_email_sent: "{{value}} å®›ã«ãƒ¡ãƒ¼ãƒ«ã‚’é€ä¿¡ã—ã¾ã—ãŸã€‚"
   notice_email_error: "メールé€ä¿¡ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠({{value}})"
   notice_feeds_access_key_reseted: RSSã‚¢ã‚¯ã‚»ã‚¹ã‚­ãƒ¼ã‚’åˆæœŸåŒ–ã—ã¾ã—ãŸã€‚
@@ -218,10 +219,10 @@
   mail_body_account_activation_request: "æ–°ã—ã„ユーザ {{value}} ãŒç™»éŒ²ã•れã¾ã—ãŸã€‚ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã‚ãªãŸã®æ‰¿èªå¾…ã¡ã§ã™ï¼š"
   mail_subject_reminder: "{{count}}ä»¶ã®ãƒã‚±ãƒƒãƒˆã®æœŸæ—¥ãŒ{{days}}日以内ã«åˆ°æ¥ã—ã¾ã™"
   mail_body_reminder: "{{count}}ä»¶ã®æ‹…当ãƒã‚±ãƒƒãƒˆã®æœŸæ—¥ãŒ{{days}}日以内ã«åˆ°æ¥ã—ã¾ã™:"
-  mail_subject_wiki_content_added: "Wikiページ {{page}} ãŒè¿½åŠ ã•れã¾ã—ãŸ"
-  mail_body_wiki_content_added: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{page}} ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚"
-  mail_subject_wiki_content_updated: "Wikiページ {{page}} ãŒæ›´æ–°ã•れã¾ã—ãŸ"
-  mail_body_wiki_content_updated: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{page}} ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚"
+  mail_subject_wiki_content_added: "Wikiページ {{id}} ãŒè¿½åŠ ã•れã¾ã—ãŸ"
+  mail_body_wiki_content_added: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{id}} ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚"
+  mail_subject_wiki_content_updated: "Wikiページ {{id}} ãŒæ›´æ–°ã•れã¾ã—ãŸ"
+  mail_body_wiki_content_updated: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{id}} ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚"
   
   gui_validation_error: 1ä»¶ã®ã‚¨ãƒ©ãƒ¼
   gui_validation_error_plural: "{{count}}ä»¶ã®ã‚¨ãƒ©ãƒ¼"
@@ -287,7 +288,6 @@
   field_attr_lastname: 苗字属性
   field_attr_mail: メール属性
   field_onthefly: ã‚ã‚ã›ã¦ãƒ¦ãƒ¼ã‚¶ã‚’作æˆ
-  field_start_date: é–‹å§‹æ—¥
   field_done_ratio: é€²æ— %
   field_auth_source: èªè¨¼æ–¹å¼
   field_hide_mail: メールアドレスを隠ã™
@@ -376,6 +376,7 @@
   setting_issue_done_ratio_issue_status: ãƒã‚±ãƒƒãƒˆã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’使用ã™ã‚‹
   setting_start_of_week: 週ã®é–‹å§‹æ›œæ—¥
   setting_rest_api_enabled: RESTã«ã‚ˆã‚‹Webサービスを有効ã«ã™ã‚‹
+  setting_default_notification_option: デフォルトã®ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã‚ªãƒ—ション
   
   permission_add_project: プロジェクトã®è¿½åŠ 
   permission_add_subprojects: サブプロジェクトã®è¿½åŠ 
@@ -701,7 +702,7 @@
   label_relation_delete: 関連ã®å‰Šé™¤
   label_relates_to: 関係ã—ã¦ã„ã‚‹
   label_duplicates: é‡è¤‡ã—ã¦ã„ã‚‹
-  label_duplicated_by: é‡è¤‡ã—ã¦ã„ã‚‹
+  label_duplicated_by: é‡è¤‡ã•れã¦ã„ã‚‹
   label_blocks: ブロックã—ã¦ã„ã‚‹
   label_blocked_by: ブロックã•れã¦ã„ã‚‹
   label_precedes: 先行ã™ã‚‹
@@ -752,7 +753,10 @@
   label_search_titles_only: タイトルã®ã¿
   label_user_mail_option_all: "å‚加ã—ã¦ã„るプロジェクトã®å…¨ã¦ã®é€šçŸ¥"
   label_user_mail_option_selected: "é¸æŠžã—ãŸãƒ—ロジェクトã®å…¨ã¦ã®é€šçŸ¥..."
-  label_user_mail_option_none: "ウォッãƒã¾ãŸã¯é–¢ä¿‚ã—ã¦ã„る事柄ã®ã¿"
+  label_user_mail_option_none: "通知ã—ãªã„"
+  label_user_mail_option_only_my_events: "ウォッãƒã¾ãŸã¯é–¢ä¿‚ã—ã¦ã„る事柄ã®ã¿"
+  label_user_mail_option_only_assigned: "è‡ªåˆ†ãŒæ‹…当ã—ã¦ã„る事柄ã®ã¿"
+  label_user_mail_option_only_owner: "自分ãŒä½œæˆã—ãŸäº‹æŸ„ã®ã¿"
   label_user_mail_no_self_notified: 自分自身ã«ã‚ˆã‚‹å¤‰æ›´ã®é€šçŸ¥ã¯ä¸è¦
   label_registration_activation_by_email: メールã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’有効化
   label_registration_manual_activation: 手動ã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’有効化
@@ -870,9 +874,9 @@
   text_journal_set_to: "{{label}} ã‚’ {{value}} ã«ã‚»ãƒƒãƒˆ"
   text_journal_deleted: "{{label}} を削除 ({{old}})"
   text_journal_added: "{{label}} {{value}} を追加"
-  text_tip_task_begin_day: ã“ã®æ—¥ã«é–‹å§‹ã™ã‚‹ã‚¿ã‚¹ã‚¯
-  text_tip_task_end_day: ã“ã®æ—¥ã«çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯
-  text_tip_task_begin_end_day: ã“ã®æ—¥ã®ã†ã¡ã«é–‹å§‹ã—ã¦çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯
+  text_tip_issue_begin_day: ã“ã®æ—¥ã«é–‹å§‹ã™ã‚‹ã‚¿ã‚¹ã‚¯
+  text_tip_issue_end_day: ã“ã®æ—¥ã«çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯
+  text_tip_issue_begin_end_day: ã“ã®æ—¥ã®ã†ã¡ã«é–‹å§‹ã—ã¦çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯
   text_project_identifier_info: 'è‹±å°æ–‡å­—(a-z)ã¨æ•°å­—ã¨ãƒ€ãƒƒã‚·ãƒ¥(-)ãŒä½¿ãˆã¾ã™ã€‚<br />一度ä¿å­˜ã™ã‚‹ã¨ã€è­˜åˆ¥å­ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。'
   text_caracters_maximum: "最大{{count}}文字ã§ã™ã€‚"
   text_caracters_minimum: "最低{{count}}文字ã®é•·ã•ãŒå¿…è¦ã§ã™"
@@ -943,3 +947,8 @@
   enumeration_doc_categories: 文書カテゴリ
   enumeration_activities: 作業分類 (時間トラッキング)
   enumeration_system_activity: システム作業分類
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/ko.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/ko.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -231,10 +231,10 @@
   mail_body_account_activation_request: "새 사용ìž({{value}})ê°€ 등ë¡ë˜ì—ˆìŠµë‹ˆë‹¤. 관리ìžë‹˜ì˜ 승ì¸ì„ 기다리고 있습니다.:"
   mail_body_reminder: "ë‹¹ì‹ ì´ ë§¡ê³  있는 ì¼ê° {{count}}ê°œì˜ ì™„ë£Œ ê¸°í•œì´ {{days}}ì¼ í›„ 입니다."
   mail_subject_reminder: "ë‚´ì¼ì´ ë§Œê¸°ì¸ ì¼ê° {{count}}ê°œ ({{days}})"
-  mail_subject_wiki_content_added: "위키페ì´ì§€ '{{page}}'ì´(ê°€) 추가ë˜ì—ˆìŠµë‹ˆë‹¤."
-  mail_subject_wiki_content_updated: "'위키페ì´ì§€ {{page}}'ì´(ê°€) 수정ë˜ì—ˆìŠµë‹ˆë‹¤."
-  mail_body_wiki_content_added: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{page}}'ì„(를) 추가하였습니다."
-  mail_body_wiki_content_updated: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{page}}'ì„(를) 수정하였습니다."
+  mail_subject_wiki_content_added: "위키페ì´ì§€ '{{id}}'ì´(ê°€) 추가ë˜ì—ˆìŠµë‹ˆë‹¤."
+  mail_subject_wiki_content_updated: "'위키페ì´ì§€ {{id}}'ì´(ê°€) 수정ë˜ì—ˆìŠµë‹ˆë‹¤."
+  mail_body_wiki_content_added: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{id}}'ì„(를) 추가하였습니다."
+  mail_body_wiki_content_updated: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{id}}'ì„(를) 수정하였습니다."
   
   gui_validation_error: ì—러
   gui_validation_error_plural: "{{count}}ê°œ ì—러"
@@ -299,7 +299,6 @@
   field_attr_lastname: 성 ì†ì„±
   field_attr_mail: ë©”ì¼ ì†ì„±
   field_onthefly: ë™ì  ì‚¬ìš©ìž ìƒì„±
-  field_start_date: 시작시간
   field_done_ratio: ì§„ì²™ë„
   field_auth_source: ì¸ì¦ 공급ìž
   field_hide_mail: ë©”ì¼ ì£¼ì†Œ 숨기기
@@ -727,7 +726,6 @@
   label_search_titles_only: 제목ì—서만 찾기
   label_user_mail_option_all: "ë‚´ê°€ ì†í•œ 프로ì íŠ¸ë¡œë“¤ë¶€í„° 모든 ë©”ì¼ ë°›ê¸°"
   label_user_mail_option_selected: "ì„ íƒí•œ 프로ì íŠ¸ë“¤ë¡œë¶€í„° 모든 ë©”ì¼ ë°›ê¸°.."
-  label_user_mail_option_none: "ë‚´ê°€ ì†í•˜ê±°ë‚˜ ê°ì‹œ ì¤‘ì¸ ì‚¬í•­ì— ëŒ€í•´ì„œë§Œ"
   label_user_mail_no_self_notified: "ë‚´ê°€ 만든 ë³€ê²½ì‚¬í•­ë“¤ì— ëŒ€í•´ì„œëŠ” 알림메ì¼ì„ 받지 않습니다."
   label_registration_activation_by_email: ë©”ì¼ë¡œ ê³„ì •ì„ í™œì„±í™”í•˜ê¸°
   label_registration_automatic_activation: ìžë™ 계정 활성화
@@ -810,9 +808,9 @@
   text_subprojects_destroy_warning: "하위 프로ì íЏ({{value}})ì´(ê°€) ìžë™ìœ¼ë¡œ 지워질 것입니다."
   text_workflow_edit: 업무í름 수정하려면 ì—­í• ê³¼ ì¼ê°ìœ í˜•ì„ ì„ íƒí•˜ì„¸ìš”.
   text_are_you_sure: ê³„ì† ì§„í–‰ 하시겠습니까?
-  text_tip_task_begin_day: 오늘 시작하는 업무(task)
-  text_tip_task_end_day: 오늘 종료하는 업무(task)
-  text_tip_task_begin_end_day: 오늘 시작하고 종료하는 업무(task)
+  text_tip_issue_begin_day: 오늘 시작하는 업무(task)
+  text_tip_issue_end_day: 오늘 종료하는 업무(task)
+  text_tip_issue_begin_end_day: 오늘 시작하고 종료하는 업무(task)
   text_project_identifier_info: 'ì˜ë¬¸ 소문ìž(a-z) ë° ìˆ«ìž, 대쉬(-) 가능.<br />저장ëœí›„ì—는 ì‹ë³„ìž ë³€ê²½ 불가능.'
   text_caracters_maximum: "최대 {{count}} ê¸€ìž ê°€ëŠ¥"
   text_caracters_minimum: "최소한 {{count}} ê¸€ìž ì´ìƒì´ì–´ì•¼ 합니다."
@@ -969,8 +967,19 @@
   field_time_entries: 기ë¡ëœ 시간
   project_module_gantt: Gantt 챠트
   project_module_calendar: 달력
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/lt.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/lt.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -241,10 +241,10 @@
   mail_body_account_activation_request: "Užsiregistravo naujas vartotojas ({{value}}). Jo paskyra laukia jūsų patvirtinimo:"
   mail_subject_reminder: "{{count}} darbas(ai) po kelių {{days}} dienų"
   mail_body_reminder: "{{count}} darbas(ai), kurie yra jums priskirti, baigiasi po {{days}} dienų(os):"
-  mail_subject_wiki_content_added: "'{{page}}' pridÄ—tas wiki puslapis"
-  mail_body_wiki_content_added: "The '{{page}}' wiki puslapi pridÄ—jo {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' atnaujintas wiki puslapis"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki puslapį atnaujino {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' pridÄ—tas wiki puslapis"
+  mail_body_wiki_content_added: "The '{{id}}' wiki puslapi pridÄ—jo {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' atnaujintas wiki puslapis"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki puslapį atnaujino {{author}}."
 
   gui_validation_error: 1 klaida
   gui_validation_error_plural: "{{count}} klaidų(os)"
@@ -310,7 +310,6 @@
   field_attr_lastname: PavardÄ—s priskiria
   field_attr_mail: Elektroninio pašto požymis
   field_onthefly: Automatinis vartotojų registravimas
-  field_start_date: PradÄ—ti
   field_done_ratio: % atlikta
   field_auth_source: Autentiškumo nustatymo būdas
   field_hide_mail: Paslėpkite mano elektroninio pašto adresą
@@ -742,7 +741,6 @@
   label_search_titles_only: Ieškoti pavadinimų tiktai
   label_user_mail_option_all: "Bet kokiam įvykiui visuose mano projektuose"
   label_user_mail_option_selected: "Bet kokiam įvykiui tiktai pasirinktuose projektuose ..."
-  label_user_mail_option_none: "Tiktai dalykai kuriuos aš stebiu ar aš esu įtrauktas į"
   label_user_mail_no_self_notified: "Nenoriu būti informuotas apie pakeitimus, kuriuos pats atlieku"
   label_registration_activation_by_email: "paskyros aktyvacija per e-paštą"
   label_registration_manual_activation: "rankinÄ— paskyros aktyvacija"
@@ -852,9 +850,9 @@
   text_journal_set_to: "{{label}} pakeista į {{value}}"
   text_journal_deleted: "{{label}} ištrintas ({{old}})"
   text_journal_added: "{{label}} {{value}} pridÄ—tas"
-  text_tip_task_begin_day: užduotis, prasidedanti šią dieną
-  text_tip_task_end_day: užduotis, pasibaigianti šią dieną
-  text_tip_task_begin_end_day: užduotis, prasidedanti ir pasibaigianti šią dieną
+  text_tip_issue_begin_day: užduotis, prasidedanti šią dieną
+  text_tip_issue_end_day: užduotis, pasibaigianti šią dieną
+  text_tip_issue_begin_end_day: užduotis, prasidedanti ir pasibaigianti šią dieną
   text_project_identifier_info: 'Mažosios raidÄ—s (a-z), skaiÄiai ir brÅ«kÅ¡niai galimi.<br/>IÅ¡saugojus, identifikuotojas negali bÅ«ti keiÄiamas.'
   text_caracters_maximum: "{{count}} simbolių maksimumas."
   text_caracters_minimum: "Turi būti mažiausiai {{count}} simbolių ilgio."
@@ -977,8 +975,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/lv.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/lv.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -180,10 +180,10 @@
   mail_body_account_activation_request: "Jauns lietotÄjs ({{value}}) ir reÄ£istrÄ“ts. LietotÄja konts gaida JÅ«su apstiprinÄjumu:"
   mail_subject_reminder: "{{count}} uzdevums(i) sagaidÄms(i) tuvÄkajÄs {{days}} dienÄs"
   mail_body_reminder: "{{count}} uzdevums(i), kurÅ¡(i) ir nozÄ«mÄ“ts(i) Jums, sagaidÄms(i) tuvÄkajÄs {{days}} dienÄs:"
-  mail_subject_wiki_content_added: "'{{page}}' Wiki lapa pievienota"
-  mail_body_wiki_content_added: "The '{{page}}' Wiki lapu pievienojis {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' Wiki lapa atjaunota"
-  mail_body_wiki_content_updated: "The '{{page}}' Wiki lapu atjaunojis {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' Wiki lapa pievienota"
+  mail_body_wiki_content_added: "The '{{id}}' Wiki lapu pievienojis {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' Wiki lapa atjaunota"
+  mail_body_wiki_content_updated: "The '{{id}}' Wiki lapu atjaunojis {{author}}."
   
   gui_validation_error: 1 kļūda
   gui_validation_error_plural: "{{count}} kļūdas"
@@ -248,7 +248,6 @@
   field_attr_lastname: UzvÄrda atribÅ«ts
   field_attr_mail: "E-pasta atribūts"
   field_onthefly: "LietotÄja izveidoÅ¡ana on-the-fly"
-  field_start_date: SÄkuma datums
   field_done_ratio: % padarīti
   field_auth_source: Pilnvarošanas režīms
   field_hide_mail: "Paslēpt manu e-pasta adresi"
@@ -702,7 +701,6 @@
   label_search_titles_only: Meklēt tikai nosaukumos
   label_user_mail_option_all: "Par visiem notikumiem visos manos projektos"
   label_user_mail_option_selected: "Par visiem notikumiem tikai izvēlētajos projektos..."
-  label_user_mail_option_none: "Tikai par lietÄm, kuras es vÄ“roju un kurÄs esmu iesaistÄ«ts"
   label_user_mail_no_self_notified: "Neziņot man par izmaiņÄm, kuras veicu es pats"
   label_registration_activation_by_email: "konta aktivizÄcija caur e-pastu"
   label_registration_manual_activation: manuÄlÄ konta aktivizÄcija
@@ -816,9 +814,9 @@
   text_journal_set_to: "{{label}} iestatīts uz {{value}}"
   text_journal_deleted: "{{label}} dzēsts ({{old}})"
   text_journal_added: "{{label}} {{value}} pievienots"
-  text_tip_task_begin_day: uzdevums sÄkas Å¡odien
-  text_tip_task_end_day: uzdevums beidzas šodien
-  text_tip_task_begin_end_day: uzdevums sÄkas un beidzas Å¡odien
+  text_tip_issue_begin_day: uzdevums sÄkas Å¡odien
+  text_tip_issue_end_day: uzdevums beidzas šodien
+  text_tip_issue_begin_end_day: uzdevums sÄkas un beidzas Å¡odien
   text_project_identifier_info: 'Tikai mazie burti (a-z), cipari un domuzÄ«mes ir atļauti.<br />Kad saglabÄts, identifikators nevar tikt mainÄ«ts.'
   text_caracters_maximum: "{{count}} simboli maksimÄli."
   text_caracters_minimum: "JÄbÅ«t vismaz {{count}} simbolu garumÄ."
@@ -908,8 +906,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/locales/.svn/text-base/mk.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,929 @@
+mk:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%d/%m/%Y"
+      short: "%d %b"
+      long: "%d %B, %Y"
+
+    day_names: [недела, понеделник, вторник, Ñреда, четврток, петок, Ñабота]
+    abbr_day_names: [нед, пон, вто, Ñре, чет, пет, Ñаб]
+
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, јануари, февруари, март, април, мај, јуни, јули, авгуÑÑ‚, Ñептември, октомври, ноември, декември]
+    abbr_month_names: [~, јан, фев, мар, апр, мај, јун, јул, авг, Ñеп, окт, ное, дек]
+    # Used in date_select and datime_select.
+    order: [ :day, :month, :year ]
+
+  time:
+    formats:
+      default: "%d/%m/%Y %H:%M"
+      time: "%H:%M"
+      short: "%d %b %H:%M"
+      long: "%d %B, %Y %H:%M"
+    am: "предпладне"
+    pm: "попладне"
+
+  datetime:
+    distance_in_words:
+      half_a_minute: "пола минута"
+      less_than_x_seconds:
+        one:   "помалку од 1 Ñекунда"
+        other: "помалку од {{count}} Ñекунди"
+      x_seconds:
+        one:   "1 Ñекунда"
+        other: "{{count}} Ñекунди"
+      less_than_x_minutes:
+        one:   "помалку од 1 минута"
+        other: "помалку од {{count}} минути"
+      x_minutes:
+        one:   "1 минута"
+        other: "{{count}} минути"
+      about_x_hours:
+        one:   "околу 1 чаÑ"
+        other: "околу {{count}} чаÑа"
+      x_days:
+        one:   "1 ден"
+        other: "{{count}} дена"
+      about_x_months:
+        one:   "околу 1 меÑец"
+        other: "околу {{count}} меÑеци"
+      x_months:
+        one:   "1 меÑец"
+        other: "{{count}} меÑеци"
+      about_x_years:
+        one:   "околу 1 година"
+        other: "околу {{count}} години"
+      over_x_years:
+        one:   "преку 1 година"
+        other: "преку {{count}} години"
+      almost_x_years:
+        one:   "Ñкоро 1 година"
+        other: "Ñкоро {{count}} години"
+
+  number:
+    # Default format for numbers
+    format:
+      separator: "."
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Byte"
+            other: "Bytes"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "и"
+      skip_last_comma: false
+
+  activerecord:
+    errors:
+      messages:
+        inclusion: "не е вклучено во лиÑтата"
+        exclusion: "е резервирано"
+        invalid: "е невалидно"
+        confirmation: "не Ñе Ñовпаѓа Ñо потврдата"
+        accepted: "мора да е прифатено"
+        empty: "неможе да е празно"
+        blank: "неможе да е празно"
+        too_long: "е предолго (макÑ. {{count}} знаци)"
+        too_short: "е прекратко (мин. {{count}} знаци)"
+        wrong_length: "е погрешна должина (треба да е  {{count}} знаци)"
+        taken: "е веќе зафатено"
+        not_a_number: "не е број"
+        not_a_date: "не е валидна дата"
+        greater_than: "мора да е поголемо од {{count}}"
+        greater_than_or_equal_to: "мора да е поголемо или еднакво на {{count}}"
+        equal_to: "мора да е еднакво на {{count}}"
+        less_than: "мора да е помало од {{count}}"
+        less_than_or_equal_to: "мора да е помало или еднакво на {{count}}"
+        odd: "мора да е непарно"
+        even: "мора да е парно"
+        greater_than_start_date: "мора да е поголема од почетната дата"
+        not_same_project: "не припаѓа на иÑтиот проект"
+        circular_dependency: "Оваа врÑка ќе креира кружна завиÑноÑÑ‚"
+        cant_link_an_issue_with_a_descendant: "Задача неможе да Ñе поврзе Ñо една од нејзините подзадачи"
+
+  actionview_instancetag_blank_option: Изберете
+
+  general_text_No: 'Ðе'
+  general_text_Yes: 'Да'
+  general_text_no: 'не'
+  general_text_yes: 'да'
+  general_lang_name: 'Macedonian (МакедонÑки)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+
+  notice_account_updated: Профилот е уÑпешно ажуриран.
+  notice_account_invalid_creditentials: Ðеточен кориÑник или лозинка
+  notice_account_password_updated: Лозинката е уÑпешно ажурирана.
+  notice_account_wrong_password: Погрешна лозинка
+  notice_account_register_done: Профилот е уÑпешно креиран. За активација, клкнете на врÑката што ви е пратена по е-пошта.
+  notice_account_unknown_email: Ðепознат кориÑник.
+  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
+  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
+  notice_account_activated: Your account has been activated. You can now log in.
+  notice_successful_create: УÑпешно креирање.
+  notice_successful_update: УÑпешно ажурирање.
+  notice_successful_delete: УÑпешно бришење.
+  notice_successful_connection: УÑпешна конекција.
+  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
+  notice_locking_conflict: Data has been updated by another user.
+  notice_not_authorized: You are not authorized to access this page.
+  notice_email_sent: "Е-порака е пратена на {{value}}"
+  notice_email_error: "Се Ñлучи грешка при праќање на е-пораката ({{value}})"
+  notice_feeds_access_key_reseted: Вашиот RSS клуч за приÑтап е reset.
+  notice_api_access_key_reseted: Вашиот API клуч за приÑтап е reset.
+  notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}."
+  notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
+  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
+  notice_account_pending: "Your account was created and is now pending administrator approval."
+  notice_default_data_loaded: Default configuration successfully loaded.
+  notice_unable_delete_version: Unable to delete version.
+  notice_unable_delete_time_entry: Unable to delete time log entry.
+  notice_issue_done_ratios_updated: Issue done ratios updated.
+
+  error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}"
+  error_scm_not_found: "The entry or revision was not found in the repository."
+  error_scm_command_failed: "An error occurred when trying to access the repository: {{value}}"
+  error_scm_annotate: "The entry does not exist or can not be annotated."
+  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
+  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
+  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
+  error_can_not_delete_custom_field: Unable to delete custom field
+  error_can_not_delete_tracker: "This tracker contains issues and can't be deleted."
+  error_can_not_remove_role: "This role is in use and can not be deleted."
+  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
+  error_can_not_archive_project: This project can not be archived
+  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
+  error_workflow_copy_source: 'Please select a source tracker or role'
+  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
+  error_unable_delete_issue_status: 'Unable to delete issue status'
+  error_unable_to_connect: "Unable to connect ({{value}})"
+  warning_attachments_not_saved: "{{count}} file(s) could not be saved."
+
+  mail_subject_lost_password: "Вашата {{value}} лозинка"
+  mail_body_lost_password: 'To change your password, click on the following link:'
+  mail_subject_register: "Your {{value}} account activation"
+  mail_body_register: 'To activate your account, click on the following link:'
+  mail_body_account_information_external: "You can use your {{value}} account to log in."
+  mail_body_account_information: Your account information
+  mail_subject_account_activation_request: "{{value}} account activation request"
+  mail_body_account_activation_request: "Ðов кориÑник ({{value}}) е региÑтриран. The account is pending your approval:"
+  mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
+  mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}."
+
+  gui_validation_error: 1 грешка
+  gui_validation_error_plural: "{{count}} грешки"
+
+  field_name: Име
+  field_description: ОпиÑ
+  field_summary: Краток опиÑ
+  field_is_required: Задолжително
+  field_firstname: Име
+  field_lastname: Презиме
+  field_mail: Е-пошта
+  field_filename: Датотека
+  field_filesize: Големина
+  field_downloads: Превземања
+  field_author: Ðвтор
+  field_created_on: Креиран
+  field_updated_on: Ðжурирано
+  field_field_format: Формат
+  field_is_for_all: За Ñите проекти
+  field_possible_values: Можни вредноÑти
+  field_regexp: Regular expression
+  field_min_length: Минимална должина
+  field_max_length: МакÑимална должина
+  field_value: ВредноÑÑ‚
+  field_category: Категорија
+  field_title: ÐаÑлов
+  field_project: Проект
+  field_issue: Задача
+  field_status: СтатуÑ
+  field_notes: Белешки
+  field_is_closed: Задачата е затворена
+  field_is_default: Default value
+  field_tracker: Tracker
+  field_subject: ÐаÑлов
+  field_due_date: Краен рок
+  field_assigned_to: Доделена на
+  field_priority: Приоритет
+  field_fixed_version: Target version
+  field_user: КориÑник
+  field_principal: Principal
+  field_role: Улога
+  field_homepage: Веб Ñтрана
+  field_is_public: Јавен
+  field_parent: Подпроект на
+  field_is_in_roadmap: Issues displayed in roadmap
+  field_login: КориÑник
+  field_mail_notification: ИзвеÑтувања по e-пошта
+  field_admin: ÐдминиÑтратор
+  field_last_login_on: ПоÑледна најава
+  field_language: Јазик
+  field_effective_date: Дата
+  field_password: Лозинка
+  field_new_password: Ðова лозинка
+  field_password_confirmation: Потврда
+  field_version: Верзија
+  field_type: Тип
+  field_host: ХоÑÑ‚
+  field_port: Порт
+  field_account: Account
+  field_base_dn: Base DN
+  field_attr_login: Login attribute
+  field_attr_firstname: Firstname attribute
+  field_attr_lastname: Lastname attribute
+  field_attr_mail: Email attribute
+  field_onthefly: Моментално (On-the-fly) креирање на кориÑници
+  field_done_ratio: % Завршено
+  field_auth_source: Режим на автентикација
+  field_hide_mail: Криј ја мојата адреÑа на е-пошта
+  field_comments: Коментар
+  field_url: URL
+  field_start_page: Почетна Ñтрана
+  field_subproject: Подпроект
+  field_hours: ЧаÑови
+  field_activity: ÐктивноÑÑ‚
+  field_spent_on: Дата
+  field_identifier: Идентификатор
+  field_is_filter: КориÑти како филтер
+  field_issue_to: Поврзана задача
+  field_delay: Доцнење
+  field_assignable: Ðа оваа улога може да Ñе доделуваат задачи
+  field_redirect_existing_links: ПренаÑочи ги поÑтоечките врÑки
+  field_estimated_hours: Проценето време
+  field_column_names: Колони
+  field_time_entries: Бележи време
+  field_time_zone: ВременÑка зона
+  field_searchable: Може да Ñе пребарува
+  field_default_value: Default value
+  field_comments_sorting: Прикажувај коментари
+  field_parent_title: Parent page
+  field_editable: Може да Ñе уредува
+  field_watcher: Watcher
+  field_identity_url: OpenID URL
+  field_content: Содржина
+  field_group_by: Групирај ги резултатите Ñпоред
+  field_sharing: Споделување
+  field_parent_issue: Parent task
+
+  setting_app_title: ÐаÑлов на апликацијата
+  setting_app_subtitle: ПоднаÑлов на апликацијата
+  setting_welcome_text: ТекÑÑ‚ за добредојде
+  setting_default_language: Default јазик
+  setting_login_required: Задолжителна автентикација
+  setting_self_registration: Само-региÑтрација
+  setting_attachment_max_size: МакÑ. големина на прилог
+  setting_issues_export_limit: Issues export limit
+  setting_mail_from: Emission email address
+  setting_bcc_recipients: Blind carbon copy recipients (bcc)
+  setting_plain_text_mail: ТекÑтуални е-пораки (без HTML)
+  setting_host_name: Име на хоÑÑ‚ и патека
+  setting_text_formatting: Форматирање на текÑÑ‚
+  setting_wiki_compression: КомпреÑија на иÑторијата на вики
+  setting_feeds_limit: Feed content limit
+  setting_default_projects_public: Ðовите проекти Ñе иницијално јавни
+  setting_autofetch_changesets: Autofetch commits
+  setting_sys_api_enabled: Enable WS for repository management
+  setting_commit_ref_keywords: Referencing keywords
+  setting_commit_fix_keywords: Fixing keywords
+  setting_autologin: ÐвтоматÑка најава
+  setting_date_format: Формат на дата
+  setting_time_format: Формат на време
+  setting_cross_project_issue_relations: Дозволи релации на задачи меѓу проекти
+  setting_issue_list_default_columns: Default columns displayed on the issue list
+  setting_repositories_encodings: Repositories encodings
+  setting_commit_logs_encoding: Commit messages encoding
+  setting_emails_footer: Emails footer
+  setting_protocol: Протокол
+  setting_per_page_options: Objects per page options
+  setting_user_format: Приказ на кориÑниците
+  setting_activity_days_default: Денови прикажана во активноÑта на проектот
+  setting_display_subprojects_issues: Прикажи ги задачите на подпроектите во главните проекти
+  setting_enabled_scm: Овозможи SCM
+  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
+  setting_mail_handler_api_enabled: Enable WS for incoming emails
+  setting_mail_handler_api_key: API клуч
+  setting_sequential_project_identifiers: Генерирај поÑледователни идентификатори на проекти
+  setting_gravatar_enabled: КориÑти Gravatar кориÑнички икони
+  setting_gravatar_default: Default Gravatar image
+  setting_diff_max_lines_displayed: Max number of diff lines displayed
+  setting_file_max_size_displayed: Max size of text files displayed inline
+  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
+  setting_openid: Дозволи OpenID најава и региÑтрација
+  setting_password_min_length: Мин. должина на лозинка
+  setting_new_project_user_role_id: Улога доделена на неадминиÑтраторÑки кориÑник кој креира проект
+  setting_default_projects_modules: Default enabled modules for new projects
+  setting_issue_done_ratio: Calculate the issue done ratio with
+  setting_issue_done_ratio_issue_field: Use the issue field
+  setting_issue_done_ratio_issue_status: Use the issue status
+  setting_start_of_week: Start calendars on
+  setting_rest_api_enabled: Enable REST web service
+  setting_cache_formatted_text: Cache formatted text
+
+  permission_add_project: Креирај проекти
+  permission_add_subprojects: Креирај подпроекти
+  permission_edit_project: Уреди проект
+  permission_select_project_modules: Изберете модули за проект
+  permission_manage_members: Manage members
+  permission_manage_project_activities: Manage project activities
+  permission_manage_versions: Manage versions
+  permission_manage_categories: Manage issue categories
+  permission_view_issues: Прегледај задачи
+  permission_add_issues: Додавај задачи
+  permission_edit_issues: Уредувај задачи
+  permission_manage_issue_relations: Manage issue relations
+  permission_add_issue_notes: Додавај белешки
+  permission_edit_issue_notes: Уредувај белешки
+  permission_edit_own_issue_notes: Уредувај ÑопÑтвени белешки
+  permission_move_issues: ПремеÑтувај задачи
+  permission_delete_issues: Бриши задачи
+  permission_manage_public_queries: Manage public queries
+  permission_save_queries: Save queries
+  permission_view_gantt: View gantt chart
+  permission_view_calendar: View calendar
+  permission_view_issue_watchers: View watchers list
+  permission_add_issue_watchers: Add watchers
+  permission_delete_issue_watchers: Delete watchers
+  permission_log_time: Бележи потрошено време
+  permission_view_time_entries: Прегледај потрошено време
+  permission_edit_time_entries: Уредувај белешки за потрошено време
+  permission_edit_own_time_entries: Уредувај ÑопÑтвени белешки за потрошено време
+  permission_manage_news: Manage news
+  permission_comment_news: Коментирај на веÑти
+  permission_manage_documents: Manage documents
+  permission_view_documents: Прегледувај документи
+  permission_manage_files: Manage files
+  permission_view_files: Прегледувај датотеки
+  permission_manage_wiki: Manage wiki
+  permission_rename_wiki_pages: Преименувај вики Ñтраници
+  permission_delete_wiki_pages: Бриши вики Ñтраници
+  permission_view_wiki_pages: Прегледувај вики
+  permission_view_wiki_edits: Прегледувај вики иÑторија
+  permission_edit_wiki_pages: Уредувај вики Ñтраници
+  permission_delete_wiki_pages_attachments: Бриши прилози
+  permission_protect_wiki_pages: Заштитувај вики Ñтраници
+  permission_manage_repository: Manage repository
+  permission_browse_repository: Browse repository
+  permission_view_changesets: View changesets
+  permission_commit_access: Commit access
+  permission_manage_boards: Manage boards
+  permission_view_messages: View messages
+  permission_add_messages: Post messages
+  permission_edit_messages: Уредувај пораки
+  permission_edit_own_messages: Уредувај ÑопÑтвени пораки
+  permission_delete_messages: Бриши пораки
+  permission_delete_own_messages: Бриши ÑопÑтвени пораки
+  permission_export_wiki_pages: Export wiki pages
+  permission_manage_subtasks: Manage subtasks
+
+  project_module_issue_tracking: Следење на задачи
+  project_module_time_tracking: Следење на време
+  project_module_news: ВеÑти
+  project_module_documents: Документи
+  project_module_files: Датотеки
+  project_module_wiki: Вики
+  project_module_repository: Repository
+  project_module_boards: Форуми
+  project_module_calendar: Календар
+  project_module_gantt: Gantt
+
+  label_user: КориÑник
+  label_user_plural: КориÑници
+  label_user_new: Ðов кориÑник
+  label_user_anonymous: Ðнонимен
+  label_project: Проект
+  label_project_new: Ðов проект
+  label_project_plural: Проекти
+  label_x_projects:
+    zero:  нема проекти
+    one:   1 проект
+    other: "{{count}} проекти"
+  label_project_all: Сите проекти
+  label_project_latest: ПоÑледните проекти
+  label_issue: Задача
+  label_issue_new: Ðова задача
+  label_issue_plural: Задачи
+  label_issue_view_all: Прегледај ги Ñите задачи
+  label_issues_by: "Задачи по {{value}}"
+  label_issue_added: Задачата е додадена
+  label_issue_updated: Задачата е ажурирана
+  label_document: Документ
+  label_document_new: Ðов документ
+  label_document_plural: Документи
+  label_document_added: Документот е додаден
+  label_role: Улога
+  label_role_plural: Улоги
+  label_role_new: Ðова улога
+  label_role_and_permissions: Улоги и овлаÑтувања
+  label_member: Член
+  label_member_new: Ðов член
+  label_member_plural: Членови
+  label_tracker: Tracker
+  label_tracker_plural: Trackers
+  label_tracker_new: New tracker
+  label_workflow: Workflow
+  label_issue_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð½Ð° задача
+  label_issue_status_plural: СтатуÑи на задачи
+  label_issue_status_new: Ðов ÑтатуÑ
+  label_issue_category: Категорија на задача
+  label_issue_category_plural: Категории на задачи
+  label_issue_category_new: Ðова категорија
+  label_custom_field: Прилагодено поле
+  label_custom_field_plural: Прилагодени полиња
+  label_custom_field_new: Ðово прилагодено поле
+  label_enumerations: Enumerations
+  label_enumeration_new: Ðова вредноÑÑ‚
+  label_information: Информација
+  label_information_plural: Информации
+  label_please_login: Ðајави Ñе
+  label_register: РегиÑтрирај Ñе
+  label_login_with_open_id_option: или најави Ñе Ñо OpenID
+  label_password_lost: Изгубена лозинка
+  label_home: Почетна
+  label_my_page: Мојата Ñтрана
+  label_my_account: Мојот профил
+  label_my_projects: Мои проекти
+  label_my_page_block: Блок елемент
+  label_administration: ÐдминиÑтрација
+  label_login: Ðајави Ñе
+  label_logout: Одјави Ñе
+  label_help: Помош
+  label_reported_issues: Пријавени задачи
+  label_assigned_to_me_issues: Задачи доделени на мене
+  label_last_login: ПоÑледна најава
+  label_registered_on: РегиÑтриран на
+  label_activity: ÐктивноÑÑ‚
+  label_overall_activity: Севкупна активноÑÑ‚
+  label_user_activity: "ÐктивноÑÑ‚ на {{value}}"
+  label_new: Ðова
+  label_logged_as: Ðајавени Ñте како
+  label_environment: Опкружување
+  label_authentication: Ðвтентикација
+  label_auth_source: Режим на автентикација
+  label_auth_source_new: Ðов режим на автентикација
+  label_auth_source_plural: Режими на автентикација
+  label_subproject_plural: Подпроекти
+  label_subproject_new: Ðов подпроект
+  label_and_its_subprojects: "{{value}} и неговите подпроекти"
+  label_min_max_length: Мин. - МакÑ. должина
+  label_list: ЛиÑта
+  label_date: Дата
+  label_integer: Integer
+  label_float: Float
+  label_boolean: Boolean
+  label_string: ТекÑÑ‚
+  label_text: Долг текÑÑ‚
+  label_attribute: Ðтрибут
+  label_attribute_plural: Ðтрибути
+  label_download: "{{count}} превземање"
+  label_download_plural: "{{count}} превземања"
+  label_no_data: Ðема податоци за прикажување
+  label_change_status: Промени ÑтатуÑ
+  label_history: ИÑторија
+  label_attachment: Датотека
+  label_attachment_new: Ðова датотека
+  label_attachment_delete: Избриши датотека
+  label_attachment_plural: Датотеки
+  label_file_added: Датотеката е додадена
+  label_report: Извештај
+  label_report_plural: Извештаи
+  label_news: ÐовоÑÑ‚
+  label_news_new: Додади новоÑÑ‚
+  label_news_plural: ÐовоÑти
+  label_news_latest: ПоÑледни новоÑти
+  label_news_view_all: Прегледај ги Ñите новоÑти
+  label_news_added: ÐовоÑтта е додадена
+  label_settings: Settings
+  label_overview: Преглед
+  label_version: Верзија
+  label_version_new: Ðова верзија
+  label_version_plural: Верзии
+  label_close_versions: Затвори ги завршените врзии
+  label_confirmation: Потврда
+  label_export_to: 'ДоÑтапно и во:'
+  label_read: Прочитај...
+  label_public_projects: Јавни проекти
+  label_open_issues: отворена
+  label_open_issues_plural: отворени
+  label_closed_issues: затворена
+  label_closed_issues_plural: затворени
+  label_x_open_issues_abbr_on_total:
+    zero:  0 отворени / {{total}}
+    one:   1 отворена / {{total}}
+    other: "{{count}} отворени / {{total}}"
+  label_x_open_issues_abbr:
+    zero:  0 отворени
+    one:   1 отворена
+    other: "{{count}} отворени"
+  label_x_closed_issues_abbr:
+    zero:  0 затворени
+    one:   1 затворена
+    other: "{{count}} затворени"
+  label_total: Вкупно
+  label_permissions: ОвлаÑтувања
+  label_current_status: Моментален ÑтатуÑ
+  label_new_statuses_allowed: Дозволени нови ÑтатуÑи
+  label_all: Ñите
+  label_none: ниеден
+  label_nobody: никој
+  label_next: Следно
+  label_previous: Претходно
+  label_used_by: КориÑтено од
+  label_details: Детали
+  label_add_note: Додади белешка
+  label_per_page: По Ñтрана
+  label_calendar: Календар
+  label_months_from: меÑеци од
+  label_gantt: Gantt
+  label_internal: Internal
+  label_last_changes: "поÑледни {{count}} промени"
+  label_change_view_all: Прегледај ги Ñите промени
+  label_personalize_page: Прилагоди ја Ñтранава
+  label_comment: Коментар
+  label_comment_plural: Коментари
+  label_x_comments:
+    zero: нема коментари
+    one: 1 коментар
+    other: "{{count}} коментари"
+  label_comment_add: Додади коментар
+  label_comment_added: Коментарот е додаден
+  label_comment_delete: Избриши коментари
+  label_query: Custom query
+  label_query_plural: Custom queries
+  label_query_new: New query
+  label_filter_add: Додади филтер
+  label_filter_plural: Филтри
+  label_equals: е
+  label_not_equals: не е
+  label_in_less_than: за помалку од
+  label_in_more_than: за повеќе од
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: во
+  label_today: денеÑ
+  label_all_time: цело време
+  label_yesterday: вчера
+  label_this_week: оваа недела
+  label_last_week: минатата недела
+  label_last_n_days: "поÑледните {{count}} дена"
+  label_this_month: овој меÑец
+  label_last_month: минатиот меÑец
+  label_this_year: оваа година
+  label_date_range: Date range
+  label_less_than_ago: пред помалку од денови
+  label_more_than_ago: пред повеќе од денови
+  label_ago: пред денови
+  label_contains: Ñодржи
+  label_not_contains: не Ñодржи
+  label_day_plural: денови
+  label_repository: Складиште
+  label_repository_plural: Складишта
+  label_browse: ПрелиÑтувај
+  label_modification: "{{count}} промени"
+  label_modification_plural: "{{count}} промени"
+  label_branch: Гранка
+  label_tag: Tag
+  label_revision: Ревизија
+  label_revision_plural: Ревизии
+  label_revision_id: "Ревизија {{value}}"
+  label_associated_revisions: Associated revisions
+  label_added: added
+  label_modified: modified
+  label_copied: copied
+  label_renamed: renamed
+  label_deleted: deleted
+  label_latest_revision: ПоÑледна ревизија
+  label_latest_revision_plural: ПоÑледни ревизии
+  label_view_revisions: Прегледај ги ревизиите
+  label_view_all_revisions: Прегледај ги Ñите ревизии
+  label_max_size: МакÑ. големина
+  label_sort_highest: ПремеÑти најгоре
+  label_sort_higher: ПремеÑти нагоре
+  label_sort_lower: ПремеÑти надоле
+  label_sort_lowest: ПремеÑти најдоле
+  label_roadmap: Roadmap
+  label_roadmap_due_in: "Due in {{value}}"
+  label_roadmap_overdue: "КаÑни {{value}}"
+  label_roadmap_no_issues: Ðема задачи за оваа верзија
+  label_search: Барај
+  label_result_plural: Резултати
+  label_all_words: Сите зборови
+  label_wiki: Вики
+  label_wiki_edit: Вики уредување
+  label_wiki_edit_plural: Вики уредувања
+  label_wiki_page: Вики Ñтраница
+  label_wiki_page_plural: Вики Ñтраници
+  label_index_by_title: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ наÑлов
+  label_index_by_date: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ дата
+  label_current_version: Current version
+  label_preview: Preview
+  label_feed_plural: Feeds
+  label_changes_details: Детали за Ñите промени
+  label_issue_tracking: Следење на задачи
+  label_spent_time: Потрошено време
+  label_overall_spent_time: Вкупно потрошено време
+  label_f_hour: "{{value}} чаÑ"
+  label_f_hour_plural: "{{value}} чаÑа"
+  label_time_tracking: Следење на време
+  label_change_plural: Промени
+  label_statistics: СтатиÑтики
+  label_commits_per_month: Commits per month
+  label_commits_per_author: Commits per author
+  label_view_diff: View differences
+  label_diff_inline: inline
+  label_diff_side_by_side: side by side
+  label_options: Опции
+  label_copy_workflow_from: Copy workflow from
+  label_permissions_report: Permissions report
+  label_watched_issues: Watched issues
+  label_related_issues: Поврзани задачи
+  label_applied_status: Applied status
+  label_loading: Loading...
+  label_relation_new: Ðова релација
+  label_relation_delete: Избриши релација
+  label_relates_to: related to
+  label_duplicates: дупликати
+  label_duplicated_by: duplicated by
+  label_blocks: blocks
+  label_blocked_by: блокирано од
+  label_precedes: претходи
+  label_follows: Ñледи
+  label_end_to_start: крај до почеток
+  label_end_to_end: крај до крај
+  label_start_to_start: почеток до почеток
+  label_start_to_end: почеток до крај
+  label_stay_logged_in: ОÑтанете најавени
+  label_disabled: disabled
+  label_show_completed_versions: Show completed versions
+  label_me: јаÑ
+  label_board: Форум
+  label_board_new: Ðов форум
+  label_board_plural: Форуми
+  label_board_locked: Заклучен
+  label_board_sticky: Sticky
+  label_topic_plural: Теми
+  label_message_plural: Пораки
+  label_message_last: ПоÑледна порака
+  label_message_new: Ðова порака
+  label_message_posted: Поракате е додадена
+  label_reply_plural: Одговори
+  label_send_information: ИÑпрати ги информациите за профилот на кориÑникот
+  label_year: Година
+  label_month: МеÑец
+  label_week: Ðедела
+  label_date_from: Од
+  label_date_to: До
+  label_language_based: Според јазикот на кориÑникот
+  label_sort_by: "Подреди Ñпоред {{value}}"
+  label_send_test_email: ИÑпрати теÑÑ‚ е-порака
+  label_feeds_access_key: RSS клуч за приÑтап
+  label_missing_feeds_access_key: ÐедоÑтика RSS клуч за приÑтап
+  label_feeds_access_key_created_on: "RSS клучот за приÑтап креиран пред {{value}}"
+  label_module_plural: Модули
+  label_added_time_by: "Додадено од {{author}} пред {{age}}"
+  label_updated_time_by: "Ðжурирано од {{author}} пред {{age}}"
+  label_updated_time: "Ðжурирано пред {{value}}"
+  label_jump_to_a_project: Префрли Ñе на проект...
+  label_file_plural: Датотеки
+  label_changeset_plural: Changesets
+  label_default_columns: ОÑновни колони
+  label_no_change_option: (Без промена)
+  label_bulk_edit_selected_issues: Групно уредување на задачи
+  label_theme: Тема
+  label_default: Default
+  label_search_titles_only: Пребарувај Ñамо наÑлови
+  label_user_mail_option_all: "За било кој наÑтан во Ñите мои проекти"
+  label_user_mail_option_selected: "За било кој наÑтан Ñамо во избраните проекти..."
+  label_user_mail_no_self_notified: "Ðе ме извеÑтувај за промените што Ñ˜Ð°Ñ Ð³Ð¸ правам"
+  label_registration_activation_by_email: активација на профил преку е-пошта
+  label_registration_manual_activation: мануелна активација на профил
+  label_registration_automatic_activation: автоматÑка активација на профил
+  label_display_per_page: "По Ñтрана: {{value}}"
+  label_age: Age
+  label_change_properties: Change properties
+  label_general: Општо
+  label_more: Повеќе
+  label_scm: SCM
+  label_plugins: Додатоци
+  label_ldap_authentication: LDAP автентикација
+  label_downloads_abbr: Превземања
+  label_optional_description: ÐžÐ¿Ð¸Ñ (незадолжително)
+  label_add_another_file: Додади уште една датотека
+  label_preferences: Preferences
+  label_chronological_order: Во хронолошки ред
+  label_reverse_chronological_order: In reverse chronological order
+  label_planning: Планирање
+  label_incoming_emails: Дојдовни е-пораки
+  label_generate_key: Генерирај клуч
+  label_issue_watchers: Watchers
+  label_example: Пример
+  label_display: Прикажи
+  label_sort: Подреди
+  label_ascending: РаÑтечки
+  label_descending: Опаѓачки
+  label_date_from_to: Од {{start}} до {{end}}
+  label_wiki_content_added: Вики Ñтраница додадена
+  label_wiki_content_updated: Вики Ñтраница ажурирана
+  label_group: Група
+  label_group_plural: Групи
+  label_group_new: Ðова група
+  label_time_entry_plural: Потрошено време
+  label_version_sharing_none: Ðе Ñподелено
+  label_version_sharing_descendants: Со Ñите подпроекти
+  label_version_sharing_hierarchy: Со хиерархијата на проектот
+  label_version_sharing_tree: Со дрвото на проектот
+  label_version_sharing_system: Со Ñите проекти
+  label_update_issue_done_ratios: Update issue done ratios
+  label_copy_source: Извор
+  label_copy_target: ДеÑтинација
+  label_copy_same_as_target: ИÑто како деÑтинацијата
+  label_display_used_statuses_only: Only display statuses that are used by this tracker
+  label_api_access_key: API клуч за приÑтап
+  label_missing_api_access_key: ÐедоÑтига API клуч за приÑтап
+  label_api_access_key_created_on: "API клучот за приÑтап е креиран пред {{value}}"
+  label_profile: Профил
+  label_subtask_plural: Подзадачи
+  label_project_copy_notifications: Праќај извеÑтувања по е-пошта при копирање на проект
+
+  button_login: Ðајави Ñе
+  button_submit: ИÑпрати
+  button_save: Зачувај
+  button_check_all: Штиклирај ги Ñите
+  button_uncheck_all: Одштиклирај ги Ñите
+  button_delete: Избриши
+  button_create: Креирај
+  button_create_and_continue: Креирај и продолжи
+  button_test: ТеÑÑ‚
+  button_edit: Уреди
+  button_add: Додади
+  button_change: Промени
+  button_apply: Примени
+  button_clear: Избриши
+  button_lock: Заклучи
+  button_unlock: Отклучи
+  button_download: Превземи
+  button_list: List
+  button_view: Прегледај
+  button_move: ПремеÑти
+  button_move_and_follow: ПремеÑти и Ñледи
+  button_back: Back
+  button_cancel: Откажи
+  button_activate: Ðктивирај
+  button_sort: Подреди
+  button_log_time: Бележи време
+  button_rollback: Rollback to this version
+  button_watch: Следи
+  button_unwatch: Ðе Ñледи
+  button_reply: Одговори
+  button_archive: Ðрхивирај
+  button_unarchive: Одархивирај
+  button_reset: Reset
+  button_rename: Преименувај
+  button_change_password: Промени лозинка
+  button_copy: Копирај
+  button_copy_and_follow: Копирај и Ñледи
+  button_annotate: Annotate
+  button_update: Ðжурирај
+  button_configure: Конфигурирај
+  button_quote: Цитирај
+  button_duplicate: Копирај
+  button_show: Show
+
+  status_active: активни
+  status_registered: региÑтрирани
+  status_locked: заклучени
+
+  version_status_open: отворени
+  version_status_locked: заклучени
+  version_status_closed: затворени
+
+  field_active: Active
+
+  text_select_mail_notifications: Изберете за кои наÑтани да Ñе праќаат извеÑтувања по е-пошта да Ñе праќаат.
+  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_min_max_length_info: 0 значи без ограничување
+  text_project_destroy_confirmation: Дали Ñте Ñигурни дека Ñакате да го избришете проектот и Ñите поврзани податоци?
+  text_subprojects_destroy_warning: "Ðеговите подпроекти: {{value}} иÑто така ќе бидат избришани."
+  text_workflow_edit: Select a role and a tracker to edit the workflow
+  text_are_you_sure: Дали Ñте Ñигурни?
+  text_journal_changed: "{{label}} променето од {{old}} во {{new}}"
+  text_journal_set_to: "{{label}} set to {{value}}"
+  text_journal_deleted: "{{label}} избришан ({{old}})"
+  text_journal_added: "{{label}} {{value}} додаден"
+  text_tip_issue_begin_day: задачи што почнуваат овој ден
+  text_tip_issue_end_day: задачи што завршуваат овој ден
+  text_tip_issue_begin_end_day: задачи што почнуваат и завршуваат овој ден
+  text_project_identifier_info: 'Само мали букви (a-z), бројки и dashes Ñе дозволени<br />По зачувувањето, идентификаторот неможе да Ñе Ñмени.'
+  text_caracters_maximum: "{{count}} знаци макÑимум."
+  text_caracters_minimum: "Мора да е најмалку {{count}} знаци долго."
+  text_length_between: "Должина помеѓу {{min}} и {{max}} знаци."
+  text_tracker_no_workflow: No workflow defined for this tracker
+  text_unallowed_characters: Ðедозволени знаци
+  text_comma_separated: Дозволени Ñе повеќе вредноÑти (разделени Ñо запирка).
+  text_line_separated: Дозволени Ñе повеќе вредноÑти (една линија за Ñекоја вредноÑÑ‚).
+  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
+  text_issue_added: "Задачата {{id}} е пријавена од {{author}}."
+  text_issue_updated: "Задачата {{id}} е ажурирана од {{author}}."
+  text_wiki_destroy_confirmation: Дали Ñте Ñигурни дека Ñакате да го избришете ова вики и целата негова Ñодржина?
+  text_issue_category_destroy_question: "Ðекои задачи ({{count}}) Ñе доделени на оваа категорија. Што Ñакате да правите?"
+  text_issue_category_destroy_assignments: Remove category assignments
+  text_issue_category_reassign_to: Додели ги задачите на оваа категорија
+  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
+  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
+  text_load_default_configuration: Load the default configuration
+  text_status_changed_by_changeset: "Applied in changeset {{value}}."
+  text_issues_destroy_confirmation: 'Дали Ñте Ñигурни дека Ñакате да ги избришете избраните задачи?'
+  text_select_project_modules: 'Изберете модули за овој проект:'
+  text_default_administrator_account_changed: Default administrator account changed
+  text_file_repository_writable: Во папката за прилози може да Ñе запишува
+  text_plugin_assets_writable: Во папката за додатоци може да Ñе запишува
+  text_rmagick_available: RMagick available (незадолжително)
+  text_destroy_time_entries_question: "{{hours}} hours were reported on the issues you are about to delete. What do you want to do ?"
+  text_destroy_time_entries: Delete reported hours
+  text_assign_time_entries_to_project: Додели ги пријавените чаÑови на проектот
+  text_reassign_time_entries: 'Reassign reported hours to this issue:'
+  text_user_wrote: "{{value}} напиша:"
+  text_enumeration_destroy_question: "{{count}} objects are assigned to this value."
+  text_enumeration_category_reassign_to: 'Reassign them to this value:'
+  text_email_delivery_not_configured: "ДоÑтавата по е-пошта не е конфигурирана, и извеÑтувањата Ñе оневозможени.\nКонфигурирајте го Вашиот  SMTP Ñервер во config/email.yml и реÑтартирајте ја апликацијата."
+  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
+  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
+  text_custom_field_possible_values_info: 'One line for each value'
+  text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?"
+  text_wiki_page_nullify_children: "Keep child pages as root pages"
+  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
+  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
+  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
+  text_zoom_in: Zoom in
+  text_zoom_out: Zoom out
+
+  default_role_manager: Менаџер
+  default_role_developer: Developer
+  default_role_reporter: Reporter
+  default_tracker_bug: Грешка
+  default_tracker_feature: ФункционалноÑÑ‚
+  default_tracker_support: Поддршка
+  default_issue_status_new: Ðова
+  default_issue_status_in_progress: Во прогреÑ
+  default_issue_status_resolved: Разрешена
+  default_issue_status_feedback: Feedback
+  default_issue_status_closed: Затворена
+  default_issue_status_rejected: Одбиена
+  default_doc_category_user: КориÑничка документација
+  default_doc_category_tech: Техничка документација
+  default_priority_low: Ðизок
+  default_priority_normal: Ðормален
+  default_priority_high: ВиÑок
+  default_priority_urgent: Итно
+  default_priority_immediate: Веднаш
+  default_activity_design: Дизајн
+  default_activity_development: Развој
+
+  enumeration_issue_priorities: Приоритети на задача
+  enumeration_doc_categories: Категории на документ
+  enumeration_activities: ÐктивноÑти (Ñледење на време)
+  enumeration_system_activity: СиÑтемÑка активноÑÑ‚
+
+  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/mn.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/mn.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -184,10 +184,10 @@
   mail_body_account_activation_request: "Ð¨Ð¸Ð½Ñ Ñ…ÑÑ€ÑглÑгч ({{value}}) бүртгүүлÑÑн байна. Таны баталгаажуулахыг хүлÑÑж байна:"
   mail_subject_reminder: "Дараагийн өдрүүдÑд {{count}} аÑуудлыг шийдÑÑ… Ñ…ÑÑ€ÑгтÑй ({{days}})"
   mail_body_reminder: "Танд оноогдÑон {{count}} аÑуудлуудыг дараагийн {{days}} өдрүүдÑд шийдÑÑ… Ñ…ÑÑ€ÑгтÑй:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}."
   
   gui_validation_error: 1 алдаа
   gui_validation_error_plural: "{{count}} алдаа"
@@ -252,7 +252,6 @@
   field_attr_lastname: Овог аттрибут
   field_attr_mail: ИмÑйл аттрибут
   field_onthefly: Ð¥Ò¯ÑÑÑн үедÑÑ Ñ…ÑÑ€ÑглÑгч Ò¯Ò¯ÑгÑÑ…
-  field_start_date: ЭхлÑл
   field_done_ratio: %% ГүйцÑтгÑÑÑн
   field_auth_source: ÐÑвтрÑÑ… арга
   field_hide_mail: Миний имÑйл хаÑгийг нуу
@@ -707,7 +706,6 @@
   label_search_titles_only: Зөвхөн гарчиг хайх
   label_user_mail_option_all: "Миний бүх төÑөл дÑÑрх бүх үзÑгдлүүдийн хувьд"
   label_user_mail_option_selected: "СонгогдÑон төÑлүүдийн хувьд бүх үзÑгдÑл дÑÑÑ€..."
-  label_user_mail_option_none: "Зөвхөн миний ажиглаж байгаа Ð·Ò¯Ð¹Ð»Ñ ÑŽÐ¼ÑƒÑƒ надад хамаатай бол"
   label_user_mail_no_self_notified: "Миний өөрийн хийÑÑн өөрчлөлтүүдийн тухай надад мÑдÑгдÑÑ… Ñ…ÑÑ€Ñггүй"
   label_registration_activation_by_email: данÑыг имÑйлÑÑÑ€ идÑвхжүүлÑÑ…
   label_registration_manual_activation: данÑыг гараар идÑвхжүүлÑÑ…
@@ -821,9 +819,9 @@
   text_journal_set_to: "{{label}} {{value}} болгож өөрчиллөө"
   text_journal_deleted: "{{label}} уÑÑ‚Ñан ({{old}})"
   text_journal_added: "{{label}} {{value}} нÑмÑгдÑÑн"
-  text_tip_task_begin_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑ… ажил
-  text_tip_task_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ дууÑах ажил
-  text_tip_task_begin_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑд мөн дууÑч байгаа ажил
+  text_tip_issue_begin_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑ… ажил
+  text_tip_issue_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ дууÑах ажил
+  text_tip_issue_begin_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑд мөн дууÑч байгаа ажил
   text_project_identifier_info: 'Зөвхөн жижиг Ò¯Ñгүүд болон (a-z), тоо and дундуур Ð·ÑƒÑ€Ð°Ð°Ñ Ð°ÑˆÐ¸Ð³Ð»Ð°Ð¶ болно.<br />ÐÑгÑнт хадгалÑан хойно, төÑлийн глобал нÑрийг өөрлчөх боломжгүй.'
   text_caracters_maximum: "дÑÑд тал нь {{count}} Ò¯ÑÑг."
   text_caracters_minimum: "Хамгийн багадаа Ñдаж {{count}} Ñ‚ÑмдÑгт байх."
@@ -914,8 +912,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/nl.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/nl.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -256,7 +256,6 @@
   field_role: Rol
   field_searchable: Doorzoekbaar
   field_spent_on: Datum
-  field_start_date: Startdatum
   field_start_page: Startpagina
   field_status: Status
   field_subject: Onderwerp
@@ -579,7 +578,6 @@
   label_user_activity: "{{value}}'s activiteit"
   label_user_mail_no_self_notified: "Ik wil niet op de hoogte gehouden worden van wijzigingen die ik zelf maak."
   label_user_mail_option_all: "Bij elk gebeurtenis in al mijn projecten..."
-  label_user_mail_option_none: "Alleen in de dingen die ik monitor of in betrokken ben"
   label_user_mail_option_selected: "Enkel bij elke gebeurtenis op het geselecteerde project..."
   label_user_new: Nieuwe gebruiker
   label_user_plural: Gebruikers
@@ -765,9 +763,9 @@
   text_select_project_modules: 'Selecteer de modules die u wilt gebruiken voor dit project:'
   text_status_changed_by_changeset: "Toegepast in changeset {{value}}."
   text_subprojects_destroy_warning: "De subprojecten: {{value}} zullen ook verwijderd worden."
-  text_tip_task_begin_day: taak die op deze dag begint
-  text_tip_task_begin_end_day: taak die op deze dag begint en eindigt
-  text_tip_task_end_day: taak die op deze dag eindigt
+  text_tip_issue_begin_day: issue die op deze dag begint
+  text_tip_issue_begin_end_day: issue die op deze dag begint en eindigt
+  text_tip_issue_end_day: issue die op deze dag eindigt
   text_tracker_no_workflow: Geen workflow gedefinieerd voor deze tracker
   text_unallowed_characters: Niet toegestane tekens
   text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel notificaties ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)."
@@ -798,12 +796,12 @@
   text_wiki_page_destroy_children: Verwijder alle subpagina's en onderliggende pagina's
   setting_password_min_length: Minimum wachtwoord lengte
   field_group_by: Groepeer resultaten per
-  mail_subject_wiki_content_updated: "'{{page}}' wiki pagina is bijgewerkt"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki pagina is bijgewerkt"
   label_wiki_content_added: Wiki pagina toegevoegd
-  mail_subject_wiki_content_added: "'{{page}}' wiki pagina is toegevoegd"
-  mail_body_wiki_content_added: The '{{page}}' wiki pagina is toegevoegd door {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki pagina is toegevoegd"
+  mail_body_wiki_content_added: The '{{id}}' wiki pagina is toegevoegd door {{author}}.
   label_wiki_content_updated: Wiki pagina bijgewerkt
-  mail_body_wiki_content_updated: The '{{page}}' wiki pagina is bijgewerkt door {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki pagina is bijgewerkt door {{author}}.
   permission_add_project: Maak project
   setting_new_project_user_role_id: Rol van gebruiker die een project maakt
   label_view_all_revisions: Bekijk alle revisies
@@ -895,8 +893,19 @@
   field_time_entries: Log tijd
   project_module_gantt: Gantt
   project_module_calendar: Kalender
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/no.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/no.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -231,7 +231,6 @@
   field_attr_lastname: Etternavnsattributt
   field_attr_mail: E-post-attributt
   field_onthefly: On-the-fly brukeropprettelse
-  field_start_date: Start
   field_done_ratio: % Ferdig
   field_auth_source: Autentifikasjonsmodus
   field_hide_mail: Skjul min e-post-adresse
@@ -584,7 +583,6 @@
   label_search_titles_only: Søk bare i titler
   label_user_mail_option_all: "For alle hendelser på mine prosjekter"
   label_user_mail_option_selected: "For alle hendelser på valgte prosjekt..."
-  label_user_mail_option_none: "Bare for ting jeg overvåker eller er involvert i"
   label_user_mail_no_self_notified: "Jeg vil ikke bli varslet om endringer jeg selv gjør"
   label_registration_activation_by_email: kontoaktivering pr. e-post
   label_registration_manual_activation: manuell kontoaktivering
@@ -654,9 +652,9 @@
   text_subprojects_destroy_warning: "Underprojekt(ene): {{value}} vil også bli slettet."
   text_workflow_edit: Velg en rolle og en sakstype for å endre arbeidsflyten
   text_are_you_sure: Er du sikker ?
-  text_tip_task_begin_day: oppgaven starter denne dagen
-  text_tip_task_end_day: oppgaven avsluttes denne dagen
-  text_tip_task_begin_end_day: oppgaven starter og avsluttes denne dagen
+  text_tip_issue_begin_day: oppgaven starter denne dagen
+  text_tip_issue_end_day: oppgaven avsluttes denne dagen
+  text_tip_issue_begin_end_day: oppgaven starter og avsluttes denne dagen
   text_project_identifier_info: 'Små bokstaver (a-z), nummer og bindestrek tillatt.<br />Identifikatoren kan ikke endres etter den er lagret.'
   text_caracters_maximum: "{{count}} tegn maksimum."
   text_caracters_minimum: "Må være minst {{count}} tegn langt."
@@ -807,12 +805,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -904,8 +902,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/pl.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/pl.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -277,7 +277,6 @@
   field_role: Rola
   field_searchable: Przeszukiwalne
   field_spent_on: Data
-  field_start_date: Start
   field_start_page: Strona startowa
   field_status: Status
   field_subject: Temat
@@ -614,7 +613,6 @@
   label_user: Użytkownik
   label_user_mail_no_self_notified: "Nie chcę powiadomień o zmianach, które sam wprowadzam."
   label_user_mail_option_all: "Dla każdego zdarzenia w każdym moim projekcie"
-  label_user_mail_option_none: "Tylko to co obserwuje lub w czym biorę udział"
   label_user_mail_option_selected: "Tylko dla każdego zdarzenia w wybranych projektach..."
   label_user_new: Nowy użytkownik
   label_user_plural: Użytkownicy
@@ -797,9 +795,9 @@
   text_select_project_modules: 'Wybierz moduły do aktywacji w tym projekcie:'
   text_status_changed_by_changeset: "Zastosowane w zmianach {{value}}."
   text_subprojects_destroy_warning: "Podprojekt(y): {{value}} zostaną także usunięte."
-  text_tip_task_begin_day: zadanie zaczynajÄ…ce siÄ™ dzisiaj
-  text_tip_task_begin_end_day: zadanie zaczynające i kończące się dzisiaj
-  text_tip_task_end_day: zadanie kończące się dzisiaj
+  text_tip_issue_begin_day: zadanie zaczynajÄ…ce siÄ™ dzisiaj
+  text_tip_issue_begin_end_day: zadanie zaczynające i kończące się dzisiaj
+  text_tip_issue_end_day: zadanie kończące się dzisiaj
   text_tracker_no_workflow: Brak przepływu zdefiniowanego dla tego typu zagadnienia
   text_unallowed_characters: Niedozwolone znaki
   text_user_mail_option: "W przypadku niezaznaczonych projektów, będziesz otrzymywał powiadomienia tylko na temat zagadnień, które obserwujesz, lub w których bierzesz udział (np. jesteś autorem lub adresatem)."
@@ -836,12 +834,12 @@
   text_wiki_page_destroy_children: Usuń wszystkie podstrony
   setting_password_min_length: Minimalna długość hasła
   field_group_by: Grupuj wyniki wg
-  mail_subject_wiki_content_updated: "Strona wiki '{{page}}' została uaktualniona"
+  mail_subject_wiki_content_updated: "Strona wiki '{{id}}' została uaktualniona"
   label_wiki_content_added: Dodano stronÄ™ wiki
-  mail_subject_wiki_content_added: "Strona wiki '{{page}}' została dodana"
-  mail_body_wiki_content_added: Strona wiki '{{page}}' została dodana przez {{author}}.
+  mail_subject_wiki_content_added: "Strona wiki '{{id}}' została dodana"
+  mail_body_wiki_content_added: Strona wiki '{{id}}' została dodana przez {{author}}.
   label_wiki_content_updated: Uaktualniono stronÄ™ wiki
-  mail_body_wiki_content_updated: Strona wiki '{{page}}' została uaktualniona przez {{author}}.
+  mail_body_wiki_content_updated: Strona wiki '{{id}}' została uaktualniona przez {{author}}.
   permission_add_project: Tworzenie projektu
   setting_new_project_user_role_id: Rola nadawana twórcom projektów, którzy nie posiadają uprawnień administatora
   label_view_all_revisions: Pokaż wszystkie rewizje
@@ -934,8 +932,19 @@
   field_time_entries: Dziennik
   project_module_gantt: Diagram Gantta
   project_module_calendar: Kalendarz
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/pt-BR.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/pt-BR.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -264,7 +264,6 @@
   field_attr_lastname: Atributo para sobrenome
   field_attr_mail: Atributo para e-mail
   field_onthefly: Criar usuários dinamicamente ("on-the-fly")
-  field_start_date: Início
   field_done_ratio: % Terminado
   field_auth_source: Modo de autenticação
   field_hide_mail: Ocultar meu e-mail
@@ -622,7 +621,6 @@
   label_search_titles_only: Pesquisar somente títulos
   label_user_mail_option_all: "Para qualquer evento em todos os meus projetos"
   label_user_mail_option_selected: "Para qualquer evento somente no(s) projeto(s) selecionado(s)..."
-  label_user_mail_option_none: "Somente tarefas que eu acompanho ou estou envolvido"
   label_user_mail_no_self_notified: "Eu não quero ser notificado de minhas próprias modificações"
   label_registration_activation_by_email: ativação de conta por e-mail
   label_registration_manual_activation: ativação manual de conta
@@ -696,9 +694,9 @@
   text_subprojects_destroy_warning: "Seu(s) subprojeto(s): {{value}} também serão excluídos."
   text_workflow_edit: Selecione um papel e um tipo de tarefa para editar o fluxo de trabalho
   text_are_you_sure: Você tem certeza?
-  text_tip_task_begin_day: tarefa inicia neste dia
-  text_tip_task_end_day: tarefa termina neste dia
-  text_tip_task_begin_end_day: tarefa inicia e termina neste dia
+  text_tip_issue_begin_day: tarefa inicia neste dia
+  text_tip_issue_end_day: tarefa termina neste dia
+  text_tip_issue_begin_end_day: tarefa inicia e termina neste dia
   text_project_identifier_info: 'Letras minúsculas (a-z), números e hífens permitidos.<br />Uma vez salvo, o identificador não poderá ser alterado.'
   text_caracters_maximum: "máximo {{count}} caracteres"
   text_caracters_minimum: "deve ter ao menos {{count}} caracteres."
@@ -840,12 +838,12 @@
   text_wiki_page_destroy_children: Excluir páginas filhas e todas suas descendentes
   setting_password_min_length: Comprimento mínimo para senhas
   field_group_by: Agrupar por
-  mail_subject_wiki_content_updated: "A página wiki '{{page}}' foi atualizada"
+  mail_subject_wiki_content_updated: "A página wiki '{{id}}' foi atualizada"
   label_wiki_content_added: Página wiki adicionada
-  mail_subject_wiki_content_added: "A página wiki '{{page}}' foi adicionada"
-  mail_body_wiki_content_added: A página wiki '{{page}}' foi adicionada por {{author}}.
+  mail_subject_wiki_content_added: "A página wiki '{{id}}' foi adicionada"
+  mail_body_wiki_content_added: A página wiki '{{id}}' foi adicionada por {{author}}.
   label_wiki_content_updated: Página wiki atualizada
-  mail_body_wiki_content_updated: A página wiki '{{page}}' foi atualizada por {{author}}.
+  mail_body_wiki_content_updated: A página wiki '{{id}}' foi atualizada por {{author}}.
   permission_add_project: Criar projeto
   setting_new_project_user_role_id: Papel atribuído a um usuário não-administrador que cria um projeto
   label_view_all_revisions: Ver todas as revisões
@@ -917,7 +915,7 @@
   permission_export_wiki_pages: Exportar páginas wiki
   setting_cache_formatted_text: Realizar cache de texto formatado
   permission_manage_project_activities: Gerenciar atividades do projeto
-  error_unable_delete_issue_status: Impossível excluir situação da tarefa
+  error_unable_delete_issue_status: Não foi possível excluir situação da tarefa
   label_profile: Perfil
   permission_manage_subtasks: Gerenciar subtarefas
   field_parent_issue: Tarefa pai
@@ -936,9 +934,20 @@
   label_overall_spent_time: Tempo gasto geral
   field_time_entries: Log time
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  project_module_calendar: Calendário
+  button_edit_associated_wikipage: "Editar página wiki relacionada: {{page_title}}"
+  text_are_you_sure_with_children: Excluir a tarefa e suas subtarefas?
+  field_text: Campo de texto
+  label_user_mail_option_only_owner: Somente para as coisas que eu criei
+  setting_default_notification_option: Opção padrão de notificação
+  label_user_mail_option_only_my_events: Somente para as coisas que eu esteja observando ou esteja envolvido
+  label_user_mail_option_only_assigned: Somente para as coisas que estejam atribuídas a mim
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/pt.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/pt.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -128,7 +128,7 @@
         greater_than_start_date: "deve ser maior que a data inicial"
         not_same_project: "não pertence ao mesmo projecto"
         circular_dependency: "Esta relação iria criar uma dependência circular"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "Não é possível ligar uma tarefa a uma sub-tarefa que lhe é pertencente"
 
   ## Translated by: Pedro Araújo <phcrva19@hotmail.com>
   actionview_instancetag_blank_option: Seleccione
@@ -152,7 +152,7 @@
   notice_account_unknown_email: Utilizador desconhecido.
   notice_can_t_change_password: Esta conta utiliza uma fonte de autenticação externa. Não é possível alterar a palavra-chave.
   notice_account_lost_email_sent: Foi-lhe enviado um e-mail com as instruções para escolher uma nova palavra-chave.
-  notice_account_activated: A sua conta foi activada. Já pode autenticar-se.
+  notice_account_activated: A sua conta foi activada. É agora possível autenticar-se.
   notice_successful_create: Criado com sucesso.
   notice_successful_update: Alterado com sucesso.
   notice_successful_delete: Apagado com sucesso.
@@ -176,9 +176,9 @@
   error_issue_not_found_in_project: 'A tarefa não foi encontrada ou não pertence a este projecto.'
   
   mail_subject_lost_password: "Palavra-chave de {{value}}"
-  mail_body_lost_password: 'Para mudar a sua palavra-chave, clique no link abaixo:'
+  mail_body_lost_password: 'Para mudar a sua palavra-chave, clique na ligação abaixo:'
   mail_subject_register: "Activação de conta de {{value}}"
-  mail_body_register: 'Para activar a sua conta, clique no link abaixo:'
+  mail_body_register: 'Para activar a sua conta, clique na ligação abaixo:'
   mail_body_account_information_external: "Pode utilizar a conta {{value}} para autenticar-se."
   mail_body_account_information: Informação da sua conta
   mail_subject_account_activation_request: "Pedido de activação da conta {{value}}"
@@ -224,7 +224,7 @@
   field_priority: Prioridade
   field_fixed_version: Versão
   field_user: Utilizador
-  field_role: Papel
+  field_role: Função
   field_homepage: Página
   field_is_public: Público
   field_parent: Sub-projecto de
@@ -249,7 +249,6 @@
   field_attr_lastname: Atributo último nome
   field_attr_mail: Atributo e-mail
   field_onthefly: Criação de utilizadores na hora
-  field_start_date: Início
   field_done_ratio: % Completo
   field_auth_source: Modo de autenticação
   field_hide_mail: Esconder endereço de e-mail
@@ -264,8 +263,8 @@
   field_is_filter: Usado como filtro
   field_issue_to: Tarefa relacionada
   field_delay: Atraso
-  field_assignable: As tarefas podem ser associados a este papel
-  field_redirect_existing_links: Redireccionar links existentes
+  field_assignable: As tarefas podem ser associados a esta função
+  field_redirect_existing_links: Redireccionar ligações existentes
   field_estimated_hours: Tempo estimado
   field_column_names: Colunas
   field_time_zone: Fuso horário
@@ -343,17 +342,17 @@
   label_document_new: Novo documento
   label_document_plural: Documentos
   label_document_added: Documento adicionado
-  label_role: Papel
-  label_role_plural: Papéis
-  label_role_new: Novo papel
-  label_role_and_permissions: Papéis e permissões
+  label_role: Função
+  label_role_plural: Funções
+  label_role_new: Nova função
+  label_role_and_permissions: Funções e permissões
   label_member: Membro
   label_member_new: Novo membro
   label_member_plural: Membros
   label_tracker: Tipo
   label_tracker_plural: Tipos
   label_tracker_new: Novo tipo
-  label_workflow: Workflow
+  label_workflow: Fluxo de trabalho
   label_issue_status: Estado da tarefa
   label_issue_status_plural: Estados da tarefa
   label_issue_status_new: Novo estado
@@ -553,7 +552,7 @@
   label_diff_inline: inline
   label_diff_side_by_side: lado a lado
   label_options: Opções
-  label_copy_workflow_from: Copiar workflow de
+  label_copy_workflow_from: Copiar fluxo de trabalho de
   label_permissions_report: Relatório de permissões
   label_watched_issues: Tarefas observadas
   label_related_issues: Tarefas relacionadas
@@ -609,7 +608,6 @@
   label_search_titles_only: Procurar apenas em títulos
   label_user_mail_option_all: "Para qualquer evento em todos os meus projectos"
   label_user_mail_option_selected: "Para qualquer evento apenas nos projectos seleccionados..."
-  label_user_mail_option_none: "Apenas para coisas que esteja a observar ou esteja envolvido"
   label_user_mail_no_self_notified: "Não quero ser notificado de alterações feitas por mim"
   label_registration_activation_by_email: Activação da conta por e-mail
   label_registration_manual_activation: Activação manual da conta
@@ -681,16 +679,16 @@
   text_min_max_length_info: 0 siginifica sem restrição
   text_project_destroy_confirmation: Tem a certeza que deseja apagar o projecto e todos os dados relacionados?
   text_subprojects_destroy_warning: "O(s) seu(s) sub-projecto(s): {{value}} também será/serão apagado(s)."
-  text_workflow_edit: Seleccione um papel e um tipo de tarefa para editar o workflow
+  text_workflow_edit: Seleccione uma função e um tipo de tarefa para editar o fluxo de trabalho
   text_are_you_sure: Tem a certeza?
-  text_tip_task_begin_day: tarefa a começar neste dia
-  text_tip_task_end_day: tarefa a acabar neste dia
-  text_tip_task_begin_end_day: tarefa a começar e acabar neste dia
+  text_tip_issue_begin_day: tarefa a começar neste dia
+  text_tip_issue_end_day: tarefa a acabar neste dia
+  text_tip_issue_begin_end_day: tarefa a começar e acabar neste dia
   text_project_identifier_info: 'Apenas são permitidos letras minúsculas (a-z), números e hífens.<br />Uma vez guardado, o identificador não poderá ser alterado.'
   text_caracters_maximum: "máximo {{count}} caracteres."
   text_caracters_minimum: "Deve ter pelo menos {{count}} caracteres."
   text_length_between: "Deve ter entre {{min}} e {{max}} caracteres."
-  text_tracker_no_workflow: Sem workflow definido para este tipo de tarefa.
+  text_tracker_no_workflow: Sem fluxo de trabalho definido para este tipo de tarefa.
   text_unallowed_characters: Caracteres não permitidos
   text_comma_separated: Permitidos múltiplos valores (separados por vírgula).
   text_issues_ref_in_commit_messages: Referenciando e fechando tarefas em mensagens de commit
@@ -701,7 +699,7 @@
   text_issue_category_destroy_assignments: Remover as atribuições à categoria
   text_issue_category_reassign_to: Re-atribuir as tarefas para esta categoria
   text_user_mail_option: "Para projectos não seleccionados, apenas receberá notificações acerca de coisas que está a observar ou está envolvido (ex. tarefas das quais foi o criador ou lhes foram atribuídas)."
-  text_no_configuration_data: "Papeis, tipos de tarefas, estados das tarefas e workflows ainda não foram configurados.\nÉ extremamente recomendado carregar as configurações padrão. Será capaz de as modificar depois de estarem carregadas."
+  text_no_configuration_data: "Perfis, tipos de tarefas, estados das tarefas e workflows ainda não foram configurados.\nÉ extremamente recomendado carregar as configurações padrão. Será capaz de as modificar depois de estarem carregadas."
   text_load_default_configuration: Carregar as configurações padrão
   text_status_changed_by_changeset: "Aplicado no changeset {{value}}."
   text_issues_destroy_confirmation: 'Tem a certeza que deseja apagar a(s) tarefa(s) seleccionada(s)?'
@@ -725,7 +723,7 @@
   default_tracker_feature: Funcionalidade
   default_tracker_support: Suporte
   default_issue_status_new: Novo
-  default_issue_status_in_progress: In Progress
+  default_issue_status_in_progress: Em curso
   default_issue_status_resolved: Resolvido
   default_issue_status_feedback: Feedback
   default_issue_status_closed: Fechado
@@ -790,7 +788,7 @@
   permission_rename_wiki_pages: Renomear páginas de wiki
   permission_edit_time_entries: Editar entradas de tempo
   permission_edit_own_issue_notes: Editar as prórpias notas
-  setting_gravatar_enabled: Utilizar icons Gravatar
+  setting_gravatar_enabled: Utilizar ícones Gravatar
   label_example: Exemplo
   text_repository_usernames_mapping: "Seleccionar ou actualizar o utilizador de Redmine mapeado a cada nome de utilizador encontrado no repositório.\nUtilizadores com o mesmo nome de utilizador ou email no Redmine e no repositório são mapeados automaticamente."
   permission_edit_own_messages: Editar as próprias mensagens
@@ -799,130 +797,141 @@
   label_updated_time_by: "Actualizado por {{author}} há {{age}}"
   text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser mostrado.'
   setting_diff_max_lines_displayed: Número máximo de linhas de diff mostradas
-  text_plugin_assets_writable: Plugin assets directory writable
-  warning_attachments_not_saved: "{{count}} file(s) could not be saved."
-  button_create_and_continue: Create and continue
-  text_custom_field_possible_values_info: 'One line for each value'
-  label_display: Display
-  field_editable: Editable
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  field_watcher: Watcher
-  setting_openid: Allow OpenID login and registration
-  field_identity_url: OpenID URL
-  label_login_with_open_id_option: or login with OpenID
-  field_content: Content
-  label_descending: Descending
-  label_sort: Sort
-  label_ascending: Ascending
-  label_date_from_to: From {{start}} to {{end}}
+  text_plugin_assets_writable: Escrita na pasta de activos dos módulos de extensão possível
+  warning_attachments_not_saved: "Não foi possível gravar {{count}} ficheiro(s) ."
+  button_create_and_continue: Criar e continuar
+  text_custom_field_possible_values_info: 'Uma linha para cada valor'
+  label_display: Mostrar
+  field_editable: Editável
+  setting_repository_log_display_limit: Número máximo de revisões exibido no relatório de ficheiro
+  setting_file_max_size_displayed: Tamanho máximo dos ficheiros de texto exibidos inline
+  field_watcher: Observador
+  setting_openid: Permitir início de sessão e registo com OpenID
+  field_identity_url: URL do OpenID
+  label_login_with_open_id_option: ou início de sessão com OpenID
+  field_content: Conteúdo
+  label_descending: Descendente
+  label_sort: Ordenar
+  label_ascending: Ascendente
+  label_date_from_to: De {{start}} a {{end}}
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do?
-  text_wiki_page_reassign_children: Reassign child pages to this parent page
-  text_wiki_page_nullify_children: Keep child pages as root pages
-  text_wiki_page_destroy_children: Delete child pages and all their descendants
-  setting_password_min_length: Minimum password length
-  field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
-  label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
-  permission_add_project: Create project
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  label_view_all_revisions: View all revisions
-  label_tag: Tag
-  label_branch: Branch
-  error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
-  error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
-  label_group_plural: Groups
-  label_group: Group
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
-  text_journal_set_to: "{{label}} set to {{value}}"
-  text_journal_deleted: "{{label}} deleted ({{old}})"
-  text_journal_added: "{{label}} {{value}} added"
-  field_active: Active
-  enumeration_system_activity: System Activity
-  permission_delete_issue_watchers: Delete watchers
-  version_status_closed: closed
-  version_status_locked: locked
-  version_status_open: open
-  error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
-  label_user_anonymous: Anonymous
-  button_move_and_follow: Move and follow
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_gravatar_default: Default Gravatar image
-  field_sharing: Sharing
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_system: With all projects
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_tree: With project tree
-  label_version_sharing_none: Not shared
-  error_can_not_archive_project: This project can not be archived
-  button_duplicate: Duplicate
-  button_copy_and_follow: Copy and follow
-  label_copy_source: Source
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_status: Use the issue status
-  error_issue_done_ratios_not_updated: Issue done ratios not updated.
-  error_workflow_copy_target: Please select target tracker(s) and role(s)
-  setting_issue_done_ratio_issue_field: Use the issue field
-  label_copy_same_as_target: Same as target
-  label_copy_target: Target
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  error_workflow_copy_source: Please select a source tracker or role
-  label_update_issue_done_ratios: Update issue done ratios
-  setting_start_of_week: Start calendars on
-  permission_view_issues: View Issues
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_revision_id: Revision {{value}}
-  label_api_access_key: API access key
-  label_api_access_key_created_on: API access key created {{value}} ago
-  label_feeds_access_key: RSS access key
-  notice_api_access_key_reseted: Your API access key was reset.
-  setting_rest_api_enabled: Enable REST web service
-  label_missing_api_access_key: Missing an API access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  button_show: Show
-  text_line_separated: Multiple values allowed (one line for each value).
-  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
-  permission_add_subprojects: Create subprojects
-  label_subproject_new: New subproject
+  text_wiki_page_destroy_question: Esta página tem {{descendants}} página(s) subordinada(s) e descendente(s). O que deseja fazer?
+  text_wiki_page_reassign_children: Reatribuir páginas subordinadas a esta página principal
+  text_wiki_page_nullify_children: Manter páginas subordinadas como páginas raíz
+  text_wiki_page_destroy_children: Apagar as páginas subordinadas e todos os seus descendentes
+  setting_password_min_length: Tamanho mínimo de palavra-chave
+  field_group_by: Agrupar resultados por
+  mail_subject_wiki_content_updated: "A página Wiki '{{id}}' foi actualizada"
+  label_wiki_content_added: Página Wiki adicionada
+  mail_subject_wiki_content_added: "A página Wiki '{{id}}' foi adicionada"
+  mail_body_wiki_content_added: A página Wiki '{{id}}' foi adicionada por {{author}}.
+  label_wiki_content_updated: Página Wiki actualizada
+  mail_body_wiki_content_updated: A página Wiki '{{id}}' foi actualizada por {{author}}.
+  permission_add_project: Criar projecto
+  setting_new_project_user_role_id: Função atribuída a um utilizador não-administrador que cria um projecto
+  label_view_all_revisions: Ver todas as revisões
+  label_tag: Etiqueta
+  label_branch: Ramo
+  error_no_tracker_in_project: Este projecto não tem associado nenhum tipo de tarefas. Verifique as definições do projecto.
+  error_no_default_issue_status: Não está definido um estado padrão para as tarefas. Verifique a sua configuração (dirija-se a "Administração -> Estados da tarefa").
+  label_group_plural: Grupos
+  label_group: Grupo
+  label_group_new: Novo grupo
+  label_time_entry_plural: Tempo registado
+  text_journal_changed: "{{label}} alterado de {{old}} para {{new}}"
+  text_journal_set_to: "{{label}} configurado como {{value}}"
+  text_journal_deleted: "{{label}} apagou ({{old}})"
+  text_journal_added: "{{label}} {{value}} adicionado"
+  field_active: Activo
+  enumeration_system_activity: Actividade de sistema
+  permission_delete_issue_watchers: Apagar observadores
+  version_status_closed: fechado
+  version_status_locked: protegido
+  version_status_open: aberto
+  error_can_not_reopen_issue_on_closed_version: Não é possível voltar a abrir uma tarefa atribuída a uma versão fechada
+  label_user_anonymous: Anónimo
+  button_move_and_follow: Mover e seguir
+  setting_default_projects_modules: Módulos activos por predefinição para novos projectos
+  setting_gravatar_default: Imagem Gravatar predefinida
+  field_sharing: Partilha
+  label_version_sharing_hierarchy: Com hierarquia do projecto
+  label_version_sharing_system: Com todos os projectos
+  label_version_sharing_descendants: Com os sub-projectos
+  label_version_sharing_tree: Com árvore do projecto
+  label_version_sharing_none: Não partilhado
+  error_can_not_archive_project: Não é possível arquivar este projecto
+  button_duplicate: Duplicar
+  button_copy_and_follow: Copiar e seguir
+  label_copy_source: Origem
+  setting_issue_done_ratio: Calcular a percentagem de progresso da tarefa 
+  setting_issue_done_ratio_issue_status: Através do estado da tarefa
+  error_issue_done_ratios_not_updated: Percentagens de progresso da tarefa não foram actualizadas.
+  error_workflow_copy_target: Seleccione os tipos de tarefas e funções desejadas
+  setting_issue_done_ratio_issue_field: Através do campo da tarefa
+  label_copy_same_as_target: Mesmo que o alvo
+  label_copy_target: Alvo
+  notice_issue_done_ratios_updated: Percentagens de progresso da tarefa actualizadas.
+  error_workflow_copy_source: Seleccione um tipo de tarefa ou função de origem
+  label_update_issue_done_ratios: Actualizar percentagens de progresso da tarefa
+  setting_start_of_week: Iniciar calendários a
+  permission_view_issues: Ver tarefas
+  label_display_used_statuses_only: Só exibir estados empregues por este tipo de tarefa
+  label_revision_id: Revisão {{value}}
+  label_api_access_key: Chave de acesso API
+  label_api_access_key_created_on: Chave de acesso API criada há {{value}}
+  label_feeds_access_key: Chave de acesso RSS
+  notice_api_access_key_reseted: A sua chave de acesso API foi reinicializada.
+  setting_rest_api_enabled: Activar serviço Web REST
+  label_missing_api_access_key: Chave de acesso API em falta
+  label_missing_feeds_access_key: Chave de acesso RSS em falta
+  button_show: Mostrar
+  text_line_separated: Vários valores permitidos (uma linha para cada valor).
+  setting_mail_handler_body_delimiters: Truncar mensagens de correio electrónico após uma destas linhas
+  permission_add_subprojects: Criar sub-projectos
+  label_subproject_new: Novo sub-projecto
   text_own_membership_delete_confirmation: |-
-    You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
-    Are you sure you want to continue?
-  label_close_versions: Close completed versions
-  label_board_sticky: Sticky
-  label_board_locked: Locked
-  permission_export_wiki_pages: Export wiki pages
-  setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Manage project activities
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_profile: Profile
-  permission_manage_subtasks: Manage subtasks
-  field_parent_issue: Parent task
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect ({{value}})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
+    Está prestes a eliminar parcial ou totalmente as suas permissões. É possível que não possa editar o projecto após esta acção.
+    Tem a certeza de que deseja continuar?
+  label_close_versions: Fechar versões completas
+  label_board_sticky: Fixar mensagem
+  label_board_locked: Proteger
+  permission_export_wiki_pages: Exportar páginas Wiki
+  setting_cache_formatted_text: Colocar formatação do texto na memória cache
+  permission_manage_project_activities: Gerir actividades do projecto
+  error_unable_delete_issue_status: Não foi possível apagar o estado da tarefa
+  label_profile: Perfil
+  permission_manage_subtasks: Gerir sub-tarefas
+  field_parent_issue: Tarefa principal
+  label_subtask_plural: Sub-tarefa
+  label_project_copy_notifications: Enviar notificações por e-mail durante a cópia do projecto
+  error_can_not_delete_custom_field: Não foi possível apagar o campo personalizado
+  error_unable_to_connect: Não foi possível ligar ({{value}})
+  error_can_not_remove_role: Esta função está actualmente em uso e não pode ser apagada.
+  error_can_not_delete_tracker: Existem ainda tarefas nesta categoria. Não é possível apagar este tipo de tarefa.
   field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
+  label_my_page_block: Bloco da minha página
+  notice_failed_to_save_members: "Erro ao guardar o(s) membro(s): {{errors}}."
+  text_zoom_out: Ampliar
+  text_zoom_in: Reduzir
+  notice_unable_delete_time_entry: Não foi possível apagar a entrada de tempo registado.
+  label_overall_spent_time: Total de tempo registado
+  field_time_entries: Tempo registado
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
+  project_module_calendar: Calendário
+  button_edit_associated_wikipage: "Editar página Wiki associada: {{page_title}}"
+  text_are_you_sure_with_children: Apagar tarefa e todas as sub-tarefas?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/ro.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/ro.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -232,7 +232,6 @@
   field_attr_lastname: Atribut nume
   field_attr_mail: Atribut email
   field_onthefly: Creare utilizator pe loc
-  field_start_date: Data începerii
   field_done_ratio: Realizat (%)
   field_auth_source: Mod autentificare
   field_hide_mail: Nu se afișează adresa de email
@@ -654,7 +653,6 @@
   label_search_titles_only: Caută numai în titluri
   label_user_mail_option_all: "Pentru orice eveniment, în toate proiectele mele"
   label_user_mail_option_selected: " Pentru orice eveniment, în proiectele selectate..."
-  label_user_mail_option_none: "Doar cele urmărite sau cele în care sunt implicat"
   label_user_mail_no_self_notified: "Nu trimite notificări pentru modificările mele"
   label_registration_activation_by_email: activare cont prin email
   label_registration_manual_activation: activare manuală a contului
@@ -737,9 +735,9 @@
   text_subprojects_destroy_warning: "Se vor șterge și sub-proiectele: {{value}}."
   text_workflow_edit: Selectați un rol și un tip de tichet pentru a edita modul de lucru
   text_are_you_sure: Sunteți sigur(ă)?
-  text_tip_task_begin_day: sarcină care începe în această zi
-  text_tip_task_end_day: sarcină care se termină în această zi
-  text_tip_task_begin_end_day: sarcină care începe și se termină în această zi
+  text_tip_issue_begin_day: sarcină care începe în această zi
+  text_tip_issue_end_day: sarcină care se termină în această zi
+  text_tip_issue_begin_end_day: sarcină care începe și se termină în această zi
   text_project_identifier_info: 'Sunt permise doar litere mici (a-z), numere și cratime.<br />Odată salvat, identificatorul nu mai poate fi modificat.'
   text_caracters_maximum: "maxim {{count}} caractere."
   text_caracters_minimum: "Trebuie să fie minim {{count}} caractere."
@@ -809,12 +807,12 @@
   text_wiki_page_destroy_children: Șterge paginile și descendenții
   setting_password_min_length: Lungime minimă parolă
   field_group_by: Grupează după
-  mail_subject_wiki_content_updated: "Pagina wiki '{{page}}' a fost actualizată"
+  mail_subject_wiki_content_updated: "Pagina wiki '{{id}}' a fost actualizată"
   label_wiki_content_added: Adăugat
-  mail_subject_wiki_content_added: "Pagina wiki '{{page}}' a fost adăugată"
-  mail_body_wiki_content_added: Pagina wiki '{{page}}' a fost adăugată de {{author}}.
+  mail_subject_wiki_content_added: "Pagina wiki '{{id}}' a fost adăugată"
+  mail_body_wiki_content_added: Pagina wiki '{{id}}' a fost adăugată de {{author}}.
   label_wiki_content_updated: Actualizat
-  mail_body_wiki_content_updated: Pagina wiki '{{page}}' a fost actualizată de {{author}}.
+  mail_body_wiki_content_updated: Pagina wiki '{{id}}' a fost actualizată de {{author}}.
   permission_add_project: Crează proiect
   setting_new_project_user_role_id: Rol atribuit utilizatorului non-admin care crează un proiect.
   label_view_all_revisions: Arată toate reviziile
@@ -906,8 +904,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/ru.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/ru.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -295,7 +295,6 @@
   field_admin: ÐдминиÑтратор
   field_assignable: Задача может быть назначена Ñтой роли
   field_assigned_to: Ðазначена
-  field_assigned_to_role: Роль учаÑтника
   field_attr_firstname: ИмÑ
   field_attr_lastname: ФамилиÑ
   field_attr_login: Ðтрибут РегиÑтрациÑ
@@ -314,6 +313,7 @@
   field_description: ОпиÑание
   field_done_ratio: ГотовноÑть в %
   field_downloads: Загрузки
+  field_start_date: Дата начала
   field_due_date: Дата выполнениÑ
   field_editable: Редактируемый
   field_effective_date: Дата
@@ -345,7 +345,6 @@
   field_mail: Email
   field_mail_notification: Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ email
   field_max_length: МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°
-  field_member_of_group: Группа учаÑтника
   field_min_length: ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°
   field_name: ИмÑ
   field_new_password: Ðовый пароль
@@ -365,7 +364,6 @@
   field_role: Роль
   field_searchable: ДоÑтупно Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка
   field_spent_on: Дата
-  field_start_date: Ðачата
   field_start_page: Ð¡Ñ‚Ð°Ñ€Ñ‚Ð¾Ð²Ð°Ñ Ñтраница
   field_status: СтатуÑ
   field_subject: Тема
@@ -703,8 +701,10 @@
   label_user_activity: "ÐктивноÑть Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {{value}}"
   label_user_mail_no_self_notified: "Ðе извещать об изменениÑÑ…, которые Ñ Ñделал Ñам"
   label_user_mail_option_all: "О вÑех ÑобытиÑÑ… во вÑех моих проектах"
-  label_user_mail_option_none: "Только о тех ÑобытиÑÑ…, которые Ñ Ð¾Ñ‚Ñлеживаю или в которых Ñ ÑƒÑ‡Ð°Ñтвую"
   label_user_mail_option_selected: "О вÑех ÑобытиÑÑ… только в выбранном проекте..."
+  label_user_mail_option_only_owner: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ñ ÑвлÑÑŽÑÑŒ владельцем
+  label_user_mail_option_only_my_events: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², которые Ñ Ð¾Ñ‚Ñлеживаю или в которых учаÑтвую
+  label_user_mail_option_only_assigned: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², которые назначены мне
   label_user_new: Ðовый пользователь
   label_user_plural: Пользователи
   label_version: ВерÑиÑ
@@ -867,6 +867,7 @@
   setting_cross_project_issue_relations: Разрешить переÑечение задач по проектам
   setting_date_format: Формат даты
   setting_default_language: Язык по умолчанию
+  setting_default_notification_option: СпоÑоб Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию
   setting_default_projects_public: Ðовые проекты ÑвлÑÑŽÑ‚ÑÑ Ð¾Ð±Ñ‰ÐµÐ´Ð¾Ñтупными
   setting_diff_max_lines_displayed: МакÑимальное чиÑло Ñтрок Ð´Ð»Ñ diff
   setting_display_subprojects_issues: Отображение подпроектов по умолчанию
@@ -941,9 +942,9 @@
   text_select_project_modules: 'Выберите модули, которые будут иÑпользованы в проекте:'
   text_status_changed_by_changeset: "Реализовано в {{value}} редакции."
   text_subprojects_destroy_warning: "Подпроекты: {{value}} также будут удалены."
-  text_tip_task_begin_day: дата начала задачи
-  text_tip_task_begin_end_day: начало задачи и окончание ее в Ñтот день
-  text_tip_task_end_day: дата Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸
+  text_tip_issue_begin_day: дата начала задачи
+  text_tip_issue_begin_end_day: начало задачи и окончание ее в Ñтот день
+  text_tip_issue_end_day: дата Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸
   text_tracker_no_workflow: Ð”Ð»Ñ Ñтого трекера поÑледовательноÑть дейÑтвий не определена
   text_unallowed_characters: Запрещенные Ñимволы
   text_user_mail_option: "Ð”Ð»Ñ Ð½ÐµÐ²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… проектов, Ð’Ñ‹ будете получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ о том что проÑматриваете или в чем учаÑтвуете (например, вопроÑÑ‹, автором которых Ð’Ñ‹ ÑвлÑетеÑÑŒ или которые Вам назначены)."
@@ -958,12 +959,12 @@
   text_wiki_page_destroy_children: Удалить дочерние Ñтраницы и вÑех их потомков
   setting_password_min_length: ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° паролÑ
   field_group_by: Группировать результаты по
-  mail_subject_wiki_content_updated: "Wiki-Ñтраница '{{page}}' была обновлена"
+  mail_subject_wiki_content_updated: "Wiki-Ñтраница '{{id}}' была обновлена"
   label_wiki_content_added: Добавлена wiki-Ñтраница
-  mail_subject_wiki_content_added: "Wiki-Ñтраница  '{{page}}' была добавлена"
-  mail_body_wiki_content_added: "{{author}} добавил(а) wiki-Ñтраницу '{{page}}'."
+  mail_subject_wiki_content_added: "Wiki-Ñтраница  '{{id}}' была добавлена"
+  mail_body_wiki_content_added: "{{author}} добавил(а) wiki-Ñтраницу '{{id}}'."
   label_wiki_content_updated: Обновлена wiki-Ñтраница
-  mail_body_wiki_content_updated: "{{author}} обновил(а) wiki-Ñтраницу '{{page}}'."
+  mail_body_wiki_content_updated: "{{author}} обновил(а) wiki-Ñтраницу '{{id}}'."
   permission_add_project: Создание проекта
   setting_new_project_user_role_id: Роль, Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°ÐµÐ¼Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ, Ñоздавшему проект
   label_view_all_revisions: Показать вÑе ревизии
@@ -1035,3 +1036,12 @@
   notice_unable_delete_time_entry: Ðевозможно удалить запиÑÑŒ журнала.
   label_overall_spent_time: Ð’Ñего затрачено времени
 
+  label_user_mail_option_none: Ðет Ñобытий
+  field_member_of_group: Группа назначенного
+  field_assigned_to_role: Роль назначенного
+  notice_not_authorized_archived_project: Запрашиваемый проект был архивирован.
+
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/sk.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/sk.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -231,7 +231,6 @@
   field_attr_lastname: Priezvisko (atribut)
   field_attr_mail: Email (atribut)
   field_onthefly: Automatické vytváranie užívateľov
-  field_start_date: ZaÄiatok
   field_done_ratio: % hotovo
   field_auth_source: AutentifikaÄný mód
   field_hide_mail: Nezobrazovať môj email
@@ -581,7 +580,6 @@
   label_search_titles_only: Vyhľadávať iba v názvoch
   label_user_mail_option_all: "Pre všetky události všetkých mojích projektov"
   label_user_mail_option_selected: "Pre všetky události vybraných projektov"
-  label_user_mail_option_none: "Len pre události, ktoré sledujem alebo sa ma týkajú"
   label_user_mail_no_self_notified: "Nezasielať informácie o mnou vytvorených zmenách"
   label_registration_activation_by_email: aktivácia úÄtu emailom
   label_registration_manual_activation: manuálna aktivácia úÄtu
@@ -649,9 +647,9 @@
   text_project_destroy_confirmation: Ste si istý, že chcete odstránit tento projekt a všetky súvisiace dáta ?
   text_workflow_edit: Vyberte rolu a frontu k úprave workflow
   text_are_you_sure: Ste si istý?
-  text_tip_task_begin_day: úloha zaÄína v tento deň
-  text_tip_task_end_day: úloha konÄí v tento deň
-  text_tip_task_begin_end_day: úloha zaÄína a konÄí v tento deň
+  text_tip_issue_begin_day: úloha zaÄína v tento deň
+  text_tip_issue_end_day: úloha konÄí v tento deň
+  text_tip_issue_begin_end_day: úloha zaÄína a konÄí v tento deň
   text_project_identifier_info: 'Povolené znaky sú malé písmena (a-z), Äísla a pomlÄka.<br />Po uložení už nieje možné identifikátor zmeniÅ¥.'
   text_caracters_maximum: "{{count}} znakov maximálne."
   text_caracters_minimum: "Musí byť aspoň {{count}} znaky/ov dlhé."
@@ -810,13 +808,13 @@
   text_wiki_page_destroy_children: Vymazať podstránky a všetkých ich potomkov
   setting_password_min_length: Minimálna dĺžka hesla
   field_group_by: Skupinové výsledky podľa
-  mail_subject_wiki_content_updated: "'{{page}}' Wiki stránka bola aktualizovaná"
+  mail_subject_wiki_content_updated: "'{{id}}' Wiki stránka bola aktualizovaná"
   label_wiki_content_added: Wiki stránka pridaná
-  mail_subject_wiki_content_added: "'{{page}}' Wiki stránka bola pridaná"
-  mail_body_wiki_content_added: The '{{page}}' Wiki stránka bola pridaná užívateľom {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' Wiki stránka bola pridaná"
+  mail_body_wiki_content_added: The '{{id}}' Wiki stránka bola pridaná užívateľom {{author}}.
   permission_add_project: Vytvorenie projektu
   label_wiki_content_updated: Wiki stránka aktualizovaná
-  mail_body_wiki_content_updated: Wiki stránka '{{page}}' bola aktualizovaná užívateľom {{author}}.
+  mail_body_wiki_content_updated: Wiki stránka '{{id}}' bola aktualizovaná užívateľom {{author}}.
   setting_repositories_encodings: Kódovanie repozitára
   setting_new_project_user_role_id: Rola dána non-admin užívateľovi, ktorý vytvorí projekt
   label_view_all_revisions: Zobraziť všetkz revízie
@@ -908,8 +906,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/sl.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/sl.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -236,7 +236,6 @@
   field_attr_lastname: Oznaka za priimek
   field_attr_mail: Oznaka za e-naslov
   field_onthefly: Sprotna izdelava uporabnikov
-  field_start_date: ZaÄetek
   field_done_ratio: % Narejeno
   field_auth_source: NaÄin overovljanja
   field_hide_mail: Skrij moj e-naslov
@@ -650,7 +649,6 @@
   label_search_titles_only: PreiÅ¡Äi samo naslove
   label_user_mail_option_all: "Za vsak dogodek v vseh mojih projektih"
   label_user_mail_option_selected: "Za vsak dogodek samo na izbranih projektih..."
-  label_user_mail_option_none: "Samo za zadeve ki jih spremljam ali sem v njih udeležen(a)"
   label_user_mail_no_self_notified: "Ne želim biti opozorjen(a) na spremembe, ki jih naredim sam(a)"
   label_registration_activation_by_email: aktivacija raÄuna po e-poÅ¡ti
   label_registration_manual_activation: roÄna aktivacija raÄuna
@@ -725,9 +723,9 @@
   text_subprojects_destroy_warning: "Njegov(i) podprojekt(i): {{value}} bodo prav tako izbrisani."
   text_workflow_edit: Izberite vlogo in zahtevek za urejanje poteka dela
   text_are_you_sure: Ali ste prepriÄani?
-  text_tip_task_begin_day: naloga z zaÄetkom na ta dan
-  text_tip_task_end_day: naloga z zakljuÄkom na ta dan
-  text_tip_task_begin_end_day: naloga ki se zaÄne in konÄa ta dan
+  text_tip_issue_begin_day: naloga z zaÄetkom na ta dan
+  text_tip_issue_end_day: naloga z zakljuÄkom na ta dan
+  text_tip_issue_begin_end_day: naloga ki se zaÄne in konÄa ta dan
   text_project_identifier_info: 'Dovoljene so samo male Ärke (a-z), Å¡tevilke in vezaji.<br />Enkrat shranjen identifikator ne more biti spremenjen.'
   text_caracters_maximum: "najveÄ {{count}} znakov."
   text_caracters_minimum: "Mora biti vsaj dolg vsaj {{count}} znakov."
@@ -812,12 +810,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -909,8 +907,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/sr-YU.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/sr-YU.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -192,10 +192,10 @@
   mail_body_account_activation_request: "Novi korisnik ({{value}}) je registrovan. Nalog Äeka na vaÅ¡e odobrenje:"
   mail_subject_reminder: "{{count}} problema dospeva narednih {{days}} dana"
   mail_body_reminder: "{{count}} problema dodeljenih vama dospeva u narednih {{days}} dana:"
-  mail_subject_wiki_content_added: "Wiki stranica '{{page}}' je dodata"
-  mail_body_wiki_content_added: "{{author}} je dodao wiki stranicu '{{page}}'."
-  mail_subject_wiki_content_updated: "Wiki stranica '{{page}}' je ažurirana"
-  mail_body_wiki_content_updated: "{{author}} je ažurirao wiki stranicu '{{page}}'."
+  mail_subject_wiki_content_added: "Wiki stranica '{{id}}' je dodata"
+  mail_body_wiki_content_added: "{{author}} je dodao wiki stranicu '{{id}}'."
+  mail_subject_wiki_content_updated: "Wiki stranica '{{id}}' je ažurirana"
+  mail_body_wiki_content_updated: "{{author}} je ažurirao wiki stranicu '{{id}}'."
   
   gui_validation_error: jedna greška
   gui_validation_error_plural: "{{count}} grešaka"
@@ -261,7 +261,6 @@
   field_attr_lastname: Atribut prezimena
   field_attr_mail: Atribut e-adrese
   field_onthefly: Kreiranje korisnika u toku rada
-  field_start_date: PoÄetak
   field_done_ratio: % urađeno
   field_auth_source: Režim potvrde identiteta
   field_hide_mail: Sakrij moju e-adresu
@@ -719,7 +718,6 @@
   label_search_titles_only: Pretražuj samo naslove
   label_user_mail_option_all: "Za bilo koji događaj na svim mojim projektima"
   label_user_mail_option_selected: "Za bilo koji događaj na samo odabranim projektima..."
-  label_user_mail_option_none: "Samo za stvari koje pratim ili u koje sam ukljuÄen"
   label_user_mail_no_self_notified: "Ne želim biti obaveštavan za promene koje sam pravim"
   label_registration_activation_by_email: aktivacija naloga putem e-poruke
   label_registration_manual_activation: ruÄna aktivacija naloga
@@ -836,9 +834,9 @@
   text_journal_set_to: "{{label}} postavljen u {{value}}"
   text_journal_deleted: "{{label}} izbrisano ({{old}})"
   text_journal_added: "{{label}} {{value}} dodato"
-  text_tip_task_begin_day: zadatak poÄinje ovog dana
-  text_tip_task_end_day: zadatak se završava ovog dana
-  text_tip_task_begin_end_day: zadatak poÄinje i zavrÅ¡ava ovog dana
+  text_tip_issue_begin_day: zadatak poÄinje ovog dana
+  text_tip_issue_end_day: zadatak se završava ovog dana
+  text_tip_issue_begin_end_day: zadatak poÄinje i zavrÅ¡ava ovog dana
   text_project_identifier_info: 'Dozvoljena su samo mala slova (a-š), brojevi i crtice.<br />Jednom snimljen identifikator više se ne može promeniti.'
   text_caracters_maximum: "Najviše {{count}} znak(ova)."
   text_caracters_minimum: "Broj znakova mora biti najmanje {{count}}."
@@ -913,8 +911,19 @@
   field_time_entries: Vreme evidencije
   project_module_gantt: Gantov dijagram
   project_module_calendar: Kalendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/sr.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/sr.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -192,10 +192,10 @@
   mail_body_account_activation_request: "Ðови кориÑник ({{value}}) је региÑтрован. Ðалог чека на ваше одобрење:"
   mail_subject_reminder: "{{count}} проблема доÑпева наредних {{days}} дана"
   mail_body_reminder: "{{count}} проблема додељених вама доÑпева у наредних {{days}} дана:"
-  mail_subject_wiki_content_added: "Wiki Ñтраница '{{page}}' је додата"
-  mail_body_wiki_content_added: "{{author}} је додао wiki Ñтраницу '{{page}}'."
-  mail_subject_wiki_content_updated: "Wiki Ñтраница '{{page}}' је ажурирана"
-  mail_body_wiki_content_updated: "{{author}} је ажурирао wiki Ñтраницу '{{page}}'."
+  mail_subject_wiki_content_added: "Wiki Ñтраница '{{id}}' је додата"
+  mail_body_wiki_content_added: "{{author}} је додао wiki Ñтраницу '{{id}}'."
+  mail_subject_wiki_content_updated: "Wiki Ñтраница '{{id}}' је ажурирана"
+  mail_body_wiki_content_updated: "{{author}} је ажурирао wiki Ñтраницу '{{id}}'."
   
   gui_validation_error: једна грешка
   gui_validation_error_plural: "{{count}} грешака"
@@ -261,7 +261,6 @@
   field_attr_lastname: Ðтрибут презимена
   field_attr_mail: Ðтрибут е-адреÑе
   field_onthefly: Креирање кориÑника у току рада
-  field_start_date: Почетак
   field_done_ratio: % урађено
   field_auth_source: Режим потврде идентитета
   field_hide_mail: Сакриј моју е-адреÑу
@@ -719,7 +718,6 @@
   label_search_titles_only: Претражуј Ñамо наÑлове
   label_user_mail_option_all: "За било који догађај на Ñвим мојим пројектима"
   label_user_mail_option_selected: "За било који догађај на Ñамо одабраним пројектима..."
-  label_user_mail_option_none: "Само за Ñтвари које пратим или у које Ñам укључен"
   label_user_mail_no_self_notified: "Ðе желим бити обавештаван за промене које Ñам правим"
   label_registration_activation_by_email: активација налога путем е-поруке
   label_registration_manual_activation: ручна активација налога
@@ -836,9 +834,9 @@
   text_journal_set_to: "{{label}} поÑтављен у {{value}}"
   text_journal_deleted: "{{label}} избриÑано ({{old}})"
   text_journal_added: "{{label}} {{value}} додато"
-  text_tip_task_begin_day: задатак почиње овог дана
-  text_tip_task_end_day: задатак Ñе завршава овог дана
-  text_tip_task_begin_end_day: задатак почиње и завршава овог дана
+  text_tip_issue_begin_day: задатак почиње овог дана
+  text_tip_issue_end_day: задатак Ñе завршава овог дана
+  text_tip_issue_begin_end_day: задатак почиње и завршава овог дана
   text_project_identifier_info: 'Дозвољена Ñу Ñамо мала Ñлова (a-ш), бројеви и цртице.<br />Једном Ñнимљен идентификатор више Ñе не може променити.'
   text_caracters_maximum: "Ðајвише {{count}} знак(ова)."
   text_caracters_minimum: "Број знакова мора бити најмање {{count}}."
@@ -913,9 +911,20 @@
   field_time_entries: Време евиденције
   project_module_gantt: Гантов дијаграм
   project_module_calendar: Календар
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
 
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/sv.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/sv.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -195,6 +195,7 @@
   notice_file_not_found: Sidan du försökte komma åt existerar inte eller är borttagen.
   notice_locking_conflict: Data har uppdaterats av en annan användare.
   notice_not_authorized: Du saknar behörighet att komma åt den här sidan.
+  notice_not_authorized_archived_project: Projektet du försöker komma åt har arkiverats.
   notice_email_sent: "Ett mail skickades till {{value}}"
   notice_email_error: "Ett fel inträffade när mail skickades ({{value}})"
   notice_feeds_access_key_reseted: Din RSS-nyckel återställdes.
@@ -238,10 +239,10 @@
   mail_body_account_activation_request: "En ny användare ({{value}}) har registrerat sig och avvaktar ditt godkännande:"
   mail_subject_reminder: "{{count}} ärende(n) har deadline under de kommande {{days}} dagarna"
   mail_body_reminder: "{{count}} ärende(n) som är tilldelat dig har deadline under de {{days}} dagarna:"
-  mail_subject_wiki_content_added: "'{{page}}' wikisida has lagts till"
-  mail_body_wiki_content_added: The '{{page}}' wikisida has lagts till av {{author}}.
-  mail_subject_wiki_content_updated: "'{{page}}' wikisida har uppdaterats"
-  mail_body_wiki_content_updated: The '{{page}}' wikisida har uppdaterats av {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wikisida has lagts till"
+  mail_body_wiki_content_added: The '{{id}}' wikisida has lagts till av {{author}}.
+  mail_subject_wiki_content_updated: "'{{id}}' wikisida har uppdaterats"
+  mail_body_wiki_content_updated: The '{{id}}' wikisida har uppdaterats av {{author}}.
   
   gui_validation_error: 1 fel
   gui_validation_error_plural: "{{count}} fel"
@@ -307,7 +308,6 @@
   field_attr_lastname: Efternamnsattribut
   field_attr_mail: Mailattribut
   field_onthefly: Skapa användare on-the-fly
-  field_start_date: Start
   field_done_ratio: % Klart
   field_auth_source: Autentiseringsläge
   field_hide_mail: Dölj min mailadress
@@ -339,6 +339,9 @@
   field_group_by: Gruppera resultat efter
   field_sharing: Delning
   field_parent_issue: Förälderaktivitet
+  field_member_of_group: Tilldelad användares grupp
+  field_assigned_to_role: Tilldelad användares roll
+  field_text: Textfält
   
   setting_app_title: Applikationsrubrik
   setting_app_subtitle: Applikationsunderrubrik
@@ -393,6 +396,7 @@
   setting_start_of_week: Första dagen i veckan
   setting_rest_api_enabled: Aktivera REST webbtjänst
   setting_cache_formatted_text: Cacha formaterad text
+  setting_default_notification_option: Standard notifieringsalternativ
   
   permission_add_project: Skapa projekt
   permission_add_subprojects: Skapa underprojekt
@@ -568,7 +572,7 @@
   label_news_view_all: Visa alla nyheter
   label_news_added: Nyhet tillagd
   label_settings: Inställningar
-  label_overview: Överblick
+  label_overview: Översikt
   label_version: Version
   label_version_new: Ny version
   label_version_plural: Versioner
@@ -768,7 +772,10 @@
   label_search_titles_only: Sök endast i titlar
   label_user_mail_option_all: "För alla händelser i mina projekt"
   label_user_mail_option_selected: "För alla händelser i markerade projekt..."
-  label_user_mail_option_none: "Endast för saker jag bevakar eller är involverad i"
+  label_user_mail_option_none: Inga händelser
+  label_user_mail_option_only_my_events: Endast för saker jag bevakar eller är inblandad i
+  label_user_mail_option_only_assigned: Endast för saker jag är tilldelad
+  label_user_mail_option_only_owner: Endast för saker jag äger
   label_user_mail_no_self_notified: "Jag vill inte bli underrättad om ändringar som jag har gjort"
   label_registration_activation_by_email: kontoaktivering med mail
   label_registration_manual_activation: manuell kontoaktivering
@@ -830,6 +837,7 @@
   button_create_and_continue: Skapa och fortsätt
   button_test: Testa
   button_edit: Ändra
+  button_edit_associated_wikipage: "Ändra associerad Wikisida: {{page_title}}"
   button_add: Lägg till
   button_change: Ändra
   button_apply: Verkställ
@@ -881,13 +889,14 @@
   text_subprojects_destroy_warning: "Alla underprojekt: {{value}} kommer också tas bort."
   text_workflow_edit: Välj en roll och en ärendetyp för att ändra arbetsflöde
   text_are_you_sure: Är du säker ?
+  text_are_you_sure_with_children: Ta bort ärende och alla underärenden?
   text_journal_changed: "{{label}} ändrad från {{old}} till {{new}}"
   text_journal_set_to: "{{label}} satt till {{value}}"
   text_journal_deleted: "{{label}} borttagen ({{old}})"
   text_journal_added: "{{label}} {{value}} tillagd"
-  text_tip_task_begin_day: arbetsuppgift som börjar denna dag
-  text_tip_task_end_day: arbetsuppgift som slutar denna dag
-  text_tip_task_begin_end_day: arbetsuppgift börjar och slutar denna dag
+  text_tip_issue_begin_day: arbetsuppgift som börjar denna dag
+  text_tip_issue_end_day: arbetsuppgift som slutar denna dag
+  text_tip_issue_begin_end_day: arbetsuppgift börjar och slutar denna dag
   text_project_identifier_info: 'Små bokstäver (a-z), siffror och streck tillåtna.<br />När den är sparad kan identifieraren inte ändras.'
   text_caracters_maximum: "max {{count}} tecken."
   text_caracters_minimum: "Måste vara minst {{count}} tecken lång."
@@ -958,8 +967,8 @@
   enumeration_doc_categories: Dokumentkategorier
   enumeration_activities: Aktiviteter (tidsuppföljning)
   enumeration_system_activity: Systemaktivitet
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/th.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/th.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -233,7 +233,6 @@
   field_attr_lastname: นามสà¸à¸¸à¸¥ attribute
   field_attr_mail: อีเมล์ attribute
   field_onthefly: สร้างผู้ใช้ทันที
-  field_start_date: เริ่ม
   field_done_ratio: % สำเร็จ
   field_auth_source: วิธีà¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸•ัวตน
   field_hide_mail: ซ่อนอีเมล์ของฉัน
@@ -585,7 +584,6 @@
   label_search_titles_only: ค้นหาจาà¸à¸Šà¸·à¹ˆà¸­à¹€à¸£à¸·à¹ˆà¸­à¸‡à¹€à¸—่านั้น
   label_user_mail_option_all: "ทุà¸à¹† เหตุà¸à¸²à¸£à¸“์ในโครงà¸à¸²à¸£à¸‚องฉัน"
   label_user_mail_option_selected: "ทุà¸à¹† เหตุà¸à¸²à¸£à¸“์ในโครงà¸à¸²à¸£à¸—ี่เลือà¸..."
-  label_user_mail_option_none: "เฉพาะสิ่งที่ฉันเลือà¸à¸«à¸£à¸·à¸­à¸¡à¸µà¸ªà¹ˆà¸§à¸™à¹€à¸à¸µà¹ˆà¸¢à¸§à¸‚้อง"
   label_user_mail_no_self_notified: "ฉันไม่ต้องà¸à¸²à¸£à¹„ด้รับà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•ือนในสิ่งที่ฉันทำเอง"
   label_registration_activation_by_email: เปิดบัà¸à¸Šà¸µà¸œà¹ˆà¸²à¸™à¸­à¸µà¹€à¸¡à¸¥à¹Œ
   label_registration_manual_activation: อนุมัติโดยผู้บริหารจัดà¸à¸²à¸£
@@ -655,9 +653,9 @@
   text_subprojects_destroy_warning: "โครงà¸à¸²à¸£à¸¢à¹ˆà¸­à¸¢: {{value}} จะถูà¸à¸¥à¸šà¸”้วย."
   text_workflow_edit: เลือà¸à¸šà¸—บาทà¹à¸¥à¸°à¸à¸²à¸£à¸•ิดตาม เพื่อà¹à¸à¹‰à¹„ขลำดับงาน
   text_are_you_sure: คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¹„หม ?
-  text_tip_task_begin_day: งานที่เริ่มวันนี้
-  text_tip_task_end_day: งานที่จบวันนี้
-  text_tip_task_begin_end_day: งานที่เริ่มà¹à¸¥à¸°à¸ˆà¸šà¸§à¸±à¸™à¸™à¸µà¹‰
+  text_tip_issue_begin_day: งานที่เริ่มวันนี้
+  text_tip_issue_end_day: งานที่จบวันนี้
+  text_tip_issue_begin_end_day: งานที่เริ่มà¹à¸¥à¸°à¸ˆà¸šà¸§à¸±à¸™à¸™à¸µà¹‰
   text_project_identifier_info: 'ภาษาอังà¸à¸¤à¸©à¸•ัวเล็à¸(a-z), ตัวเลข(0-9) à¹à¸¥à¸°à¸‚ีด (-) เท่านั้น.<br />เมื่อจัดเà¸à¹‡à¸šà¹à¸¥à¹‰à¸§, ชื่อเฉพาะไม่สามารถเปลี่ยนà¹à¸›à¸¥à¸‡à¹„ด้'
   text_caracters_maximum: "สูงสุด {{count}} ตัวอัà¸à¸©à¸£."
   text_caracters_minimum: "ต้องยาวอย่างน้อย {{count}} ตัวอัà¸à¸©à¸£."
@@ -813,12 +811,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -910,8 +908,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/tr.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/tr.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -260,7 +260,6 @@
   field_attr_lastname: Soyad NiteliÄŸi
   field_attr_mail: E-Posta NiteliÄŸi
   field_onthefly: Anında kullanıcı oluşturma
-  field_start_date: Başlangıç
   field_done_ratio: % tamamlandı
   field_auth_source: Kimlik Denetim Modu
   field_hide_mail: E-posta adresimi gizle
@@ -610,7 +609,6 @@
   label_search_titles_only: Sadece başlıkları ara
   label_user_mail_option_all: "Tüm projelerimdeki herhangi bir olay için"
   label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için..."
-  label_user_mail_option_none: "Sadece dahil olduğum ya da izlediklerim için"
   label_user_mail_no_self_notified: "Kendi yaptığım değişikliklerden haberdar olmak istemiyorum"
   label_registration_activation_by_email: e-posta ile hesap etkinleÅŸtirme
   label_registration_manual_activation: Elle hesap etkinleÅŸtirme
@@ -680,9 +678,9 @@
   text_subprojects_destroy_warning: "Ayrıca {{value}} alt proje silinecek."
   text_workflow_edit: İşakışını düzenlemek için bir rol ve takipçi seçin
   text_are_you_sure: Emin misiniz ?
-  text_tip_task_begin_day: Bugün başlayan görevler
-  text_tip_task_end_day: Bugün sona eren görevler
-  text_tip_task_begin_end_day: Bugün başlayan ve sona eren görevler
+  text_tip_issue_begin_day: Bugün başlayan görevler
+  text_tip_issue_end_day: Bugün sona eren görevler
+  text_tip_issue_begin_end_day: Bugün başlayan ve sona eren görevler
   text_project_identifier_info: 'Küçük harfler (a-z), sayılar ve noktalar kabul edilir.<br />Bir kere kaydedildiğinde,tanımlayıcı değiştirilemez.'
   text_caracters_maximum: "En çok {{count}} karakter."
   text_caracters_minimum: "En az {{count}} karakter uzunluğunda olmalı."
@@ -839,12 +837,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -936,8 +934,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/uk.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/uk.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -227,7 +227,6 @@
   field_attr_lastname: Ðтрибут Прізвище
   field_attr_mail: Ðтрибут Email
   field_onthefly: Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача на льоту
-  field_start_date: Початок
   field_done_ratio: % зроблено
   field_auth_source: Режим аутентифікації
   field_hide_mail: Приховувати мій email
@@ -544,7 +543,6 @@
   label_search_titles_only: Шукати тільки в назвах
   label_user_mail_option_all: "Ð”Ð»Ñ Ð²ÑÑ–Ñ… подій у вÑÑ–Ñ… моїх проектах"
   label_user_mail_option_selected: "Ð”Ð»Ñ Ð²ÑÑ–Ñ… подій тільки у вибраному проекті..."
-  label_user_mail_option_none: "Тільки Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, що Ñ Ð¿Ñ€Ð¾Ð³Ð»Ñдаю або в чому Ñ Ð±ÐµÑ€Ñƒ учаÑть"
   label_user_mail_no_self_notified: "Ðе Ñповіщати про зміни, Ñкі Ñ Ð·Ñ€Ð¾Ð±Ð¸Ð² Ñам"
   label_registration_activation_by_email: Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу електронною поштою
   label_registration_manual_activation: ручна Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу
@@ -597,9 +595,9 @@
   text_project_destroy_confirmation: Ви наполÑгаєте на видаленні цього проекту Ñ– вÑієї інформації, що відноÑитьÑÑ Ð´Ð¾ нього?
   text_workflow_edit: Виберіть роль Ñ– координатор Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑлідовноÑті дій
   text_are_you_sure: Ви впевнені?
-  text_tip_task_begin_day: день початку задачі
-  text_tip_task_end_day: день Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ–
-  text_tip_task_begin_end_day: початок задачі Ñ– Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ днÑ
+  text_tip_issue_begin_day: день початку задачі
+  text_tip_issue_end_day: день Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ–
+  text_tip_issue_begin_end_day: початок задачі Ñ– Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ днÑ
   text_project_identifier_info: 'РÑдкові букви (a-z), допуÑтимі цифри Ñ– дефіÑ.<br />Збережений ідентифікатор не може бути змінений.'
   text_caracters_maximum: "{{count}} Ñимволів(а) макÑимум."
   text_caracters_minimum: "Повинно мати Ñкнайменше  {{count}} Ñимволів(а) у довжину."
@@ -812,12 +810,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -909,8 +907,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/vi.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/vi.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -294,7 +294,6 @@
   field_attr_lastname: Lastname attribute
   field_attr_mail: Email attribute
   field_onthefly: On-the-fly user creation
-  field_start_date: Bắt đầu
   field_done_ratio: Tiến độ
   field_auth_source: Authentication mode
   field_hide_mail: Không làm lộ email của bạn
@@ -654,7 +653,6 @@
   label_search_titles_only: Chỉ tìm trong tá»±a Ä‘á»
   label_user_mail_option_all: "Má»i sá»± kiện trên má»i dá»± án cá»§a bạn"
   label_user_mail_option_selected: "Má»i sá»± kiện trên các dá»± án được chá»n..."
-  label_user_mail_option_none: "Chỉ những vấn đỠbạn theo dõi hoặc được gán"
   label_user_mail_no_self_notified: "Äừng gá»­i email vá» các thay đổi do chính bạn thá»±c hiện"
   label_registration_activation_by_email: account activation by email
   label_registration_manual_activation: manual account activation
@@ -728,9 +726,9 @@
   text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted."
   text_workflow_edit: Select a role and a tracker to edit the workflow
   text_are_you_sure: Bạn chắc chứ?
-  text_tip_task_begin_day: ngày bắt đầu
-  text_tip_task_end_day: ngày kết thúc
-  text_tip_task_begin_end_day: bắt đầu và kết thúc cùng ngày
+  text_tip_issue_begin_day: ngày bắt đầu
+  text_tip_issue_end_day: ngày kết thúc
+  text_tip_issue_begin_end_day: bắt đầu và kết thúc cùng ngày
   text_project_identifier_info: 'Chỉ cho phép chữ cái thưá»ng (a-z), con số và dấu gạch ngang.<br />Sau khi lưu, chỉ số ID không thể thay đổi.'
   text_caracters_maximum: "Tối đa {{count}} ký tự."
   text_caracters_minimum: "Phải gồm ít nhất {{count}} ký tự."
@@ -871,12 +869,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -968,8 +966,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/zh-TW.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/zh-TW.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -174,7 +174,7 @@
         odd: "必須是奇數"
         even: "å¿…é ˆæ˜¯å¶æ•¸"
         # Append your own errors here or at the model/attributes scope.
-        greater_than_start_date: "必須在起始日期之後"
+        greater_than_start_date: "必須在開始日期之後"
         not_same_project: "ä¸å±¬æ–¼åŒä¸€å€‹å°ˆæ¡ˆ"
         circular_dependency: "é€™å€‹é—œè¯æœƒå°Žè‡´ç’°ç‹€ç›¸ä¾"
         cant_link_an_issue_with_a_descendant: "項目無法被連çµè‡³è‡ªå·±çš„å­é …ç›®"
@@ -235,6 +235,7 @@
   notice_file_not_found: 您想è¦å­˜å–çš„é é¢å·²ç¶“ä¸å­˜åœ¨æˆ–被æ¬ç§»è‡³å…¶ä»–ä½ç½®ã€‚
   notice_locking_conflict: 資料已被其他使用者更新。
   notice_not_authorized: ä½ æœªè¢«æŽˆæ¬Šå­˜å–æ­¤é é¢ã€‚
+  notice_not_authorized_archived_project: 您欲存å–的專案已經被歸檔å°å­˜ã€‚
   notice_email_sent: "郵件已經æˆåŠŸå¯„é€è‡³ä»¥ä¸‹æ”¶ä»¶è€…: {{value}}"
   notice_email_error: "寄é€éƒµä»¶çš„éŽç¨‹ä¸­ç™¼ç”ŸéŒ¯èª¤ ({{value}})"
   notice_feeds_access_key_reseted: 您的 RSS å­˜å–é‡‘é‘°å·²è¢«é‡æ–°è¨­å®šã€‚
@@ -277,10 +278,10 @@
   mail_body_account_activation_request: "æœ‰ä½æ–°ç”¨æˆ¶ ({{value}}) 已經完æˆè¨»å†Šï¼Œæ­£ç­‰å€™æ‚¨çš„審核:"
   mail_subject_reminder: "您有 {{count}} 個項目å³å°‡åˆ°æœŸ ({{days}})"
   mail_body_reminder: "{{count}} 個指派給您的項目,將於 {{days}} 天之內到期:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki é é¢å·²è¢«æ–°å¢ž"
-  mail_body_wiki_content_added: "The '{{page}}' wiki é é¢å·²è¢« {{author}} 新增。"
-  mail_subject_wiki_content_updated: "'{{page}}' wiki é é¢å·²è¢«æ›´æ–°"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki é é¢å·²è¢« {{author}} 更新。"
+  mail_subject_wiki_content_added: "'{{id}}' wiki é é¢å·²è¢«æ–°å¢ž"
+  mail_body_wiki_content_added: "The '{{id}}' wiki é é¢å·²è¢« {{author}} 新增。"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki é é¢å·²è¢«æ›´æ–°"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki é é¢å·²è¢« {{author}} 更新。"
   
   gui_validation_error: 1 個錯誤
   gui_validation_error_plural: "{{count}} 個錯誤"
@@ -379,8 +380,8 @@
   field_group_by: çµæžœåˆ†çµ„æ–¹å¼
   field_sharing: 共用
   field_parent_issue: 父工作項目
-  field_member_of_group: 所屬群組
-  field_assigned_to_role: 所屬角色
+  field_member_of_group: "被指派者的群組"
+  field_assigned_to_role: "被指派者的角色"
   field_text: 內容文字
   
   setting_app_title: 標題
@@ -436,7 +437,8 @@
   setting_start_of_week: 週的第一天
   setting_rest_api_enabled: 啟用 REST 網路æœå‹™æŠ€è¡“(Web Service)
   setting_cache_formatted_text: å¿«å–已格å¼åŒ–文字
-
+  setting_default_notification_option: é è¨­é€šçŸ¥é¸é …
+  
   permission_add_project: 建立專案
   permission_add_subprojects: 建立å­å°ˆæ¡ˆ
   permission_edit_project: 編輯專案
@@ -811,7 +813,10 @@
   label_search_titles_only: 僅æœå°‹æ¨™é¡Œ
   label_user_mail_option_all: "æé†’與我的專案有關的全部事件"
   label_user_mail_option_selected: "åªæé†’æˆ‘æ‰€é¸æ“‡å°ˆæ¡ˆä¸­çš„事件..."
-  label_user_mail_option_none: "åªæé†’æˆ‘è§€å¯Ÿä¸­æˆ–åƒèˆ‡ä¸­çš„事件"
+  label_user_mail_option_none: "å–æ¶ˆæé†’"
+  label_user_mail_option_only_my_events: "åªæé†’æˆ‘è§€å¯Ÿä¸­æˆ–åƒèˆ‡ä¸­çš„事物"
+  label_user_mail_option_only_assigned: "åªæé†’æˆ‘è¢«æŒ‡æ´¾çš„äº‹ç‰©"
+  label_user_mail_option_only_owner: "åªæé†’æˆ‘ä½œç‚ºæ“æœ‰è€…的事物"
   label_user_mail_no_self_notified: "ä¸æé†’æˆ‘è‡ªå·±æ‰€åšçš„變更"
   label_registration_activation_by_email: é€éŽé›»å­éƒµä»¶å•Ÿç”¨å¸³æˆ¶
   label_registration_manual_activation: 手動啟用帳戶
@@ -930,9 +935,9 @@
   text_journal_set_to: "{{label}} 設定為 {{value}}"
   text_journal_deleted: "{{label}} 已刪除 ({{old}})"
   text_journal_added: "{{label}} {{value}} 已新增"
-  text_tip_task_begin_day: 今天起始的工作
-  text_tip_task_end_day: 今天截止的的工作
-  text_tip_task_begin_end_day: 今天起始與截止的工作
+  text_tip_issue_begin_day: 今天起始的工作
+  text_tip_issue_end_day: 今天截止的的工作
+  text_tip_issue_begin_end_day: 今天起始與截止的工作
   text_project_identifier_info: 'åªå…許å°å¯«è‹±æ–‡å­—æ¯ï¼ˆa-z)ã€é˜¿æ‹‰ä¼¯æ•¸å­—與連字符號(-)。<br />儲存後,代碼ä¸å¯å†è¢«æ›´æ”¹ã€‚'
   text_caracters_maximum: "最多 {{count}} 個字元."
   text_caracters_minimum: "長度必須大於 {{count}} 個字元."
@@ -1004,3 +1009,7 @@
   enumeration_activities: 活動 (時間追蹤)
   enumeration_system_activity: 系統活動
 
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/zh.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/.svn/text-base/zh.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -204,10 +204,10 @@
   mail_body_account_activation_request: "新用户({{value}}ï¼‰å·²å®Œæˆæ³¨å†Œï¼Œæ­£åœ¨ç­‰å€™æ‚¨çš„审核:"
   mail_subject_reminder: "{{count}} 个问题需è¦å°½å¿«è§£å†³ ({{days}})"
   mail_body_reminder: "指派给您的 {{count}} 个问题需è¦åœ¨ {{days}} 天内完æˆï¼š"
-  mail_subject_wiki_content_added: "'{{page}}' wiki页é¢å·²æ·»åŠ "
-  mail_body_wiki_content_added: "'{{page}}' wiki页é¢å·²ç”± {{author}} 添加。"
-  mail_subject_wiki_content_updated: "'{{page}}' wiki页é¢å·²æ›´æ–°"
-  mail_body_wiki_content_updated: "'{{page}}' wiki页é¢å·²ç”± {{author}} 更新。"
+  mail_subject_wiki_content_added: "'{{id}}' wiki页é¢å·²æ·»åŠ "
+  mail_body_wiki_content_added: "'{{id}}' wiki页é¢å·²ç”± {{author}} 添加。"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki页é¢å·²æ›´æ–°"
+  mail_body_wiki_content_updated: "'{{id}}' wiki页é¢å·²ç”± {{author}} 更新。"
 
   gui_validation_error: 1 个错误
   gui_validation_error_plural: "{{count}} 个错误"
@@ -272,7 +272,6 @@
   field_attr_lastname: å§“æ°å±žæ€§
   field_attr_mail: 邮件属性
   field_onthefly: 峿—¶ç”¨æˆ·ç”Ÿæˆ
-  field_start_date: 开始
   field_done_ratio: 完æˆåº¦
   field_auth_source: è®¤è¯æ¨¡å¼
   field_hide_mail: éšè—我的邮件地å€
@@ -721,7 +720,6 @@
   label_search_titles_only: 仅在标题中æœç´¢
   label_user_mail_option_all: "æ”¶å–æˆ‘的项目的所有通知"
   label_user_mail_option_selected: "æ”¶å–选中项目的所有通知..."
-  label_user_mail_option_none: "åªæ”¶å–我跟踪或å‚与的项目的通知"
   label_user_mail_no_self_notified: "ä¸è¦å‘é€å¯¹æˆ‘自己æäº¤çš„修改的通知"
   label_registration_activation_by_email: é€šè¿‡é‚®ä»¶è®¤è¯æ¿€æ´»å¸å·
   label_registration_manual_activation: 手动激活å¸å·
@@ -835,9 +833,9 @@
   text_journal_set_to: "{{label}} 被设置为 {{value}}"
   text_journal_deleted: "{{label}} 已删除 ({{old}})"
   text_journal_added: "{{label}} {{value}} 已添加"
-  text_tip_task_begin_day: 今天开始的任务
-  text_tip_task_end_day: 今天结æŸçš„任务
-  text_tip_task_begin_end_day: 今天开始并结æŸçš„任务
+  text_tip_issue_begin_day: 今天开始的任务
+  text_tip_issue_end_day: 今天结æŸçš„任务
+  text_tip_issue_begin_end_day: 今天开始并结æŸçš„任务
   text_project_identifier_info: 'åªå…许使用å°å†™å­—æ¯ï¼ˆa-z),数字和连字符(-)。<br />请注æ„,标识符ä¿å­˜åŽå°†ä¸å¯ä¿®æ”¹ã€‚'
   text_caracters_maximum: "最多 {{count}} 个字符。"
   text_caracters_minimum: "è‡³å°‘éœ€è¦ {{count}} 个字符。"
@@ -931,8 +929,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/bg.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/bg.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -9,12 +9,12 @@
       short: "%b %d"
       long: "%B %d, %Y"
       
-    day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
-    abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
+    day_names: [ÐеделÑ, Понеделник, Вторник, СрÑда, Четвъртък, Петък, Събота]
+    abbr_day_names: [Ðед, Пон, Вто, СрÑ, Чет, Пет, Съб]
       
     # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
-    abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
+    month_names: [~, Януари, Февруари, Март, Ðприл, Май, Юни, Юли, ÐвгуÑÑ‚, Септември, Октомври, Ðоември, Декември]
+    abbr_month_names: [~, Яну, Фев, Мар, Ðпр, Май, Юни, Юли, Ðвг, Сеп, Окт, Ðое, Дек]
     # Used in date_select and datime_select.
     order: [ :year, :month, :day ]
 
@@ -31,38 +31,38 @@
     distance_in_words:
       half_a_minute: "half a minute"
       less_than_x_seconds:
-        one:   "less than 1 second"
-        other: "less than {{count}} seconds"
+        one:   "по-малко от 1 Ñекунда"
+        other: "по-малко от {{count}} Ñекунди"
       x_seconds:
-        one:   "1 second"
-        other: "{{count}} seconds"
+        one:   "1 Ñекунда"
+        other: "{{count}} Ñекунди"
       less_than_x_minutes:
-        one:   "less than a minute"
-        other: "less than {{count}} minutes"
+        one:   "по-малко от 1 минута"
+        other: "по-малко от {{count}} минути"
       x_minutes:
-        one:   "1 minute"
-        other: "{{count}} minutes"
+        one:   "1 минута"
+        other: "{{count}} минути"
       about_x_hours:
-        one:   "about 1 hour"
-        other: "about {{count}} hours"
+        one:   "около 1 чаÑ"
+        other: "около {{count}} чаÑа"
       x_days:
-        one:   "1 day"
-        other: "{{count}} days"
+        one:   "1 ден"
+        other: "{{count}} дена"
       about_x_months:
-        one:   "about 1 month"
-        other: "about {{count}} months"
+        one:   "около 1 меÑец"
+        other: "около {{count}} меÑеца"
       x_months:
-        one:   "1 month"
-        other: "{{count}} months"
+        one:   "1 меÑец"
+        other: "{{count}} меÑеца"
       about_x_years:
-        one:   "about 1 year"
-        other: "about {{count}} years"
+        one:   "около 1 година"
+        other: "около {{count}} години"
       over_x_years:
-        one:   "over 1 year"
-        other: "over {{count}} years"
+        one:   "над 1 година"
+        other: "над {{count}} години"
       almost_x_years:
-        one:   "almost 1 year"
-        other: "almost {{count}} years"
+        one:   "почти 1 година"
+        other: "почти {{count}} години"
 
   number:
     format:
@@ -87,7 +87,7 @@
 # Used in array.to_sentence.
   support:
     array:
-      sentence_connector: "and"
+      sentence_connector: "и"
       skip_last_comma: false
       
   activerecord:
@@ -106,17 +106,16 @@
         taken: "вече ÑъщеÑтвува"
         not_a_number: "не е чиÑло"
         not_a_date: "е невалидна дата"
-        greater_than: "must be greater than {{count}}"
-        greater_than_or_equal_to: "must be greater than or equal to {{count}}"
-        equal_to: "must be equal to {{count}}"
-        less_than: "must be less than {{count}}"
-        less_than_or_equal_to: "must be less than or equal to {{count}}"
-        odd: "must be odd"
-        even: "must be even"
+        greater_than: "трÑбва да бъде по-голÑм[a/о] от {{count}}"
+        greater_than_or_equal_to: "трÑбва да бъде по-голÑм[a/о] от или равен[a/o] на {{count}}"
+        equal_to: "трÑбва да бъде равен[a/o] на {{count}}"
+        less_than: "трÑбва да бъде по-малък[a/o] от {{count}}"
+        less_than_or_equal_to: "трÑбва да бъде по-малък[a/o] от или равен[a/o] на {{count}}"
+        odd: "трÑбва да бъде нечетен[a/o]"
+        even: "трÑбва да бъде четен[a/o]"
         greater_than_start_date: "трÑбва да е Ñлед началната дата"
         not_same_project: "не е от ÑÑŠÑ‰Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚"
         circular_dependency: "Тази Ñ€ÐµÐ»Ð°Ñ†Ð¸Ñ Ñ‰Ðµ доведе до безкрайна завиÑимоÑÑ‚"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
 
   actionview_instancetag_blank_option: Изберете
   
@@ -171,7 +170,7 @@
   field_mail: Email
   field_filename: Файл
   field_filesize: Големина
-  field_downloads: Downloads
+  field_downloads: Изтеглени файлове
   field_author: Ðвтор
   field_created_on: От дата
   field_updated_on: Обновена
@@ -186,10 +185,10 @@
   field_title: Заглавие
   field_project: Проект
   field_issue: Задача
-  field_status: СтатуÑ
+  field_status: СъÑтоÑние
   field_notes: Бележка
   field_is_closed: Затворена задача
-  field_is_default: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾ подразбиране
+  field_is_default: СъÑтоÑние по подразбиране
   field_tracker: Тракер
   field_subject: ОтноÑно
   field_due_date: Крайна дата
@@ -217,12 +216,11 @@
   field_port: Порт
   field_account: Профил
   field_base_dn: Base DN
-  field_attr_login: Login attribute
-  field_attr_firstname: Firstname attribute
-  field_attr_lastname: Lastname attribute
-  field_attr_mail: Email attribute
+  field_attr_login: Ðтрибут Login 
+  field_attr_firstname: Ðтрибут Първо име (Firstname)
+  field_attr_lastname: Ðтрибут Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ (Lastname)
+  field_attr_mail: Ðтрибут Email
   field_onthefly: Динамично Ñъздаване на потребител
-  field_start_date: Ðачална дата
   field_done_ratio: % ПрогреÑ
   field_auth_source: Ðачин на оторизациÑ
   field_hide_mail: Скрий e-mail адреÑа ми
@@ -249,12 +247,12 @@
   setting_login_required: ИзиÑкване за вход в ÑиÑтемата
   setting_self_registration: РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ потребители
   setting_attachment_max_size: МакÑимална големина на прикачен файл
-  setting_issues_export_limit: Лимит за екÑпорт на задачи
+  setting_issues_export_limit: МакÑимален брой задачи за екÑпорт
   setting_mail_from: E-mail Ð°Ð´Ñ€ÐµÑ Ð·Ð° емиÑии
   setting_host_name: ХоÑÑ‚
   setting_text_formatting: Форматиране на текÑта
   setting_wiki_compression: Wiki компреÑиране на иÑториÑта
-  setting_feeds_limit: Лимит на Feeds
+  setting_feeds_limit: МакÑимален брой за емиÑии
   setting_autofetch_changesets: Ðвтоматично обработване на ревизиите
   setting_sys_api_enabled: Разрешаване на WS за управление
   setting_commit_ref_keywords: ОтбелÑзващи ключови думи
@@ -270,9 +268,9 @@
   label_project_new: Ðов проект
   label_project_plural: Проекти
   label_x_projects:
-    zero:  no projects
-    one:   1 project
-    other: "{{count}} projects"
+    zero:  0 проекти
+    one:   1 проект
+    other: "{{count}} проекта"
   label_project_all: Ð’Ñички проекти
   label_project_latest: ПоÑледни проекти
   label_issue: Задача
@@ -293,9 +291,9 @@
   label_tracker_plural: Тракери
   label_tracker_new: Ðов тракер
   label_workflow: Работен процеÑ
-  label_issue_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð½Ð° задача
-  label_issue_status_plural: СтатуÑи на задачи
-  label_issue_status_new: Ðов ÑтатуÑ
+  label_issue_status: СъÑтоÑние на задача
+  label_issue_status_plural: СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи
+  label_issue_status_new: Ðово ÑÑŠÑтоÑние
   label_issue_category: ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°
   label_issue_category_plural: Категории задачи
   label_issue_category_new: Ðова категориÑ
@@ -323,14 +321,14 @@
   label_registered_on: РегиÑтрациÑ
   label_activity: ДейноÑÑ‚
   label_new: Ðов
-  label_logged_as: Логнат като
+  label_logged_as: ВлÑзъл като
   label_environment: Среда
   label_authentication: ОторизациÑ
   label_auth_source: Ðачин на оторозациÑ
   label_auth_source_new: Ðов начин на оторизациÑ
   label_auth_source_plural: Ðачини на оторизациÑ
   label_subproject_plural: Подпроекти
-  label_min_max_length: Мин. - МакÑ. дължина
+  label_min_max_length: Минимална - макÑимална дължина
   label_list: СпиÑък
   label_date: Дата
   label_integer: ЦелочиÑлен
@@ -339,10 +337,10 @@
   label_text: Дълъг текÑÑ‚
   label_attribute: Ðтрибут
   label_attribute_plural: Ðтрибути
-  label_download: "{{count}} Download"
-  label_download_plural: "{{count}} Downloads"
+  label_download: "{{count}} изтеглÑне"
+  label_download_plural: "{{count}} изтеглÑниÑ"
   label_no_data: ÐÑма изходни данни
-  label_change_status: ПромÑна на ÑтатуÑа
+  label_change_status: ПромÑна на ÑÑŠÑтоÑнието
   label_history: ИÑториÑ
   label_attachment: Файл
   label_attachment_new: Ðов файл
@@ -369,21 +367,21 @@
   label_closed_issues: затворена
   label_closed_issues_plural: затворени
   label_x_open_issues_abbr_on_total:
-    zero:  0 open / {{total}}
-    one:   1 open / {{total}}
-    other: "{{count}} open / {{total}}"
+    zero:  0 отворени / {{total}}
+    one:   1 отворена / {{total}}
+    other: "{{count}} отворени / {{total}}"
   label_x_open_issues_abbr:
-    zero:  0 open
-    one:   1 open
-    other: "{{count}} open"
+    zero:  0 отворени
+    one:   1 отворена
+    other: "{{count}} отворени"
   label_x_closed_issues_abbr:
-    zero:  0 closed
-    one:   1 closed
-    other: "{{count}} closed"
+    zero:  0 затворени
+    one:   1 затворена
+    other: "{{count}} затворени"
   label_total: Общо
   label_permissions: Права
-  label_current_status: Текущ ÑтатуÑ
-  label_new_statuses_allowed: Позволени ÑтатуÑи
+  label_current_status: Текущо ÑÑŠÑтоÑние
+  label_new_statuses_allowed: Позволени ÑÑŠÑтоÑниÑ
   label_all: вÑички
   label_none: никакви
   label_next: Следващ
@@ -394,7 +392,7 @@
   label_per_page: Ðа Ñтраница
   label_calendar: Календар
   label_months_from: меÑеца от
-  label_gantt: Gantt
+  label_gantt: Мрежов график
   label_internal: Вътрешен
   label_last_changes: "поÑледни {{count}} промени"
   label_change_view_all: Виж вÑички промени
@@ -402,9 +400,9 @@
   label_comment: Коментар
   label_comment_plural: Коментари
   label_x_comments:
-    zero: no comments
-    one: 1 comment
-    other: "{{count}} comments"
+    zero: 0 коментари
+    one: 1 коментар
+    other: "{{count}} коментари"
   label_comment_add: ДобавÑне на коментар
   label_comment_added: Добавен коментар
   label_comment_delete: Изтриване на коментари
@@ -453,13 +451,13 @@
   label_wiki: Wiki
   label_wiki_edit: Wiki редакциÑ
   label_wiki_edit_plural: Wiki редакции
-  label_wiki_page: Wiki page
-  label_wiki_page_plural: Wiki pages
+  label_wiki_page: Wiki Ñтраница
+  label_wiki_page_plural: Wiki Ñтраници
   label_index_by_title: ИндекÑ
   label_index_by_date: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ дата
   label_current_version: Текуща верÑиÑ
   label_preview: Преглед
-  label_feed_plural: Feeds
+  label_feed_plural: ЕмиÑии
   label_changes_details: Подробни промени
   label_issue_tracking: Тракинг
   label_spent_time: Отделено време
@@ -478,7 +476,7 @@
   label_permissions_report: Справка за права
   label_watched_issues: Ðаблюдавани задачи
   label_related_issues: Свързани задачи
-  label_applied_status: Промени ÑтатуÑа на
+  label_applied_status: УÑтановено ÑÑŠÑтоÑние
   label_loading: Зареждане...
   label_relation_new: Ðова релациÑ
   label_relation_delete: Изтриване на релациÑ
@@ -488,10 +486,10 @@
   label_blocked_by: блокирана от
   label_precedes: предшеÑтва
   label_follows: изпълнÑва Ñе Ñлед
-  label_end_to_start: end to start
-  label_end_to_end: end to end
-  label_start_to_start: start to start
-  label_start_to_end: start to end
+  label_end_to_start: край към начало
+  label_end_to_end: край към край
+  label_start_to_start: начало към начало
+  label_start_to_end: начало към край
   label_stay_logged_in: Запомни ме
   label_disabled: забранено
   label_show_completed_versions: Показване на реализирани верÑии
@@ -534,7 +532,7 @@
   button_clear: ИзчиÑти
   button_lock: Заключване
   button_unlock: Отключване
-  button_download: Download
+  button_download: ИзтеглÑне
   button_list: СпиÑък
   button_view: Преглед
   button_move: ПремеÑтване
@@ -544,8 +542,8 @@
   button_sort: Сортиране
   button_log_time: ОтделÑне на време
   button_rollback: Върни Ñе към тази ревизиÑ
-  button_watch: Ðаблюдавай
-  button_unwatch: Спри наблюдението
+  button_watch: Ðаблюдаване
+  button_unwatch: Край на наблюдението
   button_reply: Отговор
   button_archive: Ðрхивиране
   button_unarchive: Разархивиране
@@ -582,11 +580,11 @@
   default_role_manager: Мениджър
   default_role_developer: Разработчик
   default_role_reporter: Публикуващ
-  default_tracker_bug: Бъг
+  default_tracker_bug: Грешка
   default_tracker_feature: ФункционалноÑÑ‚
   default_tracker_support: Поддръжка
   default_issue_status_new: Ðова
-  default_issue_status_in_progress: In Progress
+  default_issue_status_in_progress: Изпълнение
   default_issue_status_resolved: Приключена
   default_issue_status_feedback: Обратна връзка
   default_issue_status_closed: Затворена
@@ -648,7 +646,7 @@
   label_age: ВъзраÑÑ‚
   notice_default_data_loaded: Примерната информациÑта е уÑпешно заредена.
   text_load_default_configuration: Зареждане на примерна информациÑ
-  text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑтатуÑи на задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ."
+  text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑÑŠÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ."
   error_can_t_load_default_data: "Грешка при зареждане на примерната информациÑ: {{value}}"
   button_update: ОбновÑване
   label_change_properties: ПромÑна на наÑтройки
@@ -707,208 +705,221 @@
   setting_default_projects_public: Ðовите проекти Ñа публични по подразбиране
   error_scm_annotate: "Обектът не ÑъщеÑтвува или не може да бъде анотиран."
   label_planning: Планиране
-  text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted."
-  label_and_its_subprojects: "{{value}} and its subprojects"
-  mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
-  mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
-  text_user_wrote: "{{value}} wrote:"
-  label_duplicated_by: duplicated by
-  setting_enabled_scm: Enabled SCM
-  text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_enumeration_destroy_question: "{{count}} objects are assigned to this value."
-  label_incoming_emails: Incoming emails
-  label_generate_key: Generate a key
-  setting_mail_handler_api_enabled: Enable WS for incoming emails
-  setting_mail_handler_api_key: API key
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
-  field_parent_title: Parent page
-  label_issue_watchers: Watchers
-  setting_commit_logs_encoding: Commit messages encoding
-  button_quote: Quote
-  setting_sequential_project_identifiers: Generate sequential project identifiers
-  notice_unable_delete_version: Unable to delete version
-  label_renamed: renamed
-  label_copied: copied
-  setting_plain_text_mail: plain text only (no HTML)
-  permission_view_files: View files
-  permission_edit_issues: Edit issues
-  permission_edit_own_time_entries: Edit own time logs
-  permission_manage_public_queries: Manage public queries
-  permission_add_issues: Add issues
+  text_subprojects_destroy_warning: "Ðеговите подпроекти: {{value}} Ñъщо ще бъдат изтрити."
+  label_and_its_subprojects: "{{value}} и неговите подпроекти"
+  mail_body_reminder: "{{count}} задачи, назначени на Ð²Ð°Ñ Ñа Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок в Ñледващите {{days}} дни:"
+  mail_subject_reminder: "{{count}} задачи Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок Ñ Ñледващите {{days}} дни"
+  text_user_wrote: "{{value}} напиÑа:"
+  label_duplicated_by: дублирана от
+  setting_enabled_scm: Разрешена SCM
+  text_enumeration_category_reassign_to: 'ПреÑвържете ги към тази ÑтойноÑÑ‚:'
+  text_enumeration_destroy_question: "{{count}} обекта Ñа Ñвързани Ñ Ñ‚Ð°Ð·Ð¸ ÑтойноÑÑ‚."
+  label_incoming_emails: ВходÑщи e-mail-и
+  label_generate_key: Генериране на ключ
+  setting_mail_handler_api_enabled: Разрешаване на WS за входÑщи e-mail-и
+  setting_mail_handler_api_key: API ключ
+  text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и извеÑтиÑта не Ñа разрешени.\nКонфигурирайте Ð²Ð°ÑˆÐ¸Ñ SMTP Ñървър в config/email.yml и реÑтартирайте Redmine, за да ги разрешите."
+  field_parent_title: РодителÑка Ñтраница
+  label_issue_watchers: Ðаблюдатели
+  setting_commit_logs_encoding: Кодова таблица на ÑъобщениÑта при поверÑване
+  button_quote: Цитат
+  setting_sequential_project_identifiers: Генериране на поÑледователни проектни идентификатори
+  notice_unable_delete_version: ÐевъзможноÑÑ‚ за изтриване на верÑиÑ
+  label_renamed: преименуван
+  label_copied: копиран
+  setting_plain_text_mail: Ñамо чиÑÑ‚ текÑÑ‚ (без HTML)
+  permission_view_files: Разглеждане на файлове
+  permission_edit_issues: Редактиране на задачи
+  permission_edit_own_time_entries: Редактиране на ÑобÑтвените time logs
+  permission_manage_public_queries: Управление на публичните заÑвки
+  permission_add_issues: ДобавÑне на задачи
   permission_log_time: Log spent time
-  permission_view_changesets: View changesets
-  permission_view_time_entries: View spent time
-  permission_manage_versions: Manage versions
-  permission_manage_wiki: Manage wiki
-  permission_manage_categories: Manage issue categories
-  permission_protect_wiki_pages: Protect wiki pages
-  permission_comment_news: Comment news
-  permission_delete_messages: Delete messages
-  permission_select_project_modules: Select project modules
-  permission_manage_documents: Manage documents
-  permission_edit_wiki_pages: Edit wiki pages
-  permission_add_issue_watchers: Add watchers
-  permission_view_gantt: View gantt chart
-  permission_move_issues: Move issues
-  permission_manage_issue_relations: Manage issue relations
-  permission_delete_wiki_pages: Delete wiki pages
-  permission_manage_boards: Manage boards
-  permission_delete_wiki_pages_attachments: Delete attachments
-  permission_view_wiki_edits: View wiki history
-  permission_add_messages: Post messages
-  permission_view_messages: View messages
-  permission_manage_files: Manage files
-  permission_edit_issue_notes: Edit notes
-  permission_manage_news: Manage news
-  permission_view_calendar: View calendrier
-  permission_manage_members: Manage members
-  permission_edit_messages: Edit messages
-  permission_delete_issues: Delete issues
-  permission_view_issue_watchers: View watchers list
-  permission_manage_repository: Manage repository
-  permission_commit_access: Commit access
-  permission_browse_repository: Browse repository
-  permission_view_documents: View documents
-  permission_edit_project: Edit project
-  permission_add_issue_notes: Add notes
-  permission_save_queries: Save queries
-  permission_view_wiki_pages: View wiki
-  permission_rename_wiki_pages: Rename wiki pages
-  permission_edit_time_entries: Edit time logs
-  permission_edit_own_issue_notes: Edit own notes
-  setting_gravatar_enabled: Use Gravatar user icons
-  label_example: Example
+  permission_view_changesets: Разглеждане на changesets
+  permission_view_time_entries: Разглеждане на изразходваното време
+  permission_manage_versions: Управление на верÑиите
+  permission_manage_wiki: Управление на wiki
+  permission_manage_categories: Управление на категориите задачи
+  permission_protect_wiki_pages: Заключване на wiki Ñтраници
+  permission_comment_news: Коментиране на новини
+  permission_delete_messages: Изтриване на ÑъобщениÑ
+  permission_select_project_modules: Избор на проектни модули
+  permission_manage_documents: Управление на документи
+  permission_edit_wiki_pages: Редактиране на wiki Ñтраници
+  permission_add_issue_watchers: ДобавÑне на наблюдатели
+  permission_view_gantt: Разглеждане на мрежов график
+  permission_move_issues: ПремеÑтване на задачи
+  permission_manage_issue_relations: Управление на връзките между задачите
+  permission_delete_wiki_pages: Изтриване на wiki Ñтраници
+  permission_manage_boards: Управление на boards
+  permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове
+  permission_view_wiki_edits: Разглеждане на wiki иÑториÑ
+  permission_add_messages: Публикуване на ÑъобщениÑ
+  permission_view_messages: Разглеждане на ÑъобщениÑ
+  permission_manage_files: Управление на файлове
+  permission_edit_issue_notes: Редактиране на бележки
+  permission_manage_news: Управление на новини
+  permission_view_calendar: Разглеждане на календари
+  permission_manage_members: Управление на членовете (на екип)
+  permission_edit_messages: Редактиране на ÑъобщениÑ
+  permission_delete_issues: Изтриване на задачи
+  permission_view_issue_watchers: Разглеждане на ÑпиÑък Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ð¸
+  permission_manage_repository: Управление на хранилища
+  permission_commit_access: ПоверÑване
+  permission_browse_repository: Разглеждане на хранилища
+  permission_view_documents: Разглеждане на документи
+  permission_edit_project: Редактиране на проект
+  permission_add_issue_notes: Добаване на бележки
+  permission_save_queries: Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚Ð²Ð°Ð½Ð¸Ñ (queries)
+  permission_view_wiki_pages: Разглеждане на wiki
+  permission_rename_wiki_pages: Преименуване на wiki Ñтраници
+  permission_edit_time_entries: Редактиране на time logs
+  permission_edit_own_issue_notes: Редактиране на ÑобÑтвени бележки
+  setting_gravatar_enabled: Използване на портребителÑки икони от Gravatar
+  label_example: Пример
   text_repository_usernames_mapping: "Select ou update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
-  permission_edit_own_messages: Edit own messages
-  permission_delete_own_messages: Delete own messages
-  label_user_activity: "{{value}}'s activity"
-  label_updated_time_by: "Updated by {{author}} {{age}} ago"
-  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-  setting_diff_max_lines_displayed: Max number of diff lines displayed
-  text_plugin_assets_writable: Plugin assets directory writable
-  warning_attachments_not_saved: "{{count}} file(s) could not be saved."
-  button_create_and_continue: Create and continue
-  text_custom_field_possible_values_info: 'One line for each value'
+  permission_edit_own_messages: Редактиране на ÑобÑтвени ÑъобщениÑ
+  permission_delete_own_messages: Изтриване на ÑобÑтвени ÑъобщениÑ
+  label_user_activity: "ÐктивноÑÑ‚ на {{value}}"
+  label_updated_time_by: "Обновена от {{author}} преди {{age}}"
+  text_diff_truncated: '... Този diff не е пълен, понеже е Ð½Ð°Ð´Ñ…Ð²ÑŠÑ€Ð»Ñ Ð¼Ð°ÐºÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€, който може да бъде показан.'
+  setting_diff_max_lines_displayed: МакÑимален брой показани diff редове
+  text_plugin_assets_writable: Папката на приÑтавките е разрешена за запиÑ
+  warning_attachments_not_saved: "{{count}} файла не бÑха запиÑани."
+  button_create_and_continue: Създаване и продължаване
+  text_custom_field_possible_values_info: 'Една ÑтойноÑÑ‚ на ред'
   label_display: Display
   field_editable: Editable
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  field_watcher: Watcher
-  setting_openid: Allow OpenID login and registration
+  setting_repository_log_display_limit: МакÑимален брой на показванете ревизии в лог файла
+  setting_file_max_size_displayed: МакÑимален размер на текÑтовите файлове, показвани inline
+  field_watcher: Ðаблюдател
+  setting_openid: Рарешаване на OpenID вход и региÑтрациÑ
   field_identity_url: OpenID URL
-  label_login_with_open_id_option: or login with OpenID
-  field_content: Content
-  label_descending: Descending
-  label_sort: Sort
-  label_ascending: Ascending
-  label_date_from_to: From {{start}} to {{end}}
+  label_login_with_open_id_option: или вход чрез OpenID
+  field_content: Съдържание
+  label_descending: ÐамалÑващ
+  label_sort: Сортиране
+  label_ascending: ÐараÑтващ
+  label_date_from_to: От {{start}} до {{end}}
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do?
-  text_wiki_page_reassign_children: Reassign child pages to this parent page
-  text_wiki_page_nullify_children: Keep child pages as root pages
-  text_wiki_page_destroy_children: Delete child pages and all their descendants
-  setting_password_min_length: Minimum password length
-  field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
-  label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
-  permission_add_project: Create project
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  label_view_all_revisions: View all revisions
-  label_tag: Tag
-  label_branch: Branch
-  error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
-  error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
-  text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
-  text_journal_set_to: "{{label}} set to {{value}}"
-  text_journal_deleted: "{{label}} deleted ({{old}})"
-  label_group_plural: Groups
-  label_group: Group
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  text_journal_added: "{{label}} {{value}} added"
-  field_active: Active
-  enumeration_system_activity: System Activity
-  permission_delete_issue_watchers: Delete watchers
-  version_status_closed: closed
-  version_status_locked: locked
-  version_status_open: open
-  error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
-  label_user_anonymous: Anonymous
-  button_move_and_follow: Move and follow
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_gravatar_default: Default Gravatar image
+  text_wiki_page_destroy_question: Тази Ñтраница има {{descendants}} Ñтраници деца и descendant(s). Какво желаете да правите?
+  text_wiki_page_reassign_children: Преназначаване на Ñтраниците деца на тази родителÑка Ñтраница
+  text_wiki_page_nullify_children: Запазване на тези Ñтраници като коренни Ñтраници
+  text_wiki_page_destroy_children: Изтриване на Ñтраниците деца и вÑички техни descendants
+  setting_password_min_length: Минимална дължина на парола
+  field_group_by: Групиране на резултатите по
+  mail_subject_wiki_content_updated: "Wiki Ñтраницата '{{id}}' не беше обновена"
+  label_wiki_content_added: Wiki Ñтраница беше добавена
+  mail_subject_wiki_content_added: "Wiki Ñтраницата '{{id}}' беше добавена"
+  mail_body_wiki_content_added: Wiki Ñтраницата '{{id}}' беше добавена от {{author}}.
+  label_wiki_content_updated: Wiki Ñтраница беше обновена
+  mail_body_wiki_content_updated: Wiki Ñтраницата '{{id}}' беше обновена от {{author}}.
+  permission_add_project: Създаване на проект
+  setting_new_project_user_role_id: РолÑ, давана на потребител, Ñъздаващ проекти, който не е админиÑтратор
+  label_view_all_revisions: Разглеждане на вÑички ревизии
+  label_tag: ВерÑиÑ
+  label_branch: работен вариант
+  error_no_tracker_in_project: ÐÑма аÑоциирани тракери Ñ Ñ‚Ð¾Ð·Ð¸ проект. Проверете наÑтройките на проекта.
+  error_no_default_issue_status: ÐÑма уÑтановено подразбиращо Ñе ÑÑŠÑтоÑние за задачите. ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐµÑ‚Ðµ вашата ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ (Вижте "ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ -> СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи").
+  text_journal_changed: "{{label}} променен от {{old}} на {{new}}"
+  text_journal_set_to: "{{label}} уÑтановен на {{value}}"
+  text_journal_deleted: "{{label}} изтрит ({{old}})"
+  label_group_plural: Групи
+  label_group: Група
+  label_group_new: Ðова група
+  label_time_entry_plural: Използвано време
+  text_journal_added: "Добавено {{label}} {{value}}"
+  field_active: Ðктивен
+  enumeration_system_activity: СиÑтемна активноÑÑ‚
+  permission_delete_issue_watchers: Изтриване на наблюдатели
+  version_status_closed: затворена
+  version_status_locked: заключена
+  version_status_open: отворена
+  error_can_not_reopen_issue_on_closed_version: Задача, аÑоциирана ÑÑŠÑ Ð·Ð°Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð° верÑÐ¸Ñ Ð½Ðµ може да бъде отворена отново
+  label_user_anonymous: Ðнонимен
+  button_move_and_follow: ПремеÑтване и продължаване
+  setting_default_projects_modules: Ðктивирани модули по подразбиране за нов проект
+  setting_gravatar_default: Подразбиращо Ñе изображение от Gravatar
   field_sharing: Sharing
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_system: With all projects
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_tree: With project tree
-  label_version_sharing_none: Not shared
-  error_can_not_archive_project: This project can not be archived
-  button_duplicate: Duplicate
-  button_copy_and_follow: Copy and follow
-  label_copy_source: Source
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_status: Use the issue status
-  error_issue_done_ratios_not_updated: Issue done ratios not updated.
-  error_workflow_copy_target: Please select target tracker(s) and role(s)
-  setting_issue_done_ratio_issue_field: Use the issue field
-  label_copy_same_as_target: Same as target
-  label_copy_target: Target
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  error_workflow_copy_source: Please select a source tracker or role
-  label_update_issue_done_ratios: Update issue done ratios
-  setting_start_of_week: Start calendars on
-  permission_view_issues: View Issues
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_revision_id: Revision {{value}}
-  label_api_access_key: API access key
-  label_api_access_key_created_on: API access key created {{value}} ago
-  label_feeds_access_key: RSS access key
-  notice_api_access_key_reseted: Your API access key was reset.
-  setting_rest_api_enabled: Enable REST web service
-  label_missing_api_access_key: Missing an API access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  button_show: Show
-  text_line_separated: Multiple values allowed (one line for each value).
-  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
-  permission_add_subprojects: Create subprojects
-  label_subproject_new: New subproject
+  label_version_sharing_hierarchy: С проектна йерархиÑ
+  label_version_sharing_system: С вÑички проекти
+  label_version_sharing_descendants: С подпроекти
+  label_version_sharing_tree: С дърво на проектите
+  label_version_sharing_none: Ðе Ñподелен
+  error_can_not_archive_project: Този проект не може да бъде архивиран
+  button_duplicate: Дублиране
+  button_copy_and_follow: Копиране и продължаване
+  label_copy_source: Източник
+  setting_issue_done_ratio: ИзчиÑление на процента на готово задачи Ñ
+  setting_issue_done_ratio_issue_status: Използване на ÑÑŠÑтоÑниетона задачите
+  error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен.
+  error_workflow_copy_target: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ тракер(и) и Ñ€Ð¾Ð»Ñ (роли).
+  setting_issue_done_ratio_issue_field: Използване на поле 'задача'
+  label_copy_same_as_target: Също като целта
+  label_copy_target: Цел
+  notice_issue_done_ratios_updated: Обновен процент на завършените задачи.
+  error_workflow_copy_source: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ source тракер или ролÑ
+  label_update_issue_done_ratios: ОбновÑване на процента на завършените задачи
+  setting_start_of_week: Първи ден на Ñедмицата
+  permission_view_issues: Разглеждане на задачите
+  label_display_used_statuses_only: Показване Ñамо на ÑÑŠÑтоÑниÑта, използвани от този тракер
+  label_revision_id: Ð ÐµÐ²Ð¸Ð·Ð¸Ñ {{value}}
+  label_api_access_key: API ключ за доÑтъп
+  label_api_access_key_created_on: API ключ за доÑтъп е Ñъздаден преди {{value}}
+  label_feeds_access_key: RSS access ключ
+  notice_api_access_key_reseted: ВашиÑÑ‚ API ключ за доÑтъп беше изчиÑтен.
+  setting_rest_api_enabled: Разрешаване на REST web ÑървиÑ
+  label_missing_api_access_key: ЛипÑващ API ключ
+  label_missing_feeds_access_key: ЛипÑващ RSS ключ за доÑтъп
+  button_show: Показване
+  text_line_separated: Позволени Ñа много ÑтойноÑти (по едно на ред).
+  setting_mail_handler_body_delimiters: ОтрÑзване на e-mail-ите Ñлед един от тези редове
+  permission_add_subprojects: Създаване на подпроекти
+  label_subproject_new: Ðов подпроект
   text_own_membership_delete_confirmation: |-
-    You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
-    Are you sure you want to continue?
-  label_close_versions: Close completed versions
+    Вие Ñте на път да премахнете нÑкои или вÑички ваши Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ е възможно Ñлед това на да не можете да редатирате този проект.
+    Сигурен ли Ñте, че иÑкате да продължите?
+  label_close_versions: ЗатварÑне на завършените верÑии
   label_board_sticky: Sticky
-  label_board_locked: Locked
-  permission_export_wiki_pages: Export wiki pages
+  label_board_locked: Заключена
+  permission_export_wiki_pages: ЕкÑпорт на wiki Ñтраници
   setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Manage project activities
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_profile: Profile
-  permission_manage_subtasks: Manage subtasks
-  field_parent_issue: Parent task
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect ({{value}})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
+  permission_manage_project_activities: Управление на дейноÑтите на проекта
+  error_unable_delete_issue_status: ÐевъзможноÑÑ‚ за изтриване на ÑÑŠÑтоÑние на задача
+  label_profile: Профил
+  permission_manage_subtasks: Управление на подзадачите
+  field_parent_issue: РодителÑка задача
+  label_subtask_plural: Подзадачи
+  label_project_copy_notifications: Изпращане на Send e-mail извеÑÑ‚Ð¸Ñ Ð¿Ð¾ време на копирането на проекта
+  error_can_not_delete_custom_field: ÐевъзможноÑÑ‚ за изтриване на потребителÑко поле
+  error_unable_to_connect: ÐевъзможноÑÑ‚ за Ñвързване Ñ ({{value}})
+  error_can_not_remove_role: Тази Ñ€Ð¾Ð»Ñ Ñе използва и не може да бъде изтрита.
+  error_can_not_delete_tracker: Този тракер Ñъдържа задачи и не може да бъде изтрит.
   field_principal: Principal
   label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
+  notice_failed_to_save_members: "ÐевъзможноÑÑ‚ за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° член(ове): {{errors}}."
+  text_zoom_out: ÐамалÑване
+  text_zoom_in: Увеличаване
+  notice_unable_delete_time_entry: ÐевъзможноÑÑ‚ за изтриване на Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° time log.
+  label_overall_spent_time: Общо употребено време
   field_time_entries: Log time
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  text_tip_issue_end_day: issue ending this day
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  field_member_of_group: Assignee's group
   project_module_gantt: Gantt
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  text_tip_issue_begin_end_day: issue beginning and ending this day
+  setting_default_notification_option: Default notification option
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  text_tip_issue_begin_day: issue beginning this day
+  label_user_mail_option_only_assigned: Only for things I am assigned to
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  field_assigned_to_role: Assignee's role
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/bs.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/bs.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -252,7 +252,6 @@
   field_attr_lastname: Atribut za prezime
   field_attr_mail: Atribut za email
   field_onthefly: 'Kreiranje korisnika "On-the-fly"'
-  field_start_date: PoÄetak
   field_done_ratio: % Realizovano
   field_auth_source: Mod za authentifikaciju
   field_hide_mail: Sakrij moju email adresu
@@ -676,7 +675,6 @@
   label_search_titles_only: Pretraži samo naslove
   label_user_mail_option_all: "Za bilo koji događaj na svim mojim projektima"
   label_user_mail_option_selected: "Za bilo koji događaj na odabranim projektima..."
-  label_user_mail_option_none: "Samo za stvari koje ja gledam ili sam u njih ukljuÄen"
   label_user_mail_no_self_notified: "Ne želim notifikaciju za promjene koje sam ja napravio"
   label_registration_activation_by_email: aktivacija korisniÄkog raÄuna email-om
   label_registration_manual_activation: ruÄna aktivacija korisniÄkog raÄuna
@@ -750,9 +748,9 @@
   text_subprojects_destroy_warning: "Podprojekt(i): {{value}} će takođe biti izbrisani."
   text_workflow_edit: Odaberite ulogu i podruÄje aktivnosti za ispravku toka promjena na aktivnosti
   text_are_you_sure: Da li ste sigurni ?
-  text_tip_task_begin_day: zadatak poÄinje danas
-  text_tip_task_end_day: zadatak završava danas
-  text_tip_task_begin_end_day: zadatak zapoÄinje i zavrÅ¡ava danas
+  text_tip_issue_begin_day: zadatak poÄinje danas
+  text_tip_issue_end_day: zadatak završava danas
+  text_tip_issue_begin_end_day: zadatak zapoÄinje i zavrÅ¡ava danas
   text_project_identifier_info: 'Samo mala slova (a-z), brojevi i crtice su dozvoljeni.<br />Nakon snimanja, identifikator se ne može mijenjati.'
   text_caracters_maximum: "maksimum {{count}} karaktera."
   text_caracters_minimum: "Dužina mora biti najmanje {{count}} znakova."
@@ -830,12 +828,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -927,8 +925,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/ca.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/ca.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -195,10 +195,10 @@
   mail_body_account_activation_request: "S'ha registrat un usuari nou ({{value}}). El seu compte està pendent d'aprovació:"
   mail_subject_reminder: "{{count}} assumptes venceran els següents {{days}} dies"
   mail_body_reminder: "{{count}} assumptes que teniu assignades venceran els següents {{days}} dies:"
-  mail_subject_wiki_content_added: "S'ha afegit la pàgina wiki «{{page}}»"
-  mail_body_wiki_content_added: "En {{author}} ha afegit la pàgina wiki «{{page}}»."
-  mail_subject_wiki_content_updated: "S'ha actualitzat la pàgina wiki «{{page}}»"
-  mail_body_wiki_content_updated: "En {{author}} ha actualitzat la pàgina wiki «{{page}}»."
+  mail_subject_wiki_content_added: "S'ha afegit la pàgina wiki «{{id}}»"
+  mail_body_wiki_content_added: "En {{author}} ha afegit la pàgina wiki «{{id}}»."
+  mail_subject_wiki_content_updated: "S'ha actualitzat la pàgina wiki «{{id}}»"
+  mail_body_wiki_content_updated: "En {{author}} ha actualitzat la pàgina wiki «{{id}}»."
   
   gui_validation_error: 1 error
   gui_validation_error_plural: "{{count}} errors"
@@ -264,7 +264,6 @@
   field_attr_lastname: Atribut del cognom
   field_attr_mail: Atribut del correu electrònic
   field_onthefly: "Creació de l'usuari «al vol»"
-  field_start_date: Inici
   field_done_ratio: % realitzat
   field_auth_source: "Mode d'autenticació"
   field_hide_mail: "Oculta l'adreça de correu electrònic"
@@ -725,7 +724,6 @@
   label_search_titles_only: Cerca només en els títols
   label_user_mail_option_all: "Per qualsevol esdeveniment en tots els meus projectes"
   label_user_mail_option_selected: "Per qualsevol esdeveniment en els projectes seleccionats..."
-  label_user_mail_option_none: "Només per les coses que vigilo o hi estic implicat"
   label_user_mail_no_self_notified: "No vull ser notificat pels canvis que faig jo mateix"
   label_registration_activation_by_email: activació del compte per correu electrònic
   label_registration_manual_activation: activació del compte manual
@@ -842,9 +840,9 @@
   text_journal_set_to: "{{label}} s'ha establert a {{value}}"
   text_journal_deleted: "{{label}} s'ha suprimit ({{old}})"
   text_journal_added: "S'ha afegit {{label}} {{value}}"
-  text_tip_task_begin_day: "tasca que s'inicia aquest dia"
-  text_tip_task_end_day: tasca que finalitza aquest dia
-  text_tip_task_begin_end_day: "tasca que s'inicia i finalitza aquest dia"
+  text_tip_issue_begin_day: "tasca que s'inicia aquest dia"
+  text_tip_issue_end_day: tasca que finalitza aquest dia
+  text_tip_issue_begin_end_day: "tasca que s'inicia i finalitza aquest dia"
   text_project_identifier_info: "Es permeten lletres en minúscules (a-z), números i guions.<br />Un cop desat, l'identificador no es pot modificar."
   text_caracters_maximum: "{{count}} caràcters com a màxim."
   text_caracters_minimum: "Com a mínim ha de tenir {{count}} caràcters."
@@ -916,8 +914,19 @@
   enumeration_activities: Activitats (seguidor de temps)
   enumeration_system_activity: Activitat del sistema
 
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/cs.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/cs.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -24,8 +24,8 @@
       time: "%H:%M"
       short: "%d %b %H:%M"
       long: "%B %d, %Y %H:%M"
-    am: "am"
-    pm: "pm"
+    am: "dop."
+    pm: "odp."
     
   datetime:
     distance_in_words:
@@ -61,8 +61,8 @@
         one:   "více než 1 rok"
         other: "více než {{count}} roky"
       almost_x_years:
-        one:   "almost 1 year"
-        other: "almost {{count}} years"
+        one:   "témeř 1 rok"
+        other: "téměř {{count}} roky"
 
   number:
     format:
@@ -116,7 +116,7 @@
         greater_than_start_date: "musí být vÄ›tší než poÄáteÄní datum"
         not_same_project: "nepatří stejnému projektu"
         circular_dependency: "Tento vztah by vytvořil cyklickou závislost"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "Úkol nemůže být spojen s jedním z jeho dílÄích úkolů"
 
   # Updated by Josef Liška <jl@chl.cz>
   # CZ translation by Maxim Krušina | Massimo Filippi, s.r.o. | maxim@mxm.cz
@@ -150,19 +150,19 @@
   notice_successful_connection: Úspěšné připojení.
   notice_file_not_found: Stránka na kterou se snažíte zobrazit neexistuje nebo byla smazána.
   notice_locking_conflict: Údaje byly změněny jiným uživatelem.
-  notice_scm_error: Entry and/or revision doesn't exist in the repository.
+  notice_scm_error: Záznam a/nebo revize neexistuje v repozitáři.
   notice_not_authorized: Nemáte dostateÄná práva pro zobrazení této stránky.
   notice_email_sent: "Na adresu {{value}} byl odeslán email"
   notice_email_error: "Při odesílání emailu nastala chyba ({{value}})"
   notice_feeds_access_key_reseted: Váš klÃ­Ä pro přístup k RSS byl resetován.
-  notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}."
+  notice_failed_to_save_issues: "Chyba při uložení {{count}} úkolu(ů) z {{total}} vybraných: {{ids}}."
   notice_no_issue_selected: "Nebyl zvolen žádný úkol. Prosím, zvolte úkoly, které chcete editovat"
   notice_account_pending: "Váš úÄet byl vytvoÅ™en, nyní Äeká na schválení administrátorem."
   notice_default_data_loaded: Výchozí konfigurace úspěšně nahrána.
   
   error_can_t_load_default_data: "Výchozí konfigurace nebyla nahrána: {{value}}"
-  error_scm_not_found: "Položka a/nebo revize neexistují v repository."
-  error_scm_command_failed: "Při pokusu o přístup k repository došlo k chybě: {{value}}"
+  error_scm_not_found: "Položka a/nebo revize neexistují v repozitáři."
+  error_scm_command_failed: "Při pokusu o přístup k repozitáři došlo k chybě: {{value}}"
   error_issue_not_found_in_project: 'Úkol nebyl nalezen nebo nepatří k tomuto projektu'
   
   mail_subject_lost_password: "Vaše heslo ({{value}})"
@@ -210,10 +210,10 @@
   field_due_date: Uzavřít do
   field_assigned_to: Přiřazeno
   field_priority: Priorita
-  field_fixed_version: Přiřazeno k verzi
+  field_fixed_version: Cílová verze
   field_user: Uživatel
   field_role: Role
-  field_homepage: Homepage
+  field_homepage: Domovská stránka
   field_is_public: Veřejný
   field_parent: Nadřazený projekt
   field_is_in_roadmap: Úkoly zobrazené v plánu
@@ -237,7 +237,6 @@
   field_attr_lastname: Příjemní (atribut)
   field_attr_mail: Email (atribut)
   field_onthefly: Automatické vytváření uživatelů
-  field_start_date: ZaÄátek
   field_done_ratio: % Hotovo
   field_auth_source: AutentifikaÄní mód
   field_hide_mail: Nezobrazovat můj email
@@ -265,18 +264,18 @@
   setting_app_subtitle: Podtitulek aplikace
   setting_welcome_text: Uvítací text
   setting_default_language: Výchozí jazyk
-  setting_login_required: Auten. vyžadována
+  setting_login_required: Autentifikace vyžadována
   setting_self_registration: Povolena automatická registrace
   setting_attachment_max_size: Maximální velikost přílohy
   setting_issues_export_limit: Limit pro export úkolů
   setting_mail_from: Odesílat emaily z adresy
   setting_bcc_recipients: Příjemci skryté kopie (bcc)
-  setting_host_name: Host name
+  setting_host_name: Jméno serveru
   setting_text_formatting: Formátování textu
-  setting_wiki_compression: Komperese historie Wiki
-  setting_feeds_limit: Feed content limit
+  setting_wiki_compression: Komprese historie Wiki
+  setting_feeds_limit: Limit obsahu příspěvků
   setting_default_projects_public: Nové projekty nastavovat jako veřejné
-  setting_autofetch_changesets: Autofetch commits
+  setting_autofetch_changesets: Automaticky stahovat commity
   setting_sys_api_enabled: Povolit WS pro správu repozitory
   setting_commit_ref_keywords: KlíÄová slova pro odkazy
   setting_commit_fix_keywords: KlíÄová slova pro uzavÅ™ení
@@ -290,8 +289,8 @@
   setting_protocol: Protokol
   setting_per_page_options: Povolené poÄty řádků na stránce
   setting_user_format: Formát zobrazení uživatele
-  setting_activity_days_default: Days displayed on project activity
-  setting_display_subprojects_issues: Display subprojects issues on main projects by default
+  setting_activity_days_default: Dny zobrazené v Äinnosti projektu
+  setting_display_subprojects_issues: Automaticky zobrazit úkoly podprojektu v hlavním projektu
   
   project_module_issue_tracking: Sledování úkolů
   project_module_time_tracking: Sledování Äasu
@@ -299,7 +298,7 @@
   project_module_documents: Dokumenty
   project_module_files: Soubory
   project_module_wiki: Wiki
-  project_module_repository: Repository
+  project_module_repository: Repozitář
   project_module_boards: Diskuse
   
   label_user: Uživatel
@@ -309,16 +308,16 @@
   label_project_new: Nový projekt
   label_project_plural: Projekty
   label_x_projects:
-    zero:  no projects
-    one:   1 project
-    other: "{{count}} projects"
+    zero:  žádné projekty
+    one:   1 projekt
+    other: "{{count}} projekty(ů)"
   label_project_all: Všechny projekty
   label_project_latest: Poslední projekty
   label_issue: Úkol
   label_issue_new: Nový úkol
   label_issue_plural: Úkoly
   label_issue_view_all: Všechny úkoly
-  label_issues_by: "Úkoly od uživatele {{value}}"
+  label_issues_by: "Úkoly podle {{value}}"
   label_issue_added: Úkol přidán
   label_issue_updated: Úkol aktualizován
   label_document: Dokument
@@ -335,7 +334,7 @@
   label_tracker: Fronta
   label_tracker_plural: Fronty
   label_tracker_new: Nová fronta
-  label_workflow: Workflow
+  label_workflow: Průběh práce
   label_issue_status: Stav úkolu
   label_issue_status_plural: Stavy úkolů
   label_issue_status_new: Nový stav
@@ -378,14 +377,14 @@
   label_list: Seznam
   label_date: Datum
   label_integer: Celé Äíslo
-  label_float: Desetiné Äíslo
+  label_float: Desetinné Äíslo
   label_boolean: Ano/Ne
   label_string: Text
   label_text: Dlouhý text
   label_attribute: Atribut
   label_attribute_plural: Atributy
-  label_download: "{{count}} Download"
-  label_download_plural: "{{count}} Downloads"
+  label_download: "{{count}} stažení"
+  label_download_plural: "{{count}} stažení"
   label_no_data: Žádné položky
   label_change_status: Změnit stav
   label_history: Historie
@@ -416,17 +415,17 @@
   label_closed_issues: uzavřený
   label_closed_issues_plural: uzavřené
   label_x_open_issues_abbr_on_total:
-    zero:  0 open / {{total}}
-    one:   1 open / {{total}}
-    other: "{{count}} open / {{total}}"
+    zero:  0 otevřených / {{total}}
+    one:   1 otevřený / {{total}}
+    other: "{{count}} otevřených / {{total}}"
   label_x_open_issues_abbr:
-    zero:  0 open
-    one:   1 open
-    other: "{{count}} open"
+    zero:  0 otevřených
+    one:   1 otevřený
+    other: "{{count}} otevřených"
   label_x_closed_issues_abbr:
-    zero:  0 closed
-    one:   1 closed
-    other: "{{count}} closed"
+    zero:  0 uzavřených
+    one:   1 uzavřený
+    other: "{{count}} uzavřených"
   label_total: Celkem
   label_permissions: Práva
   label_current_status: Aktuální stav
@@ -450,9 +449,9 @@
   label_comment: Komentář
   label_comment_plural: Komentáře
   label_x_comments:
-    zero: no comments
-    one: 1 comment
-    other: "{{count}} comments"
+    zero: žádné komentáře
+    one: 1 komentář
+    other: "{{count}} komentářů"
   label_comment_add: Přidat komentáře
   label_comment_added: Komentář přidán
   label_comment_delete: Odstranit komentář
@@ -482,8 +481,8 @@
   label_contains: obsahuje
   label_not_contains: neobsahuje
   label_day_plural: dny
-  label_repository: Repository
-  label_repository_plural: Repository
+  label_repository: Repozitář
+  label_repository_plural: Repozitáře
   label_browse: Procházet
   label_modification: "{{count}} změna"
   label_modification_plural: "{{count}} změn"
@@ -532,7 +531,7 @@
   label_diff_inline: uvnitÅ™
   label_diff_side_by_side: vedle sebe
   label_options: Nastavení
-  label_copy_workflow_from: Kopírovat workflow z
+  label_copy_workflow_from: Kopírovat průběh práce z
   label_permissions_report: Přehled práv
   label_watched_issues: Sledované úkoly
   label_related_issues: Související úkoly
@@ -553,7 +552,7 @@
   label_stay_logged_in: Zůstat přihlášený
   label_disabled: zakázán
   label_show_completed_versions: Ukázat dokonÄené verze
-  label_me: mÄ›
+  label_me: já
   label_board: Fórum
   label_board_new: Nové fórum
   label_board_plural: Fóra
@@ -576,18 +575,17 @@
   label_module_plural: Moduly
   label_added_time_by: "Přidáno uživatelem {{author}} před {{age}}"
   label_updated_time: "Aktualizováno před {{value}}"
-  label_jump_to_a_project: Zvolit projekt...
+  label_jump_to_a_project: Vyberte projekt...
   label_file_plural: Soubory
   label_changeset_plural: Changesety
   label_default_columns: Výchozí sloupce
   label_no_change_option: (beze změny)
-  label_bulk_edit_selected_issues: Bulk edit selected issues
+  label_bulk_edit_selected_issues: Hromadná úprava vybraných úkolů
   label_theme: Téma
   label_default: Výchozí
   label_search_titles_only: Vyhledávat pouze v názvech
   label_user_mail_option_all: "Pro všechny události všech mých projektů"
   label_user_mail_option_selected: "Pro všechny události vybraných projektů..."
-  label_user_mail_option_none: "Pouze pro události které sleduji nebo které se mne týkají"
   label_user_mail_no_self_notified: "Nezasílat informace o mnou vytvořených změnách"
   label_registration_activation_by_email: aktivace úÄtu emailem
   label_registration_manual_activation: manuální aktivace úÄtu
@@ -600,7 +598,7 @@
   label_scm: SCM
   label_plugins: Doplňky
   label_ldap_authentication: Autentifikace LDAP
-  label_downloads_abbr: D/L
+  label_downloads_abbr: Staž.
   label_optional_description: Volitelný popis
   label_add_another_file: Přidat další soubor
   label_preferences: Nastavení
@@ -653,33 +651,33 @@
   text_regexp_info: napÅ™. ^[A-Z0-9]+$
   text_min_max_length_info: 0 znamená bez limitu
   text_project_destroy_confirmation: Jste si jisti, že chcete odstranit tento projekt a všechna související data ?
-  text_workflow_edit: Vyberte roli a frontu k editaci workflow
+  text_workflow_edit: Vyberte roli a frontu k editaci průběhu práce
   text_are_you_sure: Jste si jisti?
-  text_tip_task_begin_day: úkol zaÄíná v tento den
-  text_tip_task_end_day: úkol konÄí v tento den
-  text_tip_task_begin_end_day: úkol zaÄíná a konÄí v tento den
+  text_tip_issue_begin_day: úkol zaÄíná v tento den
+  text_tip_issue_end_day: úkol konÄí v tento den
+  text_tip_issue_begin_end_day: úkol zaÄíná a konÄí v tento den
   text_project_identifier_info: 'Jsou povolena malá písmena (a-z), Äísla a pomlÄky.<br />Po uložení již není možné identifikátor zmÄ›nit.'
   text_caracters_maximum: "{{count}} znaků maximálně."
   text_caracters_minimum: "Musí být alespoň {{count}} znaků dlouhé."
   text_length_between: "Délka mezi {{min}} a {{max}} znaky."
-  text_tracker_no_workflow: Pro tuto frontu není definován žádný workflow
+  text_tracker_no_workflow: Pro tuto frontu není definován žádný průběh práce
   text_unallowed_characters: Nepovolené znaky
   text_comma_separated: Povoleno více hodnot (oddÄ›lÄ›né Äárkou).
-  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
+  text_issues_ref_in_commit_messages: Odkazování a opravování úkolů ve zprávách commitů
   text_issue_added: "Úkol {{id}} byl vytvořen uživatelem {{author}}."
   text_issue_updated: "Úkol {{id}} byl aktualizován uživatelem {{author}}."
-  text_wiki_destroy_confirmation: Opravdu si přejete odstranit tuto WIKI a celý její obsah?
+  text_wiki_destroy_confirmation: Opravdu si přejete odstranit tuto Wiki a celý její obsah?
   text_issue_category_destroy_question: "Některé úkoly ({{count}}) jsou přiřazeny k této kategorii. Co s nimi chtete udělat?"
   text_issue_category_destroy_assignments: Zrušit přiřazení ke kategorii
   text_issue_category_reassign_to: Přiřadit úkoly do této kategorie
   text_user_mail_option: "U projektů, které nebyly vybrány, budete dostávat oznámení pouze o vaÅ¡ich Äi o sledovaných položkách (napÅ™. o položkách jejichž jste autor nebo ke kterým jste pÅ™iÅ™azen(a))."
-  text_no_configuration_data: "Role, fronty, stavy úkolů ani workflow nebyly zatím nakonfigurovány.\nVelice doporuÄujeme nahrát výchozí konfiguraci.Po té si můžete vÅ¡e upravit"
+  text_no_configuration_data: "Role, fronty, stavy úkolů ani průbÄ›h práce nebyly zatím nakonfigurovány.\nVelice doporuÄujeme nahrát výchozí konfiguraci. Po té si můžete vÅ¡e upravit"
   text_load_default_configuration: Nahrát výchozí konfiguraci
   text_status_changed_by_changeset: "Použito v changesetu {{value}}."
   text_issues_destroy_confirmation: 'Opravdu si přejete odstranit všechny zvolené úkoly?'
   text_select_project_modules: 'Aktivní moduly v tomto projektu:'
   text_default_administrator_account_changed: Výchozí nastavení administrátorského úÄtu zmÄ›nÄ›no
-  text_file_repository_writable: Povolen zápis do repository
+  text_file_repository_writable: Povolen zápis do adresáře ukládání souborů
   text_rmagick_available: RMagick k dispozici (volitelné)
   text_destroy_time_entries_question: "U úkolů, které chcete odstranit je evidováno {{hours}} práce. Co chete udělat?"
   text_destroy_time_entries: Odstranit evidované hodiny.
@@ -693,7 +691,7 @@
   default_tracker_feature: Požadavek
   default_tracker_support: Podpora
   default_issue_status_new: Nový
-  default_issue_status_in_progress: In Progress
+  default_issue_status_in_progress: Ve vývoji
   default_issue_status_resolved: Vyřešený
   default_issue_status_feedback: Čeká se
   default_issue_status_closed: Uzavřený
@@ -705,7 +703,7 @@
   default_priority_high: Vysoká
   default_priority_urgent: Urgentní
   default_priority_immediate: Okamžitá
-  default_activity_design: Design
+  default_activity_design: Návhr
   default_activity_development: Vývoj
   
   enumeration_issue_priorities: Priority úkolů
@@ -718,8 +716,8 @@
   mail_body_reminder: "{{count}} úkol(ů), které máte přiřazeny má termín během několik dní ({{days}}):"
   mail_subject_reminder: "{{count}} úkol(ů) má termín během několik dní ({{days}})"
   text_user_wrote: "{{value}} napsal:"
-  label_duplicated_by: duplicated by
-  setting_enabled_scm: Povoleno SCM
+  label_duplicated_by: duplikováno od
+  setting_enabled_scm: Povolené SCM
   text_enumeration_category_reassign_to: 'Přeřadit je do této:'
   text_enumeration_destroy_question: "Několik ({{count}}) objektů je přiřazeno k této hodnotě."
   label_incoming_emails: Příchozí e-maily
@@ -745,22 +743,22 @@
   permission_view_changesets: Zobrazování sady změn
   permission_view_time_entries: Zobrazení stráveného Äasu
   permission_manage_versions: Spravování verzí
-  permission_manage_wiki: Spravování wiki
+  permission_manage_wiki: Spravování Wiki
   permission_manage_categories: Spravování kategorií úkolů
-  permission_protect_wiki_pages: ZabezpeÄení wiki stránek
+  permission_protect_wiki_pages: ZabezpeÄení Wiki stránek
   permission_comment_news: Komentování novinek
   permission_delete_messages: Mazání zpráv
   permission_select_project_modules: Výběr modulů projektu
   permission_manage_documents: Správa dokumentů
-  permission_edit_wiki_pages: Upravování stránek wiki
+  permission_edit_wiki_pages: Upravování stránek Wiki
   permission_add_issue_watchers: Přidání sledujících uživatelů
   permission_view_gantt: Zobrazené Ganttova diagramu
   permission_move_issues: Přesouvání úkolů
   permission_manage_issue_relations: Spravování vztahů mezi úkoly
-  permission_delete_wiki_pages: Mazání stránek na wiki
+  permission_delete_wiki_pages: Mazání stránek na Wiki
   permission_manage_boards: Správa diskusních fór
   permission_delete_wiki_pages_attachments: Mazání příloh
-  permission_view_wiki_edits: Prohlížení historie wiki
+  permission_view_wiki_edits: Prohlížení historie Wiki
   permission_add_messages: Posílání zpráv
   permission_view_messages: Prohlížení zpráv
   permission_manage_files: Spravování souborů
@@ -772,26 +770,26 @@
   permission_delete_issues: Mazání úkolů
   permission_view_issue_watchers: Zobrazení seznamu sledujícíh uživatelů
   permission_manage_repository: Spravování repozitáře
-  permission_commit_access: Commit access
+  permission_commit_access: Commit přístup
   permission_browse_repository: Procházení repozitáře
   permission_view_documents: Prohlížení dokumentů
   permission_edit_project: Úprava projektů
   permission_add_issue_notes: Přidávání poznámek
   permission_save_queries: Ukládání dotazů
-  permission_view_wiki_pages: Prohlížení wiki
-  permission_rename_wiki_pages: Přejmenovávání wiki stránek
+  permission_view_wiki_pages: Prohlížení Wiki
+  permission_rename_wiki_pages: Přejmenovávání Wiki stránek
   permission_edit_time_entries: Upravování záznamů o stráveném Äasu
   permission_edit_own_issue_notes: Upravování vlastních poznámek
   setting_gravatar_enabled: Použít uživatelské ikony Gravatar
   label_example: Příklad
-  text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé  se shodným Redmine uživateslkým jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
+  text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživatelským jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
   permission_edit_own_messages: Upravit vlastní zprávy
   permission_delete_own_messages: Smazat vlastní zprávy
   label_user_activity: "Aktivita uživatele: {{value}}"
   label_updated_time_by: "Akutualizováno: {{author}} před: {{age}}"
   text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.'
   setting_diff_max_lines_displayed: Maximální poÄet zobrazenách řádků rozdílů
-  text_plugin_assets_writable: Plugin assets directory writable
+  text_plugin_assets_writable: Možnost zápisu do adresáře plugin assets
   warning_attachments_not_saved: "{{count}} soubor(ů) nebylo možné uložit."
   button_create_and_continue: VytvoÅ™it a pokraÄovat
   text_custom_field_possible_values_info: 'Každá hodnota na novém řádku'
@@ -810,111 +808,122 @@
   label_date_from_to: Od {{start}} do {{end}}
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do?
-  text_wiki_page_reassign_children: Reassign child pages to this parent page
-  text_wiki_page_nullify_children: Keep child pages as root pages
-  text_wiki_page_destroy_children: Delete child pages and all their descendants
-  setting_password_min_length: Minimum password length
-  field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
-  label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
-  permission_add_project: Create project
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  label_view_all_revisions: View all revisions
+  text_wiki_page_destroy_question: Tato stránka má {{descendants}} podstránek a potomků. Co chcete udělat?
+  text_wiki_page_reassign_children: PÅ™iÅ™adit podstránky k tomuto rodiÄi
+  text_wiki_page_nullify_children: Ponechat podstránky jako kořenové stránky
+  text_wiki_page_destroy_children: Smazat podstránky a všechny jejich potomky
+  setting_password_min_length: Minimální délka hesla
+  field_group_by: Seskupovat výsledky podle
+  mail_subject_wiki_content_updated: "'{{id}}' Wiki stránka byla aktualizována"
+  label_wiki_content_added: Wiki stránka přidána
+  mail_subject_wiki_content_added: "'{{id}}' Wiki stránka byla přidána"
+  mail_body_wiki_content_added: "'{{id}}' Wiki stránka byla přidána od {{author}}."
+  label_wiki_content_updated: Wiki stránka aktualizována
+  mail_body_wiki_content_updated: "'{{id}}' Wiki stránka byla aktualizována od {{author}}."
+  permission_add_project: Vytvořit projekt
+  setting_new_project_user_role_id: Role přiřazená uživateli bez práv administrátora, který projekt vytvořil
+  label_view_all_revisions: Zobrazit všechny revize
   label_tag: Tag
   label_branch: Branch
-  error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
-  error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
-  text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
-  text_journal_set_to: "{{label}} set to {{value}}"
-  text_journal_deleted: "{{label}} deleted ({{old}})"
-  label_group_plural: Groups
-  label_group: Group
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  text_journal_added: "{{label}} {{value}} added"
-  field_active: Active
-  enumeration_system_activity: System Activity
-  permission_delete_issue_watchers: Delete watchers
-  version_status_closed: closed
-  version_status_locked: locked
-  version_status_open: open
-  error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
-  label_user_anonymous: Anonymous
-  button_move_and_follow: Move and follow
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_gravatar_default: Default Gravatar image
-  field_sharing: Sharing
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_system: With all projects
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_tree: With project tree
-  label_version_sharing_none: Not shared
-  error_can_not_archive_project: This project can not be archived
-  button_duplicate: Duplicate
-  button_copy_and_follow: Copy and follow
-  label_copy_source: Source
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_status: Use the issue status
-  error_issue_done_ratios_not_updated: Issue done ratios not updated.
-  error_workflow_copy_target: Please select target tracker(s) and role(s)
-  setting_issue_done_ratio_issue_field: Use the issue field
-  label_copy_same_as_target: Same as target
-  label_copy_target: Target
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  error_workflow_copy_source: Please select a source tracker or role
-  label_update_issue_done_ratios: Update issue done ratios
-  setting_start_of_week: Start calendars on
-  permission_view_issues: View Issues
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_revision_id: Revision {{value}}
-  label_api_access_key: API access key
-  label_api_access_key_created_on: API access key created {{value}} ago
-  label_feeds_access_key: RSS access key
-  notice_api_access_key_reseted: Your API access key was reset.
-  setting_rest_api_enabled: Enable REST web service
-  label_missing_api_access_key: Missing an API access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  button_show: Show
-  text_line_separated: Multiple values allowed (one line for each value).
-  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
-  permission_add_subprojects: Create subprojects
-  label_subproject_new: New subproject
+  error_no_tracker_in_project: Žádná fronta nebyla přiřazena tomuto projektu. Prosím zkontroluje nastavení projektu.
+  error_no_default_issue_status: Není nastaven výchozí stav úkolu. Prosím zkontrolujte nastavení ("Administrace -> Stavy úkolů").
+  text_journal_changed: "{{label}} změněn z {{old}} na {{new}}"
+  text_journal_set_to: "{{label}} nastaven na {{value}}"
+  text_journal_deleted: "{{label}} smazán ({{old}})"
+  label_group_plural: Skupiny
+  label_group: Skupina
+  label_group_new: Nová skupina
+  label_time_entry_plural: Strávený Äas
+  text_journal_added: "{{label}} {{value}} přidán"
+  field_active: Aktivní
+  enumeration_system_activity: Systémová aktivita
+  permission_delete_issue_watchers: Smazat přihlížející
+  version_status_closed: zavřený
+  version_status_locked: uzamÄený
+  version_status_open: otevřený
+  error_can_not_reopen_issue_on_closed_version: Úkol přiřazený k uzavřené verzi nemůže být znovu otevřen
+  label_user_anonymous: Anonymní
+  button_move_and_follow: Přesunout a následovat
+  setting_default_projects_modules: Výchozí zapnutné moduly pro nový projekt
+  setting_gravatar_default: Výchozí Gravatar
+  field_sharing: Sdílení
+  label_version_sharing_hierarchy: S hierarchií projektu
+  label_version_sharing_system: Se všemi projekty
+  label_version_sharing_descendants: S podprojekty
+  label_version_sharing_tree: Se stromem projektu
+  label_version_sharing_none: Nesdíleno
+  error_can_not_archive_project: Tento projekt nemůže být archivován
+  button_duplicate: Duplikát
+  button_copy_and_follow: Kopírovat a následovat
+  label_copy_source: Zdroj
+  setting_issue_done_ratio: SpoÄítat koeficient dokonÄení úkolu s
+  setting_issue_done_ratio_issue_status: Použít stav úkolu
+  error_issue_done_ratios_not_updated: Koeficient dokonÄení úkolu nebyl aktualizován.
+  error_workflow_copy_target: Prosím vyberte cílovou frontu(y) a roly(e)
+  setting_issue_done_ratio_issue_field: Použít pole úkolu
+  label_copy_same_as_target: Stejný jako cíl
+  label_copy_target: Cíl
+  notice_issue_done_ratios_updated: Koeficienty dokonÄení úkolu byly aktualizovány.
+  error_workflow_copy_source: Prosím vyberte zdrojovou frontu nebo roly
+  label_update_issue_done_ratios: Aktualizovat koeficienty dokonÄení úkolů
+  setting_start_of_week: ZaÄínat kalendáře
+  permission_view_issues: Zobrazit úkoly
+  label_display_used_statuses_only: Zobrazit pouze stavy které jsou použité touto frontou
+  label_revision_id: Revize {{value}}
+  label_api_access_key: API přístupový klíÄ
+  label_api_access_key_created_on: API přístupový klÃ­Ä vytvoÅ™en {{value}} 
+  label_feeds_access_key: RSS přístupový klíÄ
+  notice_api_access_key_reseted: Váš API přístupový klÃ­Ä byl resetován.
+  setting_rest_api_enabled: Zapnout službu REST
+  label_missing_api_access_key: ChybÄ›jící přístupový klÃ­Ä API
+  label_missing_feeds_access_key: ChybÄ›jící přístupový klÃ­Ä RSS
+  button_show: Zobrazit
+  text_line_separated: Více hodnot povoleno (jeden řádek pro každou hodnotu).
+  setting_mail_handler_body_delimiters: Zkrátit e-maily po jednom z těchto řádků
+  permission_add_subprojects: Vytvořit podprojekty
+  label_subproject_new: Nový podprojekt
   text_own_membership_delete_confirmation: |-
-    You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
-    Are you sure you want to continue?
-  label_close_versions: Close completed versions
-  label_board_sticky: Sticky
-  label_board_locked: Locked
-  permission_export_wiki_pages: Export wiki pages
-  setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Manage project activities
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_profile: Profile
-  permission_manage_subtasks: Manage subtasks
-  field_parent_issue: Parent task
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect ({{value}})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
+    Chystáte se odebrat si některá nebo všechny svá oprávnění a potom již nemusíte být schopni upravit tento projekt.
+    Opravdu chcete pokraÄovat?
+  label_close_versions: Zavřít dokonÄené verze
+  label_board_sticky: Nálepka
+  label_board_locked: UzamÄeno
+  permission_export_wiki_pages: Exportovat Wiki stránky
+  setting_cache_formatted_text: Ukládat formátovaný text do vyrovnávací paměti
+  permission_manage_project_activities: Spravovat aktivity projektu
+  error_unable_delete_issue_status: Nelze smazat stavy úkolů
+  label_profile: Profil
+  permission_manage_subtasks: Spravovat podúkoly
+  field_parent_issue: RodiÄovský úkol
+  label_subtask_plural: Podúkol
+  label_project_copy_notifications: Odeslat email oznámení v průběhu kopie projektu
+  error_can_not_delete_custom_field: Nelze smazat volitelné pole
+  error_unable_to_connect: Nelze se připojit ({{value}})
+  error_can_not_remove_role: Tato role je právě používaná a nelze ji smazat.
+  error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nemůže být smazán.
+  field_principal: Hlavní
+  label_my_page_block: Bloky na mé stránce
+  notice_failed_to_save_members: "NepodaÅ™ilo se uložit Älena(y): {{errors}}."
+  text_zoom_out: Oddálit
+  text_zoom_in: Přiblížit
+  notice_unable_delete_time_entry: Nelze smazat Äas ze záznamu.
+  label_overall_spent_time: CelkovÄ› strávený Äas
+  field_time_entries: Zaznamenaný Äas
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  project_module_calendar: Kalendář
+  button_edit_associated_wikipage: "Upravit přiřazenou Wiki stránku: {{page_title}}"
+  text_are_you_sure_with_children: Smazat úkol vÄetnÄ› vÅ¡ech podúkolů?
+  field_text: Textové pole
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/da.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/da.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -250,7 +250,6 @@
   field_attr_lastname: Efternavn attribut
   field_attr_mail: Email attribut
   field_onthefly: løbende brugeroprettelse
-  field_start_date: Start
   field_done_ratio: % Færdig
   field_auth_source: Sikkerhedsmetode
   field_hide_mail: Skjul min email
@@ -594,7 +593,6 @@
   label_search_titles_only: Søg kun i titler
   label_user_mail_option_all: "For alle hændelser på mine projekter"
   label_user_mail_option_selected: "For alle hændelser på de valgte projekter..."
-  label_user_mail_option_none: "Kun for ting jeg overvåger eller jeg er involveret i"
   label_user_mail_no_self_notified: "Jeg ønsker ikke besked om ændring foretaget af mig selv"
   label_registration_activation_by_email: kontoaktivering på email
   label_registration_manual_activation: manuel kontoaktivering
@@ -657,9 +655,9 @@
   text_project_destroy_confirmation: Er du sikker på at du vil slette dette projekt og alle relaterede data?
   text_workflow_edit: Vælg en rolle samt en type, for at redigere arbejdsgangen
   text_are_you_sure: Er du sikker?
-  text_tip_task_begin_day: opgaven begynder denne dag
-  text_tip_task_end_day: opaven slutter denne dag
-  text_tip_task_begin_end_day: opgaven begynder og slutter denne dag
+  text_tip_issue_begin_day: opgaven begynder denne dag
+  text_tip_issue_end_day: opaven slutter denne dag
+  text_tip_issue_begin_end_day: opgaven begynder og slutter denne dag
   text_project_identifier_info: 'Små bogstaver (a-z), numre og bindestreg er tilladt.<br />Denne er en unik identifikation for projektet, og kan defor ikke rettes senere.'
   text_caracters_maximum: "max {{count}} karakterer."
   text_caracters_minimum: "Skal være mindst {{count}} karakterer lang."
@@ -832,12 +830,12 @@
   text_wiki_page_destroy_children: Slet undersider ogalle deres afledte sider.
   setting_password_min_length: Mindste længde på kodeord
   field_group_by: Gruppér resultater efter
-  mail_subject_wiki_content_updated: "'{{page}}' wikisiden er blevet opdateret"
+  mail_subject_wiki_content_updated: "'{{id}}' wikisiden er blevet opdateret"
   label_wiki_content_added: Wiki side tilføjet
-  mail_subject_wiki_content_added: "'{{page}}' wikisiden er blevet tilføjet"
-  mail_body_wiki_content_added: The '{{page}}' wikiside er blevet tilføjet af {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wikisiden er blevet tilføjet"
+  mail_body_wiki_content_added: The '{{id}}' wikiside er blevet tilføjet af {{author}}.
   label_wiki_content_updated: Wikiside opdateret
-  mail_body_wiki_content_updated: Wikisiden '{{page}}' er blevet opdateret af {{author}}.
+  mail_body_wiki_content_updated: Wikisiden '{{id}}' er blevet opdateret af {{author}}.
   permission_add_project: Opret projekt
   setting_new_project_user_role_id: Denne rolle gives til en bruger, som ikke er administrator, og som opretter et projekt
   label_view_all_revisions: Se alle revisioner
@@ -929,8 +927,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/de.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/de.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -211,10 +211,10 @@
   mail_body_account_activation_request: "Ein neuer Benutzer ({{value}}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:"
   mail_subject_reminder: "{{count}} Tickets müssen in den nächsten {{days}} Tagen abgegeben werden"
   mail_body_reminder: "{{count}} Tickets, die Ihnen zugewiesen sind, müssen in den nächsten {{days}} Tagen abgegeben werden:"
-  mail_subject_wiki_content_added: "Wiki-Seite '{{page}}' hinzugefügt"
-  mail_body_wiki_content_added: "Die Wiki-Seite '{{page}}' wurde von {{author}} hinzugefügt."
-  mail_subject_wiki_content_updated: "Wiki-Seite '{{page}}' erfolgreich aktualisiert"
-  mail_body_wiki_content_updated: "Die Wiki-Seite '{{page}}' wurde von {{author}} aktualisiert."
+  mail_subject_wiki_content_added: "Wiki-Seite '{{id}}' hinzugefügt"
+  mail_body_wiki_content_added: "Die Wiki-Seite '{{id}}' wurde von {{author}} hinzugefügt."
+  mail_subject_wiki_content_updated: "Wiki-Seite '{{id}}' erfolgreich aktualisiert"
+  mail_body_wiki_content_updated: "Die Wiki-Seite '{{id}}' wurde von {{author}} aktualisiert."
 
   gui_validation_error: 1 Fehler
   gui_validation_error_plural: "{{count}} Fehler"
@@ -280,7 +280,6 @@
   field_attr_lastname: Name-Attribut
   field_attr_mail: E-Mail-Attribut
   field_onthefly: On-the-fly-Benutzererstellung
-  field_start_date: Beginn
   field_done_ratio: % erledigt
   field_auth_source: Authentifizierungs-Modus
   field_hide_mail: E-Mail-Adresse nicht anzeigen
@@ -741,7 +740,6 @@
   label_search_titles_only: Nur Titel durchsuchen
   label_user_mail_option_all: "Für alle Ereignisse in all meinen Projekten"
   label_user_mail_option_selected: "Für alle Ereignisse in den ausgewählten Projekten..."
-  label_user_mail_option_none: "Nur für Dinge, die ich beobachte oder an denen ich beteiligt bin"
   label_user_mail_no_self_notified: "Ich möchte nicht über Änderungen benachrichtigt werden, die ich selbst durchführe."
   label_registration_activation_by_email: Kontoaktivierung durch E-Mail
   label_registration_manual_activation: Manuelle Kontoaktivierung
@@ -792,6 +790,8 @@
   label_profile: Profil
   label_subtask_plural: Unteraufgaben
   label_project_copy_notifications: Sende Mailbenachrichtigungen beim Kopieren des Projekts.
+  label_principal_search: "Nach Benutzer oder Gruppe suchen:"
+  label_user_search: "Nach Benutzer suchen:"
   
   button_login: Anmelden
   button_submit: OK
@@ -800,7 +800,7 @@
   button_uncheck_all: Alles abwählen
   button_delete: Löschen
   button_create: Anlegen
-  button_create_and_continue: Anlegen + nächstes Ticket
+  button_create_and_continue: Anlegen und weiter
   button_test: Testen
   button_edit: Bearbeiten
   button_edit_associated_wikipage: "Zugehörige Wikiseite bearbeiten: {{page_title}}"
@@ -832,7 +832,7 @@
   button_copy: Kopieren
   button_copy_and_follow: Kopieren und Ticket anzeigen
   button_annotate: Annotieren
-  button_update: Aktualisieren
+  button_update: Bearbeiten
   button_configure: Konfigurieren
   button_quote: Zitieren
   button_duplicate: Duplizieren
@@ -859,9 +859,9 @@
   text_journal_set_to: "{{label}} wurde auf {{value}} gesetzt"
   text_journal_deleted: "{{label}} {{old}} wurde gelöscht"
   text_journal_added: "{{label}} {{value}} wurde hinzugefügt"
-  text_tip_task_begin_day: Aufgabe, die an diesem Tag beginnt
-  text_tip_task_end_day: Aufgabe, die an diesem Tag endet
-  text_tip_task_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet
+  text_tip_issue_begin_day: Aufgabe, die an diesem Tag beginnt
+  text_tip_issue_end_day: Aufgabe, die an diesem Tag endet
+  text_tip_issue_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet
   text_project_identifier_info: 'Kleinbuchstaben (a-z), Ziffern und Bindestriche erlaubt.<br />Einmal gespeichert, kann die Kennung nicht mehr geändert werden.'
   text_caracters_maximum: "Max. {{count}} Zeichen."
   text_caracters_minimum: "Muss mindestens {{count}} Zeichen lang sein."
@@ -933,7 +933,16 @@
   enumeration_activities: Aktivitäten (Zeiterfassung)
   enumeration_system_activity: System-Aktivität
 
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  field_start_date: Start date
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/el.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/el.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -179,10 +179,10 @@
   mail_body_account_activation_request: "'Ένας νέος χÏήστης ({{value}}) έχει εγγÏαφεί. Ο λογαÏιασμός είναι σε στάδιο αναμονής της έγκÏισης σας:"
   mail_subject_reminder: "{{count}} θέμα(τα) με Ï€Ïοθεσμία στις επόμενες {{days}} ημέÏες"
   mail_body_reminder: "{{count}}θέμα(τα)  που έχουν ανατεθεί σε σας, με Ï€Ïοθεσμία στις επόμενες {{days}} ημέÏες:"
-  mail_subject_wiki_content_added: "'Ï€Ïοστέθηκε η σελίδα wiki {{page}}' "
-  mail_body_wiki_content_added: "Η σελίδα wiki '{{page}}' Ï€Ïοστέθηκε από τον {{author}}."
-  mail_subject_wiki_content_updated: "'ενημεÏώθηκε η σελίδα wiki {{page}}' "
-  mail_body_wiki_content_updated: "Η σελίδα wiki  '{{page}}' ενημεÏώθηκε από τον {{author}}."
+  mail_subject_wiki_content_added: "'Ï€Ïοστέθηκε η σελίδα wiki {{id}}' "
+  mail_body_wiki_content_added: "Η σελίδα wiki '{{id}}' Ï€Ïοστέθηκε από τον {{author}}."
+  mail_subject_wiki_content_updated: "'ενημεÏώθηκε η σελίδα wiki {{id}}' "
+  mail_body_wiki_content_updated: "Η σελίδα wiki  '{{id}}' ενημεÏώθηκε από τον {{author}}."
   
   gui_validation_error: 1 σφάλμα
   gui_validation_error_plural: "{{count}} σφάλματα"
@@ -247,7 +247,6 @@
   field_attr_lastname:  Ιδιότητα επωνÏμου
   field_attr_mail: Ιδιότητα email
   field_onthefly: Άμεση δημιουÏγία χÏήστη
-  field_start_date: Εκκίνηση
   field_done_ratio: % επιτεÏχθη
   field_auth_source: ΤÏόπος πιστοποίησης
   field_hide_mail: ΑπόκÏυψη διεÏθυνσης email
@@ -678,7 +677,6 @@
   label_search_titles_only: Αναζήτηση τίτλων μόνο
   label_user_mail_option_all: "Για όλες τις εξελίξεις σε όλα τα έÏγα μου"
   label_user_mail_option_selected: "Για όλες τις εξελίξεις μόνο στα επιλεγμένα έÏγα..."
-  label_user_mail_option_none: "Μόνο για Ï€Ïάγματα που παÏακολουθώ ή συμμετέχω ενεÏγά"
   label_user_mail_no_self_notified: "Δεν θέλω να ειδοποιοÏμαι για τις δικές μου αλλαγές"
   label_registration_activation_by_email: ενεÏγοποίηση λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï Î¼Îµ email
   label_registration_manual_activation: χειÏοκίνητη ενεÏγοποίηση λογαÏιασμοÏ
@@ -761,9 +759,9 @@
   text_subprojects_destroy_warning: "Επίσης το(α) επιμέÏους έÏγο(α): {{value}}  θα διαγÏαφοÏν."
   text_workflow_edit: Επιλέξτε ένα Ïόλο και έναν ανιχνευτή για να επεξεÏγαστείτε  τη Ïοή εÏγασίας
   text_are_you_sure: Είστε σίγουÏος ;
-  text_tip_task_begin_day: καθήκοντα που ξεκινάνε σήμεÏα
-  text_tip_task_end_day: καθήκοντα που τελειώνουν σήμεÏα
-  text_tip_task_begin_end_day: καθήκοντα που ξεκινάνε και τελειώνουν σήμεÏα
+  text_tip_issue_begin_day: καθήκοντα που ξεκινάνε σήμεÏα
+  text_tip_issue_end_day: καθήκοντα που τελειώνουν σήμεÏα
+  text_tip_issue_begin_end_day: καθήκοντα που ξεκινάνε και τελειώνουν σήμεÏα
   text_project_identifier_info: 'ΕπιτÏέπονται μόνο μικÏά πεζά γÏάμματα (a-z), αÏιθμοί και παÏλες. <br /> Μετά την αποθήκευση, το αναγνωÏιστικό δεν μποÏεί να αλλάξει.'
   text_caracters_maximum: "μέγιστος αÏιθμός {{count}} χαÏακτήÏες."
   text_caracters_minimum: "ΠÏέπει να πεÏιέχει τουλάχιστον {{count}} χαÏακτήÏες."
@@ -913,8 +911,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/en-GB.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/en-GB.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -84,7 +84,7 @@
           byte:
             one: "Byte"
             other: "Bytes"
-          kb: "KB"
+          kb: "kB"
           mb: "MB"
           gb: "GB"
           tb: "TB"
@@ -189,10 +189,10 @@
   mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:"
   mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
   mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}."
   
   gui_validation_error: 1 error
   gui_validation_error_plural: "{{count}} errors"
@@ -257,7 +257,7 @@
   field_attr_lastname: Lastname attribute
   field_attr_mail: Email attribute
   field_onthefly: On-the-fly user creation
-  field_start_date: Start
+  field_start_date: Start date
   field_done_ratio: % Done
   field_auth_source: Authentication mode
   field_hide_mail: Hide my email address
@@ -711,7 +711,7 @@
   label_search_titles_only: Search titles only
   label_user_mail_option_all: "For any event on all my projects"
   label_user_mail_option_selected: "For any event on the selected projects only..."
-  label_user_mail_option_none: "Only for things I watch or I'm involved in"
+  label_user_mail_option_none: "No events"
   label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
   label_registration_activation_by_email: account activation by email
   label_registration_manual_activation: manual account activation
@@ -825,9 +825,9 @@
   text_journal_set_to: "{{label}} set to {{value}}"
   text_journal_deleted: "{{label}} deleted ({{old}})"
   text_journal_added: "{{label}} {{value}} added"
-  text_tip_task_begin_day: task beginning this day
-  text_tip_task_end_day: task ending this day
-  text_tip_task_begin_end_day: task beginning and ending this day
+  text_tip_issue_begin_day: task beginning this day
+  text_tip_issue_end_day: task ending this day
+  text_tip_issue_begin_end_day: task beginning and ending this day
   text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
   text_caracters_maximum: "{{count}} characters maximum."
   text_caracters_minimum: "Must be at least {{count}} characters long."
@@ -922,3 +922,12 @@
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/en.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/en.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -81,7 +81,7 @@
           byte:
             one: "Byte"
             other: "Bytes"
-          kb: "KB"
+          kb: "kB"
           mb: "MB"
           gb: "GB"
           tb: "TB"
@@ -150,6 +150,7 @@
   notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
   notice_locking_conflict: Data has been updated by another user.
   notice_not_authorized: You are not authorized to access this page.
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
   notice_email_sent: "An email was sent to {{value}}"
   notice_email_error: "An error occurred while sending mail ({{value}})"
   notice_feeds_access_key_reseted: Your RSS access key was reset.
@@ -192,10 +193,10 @@
   mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:"
   mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
   mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}."
   
   gui_validation_error: 1 error
   gui_validation_error_plural: "{{count}} errors"
@@ -261,7 +262,7 @@
   field_attr_lastname: Lastname attribute
   field_attr_mail: Email attribute
   field_onthefly: On-the-fly user creation
-  field_start_date: Start
+  field_start_date: Start date
   field_done_ratio: % Done
   field_auth_source: Authentication mode
   field_hide_mail: Hide my email address
@@ -293,9 +294,10 @@
   field_group_by: Group results by
   field_sharing: Sharing
   field_parent_issue: Parent task
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
+  field_member_of_group: "Assignee's group"
+  field_assigned_to_role: "Assignee's role"
   field_text: Text field
+  field_visible: Visible
   
   setting_app_title: Application title
   setting_app_subtitle: Application subtitle
@@ -324,6 +326,7 @@
   setting_issue_list_default_columns: Default columns displayed on the issue list
   setting_repositories_encodings: Repositories encodings
   setting_commit_logs_encoding: Commit messages encoding
+  setting_emails_header: Emails header
   setting_emails_footer: Emails footer
   setting_protocol: Protocol
   setting_per_page_options: Objects per page options
@@ -350,6 +353,7 @@
   setting_start_of_week: Start calendars on
   setting_rest_api_enabled: Enable REST web service
   setting_cache_formatted_text: Cache formatted text
+  setting_default_notification_option: Default notification option
   
   permission_add_project: Create project
   permission_add_subprojects: Create subprojects
@@ -725,7 +729,10 @@
   label_search_titles_only: Search titles only
   label_user_mail_option_all: "For any event on all my projects"
   label_user_mail_option_selected: "For any event on the selected projects only..."
-  label_user_mail_option_none: "Only for things I watch or I'm involved in"
+  label_user_mail_option_none: "No events"
+  label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in"
+  label_user_mail_option_only_assigned: "Only for things I am assigned to"
+  label_user_mail_option_only_owner: "Only for things I am the owner of"
   label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
   label_registration_activation_by_email: account activation by email
   label_registration_manual_activation: manual account activation
@@ -776,6 +783,8 @@
   label_profile: Profile
   label_subtask_plural: Subtasks
   label_project_copy_notifications: Send email notifications during the project copy
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
   
   button_login: Login
   button_submit: Submit
@@ -844,9 +853,9 @@
   text_journal_set_to: "{{label}} set to {{value}}"
   text_journal_deleted: "{{label}} deleted ({{old}})"
   text_journal_added: "{{label}} {{value}} added"
-  text_tip_task_begin_day: task beginning this day
-  text_tip_task_end_day: task ending this day
-  text_tip_task_begin_end_day: task beginning and ending this day
+  text_tip_issue_begin_day: issue beginning this day
+  text_tip_issue_end_day: issue ending this day
+  text_tip_issue_begin_end_day: issue beginning and ending this day
   text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
   text_caracters_maximum: "{{count}} characters maximum."
   text_caracters_minimum: "Must be at least {{count}} characters long."
--- a/config/locales/es.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/es.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -313,7 +313,6 @@
   field_role: Perfil
   field_searchable: Incluir en las búsquedas
   field_spent_on: Fecha
-  field_start_date: Fecha de inicio
   field_start_page: Página principal
   field_status: Estado
   field_subject: Tema
@@ -636,7 +635,6 @@
   label_user_activity: "Actividad de {{value}}"
   label_user_mail_no_self_notified: "No quiero ser avisado de cambios hechos por mí"
   label_user_mail_option_all: "Para cualquier evento en todos mis proyectos"
-  label_user_mail_option_none: "Sólo para elementos monitorizados o relacionados conmigo"
   label_user_mail_option_selected: "Para cualquier evento de los proyectos seleccionados..."
   label_user_new: Nuevo usuario
   label_user_plural: Usuarios
@@ -821,9 +819,9 @@
   text_select_project_modules: 'Seleccione los módulos a activar para este proyecto:'
   text_status_changed_by_changeset: "Aplicado en los cambios {{value}}"
   text_subprojects_destroy_warning: "Los proyectos secundarios: {{value}} también se eliminarán"
-  text_tip_task_begin_day: tarea que comienza este día
-  text_tip_task_begin_end_day: tarea que comienza y termina este día
-  text_tip_task_end_day: tarea que termina este día
+  text_tip_issue_begin_day: tarea que comienza este día
+  text_tip_issue_begin_end_day: tarea que comienza y termina este día
+  text_tip_issue_end_day: tarea que termina este día
   text_tracker_no_workflow: No hay ningún flujo de trabajo definido para este tipo de petición
   text_unallowed_characters: Caracteres no permitidos
   text_user_mail_option: "De los proyectos no seleccionados, sólo recibirá notificaciones sobre elementos monitorizados o elementos en los que esté involucrado (por ejemplo, peticiones de las que usted sea autor o asignadas a usted)."
@@ -855,12 +853,12 @@
   text_wiki_page_destroy_children: Eliminar páginas hijas y todos sus descendientes
   setting_password_min_length: Longitud mínima de la contraseña
   field_group_by: Agrupar resultados por
-  mail_subject_wiki_content_updated: "La página wiki '{{page}}' ha sido actualizada"
+  mail_subject_wiki_content_updated: "La página wiki '{{id}}' ha sido actualizada"
   label_wiki_content_added: Página wiki añadida
-  mail_subject_wiki_content_added: "Se ha añadido la página wiki '{{page}}'."
-  mail_body_wiki_content_added: "{{author}} ha añadido la página wiki '{{page}}'."
+  mail_subject_wiki_content_added: "Se ha añadido la página wiki '{{id}}'."
+  mail_body_wiki_content_added: "{{author}} ha añadido la página wiki '{{id}}'."
   label_wiki_content_updated: Página wiki actualizada
-  mail_body_wiki_content_updated: La página wiki '{{page}}' ha sido actualizada por {{author}}.
+  mail_body_wiki_content_updated: La página wiki '{{id}}' ha sido actualizada por {{author}}.
   permission_add_project: Crear proyecto
   setting_new_project_user_role_id: Permiso asignado a un usuario no-administrador para crear proyectos
   label_view_all_revisions: Ver todas las revisiones
@@ -953,8 +951,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/eu.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/eu.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -188,10 +188,10 @@
   mail_body_account_activation_request: "Erabiltzaile berri bat ({{value}}) erregistratu da. Kontua zure onarpenaren zain dago:"
   mail_subject_reminder: "{{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a"
   mail_body_reminder: "Zuri esleituta dauden {{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki orria gehitu da"
-  mail_body_wiki_content_added: "{{author}}-(e)k '{{page}}' wiki orria gehitu du."
-  mail_subject_wiki_content_updated: "'{{page}}' wiki orria eguneratu da"
-  mail_body_wiki_content_updated: "{{author}}-(e)k '{{page}}' wiki orria eguneratu du."
+  mail_subject_wiki_content_added: "'{{id}}' wiki orria gehitu da"
+  mail_body_wiki_content_added: "{{author}}-(e)k '{{id}}' wiki orria gehitu du."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki orria eguneratu da"
+  mail_body_wiki_content_updated: "{{author}}-(e)k '{{id}}' wiki orria eguneratu du."
   
   gui_validation_error: akats 1
   gui_validation_error_plural: "{{count}} akats"
@@ -257,7 +257,6 @@
   field_attr_lastname: Abizenak atributua
   field_attr_mail: Eposta atributua
   field_onthefly: Zuzeneko erabiltzaile sorrera
-  field_start_date: Hasiera
   field_done_ratio: Egindako %
   field_auth_source: Autentikazio modua
   field_hide_mail: Nire eposta helbidea ezkutatu
@@ -707,7 +706,6 @@
   label_search_titles_only: Izenburuetan bakarrik bilatu
   label_user_mail_option_all: "Nire proiektu guztietako gertakari guztientzat"
   label_user_mail_option_selected: "Hautatutako proiektuetako edozein gertakarientzat..."
-  label_user_mail_option_none: "Nik behatu edo parte hartze dudan gauzetarako bakarrik"
   label_user_mail_no_self_notified: "Ez dut nik egiten ditudan aldeketen jakinarazpenik jaso nahi"
   label_registration_activation_by_email: kontuak epostaz gaitu
   label_registration_manual_activation: kontuak eskuz gaitu
@@ -821,9 +819,9 @@
   text_journal_set_to: "{{label}}-k {{value}} balioa hartu du"
   text_journal_deleted: "{{label}} ezabatuta ({{old}})"
   text_journal_added: "{{label}} {{value}} gehituta"
-  text_tip_task_begin_day: gaur hasten diren atazak
-  text_tip_task_end_day: gaur bukatzen diren atazak
-  text_tip_task_begin_end_day: gaur hasi eta bukatzen diren atazak
+  text_tip_issue_begin_day: gaur hasten diren atazak
+  text_tip_issue_end_day: gaur bukatzen diren atazak
+  text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren atazak
   text_project_identifier_info: 'Letra xeheak (a-z), zenbakiak eta marrak erabil daitezke bakarrik.<br />Gorde eta gero identifikadorea ezin da aldatu.'
   text_caracters_maximum: "{{count}} karaktere gehienez."
   text_caracters_minimum: "Gutxienez {{count}} karaktereetako luzerakoa izan behar du."
@@ -917,8 +915,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/fi.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/fi.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -262,7 +262,6 @@
   field_attr_lastname: Sukunimenmääre
   field_attr_mail: Sähköpostinmääre
   field_onthefly: Automaattinen käyttäjien luonti
-  field_start_date: Alku
   field_done_ratio: % Tehty
   field_auth_source: Varmennusmuoto
   field_hide_mail: Piiloita sähköpostiosoitteeni
@@ -579,7 +578,6 @@
   label_search_titles_only: Hae vain otsikot
   label_user_mail_option_all: "Kaikista tapahtumista kaikissa projekteistani"
   label_user_mail_option_selected: "Kaikista tapahtumista vain valitsemistani projekteista..."
-  label_user_mail_option_none: "Vain tapahtumista joita valvon tai olen mukana"
   label_user_mail_no_self_notified: "En halua muistutusta muutoksista joita itse teen"
   label_registration_activation_by_email: tilin aktivointi sähköpostitse
   label_registration_manual_activation: tilin aktivointi käsin
@@ -636,9 +634,9 @@
   text_project_destroy_confirmation: Oletko varma että haluat poistaa tämän projektin ja kaikki siihen kuuluvat tiedot?
   text_workflow_edit: Valitse rooli ja tapahtuma muokataksesi työnkulkua
   text_are_you_sure: Oletko varma?
-  text_tip_task_begin_day: tehtävä joka alkaa tänä päivänä
-  text_tip_task_end_day: tehtävä joka loppuu tänä päivänä
-  text_tip_task_begin_end_day: tehtävä joka alkaa ja loppuu tänä päivänä
+  text_tip_issue_begin_day: tehtävä joka alkaa tänä päivänä
+  text_tip_issue_end_day: tehtävä joka loppuu tänä päivänä
+  text_tip_issue_begin_end_day: tehtävä joka alkaa ja loppuu tänä päivänä
   text_project_identifier_info: 'Pienet kirjaimet (a-z), numerot ja viivat ovat sallittu.<br />Tallentamisen jälkeen tunnistetta ei voi muuttaa.'
   text_caracters_maximum: "{{count}} merkkiä enintään."
   text_caracters_minimum: "Täytyy olla vähintään {{count}} merkkiä pitkä."
@@ -841,12 +839,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -938,8 +936,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/fr.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/fr.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -169,6 +169,7 @@
   notice_file_not_found: "La page à laquelle vous souhaitez accéder n'existe pas ou a été supprimée."
   notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
   notice_not_authorized: "Vous n'êtes pas autorisés à accéder à cette page."
+  notice_not_authorized_archived_project: Le projet auquel vous tentez d'accéder a été archivé.
   notice_email_sent: "Un email a été envoyé à {{value}}"
   notice_email_error: "Erreur lors de l'envoi de l'email ({{value}})"
   notice_feeds_access_key_reseted: "Votre clé d'accès aux flux RSS a été réinitialisée."
@@ -203,10 +204,10 @@
   mail_body_account_activation_request: "Un nouvel utilisateur ({{value}}) s'est inscrit. Son compte nécessite votre approbation :"
   mail_subject_reminder: "{{count}} demande(s) arrivent à échéance ({{days}})"
   mail_body_reminder: "{{count}} demande(s) qui vous sont assignées arrivent à échéance dans les {{days}} prochains jours :"
-  mail_subject_wiki_content_added: "Page wiki '{{page}}' ajoutée"
-  mail_body_wiki_content_added: "La page wiki '{{page}}' a été ajoutée par {{author}}."
-  mail_subject_wiki_content_updated: "Page wiki '{{page}}' mise à jour"
-  mail_body_wiki_content_updated: "La page wiki '{{page}}' a été mise à jour par {{author}}."
+  mail_subject_wiki_content_added: "Page wiki '{{id}}' ajoutée"
+  mail_body_wiki_content_added: "La page wiki '{{id}}' a été ajoutée par {{author}}."
+  mail_subject_wiki_content_updated: "Page wiki '{{id}}' mise à jour"
+  mail_body_wiki_content_updated: "La page wiki '{{id}}' a été mise à jour par {{author}}."
   
   gui_validation_error: 1 erreur
   gui_validation_error_plural: "{{count}} erreurs"
@@ -271,7 +272,6 @@
   field_attr_lastname: Attribut Nom
   field_attr_mail: Attribut Email
   field_onthefly: Création des utilisateurs à la volée
-  field_start_date: Début
   field_done_ratio: % réalisé
   field_auth_source: Mode d'authentification
   field_hide_mail: Cacher mon adresse mail
@@ -303,6 +303,7 @@
   field_sharing: Partage
   field_active: Actif
   field_parent_issue: Tâche parente
+  field_visible: Visible
   
   setting_app_title: Titre de l'application
   setting_app_subtitle: Sous-titre de l'application
@@ -718,7 +719,6 @@
   label_search_titles_only: Uniquement dans les titres
   label_user_mail_option_all: "Pour tous les événements de tous mes projets"
   label_user_mail_option_selected: "Pour tous les événements des projets sélectionnés..."
-  label_user_mail_option_none: "Seulement pour ce que je surveille ou à quoi je participe"
   label_user_mail_no_self_notified: "Je ne veux pas être notifié des changements que j'effectue"
   label_registration_activation_by_email: activation du compte par email
   label_registration_manual_activation: activation manuelle du compte
@@ -773,6 +773,8 @@
   label_profile: Profil
   label_subtask_plural: Sous-tâches
   label_project_copy_notifications: Envoyer les notifications durant la copie du projet
+  label_principal_search: "Rechercher un utilisateur ou un groupe :"
+  label_user_search: "Rechercher un utilisateur :"
   
   button_login: Connexion
   button_submit: Soumettre
@@ -833,9 +835,9 @@
   text_subprojects_destroy_warning: "Ses sous-projets : {{value}} seront également supprimés."
   text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow
   text_are_you_sure: Êtes-vous sûr ?
-  text_tip_task_begin_day: tâche commençant ce jour
-  text_tip_task_end_day: tâche finissant ce jour
-  text_tip_task_begin_end_day: tâche commençant et finissant ce jour
+  text_tip_issue_begin_day: tâche commençant ce jour
+  text_tip_issue_end_day: tâche finissant ce jour
+  text_tip_issue_begin_end_day: tâche commençant et finissant ce jour
   text_project_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres et tirets sont autorisés.<br />Un fois sauvegardé, l''identifiant ne pourra plus être modifié.'
   text_caracters_maximum: "{{count}} caractères maximum."
   text_caracters_minimum: "{{count}} caractères minimum."
@@ -930,9 +932,16 @@
   label_overall_spent_time: Temps passé global
   field_time_entries: Log time
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Modifier la page de Wiki associée: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  project_module_calendar: Calendrier
+  button_edit_associated_wikipage: "Modifier la page wiki associée: {{page_title}}"
+  text_are_you_sure_with_children: Supprimer la demande et toutes ses sous-demandes ?
+  field_text: Champ texte
+  label_user_mail_option_only_owner: Seulement pour ce que j'ai créé
+  setting_default_notification_option: Option de notification par défaut
+  label_user_mail_option_only_my_events: Seulement pour ce que je surveille
+  label_user_mail_option_only_assigned: Seulement pour ce qui m'est assigné
+  label_user_mail_option_none: Aucune notification
+  field_member_of_group: Groupe de l'assigné
+  field_assigned_to_role: Rôle de l'assigné
+  field_start_date: Start date
+  setting_emails_header: Emails header
--- a/config/locales/gl.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/gl.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -290,7 +290,6 @@
   field_role: Perfil
   field_searchable: Incluír nas búsquedas
   field_spent_on: Data
-  field_start_date: Data de inicio
   field_start_page: Páxina principal
   field_status: Estado
   field_subject: Tema
@@ -613,7 +612,6 @@
   label_user_activity: "Actividade de {{value}}"
   label_user_mail_no_self_notified: "Non quero ser avisado de cambios feitos por min"
   label_user_mail_option_all: "Para calquera evento en tódolos proxectos"
-  label_user_mail_option_none: "Só para elementos monitorizados ou relacionados comigo"
   label_user_mail_option_selected: "Para calquera evento dos proxectos seleccionados..."
   label_user_new: Novo usuario
   label_user_plural: Usuarios
@@ -798,9 +796,9 @@
   text_select_project_modules: 'Seleccione os módulos a activar para este proxecto:'
   text_status_changed_by_changeset: "Aplicado nos cambios {{value}}"
   text_subprojects_destroy_warning: "Os proxectos secundarios: {{value}} tamén se eliminarán"
-  text_tip_task_begin_day: tarefa que comeza este día
-  text_tip_task_begin_end_day: tarefa que comeza e remata este día
-  text_tip_task_end_day: tarefa que remata este día
+  text_tip_issue_begin_day: tarefa que comeza este día
+  text_tip_issue_begin_end_day: tarefa que comeza e remata este día
+  text_tip_issue_end_day: tarefa que remata este día
   text_tracker_no_workflow: Non hai ningún fluxo de traballo definido para este tipo de petición
   text_unallowed_characters: Caracteres non permitidos
   text_user_mail_option: "Dos proxectos non seleccionados, só recibirá notificacións sobre elementos monitorizados ou elementos nos que estea involucrado (por exemplo, peticións das que vostede sexa autor ou asignadas a vostede)."
@@ -832,12 +830,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -929,8 +927,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/he.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/he.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -104,7 +104,7 @@
         inclusion: "×œ× × ×›×œ×œ ברשימה"
         exclusion: "×œ× ×–×ž×™×Ÿ"
         invalid: "×œ× ×•×œ×™×“×™"
-        confirmation: "×œ× ×ª×•×× ×œ×ישורו"
+        confirmation: "×œ× ×ª×•×× ×œ×ישור"
         accepted: "חייב ב×ישור"
         empty: "חייב להכלל"
         blank: "חייב להכלל"
@@ -122,8 +122,8 @@
         even: "חייב להיות זוגי"
         greater_than_start_date: "חייב להיות מ×וחר יותר מת×ריך ההתחלה"
         not_same_project: "×œ× ×©×™×™×š ל×ותו הפרויקט"
-        circular_dependency: "הקשר הזה יצור תלות מעגלית"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        circular_dependency: "קשר זה יצור תלות מעגלית"
+        cant_link_an_issue_with_a_descendant: "×œ× × ×™×ª×Ÿ לקשר × ×•×©× ×œ×ª×ªÖ¾×ž×©×™×ž×” שלו"
 
   actionview_instancetag_blank_option: בחר בבקשה
 
@@ -144,7 +144,7 @@
   notice_account_wrong_password: סיסמה שגויה
   notice_account_register_done: החשבון נוצר בהצלחה. להפעלת החשבון לחץ על הקישור שנשלח לדו×"ל שלך.
   notice_account_unknown_email: משתמש ×œ× ×ž×•×›×¨.
-  notice_can_t_change_password: החשבון ×”×–×” משתמש במקור ×ימות חיצוני. שינוי סיסמה הינו בילתי ×פשר
+  notice_can_t_change_password: החשבון ×”×–×” משתמש במקור הזדהות חיצוני. שינוי סיסמה הינו בילתי ×פשר
   notice_account_lost_email_sent: דו×"ל ×¢× ×”×•×¨×ות לבחירת סיסמה חדשה נשלח ×ליך.
   notice_account_activated: חשבונך הופעל. ×תה יכול להתחבר כעת.
   notice_successful_create: יצירה מוצלחת.
@@ -154,8 +154,9 @@
   notice_file_not_found: הדף ש×תה מנסה לגשת ×ליו ×ינו ×§×™×™× ×ו שהוסר.
   notice_locking_conflict: המידע עודכן על ידי משתמש ×חר.
   notice_not_authorized: ×ינך מורשה לר×ות דף ×–×”.
+  notice_not_authorized_archived_project: הפרויקט ש×תה מנסה לגשת ×ליו × ×ž×¦× ×‘×רכיון.
   notice_email_sent: "דו×ל נשלח לכתובת {{value}}"
-  notice_email_error: "×רעה שגי××” בעט שליחת הדו×ל ({{value}})"
+  notice_email_error: "×רעה שגי××” בעת שליחת הדו×ל ({{value}})"
   notice_feeds_access_key_reseted: מפתח ×”Ö¾RSS שלך ×ופס.
   notice_api_access_key_reseted: מפתח הגישה שלך ל־API ×ופס.
   notice_failed_to_save_issues: "נכשרת בשמירת {{count}} נוש×\×™× ×‘ {{total}} נבחרו: {{ids}}."
@@ -168,7 +169,7 @@
   notice_issue_done_ratios_updated: ×חוזי התקדמות ×œ× ×•×©× ×¢×•×“×›× ×•.
 
   error_can_t_load_default_data: "×פשרויות ברירת המחדל ×œ× ×”×¦×œ×™×—×• להיטען: {{value}}"
-  error_scm_not_found: כניסה ו\×ו גירסה ××™× × ×§×™×™×ž×™× ×‘×ž×גר.
+  error_scm_not_found: כניסה ו\×ו מהדורה ××™× × ×§×™×™×ž×™× ×‘×ž×גר.
   error_scm_command_failed: "×רעה שגי××” בעת ניסון גישה למ×גר: {{value}}"
   error_scm_annotate: "הכניסה ×œ× ×§×™×™×ž×ª ×ו ×©×œ× × ×™×ª×Ÿ לת×ר ×ותה."
   error_issue_not_found_in_project: 'הנוש××™× ×œ× × ×ž×¦×ו ×ו ××™× × ×©×™×›×™× ×œ×¤×¨×•×™×§×˜'
@@ -194,12 +195,12 @@
   mail_body_account_information: פרטי החשבון שלך
   mail_subject_account_activation_request: "בקשת הפעלה לחשבון {{value}}"
   mail_body_account_activation_request: "משתמש חדש ({{value}}) נרש×. החשבון שלו מחכה ל×ישור שלך:"
-  mail_subject_reminder: "{{count}} נוש××™× ×ž×™×¢×“×™× ×œ×”×’×©×” ×‘×™×ž×™× ×”×§×¨×•×‘×™× ({{days}})"
+  mail_subject_reminder: "{{count}} נוש××™× ×ž×™×•×¢×“×™× ×œ×”×’×©×” ×‘×™×ž×™× ×”×§×¨×•×‘×™× ({{days}})"
   mail_body_reminder: "{{count}} נוש××™× ×©×ž×™×•×¢×“×™× ×ליך ×ž×™×•×¢×“×™× ×œ×”×’×©×” בתוך {{days}} ימי×:"
-  mail_subject_wiki_content_added: "דף ×”Ö¾wiki â€'{{page}}' נוסף"
-  mail_body_wiki_content_added: דף ×”Ö¾wiki â€'{{page}}' נוסף ×¢"×™ {{author}}.
-  mail_subject_wiki_content_updated: "דף ×”Ö¾wiki â€'{{page}}' עודכן"
-  mail_body_wiki_content_updated: דף ×”Ö¾wiki â€'{{page}}' עודכן ×¢"×™ {{author}}.
+  mail_subject_wiki_content_added: "דף ×”Ö¾wiki â€'{{id}}' נוסף"
+  mail_body_wiki_content_added: דף ×”Ö¾wiki â€'{{id}}' נוסף ×¢"×™ {{author}}.
+  mail_subject_wiki_content_updated: "דף ×”Ö¾wiki â€'{{id}}' עודכן"
+  mail_body_wiki_content_updated: דף ×”Ö¾wiki â€'{{id}}' עודכן ×¢"×™ {{author}}.
 
   gui_validation_error: שגי××” 1
   gui_validation_error_plural: "{{count}} שגי×ות"
@@ -248,7 +249,7 @@
   field_login: ×©× ×ž×©×ª×ž×©
   field_mail_notification: הודעות דו×"ל
   field_admin: ניהול
-  field_last_login_on: חיבור ×חרון
+  field_last_login_on: התחברות ×חרונה
   field_language: שפה
   field_effective_date: ת×ריך
   field_password: סיסמה
@@ -265,9 +266,8 @@
   field_attr_lastname: תכונת ×©× ×ž×©×¤×—×”
   field_attr_mail: תכונת דו×"ל
   field_onthefly: יצירת ×ž×©×ª×ž×©×™× ×–×¨×™×–×”
-  field_start_date: ת×ריך התחלה
   field_done_ratio: % גמור
-  field_auth_source: מצב ×ימות
+  field_auth_source: מקור הזדהות
   field_hide_mail: ×”×—×‘× ×ת כתובת הדו×"ל שלי
   field_comments: הערות
   field_url: URL
@@ -284,6 +284,7 @@
   field_redirect_existing_links: העבר ×§×™×©×•×¨×™× ×§×™×™×ž×™×
   field_estimated_hours: זמן משוער
   field_column_names: עמודות
+  field_time_entries: ×¨×™×©×•× ×–×ž× ×™×
   field_time_zone: ×יזור זמן
   field_searchable: ניתן לחיפוש
   field_default_value: ערך ברירת מחדל
@@ -296,13 +297,14 @@
   field_group_by: קבץ ×ת התוצ×ות לפי
   field_sharing: שיתוף
   field_parent_issue: משימת ×ב
+  field_text: שדה טקסט
 
   setting_app_title: כותרת ישו×
   setting_app_subtitle: תת־כותרת ישו×
   setting_welcome_text: טקסט "ברוך הב×"
   setting_default_language: שפת ברירת מחדל
-  setting_login_required: דרוש ×ימות
-  setting_self_registration: ×פשר הרשמות עצמית
+  setting_login_required: דרושה הזדהות
+  setting_self_registration: ×פשר הרשמה עצמית
   setting_attachment_max_size: גודל דבוקה מקסימ×לי
   setting_issues_export_limit: גבול ×™×¦×•× × ×•×©××™×
   setting_mail_from: כתובת שליחת דו×"ל
@@ -310,14 +312,14 @@
   setting_plain_text_mail: טקסט פשוט בלבד (×œ×œ× HTML)
   setting_host_name: ×©× ×©×¨×ª
   setting_text_formatting: עיצוב טקסט
-  setting_wiki_compression: כיווץ היסטורית WIKI
+  setting_wiki_compression: כיווץ היסטורית wiki
   setting_feeds_limit: גבול תוכן הזנות
   setting_default_projects_public: ×¤×¨×•×™×§×˜×™× ×—×“×©×™× ×”×™× × ×¤×•×ž×‘×™×™× ×›×‘×¨×™×¨×ª מחדל
-  setting_autofetch_changesets: משיכה ×וטומטית של עידכוני×
+  setting_autofetch_changesets: משיכה ×וטומטית של שינויי×
   setting_sys_api_enabled: ×פשר שירות רשת לניהול המ×גר
   setting_commit_ref_keywords: מילות מפתח מקשרות
   setting_commit_fix_keywords: מילות מפתח מתקנות
-  setting_autologin: חיבור ×וטומטי
+  setting_autologin: התחברות ×וטומטית
   setting_date_format: פורמט ת×ריך
   setting_time_format: פורמט זמן
   setting_cross_project_issue_relations: הרשה קישור נוש××™× ×‘×™×Ÿ פרויקטי×
@@ -339,17 +341,18 @@
   setting_gravatar_default: תמונת Gravatar ברירת מחדל
   setting_diff_max_lines_displayed: מספר מירבי של שורות בתצוגת שינויי×
   setting_file_max_size_displayed: גודל מירבי של מלל המוצג בתוך השורה
-  setting_repository_log_display_limit: מספר מירבי של גירס×ות המוצגות ביומן קובץ
+  setting_repository_log_display_limit: מספר מירבי של מהדורות המוצגות ביומן קובץ
   setting_openid: ×פשר התחברות ×•×¨×™×©×•× ×‘×מצעות OpenID
-  setting_password_min_length: ×ורך ×¡×™×¡×ž× ×ž×™× ×™×ž×לי
+  setting_password_min_length: ×ורך סיסמה מינימ×לי
   setting_new_project_user_role_id: התפקיד שמוגדר למשתמש פשוט ×שר יוצר פרויקט
   setting_default_projects_modules: ×ž×•×“×•×œ×™× ×ž××•×¤×©×¨×™× ×‘×‘×¨×™×¨×ª מחדל עבור ×¤×¨×•×™×§×˜×™× ×—×“×©×™×
   setting_issue_done_ratio: חשב ×חוז התקדמות ×‘× ×•×©× ×¢×
   setting_issue_done_ratio_issue_field: השתמש בשדה הנוש×
   setting_issue_done_ratio_issue_status: השתמש במצב הנוש×
-  setting_start_of_week: התחל ×™×•×ž× ×™× ×œ×¤×™
+  setting_start_of_week: השבוע מתחיל ביו×
   setting_rest_api_enabled: ×פשר שירות רשת REST
   setting_cache_formatted_text: שמור טקסט מעוצב במטמון
+  setting_default_notification_option: ×פשרות התר××” ברירת־מחדל
 
   permission_add_project: יצירת פרויקט
   permission_add_subprojects: יצירת תתי־פרויקט
@@ -376,9 +379,9 @@
   permission_add_issue_watchers: הוספת צופי×
   permission_delete_issue_watchers: הסרת צופי×
   permission_log_time: תיעוד זמן שהושקע
-  permission_view_time_entries: צפיה בזמן שהושקע
+  permission_view_time_entries: צפיה ×‘×¨×™×©×•× ×–×ž× ×™×
   permission_edit_time_entries: עריכת ×¨×™×©×•× ×–×ž× ×™×
-  permission_edit_own_time_entries: עריכת לוג הזמן של עצמו
+  permission_edit_own_time_entries: עריכת ×¨×™×©×•× ×”×–×ž× ×™× ×©×œ עצמו
   permission_manage_news: ניהול חדשות
   permission_comment_news: תגובה לחדשות
   permission_manage_documents: ניהול מסמכי×
@@ -395,7 +398,7 @@
   permission_protect_wiki_pages: הגנה על כל דפי wiki
   permission_manage_repository: ניהול מ×גר
   permission_browse_repository: סיור במ×גר
-  permission_view_changesets: צפיה בקבוצות שינויי×
+  permission_view_changesets: צפיה בסדרות שינויי×
   permission_commit_access: ×ישור הפקדות
   permission_manage_boards: ניהול לוחות
   permission_view_messages: צפיה בהודעות
@@ -415,6 +418,8 @@
   project_module_wiki: Wiki
   project_module_repository: מ×גר
   project_module_boards: לוחות
+  project_module_calendar: לוח שנה
+  project_module_gantt: ×’×נט
 
   label_user: משתמש
   label_user_plural: משתמשי×
@@ -439,7 +444,7 @@
   label_document: מסמך
   label_document_new: מסמך חדש
   label_document_plural: מסמכי×
-  label_document_added: מוסמך נוסף
+  label_document_added: מסמך נוסף
   label_role: תפקיד
   label_role_plural: תפקידי×
   label_role_new: תפקיד חדש
@@ -464,7 +469,7 @@
   label_enumeration_new: ערך חדש
   label_information: מידע
   label_information_plural: מידע
-  label_please_login: התחבר בבקשה
+  label_please_login: × × ×”×ª×—×‘×¨
   label_register: הרשמה
   label_login_with_open_id_option: ×ו התחבר ב×מצעות OpenID
   label_password_lost: ×בדה הסיסמה?
@@ -479,7 +484,7 @@
   label_help: עזרה
   label_reported_issues: נוש××™× ×©×“×•×•×—×•
   label_assigned_to_me_issues: נוש××™× ×©×”×•×¦×‘×• לי
-  label_last_login: חיבור ×חרון
+  label_last_login: התחברות ×חרונה
   label_registered_on: × ×¨×©× ×‘×ª×ריך
   label_activity: פעילות
   label_overall_activity: פעילות כוללת
@@ -487,10 +492,10 @@
   label_new: חדש
   label_logged_as: מחובר כ
   label_environment: סביבה
-  label_authentication: ×ישור
-  label_auth_source: מצב ×ישור
-  label_auth_source_new: מצב ×ישור חדש
-  label_auth_source_plural: מצבי ×ישור
+  label_authentication: הזדהות
+  label_auth_source: מקור הזדהות
+  label_auth_source_new: מקור הזדהות חדש
+  label_auth_source_plural: מקורות הזדהות
   label_subproject_plural: תת־פרויקטי×
   label_subproject_new: תת־פרויקט חדש
   label_and_its_subprojects: "{{value}} וכל ×ª×ª×™Ö¾×”×¤×¨×•×™×§×˜×™× ×©×œ×•"
@@ -521,7 +526,7 @@
   label_news_plural: חדשות
   label_news_latest: חדשות ×חרונות
   label_news_view_all: צפה בכל החדשות
-  label_news_added: חדשות הוספו
+  label_news_added: חדשות נוספו
   label_settings: הגדרות
   label_overview: מבט רחב
   label_version: גירסה
@@ -575,7 +580,7 @@
     one: הערה ×חת
     other: "{{count}} הערות"
   label_comment_add: הוסף תגובה
-  label_comment_added: תגובה הוספה
+  label_comment_added: תגובה נוספה
   label_comment_delete: מחק תגובות
   label_query: ש×ילתה ×ישית
   label_query_plural: ש×ילתות ×ישיות
@@ -593,7 +598,7 @@
   label_all_time: תמיד
   label_yesterday: ×תמול
   label_this_week: השבוע
-  label_last_week: שבוע שעבר
+  label_last_week: השבוע שעבר
   label_last_n_days: "ב־{{count}} ×™×ž×™× ×חרוני×"
   label_this_month: החודש
   label_last_month: חודש שעבר
@@ -612,19 +617,19 @@
   label_modification_plural: "{{count}} שינויי×"
   label_branch: ×¢× ×£
   label_tag: סימון
-  label_revision: גירסה
-  label_revision_plural: גירס×ות
-  label_revision_id: גירסה {{value}}
-  label_associated_revisions: גירס×ות קשורות
+  label_revision: מהדורה
+  label_revision_plural: מהדורות
+  label_revision_id: מהדורה {{value}}
+  label_associated_revisions: מהדורות קשורות
   label_added: נוסף
   label_modified: שונה
   label_copied: הועתק
   label_renamed: ×”×©× ×©×•× ×”
   label_deleted: נמחק
-  label_latest_revision: גירסה ×חרונה
-  label_latest_revision_plural: גירס×ות ×חרונות
-  label_view_revisions: צפה בגירס×ות
-  label_view_all_revisions: צפה בכל הגירס×ות
+  label_latest_revision: מהדורה ×חרונה
+  label_latest_revision_plural: מהדורות ×חרונות
+  label_view_revisions: צפה במהדורות
+  label_view_all_revisions: צפה בכל המהדורות
   label_max_size: גודל מקסימ×לי
   label_sort_highest: ×”×–×– לר×שית
   label_sort_higher: הזז למעלה
@@ -638,10 +643,10 @@
   label_result_plural: תוצ×ות
   label_all_words: כל המילי×
   label_wiki: Wiki
-  label_wiki_edit: ערוך Wiki
-  label_wiki_edit_plural: עריכות Wiki
+  label_wiki_edit: ערוך wiki
+  label_wiki_edit_plural: עריכות wiki
   label_wiki_page: דף Wiki
-  label_wiki_page_plural: דפי Wiki
+  label_wiki_page_plural: דפי wiki
   label_index_by_title: סדר על פי כותרת
   label_index_by_date: סדר על פי ת×ריך
   label_current_version: גירסה נוכחית
@@ -694,7 +699,7 @@
   label_message_plural: הודעות
   label_message_last: הודעה ×חרונה
   label_message_new: הודעה חדשה
-  label_message_posted: הודעה הוספה
+  label_message_posted: הודעה נוספה
   label_reply_plural: השבות
   label_send_information: שלח מידע על חשבון למשתמש
   label_year: שנה
@@ -703,18 +708,18 @@
   label_date_from: מת×ריך
   label_date_to: עד
   label_language_based: מבוסס שפה
-  label_sort_by: "מין לפי {{value}}"
+  label_sort_by: "מיין לפי {{value}}"
   label_send_test_email: שלח דו×"ל בדיקה
   label_feeds_access_key: מפתח גישה ל־RSS
   label_missing_feeds_access_key: חסר מפתח גישה ל־RSS
   label_feeds_access_key_created_on: "מפתח הזנת RSS נוצר לפני{{value}}"
   label_module_plural: מודולי×
-  label_added_time_by: "נוסף על ידי {{author}} לפני {{age}} "
+  label_added_time_by: 'נוסף ע"י {{author}} לפני {{age}}'
   label_updated_time_by: 'עודכן ע"י {{author}} לפני {{age}}'
   label_updated_time: "עודכן לפני {{value}} "
   label_jump_to_a_project: קפוץ לפרויקט...
   label_file_plural: קבצי×
-  label_changeset_plural: ×וסף שינוי×
+  label_changeset_plural: סדרות שינויי×
   label_default_columns: עמודת ברירת מחדל
   label_no_change_option: (×ין שינוי×)
   label_bulk_edit_selected_issues: ערוך ×ת הנוש××™× ×”×ž×¡×•×ž× ×™×
@@ -723,7 +728,9 @@
   label_search_titles_only: חפש בכותרות בלבד
   label_user_mail_option_all: "לכל ×ירוע בכל ×”×¤×¨×•×™×§×˜×™× ×©×œ×™"
   label_user_mail_option_selected: "לכל ×ירוע ×‘×¤×¨×•×™×§×˜×™× ×©×‘×—×¨×ª×™ בלבד..."
-  label_user_mail_option_none: "רק לנוש××™× ×©×× ×™ צופה ×ו קשור ×ליה×"
+  label_user_mail_option_only_my_events: עבור ×“×‘×¨×™× ×©×× ×™ צופה ×ו מעורב ×‘×”× ×‘×œ×‘×“
+  label_user_mail_option_only_assigned: עבור ×“×‘×¨×™× ×©×× ×™ ×חר××™ ×¢×œ×™×”× ×‘×œ×‘×“
+  label_user_mail_option_only_owner: עבור ×“×‘×¨×™× ×©×× ×™ ×”×‘×¢×œ×™× ×©×œ×”× ×‘×œ×‘×“
   label_user_mail_no_self_notified: "×× ×™ ×œ× ×¨×•×¦×” שיודיעו לי על ×©×™× ×•×™×™× ×©×× ×™ מבצע"
   label_registration_activation_by_email: הפעל חשבון ב×מצעות דו×"ל
   label_registration_manual_activation: הפעלת חשבון ידנית
@@ -735,7 +742,7 @@
   label_more: עוד
   label_scm: מערכת ניהול תצורה
   label_plugins: תוספי×
-  label_ldap_authentication: ×ימות LDAP
+  label_ldap_authentication: הזדהות LDAP
   label_downloads_abbr: D/L
   label_optional_description: תי×ור רשות
   label_add_another_file: הוסף עוד קובץ
@@ -752,8 +759,8 @@
   label_ascending: בסדר עולה
   label_descending: בסדר יורד
   label_date_from_to: 'מת×ריך {{start}} ועד ת×ריך {{end}}'
-  label_wiki_content_added: הדף נוסף ל־wiki
-  label_wiki_content_updated: דף ה־wiki עודכן
+  label_wiki_content_added: נוסף דף ל־wiki
+  label_wiki_content_updated: דף wiki עודכן
   label_group: קבוצה
   label_group_plural: קבוצות
   label_group_new: קבוצה חדשה
@@ -785,6 +792,7 @@
   button_create_and_continue: צור ופתח חדש
   button_test: בדוק
   button_edit: ערוך
+  button_edit_associated_wikipage: "ערוך דף wiki מקושר: {{page_title}}"
   button_add: הוסף
   button_change: שנה
   button_apply: החל
@@ -800,8 +808,8 @@
   button_cancel: בטל
   button_activate: הפעל
   button_sort: מיין
-  button_log_time: זמן לוג
-  button_rollback: חזור לגירסה זו
+  button_log_time: ×¨×™×©×•× ×–×ž× ×™×
+  button_rollback: חזור למהדורה זו
   button_watch: צפה
   button_unwatch: בטל צפיה
   button_reply: השב
@@ -809,7 +817,7 @@
   button_unarchive: ×”×•×¦× ×ž×”×רכיון
   button_reset: ×פס
   button_rename: שנה ש×
-  button_change_password: שנה סיסמ×
+  button_change_password: שנה סיסמה
   button_copy: העתק
   button_copy_and_follow: העתק ועקוב
   button_annotate: הוסף תי×ור מסגרת
@@ -836,13 +844,14 @@
   text_subprojects_destroy_warning: "תת־הפרויקט\×™×: {{value}} ימחקו ×’× ×›×Ÿ."
   text_workflow_edit: בחר תפקיד וסיווג כדי לערוך ×ת זרימת העבודה
   text_are_you_sure: ×”×× ×תה בטוח?
+  text_are_you_sure_with_children: ×”×× ×œ×ž×—×•×§ ×ת ×”× ×•×©× ×•×ת כל בניו?
   text_journal_changed: "{{label}} השתנה מ{{old}} ל{{new}}"
   text_journal_set_to: "{{label}} נקבע ל{{value}}"
   text_journal_deleted: "{{label}} נמחק ({{old}})"
   text_journal_added: "{{label}} {{value}} נוסף"
-  text_tip_task_begin_day: מטלה המתחילה היו×
-  text_tip_task_end_day: מטלה המסתיימת היו×
-  text_tip_task_begin_end_day: מטלה המתחילה ומסתיימת היו×
+  text_tip_issue_begin_day: מטלה המתחילה היו×
+  text_tip_issue_end_day: מטלה המסתיימת היו×
+  text_tip_issue_begin_end_day: מטלה המתחילה ומסתיימת היו×
   text_project_identifier_info: '×ותיות לטיניות (a-z), ×ž×¡×¤×¨×™× ×•×ž×§×¤×™×.<br />ברגע שנשמר, ×œ× × ×™×ª×Ÿ לשנות ×ת המזהה.'
   text_caracters_maximum: "×ž×§×¡×™×ž×•× {{count}} תווי×."
   text_caracters_minimum: "חייב להיות לפחות ב×ורך של {{count}} תווי×."
@@ -852,8 +861,8 @@
   text_comma_separated: הכנסת ×¢×¨×›×™× ×ž×¨×•×‘×™× ×ž×•×ª×¨×ª (×ž×•×¤×¨×“×™× ×‘×¤×¡×™×§×™×).
   text_line_separated: ניתן להזין מספר ×¢×¨×›×™× (שורה ×חת לכל ערך).
   text_issues_ref_in_commit_messages: קישור ×•×ª×™×§×•× × ×•×©××™× ×‘×”×•×“×¢×•×ª הפקדה
-  text_issue_added: "×”× ×•×©× {{id}} דווח (by {{author}})."
-  text_issue_updated: "×”× ×•×©× {{id}} עודכן (by {{author}})."
+  text_issue_added: "×”× ×•×©× {{id}} דווח (בידי {{author}})."
+  text_issue_updated: "×”× ×•×©× {{id}} עודכן (בידי {{author}})."
   text_wiki_destroy_confirmation: ×”×× ×תה בטוח שברצונך למחוק ×ת ×”WIKI ×”×–×” ו×ת כל תוכנו?
   text_issue_category_destroy_question: "כמה נוש××™× ({{count}}) ×ž×•×¦×‘×™× ×œ×§×˜×’×•×¨×™×” הזו. מה ברצונך לעשות?"
   text_issue_category_destroy_assignments: הסר הצבת קטגוריה
@@ -875,7 +884,7 @@
   text_user_wrote: "{{value}} כתב:"
   text_enumeration_destroy_question: "{{count}} ××•×‘×™×§×˜×™× ×ž×•×¦×‘×™× ×œ×¢×¨×š ×–×”."
   text_enumeration_category_reassign_to: 'הצב מחדש לערך הזה:'
-  text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ config/email.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.'
+  text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ /etc/redmine/&lt;instance&gt;/email.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.'
   text_repository_usernames_mapping: "בחר ×ו עדכן ×ת משתמש Redmine הממופה לכל ×©× ×ž×©×ª×ž×© ביומן המ×גר.\n×ž×©×ª×ž×©×™× ×‘×¢×œ×™ ×©× ×ו כתובת דו×ר ×–×”×” ב־Redmine ובמ×גר ×ž×ž×•×¤×™× ×‘×ופן ×וטומטי."
   text_diff_truncated: '... ×”×©×™× ×•×™×™× ×¢×•×‘×¨×™× ×ת מספר השורות המירבי לתצוגה, ולכן ×”× ×§×•×¦×¦×•.'
   text_custom_field_possible_values_info: שורה ×חת לכל ערך
@@ -915,11 +924,11 @@
   enumeration_doc_categories: קטגוריות מסמכי×
   enumeration_activities: פעילויות (מעקב ×חר זמני×)
   enumeration_system_activity: פעילות מערכת
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/hr.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/hr.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -184,10 +184,10 @@
   mail_body_account_activation_request: "Novi korisnik ({{value}}) je registriran. Njegov korisniÄki raÄun Äeka vaÅ¡e odobrenje:"
   mail_subject_reminder: "{{count}} predmet(a) dospijeva sljedećih {{days}} dana"
   mail_body_reminder: "{{count}} vama dodijeljen(ih) predmet(a) dospijeva u sljedećih {{days}} dana:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}."
   
   gui_validation_error: 1 pogreška
   gui_validation_error_plural: "{{count}} pogrešaka"
@@ -253,7 +253,6 @@
   field_attr_lastname: Atribut prezimena
   field_attr_mail: Atribut e-pošte
   field_onthefly: "Izrada korisnika \"u hodu\""
-  field_start_date: Pocetak
   field_done_ratio: % UÄinjeno
   field_auth_source: Vrsta prijavljivanja
   field_hide_mail: Sakrij moju adresu e-pošte
@@ -701,7 +700,6 @@
   label_search_titles_only: Pretraživanje samo naslova
   label_user_mail_option_all: "Za bilo koji događaj na svim mojim projektima"
   label_user_mail_option_selected: "Za bilo koji događaj samo za izabrane projekte..."
-  label_user_mail_option_none: "Samo za stvari koje pratim ili u kojima sudjelujem"
   label_user_mail_no_self_notified: "Ne želim primati obavijesti o promjenama koje sam napravim"
   label_registration_activation_by_email: aktivacija putem e-pošte
   label_registration_manual_activation: ruÄna aktivacija
@@ -815,9 +813,9 @@
   text_journal_set_to: "{{label}} postavi na {{value}}"
   text_journal_deleted: "{{label}} izbrisano ({{old}})"
   text_journal_added: "{{label}} {{value}} added"  
-  text_tip_task_begin_day: Zadaci koji poÄinju ovog dana
-  text_tip_task_end_day: zadaci koji se završavaju ovog dana
-  text_tip_task_begin_end_day: Zadaci koji poÄinju i zavrÅ¡avaju se ovog dana
+  text_tip_issue_begin_day: Zadaci koji poÄinju ovog dana
+  text_tip_issue_end_day: zadaci koji se završavaju ovog dana
+  text_tip_issue_begin_end_day: Zadaci koji poÄinju i zavrÅ¡avaju se ovog dana
   text_project_identifier_info: 'mala slova (a-z), brojevi i crtice su dozvoljeni.<br />Jednom snimljen identifikator se ne može mijenjati!'
   text_caracters_maximum: "Najviše {{count}} znakova."
   text_caracters_minimum: "Mora biti dugaÄko najmanje {{count}} znakova."
@@ -920,8 +918,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/hu.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/hu.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -260,7 +260,6 @@
   field_attr_lastname: Vezetéknév
   field_attr_mail: E-mail
   field_onthefly: On-the-fly felhasználó létrehozás
-  field_start_date: Kezdés dátuma
   field_done_ratio: Elkészült (%)
   field_auth_source: Azonosítási mód
   field_hide_mail: Rejtse el az e-mail címem
@@ -612,7 +611,6 @@
   label_search_titles_only: Keresés csak a címekben
   label_user_mail_option_all: "Minden eseményről minden saját projektemben"
   label_user_mail_option_selected: "Minden eseményről a kiválasztott projektekben..."
-  label_user_mail_option_none: "Csak a megfigyelt dolgokról, vagy, amiben részt veszek"
   label_user_mail_no_self_notified: "Nem kérek értesítést az általam végzett módosításokról"
   label_registration_activation_by_email: Fiók aktiválása e-mailben
   label_registration_manual_activation: Manuális fiók aktiválás
@@ -682,9 +680,9 @@
   text_subprojects_destroy_warning: "Az alprojekt(ek): {{value}} szintén törlésre kerülnek."
   text_workflow_edit: Válasszon egy szerepkört, és egy feladat típust a workflow szerkesztéséhez
   text_are_you_sure: Biztos benne ?
-  text_tip_task_begin_day: a feladat ezen a napon kezdődik
-  text_tip_task_end_day: a feladat ezen a napon ér véget
-  text_tip_task_begin_end_day: a feladat ezen a napon kezdődik és ér véget
+  text_tip_issue_begin_day: a feladat ezen a napon kezdődik
+  text_tip_issue_end_day: a feladat ezen a napon ér véget
+  text_tip_issue_begin_end_day: a feladat ezen a napon kezdődik és ér véget
   text_project_identifier_info: 'Kis betűk (a-z), számok és kötőjel megengedett.<br />Mentés után az azonosítót megváltoztatni nem lehet.'
   text_caracters_maximum: "maximum {{count}} karakter."
   text_caracters_minimum: "Legkevesebb {{count}} karakter hosszúnek kell lennie."
@@ -839,12 +837,12 @@
   text_wiki_page_destroy_children: Minden aloldal és leszármazottjának törlése
   setting_password_min_length: Minimum jelszó hosszúság
   field_group_by: Szerint csoportosítva
-  mail_subject_wiki_content_updated: "'{{page}}' wiki oldal frissítve"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki oldal frissítve"
   label_wiki_content_added: Wiki oldal hozzáadva
-  mail_subject_wiki_content_added: "Új wiki oldal: '{{page}}'"
-  mail_body_wiki_content_added: A '{{page}}' wiki oldalt {{author}} hozta létre.
+  mail_subject_wiki_content_added: "Új wiki oldal: '{{id}}'"
+  mail_body_wiki_content_added: A '{{id}}' wiki oldalt {{author}} hozta létre.
   label_wiki_content_updated: Wiki oldal frissítve
-  mail_body_wiki_content_updated: A '{{page}}' wiki oldalt {{author}} frissítette.
+  mail_body_wiki_content_updated: A '{{id}}' wiki oldalt {{author}} frissítette.
   permission_add_project: Projekt létrehozása
   setting_new_project_user_role_id: Projekt létrehozási jog nem adminisztrátor felhasználóknak
   label_view_all_revisions: Minden revízió megtekintése
@@ -936,8 +934,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/id.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/id.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -181,10 +181,10 @@
   mail_body_account_activation_request: "Pengguna baru ({{value}}) sudan didaftarkan. Akun tersebut menunggu persetujuan anda:"
   mail_subject_reminder: "{{count}} masalah harus selesai pada hari berikutnya ({{days}})"
   mail_body_reminder: "{{count}} masalah yang ditugaskan pada anda harus selesai dalam {{days}} hari kedepan:"
-  mail_subject_wiki_content_added: "'{{page}}' halaman wiki sudah ditambahkan"
-  mail_body_wiki_content_added: "The '{{page}}' halaman wiki sudah ditambahkan oleh {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' halaman wiki sudah diperbarui"
-  mail_body_wiki_content_updated: "The '{{page}}' halaman wiki sudah diperbarui oleh {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' halaman wiki sudah ditambahkan"
+  mail_body_wiki_content_added: "The '{{id}}' halaman wiki sudah ditambahkan oleh {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' halaman wiki sudah diperbarui"
+  mail_body_wiki_content_updated: "The '{{id}}' halaman wiki sudah diperbarui oleh {{author}}."
   
   gui_validation_error: 1 kesalahan
   gui_validation_error_plural: "{{count}} kesalahan"
@@ -251,7 +251,6 @@
   field_attr_lastname: Atribut nama belakang
   field_attr_mail: Atribut email
   field_onthefly: Pembuatan pengguna seketika
-  field_start_date: Mulai
   field_done_ratio: % Selesai
   field_auth_source: Mode otentikasi
   field_hide_mail: Sembunyikan email saya
@@ -688,7 +687,6 @@
   label_search_titles_only: Cari judul saja
   label_user_mail_option_all: "Untuk semua kejadian pada semua proyek saya"
   label_user_mail_option_selected: "Hanya untuk semua kejadian pada proyek yang saya pilih ..."
-  label_user_mail_option_none: "Hanya pada hal-hal yang saya pantau atau saya terlibat di dalamnya"
   label_user_mail_no_self_notified: "Saya tak ingin diberitahu untuk perubahan yang saya buat sendiri"
   label_user_mail_assigned_only_mail_notification: "Kirim email hanya bila saya ditugaskan untuk masalah terkait"
   label_user_mail_block_mail_notification: "Saya tidak ingin menerima email. Terima kasih."  
@@ -796,9 +794,9 @@
   text_journal_set_to: "{{label}} di set ke {{value}}"
   text_journal_deleted: "{{label}} dihapus ({{old}})"
   text_journal_added: "{{label}} {{value}} ditambahkan"
-  text_tip_task_begin_day: tugas dimulai hari itu
-  text_tip_task_end_day: tugas berakhir hari itu
-  text_tip_task_begin_end_day: tugas dimulai dan berakhir hari itu
+  text_tip_issue_begin_day: tugas dimulai hari itu
+  text_tip_issue_end_day: tugas berakhir hari itu
+  text_tip_issue_begin_end_day: tugas dimulai dan berakhir hari itu
   text_project_identifier_info: 'Yang diijinkan hanya huruf kecil (a-z), angka dan tanda minus.<br />Sekali disimpan, pengenal tidak bisa diubah.'
   text_caracters_maximum: "maximum {{count}} karakter."
   text_caracters_minimum: "Setidaknya harus sepanjang {{count}} karakter."
@@ -921,8 +919,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/it.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/it.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -232,7 +232,6 @@
   field_attr_lastname: Attributo cognome
   field_attr_mail: Attributo email
   field_onthefly: Creazione utente "al volo"
-  field_start_date: Inizio
   field_done_ratio: % completato
   field_auth_source: Modalità di autenticazione
   field_hide_mail: Nascondi il mio indirizzo email
@@ -572,9 +571,9 @@
   text_project_destroy_confirmation: Sei sicuro di voler eliminare il progetto e tutti i dati ad esso collegati?
   text_workflow_edit: Seleziona un ruolo ed un tracker per modificare il workflow
   text_are_you_sure: Sei sicuro ?
-  text_tip_task_begin_day: attività che iniziano in questa giornata
-  text_tip_task_end_day: attività che terminano in questa giornata
-  text_tip_task_begin_end_day: attività che iniziano e terminano in questa giornata
+  text_tip_issue_begin_day: attività che iniziano in questa giornata
+  text_tip_issue_end_day: attività che terminano in questa giornata
+  text_tip_issue_begin_end_day: attività che iniziano e terminano in questa giornata
   text_project_identifier_info: "Lettere minuscole (a-z), numeri e trattini permessi.<br />Una volta salvato, l'identificativo non può essere modificato."
   text_caracters_maximum: "massimo {{count}} caratteri."
   text_length_between: "Lunghezza compresa tra {{min}} e {{max}} caratteri."
@@ -632,7 +631,6 @@
   text_user_mail_option: "Per i progetti non selezionati, riceverai solo le notifiche riguardanti le cose che osservi o nelle quali sei coinvolto (per esempio segnalazioni che hai creato o che ti sono state assegnate)."
   label_user_mail_option_selected: "Solo per gli eventi relativi ai progetti selezionati..."
   label_user_mail_option_all: "Per ogni evento relativo ad uno dei miei progetti"
-  label_user_mail_option_none: "Solo per argomenti che osservo o che mi riguardano"
   setting_emails_footer: Piè di pagina email
   label_float: Decimale
   button_copy: Copia
@@ -820,12 +818,12 @@
   text_wiki_page_destroy_children: Elimina le pagine figlie e tutta la discendenza
   setting_password_min_length: Lunghezza minima password
   field_group_by: Raggruppa risultati per
-  mail_subject_wiki_content_updated: "La pagina wiki '{{page}}' è stata aggiornata"
+  mail_subject_wiki_content_updated: "La pagina wiki '{{id}}' è stata aggiornata"
   label_wiki_content_added: Aggiunta pagina al wiki
-  mail_subject_wiki_content_added: "La pagina '{{page}}' è stata aggiunta al wiki"
-  mail_body_wiki_content_added: La pagina '{{page}}' è stata aggiunta al wiki da {{author}}.
+  mail_subject_wiki_content_added: "La pagina '{{id}}' è stata aggiunta al wiki"
+  mail_body_wiki_content_added: La pagina '{{id}}' è stata aggiunta al wiki da {{author}}.
   label_wiki_content_updated: Aggiornata pagina wiki
-  mail_body_wiki_content_updated: La pagina '{{page}}' wiki è stata aggiornata da{{author}}.
+  mail_body_wiki_content_updated: La pagina '{{id}}' wiki è stata aggiornata da{{author}}.
   permission_add_project: Crea progetto
   setting_new_project_user_role_id: Ruolo assegnato agli utenti non amministratori che creano un progetto
   label_view_all_revisions: Mostra tutte le revisioni
@@ -917,8 +915,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/ja.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/ja.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -175,6 +175,7 @@
   notice_file_not_found: アクセスã—よã†ã¨ã—ãŸãƒšãƒ¼ã‚¸ã¯å­˜åœ¨ã—ãªã„ã‹å‰Šé™¤ã•れã¦ã„ã¾ã™ã€‚
   notice_locking_conflict: 別ã®ãƒ¦ãƒ¼ã‚¶ãŒãƒ‡ãƒ¼ã‚¿ã‚’æ›´æ–°ã—ã¦ã„ã¾ã™ã€‚
   notice_not_authorized: ã“ã®ãƒšãƒ¼ã‚¸ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯èªè¨¼ãŒå¿…è¦ã§ã™ã€‚
+  notice_not_authorized_archived_project: ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã¯æ›¸åº«ã«ä¿å­˜ã•れã¦ã„ã¾ã™ã€‚
   notice_email_sent: "{{value}} å®›ã«ãƒ¡ãƒ¼ãƒ«ã‚’é€ä¿¡ã—ã¾ã—ãŸã€‚"
   notice_email_error: "メールé€ä¿¡ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠({{value}})"
   notice_feeds_access_key_reseted: RSSã‚¢ã‚¯ã‚»ã‚¹ã‚­ãƒ¼ã‚’åˆæœŸåŒ–ã—ã¾ã—ãŸã€‚
@@ -218,10 +219,10 @@
   mail_body_account_activation_request: "æ–°ã—ã„ユーザ {{value}} ãŒç™»éŒ²ã•れã¾ã—ãŸã€‚ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã‚ãªãŸã®æ‰¿èªå¾…ã¡ã§ã™ï¼š"
   mail_subject_reminder: "{{count}}ä»¶ã®ãƒã‚±ãƒƒãƒˆã®æœŸæ—¥ãŒ{{days}}日以内ã«åˆ°æ¥ã—ã¾ã™"
   mail_body_reminder: "{{count}}ä»¶ã®æ‹…当ãƒã‚±ãƒƒãƒˆã®æœŸæ—¥ãŒ{{days}}日以内ã«åˆ°æ¥ã—ã¾ã™:"
-  mail_subject_wiki_content_added: "Wikiページ {{page}} ãŒè¿½åŠ ã•れã¾ã—ãŸ"
-  mail_body_wiki_content_added: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{page}} ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚"
-  mail_subject_wiki_content_updated: "Wikiページ {{page}} ãŒæ›´æ–°ã•れã¾ã—ãŸ"
-  mail_body_wiki_content_updated: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{page}} ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚"
+  mail_subject_wiki_content_added: "Wikiページ {{id}} ãŒè¿½åŠ ã•れã¾ã—ãŸ"
+  mail_body_wiki_content_added: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{id}} ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚"
+  mail_subject_wiki_content_updated: "Wikiページ {{id}} ãŒæ›´æ–°ã•れã¾ã—ãŸ"
+  mail_body_wiki_content_updated: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{id}} ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚"
   
   gui_validation_error: 1ä»¶ã®ã‚¨ãƒ©ãƒ¼
   gui_validation_error_plural: "{{count}}ä»¶ã®ã‚¨ãƒ©ãƒ¼"
@@ -287,7 +288,6 @@
   field_attr_lastname: 苗字属性
   field_attr_mail: メール属性
   field_onthefly: ã‚ã‚ã›ã¦ãƒ¦ãƒ¼ã‚¶ã‚’作æˆ
-  field_start_date: é–‹å§‹æ—¥
   field_done_ratio: é€²æ— %
   field_auth_source: èªè¨¼æ–¹å¼
   field_hide_mail: メールアドレスを隠ã™
@@ -376,6 +376,7 @@
   setting_issue_done_ratio_issue_status: ãƒã‚±ãƒƒãƒˆã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’使用ã™ã‚‹
   setting_start_of_week: 週ã®é–‹å§‹æ›œæ—¥
   setting_rest_api_enabled: RESTã«ã‚ˆã‚‹Webサービスを有効ã«ã™ã‚‹
+  setting_default_notification_option: デフォルトã®ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã‚ªãƒ—ション
   
   permission_add_project: プロジェクトã®è¿½åŠ 
   permission_add_subprojects: サブプロジェクトã®è¿½åŠ 
@@ -701,7 +702,7 @@
   label_relation_delete: 関連ã®å‰Šé™¤
   label_relates_to: 関係ã—ã¦ã„ã‚‹
   label_duplicates: é‡è¤‡ã—ã¦ã„ã‚‹
-  label_duplicated_by: é‡è¤‡ã—ã¦ã„ã‚‹
+  label_duplicated_by: é‡è¤‡ã•れã¦ã„ã‚‹
   label_blocks: ブロックã—ã¦ã„ã‚‹
   label_blocked_by: ブロックã•れã¦ã„ã‚‹
   label_precedes: 先行ã™ã‚‹
@@ -752,7 +753,10 @@
   label_search_titles_only: タイトルã®ã¿
   label_user_mail_option_all: "å‚加ã—ã¦ã„るプロジェクトã®å…¨ã¦ã®é€šçŸ¥"
   label_user_mail_option_selected: "é¸æŠžã—ãŸãƒ—ロジェクトã®å…¨ã¦ã®é€šçŸ¥..."
-  label_user_mail_option_none: "ウォッãƒã¾ãŸã¯é–¢ä¿‚ã—ã¦ã„る事柄ã®ã¿"
+  label_user_mail_option_none: "通知ã—ãªã„"
+  label_user_mail_option_only_my_events: "ウォッãƒã¾ãŸã¯é–¢ä¿‚ã—ã¦ã„る事柄ã®ã¿"
+  label_user_mail_option_only_assigned: "è‡ªåˆ†ãŒæ‹…当ã—ã¦ã„る事柄ã®ã¿"
+  label_user_mail_option_only_owner: "自分ãŒä½œæˆã—ãŸäº‹æŸ„ã®ã¿"
   label_user_mail_no_self_notified: 自分自身ã«ã‚ˆã‚‹å¤‰æ›´ã®é€šçŸ¥ã¯ä¸è¦
   label_registration_activation_by_email: メールã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’有効化
   label_registration_manual_activation: 手動ã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’有効化
@@ -870,9 +874,9 @@
   text_journal_set_to: "{{label}} ã‚’ {{value}} ã«ã‚»ãƒƒãƒˆ"
   text_journal_deleted: "{{label}} を削除 ({{old}})"
   text_journal_added: "{{label}} {{value}} を追加"
-  text_tip_task_begin_day: ã“ã®æ—¥ã«é–‹å§‹ã™ã‚‹ã‚¿ã‚¹ã‚¯
-  text_tip_task_end_day: ã“ã®æ—¥ã«çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯
-  text_tip_task_begin_end_day: ã“ã®æ—¥ã®ã†ã¡ã«é–‹å§‹ã—ã¦çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯
+  text_tip_issue_begin_day: ã“ã®æ—¥ã«é–‹å§‹ã™ã‚‹ã‚¿ã‚¹ã‚¯
+  text_tip_issue_end_day: ã“ã®æ—¥ã«çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯
+  text_tip_issue_begin_end_day: ã“ã®æ—¥ã®ã†ã¡ã«é–‹å§‹ã—ã¦çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯
   text_project_identifier_info: 'è‹±å°æ–‡å­—(a-z)ã¨æ•°å­—ã¨ãƒ€ãƒƒã‚·ãƒ¥(-)ãŒä½¿ãˆã¾ã™ã€‚<br />一度ä¿å­˜ã™ã‚‹ã¨ã€è­˜åˆ¥å­ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。'
   text_caracters_maximum: "最大{{count}}文字ã§ã™ã€‚"
   text_caracters_minimum: "最低{{count}}文字ã®é•·ã•ãŒå¿…è¦ã§ã™"
@@ -943,3 +947,8 @@
   enumeration_doc_categories: 文書カテゴリ
   enumeration_activities: 作業分類 (時間トラッキング)
   enumeration_system_activity: システム作業分類
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/ko.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/ko.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -231,10 +231,10 @@
   mail_body_account_activation_request: "새 사용ìž({{value}})ê°€ 등ë¡ë˜ì—ˆìŠµë‹ˆë‹¤. 관리ìžë‹˜ì˜ 승ì¸ì„ 기다리고 있습니다.:"
   mail_body_reminder: "ë‹¹ì‹ ì´ ë§¡ê³  있는 ì¼ê° {{count}}ê°œì˜ ì™„ë£Œ ê¸°í•œì´ {{days}}ì¼ í›„ 입니다."
   mail_subject_reminder: "ë‚´ì¼ì´ ë§Œê¸°ì¸ ì¼ê° {{count}}ê°œ ({{days}})"
-  mail_subject_wiki_content_added: "위키페ì´ì§€ '{{page}}'ì´(ê°€) 추가ë˜ì—ˆìŠµë‹ˆë‹¤."
-  mail_subject_wiki_content_updated: "'위키페ì´ì§€ {{page}}'ì´(ê°€) 수정ë˜ì—ˆìŠµë‹ˆë‹¤."
-  mail_body_wiki_content_added: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{page}}'ì„(를) 추가하였습니다."
-  mail_body_wiki_content_updated: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{page}}'ì„(를) 수정하였습니다."
+  mail_subject_wiki_content_added: "위키페ì´ì§€ '{{id}}'ì´(ê°€) 추가ë˜ì—ˆìŠµë‹ˆë‹¤."
+  mail_subject_wiki_content_updated: "'위키페ì´ì§€ {{id}}'ì´(ê°€) 수정ë˜ì—ˆìŠµë‹ˆë‹¤."
+  mail_body_wiki_content_added: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{id}}'ì„(를) 추가하였습니다."
+  mail_body_wiki_content_updated: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{id}}'ì„(를) 수정하였습니다."
   
   gui_validation_error: ì—러
   gui_validation_error_plural: "{{count}}ê°œ ì—러"
@@ -299,7 +299,6 @@
   field_attr_lastname: 성 ì†ì„±
   field_attr_mail: ë©”ì¼ ì†ì„±
   field_onthefly: ë™ì  ì‚¬ìš©ìž ìƒì„±
-  field_start_date: 시작시간
   field_done_ratio: ì§„ì²™ë„
   field_auth_source: ì¸ì¦ 공급ìž
   field_hide_mail: ë©”ì¼ ì£¼ì†Œ 숨기기
@@ -727,7 +726,6 @@
   label_search_titles_only: 제목ì—서만 찾기
   label_user_mail_option_all: "ë‚´ê°€ ì†í•œ 프로ì íŠ¸ë¡œë“¤ë¶€í„° 모든 ë©”ì¼ ë°›ê¸°"
   label_user_mail_option_selected: "ì„ íƒí•œ 프로ì íŠ¸ë“¤ë¡œë¶€í„° 모든 ë©”ì¼ ë°›ê¸°.."
-  label_user_mail_option_none: "ë‚´ê°€ ì†í•˜ê±°ë‚˜ ê°ì‹œ ì¤‘ì¸ ì‚¬í•­ì— ëŒ€í•´ì„œë§Œ"
   label_user_mail_no_self_notified: "ë‚´ê°€ 만든 ë³€ê²½ì‚¬í•­ë“¤ì— ëŒ€í•´ì„œëŠ” 알림메ì¼ì„ 받지 않습니다."
   label_registration_activation_by_email: ë©”ì¼ë¡œ ê³„ì •ì„ í™œì„±í™”í•˜ê¸°
   label_registration_automatic_activation: ìžë™ 계정 활성화
@@ -810,9 +808,9 @@
   text_subprojects_destroy_warning: "하위 프로ì íЏ({{value}})ì´(ê°€) ìžë™ìœ¼ë¡œ 지워질 것입니다."
   text_workflow_edit: 업무í름 수정하려면 ì—­í• ê³¼ ì¼ê°ìœ í˜•ì„ ì„ íƒí•˜ì„¸ìš”.
   text_are_you_sure: ê³„ì† ì§„í–‰ 하시겠습니까?
-  text_tip_task_begin_day: 오늘 시작하는 업무(task)
-  text_tip_task_end_day: 오늘 종료하는 업무(task)
-  text_tip_task_begin_end_day: 오늘 시작하고 종료하는 업무(task)
+  text_tip_issue_begin_day: 오늘 시작하는 업무(task)
+  text_tip_issue_end_day: 오늘 종료하는 업무(task)
+  text_tip_issue_begin_end_day: 오늘 시작하고 종료하는 업무(task)
   text_project_identifier_info: 'ì˜ë¬¸ 소문ìž(a-z) ë° ìˆ«ìž, 대쉬(-) 가능.<br />저장ëœí›„ì—는 ì‹ë³„ìž ë³€ê²½ 불가능.'
   text_caracters_maximum: "최대 {{count}} ê¸€ìž ê°€ëŠ¥"
   text_caracters_minimum: "최소한 {{count}} ê¸€ìž ì´ìƒì´ì–´ì•¼ 합니다."
@@ -969,8 +967,19 @@
   field_time_entries: 기ë¡ëœ 시간
   project_module_gantt: Gantt 챠트
   project_module_calendar: 달력
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/lt.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/lt.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -241,10 +241,10 @@
   mail_body_account_activation_request: "Užsiregistravo naujas vartotojas ({{value}}). Jo paskyra laukia jūsų patvirtinimo:"
   mail_subject_reminder: "{{count}} darbas(ai) po kelių {{days}} dienų"
   mail_body_reminder: "{{count}} darbas(ai), kurie yra jums priskirti, baigiasi po {{days}} dienų(os):"
-  mail_subject_wiki_content_added: "'{{page}}' pridÄ—tas wiki puslapis"
-  mail_body_wiki_content_added: "The '{{page}}' wiki puslapi pridÄ—jo {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' atnaujintas wiki puslapis"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki puslapį atnaujino {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' pridÄ—tas wiki puslapis"
+  mail_body_wiki_content_added: "The '{{id}}' wiki puslapi pridÄ—jo {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' atnaujintas wiki puslapis"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki puslapį atnaujino {{author}}."
 
   gui_validation_error: 1 klaida
   gui_validation_error_plural: "{{count}} klaidų(os)"
@@ -310,7 +310,6 @@
   field_attr_lastname: PavardÄ—s priskiria
   field_attr_mail: Elektroninio pašto požymis
   field_onthefly: Automatinis vartotojų registravimas
-  field_start_date: PradÄ—ti
   field_done_ratio: % atlikta
   field_auth_source: Autentiškumo nustatymo būdas
   field_hide_mail: Paslėpkite mano elektroninio pašto adresą
@@ -742,7 +741,6 @@
   label_search_titles_only: Ieškoti pavadinimų tiktai
   label_user_mail_option_all: "Bet kokiam įvykiui visuose mano projektuose"
   label_user_mail_option_selected: "Bet kokiam įvykiui tiktai pasirinktuose projektuose ..."
-  label_user_mail_option_none: "Tiktai dalykai kuriuos aš stebiu ar aš esu įtrauktas į"
   label_user_mail_no_self_notified: "Nenoriu būti informuotas apie pakeitimus, kuriuos pats atlieku"
   label_registration_activation_by_email: "paskyros aktyvacija per e-paštą"
   label_registration_manual_activation: "rankinÄ— paskyros aktyvacija"
@@ -852,9 +850,9 @@
   text_journal_set_to: "{{label}} pakeista į {{value}}"
   text_journal_deleted: "{{label}} ištrintas ({{old}})"
   text_journal_added: "{{label}} {{value}} pridÄ—tas"
-  text_tip_task_begin_day: užduotis, prasidedanti šią dieną
-  text_tip_task_end_day: užduotis, pasibaigianti šią dieną
-  text_tip_task_begin_end_day: užduotis, prasidedanti ir pasibaigianti šią dieną
+  text_tip_issue_begin_day: užduotis, prasidedanti šią dieną
+  text_tip_issue_end_day: užduotis, pasibaigianti šią dieną
+  text_tip_issue_begin_end_day: užduotis, prasidedanti ir pasibaigianti šią dieną
   text_project_identifier_info: 'Mažosios raidÄ—s (a-z), skaiÄiai ir brÅ«kÅ¡niai galimi.<br/>IÅ¡saugojus, identifikuotojas negali bÅ«ti keiÄiamas.'
   text_caracters_maximum: "{{count}} simbolių maksimumas."
   text_caracters_minimum: "Turi būti mažiausiai {{count}} simbolių ilgio."
@@ -977,8 +975,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/lv.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/lv.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -180,10 +180,10 @@
   mail_body_account_activation_request: "Jauns lietotÄjs ({{value}}) ir reÄ£istrÄ“ts. LietotÄja konts gaida JÅ«su apstiprinÄjumu:"
   mail_subject_reminder: "{{count}} uzdevums(i) sagaidÄms(i) tuvÄkajÄs {{days}} dienÄs"
   mail_body_reminder: "{{count}} uzdevums(i), kurÅ¡(i) ir nozÄ«mÄ“ts(i) Jums, sagaidÄms(i) tuvÄkajÄs {{days}} dienÄs:"
-  mail_subject_wiki_content_added: "'{{page}}' Wiki lapa pievienota"
-  mail_body_wiki_content_added: "The '{{page}}' Wiki lapu pievienojis {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' Wiki lapa atjaunota"
-  mail_body_wiki_content_updated: "The '{{page}}' Wiki lapu atjaunojis {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' Wiki lapa pievienota"
+  mail_body_wiki_content_added: "The '{{id}}' Wiki lapu pievienojis {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' Wiki lapa atjaunota"
+  mail_body_wiki_content_updated: "The '{{id}}' Wiki lapu atjaunojis {{author}}."
   
   gui_validation_error: 1 kļūda
   gui_validation_error_plural: "{{count}} kļūdas"
@@ -248,7 +248,6 @@
   field_attr_lastname: UzvÄrda atribÅ«ts
   field_attr_mail: "E-pasta atribūts"
   field_onthefly: "LietotÄja izveidoÅ¡ana on-the-fly"
-  field_start_date: SÄkuma datums
   field_done_ratio: % padarīti
   field_auth_source: Pilnvarošanas režīms
   field_hide_mail: "Paslēpt manu e-pasta adresi"
@@ -702,7 +701,6 @@
   label_search_titles_only: Meklēt tikai nosaukumos
   label_user_mail_option_all: "Par visiem notikumiem visos manos projektos"
   label_user_mail_option_selected: "Par visiem notikumiem tikai izvēlētajos projektos..."
-  label_user_mail_option_none: "Tikai par lietÄm, kuras es vÄ“roju un kurÄs esmu iesaistÄ«ts"
   label_user_mail_no_self_notified: "Neziņot man par izmaiņÄm, kuras veicu es pats"
   label_registration_activation_by_email: "konta aktivizÄcija caur e-pastu"
   label_registration_manual_activation: manuÄlÄ konta aktivizÄcija
@@ -816,9 +814,9 @@
   text_journal_set_to: "{{label}} iestatīts uz {{value}}"
   text_journal_deleted: "{{label}} dzēsts ({{old}})"
   text_journal_added: "{{label}} {{value}} pievienots"
-  text_tip_task_begin_day: uzdevums sÄkas Å¡odien
-  text_tip_task_end_day: uzdevums beidzas šodien
-  text_tip_task_begin_end_day: uzdevums sÄkas un beidzas Å¡odien
+  text_tip_issue_begin_day: uzdevums sÄkas Å¡odien
+  text_tip_issue_end_day: uzdevums beidzas šodien
+  text_tip_issue_begin_end_day: uzdevums sÄkas un beidzas Å¡odien
   text_project_identifier_info: 'Tikai mazie burti (a-z), cipari un domuzÄ«mes ir atļauti.<br />Kad saglabÄts, identifikators nevar tikt mainÄ«ts.'
   text_caracters_maximum: "{{count}} simboli maksimÄli."
   text_caracters_minimum: "JÄbÅ«t vismaz {{count}} simbolu garumÄ."
@@ -908,8 +906,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/locales/mk.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,929 @@
+mk:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%d/%m/%Y"
+      short: "%d %b"
+      long: "%d %B, %Y"
+
+    day_names: [недела, понеделник, вторник, Ñреда, четврток, петок, Ñабота]
+    abbr_day_names: [нед, пон, вто, Ñре, чет, пет, Ñаб]
+
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, јануари, февруари, март, април, мај, јуни, јули, авгуÑÑ‚, Ñептември, октомври, ноември, декември]
+    abbr_month_names: [~, јан, фев, мар, апр, мај, јун, јул, авг, Ñеп, окт, ное, дек]
+    # Used in date_select and datime_select.
+    order: [ :day, :month, :year ]
+
+  time:
+    formats:
+      default: "%d/%m/%Y %H:%M"
+      time: "%H:%M"
+      short: "%d %b %H:%M"
+      long: "%d %B, %Y %H:%M"
+    am: "предпладне"
+    pm: "попладне"
+
+  datetime:
+    distance_in_words:
+      half_a_minute: "пола минута"
+      less_than_x_seconds:
+        one:   "помалку од 1 Ñекунда"
+        other: "помалку од {{count}} Ñекунди"
+      x_seconds:
+        one:   "1 Ñекунда"
+        other: "{{count}} Ñекунди"
+      less_than_x_minutes:
+        one:   "помалку од 1 минута"
+        other: "помалку од {{count}} минути"
+      x_minutes:
+        one:   "1 минута"
+        other: "{{count}} минути"
+      about_x_hours:
+        one:   "околу 1 чаÑ"
+        other: "околу {{count}} чаÑа"
+      x_days:
+        one:   "1 ден"
+        other: "{{count}} дена"
+      about_x_months:
+        one:   "околу 1 меÑец"
+        other: "околу {{count}} меÑеци"
+      x_months:
+        one:   "1 меÑец"
+        other: "{{count}} меÑеци"
+      about_x_years:
+        one:   "околу 1 година"
+        other: "околу {{count}} години"
+      over_x_years:
+        one:   "преку 1 година"
+        other: "преку {{count}} години"
+      almost_x_years:
+        one:   "Ñкоро 1 година"
+        other: "Ñкоро {{count}} години"
+
+  number:
+    # Default format for numbers
+    format:
+      separator: "."
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Byte"
+            other: "Bytes"
+          kb: "KB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "и"
+      skip_last_comma: false
+
+  activerecord:
+    errors:
+      messages:
+        inclusion: "не е вклучено во лиÑтата"
+        exclusion: "е резервирано"
+        invalid: "е невалидно"
+        confirmation: "не Ñе Ñовпаѓа Ñо потврдата"
+        accepted: "мора да е прифатено"
+        empty: "неможе да е празно"
+        blank: "неможе да е празно"
+        too_long: "е предолго (макÑ. {{count}} знаци)"
+        too_short: "е прекратко (мин. {{count}} знаци)"
+        wrong_length: "е погрешна должина (треба да е  {{count}} знаци)"
+        taken: "е веќе зафатено"
+        not_a_number: "не е број"
+        not_a_date: "не е валидна дата"
+        greater_than: "мора да е поголемо од {{count}}"
+        greater_than_or_equal_to: "мора да е поголемо или еднакво на {{count}}"
+        equal_to: "мора да е еднакво на {{count}}"
+        less_than: "мора да е помало од {{count}}"
+        less_than_or_equal_to: "мора да е помало или еднакво на {{count}}"
+        odd: "мора да е непарно"
+        even: "мора да е парно"
+        greater_than_start_date: "мора да е поголема од почетната дата"
+        not_same_project: "не припаѓа на иÑтиот проект"
+        circular_dependency: "Оваа врÑка ќе креира кружна завиÑноÑÑ‚"
+        cant_link_an_issue_with_a_descendant: "Задача неможе да Ñе поврзе Ñо една од нејзините подзадачи"
+
+  actionview_instancetag_blank_option: Изберете
+
+  general_text_No: 'Ðе'
+  general_text_Yes: 'Да'
+  general_text_no: 'не'
+  general_text_yes: 'да'
+  general_lang_name: 'Macedonian (МакедонÑки)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '1'
+
+  notice_account_updated: Профилот е уÑпешно ажуриран.
+  notice_account_invalid_creditentials: Ðеточен кориÑник или лозинка
+  notice_account_password_updated: Лозинката е уÑпешно ажурирана.
+  notice_account_wrong_password: Погрешна лозинка
+  notice_account_register_done: Профилот е уÑпешно креиран. За активација, клкнете на врÑката што ви е пратена по е-пошта.
+  notice_account_unknown_email: Ðепознат кориÑник.
+  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
+  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
+  notice_account_activated: Your account has been activated. You can now log in.
+  notice_successful_create: УÑпешно креирање.
+  notice_successful_update: УÑпешно ажурирање.
+  notice_successful_delete: УÑпешно бришење.
+  notice_successful_connection: УÑпешна конекција.
+  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
+  notice_locking_conflict: Data has been updated by another user.
+  notice_not_authorized: You are not authorized to access this page.
+  notice_email_sent: "Е-порака е пратена на {{value}}"
+  notice_email_error: "Се Ñлучи грешка при праќање на е-пораката ({{value}})"
+  notice_feeds_access_key_reseted: Вашиот RSS клуч за приÑтап е reset.
+  notice_api_access_key_reseted: Вашиот API клуч за приÑтап е reset.
+  notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}."
+  notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
+  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
+  notice_account_pending: "Your account was created and is now pending administrator approval."
+  notice_default_data_loaded: Default configuration successfully loaded.
+  notice_unable_delete_version: Unable to delete version.
+  notice_unable_delete_time_entry: Unable to delete time log entry.
+  notice_issue_done_ratios_updated: Issue done ratios updated.
+
+  error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}"
+  error_scm_not_found: "The entry or revision was not found in the repository."
+  error_scm_command_failed: "An error occurred when trying to access the repository: {{value}}"
+  error_scm_annotate: "The entry does not exist or can not be annotated."
+  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
+  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
+  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
+  error_can_not_delete_custom_field: Unable to delete custom field
+  error_can_not_delete_tracker: "This tracker contains issues and can't be deleted."
+  error_can_not_remove_role: "This role is in use and can not be deleted."
+  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
+  error_can_not_archive_project: This project can not be archived
+  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
+  error_workflow_copy_source: 'Please select a source tracker or role'
+  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
+  error_unable_delete_issue_status: 'Unable to delete issue status'
+  error_unable_to_connect: "Unable to connect ({{value}})"
+  warning_attachments_not_saved: "{{count}} file(s) could not be saved."
+
+  mail_subject_lost_password: "Вашата {{value}} лозинка"
+  mail_body_lost_password: 'To change your password, click on the following link:'
+  mail_subject_register: "Your {{value}} account activation"
+  mail_body_register: 'To activate your account, click on the following link:'
+  mail_body_account_information_external: "You can use your {{value}} account to log in."
+  mail_body_account_information: Your account information
+  mail_subject_account_activation_request: "{{value}} account activation request"
+  mail_body_account_activation_request: "Ðов кориÑник ({{value}}) е региÑтриран. The account is pending your approval:"
+  mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
+  mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}."
+
+  gui_validation_error: 1 грешка
+  gui_validation_error_plural: "{{count}} грешки"
+
+  field_name: Име
+  field_description: ОпиÑ
+  field_summary: Краток опиÑ
+  field_is_required: Задолжително
+  field_firstname: Име
+  field_lastname: Презиме
+  field_mail: Е-пошта
+  field_filename: Датотека
+  field_filesize: Големина
+  field_downloads: Превземања
+  field_author: Ðвтор
+  field_created_on: Креиран
+  field_updated_on: Ðжурирано
+  field_field_format: Формат
+  field_is_for_all: За Ñите проекти
+  field_possible_values: Можни вредноÑти
+  field_regexp: Regular expression
+  field_min_length: Минимална должина
+  field_max_length: МакÑимална должина
+  field_value: ВредноÑÑ‚
+  field_category: Категорија
+  field_title: ÐаÑлов
+  field_project: Проект
+  field_issue: Задача
+  field_status: СтатуÑ
+  field_notes: Белешки
+  field_is_closed: Задачата е затворена
+  field_is_default: Default value
+  field_tracker: Tracker
+  field_subject: ÐаÑлов
+  field_due_date: Краен рок
+  field_assigned_to: Доделена на
+  field_priority: Приоритет
+  field_fixed_version: Target version
+  field_user: КориÑник
+  field_principal: Principal
+  field_role: Улога
+  field_homepage: Веб Ñтрана
+  field_is_public: Јавен
+  field_parent: Подпроект на
+  field_is_in_roadmap: Issues displayed in roadmap
+  field_login: КориÑник
+  field_mail_notification: ИзвеÑтувања по e-пошта
+  field_admin: ÐдминиÑтратор
+  field_last_login_on: ПоÑледна најава
+  field_language: Јазик
+  field_effective_date: Дата
+  field_password: Лозинка
+  field_new_password: Ðова лозинка
+  field_password_confirmation: Потврда
+  field_version: Верзија
+  field_type: Тип
+  field_host: ХоÑÑ‚
+  field_port: Порт
+  field_account: Account
+  field_base_dn: Base DN
+  field_attr_login: Login attribute
+  field_attr_firstname: Firstname attribute
+  field_attr_lastname: Lastname attribute
+  field_attr_mail: Email attribute
+  field_onthefly: Моментално (On-the-fly) креирање на кориÑници
+  field_done_ratio: % Завршено
+  field_auth_source: Режим на автентикација
+  field_hide_mail: Криј ја мојата адреÑа на е-пошта
+  field_comments: Коментар
+  field_url: URL
+  field_start_page: Почетна Ñтрана
+  field_subproject: Подпроект
+  field_hours: ЧаÑови
+  field_activity: ÐктивноÑÑ‚
+  field_spent_on: Дата
+  field_identifier: Идентификатор
+  field_is_filter: КориÑти како филтер
+  field_issue_to: Поврзана задача
+  field_delay: Доцнење
+  field_assignable: Ðа оваа улога може да Ñе доделуваат задачи
+  field_redirect_existing_links: ПренаÑочи ги поÑтоечките врÑки
+  field_estimated_hours: Проценето време
+  field_column_names: Колони
+  field_time_entries: Бележи време
+  field_time_zone: ВременÑка зона
+  field_searchable: Може да Ñе пребарува
+  field_default_value: Default value
+  field_comments_sorting: Прикажувај коментари
+  field_parent_title: Parent page
+  field_editable: Може да Ñе уредува
+  field_watcher: Watcher
+  field_identity_url: OpenID URL
+  field_content: Содржина
+  field_group_by: Групирај ги резултатите Ñпоред
+  field_sharing: Споделување
+  field_parent_issue: Parent task
+
+  setting_app_title: ÐаÑлов на апликацијата
+  setting_app_subtitle: ПоднаÑлов на апликацијата
+  setting_welcome_text: ТекÑÑ‚ за добредојде
+  setting_default_language: Default јазик
+  setting_login_required: Задолжителна автентикација
+  setting_self_registration: Само-региÑтрација
+  setting_attachment_max_size: МакÑ. големина на прилог
+  setting_issues_export_limit: Issues export limit
+  setting_mail_from: Emission email address
+  setting_bcc_recipients: Blind carbon copy recipients (bcc)
+  setting_plain_text_mail: ТекÑтуални е-пораки (без HTML)
+  setting_host_name: Име на хоÑÑ‚ и патека
+  setting_text_formatting: Форматирање на текÑÑ‚
+  setting_wiki_compression: КомпреÑија на иÑторијата на вики
+  setting_feeds_limit: Feed content limit
+  setting_default_projects_public: Ðовите проекти Ñе иницијално јавни
+  setting_autofetch_changesets: Autofetch commits
+  setting_sys_api_enabled: Enable WS for repository management
+  setting_commit_ref_keywords: Referencing keywords
+  setting_commit_fix_keywords: Fixing keywords
+  setting_autologin: ÐвтоматÑка најава
+  setting_date_format: Формат на дата
+  setting_time_format: Формат на време
+  setting_cross_project_issue_relations: Дозволи релации на задачи меѓу проекти
+  setting_issue_list_default_columns: Default columns displayed on the issue list
+  setting_repositories_encodings: Repositories encodings
+  setting_commit_logs_encoding: Commit messages encoding
+  setting_emails_footer: Emails footer
+  setting_protocol: Протокол
+  setting_per_page_options: Objects per page options
+  setting_user_format: Приказ на кориÑниците
+  setting_activity_days_default: Денови прикажана во активноÑта на проектот
+  setting_display_subprojects_issues: Прикажи ги задачите на подпроектите во главните проекти
+  setting_enabled_scm: Овозможи SCM
+  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
+  setting_mail_handler_api_enabled: Enable WS for incoming emails
+  setting_mail_handler_api_key: API клуч
+  setting_sequential_project_identifiers: Генерирај поÑледователни идентификатори на проекти
+  setting_gravatar_enabled: КориÑти Gravatar кориÑнички икони
+  setting_gravatar_default: Default Gravatar image
+  setting_diff_max_lines_displayed: Max number of diff lines displayed
+  setting_file_max_size_displayed: Max size of text files displayed inline
+  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
+  setting_openid: Дозволи OpenID најава и региÑтрација
+  setting_password_min_length: Мин. должина на лозинка
+  setting_new_project_user_role_id: Улога доделена на неадминиÑтраторÑки кориÑник кој креира проект
+  setting_default_projects_modules: Default enabled modules for new projects
+  setting_issue_done_ratio: Calculate the issue done ratio with
+  setting_issue_done_ratio_issue_field: Use the issue field
+  setting_issue_done_ratio_issue_status: Use the issue status
+  setting_start_of_week: Start calendars on
+  setting_rest_api_enabled: Enable REST web service
+  setting_cache_formatted_text: Cache formatted text
+
+  permission_add_project: Креирај проекти
+  permission_add_subprojects: Креирај подпроекти
+  permission_edit_project: Уреди проект
+  permission_select_project_modules: Изберете модули за проект
+  permission_manage_members: Manage members
+  permission_manage_project_activities: Manage project activities
+  permission_manage_versions: Manage versions
+  permission_manage_categories: Manage issue categories
+  permission_view_issues: Прегледај задачи
+  permission_add_issues: Додавај задачи
+  permission_edit_issues: Уредувај задачи
+  permission_manage_issue_relations: Manage issue relations
+  permission_add_issue_notes: Додавај белешки
+  permission_edit_issue_notes: Уредувај белешки
+  permission_edit_own_issue_notes: Уредувај ÑопÑтвени белешки
+  permission_move_issues: ПремеÑтувај задачи
+  permission_delete_issues: Бриши задачи
+  permission_manage_public_queries: Manage public queries
+  permission_save_queries: Save queries
+  permission_view_gantt: View gantt chart
+  permission_view_calendar: View calendar
+  permission_view_issue_watchers: View watchers list
+  permission_add_issue_watchers: Add watchers
+  permission_delete_issue_watchers: Delete watchers
+  permission_log_time: Бележи потрошено време
+  permission_view_time_entries: Прегледај потрошено време
+  permission_edit_time_entries: Уредувај белешки за потрошено време
+  permission_edit_own_time_entries: Уредувај ÑопÑтвени белешки за потрошено време
+  permission_manage_news: Manage news
+  permission_comment_news: Коментирај на веÑти
+  permission_manage_documents: Manage documents
+  permission_view_documents: Прегледувај документи
+  permission_manage_files: Manage files
+  permission_view_files: Прегледувај датотеки
+  permission_manage_wiki: Manage wiki
+  permission_rename_wiki_pages: Преименувај вики Ñтраници
+  permission_delete_wiki_pages: Бриши вики Ñтраници
+  permission_view_wiki_pages: Прегледувај вики
+  permission_view_wiki_edits: Прегледувај вики иÑторија
+  permission_edit_wiki_pages: Уредувај вики Ñтраници
+  permission_delete_wiki_pages_attachments: Бриши прилози
+  permission_protect_wiki_pages: Заштитувај вики Ñтраници
+  permission_manage_repository: Manage repository
+  permission_browse_repository: Browse repository
+  permission_view_changesets: View changesets
+  permission_commit_access: Commit access
+  permission_manage_boards: Manage boards
+  permission_view_messages: View messages
+  permission_add_messages: Post messages
+  permission_edit_messages: Уредувај пораки
+  permission_edit_own_messages: Уредувај ÑопÑтвени пораки
+  permission_delete_messages: Бриши пораки
+  permission_delete_own_messages: Бриши ÑопÑтвени пораки
+  permission_export_wiki_pages: Export wiki pages
+  permission_manage_subtasks: Manage subtasks
+
+  project_module_issue_tracking: Следење на задачи
+  project_module_time_tracking: Следење на време
+  project_module_news: ВеÑти
+  project_module_documents: Документи
+  project_module_files: Датотеки
+  project_module_wiki: Вики
+  project_module_repository: Repository
+  project_module_boards: Форуми
+  project_module_calendar: Календар
+  project_module_gantt: Gantt
+
+  label_user: КориÑник
+  label_user_plural: КориÑници
+  label_user_new: Ðов кориÑник
+  label_user_anonymous: Ðнонимен
+  label_project: Проект
+  label_project_new: Ðов проект
+  label_project_plural: Проекти
+  label_x_projects:
+    zero:  нема проекти
+    one:   1 проект
+    other: "{{count}} проекти"
+  label_project_all: Сите проекти
+  label_project_latest: ПоÑледните проекти
+  label_issue: Задача
+  label_issue_new: Ðова задача
+  label_issue_plural: Задачи
+  label_issue_view_all: Прегледај ги Ñите задачи
+  label_issues_by: "Задачи по {{value}}"
+  label_issue_added: Задачата е додадена
+  label_issue_updated: Задачата е ажурирана
+  label_document: Документ
+  label_document_new: Ðов документ
+  label_document_plural: Документи
+  label_document_added: Документот е додаден
+  label_role: Улога
+  label_role_plural: Улоги
+  label_role_new: Ðова улога
+  label_role_and_permissions: Улоги и овлаÑтувања
+  label_member: Член
+  label_member_new: Ðов член
+  label_member_plural: Членови
+  label_tracker: Tracker
+  label_tracker_plural: Trackers
+  label_tracker_new: New tracker
+  label_workflow: Workflow
+  label_issue_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð½Ð° задача
+  label_issue_status_plural: СтатуÑи на задачи
+  label_issue_status_new: Ðов ÑтатуÑ
+  label_issue_category: Категорија на задача
+  label_issue_category_plural: Категории на задачи
+  label_issue_category_new: Ðова категорија
+  label_custom_field: Прилагодено поле
+  label_custom_field_plural: Прилагодени полиња
+  label_custom_field_new: Ðово прилагодено поле
+  label_enumerations: Enumerations
+  label_enumeration_new: Ðова вредноÑÑ‚
+  label_information: Информација
+  label_information_plural: Информации
+  label_please_login: Ðајави Ñе
+  label_register: РегиÑтрирај Ñе
+  label_login_with_open_id_option: или најави Ñе Ñо OpenID
+  label_password_lost: Изгубена лозинка
+  label_home: Почетна
+  label_my_page: Мојата Ñтрана
+  label_my_account: Мојот профил
+  label_my_projects: Мои проекти
+  label_my_page_block: Блок елемент
+  label_administration: ÐдминиÑтрација
+  label_login: Ðајави Ñе
+  label_logout: Одјави Ñе
+  label_help: Помош
+  label_reported_issues: Пријавени задачи
+  label_assigned_to_me_issues: Задачи доделени на мене
+  label_last_login: ПоÑледна најава
+  label_registered_on: РегиÑтриран на
+  label_activity: ÐктивноÑÑ‚
+  label_overall_activity: Севкупна активноÑÑ‚
+  label_user_activity: "ÐктивноÑÑ‚ на {{value}}"
+  label_new: Ðова
+  label_logged_as: Ðајавени Ñте како
+  label_environment: Опкружување
+  label_authentication: Ðвтентикација
+  label_auth_source: Режим на автентикација
+  label_auth_source_new: Ðов режим на автентикација
+  label_auth_source_plural: Режими на автентикација
+  label_subproject_plural: Подпроекти
+  label_subproject_new: Ðов подпроект
+  label_and_its_subprojects: "{{value}} и неговите подпроекти"
+  label_min_max_length: Мин. - МакÑ. должина
+  label_list: ЛиÑта
+  label_date: Дата
+  label_integer: Integer
+  label_float: Float
+  label_boolean: Boolean
+  label_string: ТекÑÑ‚
+  label_text: Долг текÑÑ‚
+  label_attribute: Ðтрибут
+  label_attribute_plural: Ðтрибути
+  label_download: "{{count}} превземање"
+  label_download_plural: "{{count}} превземања"
+  label_no_data: Ðема податоци за прикажување
+  label_change_status: Промени ÑтатуÑ
+  label_history: ИÑторија
+  label_attachment: Датотека
+  label_attachment_new: Ðова датотека
+  label_attachment_delete: Избриши датотека
+  label_attachment_plural: Датотеки
+  label_file_added: Датотеката е додадена
+  label_report: Извештај
+  label_report_plural: Извештаи
+  label_news: ÐовоÑÑ‚
+  label_news_new: Додади новоÑÑ‚
+  label_news_plural: ÐовоÑти
+  label_news_latest: ПоÑледни новоÑти
+  label_news_view_all: Прегледај ги Ñите новоÑти
+  label_news_added: ÐовоÑтта е додадена
+  label_settings: Settings
+  label_overview: Преглед
+  label_version: Верзија
+  label_version_new: Ðова верзија
+  label_version_plural: Верзии
+  label_close_versions: Затвори ги завршените врзии
+  label_confirmation: Потврда
+  label_export_to: 'ДоÑтапно и во:'
+  label_read: Прочитај...
+  label_public_projects: Јавни проекти
+  label_open_issues: отворена
+  label_open_issues_plural: отворени
+  label_closed_issues: затворена
+  label_closed_issues_plural: затворени
+  label_x_open_issues_abbr_on_total:
+    zero:  0 отворени / {{total}}
+    one:   1 отворена / {{total}}
+    other: "{{count}} отворени / {{total}}"
+  label_x_open_issues_abbr:
+    zero:  0 отворени
+    one:   1 отворена
+    other: "{{count}} отворени"
+  label_x_closed_issues_abbr:
+    zero:  0 затворени
+    one:   1 затворена
+    other: "{{count}} затворени"
+  label_total: Вкупно
+  label_permissions: ОвлаÑтувања
+  label_current_status: Моментален ÑтатуÑ
+  label_new_statuses_allowed: Дозволени нови ÑтатуÑи
+  label_all: Ñите
+  label_none: ниеден
+  label_nobody: никој
+  label_next: Следно
+  label_previous: Претходно
+  label_used_by: КориÑтено од
+  label_details: Детали
+  label_add_note: Додади белешка
+  label_per_page: По Ñтрана
+  label_calendar: Календар
+  label_months_from: меÑеци од
+  label_gantt: Gantt
+  label_internal: Internal
+  label_last_changes: "поÑледни {{count}} промени"
+  label_change_view_all: Прегледај ги Ñите промени
+  label_personalize_page: Прилагоди ја Ñтранава
+  label_comment: Коментар
+  label_comment_plural: Коментари
+  label_x_comments:
+    zero: нема коментари
+    one: 1 коментар
+    other: "{{count}} коментари"
+  label_comment_add: Додади коментар
+  label_comment_added: Коментарот е додаден
+  label_comment_delete: Избриши коментари
+  label_query: Custom query
+  label_query_plural: Custom queries
+  label_query_new: New query
+  label_filter_add: Додади филтер
+  label_filter_plural: Филтри
+  label_equals: е
+  label_not_equals: не е
+  label_in_less_than: за помалку од
+  label_in_more_than: за повеќе од
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: во
+  label_today: денеÑ
+  label_all_time: цело време
+  label_yesterday: вчера
+  label_this_week: оваа недела
+  label_last_week: минатата недела
+  label_last_n_days: "поÑледните {{count}} дена"
+  label_this_month: овој меÑец
+  label_last_month: минатиот меÑец
+  label_this_year: оваа година
+  label_date_range: Date range
+  label_less_than_ago: пред помалку од денови
+  label_more_than_ago: пред повеќе од денови
+  label_ago: пред денови
+  label_contains: Ñодржи
+  label_not_contains: не Ñодржи
+  label_day_plural: денови
+  label_repository: Складиште
+  label_repository_plural: Складишта
+  label_browse: ПрелиÑтувај
+  label_modification: "{{count}} промени"
+  label_modification_plural: "{{count}} промени"
+  label_branch: Гранка
+  label_tag: Tag
+  label_revision: Ревизија
+  label_revision_plural: Ревизии
+  label_revision_id: "Ревизија {{value}}"
+  label_associated_revisions: Associated revisions
+  label_added: added
+  label_modified: modified
+  label_copied: copied
+  label_renamed: renamed
+  label_deleted: deleted
+  label_latest_revision: ПоÑледна ревизија
+  label_latest_revision_plural: ПоÑледни ревизии
+  label_view_revisions: Прегледај ги ревизиите
+  label_view_all_revisions: Прегледај ги Ñите ревизии
+  label_max_size: МакÑ. големина
+  label_sort_highest: ПремеÑти најгоре
+  label_sort_higher: ПремеÑти нагоре
+  label_sort_lower: ПремеÑти надоле
+  label_sort_lowest: ПремеÑти најдоле
+  label_roadmap: Roadmap
+  label_roadmap_due_in: "Due in {{value}}"
+  label_roadmap_overdue: "КаÑни {{value}}"
+  label_roadmap_no_issues: Ðема задачи за оваа верзија
+  label_search: Барај
+  label_result_plural: Резултати
+  label_all_words: Сите зборови
+  label_wiki: Вики
+  label_wiki_edit: Вики уредување
+  label_wiki_edit_plural: Вики уредувања
+  label_wiki_page: Вики Ñтраница
+  label_wiki_page_plural: Вики Ñтраници
+  label_index_by_title: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ наÑлов
+  label_index_by_date: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ дата
+  label_current_version: Current version
+  label_preview: Preview
+  label_feed_plural: Feeds
+  label_changes_details: Детали за Ñите промени
+  label_issue_tracking: Следење на задачи
+  label_spent_time: Потрошено време
+  label_overall_spent_time: Вкупно потрошено време
+  label_f_hour: "{{value}} чаÑ"
+  label_f_hour_plural: "{{value}} чаÑа"
+  label_time_tracking: Следење на време
+  label_change_plural: Промени
+  label_statistics: СтатиÑтики
+  label_commits_per_month: Commits per month
+  label_commits_per_author: Commits per author
+  label_view_diff: View differences
+  label_diff_inline: inline
+  label_diff_side_by_side: side by side
+  label_options: Опции
+  label_copy_workflow_from: Copy workflow from
+  label_permissions_report: Permissions report
+  label_watched_issues: Watched issues
+  label_related_issues: Поврзани задачи
+  label_applied_status: Applied status
+  label_loading: Loading...
+  label_relation_new: Ðова релација
+  label_relation_delete: Избриши релација
+  label_relates_to: related to
+  label_duplicates: дупликати
+  label_duplicated_by: duplicated by
+  label_blocks: blocks
+  label_blocked_by: блокирано од
+  label_precedes: претходи
+  label_follows: Ñледи
+  label_end_to_start: крај до почеток
+  label_end_to_end: крај до крај
+  label_start_to_start: почеток до почеток
+  label_start_to_end: почеток до крај
+  label_stay_logged_in: ОÑтанете најавени
+  label_disabled: disabled
+  label_show_completed_versions: Show completed versions
+  label_me: јаÑ
+  label_board: Форум
+  label_board_new: Ðов форум
+  label_board_plural: Форуми
+  label_board_locked: Заклучен
+  label_board_sticky: Sticky
+  label_topic_plural: Теми
+  label_message_plural: Пораки
+  label_message_last: ПоÑледна порака
+  label_message_new: Ðова порака
+  label_message_posted: Поракате е додадена
+  label_reply_plural: Одговори
+  label_send_information: ИÑпрати ги информациите за профилот на кориÑникот
+  label_year: Година
+  label_month: МеÑец
+  label_week: Ðедела
+  label_date_from: Од
+  label_date_to: До
+  label_language_based: Според јазикот на кориÑникот
+  label_sort_by: "Подреди Ñпоред {{value}}"
+  label_send_test_email: ИÑпрати теÑÑ‚ е-порака
+  label_feeds_access_key: RSS клуч за приÑтап
+  label_missing_feeds_access_key: ÐедоÑтика RSS клуч за приÑтап
+  label_feeds_access_key_created_on: "RSS клучот за приÑтап креиран пред {{value}}"
+  label_module_plural: Модули
+  label_added_time_by: "Додадено од {{author}} пред {{age}}"
+  label_updated_time_by: "Ðжурирано од {{author}} пред {{age}}"
+  label_updated_time: "Ðжурирано пред {{value}}"
+  label_jump_to_a_project: Префрли Ñе на проект...
+  label_file_plural: Датотеки
+  label_changeset_plural: Changesets
+  label_default_columns: ОÑновни колони
+  label_no_change_option: (Без промена)
+  label_bulk_edit_selected_issues: Групно уредување на задачи
+  label_theme: Тема
+  label_default: Default
+  label_search_titles_only: Пребарувај Ñамо наÑлови
+  label_user_mail_option_all: "За било кој наÑтан во Ñите мои проекти"
+  label_user_mail_option_selected: "За било кој наÑтан Ñамо во избраните проекти..."
+  label_user_mail_no_self_notified: "Ðе ме извеÑтувај за промените што Ñ˜Ð°Ñ Ð³Ð¸ правам"
+  label_registration_activation_by_email: активација на профил преку е-пошта
+  label_registration_manual_activation: мануелна активација на профил
+  label_registration_automatic_activation: автоматÑка активација на профил
+  label_display_per_page: "По Ñтрана: {{value}}"
+  label_age: Age
+  label_change_properties: Change properties
+  label_general: Општо
+  label_more: Повеќе
+  label_scm: SCM
+  label_plugins: Додатоци
+  label_ldap_authentication: LDAP автентикација
+  label_downloads_abbr: Превземања
+  label_optional_description: ÐžÐ¿Ð¸Ñ (незадолжително)
+  label_add_another_file: Додади уште една датотека
+  label_preferences: Preferences
+  label_chronological_order: Во хронолошки ред
+  label_reverse_chronological_order: In reverse chronological order
+  label_planning: Планирање
+  label_incoming_emails: Дојдовни е-пораки
+  label_generate_key: Генерирај клуч
+  label_issue_watchers: Watchers
+  label_example: Пример
+  label_display: Прикажи
+  label_sort: Подреди
+  label_ascending: РаÑтечки
+  label_descending: Опаѓачки
+  label_date_from_to: Од {{start}} до {{end}}
+  label_wiki_content_added: Вики Ñтраница додадена
+  label_wiki_content_updated: Вики Ñтраница ажурирана
+  label_group: Група
+  label_group_plural: Групи
+  label_group_new: Ðова група
+  label_time_entry_plural: Потрошено време
+  label_version_sharing_none: Ðе Ñподелено
+  label_version_sharing_descendants: Со Ñите подпроекти
+  label_version_sharing_hierarchy: Со хиерархијата на проектот
+  label_version_sharing_tree: Со дрвото на проектот
+  label_version_sharing_system: Со Ñите проекти
+  label_update_issue_done_ratios: Update issue done ratios
+  label_copy_source: Извор
+  label_copy_target: ДеÑтинација
+  label_copy_same_as_target: ИÑто како деÑтинацијата
+  label_display_used_statuses_only: Only display statuses that are used by this tracker
+  label_api_access_key: API клуч за приÑтап
+  label_missing_api_access_key: ÐедоÑтига API клуч за приÑтап
+  label_api_access_key_created_on: "API клучот за приÑтап е креиран пред {{value}}"
+  label_profile: Профил
+  label_subtask_plural: Подзадачи
+  label_project_copy_notifications: Праќај извеÑтувања по е-пошта при копирање на проект
+
+  button_login: Ðајави Ñе
+  button_submit: ИÑпрати
+  button_save: Зачувај
+  button_check_all: Штиклирај ги Ñите
+  button_uncheck_all: Одштиклирај ги Ñите
+  button_delete: Избриши
+  button_create: Креирај
+  button_create_and_continue: Креирај и продолжи
+  button_test: ТеÑÑ‚
+  button_edit: Уреди
+  button_add: Додади
+  button_change: Промени
+  button_apply: Примени
+  button_clear: Избриши
+  button_lock: Заклучи
+  button_unlock: Отклучи
+  button_download: Превземи
+  button_list: List
+  button_view: Прегледај
+  button_move: ПремеÑти
+  button_move_and_follow: ПремеÑти и Ñледи
+  button_back: Back
+  button_cancel: Откажи
+  button_activate: Ðктивирај
+  button_sort: Подреди
+  button_log_time: Бележи време
+  button_rollback: Rollback to this version
+  button_watch: Следи
+  button_unwatch: Ðе Ñледи
+  button_reply: Одговори
+  button_archive: Ðрхивирај
+  button_unarchive: Одархивирај
+  button_reset: Reset
+  button_rename: Преименувај
+  button_change_password: Промени лозинка
+  button_copy: Копирај
+  button_copy_and_follow: Копирај и Ñледи
+  button_annotate: Annotate
+  button_update: Ðжурирај
+  button_configure: Конфигурирај
+  button_quote: Цитирај
+  button_duplicate: Копирај
+  button_show: Show
+
+  status_active: активни
+  status_registered: региÑтрирани
+  status_locked: заклучени
+
+  version_status_open: отворени
+  version_status_locked: заклучени
+  version_status_closed: затворени
+
+  field_active: Active
+
+  text_select_mail_notifications: Изберете за кои наÑтани да Ñе праќаат извеÑтувања по е-пошта да Ñе праќаат.
+  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_min_max_length_info: 0 значи без ограничување
+  text_project_destroy_confirmation: Дали Ñте Ñигурни дека Ñакате да го избришете проектот и Ñите поврзани податоци?
+  text_subprojects_destroy_warning: "Ðеговите подпроекти: {{value}} иÑто така ќе бидат избришани."
+  text_workflow_edit: Select a role and a tracker to edit the workflow
+  text_are_you_sure: Дали Ñте Ñигурни?
+  text_journal_changed: "{{label}} променето од {{old}} во {{new}}"
+  text_journal_set_to: "{{label}} set to {{value}}"
+  text_journal_deleted: "{{label}} избришан ({{old}})"
+  text_journal_added: "{{label}} {{value}} додаден"
+  text_tip_issue_begin_day: задачи што почнуваат овој ден
+  text_tip_issue_end_day: задачи што завршуваат овој ден
+  text_tip_issue_begin_end_day: задачи што почнуваат и завршуваат овој ден
+  text_project_identifier_info: 'Само мали букви (a-z), бројки и dashes Ñе дозволени<br />По зачувувањето, идентификаторот неможе да Ñе Ñмени.'
+  text_caracters_maximum: "{{count}} знаци макÑимум."
+  text_caracters_minimum: "Мора да е најмалку {{count}} знаци долго."
+  text_length_between: "Должина помеѓу {{min}} и {{max}} знаци."
+  text_tracker_no_workflow: No workflow defined for this tracker
+  text_unallowed_characters: Ðедозволени знаци
+  text_comma_separated: Дозволени Ñе повеќе вредноÑти (разделени Ñо запирка).
+  text_line_separated: Дозволени Ñе повеќе вредноÑти (една линија за Ñекоја вредноÑÑ‚).
+  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
+  text_issue_added: "Задачата {{id}} е пријавена од {{author}}."
+  text_issue_updated: "Задачата {{id}} е ажурирана од {{author}}."
+  text_wiki_destroy_confirmation: Дали Ñте Ñигурни дека Ñакате да го избришете ова вики и целата негова Ñодржина?
+  text_issue_category_destroy_question: "Ðекои задачи ({{count}}) Ñе доделени на оваа категорија. Што Ñакате да правите?"
+  text_issue_category_destroy_assignments: Remove category assignments
+  text_issue_category_reassign_to: Додели ги задачите на оваа категорија
+  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
+  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
+  text_load_default_configuration: Load the default configuration
+  text_status_changed_by_changeset: "Applied in changeset {{value}}."
+  text_issues_destroy_confirmation: 'Дали Ñте Ñигурни дека Ñакате да ги избришете избраните задачи?'
+  text_select_project_modules: 'Изберете модули за овој проект:'
+  text_default_administrator_account_changed: Default administrator account changed
+  text_file_repository_writable: Во папката за прилози може да Ñе запишува
+  text_plugin_assets_writable: Во папката за додатоци може да Ñе запишува
+  text_rmagick_available: RMagick available (незадолжително)
+  text_destroy_time_entries_question: "{{hours}} hours were reported on the issues you are about to delete. What do you want to do ?"
+  text_destroy_time_entries: Delete reported hours
+  text_assign_time_entries_to_project: Додели ги пријавените чаÑови на проектот
+  text_reassign_time_entries: 'Reassign reported hours to this issue:'
+  text_user_wrote: "{{value}} напиша:"
+  text_enumeration_destroy_question: "{{count}} objects are assigned to this value."
+  text_enumeration_category_reassign_to: 'Reassign them to this value:'
+  text_email_delivery_not_configured: "ДоÑтавата по е-пошта не е конфигурирана, и извеÑтувањата Ñе оневозможени.\nКонфигурирајте го Вашиот  SMTP Ñервер во config/email.yml и реÑтартирајте ја апликацијата."
+  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
+  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
+  text_custom_field_possible_values_info: 'One line for each value'
+  text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?"
+  text_wiki_page_nullify_children: "Keep child pages as root pages"
+  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
+  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
+  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
+  text_zoom_in: Zoom in
+  text_zoom_out: Zoom out
+
+  default_role_manager: Менаџер
+  default_role_developer: Developer
+  default_role_reporter: Reporter
+  default_tracker_bug: Грешка
+  default_tracker_feature: ФункционалноÑÑ‚
+  default_tracker_support: Поддршка
+  default_issue_status_new: Ðова
+  default_issue_status_in_progress: Во прогреÑ
+  default_issue_status_resolved: Разрешена
+  default_issue_status_feedback: Feedback
+  default_issue_status_closed: Затворена
+  default_issue_status_rejected: Одбиена
+  default_doc_category_user: КориÑничка документација
+  default_doc_category_tech: Техничка документација
+  default_priority_low: Ðизок
+  default_priority_normal: Ðормален
+  default_priority_high: ВиÑок
+  default_priority_urgent: Итно
+  default_priority_immediate: Веднаш
+  default_activity_design: Дизајн
+  default_activity_development: Развој
+
+  enumeration_issue_priorities: Приоритети на задача
+  enumeration_doc_categories: Категории на документ
+  enumeration_activities: ÐктивноÑти (Ñледење на време)
+  enumeration_system_activity: СиÑтемÑка активноÑÑ‚
+
+  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/mn.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/mn.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -184,10 +184,10 @@
   mail_body_account_activation_request: "Ð¨Ð¸Ð½Ñ Ñ…ÑÑ€ÑглÑгч ({{value}}) бүртгүүлÑÑн байна. Таны баталгаажуулахыг хүлÑÑж байна:"
   mail_subject_reminder: "Дараагийн өдрүүдÑд {{count}} аÑуудлыг шийдÑÑ… Ñ…ÑÑ€ÑгтÑй ({{days}})"
   mail_body_reminder: "Танд оноогдÑон {{count}} аÑуудлуудыг дараагийн {{days}} өдрүүдÑд шийдÑÑ… Ñ…ÑÑ€ÑгтÑй:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}."
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}."
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}."
   
   gui_validation_error: 1 алдаа
   gui_validation_error_plural: "{{count}} алдаа"
@@ -252,7 +252,6 @@
   field_attr_lastname: Овог аттрибут
   field_attr_mail: ИмÑйл аттрибут
   field_onthefly: Ð¥Ò¯ÑÑÑн үедÑÑ Ñ…ÑÑ€ÑглÑгч Ò¯Ò¯ÑгÑÑ…
-  field_start_date: ЭхлÑл
   field_done_ratio: %% ГүйцÑтгÑÑÑн
   field_auth_source: ÐÑвтрÑÑ… арга
   field_hide_mail: Миний имÑйл хаÑгийг нуу
@@ -707,7 +706,6 @@
   label_search_titles_only: Зөвхөн гарчиг хайх
   label_user_mail_option_all: "Миний бүх төÑөл дÑÑрх бүх үзÑгдлүүдийн хувьд"
   label_user_mail_option_selected: "СонгогдÑон төÑлүүдийн хувьд бүх үзÑгдÑл дÑÑÑ€..."
-  label_user_mail_option_none: "Зөвхөн миний ажиглаж байгаа Ð·Ò¯Ð¹Ð»Ñ ÑŽÐ¼ÑƒÑƒ надад хамаатай бол"
   label_user_mail_no_self_notified: "Миний өөрийн хийÑÑн өөрчлөлтүүдийн тухай надад мÑдÑгдÑÑ… Ñ…ÑÑ€Ñггүй"
   label_registration_activation_by_email: данÑыг имÑйлÑÑÑ€ идÑвхжүүлÑÑ…
   label_registration_manual_activation: данÑыг гараар идÑвхжүүлÑÑ…
@@ -821,9 +819,9 @@
   text_journal_set_to: "{{label}} {{value}} болгож өөрчиллөө"
   text_journal_deleted: "{{label}} уÑÑ‚Ñан ({{old}})"
   text_journal_added: "{{label}} {{value}} нÑмÑгдÑÑн"
-  text_tip_task_begin_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑ… ажил
-  text_tip_task_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ дууÑах ажил
-  text_tip_task_begin_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑд мөн дууÑч байгаа ажил
+  text_tip_issue_begin_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑ… ажил
+  text_tip_issue_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ дууÑах ажил
+  text_tip_issue_begin_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑд мөн дууÑч байгаа ажил
   text_project_identifier_info: 'Зөвхөн жижиг Ò¯Ñгүүд болон (a-z), тоо and дундуур Ð·ÑƒÑ€Ð°Ð°Ñ Ð°ÑˆÐ¸Ð³Ð»Ð°Ð¶ болно.<br />ÐÑгÑнт хадгалÑан хойно, төÑлийн глобал нÑрийг өөрлчөх боломжгүй.'
   text_caracters_maximum: "дÑÑд тал нь {{count}} Ò¯ÑÑг."
   text_caracters_minimum: "Хамгийн багадаа Ñдаж {{count}} Ñ‚ÑмдÑгт байх."
@@ -914,8 +912,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/nl.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/nl.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -256,7 +256,6 @@
   field_role: Rol
   field_searchable: Doorzoekbaar
   field_spent_on: Datum
-  field_start_date: Startdatum
   field_start_page: Startpagina
   field_status: Status
   field_subject: Onderwerp
@@ -579,7 +578,6 @@
   label_user_activity: "{{value}}'s activiteit"
   label_user_mail_no_self_notified: "Ik wil niet op de hoogte gehouden worden van wijzigingen die ik zelf maak."
   label_user_mail_option_all: "Bij elk gebeurtenis in al mijn projecten..."
-  label_user_mail_option_none: "Alleen in de dingen die ik monitor of in betrokken ben"
   label_user_mail_option_selected: "Enkel bij elke gebeurtenis op het geselecteerde project..."
   label_user_new: Nieuwe gebruiker
   label_user_plural: Gebruikers
@@ -765,9 +763,9 @@
   text_select_project_modules: 'Selecteer de modules die u wilt gebruiken voor dit project:'
   text_status_changed_by_changeset: "Toegepast in changeset {{value}}."
   text_subprojects_destroy_warning: "De subprojecten: {{value}} zullen ook verwijderd worden."
-  text_tip_task_begin_day: taak die op deze dag begint
-  text_tip_task_begin_end_day: taak die op deze dag begint en eindigt
-  text_tip_task_end_day: taak die op deze dag eindigt
+  text_tip_issue_begin_day: issue die op deze dag begint
+  text_tip_issue_begin_end_day: issue die op deze dag begint en eindigt
+  text_tip_issue_end_day: issue die op deze dag eindigt
   text_tracker_no_workflow: Geen workflow gedefinieerd voor deze tracker
   text_unallowed_characters: Niet toegestane tekens
   text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel notificaties ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)."
@@ -798,12 +796,12 @@
   text_wiki_page_destroy_children: Verwijder alle subpagina's en onderliggende pagina's
   setting_password_min_length: Minimum wachtwoord lengte
   field_group_by: Groepeer resultaten per
-  mail_subject_wiki_content_updated: "'{{page}}' wiki pagina is bijgewerkt"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki pagina is bijgewerkt"
   label_wiki_content_added: Wiki pagina toegevoegd
-  mail_subject_wiki_content_added: "'{{page}}' wiki pagina is toegevoegd"
-  mail_body_wiki_content_added: The '{{page}}' wiki pagina is toegevoegd door {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki pagina is toegevoegd"
+  mail_body_wiki_content_added: The '{{id}}' wiki pagina is toegevoegd door {{author}}.
   label_wiki_content_updated: Wiki pagina bijgewerkt
-  mail_body_wiki_content_updated: The '{{page}}' wiki pagina is bijgewerkt door {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki pagina is bijgewerkt door {{author}}.
   permission_add_project: Maak project
   setting_new_project_user_role_id: Rol van gebruiker die een project maakt
   label_view_all_revisions: Bekijk alle revisies
@@ -895,8 +893,19 @@
   field_time_entries: Log tijd
   project_module_gantt: Gantt
   project_module_calendar: Kalender
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/no.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/no.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -231,7 +231,6 @@
   field_attr_lastname: Etternavnsattributt
   field_attr_mail: E-post-attributt
   field_onthefly: On-the-fly brukeropprettelse
-  field_start_date: Start
   field_done_ratio: % Ferdig
   field_auth_source: Autentifikasjonsmodus
   field_hide_mail: Skjul min e-post-adresse
@@ -584,7 +583,6 @@
   label_search_titles_only: Søk bare i titler
   label_user_mail_option_all: "For alle hendelser på mine prosjekter"
   label_user_mail_option_selected: "For alle hendelser på valgte prosjekt..."
-  label_user_mail_option_none: "Bare for ting jeg overvåker eller er involvert i"
   label_user_mail_no_self_notified: "Jeg vil ikke bli varslet om endringer jeg selv gjør"
   label_registration_activation_by_email: kontoaktivering pr. e-post
   label_registration_manual_activation: manuell kontoaktivering
@@ -654,9 +652,9 @@
   text_subprojects_destroy_warning: "Underprojekt(ene): {{value}} vil også bli slettet."
   text_workflow_edit: Velg en rolle og en sakstype for å endre arbeidsflyten
   text_are_you_sure: Er du sikker ?
-  text_tip_task_begin_day: oppgaven starter denne dagen
-  text_tip_task_end_day: oppgaven avsluttes denne dagen
-  text_tip_task_begin_end_day: oppgaven starter og avsluttes denne dagen
+  text_tip_issue_begin_day: oppgaven starter denne dagen
+  text_tip_issue_end_day: oppgaven avsluttes denne dagen
+  text_tip_issue_begin_end_day: oppgaven starter og avsluttes denne dagen
   text_project_identifier_info: 'Små bokstaver (a-z), nummer og bindestrek tillatt.<br />Identifikatoren kan ikke endres etter den er lagret.'
   text_caracters_maximum: "{{count}} tegn maksimum."
   text_caracters_minimum: "Må være minst {{count}} tegn langt."
@@ -807,12 +805,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -904,8 +902,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/pl.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/pl.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -277,7 +277,6 @@
   field_role: Rola
   field_searchable: Przeszukiwalne
   field_spent_on: Data
-  field_start_date: Start
   field_start_page: Strona startowa
   field_status: Status
   field_subject: Temat
@@ -614,7 +613,6 @@
   label_user: Użytkownik
   label_user_mail_no_self_notified: "Nie chcę powiadomień o zmianach, które sam wprowadzam."
   label_user_mail_option_all: "Dla każdego zdarzenia w każdym moim projekcie"
-  label_user_mail_option_none: "Tylko to co obserwuje lub w czym biorę udział"
   label_user_mail_option_selected: "Tylko dla każdego zdarzenia w wybranych projektach..."
   label_user_new: Nowy użytkownik
   label_user_plural: Użytkownicy
@@ -797,9 +795,9 @@
   text_select_project_modules: 'Wybierz moduły do aktywacji w tym projekcie:'
   text_status_changed_by_changeset: "Zastosowane w zmianach {{value}}."
   text_subprojects_destroy_warning: "Podprojekt(y): {{value}} zostaną także usunięte."
-  text_tip_task_begin_day: zadanie zaczynajÄ…ce siÄ™ dzisiaj
-  text_tip_task_begin_end_day: zadanie zaczynające i kończące się dzisiaj
-  text_tip_task_end_day: zadanie kończące się dzisiaj
+  text_tip_issue_begin_day: zadanie zaczynajÄ…ce siÄ™ dzisiaj
+  text_tip_issue_begin_end_day: zadanie zaczynające i kończące się dzisiaj
+  text_tip_issue_end_day: zadanie kończące się dzisiaj
   text_tracker_no_workflow: Brak przepływu zdefiniowanego dla tego typu zagadnienia
   text_unallowed_characters: Niedozwolone znaki
   text_user_mail_option: "W przypadku niezaznaczonych projektów, będziesz otrzymywał powiadomienia tylko na temat zagadnień, które obserwujesz, lub w których bierzesz udział (np. jesteś autorem lub adresatem)."
@@ -836,12 +834,12 @@
   text_wiki_page_destroy_children: Usuń wszystkie podstrony
   setting_password_min_length: Minimalna długość hasła
   field_group_by: Grupuj wyniki wg
-  mail_subject_wiki_content_updated: "Strona wiki '{{page}}' została uaktualniona"
+  mail_subject_wiki_content_updated: "Strona wiki '{{id}}' została uaktualniona"
   label_wiki_content_added: Dodano stronÄ™ wiki
-  mail_subject_wiki_content_added: "Strona wiki '{{page}}' została dodana"
-  mail_body_wiki_content_added: Strona wiki '{{page}}' została dodana przez {{author}}.
+  mail_subject_wiki_content_added: "Strona wiki '{{id}}' została dodana"
+  mail_body_wiki_content_added: Strona wiki '{{id}}' została dodana przez {{author}}.
   label_wiki_content_updated: Uaktualniono stronÄ™ wiki
-  mail_body_wiki_content_updated: Strona wiki '{{page}}' została uaktualniona przez {{author}}.
+  mail_body_wiki_content_updated: Strona wiki '{{id}}' została uaktualniona przez {{author}}.
   permission_add_project: Tworzenie projektu
   setting_new_project_user_role_id: Rola nadawana twórcom projektów, którzy nie posiadają uprawnień administatora
   label_view_all_revisions: Pokaż wszystkie rewizje
@@ -934,8 +932,19 @@
   field_time_entries: Dziennik
   project_module_gantt: Diagram Gantta
   project_module_calendar: Kalendarz
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/pt-BR.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/pt-BR.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -264,7 +264,6 @@
   field_attr_lastname: Atributo para sobrenome
   field_attr_mail: Atributo para e-mail
   field_onthefly: Criar usuários dinamicamente ("on-the-fly")
-  field_start_date: Início
   field_done_ratio: % Terminado
   field_auth_source: Modo de autenticação
   field_hide_mail: Ocultar meu e-mail
@@ -622,7 +621,6 @@
   label_search_titles_only: Pesquisar somente títulos
   label_user_mail_option_all: "Para qualquer evento em todos os meus projetos"
   label_user_mail_option_selected: "Para qualquer evento somente no(s) projeto(s) selecionado(s)..."
-  label_user_mail_option_none: "Somente tarefas que eu acompanho ou estou envolvido"
   label_user_mail_no_self_notified: "Eu não quero ser notificado de minhas próprias modificações"
   label_registration_activation_by_email: ativação de conta por e-mail
   label_registration_manual_activation: ativação manual de conta
@@ -696,9 +694,9 @@
   text_subprojects_destroy_warning: "Seu(s) subprojeto(s): {{value}} também serão excluídos."
   text_workflow_edit: Selecione um papel e um tipo de tarefa para editar o fluxo de trabalho
   text_are_you_sure: Você tem certeza?
-  text_tip_task_begin_day: tarefa inicia neste dia
-  text_tip_task_end_day: tarefa termina neste dia
-  text_tip_task_begin_end_day: tarefa inicia e termina neste dia
+  text_tip_issue_begin_day: tarefa inicia neste dia
+  text_tip_issue_end_day: tarefa termina neste dia
+  text_tip_issue_begin_end_day: tarefa inicia e termina neste dia
   text_project_identifier_info: 'Letras minúsculas (a-z), números e hífens permitidos.<br />Uma vez salvo, o identificador não poderá ser alterado.'
   text_caracters_maximum: "máximo {{count}} caracteres"
   text_caracters_minimum: "deve ter ao menos {{count}} caracteres."
@@ -840,12 +838,12 @@
   text_wiki_page_destroy_children: Excluir páginas filhas e todas suas descendentes
   setting_password_min_length: Comprimento mínimo para senhas
   field_group_by: Agrupar por
-  mail_subject_wiki_content_updated: "A página wiki '{{page}}' foi atualizada"
+  mail_subject_wiki_content_updated: "A página wiki '{{id}}' foi atualizada"
   label_wiki_content_added: Página wiki adicionada
-  mail_subject_wiki_content_added: "A página wiki '{{page}}' foi adicionada"
-  mail_body_wiki_content_added: A página wiki '{{page}}' foi adicionada por {{author}}.
+  mail_subject_wiki_content_added: "A página wiki '{{id}}' foi adicionada"
+  mail_body_wiki_content_added: A página wiki '{{id}}' foi adicionada por {{author}}.
   label_wiki_content_updated: Página wiki atualizada
-  mail_body_wiki_content_updated: A página wiki '{{page}}' foi atualizada por {{author}}.
+  mail_body_wiki_content_updated: A página wiki '{{id}}' foi atualizada por {{author}}.
   permission_add_project: Criar projeto
   setting_new_project_user_role_id: Papel atribuído a um usuário não-administrador que cria um projeto
   label_view_all_revisions: Ver todas as revisões
@@ -917,7 +915,7 @@
   permission_export_wiki_pages: Exportar páginas wiki
   setting_cache_formatted_text: Realizar cache de texto formatado
   permission_manage_project_activities: Gerenciar atividades do projeto
-  error_unable_delete_issue_status: Impossível excluir situação da tarefa
+  error_unable_delete_issue_status: Não foi possível excluir situação da tarefa
   label_profile: Perfil
   permission_manage_subtasks: Gerenciar subtarefas
   field_parent_issue: Tarefa pai
@@ -936,9 +934,20 @@
   label_overall_spent_time: Tempo gasto geral
   field_time_entries: Log time
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  project_module_calendar: Calendário
+  button_edit_associated_wikipage: "Editar página wiki relacionada: {{page_title}}"
+  text_are_you_sure_with_children: Excluir a tarefa e suas subtarefas?
+  field_text: Campo de texto
+  label_user_mail_option_only_owner: Somente para as coisas que eu criei
+  setting_default_notification_option: Opção padrão de notificação
+  label_user_mail_option_only_my_events: Somente para as coisas que eu esteja observando ou esteja envolvido
+  label_user_mail_option_only_assigned: Somente para as coisas que estejam atribuídas a mim
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/pt.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/pt.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -128,7 +128,7 @@
         greater_than_start_date: "deve ser maior que a data inicial"
         not_same_project: "não pertence ao mesmo projecto"
         circular_dependency: "Esta relação iria criar uma dependência circular"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "Não é possível ligar uma tarefa a uma sub-tarefa que lhe é pertencente"
 
   ## Translated by: Pedro Araújo <phcrva19@hotmail.com>
   actionview_instancetag_blank_option: Seleccione
@@ -152,7 +152,7 @@
   notice_account_unknown_email: Utilizador desconhecido.
   notice_can_t_change_password: Esta conta utiliza uma fonte de autenticação externa. Não é possível alterar a palavra-chave.
   notice_account_lost_email_sent: Foi-lhe enviado um e-mail com as instruções para escolher uma nova palavra-chave.
-  notice_account_activated: A sua conta foi activada. Já pode autenticar-se.
+  notice_account_activated: A sua conta foi activada. É agora possível autenticar-se.
   notice_successful_create: Criado com sucesso.
   notice_successful_update: Alterado com sucesso.
   notice_successful_delete: Apagado com sucesso.
@@ -176,9 +176,9 @@
   error_issue_not_found_in_project: 'A tarefa não foi encontrada ou não pertence a este projecto.'
   
   mail_subject_lost_password: "Palavra-chave de {{value}}"
-  mail_body_lost_password: 'Para mudar a sua palavra-chave, clique no link abaixo:'
+  mail_body_lost_password: 'Para mudar a sua palavra-chave, clique na ligação abaixo:'
   mail_subject_register: "Activação de conta de {{value}}"
-  mail_body_register: 'Para activar a sua conta, clique no link abaixo:'
+  mail_body_register: 'Para activar a sua conta, clique na ligação abaixo:'
   mail_body_account_information_external: "Pode utilizar a conta {{value}} para autenticar-se."
   mail_body_account_information: Informação da sua conta
   mail_subject_account_activation_request: "Pedido de activação da conta {{value}}"
@@ -224,7 +224,7 @@
   field_priority: Prioridade
   field_fixed_version: Versão
   field_user: Utilizador
-  field_role: Papel
+  field_role: Função
   field_homepage: Página
   field_is_public: Público
   field_parent: Sub-projecto de
@@ -249,7 +249,6 @@
   field_attr_lastname: Atributo último nome
   field_attr_mail: Atributo e-mail
   field_onthefly: Criação de utilizadores na hora
-  field_start_date: Início
   field_done_ratio: % Completo
   field_auth_source: Modo de autenticação
   field_hide_mail: Esconder endereço de e-mail
@@ -264,8 +263,8 @@
   field_is_filter: Usado como filtro
   field_issue_to: Tarefa relacionada
   field_delay: Atraso
-  field_assignable: As tarefas podem ser associados a este papel
-  field_redirect_existing_links: Redireccionar links existentes
+  field_assignable: As tarefas podem ser associados a esta função
+  field_redirect_existing_links: Redireccionar ligações existentes
   field_estimated_hours: Tempo estimado
   field_column_names: Colunas
   field_time_zone: Fuso horário
@@ -343,17 +342,17 @@
   label_document_new: Novo documento
   label_document_plural: Documentos
   label_document_added: Documento adicionado
-  label_role: Papel
-  label_role_plural: Papéis
-  label_role_new: Novo papel
-  label_role_and_permissions: Papéis e permissões
+  label_role: Função
+  label_role_plural: Funções
+  label_role_new: Nova função
+  label_role_and_permissions: Funções e permissões
   label_member: Membro
   label_member_new: Novo membro
   label_member_plural: Membros
   label_tracker: Tipo
   label_tracker_plural: Tipos
   label_tracker_new: Novo tipo
-  label_workflow: Workflow
+  label_workflow: Fluxo de trabalho
   label_issue_status: Estado da tarefa
   label_issue_status_plural: Estados da tarefa
   label_issue_status_new: Novo estado
@@ -553,7 +552,7 @@
   label_diff_inline: inline
   label_diff_side_by_side: lado a lado
   label_options: Opções
-  label_copy_workflow_from: Copiar workflow de
+  label_copy_workflow_from: Copiar fluxo de trabalho de
   label_permissions_report: Relatório de permissões
   label_watched_issues: Tarefas observadas
   label_related_issues: Tarefas relacionadas
@@ -609,7 +608,6 @@
   label_search_titles_only: Procurar apenas em títulos
   label_user_mail_option_all: "Para qualquer evento em todos os meus projectos"
   label_user_mail_option_selected: "Para qualquer evento apenas nos projectos seleccionados..."
-  label_user_mail_option_none: "Apenas para coisas que esteja a observar ou esteja envolvido"
   label_user_mail_no_self_notified: "Não quero ser notificado de alterações feitas por mim"
   label_registration_activation_by_email: Activação da conta por e-mail
   label_registration_manual_activation: Activação manual da conta
@@ -681,16 +679,16 @@
   text_min_max_length_info: 0 siginifica sem restrição
   text_project_destroy_confirmation: Tem a certeza que deseja apagar o projecto e todos os dados relacionados?
   text_subprojects_destroy_warning: "O(s) seu(s) sub-projecto(s): {{value}} também será/serão apagado(s)."
-  text_workflow_edit: Seleccione um papel e um tipo de tarefa para editar o workflow
+  text_workflow_edit: Seleccione uma função e um tipo de tarefa para editar o fluxo de trabalho
   text_are_you_sure: Tem a certeza?
-  text_tip_task_begin_day: tarefa a começar neste dia
-  text_tip_task_end_day: tarefa a acabar neste dia
-  text_tip_task_begin_end_day: tarefa a começar e acabar neste dia
+  text_tip_issue_begin_day: tarefa a começar neste dia
+  text_tip_issue_end_day: tarefa a acabar neste dia
+  text_tip_issue_begin_end_day: tarefa a começar e acabar neste dia
   text_project_identifier_info: 'Apenas são permitidos letras minúsculas (a-z), números e hífens.<br />Uma vez guardado, o identificador não poderá ser alterado.'
   text_caracters_maximum: "máximo {{count}} caracteres."
   text_caracters_minimum: "Deve ter pelo menos {{count}} caracteres."
   text_length_between: "Deve ter entre {{min}} e {{max}} caracteres."
-  text_tracker_no_workflow: Sem workflow definido para este tipo de tarefa.
+  text_tracker_no_workflow: Sem fluxo de trabalho definido para este tipo de tarefa.
   text_unallowed_characters: Caracteres não permitidos
   text_comma_separated: Permitidos múltiplos valores (separados por vírgula).
   text_issues_ref_in_commit_messages: Referenciando e fechando tarefas em mensagens de commit
@@ -701,7 +699,7 @@
   text_issue_category_destroy_assignments: Remover as atribuições à categoria
   text_issue_category_reassign_to: Re-atribuir as tarefas para esta categoria
   text_user_mail_option: "Para projectos não seleccionados, apenas receberá notificações acerca de coisas que está a observar ou está envolvido (ex. tarefas das quais foi o criador ou lhes foram atribuídas)."
-  text_no_configuration_data: "Papeis, tipos de tarefas, estados das tarefas e workflows ainda não foram configurados.\nÉ extremamente recomendado carregar as configurações padrão. Será capaz de as modificar depois de estarem carregadas."
+  text_no_configuration_data: "Perfis, tipos de tarefas, estados das tarefas e workflows ainda não foram configurados.\nÉ extremamente recomendado carregar as configurações padrão. Será capaz de as modificar depois de estarem carregadas."
   text_load_default_configuration: Carregar as configurações padrão
   text_status_changed_by_changeset: "Aplicado no changeset {{value}}."
   text_issues_destroy_confirmation: 'Tem a certeza que deseja apagar a(s) tarefa(s) seleccionada(s)?'
@@ -725,7 +723,7 @@
   default_tracker_feature: Funcionalidade
   default_tracker_support: Suporte
   default_issue_status_new: Novo
-  default_issue_status_in_progress: In Progress
+  default_issue_status_in_progress: Em curso
   default_issue_status_resolved: Resolvido
   default_issue_status_feedback: Feedback
   default_issue_status_closed: Fechado
@@ -790,7 +788,7 @@
   permission_rename_wiki_pages: Renomear páginas de wiki
   permission_edit_time_entries: Editar entradas de tempo
   permission_edit_own_issue_notes: Editar as prórpias notas
-  setting_gravatar_enabled: Utilizar icons Gravatar
+  setting_gravatar_enabled: Utilizar ícones Gravatar
   label_example: Exemplo
   text_repository_usernames_mapping: "Seleccionar ou actualizar o utilizador de Redmine mapeado a cada nome de utilizador encontrado no repositório.\nUtilizadores com o mesmo nome de utilizador ou email no Redmine e no repositório são mapeados automaticamente."
   permission_edit_own_messages: Editar as próprias mensagens
@@ -799,130 +797,141 @@
   label_updated_time_by: "Actualizado por {{author}} há {{age}}"
   text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser mostrado.'
   setting_diff_max_lines_displayed: Número máximo de linhas de diff mostradas
-  text_plugin_assets_writable: Plugin assets directory writable
-  warning_attachments_not_saved: "{{count}} file(s) could not be saved."
-  button_create_and_continue: Create and continue
-  text_custom_field_possible_values_info: 'One line for each value'
-  label_display: Display
-  field_editable: Editable
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  field_watcher: Watcher
-  setting_openid: Allow OpenID login and registration
-  field_identity_url: OpenID URL
-  label_login_with_open_id_option: or login with OpenID
-  field_content: Content
-  label_descending: Descending
-  label_sort: Sort
-  label_ascending: Ascending
-  label_date_from_to: From {{start}} to {{end}}
+  text_plugin_assets_writable: Escrita na pasta de activos dos módulos de extensão possível
+  warning_attachments_not_saved: "Não foi possível gravar {{count}} ficheiro(s) ."
+  button_create_and_continue: Criar e continuar
+  text_custom_field_possible_values_info: 'Uma linha para cada valor'
+  label_display: Mostrar
+  field_editable: Editável
+  setting_repository_log_display_limit: Número máximo de revisões exibido no relatório de ficheiro
+  setting_file_max_size_displayed: Tamanho máximo dos ficheiros de texto exibidos inline
+  field_watcher: Observador
+  setting_openid: Permitir início de sessão e registo com OpenID
+  field_identity_url: URL do OpenID
+  label_login_with_open_id_option: ou início de sessão com OpenID
+  field_content: Conteúdo
+  label_descending: Descendente
+  label_sort: Ordenar
+  label_ascending: Ascendente
+  label_date_from_to: De {{start}} a {{end}}
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do?
-  text_wiki_page_reassign_children: Reassign child pages to this parent page
-  text_wiki_page_nullify_children: Keep child pages as root pages
-  text_wiki_page_destroy_children: Delete child pages and all their descendants
-  setting_password_min_length: Minimum password length
-  field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
-  label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
-  label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
-  permission_add_project: Create project
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  label_view_all_revisions: View all revisions
-  label_tag: Tag
-  label_branch: Branch
-  error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
-  error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
-  label_group_plural: Groups
-  label_group: Group
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
-  text_journal_set_to: "{{label}} set to {{value}}"
-  text_journal_deleted: "{{label}} deleted ({{old}})"
-  text_journal_added: "{{label}} {{value}} added"
-  field_active: Active
-  enumeration_system_activity: System Activity
-  permission_delete_issue_watchers: Delete watchers
-  version_status_closed: closed
-  version_status_locked: locked
-  version_status_open: open
-  error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
-  label_user_anonymous: Anonymous
-  button_move_and_follow: Move and follow
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_gravatar_default: Default Gravatar image
-  field_sharing: Sharing
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_system: With all projects
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_tree: With project tree
-  label_version_sharing_none: Not shared
-  error_can_not_archive_project: This project can not be archived
-  button_duplicate: Duplicate
-  button_copy_and_follow: Copy and follow
-  label_copy_source: Source
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_status: Use the issue status
-  error_issue_done_ratios_not_updated: Issue done ratios not updated.
-  error_workflow_copy_target: Please select target tracker(s) and role(s)
-  setting_issue_done_ratio_issue_field: Use the issue field
-  label_copy_same_as_target: Same as target
-  label_copy_target: Target
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  error_workflow_copy_source: Please select a source tracker or role
-  label_update_issue_done_ratios: Update issue done ratios
-  setting_start_of_week: Start calendars on
-  permission_view_issues: View Issues
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_revision_id: Revision {{value}}
-  label_api_access_key: API access key
-  label_api_access_key_created_on: API access key created {{value}} ago
-  label_feeds_access_key: RSS access key
-  notice_api_access_key_reseted: Your API access key was reset.
-  setting_rest_api_enabled: Enable REST web service
-  label_missing_api_access_key: Missing an API access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  button_show: Show
-  text_line_separated: Multiple values allowed (one line for each value).
-  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
-  permission_add_subprojects: Create subprojects
-  label_subproject_new: New subproject
+  text_wiki_page_destroy_question: Esta página tem {{descendants}} página(s) subordinada(s) e descendente(s). O que deseja fazer?
+  text_wiki_page_reassign_children: Reatribuir páginas subordinadas a esta página principal
+  text_wiki_page_nullify_children: Manter páginas subordinadas como páginas raíz
+  text_wiki_page_destroy_children: Apagar as páginas subordinadas e todos os seus descendentes
+  setting_password_min_length: Tamanho mínimo de palavra-chave
+  field_group_by: Agrupar resultados por
+  mail_subject_wiki_content_updated: "A página Wiki '{{id}}' foi actualizada"
+  label_wiki_content_added: Página Wiki adicionada
+  mail_subject_wiki_content_added: "A página Wiki '{{id}}' foi adicionada"
+  mail_body_wiki_content_added: A página Wiki '{{id}}' foi adicionada por {{author}}.
+  label_wiki_content_updated: Página Wiki actualizada
+  mail_body_wiki_content_updated: A página Wiki '{{id}}' foi actualizada por {{author}}.
+  permission_add_project: Criar projecto
+  setting_new_project_user_role_id: Função atribuída a um utilizador não-administrador que cria um projecto
+  label_view_all_revisions: Ver todas as revisões
+  label_tag: Etiqueta
+  label_branch: Ramo
+  error_no_tracker_in_project: Este projecto não tem associado nenhum tipo de tarefas. Verifique as definições do projecto.
+  error_no_default_issue_status: Não está definido um estado padrão para as tarefas. Verifique a sua configuração (dirija-se a "Administração -> Estados da tarefa").
+  label_group_plural: Grupos
+  label_group: Grupo
+  label_group_new: Novo grupo
+  label_time_entry_plural: Tempo registado
+  text_journal_changed: "{{label}} alterado de {{old}} para {{new}}"
+  text_journal_set_to: "{{label}} configurado como {{value}}"
+  text_journal_deleted: "{{label}} apagou ({{old}})"
+  text_journal_added: "{{label}} {{value}} adicionado"
+  field_active: Activo
+  enumeration_system_activity: Actividade de sistema
+  permission_delete_issue_watchers: Apagar observadores
+  version_status_closed: fechado
+  version_status_locked: protegido
+  version_status_open: aberto
+  error_can_not_reopen_issue_on_closed_version: Não é possível voltar a abrir uma tarefa atribuída a uma versão fechada
+  label_user_anonymous: Anónimo
+  button_move_and_follow: Mover e seguir
+  setting_default_projects_modules: Módulos activos por predefinição para novos projectos
+  setting_gravatar_default: Imagem Gravatar predefinida
+  field_sharing: Partilha
+  label_version_sharing_hierarchy: Com hierarquia do projecto
+  label_version_sharing_system: Com todos os projectos
+  label_version_sharing_descendants: Com os sub-projectos
+  label_version_sharing_tree: Com árvore do projecto
+  label_version_sharing_none: Não partilhado
+  error_can_not_archive_project: Não é possível arquivar este projecto
+  button_duplicate: Duplicar
+  button_copy_and_follow: Copiar e seguir
+  label_copy_source: Origem
+  setting_issue_done_ratio: Calcular a percentagem de progresso da tarefa 
+  setting_issue_done_ratio_issue_status: Através do estado da tarefa
+  error_issue_done_ratios_not_updated: Percentagens de progresso da tarefa não foram actualizadas.
+  error_workflow_copy_target: Seleccione os tipos de tarefas e funções desejadas
+  setting_issue_done_ratio_issue_field: Através do campo da tarefa
+  label_copy_same_as_target: Mesmo que o alvo
+  label_copy_target: Alvo
+  notice_issue_done_ratios_updated: Percentagens de progresso da tarefa actualizadas.
+  error_workflow_copy_source: Seleccione um tipo de tarefa ou função de origem
+  label_update_issue_done_ratios: Actualizar percentagens de progresso da tarefa
+  setting_start_of_week: Iniciar calendários a
+  permission_view_issues: Ver tarefas
+  label_display_used_statuses_only: Só exibir estados empregues por este tipo de tarefa
+  label_revision_id: Revisão {{value}}
+  label_api_access_key: Chave de acesso API
+  label_api_access_key_created_on: Chave de acesso API criada há {{value}}
+  label_feeds_access_key: Chave de acesso RSS
+  notice_api_access_key_reseted: A sua chave de acesso API foi reinicializada.
+  setting_rest_api_enabled: Activar serviço Web REST
+  label_missing_api_access_key: Chave de acesso API em falta
+  label_missing_feeds_access_key: Chave de acesso RSS em falta
+  button_show: Mostrar
+  text_line_separated: Vários valores permitidos (uma linha para cada valor).
+  setting_mail_handler_body_delimiters: Truncar mensagens de correio electrónico após uma destas linhas
+  permission_add_subprojects: Criar sub-projectos
+  label_subproject_new: Novo sub-projecto
   text_own_membership_delete_confirmation: |-
-    You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
-    Are you sure you want to continue?
-  label_close_versions: Close completed versions
-  label_board_sticky: Sticky
-  label_board_locked: Locked
-  permission_export_wiki_pages: Export wiki pages
-  setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Manage project activities
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_profile: Profile
-  permission_manage_subtasks: Manage subtasks
-  field_parent_issue: Parent task
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect ({{value}})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
+    Está prestes a eliminar parcial ou totalmente as suas permissões. É possível que não possa editar o projecto após esta acção.
+    Tem a certeza de que deseja continuar?
+  label_close_versions: Fechar versões completas
+  label_board_sticky: Fixar mensagem
+  label_board_locked: Proteger
+  permission_export_wiki_pages: Exportar páginas Wiki
+  setting_cache_formatted_text: Colocar formatação do texto na memória cache
+  permission_manage_project_activities: Gerir actividades do projecto
+  error_unable_delete_issue_status: Não foi possível apagar o estado da tarefa
+  label_profile: Perfil
+  permission_manage_subtasks: Gerir sub-tarefas
+  field_parent_issue: Tarefa principal
+  label_subtask_plural: Sub-tarefa
+  label_project_copy_notifications: Enviar notificações por e-mail durante a cópia do projecto
+  error_can_not_delete_custom_field: Não foi possível apagar o campo personalizado
+  error_unable_to_connect: Não foi possível ligar ({{value}})
+  error_can_not_remove_role: Esta função está actualmente em uso e não pode ser apagada.
+  error_can_not_delete_tracker: Existem ainda tarefas nesta categoria. Não é possível apagar este tipo de tarefa.
   field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
+  label_my_page_block: Bloco da minha página
+  notice_failed_to_save_members: "Erro ao guardar o(s) membro(s): {{errors}}."
+  text_zoom_out: Ampliar
+  text_zoom_in: Reduzir
+  notice_unable_delete_time_entry: Não foi possível apagar a entrada de tempo registado.
+  label_overall_spent_time: Total de tempo registado
+  field_time_entries: Tempo registado
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
+  project_module_calendar: Calendário
+  button_edit_associated_wikipage: "Editar página Wiki associada: {{page_title}}"
+  text_are_you_sure_with_children: Apagar tarefa e todas as sub-tarefas?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/ro.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/ro.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -232,7 +232,6 @@
   field_attr_lastname: Atribut nume
   field_attr_mail: Atribut email
   field_onthefly: Creare utilizator pe loc
-  field_start_date: Data începerii
   field_done_ratio: Realizat (%)
   field_auth_source: Mod autentificare
   field_hide_mail: Nu se afișează adresa de email
@@ -654,7 +653,6 @@
   label_search_titles_only: Caută numai în titluri
   label_user_mail_option_all: "Pentru orice eveniment, în toate proiectele mele"
   label_user_mail_option_selected: " Pentru orice eveniment, în proiectele selectate..."
-  label_user_mail_option_none: "Doar cele urmărite sau cele în care sunt implicat"
   label_user_mail_no_self_notified: "Nu trimite notificări pentru modificările mele"
   label_registration_activation_by_email: activare cont prin email
   label_registration_manual_activation: activare manuală a contului
@@ -737,9 +735,9 @@
   text_subprojects_destroy_warning: "Se vor șterge și sub-proiectele: {{value}}."
   text_workflow_edit: Selectați un rol și un tip de tichet pentru a edita modul de lucru
   text_are_you_sure: Sunteți sigur(ă)?
-  text_tip_task_begin_day: sarcină care începe în această zi
-  text_tip_task_end_day: sarcină care se termină în această zi
-  text_tip_task_begin_end_day: sarcină care începe și se termină în această zi
+  text_tip_issue_begin_day: sarcină care începe în această zi
+  text_tip_issue_end_day: sarcină care se termină în această zi
+  text_tip_issue_begin_end_day: sarcină care începe și se termină în această zi
   text_project_identifier_info: 'Sunt permise doar litere mici (a-z), numere și cratime.<br />Odată salvat, identificatorul nu mai poate fi modificat.'
   text_caracters_maximum: "maxim {{count}} caractere."
   text_caracters_minimum: "Trebuie să fie minim {{count}} caractere."
@@ -809,12 +807,12 @@
   text_wiki_page_destroy_children: Șterge paginile și descendenții
   setting_password_min_length: Lungime minimă parolă
   field_group_by: Grupează după
-  mail_subject_wiki_content_updated: "Pagina wiki '{{page}}' a fost actualizată"
+  mail_subject_wiki_content_updated: "Pagina wiki '{{id}}' a fost actualizată"
   label_wiki_content_added: Adăugat
-  mail_subject_wiki_content_added: "Pagina wiki '{{page}}' a fost adăugată"
-  mail_body_wiki_content_added: Pagina wiki '{{page}}' a fost adăugată de {{author}}.
+  mail_subject_wiki_content_added: "Pagina wiki '{{id}}' a fost adăugată"
+  mail_body_wiki_content_added: Pagina wiki '{{id}}' a fost adăugată de {{author}}.
   label_wiki_content_updated: Actualizat
-  mail_body_wiki_content_updated: Pagina wiki '{{page}}' a fost actualizată de {{author}}.
+  mail_body_wiki_content_updated: Pagina wiki '{{id}}' a fost actualizată de {{author}}.
   permission_add_project: Crează proiect
   setting_new_project_user_role_id: Rol atribuit utilizatorului non-admin care crează un proiect.
   label_view_all_revisions: Arată toate reviziile
@@ -906,8 +904,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/ru.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/ru.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -295,7 +295,6 @@
   field_admin: ÐдминиÑтратор
   field_assignable: Задача может быть назначена Ñтой роли
   field_assigned_to: Ðазначена
-  field_assigned_to_role: Роль учаÑтника
   field_attr_firstname: ИмÑ
   field_attr_lastname: ФамилиÑ
   field_attr_login: Ðтрибут РегиÑтрациÑ
@@ -314,6 +313,7 @@
   field_description: ОпиÑание
   field_done_ratio: ГотовноÑть в %
   field_downloads: Загрузки
+  field_start_date: Дата начала
   field_due_date: Дата выполнениÑ
   field_editable: Редактируемый
   field_effective_date: Дата
@@ -345,7 +345,6 @@
   field_mail: Email
   field_mail_notification: Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ email
   field_max_length: МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°
-  field_member_of_group: Группа учаÑтника
   field_min_length: ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°
   field_name: ИмÑ
   field_new_password: Ðовый пароль
@@ -365,7 +364,6 @@
   field_role: Роль
   field_searchable: ДоÑтупно Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка
   field_spent_on: Дата
-  field_start_date: Ðачата
   field_start_page: Ð¡Ñ‚Ð°Ñ€Ñ‚Ð¾Ð²Ð°Ñ Ñтраница
   field_status: СтатуÑ
   field_subject: Тема
@@ -703,8 +701,10 @@
   label_user_activity: "ÐктивноÑть Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {{value}}"
   label_user_mail_no_self_notified: "Ðе извещать об изменениÑÑ…, которые Ñ Ñделал Ñам"
   label_user_mail_option_all: "О вÑех ÑобытиÑÑ… во вÑех моих проектах"
-  label_user_mail_option_none: "Только о тех ÑобытиÑÑ…, которые Ñ Ð¾Ñ‚Ñлеживаю или в которых Ñ ÑƒÑ‡Ð°Ñтвую"
   label_user_mail_option_selected: "О вÑех ÑобытиÑÑ… только в выбранном проекте..."
+  label_user_mail_option_only_owner: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ñ ÑвлÑÑŽÑÑŒ владельцем
+  label_user_mail_option_only_my_events: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², которые Ñ Ð¾Ñ‚Ñлеживаю или в которых учаÑтвую
+  label_user_mail_option_only_assigned: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², которые назначены мне
   label_user_new: Ðовый пользователь
   label_user_plural: Пользователи
   label_version: ВерÑиÑ
@@ -867,6 +867,7 @@
   setting_cross_project_issue_relations: Разрешить переÑечение задач по проектам
   setting_date_format: Формат даты
   setting_default_language: Язык по умолчанию
+  setting_default_notification_option: СпоÑоб Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию
   setting_default_projects_public: Ðовые проекты ÑвлÑÑŽÑ‚ÑÑ Ð¾Ð±Ñ‰ÐµÐ´Ð¾Ñтупными
   setting_diff_max_lines_displayed: МакÑимальное чиÑло Ñтрок Ð´Ð»Ñ diff
   setting_display_subprojects_issues: Отображение подпроектов по умолчанию
@@ -941,9 +942,9 @@
   text_select_project_modules: 'Выберите модули, которые будут иÑпользованы в проекте:'
   text_status_changed_by_changeset: "Реализовано в {{value}} редакции."
   text_subprojects_destroy_warning: "Подпроекты: {{value}} также будут удалены."
-  text_tip_task_begin_day: дата начала задачи
-  text_tip_task_begin_end_day: начало задачи и окончание ее в Ñтот день
-  text_tip_task_end_day: дата Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸
+  text_tip_issue_begin_day: дата начала задачи
+  text_tip_issue_begin_end_day: начало задачи и окончание ее в Ñтот день
+  text_tip_issue_end_day: дата Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸
   text_tracker_no_workflow: Ð”Ð»Ñ Ñтого трекера поÑледовательноÑть дейÑтвий не определена
   text_unallowed_characters: Запрещенные Ñимволы
   text_user_mail_option: "Ð”Ð»Ñ Ð½ÐµÐ²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… проектов, Ð’Ñ‹ будете получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ о том что проÑматриваете или в чем учаÑтвуете (например, вопроÑÑ‹, автором которых Ð’Ñ‹ ÑвлÑетеÑÑŒ или которые Вам назначены)."
@@ -958,12 +959,12 @@
   text_wiki_page_destroy_children: Удалить дочерние Ñтраницы и вÑех их потомков
   setting_password_min_length: ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° паролÑ
   field_group_by: Группировать результаты по
-  mail_subject_wiki_content_updated: "Wiki-Ñтраница '{{page}}' была обновлена"
+  mail_subject_wiki_content_updated: "Wiki-Ñтраница '{{id}}' была обновлена"
   label_wiki_content_added: Добавлена wiki-Ñтраница
-  mail_subject_wiki_content_added: "Wiki-Ñтраница  '{{page}}' была добавлена"
-  mail_body_wiki_content_added: "{{author}} добавил(а) wiki-Ñтраницу '{{page}}'."
+  mail_subject_wiki_content_added: "Wiki-Ñтраница  '{{id}}' была добавлена"
+  mail_body_wiki_content_added: "{{author}} добавил(а) wiki-Ñтраницу '{{id}}'."
   label_wiki_content_updated: Обновлена wiki-Ñтраница
-  mail_body_wiki_content_updated: "{{author}} обновил(а) wiki-Ñтраницу '{{page}}'."
+  mail_body_wiki_content_updated: "{{author}} обновил(а) wiki-Ñтраницу '{{id}}'."
   permission_add_project: Создание проекта
   setting_new_project_user_role_id: Роль, Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°ÐµÐ¼Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ, Ñоздавшему проект
   label_view_all_revisions: Показать вÑе ревизии
@@ -1035,3 +1036,12 @@
   notice_unable_delete_time_entry: Ðевозможно удалить запиÑÑŒ журнала.
   label_overall_spent_time: Ð’Ñего затрачено времени
 
+  label_user_mail_option_none: Ðет Ñобытий
+  field_member_of_group: Группа назначенного
+  field_assigned_to_role: Роль назначенного
+  notice_not_authorized_archived_project: Запрашиваемый проект был архивирован.
+
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/sk.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/sk.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -231,7 +231,6 @@
   field_attr_lastname: Priezvisko (atribut)
   field_attr_mail: Email (atribut)
   field_onthefly: Automatické vytváranie užívateľov
-  field_start_date: ZaÄiatok
   field_done_ratio: % hotovo
   field_auth_source: AutentifikaÄný mód
   field_hide_mail: Nezobrazovať môj email
@@ -581,7 +580,6 @@
   label_search_titles_only: Vyhľadávať iba v názvoch
   label_user_mail_option_all: "Pre všetky události všetkých mojích projektov"
   label_user_mail_option_selected: "Pre všetky události vybraných projektov"
-  label_user_mail_option_none: "Len pre události, ktoré sledujem alebo sa ma týkajú"
   label_user_mail_no_self_notified: "Nezasielať informácie o mnou vytvorených zmenách"
   label_registration_activation_by_email: aktivácia úÄtu emailom
   label_registration_manual_activation: manuálna aktivácia úÄtu
@@ -649,9 +647,9 @@
   text_project_destroy_confirmation: Ste si istý, že chcete odstránit tento projekt a všetky súvisiace dáta ?
   text_workflow_edit: Vyberte rolu a frontu k úprave workflow
   text_are_you_sure: Ste si istý?
-  text_tip_task_begin_day: úloha zaÄína v tento deň
-  text_tip_task_end_day: úloha konÄí v tento deň
-  text_tip_task_begin_end_day: úloha zaÄína a konÄí v tento deň
+  text_tip_issue_begin_day: úloha zaÄína v tento deň
+  text_tip_issue_end_day: úloha konÄí v tento deň
+  text_tip_issue_begin_end_day: úloha zaÄína a konÄí v tento deň
   text_project_identifier_info: 'Povolené znaky sú malé písmena (a-z), Äísla a pomlÄka.<br />Po uložení už nieje možné identifikátor zmeniÅ¥.'
   text_caracters_maximum: "{{count}} znakov maximálne."
   text_caracters_minimum: "Musí byť aspoň {{count}} znaky/ov dlhé."
@@ -810,13 +808,13 @@
   text_wiki_page_destroy_children: Vymazať podstránky a všetkých ich potomkov
   setting_password_min_length: Minimálna dĺžka hesla
   field_group_by: Skupinové výsledky podľa
-  mail_subject_wiki_content_updated: "'{{page}}' Wiki stránka bola aktualizovaná"
+  mail_subject_wiki_content_updated: "'{{id}}' Wiki stránka bola aktualizovaná"
   label_wiki_content_added: Wiki stránka pridaná
-  mail_subject_wiki_content_added: "'{{page}}' Wiki stránka bola pridaná"
-  mail_body_wiki_content_added: The '{{page}}' Wiki stránka bola pridaná užívateľom {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' Wiki stránka bola pridaná"
+  mail_body_wiki_content_added: The '{{id}}' Wiki stránka bola pridaná užívateľom {{author}}.
   permission_add_project: Vytvorenie projektu
   label_wiki_content_updated: Wiki stránka aktualizovaná
-  mail_body_wiki_content_updated: Wiki stránka '{{page}}' bola aktualizovaná užívateľom {{author}}.
+  mail_body_wiki_content_updated: Wiki stránka '{{id}}' bola aktualizovaná užívateľom {{author}}.
   setting_repositories_encodings: Kódovanie repozitára
   setting_new_project_user_role_id: Rola dána non-admin užívateľovi, ktorý vytvorí projekt
   label_view_all_revisions: Zobraziť všetkz revízie
@@ -908,8 +906,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/sl.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/sl.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -236,7 +236,6 @@
   field_attr_lastname: Oznaka za priimek
   field_attr_mail: Oznaka za e-naslov
   field_onthefly: Sprotna izdelava uporabnikov
-  field_start_date: ZaÄetek
   field_done_ratio: % Narejeno
   field_auth_source: NaÄin overovljanja
   field_hide_mail: Skrij moj e-naslov
@@ -650,7 +649,6 @@
   label_search_titles_only: PreiÅ¡Äi samo naslove
   label_user_mail_option_all: "Za vsak dogodek v vseh mojih projektih"
   label_user_mail_option_selected: "Za vsak dogodek samo na izbranih projektih..."
-  label_user_mail_option_none: "Samo za zadeve ki jih spremljam ali sem v njih udeležen(a)"
   label_user_mail_no_self_notified: "Ne želim biti opozorjen(a) na spremembe, ki jih naredim sam(a)"
   label_registration_activation_by_email: aktivacija raÄuna po e-poÅ¡ti
   label_registration_manual_activation: roÄna aktivacija raÄuna
@@ -725,9 +723,9 @@
   text_subprojects_destroy_warning: "Njegov(i) podprojekt(i): {{value}} bodo prav tako izbrisani."
   text_workflow_edit: Izberite vlogo in zahtevek za urejanje poteka dela
   text_are_you_sure: Ali ste prepriÄani?
-  text_tip_task_begin_day: naloga z zaÄetkom na ta dan
-  text_tip_task_end_day: naloga z zakljuÄkom na ta dan
-  text_tip_task_begin_end_day: naloga ki se zaÄne in konÄa ta dan
+  text_tip_issue_begin_day: naloga z zaÄetkom na ta dan
+  text_tip_issue_end_day: naloga z zakljuÄkom na ta dan
+  text_tip_issue_begin_end_day: naloga ki se zaÄne in konÄa ta dan
   text_project_identifier_info: 'Dovoljene so samo male Ärke (a-z), Å¡tevilke in vezaji.<br />Enkrat shranjen identifikator ne more biti spremenjen.'
   text_caracters_maximum: "najveÄ {{count}} znakov."
   text_caracters_minimum: "Mora biti vsaj dolg vsaj {{count}} znakov."
@@ -812,12 +810,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -909,8 +907,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/sr-YU.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/sr-YU.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -192,10 +192,10 @@
   mail_body_account_activation_request: "Novi korisnik ({{value}}) je registrovan. Nalog Äeka na vaÅ¡e odobrenje:"
   mail_subject_reminder: "{{count}} problema dospeva narednih {{days}} dana"
   mail_body_reminder: "{{count}} problema dodeljenih vama dospeva u narednih {{days}} dana:"
-  mail_subject_wiki_content_added: "Wiki stranica '{{page}}' je dodata"
-  mail_body_wiki_content_added: "{{author}} je dodao wiki stranicu '{{page}}'."
-  mail_subject_wiki_content_updated: "Wiki stranica '{{page}}' je ažurirana"
-  mail_body_wiki_content_updated: "{{author}} je ažurirao wiki stranicu '{{page}}'."
+  mail_subject_wiki_content_added: "Wiki stranica '{{id}}' je dodata"
+  mail_body_wiki_content_added: "{{author}} je dodao wiki stranicu '{{id}}'."
+  mail_subject_wiki_content_updated: "Wiki stranica '{{id}}' je ažurirana"
+  mail_body_wiki_content_updated: "{{author}} je ažurirao wiki stranicu '{{id}}'."
   
   gui_validation_error: jedna greška
   gui_validation_error_plural: "{{count}} grešaka"
@@ -261,7 +261,6 @@
   field_attr_lastname: Atribut prezimena
   field_attr_mail: Atribut e-adrese
   field_onthefly: Kreiranje korisnika u toku rada
-  field_start_date: PoÄetak
   field_done_ratio: % urađeno
   field_auth_source: Režim potvrde identiteta
   field_hide_mail: Sakrij moju e-adresu
@@ -719,7 +718,6 @@
   label_search_titles_only: Pretražuj samo naslove
   label_user_mail_option_all: "Za bilo koji događaj na svim mojim projektima"
   label_user_mail_option_selected: "Za bilo koji događaj na samo odabranim projektima..."
-  label_user_mail_option_none: "Samo za stvari koje pratim ili u koje sam ukljuÄen"
   label_user_mail_no_self_notified: "Ne želim biti obaveštavan za promene koje sam pravim"
   label_registration_activation_by_email: aktivacija naloga putem e-poruke
   label_registration_manual_activation: ruÄna aktivacija naloga
@@ -836,9 +834,9 @@
   text_journal_set_to: "{{label}} postavljen u {{value}}"
   text_journal_deleted: "{{label}} izbrisano ({{old}})"
   text_journal_added: "{{label}} {{value}} dodato"
-  text_tip_task_begin_day: zadatak poÄinje ovog dana
-  text_tip_task_end_day: zadatak se završava ovog dana
-  text_tip_task_begin_end_day: zadatak poÄinje i zavrÅ¡ava ovog dana
+  text_tip_issue_begin_day: zadatak poÄinje ovog dana
+  text_tip_issue_end_day: zadatak se završava ovog dana
+  text_tip_issue_begin_end_day: zadatak poÄinje i zavrÅ¡ava ovog dana
   text_project_identifier_info: 'Dozvoljena su samo mala slova (a-š), brojevi i crtice.<br />Jednom snimljen identifikator više se ne može promeniti.'
   text_caracters_maximum: "Najviše {{count}} znak(ova)."
   text_caracters_minimum: "Broj znakova mora biti najmanje {{count}}."
@@ -913,8 +911,19 @@
   field_time_entries: Vreme evidencije
   project_module_gantt: Gantov dijagram
   project_module_calendar: Kalendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/sr.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/sr.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -192,10 +192,10 @@
   mail_body_account_activation_request: "Ðови кориÑник ({{value}}) је региÑтрован. Ðалог чека на ваше одобрење:"
   mail_subject_reminder: "{{count}} проблема доÑпева наредних {{days}} дана"
   mail_body_reminder: "{{count}} проблема додељених вама доÑпева у наредних {{days}} дана:"
-  mail_subject_wiki_content_added: "Wiki Ñтраница '{{page}}' је додата"
-  mail_body_wiki_content_added: "{{author}} је додао wiki Ñтраницу '{{page}}'."
-  mail_subject_wiki_content_updated: "Wiki Ñтраница '{{page}}' је ажурирана"
-  mail_body_wiki_content_updated: "{{author}} је ажурирао wiki Ñтраницу '{{page}}'."
+  mail_subject_wiki_content_added: "Wiki Ñтраница '{{id}}' је додата"
+  mail_body_wiki_content_added: "{{author}} је додао wiki Ñтраницу '{{id}}'."
+  mail_subject_wiki_content_updated: "Wiki Ñтраница '{{id}}' је ажурирана"
+  mail_body_wiki_content_updated: "{{author}} је ажурирао wiki Ñтраницу '{{id}}'."
   
   gui_validation_error: једна грешка
   gui_validation_error_plural: "{{count}} грешака"
@@ -261,7 +261,6 @@
   field_attr_lastname: Ðтрибут презимена
   field_attr_mail: Ðтрибут е-адреÑе
   field_onthefly: Креирање кориÑника у току рада
-  field_start_date: Почетак
   field_done_ratio: % урађено
   field_auth_source: Режим потврде идентитета
   field_hide_mail: Сакриј моју е-адреÑу
@@ -719,7 +718,6 @@
   label_search_titles_only: Претражуј Ñамо наÑлове
   label_user_mail_option_all: "За било који догађај на Ñвим мојим пројектима"
   label_user_mail_option_selected: "За било који догађај на Ñамо одабраним пројектима..."
-  label_user_mail_option_none: "Само за Ñтвари које пратим или у које Ñам укључен"
   label_user_mail_no_self_notified: "Ðе желим бити обавештаван за промене које Ñам правим"
   label_registration_activation_by_email: активација налога путем е-поруке
   label_registration_manual_activation: ручна активација налога
@@ -836,9 +834,9 @@
   text_journal_set_to: "{{label}} поÑтављен у {{value}}"
   text_journal_deleted: "{{label}} избриÑано ({{old}})"
   text_journal_added: "{{label}} {{value}} додато"
-  text_tip_task_begin_day: задатак почиње овог дана
-  text_tip_task_end_day: задатак Ñе завршава овог дана
-  text_tip_task_begin_end_day: задатак почиње и завршава овог дана
+  text_tip_issue_begin_day: задатак почиње овог дана
+  text_tip_issue_end_day: задатак Ñе завршава овог дана
+  text_tip_issue_begin_end_day: задатак почиње и завршава овог дана
   text_project_identifier_info: 'Дозвољена Ñу Ñамо мала Ñлова (a-ш), бројеви и цртице.<br />Једном Ñнимљен идентификатор више Ñе не може променити.'
   text_caracters_maximum: "Ðајвише {{count}} знак(ова)."
   text_caracters_minimum: "Број знакова мора бити најмање {{count}}."
@@ -913,9 +911,20 @@
   field_time_entries: Време евиденције
   project_module_gantt: Гантов дијаграм
   project_module_calendar: Календар
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
 
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/sv.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/sv.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -195,6 +195,7 @@
   notice_file_not_found: Sidan du försökte komma åt existerar inte eller är borttagen.
   notice_locking_conflict: Data har uppdaterats av en annan användare.
   notice_not_authorized: Du saknar behörighet att komma åt den här sidan.
+  notice_not_authorized_archived_project: Projektet du försöker komma åt har arkiverats.
   notice_email_sent: "Ett mail skickades till {{value}}"
   notice_email_error: "Ett fel inträffade när mail skickades ({{value}})"
   notice_feeds_access_key_reseted: Din RSS-nyckel återställdes.
@@ -238,10 +239,10 @@
   mail_body_account_activation_request: "En ny användare ({{value}}) har registrerat sig och avvaktar ditt godkännande:"
   mail_subject_reminder: "{{count}} ärende(n) har deadline under de kommande {{days}} dagarna"
   mail_body_reminder: "{{count}} ärende(n) som är tilldelat dig har deadline under de {{days}} dagarna:"
-  mail_subject_wiki_content_added: "'{{page}}' wikisida has lagts till"
-  mail_body_wiki_content_added: The '{{page}}' wikisida has lagts till av {{author}}.
-  mail_subject_wiki_content_updated: "'{{page}}' wikisida har uppdaterats"
-  mail_body_wiki_content_updated: The '{{page}}' wikisida har uppdaterats av {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wikisida has lagts till"
+  mail_body_wiki_content_added: The '{{id}}' wikisida has lagts till av {{author}}.
+  mail_subject_wiki_content_updated: "'{{id}}' wikisida har uppdaterats"
+  mail_body_wiki_content_updated: The '{{id}}' wikisida har uppdaterats av {{author}}.
   
   gui_validation_error: 1 fel
   gui_validation_error_plural: "{{count}} fel"
@@ -307,7 +308,6 @@
   field_attr_lastname: Efternamnsattribut
   field_attr_mail: Mailattribut
   field_onthefly: Skapa användare on-the-fly
-  field_start_date: Start
   field_done_ratio: % Klart
   field_auth_source: Autentiseringsläge
   field_hide_mail: Dölj min mailadress
@@ -339,6 +339,9 @@
   field_group_by: Gruppera resultat efter
   field_sharing: Delning
   field_parent_issue: Förälderaktivitet
+  field_member_of_group: Tilldelad användares grupp
+  field_assigned_to_role: Tilldelad användares roll
+  field_text: Textfält
   
   setting_app_title: Applikationsrubrik
   setting_app_subtitle: Applikationsunderrubrik
@@ -393,6 +396,7 @@
   setting_start_of_week: Första dagen i veckan
   setting_rest_api_enabled: Aktivera REST webbtjänst
   setting_cache_formatted_text: Cacha formaterad text
+  setting_default_notification_option: Standard notifieringsalternativ
   
   permission_add_project: Skapa projekt
   permission_add_subprojects: Skapa underprojekt
@@ -568,7 +572,7 @@
   label_news_view_all: Visa alla nyheter
   label_news_added: Nyhet tillagd
   label_settings: Inställningar
-  label_overview: Överblick
+  label_overview: Översikt
   label_version: Version
   label_version_new: Ny version
   label_version_plural: Versioner
@@ -768,7 +772,10 @@
   label_search_titles_only: Sök endast i titlar
   label_user_mail_option_all: "För alla händelser i mina projekt"
   label_user_mail_option_selected: "För alla händelser i markerade projekt..."
-  label_user_mail_option_none: "Endast för saker jag bevakar eller är involverad i"
+  label_user_mail_option_none: Inga händelser
+  label_user_mail_option_only_my_events: Endast för saker jag bevakar eller är inblandad i
+  label_user_mail_option_only_assigned: Endast för saker jag är tilldelad
+  label_user_mail_option_only_owner: Endast för saker jag äger
   label_user_mail_no_self_notified: "Jag vill inte bli underrättad om ändringar som jag har gjort"
   label_registration_activation_by_email: kontoaktivering med mail
   label_registration_manual_activation: manuell kontoaktivering
@@ -830,6 +837,7 @@
   button_create_and_continue: Skapa och fortsätt
   button_test: Testa
   button_edit: Ändra
+  button_edit_associated_wikipage: "Ändra associerad Wikisida: {{page_title}}"
   button_add: Lägg till
   button_change: Ändra
   button_apply: Verkställ
@@ -881,13 +889,14 @@
   text_subprojects_destroy_warning: "Alla underprojekt: {{value}} kommer också tas bort."
   text_workflow_edit: Välj en roll och en ärendetyp för att ändra arbetsflöde
   text_are_you_sure: Är du säker ?
+  text_are_you_sure_with_children: Ta bort ärende och alla underärenden?
   text_journal_changed: "{{label}} ändrad från {{old}} till {{new}}"
   text_journal_set_to: "{{label}} satt till {{value}}"
   text_journal_deleted: "{{label}} borttagen ({{old}})"
   text_journal_added: "{{label}} {{value}} tillagd"
-  text_tip_task_begin_day: arbetsuppgift som börjar denna dag
-  text_tip_task_end_day: arbetsuppgift som slutar denna dag
-  text_tip_task_begin_end_day: arbetsuppgift börjar och slutar denna dag
+  text_tip_issue_begin_day: arbetsuppgift som börjar denna dag
+  text_tip_issue_end_day: arbetsuppgift som slutar denna dag
+  text_tip_issue_begin_end_day: arbetsuppgift börjar och slutar denna dag
   text_project_identifier_info: 'Små bokstäver (a-z), siffror och streck tillåtna.<br />När den är sparad kan identifieraren inte ändras.'
   text_caracters_maximum: "max {{count}} tecken."
   text_caracters_minimum: "Måste vara minst {{count}} tecken lång."
@@ -958,8 +967,8 @@
   enumeration_doc_categories: Dokumentkategorier
   enumeration_activities: Aktiviteter (tidsuppföljning)
   enumeration_system_activity: Systemaktivitet
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/th.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/th.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -233,7 +233,6 @@
   field_attr_lastname: นามสà¸à¸¸à¸¥ attribute
   field_attr_mail: อีเมล์ attribute
   field_onthefly: สร้างผู้ใช้ทันที
-  field_start_date: เริ่ม
   field_done_ratio: % สำเร็จ
   field_auth_source: วิธีà¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸•ัวตน
   field_hide_mail: ซ่อนอีเมล์ของฉัน
@@ -585,7 +584,6 @@
   label_search_titles_only: ค้นหาจาà¸à¸Šà¸·à¹ˆà¸­à¹€à¸£à¸·à¹ˆà¸­à¸‡à¹€à¸—่านั้น
   label_user_mail_option_all: "ทุà¸à¹† เหตุà¸à¸²à¸£à¸“์ในโครงà¸à¸²à¸£à¸‚องฉัน"
   label_user_mail_option_selected: "ทุà¸à¹† เหตุà¸à¸²à¸£à¸“์ในโครงà¸à¸²à¸£à¸—ี่เลือà¸..."
-  label_user_mail_option_none: "เฉพาะสิ่งที่ฉันเลือà¸à¸«à¸£à¸·à¸­à¸¡à¸µà¸ªà¹ˆà¸§à¸™à¹€à¸à¸µà¹ˆà¸¢à¸§à¸‚้อง"
   label_user_mail_no_self_notified: "ฉันไม่ต้องà¸à¸²à¸£à¹„ด้รับà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•ือนในสิ่งที่ฉันทำเอง"
   label_registration_activation_by_email: เปิดบัà¸à¸Šà¸µà¸œà¹ˆà¸²à¸™à¸­à¸µà¹€à¸¡à¸¥à¹Œ
   label_registration_manual_activation: อนุมัติโดยผู้บริหารจัดà¸à¸²à¸£
@@ -655,9 +653,9 @@
   text_subprojects_destroy_warning: "โครงà¸à¸²à¸£à¸¢à¹ˆà¸­à¸¢: {{value}} จะถูà¸à¸¥à¸šà¸”้วย."
   text_workflow_edit: เลือà¸à¸šà¸—บาทà¹à¸¥à¸°à¸à¸²à¸£à¸•ิดตาม เพื่อà¹à¸à¹‰à¹„ขลำดับงาน
   text_are_you_sure: คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¹„หม ?
-  text_tip_task_begin_day: งานที่เริ่มวันนี้
-  text_tip_task_end_day: งานที่จบวันนี้
-  text_tip_task_begin_end_day: งานที่เริ่มà¹à¸¥à¸°à¸ˆà¸šà¸§à¸±à¸™à¸™à¸µà¹‰
+  text_tip_issue_begin_day: งานที่เริ่มวันนี้
+  text_tip_issue_end_day: งานที่จบวันนี้
+  text_tip_issue_begin_end_day: งานที่เริ่มà¹à¸¥à¸°à¸ˆà¸šà¸§à¸±à¸™à¸™à¸µà¹‰
   text_project_identifier_info: 'ภาษาอังà¸à¸¤à¸©à¸•ัวเล็à¸(a-z), ตัวเลข(0-9) à¹à¸¥à¸°à¸‚ีด (-) เท่านั้น.<br />เมื่อจัดเà¸à¹‡à¸šà¹à¸¥à¹‰à¸§, ชื่อเฉพาะไม่สามารถเปลี่ยนà¹à¸›à¸¥à¸‡à¹„ด้'
   text_caracters_maximum: "สูงสุด {{count}} ตัวอัà¸à¸©à¸£."
   text_caracters_minimum: "ต้องยาวอย่างน้อย {{count}} ตัวอัà¸à¸©à¸£."
@@ -813,12 +811,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -910,8 +908,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/tr.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/tr.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -260,7 +260,6 @@
   field_attr_lastname: Soyad NiteliÄŸi
   field_attr_mail: E-Posta NiteliÄŸi
   field_onthefly: Anında kullanıcı oluşturma
-  field_start_date: Başlangıç
   field_done_ratio: % tamamlandı
   field_auth_source: Kimlik Denetim Modu
   field_hide_mail: E-posta adresimi gizle
@@ -610,7 +609,6 @@
   label_search_titles_only: Sadece başlıkları ara
   label_user_mail_option_all: "Tüm projelerimdeki herhangi bir olay için"
   label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için..."
-  label_user_mail_option_none: "Sadece dahil olduğum ya da izlediklerim için"
   label_user_mail_no_self_notified: "Kendi yaptığım değişikliklerden haberdar olmak istemiyorum"
   label_registration_activation_by_email: e-posta ile hesap etkinleÅŸtirme
   label_registration_manual_activation: Elle hesap etkinleÅŸtirme
@@ -680,9 +678,9 @@
   text_subprojects_destroy_warning: "Ayrıca {{value}} alt proje silinecek."
   text_workflow_edit: İşakışını düzenlemek için bir rol ve takipçi seçin
   text_are_you_sure: Emin misiniz ?
-  text_tip_task_begin_day: Bugün başlayan görevler
-  text_tip_task_end_day: Bugün sona eren görevler
-  text_tip_task_begin_end_day: Bugün başlayan ve sona eren görevler
+  text_tip_issue_begin_day: Bugün başlayan görevler
+  text_tip_issue_end_day: Bugün sona eren görevler
+  text_tip_issue_begin_end_day: Bugün başlayan ve sona eren görevler
   text_project_identifier_info: 'Küçük harfler (a-z), sayılar ve noktalar kabul edilir.<br />Bir kere kaydedildiğinde,tanımlayıcı değiştirilemez.'
   text_caracters_maximum: "En çok {{count}} karakter."
   text_caracters_minimum: "En az {{count}} karakter uzunluğunda olmalı."
@@ -839,12 +837,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -936,8 +934,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/uk.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/uk.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -227,7 +227,6 @@
   field_attr_lastname: Ðтрибут Прізвище
   field_attr_mail: Ðтрибут Email
   field_onthefly: Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача на льоту
-  field_start_date: Початок
   field_done_ratio: % зроблено
   field_auth_source: Режим аутентифікації
   field_hide_mail: Приховувати мій email
@@ -544,7 +543,6 @@
   label_search_titles_only: Шукати тільки в назвах
   label_user_mail_option_all: "Ð”Ð»Ñ Ð²ÑÑ–Ñ… подій у вÑÑ–Ñ… моїх проектах"
   label_user_mail_option_selected: "Ð”Ð»Ñ Ð²ÑÑ–Ñ… подій тільки у вибраному проекті..."
-  label_user_mail_option_none: "Тільки Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, що Ñ Ð¿Ñ€Ð¾Ð³Ð»Ñдаю або в чому Ñ Ð±ÐµÑ€Ñƒ учаÑть"
   label_user_mail_no_self_notified: "Ðе Ñповіщати про зміни, Ñкі Ñ Ð·Ñ€Ð¾Ð±Ð¸Ð² Ñам"
   label_registration_activation_by_email: Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу електронною поштою
   label_registration_manual_activation: ручна Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу
@@ -597,9 +595,9 @@
   text_project_destroy_confirmation: Ви наполÑгаєте на видаленні цього проекту Ñ– вÑієї інформації, що відноÑитьÑÑ Ð´Ð¾ нього?
   text_workflow_edit: Виберіть роль Ñ– координатор Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑлідовноÑті дій
   text_are_you_sure: Ви впевнені?
-  text_tip_task_begin_day: день початку задачі
-  text_tip_task_end_day: день Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ–
-  text_tip_task_begin_end_day: початок задачі Ñ– Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ днÑ
+  text_tip_issue_begin_day: день початку задачі
+  text_tip_issue_end_day: день Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ–
+  text_tip_issue_begin_end_day: початок задачі Ñ– Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ днÑ
   text_project_identifier_info: 'РÑдкові букви (a-z), допуÑтимі цифри Ñ– дефіÑ.<br />Збережений ідентифікатор не може бути змінений.'
   text_caracters_maximum: "{{count}} Ñимволів(а) макÑимум."
   text_caracters_minimum: "Повинно мати Ñкнайменше  {{count}} Ñимволів(а) у довжину."
@@ -812,12 +810,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -909,8 +907,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/vi.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/vi.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -294,7 +294,6 @@
   field_attr_lastname: Lastname attribute
   field_attr_mail: Email attribute
   field_onthefly: On-the-fly user creation
-  field_start_date: Bắt đầu
   field_done_ratio: Tiến độ
   field_auth_source: Authentication mode
   field_hide_mail: Không làm lộ email của bạn
@@ -654,7 +653,6 @@
   label_search_titles_only: Chỉ tìm trong tá»±a Ä‘á»
   label_user_mail_option_all: "Má»i sá»± kiện trên má»i dá»± án cá»§a bạn"
   label_user_mail_option_selected: "Má»i sá»± kiện trên các dá»± án được chá»n..."
-  label_user_mail_option_none: "Chỉ những vấn đỠbạn theo dõi hoặc được gán"
   label_user_mail_no_self_notified: "Äừng gá»­i email vá» các thay đổi do chính bạn thá»±c hiện"
   label_registration_activation_by_email: account activation by email
   label_registration_manual_activation: manual account activation
@@ -728,9 +726,9 @@
   text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted."
   text_workflow_edit: Select a role and a tracker to edit the workflow
   text_are_you_sure: Bạn chắc chứ?
-  text_tip_task_begin_day: ngày bắt đầu
-  text_tip_task_end_day: ngày kết thúc
-  text_tip_task_begin_end_day: bắt đầu và kết thúc cùng ngày
+  text_tip_issue_begin_day: ngày bắt đầu
+  text_tip_issue_end_day: ngày kết thúc
+  text_tip_issue_begin_end_day: bắt đầu và kết thúc cùng ngày
   text_project_identifier_info: 'Chỉ cho phép chữ cái thưá»ng (a-z), con số và dấu gạch ngang.<br />Sau khi lưu, chỉ số ID không thể thay đổi.'
   text_caracters_maximum: "Tối đa {{count}} ký tự."
   text_caracters_minimum: "Phải gồm ít nhất {{count}} ký tự."
@@ -871,12 +869,12 @@
   text_wiki_page_destroy_children: Delete child pages and all their descendants
   setting_password_min_length: Minimum password length
   field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated"
   label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  mail_subject_wiki_content_added: "'{{id}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}.
   label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}.
   permission_add_project: Create project
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
@@ -968,8 +966,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/zh-TW.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/zh-TW.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -174,7 +174,7 @@
         odd: "必須是奇數"
         even: "å¿…é ˆæ˜¯å¶æ•¸"
         # Append your own errors here or at the model/attributes scope.
-        greater_than_start_date: "必須在起始日期之後"
+        greater_than_start_date: "必須在開始日期之後"
         not_same_project: "ä¸å±¬æ–¼åŒä¸€å€‹å°ˆæ¡ˆ"
         circular_dependency: "é€™å€‹é—œè¯æœƒå°Žè‡´ç’°ç‹€ç›¸ä¾"
         cant_link_an_issue_with_a_descendant: "項目無法被連çµè‡³è‡ªå·±çš„å­é …ç›®"
@@ -235,6 +235,7 @@
   notice_file_not_found: 您想è¦å­˜å–çš„é é¢å·²ç¶“ä¸å­˜åœ¨æˆ–被æ¬ç§»è‡³å…¶ä»–ä½ç½®ã€‚
   notice_locking_conflict: 資料已被其他使用者更新。
   notice_not_authorized: ä½ æœªè¢«æŽˆæ¬Šå­˜å–æ­¤é é¢ã€‚
+  notice_not_authorized_archived_project: 您欲存å–的專案已經被歸檔å°å­˜ã€‚
   notice_email_sent: "郵件已經æˆåŠŸå¯„é€è‡³ä»¥ä¸‹æ”¶ä»¶è€…: {{value}}"
   notice_email_error: "寄é€éƒµä»¶çš„éŽç¨‹ä¸­ç™¼ç”ŸéŒ¯èª¤ ({{value}})"
   notice_feeds_access_key_reseted: 您的 RSS å­˜å–é‡‘é‘°å·²è¢«é‡æ–°è¨­å®šã€‚
@@ -277,10 +278,10 @@
   mail_body_account_activation_request: "æœ‰ä½æ–°ç”¨æˆ¶ ({{value}}) 已經完æˆè¨»å†Šï¼Œæ­£ç­‰å€™æ‚¨çš„審核:"
   mail_subject_reminder: "您有 {{count}} 個項目å³å°‡åˆ°æœŸ ({{days}})"
   mail_body_reminder: "{{count}} 個指派給您的項目,將於 {{days}} 天之內到期:"
-  mail_subject_wiki_content_added: "'{{page}}' wiki é é¢å·²è¢«æ–°å¢ž"
-  mail_body_wiki_content_added: "The '{{page}}' wiki é é¢å·²è¢« {{author}} 新增。"
-  mail_subject_wiki_content_updated: "'{{page}}' wiki é é¢å·²è¢«æ›´æ–°"
-  mail_body_wiki_content_updated: "The '{{page}}' wiki é é¢å·²è¢« {{author}} 更新。"
+  mail_subject_wiki_content_added: "'{{id}}' wiki é é¢å·²è¢«æ–°å¢ž"
+  mail_body_wiki_content_added: "The '{{id}}' wiki é é¢å·²è¢« {{author}} 新增。"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki é é¢å·²è¢«æ›´æ–°"
+  mail_body_wiki_content_updated: "The '{{id}}' wiki é é¢å·²è¢« {{author}} 更新。"
   
   gui_validation_error: 1 個錯誤
   gui_validation_error_plural: "{{count}} 個錯誤"
@@ -379,8 +380,8 @@
   field_group_by: çµæžœåˆ†çµ„æ–¹å¼
   field_sharing: 共用
   field_parent_issue: 父工作項目
-  field_member_of_group: 所屬群組
-  field_assigned_to_role: 所屬角色
+  field_member_of_group: "被指派者的群組"
+  field_assigned_to_role: "被指派者的角色"
   field_text: 內容文字
   
   setting_app_title: 標題
@@ -436,7 +437,8 @@
   setting_start_of_week: 週的第一天
   setting_rest_api_enabled: 啟用 REST 網路æœå‹™æŠ€è¡“(Web Service)
   setting_cache_formatted_text: å¿«å–已格å¼åŒ–文字
-
+  setting_default_notification_option: é è¨­é€šçŸ¥é¸é …
+  
   permission_add_project: 建立專案
   permission_add_subprojects: 建立å­å°ˆæ¡ˆ
   permission_edit_project: 編輯專案
@@ -811,7 +813,10 @@
   label_search_titles_only: 僅æœå°‹æ¨™é¡Œ
   label_user_mail_option_all: "æé†’與我的專案有關的全部事件"
   label_user_mail_option_selected: "åªæé†’æˆ‘æ‰€é¸æ“‡å°ˆæ¡ˆä¸­çš„事件..."
-  label_user_mail_option_none: "åªæé†’æˆ‘è§€å¯Ÿä¸­æˆ–åƒèˆ‡ä¸­çš„事件"
+  label_user_mail_option_none: "å–æ¶ˆæé†’"
+  label_user_mail_option_only_my_events: "åªæé†’æˆ‘è§€å¯Ÿä¸­æˆ–åƒèˆ‡ä¸­çš„事物"
+  label_user_mail_option_only_assigned: "åªæé†’æˆ‘è¢«æŒ‡æ´¾çš„äº‹ç‰©"
+  label_user_mail_option_only_owner: "åªæé†’æˆ‘ä½œç‚ºæ“æœ‰è€…的事物"
   label_user_mail_no_self_notified: "ä¸æé†’æˆ‘è‡ªå·±æ‰€åšçš„變更"
   label_registration_activation_by_email: é€éŽé›»å­éƒµä»¶å•Ÿç”¨å¸³æˆ¶
   label_registration_manual_activation: 手動啟用帳戶
@@ -930,9 +935,9 @@
   text_journal_set_to: "{{label}} 設定為 {{value}}"
   text_journal_deleted: "{{label}} 已刪除 ({{old}})"
   text_journal_added: "{{label}} {{value}} 已新增"
-  text_tip_task_begin_day: 今天起始的工作
-  text_tip_task_end_day: 今天截止的的工作
-  text_tip_task_begin_end_day: 今天起始與截止的工作
+  text_tip_issue_begin_day: 今天起始的工作
+  text_tip_issue_end_day: 今天截止的的工作
+  text_tip_issue_begin_end_day: 今天起始與截止的工作
   text_project_identifier_info: 'åªå…許å°å¯«è‹±æ–‡å­—æ¯ï¼ˆa-z)ã€é˜¿æ‹‰ä¼¯æ•¸å­—與連字符號(-)。<br />儲存後,代碼ä¸å¯å†è¢«æ›´æ”¹ã€‚'
   text_caracters_maximum: "最多 {{count}} 個字元."
   text_caracters_minimum: "長度必須大於 {{count}} 個字元."
@@ -1004,3 +1009,7 @@
   enumeration_activities: 活動 (時間追蹤)
   enumeration_system_activity: 系統活動
 
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/locales/zh.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/locales/zh.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -204,10 +204,10 @@
   mail_body_account_activation_request: "新用户({{value}}ï¼‰å·²å®Œæˆæ³¨å†Œï¼Œæ­£åœ¨ç­‰å€™æ‚¨çš„审核:"
   mail_subject_reminder: "{{count}} 个问题需è¦å°½å¿«è§£å†³ ({{days}})"
   mail_body_reminder: "指派给您的 {{count}} 个问题需è¦åœ¨ {{days}} 天内完æˆï¼š"
-  mail_subject_wiki_content_added: "'{{page}}' wiki页é¢å·²æ·»åŠ "
-  mail_body_wiki_content_added: "'{{page}}' wiki页é¢å·²ç”± {{author}} 添加。"
-  mail_subject_wiki_content_updated: "'{{page}}' wiki页é¢å·²æ›´æ–°"
-  mail_body_wiki_content_updated: "'{{page}}' wiki页é¢å·²ç”± {{author}} 更新。"
+  mail_subject_wiki_content_added: "'{{id}}' wiki页é¢å·²æ·»åŠ "
+  mail_body_wiki_content_added: "'{{id}}' wiki页é¢å·²ç”± {{author}} 添加。"
+  mail_subject_wiki_content_updated: "'{{id}}' wiki页é¢å·²æ›´æ–°"
+  mail_body_wiki_content_updated: "'{{id}}' wiki页é¢å·²ç”± {{author}} 更新。"
 
   gui_validation_error: 1 个错误
   gui_validation_error_plural: "{{count}} 个错误"
@@ -272,7 +272,6 @@
   field_attr_lastname: å§“æ°å±žæ€§
   field_attr_mail: 邮件属性
   field_onthefly: 峿—¶ç”¨æˆ·ç”Ÿæˆ
-  field_start_date: 开始
   field_done_ratio: 完æˆåº¦
   field_auth_source: è®¤è¯æ¨¡å¼
   field_hide_mail: éšè—我的邮件地å€
@@ -721,7 +720,6 @@
   label_search_titles_only: 仅在标题中æœç´¢
   label_user_mail_option_all: "æ”¶å–æˆ‘的项目的所有通知"
   label_user_mail_option_selected: "æ”¶å–选中项目的所有通知..."
-  label_user_mail_option_none: "åªæ”¶å–我跟踪或å‚与的项目的通知"
   label_user_mail_no_self_notified: "ä¸è¦å‘é€å¯¹æˆ‘自己æäº¤çš„修改的通知"
   label_registration_activation_by_email: é€šè¿‡é‚®ä»¶è®¤è¯æ¿€æ´»å¸å·
   label_registration_manual_activation: 手动激活å¸å·
@@ -835,9 +833,9 @@
   text_journal_set_to: "{{label}} 被设置为 {{value}}"
   text_journal_deleted: "{{label}} 已删除 ({{old}})"
   text_journal_added: "{{label}} {{value}} 已添加"
-  text_tip_task_begin_day: 今天开始的任务
-  text_tip_task_end_day: 今天结æŸçš„任务
-  text_tip_task_begin_end_day: 今天开始并结æŸçš„任务
+  text_tip_issue_begin_day: 今天开始的任务
+  text_tip_issue_end_day: 今天结æŸçš„任务
+  text_tip_issue_begin_end_day: 今天开始并结æŸçš„任务
   text_project_identifier_info: 'åªå…许使用å°å†™å­—æ¯ï¼ˆa-z),数字和连字符(-)。<br />请注æ„,标识符ä¿å­˜åŽå°†ä¸å¯ä¿®æ”¹ã€‚'
   text_caracters_maximum: "最多 {{count}} 个字符。"
   text_caracters_minimum: "è‡³å°‘éœ€è¦ {{count}} 个字符。"
@@ -931,8 +929,19 @@
   field_time_entries: Log time
   project_module_gantt: Gantt
   project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
   button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
   text_are_you_sure_with_children: Delete issue and all child issues?
   field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  label_user_mail_option_none: No events
+  field_member_of_group: Assignee's group
+  field_assigned_to_role: Assignee's role
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  field_start_date: Start date
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
--- a/config/routes.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/routes.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -13,55 +13,20 @@
   
   map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow'
   map.connect 'help/:ctrl/:page', :controller => 'help'
-  
-  map.connect 'time_entries/:id/edit', :action => 'edit', :controller => 'timelog'
-  map.connect 'projects/:project_id/time_entries/new', :action => 'edit', :controller => 'timelog'
-  map.connect 'projects/:project_id/issues/:issue_id/time_entries/new', :action => 'edit', :controller => 'timelog'
-  
-  map.with_options :controller => 'timelog' do |timelog|
-    timelog.connect 'projects/:project_id/time_entries', :action => 'details'
-    
-    timelog.with_options :action => 'details', :conditions => {:method => :get}  do |time_details|
-      time_details.connect 'time_entries'
-      time_details.connect 'time_entries.:format'
-      time_details.connect 'issues/:issue_id/time_entries'
-      time_details.connect 'issues/:issue_id/time_entries.:format'
-      time_details.connect 'projects/:project_id/time_entries.:format'
-      time_details.connect 'projects/:project_id/issues/:issue_id/time_entries'
-      time_details.connect 'projects/:project_id/issues/:issue_id/time_entries.:format'
-    end
-    timelog.connect 'projects/:project_id/time_entries/report', :action => 'report'
-    timelog.with_options :action => 'report',:conditions => {:method => :get} do |time_report|
-      time_report.connect 'time_entries/report'
-      time_report.connect 'time_entries/report.:format'
-      time_report.connect 'projects/:project_id/time_entries/report.:format'
-    end
 
-    timelog.with_options :action => 'edit', :conditions => {:method => :get} do |time_edit|
-      time_edit.connect 'issues/:issue_id/time_entries/new'
-    end
-      
-    timelog.connect 'time_entries/:id/destroy', :action => 'destroy', :conditions => {:method => :post}
+  map.connect 'projects/:project_id/time_entries/report', :controller => 'time_entry_reports', :action => 'report'
+  map.with_options :controller => 'time_entry_reports', :action => 'report',:conditions => {:method => :get} do |time_report|
+    time_report.connect 'time_entries/report'
+    time_report.connect 'time_entries/report.:format'
+    time_report.connect 'projects/:project_id/time_entries/report.:format'
   end
+
+  # TODO: wasteful since this is also nested under issues, projects, and projects/issues
+  map.resources :time_entries, :controller => 'timelog'
   
   map.connect 'projects/:id/wiki', :controller => 'wikis', :action => 'edit', :conditions => {:method => :post}
   map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :get}
   map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :post}
-  map.with_options :controller => 'wiki' do |wiki_routes|
-    wiki_routes.with_options :conditions => {:method => :get} do |wiki_views|
-      wiki_views.connect 'projects/:id/wiki/:page', :action => 'special', :page => /page_index|date_index|export/i
-      wiki_views.connect 'projects/:id/wiki/:page', :action => 'index', :page => nil
-      wiki_views.connect 'projects/:id/wiki/:page/edit', :action => 'edit'
-      wiki_views.connect 'projects/:id/wiki/:page/rename', :action => 'rename'
-      wiki_views.connect 'projects/:id/wiki/:page/history', :action => 'history'
-      wiki_views.connect 'projects/:id/wiki/:page/diff/:version/vs/:version_from', :action => 'diff'
-      wiki_views.connect 'projects/:id/wiki/:page/annotate/:version', :action => 'annotate'
-    end
-    
-    wiki_routes.connect 'projects/:id/wiki/:page/:action', 
-      :action => /edit|rename|destroy|preview|protect/,
-      :conditions => {:method => :post}
-  end
   
   map.with_options :controller => 'messages' do |messages_routes|
     messages_routes.with_options :conditions => {:method => :get} do |messages_views|
@@ -129,56 +94,46 @@
   map.connect '/issues', :controller => 'issues', :action => 'index', :conditions => { :method => :post }
   map.connect '/issues/create', :controller => 'issues', :action => 'index', :conditions => { :method => :post }
   
-  map.resources :issues, :member => { :edit => :post }, :collection => {}
-  map.resources :issues, :path_prefix => '/projects/:project_id', :collection => { :create => :post }
+  map.resources :issues, :member => { :edit => :post }, :collection => {} do |issues|
+    issues.resources :time_entries, :controller => 'timelog'
+  end
+  
+  map.resources :issues, :path_prefix => '/projects/:project_id', :collection => { :create => :post } do |issues|
+    issues.resources :time_entries, :controller => 'timelog'
+  end
 
   map.with_options  :controller => 'issue_relations', :conditions => {:method => :post} do |relations|
     relations.connect 'issues/:issue_id/relations/:id', :action => 'new'
     relations.connect 'issues/:issue_id/relations/:id/destroy', :action => 'destroy'
   end
-  
-  map.with_options :controller => 'news' do |news_routes|
-    news_routes.with_options :conditions => {:method => :get} do |news_views|
-      news_views.connect 'news', :action => 'index'
-      news_views.connect 'projects/:project_id/news', :action => 'index'
-      news_views.connect 'projects/:project_id/news.:format', :action => 'index'
-      news_views.connect 'news.:format', :action => 'index'
-      news_views.connect 'projects/:project_id/news/new', :action => 'new'
-      news_views.connect 'news/:id', :action => 'show'
-      news_views.connect 'news/:id/edit', :action => 'edit'
-    end
-    news_routes.with_options do |news_actions|
-      news_actions.connect 'projects/:project_id/news', :action => 'create', :conditions => {:method => :post}
-      news_actions.connect 'news/:id/destroy', :action => 'destroy'
-    end
-    news_routes.connect 'news/:id/edit', :action => 'update', :conditions => {:method => :put}
 
-    news_routes.connect 'news/:id/comments', :controller => 'comments', :action => 'create', :conditions => {:method => :post}
-    news_routes.connect 'news/:id/comments/:comment_id', :controller => 'comments', :action => 'destroy', :conditions => {:method => :delete}
-  end
-  
   map.connect 'projects/:id/members/new', :controller => 'members', :action => 'new'
-  
+
   map.with_options :controller => 'users' do |users|
-    users.with_options :conditions => {:method => :get} do |user_views|
-      user_views.connect 'users', :action => 'index'
-      user_views.connect 'users/:id', :action => 'show', :id => /\d+/
-      user_views.connect 'users/new', :action => 'add'
-      user_views.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil
-    end
+    users.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil, :conditions => {:method => :get}
+    
     users.with_options :conditions => {:method => :post} do |user_actions|
-      user_actions.connect 'users', :action => 'add'
-      user_actions.connect 'users/new', :action => 'add'
-      user_actions.connect 'users/:id/edit', :action => 'edit'
       user_actions.connect 'users/:id/memberships', :action => 'edit_membership'
       user_actions.connect 'users/:id/memberships/:membership_id', :action => 'edit_membership'
       user_actions.connect 'users/:id/memberships/:membership_id/destroy', :action => 'destroy_membership'
     end
   end
 
+  map.resources :users, :member => {
+    :edit_membership => :post,
+    :destroy_membership => :post
+  },
+  :except => [:destroy]
+
   # For nice "roadmap" in the url for the index action
   map.connect 'projects/:project_id/roadmap', :controller => 'versions', :action => 'index'
 
+  map.all_news 'news', :controller => 'news', :action => 'index'
+  map.formatted_all_news 'news.:format', :controller => 'news', :action => 'index'
+  map.preview_news '/news/preview', :controller => 'previews', :action => 'news'
+  map.connect 'news/:id/comments', :controller => 'comments', :action => 'create', :conditions => {:method => :post}
+  map.connect 'news/:id/comments/:comment_id', :controller => 'comments', :action => 'destroy', :conditions => {:method => :delete}
+
   map.resources :projects, :member => {
     :copy => [:get, :post],
     :settings => :get,
@@ -189,6 +144,25 @@
     project.resource :project_enumerations, :as => 'enumerations', :only => [:update, :destroy]
     project.resources :files, :only => [:index, :new, :create]
     project.resources :versions, :collection => {:close_completed => :put}, :member => {:status_by => :post}
+    project.resources :news, :shallow => true
+    project.resources :time_entries, :controller => 'timelog', :path_prefix => 'projects/:project_id'
+
+    project.wiki_start_page 'wiki', :controller => 'wiki', :action => 'show', :conditions => {:method => :get}
+    project.wiki_index 'wiki/index', :controller => 'wiki', :action => 'index', :conditions => {:method => :get}
+    project.wiki_diff 'wiki/:id/diff/:version', :controller => 'wiki', :action => 'diff', :version => nil
+    project.wiki_diff 'wiki/:id/diff/:version/vs/:version_from', :controller => 'wiki', :action => 'diff'
+    project.wiki_annotate 'wiki/:id/annotate/:version', :controller => 'wiki', :action => 'annotate'
+    project.resources :wiki, :except => [:new, :create], :member => {
+      :rename => [:get, :post],
+      :history => :get,
+      :preview => :any,
+      :protect => :post,
+      :add_attachment => :post
+    }, :collection => {
+      :export => :get,
+      :date_index => :get
+    }
+
   end
 
   # Destroy uses a get request to prompt the user before the actual DELETE request
--- a/config/settings.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/config/settings.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -184,3 +184,7 @@
   default: ''
 rest_api_enabled:
   default: 0
+default_notification_option:
+  default: 'only_my_events'
+emails_header:
+  default: ''
--- a/db/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/db/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 27
-/svn/!svn/ver/4013/trunk/db
+/svn/!svn/ver/4402/trunk/db
 END
--- a/db/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/db/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/db
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-22T18:42:00.112555Z
-4013
-edavis10
+2010-11-14T12:33:14.198318Z
+4402
+jplang
 has-props
 
 
--- a/db/migrate/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/db/migrate/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 35
-/svn/!svn/ver/4013/trunk/db/migrate
+/svn/!svn/ver/4402/trunk/db/migrate
+END
+20101107130441_add_custom_fields_visible.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4383/trunk/db/migrate/20101107130441_add_custom_fields_visible.rb
 END
 077_remove_issue_statuses_html_color.rb
 K 25
@@ -63,6 +69,12 @@
 V 73
 /svn/!svn/ver/2869/trunk/db/migrate/20090704172355_create_groups_users.rb
 END
+20101114115359_change_projects_identifier_limit.rb
+K 25
+svn:wc:ra_dav:version-url
+V 86
+/svn/!svn/ver/4402/trunk/db/migrate/20101114115359_change_projects_identifier_limit.rb
+END
 080_add_users_type.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -81,24 +93,30 @@
 V 73
 /svn/!svn/ver/674/trunk/db/migrate/018_set_doc_and_files_notifications.rb
 END
+20100129193402_change_users_mail_notification_to_string.rb
+K 25
+svn:wc:ra_dav:version-url
+V 94
+/svn/!svn/ver/4216/trunk/db/migrate/20100129193402_change_users_mail_notification_to_string.rb
+END
 008_create_user_preferences.rb
 K 25
 svn:wc:ra_dav:version-url
 V 64
 /svn/!svn/ver/67/trunk/db/migrate/008_create_user_preferences.rb
 END
+023_add_tracker_is_in_roadmap.rb
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/svn/!svn/ver/228/trunk/db/migrate/023_add_tracker_is_in_roadmap.rb
+END
 025_add_search_permission.rb
 K 25
 svn:wc:ra_dav:version-url
 V 63
 /svn/!svn/ver/674/trunk/db/migrate/025_add_search_permission.rb
 END
-023_add_tracker_is_in_roadmap.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/228/trunk/db/migrate/023_add_tracker_is_in_roadmap.rb
-END
 20091220183727_add_index_to_settings_name.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -135,11 +153,11 @@
 V 71
 /svn/!svn/ver/1814/trunk/db/migrate/096_add_commit_access_permission.rb
 END
-20090401221305_update_enumerations_to_sti.rb
+024_add_roadmap_permission.rb
 K 25
 svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/2777/trunk/db/migrate/20090401221305_update_enumerations_to_sti.rb
+V 64
+/svn/!svn/ver/674/trunk/db/migrate/024_add_roadmap_permission.rb
 END
 091_change_changesets_revision_to_string.rb
 K 25
@@ -147,11 +165,11 @@
 V 79
 /svn/!svn/ver/1236/trunk/db/migrate/091_change_changesets_revision_to_string.rb
 END
-024_add_roadmap_permission.rb
+20090401221305_update_enumerations_to_sti.rb
 K 25
 svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/674/trunk/db/migrate/024_add_roadmap_permission.rb
+V 80
+/svn/!svn/ver/2777/trunk/db/migrate/20090401221305_update_enumerations_to_sti.rb
 END
 20091017214720_add_missing_indexes_to_wiki_redirects.rb
 K 25
@@ -159,17 +177,23 @@
 V 91
 /svn/!svn/ver/2928/trunk/db/migrate/20091017214720_add_missing_indexes_to_wiki_redirects.rb
 END
+034_create_changesets.rb
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/479/trunk/db/migrate/034_create_changesets.rb
+END
 072_add_enumerations_position.rb
 K 25
 svn:wc:ra_dav:version-url
 V 68
 /svn/!svn/ver/1623/trunk/db/migrate/072_add_enumerations_position.rb
 END
-034_create_changesets.rb
+108_add_identity_url_to_users.rb
 K 25
 svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/479/trunk/db/migrate/034_create_changesets.rb
+V 68
+/svn/!svn/ver/2440/trunk/db/migrate/108_add_identity_url_to_users.rb
 END
 20090614091200_fix_messages_sticky_null.rb
 K 25
@@ -177,12 +201,6 @@
 V 78
 /svn/!svn/ver/2787/trunk/db/migrate/20090614091200_fix_messages_sticky_null.rb
 END
-108_add_identity_url_to_users.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/2440/trunk/db/migrate/108_add_identity_url_to_users.rb
-END
 20091220184736_add_indexes_to_issue_status.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -381,11 +399,11 @@
 V 59
 /svn/!svn/ver/864/trunk/db/migrate/020_add_role_position.rb
 END
-001_setup.rb
+20091010093521_fix_users_custom_values.rb
 K 25
 svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/1764/trunk/db/migrate/001_setup.rb
+V 77
+/svn/!svn/ver/2905/trunk/db/migrate/20091010093521_fix_users_custom_values.rb
 END
 016_add_repositories_permissions.rb
 K 25
@@ -393,11 +411,17 @@
 V 70
 /svn/!svn/ver/674/trunk/db/migrate/016_add_repositories_permissions.rb
 END
-20091010093521_fix_users_custom_values.rb
+001_setup.rb
 K 25
 svn:wc:ra_dav:version-url
-V 77
-/svn/!svn/ver/2905/trunk/db/migrate/20091010093521_fix_users_custom_values.rb
+V 48
+/svn/!svn/ver/1764/trunk/db/migrate/001_setup.rb
+END
+20100129193813_update_mail_notification_values.rb
+K 25
+svn:wc:ra_dav:version-url
+V 85
+/svn/!svn/ver/4368/trunk/db/migrate/20100129193813_update_mail_notification_values.rb
 END
 20091017214611_add_missing_indexes_to_journals.rb
 K 25
@@ -405,23 +429,23 @@
 V 85
 /svn/!svn/ver/2928/trunk/db/migrate/20091017214611_add_missing_indexes_to_journals.rb
 END
+20091017214107_add_missing_indexes_to_custom_fields.rb
+K 25
+svn:wc:ra_dav:version-url
+V 90
+/svn/!svn/ver/2928/trunk/db/migrate/20091017214107_add_missing_indexes_to_custom_fields.rb
+END
 041_rename_comment_to_comments.rb
 K 25
 svn:wc:ra_dav:version-url
 V 68
 /svn/!svn/ver/482/trunk/db/migrate/041_rename_comment_to_comments.rb
 END
-20091017214107_add_missing_indexes_to_custom_fields.rb
+20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
 K 25
 svn:wc:ra_dav:version-url
-V 90
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214107_add_missing_indexes_to_custom_fields.rb
-END
-089_add_attachments_description.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/1180/trunk/db/migrate/089_add_attachments_description.rb
+V 99
+/svn/!svn/ver/2928/trunk/db/migrate/20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
 END
 067_create_wiki_redirects.rb
 K 25
@@ -429,11 +453,11 @@
 V 63
 /svn/!svn/ver/720/trunk/db/migrate/067_create_wiki_redirects.rb
 END
-20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
+089_add_attachments_description.rb
 K 25
 svn:wc:ra_dav:version-url
-V 99
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
+V 70
+/svn/!svn/ver/1180/trunk/db/migrate/089_add_attachments_description.rb
 END
 103_set_custom_fields_editable.rb
 K 25
@@ -447,17 +471,23 @@
 V 73
 /svn/!svn/ver/1457/trunk/db/migrate/094_change_projects_homepage_limit.rb
 END
+039_create_watchers.rb
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/454/trunk/db/migrate/039_create_watchers.rb
+END
 093_add_wiki_pages_protected.rb
 K 25
 svn:wc:ra_dav:version-url
 V 67
 /svn/!svn/ver/1415/trunk/db/migrate/093_add_wiki_pages_protected.rb
 END
-039_create_watchers.rb
+060_change_changesets_committer_limit.rb
 K 25
 svn:wc:ra_dav:version-url
-V 57
-/svn/!svn/ver/454/trunk/db/migrate/039_create_watchers.rb
+V 76
+/svn/!svn/ver/1222/trunk/db/migrate/060_change_changesets_committer_limit.rb
 END
 083_add_messages_sticky.rb
 K 25
@@ -465,12 +495,6 @@
 V 61
 /svn/!svn/ver/926/trunk/db/migrate/083_add_messages_sticky.rb
 END
-060_change_changesets_committer_limit.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/1222/trunk/db/migrate/060_change_changesets_committer_limit.rb
-END
 069_add_issues_estimated_hours.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -483,6 +507,12 @@
 V 54
 /svn/!svn/ver/323/trunk/db/migrate/027_create_wikis.rb
 END
+20101104182107_add_unique_index_on_members.rb
+K 25
+svn:wc:ra_dav:version-url
+V 81
+/svn/!svn/ver/4370/trunk/db/migrate/20101104182107_add_unique_index_on_members.rb
+END
 20100313132032_add_issues_nested_sets_columns.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -531,18 +561,18 @@
 V 87
 /svn/!svn/ver/1938/trunk/db/migrate/099_add_delete_wiki_pages_attachments_permission.rb
 END
+059_add_roles_assignable.rb
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/649/trunk/db/migrate/059_add_roles_assignable.rb
+END
 098_set_topic_authors_as_watchers.rb
 K 25
 svn:wc:ra_dav:version-url
 V 72
 /svn/!svn/ver/2415/trunk/db/migrate/098_set_topic_authors_as_watchers.rb
 END
-059_add_roles_assignable.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/649/trunk/db/migrate/059_add_roles_assignable.rb
-END
 013_create_queries.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -555,18 +585,18 @@
 V 74
 /svn/!svn/ver/674/trunk/db/migrate/049_add_wiki_destroy_page_permission.rb
 END
+048_allow_null_version_effective_date.rb
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/1140/trunk/db/migrate/048_allow_null_version_effective_date.rb
+END
 040_create_changesets_issues.rb
 K 25
 svn:wc:ra_dav:version-url
 V 66
 /svn/!svn/ver/473/trunk/db/migrate/040_create_changesets_issues.rb
 END
-048_allow_null_version_effective_date.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/1140/trunk/db/migrate/048_allow_null_version_effective_date.rb
-END
 085_add_role_tracker_old_status_index_to_workflows.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -597,23 +627,23 @@
 V 85
 /svn/!svn/ver/2466/trunk/db/migrate/20090214190337_add_watchers_user_id_type_index.rb
 END
+054_add_changesets_scmid.rb
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/559/trunk/db/migrate/054_add_changesets_scmid.rb
+END
 20091017212457_add_missing_indexes_to_custom_fields_projects.rb
 K 25
 svn:wc:ra_dav:version-url
 V 99
 /svn/!svn/ver/2928/trunk/db/migrate/20091017212457_add_missing_indexes_to_custom_fields_projects.rb
 END
-054_add_changesets_scmid.rb
+20091017213716_add_missing_indexes_to_member_roles.rb
 K 25
 svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/559/trunk/db/migrate/054_add_changesets_scmid.rb
-END
-097_add_view_wiki_edits_permission.rb
-K 25
-svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/1896/trunk/db/migrate/097_add_view_wiki_edits_permission.rb
+V 89
+/svn/!svn/ver/2928/trunk/db/migrate/20091017213716_add_missing_indexes_to_member_roles.rb
 END
 065_add_settings_updated_on.rb
 K 25
@@ -621,11 +651,11 @@
 V 65
 /svn/!svn/ver/685/trunk/db/migrate/065_add_settings_updated_on.rb
 END
-20091017213716_add_missing_indexes_to_member_roles.rb
+097_add_view_wiki_edits_permission.rb
 K 25
 svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213716_add_missing_indexes_to_member_roles.rb
+V 73
+/svn/!svn/ver/1896/trunk/db/migrate/097_add_view_wiki_edits_permission.rb
 END
 20091108092559_add_versions_status.rb
 K 25
@@ -651,17 +681,23 @@
 V 73
 /svn/!svn/ver/2869/trunk/db/migrate/20090704172350_populate_users_type.rb
 END
+052_add_changes_revision.rb
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/559/trunk/db/migrate/052_add_changes_revision.rb
+END
 20090503121505_populate_member_roles.rb
 K 25
 svn:wc:ra_dav:version-url
 V 75
 /svn/!svn/ver/2729/trunk/db/migrate/20090503121505_populate_member_roles.rb
 END
-052_add_changes_revision.rb
+062_insert_builtin_roles.rb
 K 25
 svn:wc:ra_dav:version-url
 V 62
-/svn/!svn/ver/559/trunk/db/migrate/052_add_changes_revision.rb
+/svn/!svn/ver/674/trunk/db/migrate/062_insert_builtin_roles.rb
 END
 050_add_wiki_attachments_permissions.rb
 K 25
@@ -669,11 +705,11 @@
 V 74
 /svn/!svn/ver/674/trunk/db/migrate/050_add_wiki_attachments_permissions.rb
 END
-062_insert_builtin_roles.rb
+074_add_auth_sources_tls.rb
 K 25
 svn:wc:ra_dav:version-url
 V 62
-/svn/!svn/ver/674/trunk/db/migrate/062_insert_builtin_roles.rb
+/svn/!svn/ver/845/trunk/db/migrate/074_add_auth_sources_tls.rb
 END
 104_add_projects_lft_and_rgt.rb
 K 25
@@ -681,11 +717,23 @@
 V 67
 /svn/!svn/ver/2304/trunk/db/migrate/104_add_projects_lft_and_rgt.rb
 END
-074_add_auth_sources_tls.rb
+20091114105931_add_view_issues_permission.rb
 K 25
 svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/845/trunk/db/migrate/074_add_auth_sources_tls.rb
+V 80
+/svn/!svn/ver/3039/trunk/db/migrate/20091114105931_add_view_issues_permission.rb
+END
+20091017214336_add_missing_indexes_to_users.rb
+K 25
+svn:wc:ra_dav:version-url
+V 82
+/svn/!svn/ver/2928/trunk/db/migrate/20091017214336_add_missing_indexes_to_users.rb
+END
+20091017213113_add_missing_indexes_to_enumerations.rb
+K 25
+svn:wc:ra_dav:version-url
+V 89
+/svn/!svn/ver/2928/trunk/db/migrate/20091017213113_add_missing_indexes_to_enumerations.rb
 END
 082_add_messages_locked.rb
 K 25
@@ -693,23 +741,11 @@
 V 61
 /svn/!svn/ver/926/trunk/db/migrate/082_add_messages_locked.rb
 END
-20091017213113_add_missing_indexes_to_enumerations.rb
+20091017213444_add_missing_indexes_to_tokens.rb
 K 25
 svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213113_add_missing_indexes_to_enumerations.rb
-END
-20091017214336_add_missing_indexes_to_users.rb
-K 25
-svn:wc:ra_dav:version-url
-V 82
-/svn/!svn/ver/2928/trunk/db/migrate/20091017214336_add_missing_indexes_to_users.rb
-END
-20091114105931_add_view_issues_permission.rb
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/3039/trunk/db/migrate/20091114105931_add_view_issues_permission.rb
+V 83
+/svn/!svn/ver/2928/trunk/db/migrate/20091017213444_add_missing_indexes_to_tokens.rb
 END
 20090503121501_create_member_roles.rb
 K 25
@@ -717,11 +753,11 @@
 V 73
 /svn/!svn/ver/2726/trunk/db/migrate/20090503121501_create_member_roles.rb
 END
-20091017213444_add_missing_indexes_to_tokens.rb
+057_add_versions_wiki_page_title.rb
 K 25
 svn:wc:ra_dav:version-url
-V 83
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213444_add_missing_indexes_to_tokens.rb
+V 70
+/svn/!svn/ver/564/trunk/db/migrate/057_add_versions_wiki_page_title.rb
 END
 20090323224724_add_type_to_enumerations.rb
 K 25
@@ -729,12 +765,6 @@
 V 78
 /svn/!svn/ver/2777/trunk/db/migrate/20090323224724_add_type_to_enumerations.rb
 END
-057_add_versions_wiki_page_title.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/564/trunk/db/migrate/057_add_versions_wiki_page_title.rb
-END
 004_export_pdf.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -813,6 +843,12 @@
 V 86
 /svn/!svn/ver/2928/trunk/db/migrate/20091017212227_add_missing_indexes_to_workflows.rb
 END
+20101114115114_change_projects_name_limit.rb
+K 25
+svn:wc:ra_dav:version-url
+V 80
+/svn/!svn/ver/4402/trunk/db/migrate/20101114115114_change_projects_name_limit.rb
+END
 20090406161854_add_parent_id_to_enumerations.rb
 K 25
 svn:wc:ra_dav:version-url
--- a/db/migrate/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/db/migrate/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/db/migrate
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-22T18:42:00.112555Z
-4013
-edavis10
+2010-11-14T12:33:14.198318Z
+4402
+jplang
 
 
 
@@ -26,6 +26,40 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+20101107130441_add_custom_fields_visible.rb
+file
+
+
+
+
+2010-11-19T13:04:50.884918Z
+21dc29619a0cfd0f3aa12d77cc5cb132
+2010-11-07T14:17:35.749175Z
+4383
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+307
+
 077_remove_issue_statuses_html_color.rb
 file
 
@@ -366,6 +400,40 @@
 
 383
 
+20101114115359_change_projects_identifier_limit.rb
+file
+
+
+
+
+2010-11-19T13:04:50.884918Z
+be338f41292d95bb7ba3caa125999de0
+2010-11-14T12:33:14.198318Z
+4402
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+238
+
 080_add_users_type.rb
 file
 
@@ -468,6 +536,40 @@
 
 1053
 
+20100129193402_change_users_mail_notification_to_string.rb
+file
+
+
+
+
+2010-11-19T13:04:50.888959Z
+7a99a8db186dc5ae3903ff470808fbd8
+2010-09-28T18:22:00.231301Z
+4216
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+290
+
 008_create_user_preferences.rb
 file
 
@@ -502,6 +604,40 @@
 
 281
 
+025_add_search_permission.rb
+file
+
+
+
+
+2010-09-23T14:37:44.883725Z
+42937036f9c414f7d9b028f629b1ce20
+2007-08-29T16:52:35.680643Z
+674
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+412
+
 023_add_tracker_is_in_roadmap.rb
 file
 
@@ -536,40 +672,6 @@
 
 230
 
-025_add_search_permission.rb
-file
-
-
-
-
-2010-09-23T14:37:44.883725Z
-42937036f9c414f7d9b028f629b1ce20
-2007-08-29T16:52:35.680643Z
-674
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-412
-
 20091220183727_add_index_to_settings_name.rb
 file
 
@@ -774,39 +876,39 @@
 
 321
 
-20090401221305_update_enumerations_to_sti.rb
-file
-
-
-
-
-2010-09-23T14:37:44.915753Z
-d343c3ba8f04d1cc71f20c9860d5907b
-2009-05-30T23:30:36.923541Z
-2777
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-329
+024_add_roadmap_permission.rb
+file
+
+
+
+
+2010-09-23T14:37:44.883725Z
+f1b96e04888c0a48bf29dd0556ba8027
+2007-08-29T16:52:35.680643Z
+674
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+445
 
 091_change_changesets_revision_to_string.rb
 file
@@ -842,39 +944,39 @@
 
 245
 
-024_add_roadmap_permission.rb
-file
-
-
-
-
-2010-09-23T14:37:44.883725Z
-f1b96e04888c0a48bf29dd0556ba8027
-2007-08-29T16:52:35.680643Z
-674
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-445
+20090401221305_update_enumerations_to_sti.rb
+file
+
+
+
+
+2010-09-23T14:37:44.915753Z
+d343c3ba8f04d1cc71f20c9860d5907b
+2009-05-30T23:30:36.923541Z
+2777
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+329
 
 20091017214720_add_missing_indexes_to_wiki_redirects.rb
 file
@@ -910,6 +1012,40 @@
 
 195
 
+034_create_changesets.rb
+file
+
+
+
+
+2010-09-23T14:37:44.883725Z
+82595f307b6fe5053151a681b737f063
+2007-04-25T15:06:20.062636Z
+479
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+515
+
 072_add_enumerations_position.rb
 file
 
@@ -944,39 +1080,39 @@
 
 495
 
-034_create_changesets.rb
-file
-
-
-
-
-2010-09-23T14:37:44.883725Z
-82595f307b6fe5053151a681b737f063
-2007-04-25T15:06:20.062636Z
-479
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-515
+108_add_identity_url_to_users.rb
+file
+
+
+
+
+2010-09-23T14:37:44.915753Z
+b175e6c85c5faf4b5d2f092f65338b10
+2009-02-11T19:06:55.627694Z
+2440
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+187
 
 20090614091200_fix_messages_sticky_null.rb
 file
@@ -1012,40 +1148,6 @@
 
 176
 
-108_add_identity_url_to_users.rb
-file
-
-
-
-
-2010-09-23T14:37:44.915753Z
-b175e6c85c5faf4b5d2f092f65338b10
-2009-02-11T19:06:55.627694Z
-2440
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-187
-
 20091220184736_add_indexes_to_issue_status.rb
 file
 
@@ -2168,16 +2270,16 @@
 
 275
 
-001_setup.rb
-file
-
-
-
-
-2010-09-23T14:37:44.875728Z
-b740a77ff87e6390f7ad86eaf0710040
-2008-08-25T16:35:20.899166Z
-1764
+016_add_repositories_permissions.rb
+file
+
+
+
+
+2010-09-23T14:37:44.879727Z
+e770aa6387bb4737804d5024e743cd25
+2007-08-29T16:52:35.680643Z
+674
 jplang
 
 
@@ -2200,7 +2302,7 @@
 
 
 
-18072
+1658
 
 20091010093521_fix_users_custom_values.rb
 file
@@ -2236,16 +2338,16 @@
 
 276
 
-016_add_repositories_permissions.rb
-file
-
-
-
-
-2010-09-23T14:37:44.879727Z
-e770aa6387bb4737804d5024e743cd25
-2007-08-29T16:52:35.680643Z
-674
+001_setup.rb
+file
+
+
+
+
+2010-09-23T14:37:44.875728Z
+b740a77ff87e6390f7ad86eaf0710040
+2008-08-25T16:35:20.899166Z
+1764
 jplang
 
 
@@ -2268,7 +2370,41 @@
 
 
 
-1658
+18072
+
+20100129193813_update_mail_notification_values.rb
+file
+
+
+
+
+2010-11-19T13:04:50.888959Z
+d584696f16d190556dd796ab71ebe6f8
+2010-11-06T10:57:56.438344Z
+4368
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+583
 
 20091017214611_add_missing_indexes_to_journals.rb
 file
@@ -2304,6 +2440,40 @@
 
 263
 
+20091017214107_add_missing_indexes_to_custom_fields.rb
+file
+
+
+
+
+2010-09-23T14:37:44.923753Z
+0e1e45e51997617f8672e6d0d5ed8e51
+2009-10-17T22:23:29.892475Z
+2928
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+211
+
 041_rename_comment_to_comments.rb
 file
 
@@ -2338,14 +2508,14 @@
 
 896
 
-20091017214107_add_missing_indexes_to_custom_fields.rb
-file
-
-
-
-
-2010-09-23T14:37:44.923753Z
-0e1e45e51997617f8672e6d0d5ed8e51
+20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
+file
+
+
+
+
+2010-09-23T14:37:44.927757Z
+871a600c06a6965f52c63177a82fbe15
 2009-10-17T22:23:29.892475Z
 2928
 edavis10
@@ -2370,7 +2540,41 @@
 
 
 
-211
+275
+
+067_create_wiki_redirects.rb
+file
+
+
+
+
+2010-09-23T14:37:44.891758Z
+31acec69fd7efa0c26dec61f860b0c85
+2007-09-09T17:05:38.846724Z
+720
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+441
 
 089_add_attachments_description.rb
 file
@@ -2406,74 +2610,6 @@
 
 201
 
-067_create_wiki_redirects.rb
-file
-
-
-
-
-2010-09-23T14:37:44.891758Z
-31acec69fd7efa0c26dec61f860b0c85
-2007-09-09T17:05:38.846724Z
-720
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-441
-
-20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
-file
-
-
-
-
-2010-09-23T14:37:44.927757Z
-871a600c06a6965f52c63177a82fbe15
-2009-10-17T22:23:29.892475Z
-2928
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-275
-
 103_set_custom_fields_editable.rb
 file
 
@@ -2542,6 +2678,40 @@
 
 264
 
+039_create_watchers.rb
+file
+
+
+
+
+2010-09-23T14:37:44.887754Z
+07bf6636d0acf3ec84b38648bbe2c07a
+2007-04-21T12:09:07.794422Z
+454
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+337
+
 093_add_wiki_pages_protected.rb
 file
 
@@ -2576,16 +2746,16 @@
 
 227
 
-039_create_watchers.rb
-file
-
-
-
-
-2010-09-23T14:37:44.887754Z
-07bf6636d0acf3ec84b38648bbe2c07a
-2007-04-21T12:09:07.794422Z
-454
+060_change_changesets_committer_limit.rb
+file
+
+
+
+
+2010-09-23T14:37:44.891758Z
+0abbef63f1f391688df012906a94877b
+2008-03-09T18:25:37.323226Z
+1222
 jplang
 
 
@@ -2608,7 +2778,7 @@
 
 
 
-337
+241
 
 083_add_messages_sticky.rb
 file
@@ -2644,40 +2814,6 @@
 
 193
 
-060_change_changesets_committer_limit.rb
-file
-
-
-
-
-2010-09-23T14:37:44.891758Z
-0abbef63f1f391688df012906a94877b
-2008-03-09T18:25:37.323226Z
-1222
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-241
-
 069_add_issues_estimated_hours.rb
 file
 
@@ -2746,6 +2882,40 @@
 
 403
 
+20101104182107_add_unique_index_on_members.rb
+file
+
+
+
+
+2010-11-19T13:04:50.888959Z
+c682cee6b57ef16a410b2253213f9864
+2010-11-06T11:49:45.617666Z
+4370
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+898
+
 20100313132032_add_issues_nested_sets_columns.rb
 file
 
@@ -3018,6 +3188,40 @@
 
 339
 
+059_add_roles_assignable.rb
+file
+
+
+
+
+2010-09-23T14:37:44.891758Z
+aa67262417630fc088eb57df8d2dd9d3
+2007-08-16T17:47:41.639068Z
+649
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+199
+
 098_set_topic_authors_as_watchers.rb
 file
 
@@ -3052,40 +3256,6 @@
 
 749
 
-059_add_roles_assignable.rb
-file
-
-
-
-
-2010-09-23T14:37:44.891758Z
-aa67262417630fc088eb57df8d2dd9d3
-2007-08-16T17:47:41.639068Z
-649
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-199
-
 013_create_queries.rb
 file
 
@@ -3154,6 +3324,40 @@
 
 418
 
+048_allow_null_version_effective_date.rb
+file
+
+
+
+
+2010-09-23T14:37:44.887754Z
+a7d8c7f023a76a8dbb0d0950797c08f8
+2008-02-12T21:11:16.312726Z
+1140
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+225
+
 040_create_changesets_issues.rb
 file
 
@@ -3188,40 +3392,6 @@
 
 418
 
-048_allow_null_version_effective_date.rb
-file
-
-
-
-
-2010-09-23T14:37:44.887754Z
-a7d8c7f023a76a8dbb0d0950797c08f8
-2008-02-12T21:11:16.312726Z
-1140
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-225
-
 085_add_role_tracker_old_status_index_to_workflows.rb
 file
 
@@ -3392,6 +3562,40 @@
 
 252
 
+054_add_changesets_scmid.rb
+file
+
+
+
+
+2010-09-23T14:37:44.891758Z
+b61285ac64245c1571e536a8c7e05a94
+2007-06-12T20:12:05.590809Z
+559
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+180
+
 20091017212457_add_missing_indexes_to_custom_fields_projects.rb
 file
 
@@ -3426,39 +3630,73 @@
 
 275
 
-054_add_changesets_scmid.rb
+20091017213716_add_missing_indexes_to_member_roles.rb
+file
+
+
+
+
+2010-09-23T14:37:44.923753Z
+4bfd0623186217eee4346313f148ea7a
+2009-10-17T22:23:29.892475Z
+2928
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+272
+
+065_add_settings_updated_on.rb
 file
 
 
 
 
 2010-09-23T14:37:44.891758Z
-b61285ac64245c1571e536a8c7e05a94
-2007-06-12T20:12:05.590809Z
-559
+708c039fe82ad86e9930122cac4757b1
+2007-08-31T17:45:32.784580Z
+685
 jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-180
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+248
 
 097_add_view_wiki_edits_permission.rb
 file
@@ -3494,74 +3732,6 @@
 
 298
 
-065_add_settings_updated_on.rb
-file
-
-
-
-
-2010-09-23T14:37:44.891758Z
-708c039fe82ad86e9930122cac4757b1
-2007-08-31T17:45:32.784580Z
-685
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-248
-
-20091017213716_add_missing_indexes_to_member_roles.rb
-file
-
-
-
-
-2010-09-23T14:37:44.923753Z
-4bfd0623186217eee4346313f148ea7a
-2009-10-17T22:23:29.892475Z
-2928
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-272
-
 20091108092559_add_versions_status.rb
 file
 
@@ -3698,6 +3868,40 @@
 
 155
 
+052_add_changes_revision.rb
+file
+
+
+
+
+2010-09-23T14:37:44.887754Z
+3af07746c4eab3a1716744971ac26ffc
+2007-06-12T20:12:05.590809Z
+559
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+180
+
 20090503121505_populate_member_roles.rb
 file
 
@@ -3732,74 +3936,6 @@
 
 276
 
-052_add_changes_revision.rb
-file
-
-
-
-
-2010-09-23T14:37:44.887754Z
-3af07746c4eab3a1716744971ac26ffc
-2007-06-12T20:12:05.590809Z
-559
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-180
-
-050_add_wiki_attachments_permissions.rb
-file
-
-
-
-
-2010-09-23T14:37:44.887754Z
-67d6e1898c150c8df560cb2ce8a2f2d7
-2007-08-29T16:52:35.680643Z
-674
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-718
-
 062_insert_builtin_roles.rb
 file
 
@@ -3834,6 +3970,74 @@
 
 403
 
+050_add_wiki_attachments_permissions.rb
+file
+
+
+
+
+2010-09-23T14:37:44.887754Z
+67d6e1898c150c8df560cb2ce8a2f2d7
+2007-08-29T16:52:35.680643Z
+674
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+718
+
+074_add_auth_sources_tls.rb
+file
+
+
+
+
+2010-09-23T14:37:44.895727Z
+e7e163729c56cd9807450574d2beeda8
+2007-10-16T19:19:10.481742Z
+845
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+215
+
 104_add_projects_lft_and_rgt.rb
 file
 
@@ -3868,16 +4072,16 @@
 
 250
 
-074_add_auth_sources_tls.rb
-file
-
-
-
-
-2010-09-23T14:37:44.895727Z
-e7e163729c56cd9807450574d2beeda8
-2007-10-16T19:19:10.481742Z
-845
+20091114105931_add_view_issues_permission.rb
+file
+
+
+
+
+2010-09-23T14:37:44.927757Z
+886411cb32a18ec492acc798194210af
+2009-11-14T12:08:47.175978Z
+3039
 jplang
 has-props
 
@@ -3900,7 +4104,75 @@
 
 
 
-215
+262
+
+20091017214336_add_missing_indexes_to_users.rb
+file
+
+
+
+
+2010-09-23T14:37:44.927757Z
+8251942eb30b7c709ac6e3dc1ab5eedb
+2009-10-17T22:23:29.892475Z
+2928
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+267
+
+20091017213113_add_missing_indexes_to_enumerations.rb
+file
+
+
+
+
+2010-09-23T14:37:44.919754Z
+22e6afc0519b7befbae2c4a4433c20f5
+2009-10-17T22:23:29.892475Z
+2928
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+209
 
 082_add_messages_locked.rb
 file
@@ -3936,14 +4208,14 @@
 
 197
 
-20091017213113_add_missing_indexes_to_enumerations.rb
-file
-
-
-
-
-2010-09-23T14:37:44.919754Z
-22e6afc0519b7befbae2c4a4433c20f5
+20091017213444_add_missing_indexes_to_tokens.rb
+file
+
+
+
+
+2010-09-23T14:37:44.923753Z
+4c220f0316e1b04fa8350f0309698f24
 2009-10-17T22:23:29.892475Z
 2928
 edavis10
@@ -3968,75 +4240,7 @@
 
 
 
-209
-
-20091017214336_add_missing_indexes_to_users.rb
-file
-
-
-
-
-2010-09-23T14:37:44.927757Z
-8251942eb30b7c709ac6e3dc1ab5eedb
-2009-10-17T22:23:29.892475Z
-2928
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-267
-
-20091114105931_add_view_issues_permission.rb
-file
-
-
-
-
-2010-09-23T14:37:44.927757Z
-886411cb32a18ec492acc798194210af
-2009-11-14T12:08:47.175978Z
-3039
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-262
+172
 
 20090503121501_create_member_roles.rb
 file
@@ -4072,39 +4276,39 @@
 
 274
 
-20091017213444_add_missing_indexes_to_tokens.rb
-file
-
-
-
-
-2010-09-23T14:37:44.923753Z
-4c220f0316e1b04fa8350f0309698f24
-2009-10-17T22:23:29.892475Z
-2928
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-172
+057_add_versions_wiki_page_title.rb
+file
+
+
+
+
+2010-09-23T14:37:44.891758Z
+6a4944f1162c00f2405200fb38773886
+2007-06-14T18:26:27.748707Z
+564
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+202
 
 20090323224724_add_type_to_enumerations.rb
 file
@@ -4140,40 +4344,6 @@
 
 185
 
-057_add_versions_wiki_page_title.rb
-file
-
-
-
-
-2010-09-23T14:37:44.891758Z
-6a4944f1162c00f2405200fb38773886
-2007-06-14T18:26:27.748707Z
-564
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-202
-
 004_export_pdf.rb
 file
 
@@ -4616,6 +4786,40 @@
 
 351
 
+20101114115114_change_projects_name_limit.rb
+file
+
+
+
+
+2010-11-19T13:04:50.888959Z
+0000368c453072e56da62defbc80441e
+2010-11-14T12:33:14.198318Z
+4402
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+284
+
 20090406161854_add_parent_id_to_enumerations.rb
 file
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20100129193402_change_users_mail_notification_to_string.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,9 @@
+class ChangeUsersMailNotificationToString < ActiveRecord::Migration
+  def self.up
+    change_column :users, :mail_notification, :string, :default => '', :null => false
+  end
+
+  def self.down
+    change_column :users, :mail_notification, :boolean, :default => true, :null => false
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20100129193813_update_mail_notification_values.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,12 @@
+# Patch the data from a boolean change.
+class UpdateMailNotificationValues < ActiveRecord::Migration
+  def self.up
+    User.update_all("mail_notification = 'all'", "mail_notification IN ('1', 't')")
+    User.update_all("mail_notification = 'selected'", "EXISTS (SELECT 1 FROM #{Member.table_name} WHERE #{Member.table_name}.mail_notification = #{connection.quoted_true} AND #{Member.table_name}.user_id = #{User.table_name}.id)")
+    User.update_all("mail_notification = 'only_my_events'", "mail_notification NOT IN ('all', 'selected')")
+  end
+
+  def self.down
+    # No-op
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20101104182107_add_unique_index_on_members.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,21 @@
+class AddUniqueIndexOnMembers < ActiveRecord::Migration
+  def self.up
+    # Clean and reassign MemberRole rows if needed
+    MemberRole.delete_all("member_id NOT IN (SELECT id FROM #{Member.table_name})")
+    MemberRole.update_all("member_id =" +
+      " (SELECT min(m2.id) FROM #{Member.table_name} m1, #{Member.table_name} m2" +
+      " WHERE m1.user_id = m2.user_id AND m1.project_id = m2.project_id" +
+      " AND m1.id = #{MemberRole.table_name}.member_id)")
+    # Remove duplicates
+    Member.connection.select_values("SELECT m.id FROM #{Member.table_name} m" +
+      " WHERE m.id > (SELECT min(m1.id) FROM #{Member.table_name} m1 WHERE m1.user_id = m.user_id AND m1.project_id = m.project_id)").each do |i|
+        Member.delete_all(["id = ?", i])
+      end
+    
+    # Then add a unique index
+    add_index :members, [:user_id, :project_id], :unique => true
+  end
+
+  def self.down
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20101107130441_add_custom_fields_visible.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,10 @@
+class AddCustomFieldsVisible < ActiveRecord::Migration
+  def self.up
+    add_column :custom_fields, :visible, :boolean, :null => false, :default => true
+    CustomField.update_all("visible = #{CustomField.connection.quoted_true}")
+  end
+
+  def self.down
+    remove_column :custom_fields, :visible
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20101114115114_change_projects_name_limit.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,9 @@
+class ChangeProjectsNameLimit < ActiveRecord::Migration
+  def self.up
+    change_column :projects, :name, :string, :limit => nil, :default => '', :null => false
+  end
+
+  def self.down
+    change_column :projects, :name, :string, :limit => 30, :default => '', :null => false
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20101114115359_change_projects_identifier_limit.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,9 @@
+class ChangeProjectsIdentifierLimit < ActiveRecord::Migration
+  def self.up
+    change_column :projects, :identifier, :string, :limit => nil
+  end
+
+  def self.down
+    change_column :projects, :identifier, :string, :limit => 20
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20100129193402_change_users_mail_notification_to_string.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,9 @@
+class ChangeUsersMailNotificationToString < ActiveRecord::Migration
+  def self.up
+    change_column :users, :mail_notification, :string, :default => '', :null => false
+  end
+
+  def self.down
+    change_column :users, :mail_notification, :boolean, :default => true, :null => false
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20100129193813_update_mail_notification_values.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,12 @@
+# Patch the data from a boolean change.
+class UpdateMailNotificationValues < ActiveRecord::Migration
+  def self.up
+    User.update_all("mail_notification = 'all'", "mail_notification IN ('1', 't')")
+    User.update_all("mail_notification = 'selected'", "EXISTS (SELECT 1 FROM #{Member.table_name} WHERE #{Member.table_name}.mail_notification = #{connection.quoted_true} AND #{Member.table_name}.user_id = #{User.table_name}.id)")
+    User.update_all("mail_notification = 'only_my_events'", "mail_notification NOT IN ('all', 'selected')")
+  end
+
+  def self.down
+    # No-op
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20101104182107_add_unique_index_on_members.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,21 @@
+class AddUniqueIndexOnMembers < ActiveRecord::Migration
+  def self.up
+    # Clean and reassign MemberRole rows if needed
+    MemberRole.delete_all("member_id NOT IN (SELECT id FROM #{Member.table_name})")
+    MemberRole.update_all("member_id =" +
+      " (SELECT min(m2.id) FROM #{Member.table_name} m1, #{Member.table_name} m2" +
+      " WHERE m1.user_id = m2.user_id AND m1.project_id = m2.project_id" +
+      " AND m1.id = #{MemberRole.table_name}.member_id)")
+    # Remove duplicates
+    Member.connection.select_values("SELECT m.id FROM #{Member.table_name} m" +
+      " WHERE m.id > (SELECT min(m1.id) FROM #{Member.table_name} m1 WHERE m1.user_id = m.user_id AND m1.project_id = m.project_id)").each do |i|
+        Member.delete_all(["id = ?", i])
+      end
+    
+    # Then add a unique index
+    add_index :members, [:user_id, :project_id], :unique => true
+  end
+
+  def self.down
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20101107130441_add_custom_fields_visible.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,10 @@
+class AddCustomFieldsVisible < ActiveRecord::Migration
+  def self.up
+    add_column :custom_fields, :visible, :boolean, :null => false, :default => true
+    CustomField.update_all("visible = #{CustomField.connection.quoted_true}")
+  end
+
+  def self.down
+    remove_column :custom_fields, :visible
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20101114115114_change_projects_name_limit.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,9 @@
+class ChangeProjectsNameLimit < ActiveRecord::Migration
+  def self.up
+    change_column :projects, :name, :string, :limit => nil, :default => '', :null => false
+  end
+
+  def self.down
+    change_column :projects, :name, :string, :limit => 30, :default => '', :null => false
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20101114115359_change_projects_identifier_limit.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,9 @@
+class ChangeProjectsIdentifierLimit < ActiveRecord::Migration
+  def self.up
+    change_column :projects, :identifier, :string, :limit => nil
+  end
+
+  def self.down
+    change_column :projects, :identifier, :string, :limit => 20
+  end
+end
--- a/doc/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/doc/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 28
-/svn/!svn/ver/4029/trunk/doc
+/svn/!svn/ver/4348/trunk/doc
 END
 UPGRADING
 K 25
@@ -31,7 +31,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 38
-/svn/!svn/ver/4029/trunk/doc/CHANGELOG
+/svn/!svn/ver/4348/trunk/doc/CHANGELOG
 END
 COPYING
 K 25
@@ -39,3 +39,9 @@
 V 35
 /svn/!svn/ver/883/trunk/doc/COPYING
 END
+git.rdoc
+K 25
+svn:wc:ra_dav:version-url
+V 37
+/svn/!svn/ver/4273/trunk/doc/git.rdoc
+END
--- a/doc/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/doc/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/doc
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-22T21:17:44.394587Z
-4029
+2010-11-01T00:37:14.867836Z
+4348
 edavis10
 
 
@@ -168,10 +168,10 @@
 
 
 
-2010-09-23T14:37:44.935786Z
-0310fe2cda3332d05e3275320e73407f
-2010-08-22T21:17:44.394587Z
-4029
+2010-11-19T13:04:51.228963Z
+c17df05456a8e8f311c61ea7825fe2aa
+2010-11-01T00:37:14.867836Z
+4348
 edavis10
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-73025
+77969
 
 COPYING
 file
@@ -230,3 +230,37 @@
 
 17987
 
+git.rdoc
+file
+
+
+
+
+2010-11-19T13:04:51.228963Z
+cc77650493d11d18eabb058fbdf7ac24
+2010-10-22T17:18:11.628381Z
+4273
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2248
+
--- a/doc/.svn/text-base/CHANGELOG.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/doc/.svn/text-base/CHANGELOG.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -4,6 +4,100 @@
 Copyright (C) 2006-2010  Jean-Philippe Lang
 http://www.redmine.org/
 
+== 2010-10-31 v1.0.3
+
+* #4065: Redmine.pm doesn't work with LDAPS and a non-standard port
+* #4416: Link from version details page to edit the wiki.
+* #5484: Add new issue as subtask to an existing ticket
+* #5948: Update help/wiki_syntax_detailed.html with more link options
+* #6494: Typo in pt_BR translation for 1.0.2
+* #6508: Japanese translation update
+* #6509: Localization pt-PT (new strings)
+* #6511: Rake task to test email
+* #6525: Traditional Chinese language file (to r4225)
+* #6536: Patch for swedish translation
+* #6548: Rake tasks to add/remove i18n strings
+* #6569: Updated Hebrew translation
+* #6570: Japanese Translation for r4231
+* #6596: pt-BR translation updates
+* #6629: Change field-name of issues start date
+* #6669: Bulgarian translation
+* #6731: Macedonian translation fix
+* #6732: Japanese Translation for r4287
+* #6735: Add user-agent to reposman
+* #6736: Traditional Chinese language file (to r4288)
+* #6739: Swedish Translation for r4288
+* #6765: Traditional Chinese language file (to r4302)
+* Fixed #5324: Git not working if color.ui is enabled
+* Fixed #5652: Bad URL parsing in the wiki when it ends with right-angle-bracket(greater-than mark).
+* Fixed #5803: Precedes/Follows Relationships Broke
+* Fixed #6435: Links to wikipages bound to versions do not respect version-sharing in Settings -> Versions
+* Fixed #6438: Autologin cannot be disabled again once it's enabled
+* Fixed #6513: "Move" and "Copy" are not displayed when deployed in subdirectory
+* Fixed #6521: Tooltip/label for user "search-refinment" field on group/project member list
+* Fixed #6563: i18n-issues on calendar view
+* Fixed #6598: Wrong caption for button_create_and_continue in German language file
+* Fixed #6607: Unclear caption for german button_update
+* Fixed #6612: SortHelper missing from CalendarsController
+* Fixed #6740: Max attachment size, incorrect usage of 'KB'
+* Fixed #6750: ActionView::TemplateError (undefined method `empty?' for nil:NilClass) on line #12 of app/views/context_menus/issues.html.erb:
+
+== 2010-09-26 v1.0.2
+
+* #2285: issue-refinement: pressing enter should result to an "apply"
+* #3411: Allow mass status update trough context menu
+* #5929: https-enabled gravatars when called over https
+* #6189: Japanese Translation for r4011
+* #6197: Traditional Chinese language file (to r4036)
+* #6198: Updated german translation
+* #6208: Macedonian translation
+* #6210: Swedish Translation for r4039
+* #6248: nl translation update for r4050
+* #6263: Catalan translation update
+* #6275: After submitting a related issue, the Issue field should be re-focused
+* #6289: Checkboxes in issues list shouldn't be displayed when printing
+* #6290: Make journals theming easier
+* #6291: User#allowed_to? is not tested
+* #6306: Traditional Chinese language file (to r4061)
+* #6307: Korean translation update for 4066(4061)
+* #6316: pt_BR update
+* #6339: SERBIAN Updated
+* #6358: Updated Polish translation
+* #6363: Japanese Translation for r4080
+* #6365: Traditional Chinese language file (to r4081)
+* #6382: Issue PDF export variable usage
+* #6428: Interim solution for i18n >= 0.4
+* #6441: Japanese Translation for r4162
+* #6451: Traditional Chinese language file (to r4167)
+* #6465: Japanese Translation for r4171
+* #6466: Traditional Chinese language file (to r4171)
+* #6490: pt-BR translation for 1.0.2
+* Fixed #3935: stylesheet_link_tag with plugin doesn't take into account relative_url_root
+* Fixed #4998: Global issue list's context menu has enabled options for parent menus but there are no valid selections
+* Fixed #5170: Done ratio can not revert to 0% if status is used for done ratio
+* Fixed #5608: broken with i18n 0.4.0
+* Fixed #6054: Error 500 on filenames with whitespace in git reposities
+* Fixed #6135: Default logger configuration grows without bound.
+* Fixed #6191: Deletion of a main task deletes all subtasks
+* Fixed #6195: Missing move issues between projects
+* Fixed #6242: can't switch between inline and side-by-side diff
+* Fixed #6249: Create and continue returns 404
+* Fixed #6267: changing the authentication mode from ldap to internal with setting the password
+* Fixed #6270: diff coderay malformed in the "news" page
+* Fixed #6278: missing "cant_link_an_issue_with_a_descendant"from locale files
+* Fixed #6333: Create and continue results in a 404 Error
+* Fixed #6346: Age column on repository view is skewed for git, probably CVS too
+* Fixed #6351: Context menu on roadmap broken
+* Fixed #6388: New Subproject leads to a 404
+* Fixed #6392: Updated/Created links to activity broken
+* Fixed #6413: Error in SQL
+* Fixed #6443: Redirect to project settings after Copying a Project
+* Fixed #6448: Saving a wiki page with no content has a translation missing
+* Fixed #6452: Unhandled exception on creating File
+* Fixed #6471: Typo in label_report in Czech translation
+* Fixed #6479: Changing tracker type will lose watchers
+* Fixed #6499: Files with leading or trailing whitespace are not shown in git.
+
 == 2010-08-22 v1.0.1
 
 * #819: Add a body ID and class to all pages
--- a/doc/CHANGELOG	Fri Sep 24 14:06:04 2010 +0100
+++ b/doc/CHANGELOG	Fri Nov 19 13:24:41 2010 +0000
@@ -4,6 +4,100 @@
 Copyright (C) 2006-2010  Jean-Philippe Lang
 http://www.redmine.org/
 
+== 2010-10-31 v1.0.3
+
+* #4065: Redmine.pm doesn't work with LDAPS and a non-standard port
+* #4416: Link from version details page to edit the wiki.
+* #5484: Add new issue as subtask to an existing ticket
+* #5948: Update help/wiki_syntax_detailed.html with more link options
+* #6494: Typo in pt_BR translation for 1.0.2
+* #6508: Japanese translation update
+* #6509: Localization pt-PT (new strings)
+* #6511: Rake task to test email
+* #6525: Traditional Chinese language file (to r4225)
+* #6536: Patch for swedish translation
+* #6548: Rake tasks to add/remove i18n strings
+* #6569: Updated Hebrew translation
+* #6570: Japanese Translation for r4231
+* #6596: pt-BR translation updates
+* #6629: Change field-name of issues start date
+* #6669: Bulgarian translation
+* #6731: Macedonian translation fix
+* #6732: Japanese Translation for r4287
+* #6735: Add user-agent to reposman
+* #6736: Traditional Chinese language file (to r4288)
+* #6739: Swedish Translation for r4288
+* #6765: Traditional Chinese language file (to r4302)
+* Fixed #5324: Git not working if color.ui is enabled
+* Fixed #5652: Bad URL parsing in the wiki when it ends with right-angle-bracket(greater-than mark).
+* Fixed #5803: Precedes/Follows Relationships Broke
+* Fixed #6435: Links to wikipages bound to versions do not respect version-sharing in Settings -> Versions
+* Fixed #6438: Autologin cannot be disabled again once it's enabled
+* Fixed #6513: "Move" and "Copy" are not displayed when deployed in subdirectory
+* Fixed #6521: Tooltip/label for user "search-refinment" field on group/project member list
+* Fixed #6563: i18n-issues on calendar view
+* Fixed #6598: Wrong caption for button_create_and_continue in German language file
+* Fixed #6607: Unclear caption for german button_update
+* Fixed #6612: SortHelper missing from CalendarsController
+* Fixed #6740: Max attachment size, incorrect usage of 'KB'
+* Fixed #6750: ActionView::TemplateError (undefined method `empty?' for nil:NilClass) on line #12 of app/views/context_menus/issues.html.erb:
+
+== 2010-09-26 v1.0.2
+
+* #2285: issue-refinement: pressing enter should result to an "apply"
+* #3411: Allow mass status update trough context menu
+* #5929: https-enabled gravatars when called over https
+* #6189: Japanese Translation for r4011
+* #6197: Traditional Chinese language file (to r4036)
+* #6198: Updated german translation
+* #6208: Macedonian translation
+* #6210: Swedish Translation for r4039
+* #6248: nl translation update for r4050
+* #6263: Catalan translation update
+* #6275: After submitting a related issue, the Issue field should be re-focused
+* #6289: Checkboxes in issues list shouldn't be displayed when printing
+* #6290: Make journals theming easier
+* #6291: User#allowed_to? is not tested
+* #6306: Traditional Chinese language file (to r4061)
+* #6307: Korean translation update for 4066(4061)
+* #6316: pt_BR update
+* #6339: SERBIAN Updated
+* #6358: Updated Polish translation
+* #6363: Japanese Translation for r4080
+* #6365: Traditional Chinese language file (to r4081)
+* #6382: Issue PDF export variable usage
+* #6428: Interim solution for i18n >= 0.4
+* #6441: Japanese Translation for r4162
+* #6451: Traditional Chinese language file (to r4167)
+* #6465: Japanese Translation for r4171
+* #6466: Traditional Chinese language file (to r4171)
+* #6490: pt-BR translation for 1.0.2
+* Fixed #3935: stylesheet_link_tag with plugin doesn't take into account relative_url_root
+* Fixed #4998: Global issue list's context menu has enabled options for parent menus but there are no valid selections
+* Fixed #5170: Done ratio can not revert to 0% if status is used for done ratio
+* Fixed #5608: broken with i18n 0.4.0
+* Fixed #6054: Error 500 on filenames with whitespace in git reposities
+* Fixed #6135: Default logger configuration grows without bound.
+* Fixed #6191: Deletion of a main task deletes all subtasks
+* Fixed #6195: Missing move issues between projects
+* Fixed #6242: can't switch between inline and side-by-side diff
+* Fixed #6249: Create and continue returns 404
+* Fixed #6267: changing the authentication mode from ldap to internal with setting the password
+* Fixed #6270: diff coderay malformed in the "news" page
+* Fixed #6278: missing "cant_link_an_issue_with_a_descendant"from locale files
+* Fixed #6333: Create and continue results in a 404 Error
+* Fixed #6346: Age column on repository view is skewed for git, probably CVS too
+* Fixed #6351: Context menu on roadmap broken
+* Fixed #6388: New Subproject leads to a 404
+* Fixed #6392: Updated/Created links to activity broken
+* Fixed #6413: Error in SQL
+* Fixed #6443: Redirect to project settings after Copying a Project
+* Fixed #6448: Saving a wiki page with no content has a translation missing
+* Fixed #6452: Unhandled exception on creating File
+* Fixed #6471: Typo in label_report in Czech translation
+* Fixed #6479: Changing tracker type will lose watchers
+* Fixed #6499: Files with leading or trailing whitespace are not shown in git.
+
 == 2010-08-22 v1.0.1
 
 * #819: Add a body ID and class to all pages
--- a/extra/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 30
-/svn/!svn/ver/3832/trunk/extra
+/svn/!svn/ver/4309/trunk/extra
 END
--- a/extra/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra
 http://redmine.rubyforge.org/svn
 
 
 
-2010-07-08T03:46:19.270127Z
-3832
-edavis10
+2010-10-29T22:55:50.222644Z
+4309
+jbbarth
 
 
 
--- a/extra/mail_handler/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/mail_handler/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/mail_handler
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/app/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/app/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/app/controllers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/app/controllers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/controllers
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/app/models/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/app/models/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/models
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/app/views/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/app/views/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/app/views/example/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/app/views/example/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/example
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/app/views/my/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/app/views/my/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/my
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/app/views/my/blocks/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/app/views/my/blocks/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/my/blocks
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/app/views/settings/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/app/views/settings/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/settings
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/assets/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/assets/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/assets/images/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/assets/images/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets/images
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/assets/stylesheets/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/assets/stylesheets/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets/stylesheets
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/config/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/config/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/config
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/config/locales/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/config/locales/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/config/locales
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/db/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/db/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/db
 http://redmine.rubyforge.org/svn
 
--- a/extra/sample_plugin/db/migrate/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/sample_plugin/db/migrate/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/db/migrate
 http://redmine.rubyforge.org/svn
 
--- a/extra/svn/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/svn/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 34
-/svn/!svn/ver/3832/trunk/extra/svn
+/svn/!svn/ver/4309/trunk/extra/svn
 END
 reposman.rb
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/3571/trunk/extra/svn/reposman.rb
+/svn/!svn/ver/4288/trunk/extra/svn/reposman.rb
 END
 svnserve.wrapper
 K 25
@@ -19,7 +19,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 45
-/svn/!svn/ver/3832/trunk/extra/svn/Redmine.pm
+/svn/!svn/ver/4309/trunk/extra/svn/Redmine.pm
 END
 create_views.sql
 K 25
--- a/extra/svn/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/svn/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/extra/svn
 http://redmine.rubyforge.org/svn
 
 
 
-2010-07-08T03:46:19.270127Z
-3832
-edavis10
+2010-10-29T22:55:50.222644Z
+4309
+jbbarth
 
 
 
@@ -32,10 +32,10 @@
 
 
 
-2010-09-24T11:56:52.976058Z
-ea12c26fe7b1a65015d8a657c003f43b
-2010-03-12T18:15:19.896502Z
-3571
+2010-11-19T13:04:50.864947Z
+a0d169b0fc20459335e531e4f3921ede
+2010-10-24T21:00:05.611798Z
+4288
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-10475
+10545
 
 svnserve.wrapper
 file
@@ -100,11 +100,11 @@
 
 
 
-2010-09-23T14:37:44.963747Z
-6203596871e4eff5bc22d0d414b87370
-2010-07-08T03:46:19.270127Z
-3832
-edavis10
+2010-11-19T13:04:50.864947Z
+5ed4546a59c9729cbd9b407ad0996b9b
+2010-10-29T22:55:50.222644Z
+4309
+jbbarth
 has-props
 
 
@@ -126,7 +126,7 @@
 
 
 
-10740
+10752
 
 create_views.sql
 file
--- a/extra/svn/.svn/text-base/Redmine.pm.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/svn/.svn/text-base/Redmine.pm.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -331,7 +331,7 @@
           $sthldap->execute($auth_source_id);
           while (my @rowldap = $sthldap->fetchrow_array) {
             my $ldap = Authen::Simple::LDAP->new(
-                host    =>      ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]" : $rowldap[0],
+                host    =>      ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]:$rowldap[1]" : $rowldap[0],
                 port    =>      $rowldap[1],
                 basedn  =>      $rowldap[5],
                 binddn  =>      $rowldap[3] ? $rowldap[3] : "",
--- a/extra/svn/.svn/text-base/reposman.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/svn/.svn/text-base/reposman.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -180,7 +180,9 @@
   log("This script requires activeresource.\nRun 'gem install activeresource' to install it.", :exit => true)
 end
 
-class Project < ActiveResource::Base; end
+class Project < ActiveResource::Base
+  self.headers["User-agent"] = "Redmine repository manager/#{Version}"
+end
 
 log("querying Redmine for projects...", :level => 1);
 
--- a/extra/svn/Redmine.pm	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/svn/Redmine.pm	Fri Nov 19 13:24:41 2010 +0000
@@ -331,7 +331,7 @@
           $sthldap->execute($auth_source_id);
           while (my @rowldap = $sthldap->fetchrow_array) {
             my $ldap = Authen::Simple::LDAP->new(
-                host    =>      ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]" : $rowldap[0],
+                host    =>      ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]:$rowldap[1]" : $rowldap[0],
                 port    =>      $rowldap[1],
                 basedn  =>      $rowldap[5],
                 binddn  =>      $rowldap[3] ? $rowldap[3] : "",
--- a/extra/svn/reposman.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/extra/svn/reposman.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -180,7 +180,9 @@
   log("This script requires activeresource.\nRun 'gem install activeresource' to install it.", :exit => true)
 end
 
-class Project < ActiveResource::Base; end
+class Project < ActiveResource::Base
+  self.headers["User-agent"] = "Redmine repository manager/#{Version}"
+end
 
 log("querying Redmine for projects...", :level => 1);
 
--- a/files/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/files/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/files
 http://redmine.rubyforge.org/svn
 
--- a/lib/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 28
-/svn/!svn/ver/4172/trunk/lib
+/svn/!svn/ver/4406/trunk/lib
 END
 faster_csv.rb
 K 25
@@ -13,7 +13,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 39
-/svn/!svn/ver/4172/trunk/lib/redmine.rb
+/svn/!svn/ver/4388/trunk/lib/redmine.rb
 END
 tabular_form_builder.rb
 K 25
@@ -25,7 +25,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 41
-/svn/!svn/ver/3718/trunk/lib/redcloth3.rb
+/svn/!svn/ver/4374/trunk/lib/redcloth3.rb
 END
 ar_condition.rb
 K 25
--- a/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 
 
 
@@ -78,11 +78,11 @@
 
 
 
-2010-09-24T12:48:29.815852Z
-3874a67810147c88406056d7bdea8fd3
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-11-19T13:04:51.440969Z
+bdb16884474de1a2d37d4cc215f7f027
+2010-11-07T22:38:10.728638Z
+4388
+jplang
 has-props
 
 
@@ -104,7 +104,7 @@
 
 
 
-12555
+12745
 
 tabular_form_builder.rb
 file
@@ -149,10 +149,10 @@
 
 
 
-2010-09-23T14:37:45.003823Z
-53cdb197e20e88c4c2feba08946d49b6
-2010-04-30T17:50:34.330526Z
-3718
+2010-11-19T13:04:51.440969Z
+d1a99a7a8d34e675199eec76eea82129
+2010-11-06T13:29:23.489999Z
+4374
 jplang
 has-props
 
--- a/lib/.svn/text-base/redcloth3.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/.svn/text-base/redcloth3.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -456,7 +456,7 @@
         #    next if tog and method( tog ).call
         #    text.gsub! re, resub
         #end
-        text.gsub!(/\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/) do |m|
+        text.gsub!(/\b([A-Z][A-Z0-9]{1,})\b(?:[(]([^)]*)[)])/) do |m|
           "<acronym title=\"#{htmlesc $2}\">#{$1}</acronym>"
         end
     end
--- a/lib/.svn/text-base/redmine.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/.svn/text-base/redmine.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -8,6 +8,7 @@
 require 'redmine/themes'
 require 'redmine/hook'
 require 'redmine/plugin'
+require 'redmine/notifiable'
 require 'redmine/wiki_formatting'
 require 'redmine/scm/base'
 
@@ -83,10 +84,10 @@
   end
   
   map.project_module :time_tracking do |map|
-    map.permission :log_time, {:timelog => :edit}, :require => :loggedin
-    map.permission :view_time_entries, :timelog => [:details, :report]
-    map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member
-    map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin
+    map.permission :log_time, {:timelog => [:new, :create, :edit, :update]}, :require => :loggedin
+    map.permission :view_time_entries, :timelog => [:index], :time_entry_reports => [:report]
+    map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :member
+    map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin
     map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member
   end
   
@@ -110,10 +111,10 @@
     map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
     map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
     map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
-    map.permission :view_wiki_pages, :wiki => [:index, :special]
-    map.permission :export_wiki_pages, {}
+    map.permission :view_wiki_pages, :wiki => [:index, :show, :special, :date_index]
+    map.permission :export_wiki_pages, :wiki => [:export]
     map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
-    map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment]
+    map.permission :edit_wiki_pages, :wiki => [:edit, :update, :preview, :add_attachment]
     map.permission :delete_wiki_pages_attachments, {}
     map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
   end
@@ -194,7 +195,7 @@
   menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar
   menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural
   menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural
-  menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil }, 
+  menu.push :wiki, { :controller => 'wiki', :action => 'show', :id => nil }, :param => :project_id,
               :if => Proc.new { |p| p.wiki && !p.wiki.new_record? }
   menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id,
               :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
--- a/lib/SVG/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/SVG/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/SVG
 http://redmine.rubyforge.org/svn
 
--- a/lib/SVG/Graph/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/SVG/Graph/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/SVG/Graph
 http://redmine.rubyforge.org/svn
 
--- a/lib/generators/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/generators/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/generators
 http://redmine.rubyforge.org/svn
 
--- a/lib/generators/redmine_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/generators/redmine_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin
 http://redmine.rubyforge.org/svn
 
--- a/lib/generators/redmine_plugin/templates/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/generators/redmine_plugin/templates/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin/templates
 http://redmine.rubyforge.org/svn
 
--- a/lib/generators/redmine_plugin_controller/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/generators/redmine_plugin_controller/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_controller
 http://redmine.rubyforge.org/svn
 
--- a/lib/generators/redmine_plugin_controller/templates/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/generators/redmine_plugin_controller/templates/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_controller/templates
 http://redmine.rubyforge.org/svn
 
--- a/lib/generators/redmine_plugin_model/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/generators/redmine_plugin_model/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_model
 http://redmine.rubyforge.org/svn
 
--- a/lib/generators/redmine_plugin_model/templates/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/generators/redmine_plugin_model/templates/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_model/templates
 http://redmine.rubyforge.org/svn
 
--- a/lib/plugins/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/plugins/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/plugins
 http://redmine.rubyforge.org/svn
 
--- a/lib/redcloth3.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redcloth3.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -456,7 +456,7 @@
         #    next if tog and method( tog ).call
         #    text.gsub! re, resub
         #end
-        text.gsub!(/\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/) do |m|
+        text.gsub!(/\b([A-Z][A-Z0-9]{1,})\b(?:[(]([^)]*)[)])/) do |m|
           "<acronym title=\"#{htmlesc $2}\">#{$1}</acronym>"
         end
     end
--- a/lib/redmine.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -8,6 +8,7 @@
 require 'redmine/themes'
 require 'redmine/hook'
 require 'redmine/plugin'
+require 'redmine/notifiable'
 require 'redmine/wiki_formatting'
 require 'redmine/scm/base'
 
@@ -83,10 +84,10 @@
   end
   
   map.project_module :time_tracking do |map|
-    map.permission :log_time, {:timelog => :edit}, :require => :loggedin
-    map.permission :view_time_entries, :timelog => [:details, :report]
-    map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member
-    map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin
+    map.permission :log_time, {:timelog => [:new, :create, :edit, :update]}, :require => :loggedin
+    map.permission :view_time_entries, :timelog => [:index], :time_entry_reports => [:report]
+    map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :member
+    map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin
     map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member
   end
   
@@ -110,10 +111,10 @@
     map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
     map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
     map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
-    map.permission :view_wiki_pages, :wiki => [:index, :special]
-    map.permission :export_wiki_pages, {}
+    map.permission :view_wiki_pages, :wiki => [:index, :show, :special, :date_index]
+    map.permission :export_wiki_pages, :wiki => [:export]
     map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
-    map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment]
+    map.permission :edit_wiki_pages, :wiki => [:edit, :update, :preview, :add_attachment]
     map.permission :delete_wiki_pages_attachments, {}
     map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
   end
@@ -194,7 +195,7 @@
   menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar
   menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural
   menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural
-  menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil }, 
+  menu.push :wiki, { :controller => 'wiki', :action => 'show', :id => nil }, :param => :project_id,
               :if => Proc.new { |p| p.wiki && !p.wiki.new_record? }
   menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id,
               :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
--- a/lib/redmine/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 36
-/svn/!svn/ver/4104/trunk/lib/redmine
+/svn/!svn/ver/4406/trunk/lib/redmine
 END
 i18n.rb
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/2493/trunk/lib/redmine/i18n.rb
+/svn/!svn/ver/4183/trunk/lib/redmine/i18n.rb
 END
 pop3.rb
 K 25
@@ -21,11 +21,11 @@
 V 48
 /svn/!svn/ver/1753/trunk/lib/redmine/platform.rb
 END
-version.rb
+custom_field_format.rb
 K 25
 svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/4028/trunk/lib/redmine/version.rb
+V 59
+/svn/!svn/ver/3675/trunk/lib/redmine/custom_field_format.rb
 END
 themes.rb
 K 25
@@ -33,11 +33,11 @@
 V 46
 /svn/!svn/ver/3710/trunk/lib/redmine/themes.rb
 END
-custom_field_format.rb
+version.rb
 K 25
 svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/3675/trunk/lib/redmine/custom_field_format.rb
+V 47
+/svn/!svn/ver/4349/trunk/lib/redmine/version.rb
 END
 imap.rb
 K 25
@@ -57,35 +57,35 @@
 V 44
 /svn/!svn/ver/2776/trunk/lib/redmine/info.rb
 END
+activity.rb
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/1702/trunk/lib/redmine/activity.rb
+END
 access_keys.rb
 K 25
 svn:wc:ra_dav:version-url
 V 51
 /svn/!svn/ver/1081/trunk/lib/redmine/access_keys.rb
 END
-activity.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/1702/trunk/lib/redmine/activity.rb
-END
 wiki_formatting.rb
 K 25
 svn:wc:ra_dav:version-url
 V 55
 /svn/!svn/ver/3446/trunk/lib/redmine/wiki_formatting.rb
 END
+plugin.rb
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/4293/trunk/lib/redmine/plugin.rb
+END
 menu_manager.rb
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/3539/trunk/lib/redmine/menu_manager.rb
-END
-plugin.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/3841/trunk/lib/redmine/plugin.rb
+/svn/!svn/ver/4406/trunk/lib/redmine/menu_manager.rb
 END
 utils.rb
 K 25
@@ -97,7 +97,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/2522/trunk/lib/redmine/hook.rb
+/svn/!svn/ver/4406/trunk/lib/redmine/hook.rb
 END
 access_control.rb
 K 25
@@ -135,3 +135,9 @@
 V 52
 /svn/!svn/ver/3028/trunk/lib/redmine/unified_diff.rb
 END
+notifiable.rb
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/4222/trunk/lib/redmine/notifiable.rb
+END
--- a/lib/redmine/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-20T02:55:20.180218Z
-4104
-edavis10
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 
 
 
@@ -26,46 +26,9 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
-i18n.rb
-file
-
-
-
-
-2010-09-23T14:37:45.027790Z
-009b7a9ada5c3e83d6a7a26256c34951
-2009-02-21T11:04:50.579477Z
-2493
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2315
-
 export
 dir
 
-scm
-dir
-
 pop3.rb
 file
 
@@ -100,6 +63,392 @@
 
 2173
 
+themes.rb
+file
+
+
+
+
+2010-09-23T14:37:45.043748Z
+209d3f63cbc76795042695c71f6230f1
+2010-04-30T12:44:19.138265Z
+3710
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2311
+
+imap.rb
+file
+
+
+
+
+2010-09-23T14:37:45.031809Z
+caeedebd5c05aede1d232510d03ad136
+2008-12-31T14:56:30.439880Z
+2220
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2349
+
+activity
+dir
+
+info.rb
+file
+
+
+
+
+2010-09-23T14:37:45.031809Z
+ddadcd03b97455adae2451a2140afbf6
+2009-05-30T23:00:22.602473Z
+2776
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+399
+
+access_keys.rb
+file
+
+
+
+
+2010-09-23T14:37:45.015759Z
+41c2852d003d94cb23c231f06be62d12
+2008-01-20T13:07:19.003764Z
+1081
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1160
+
+utils.rb
+file
+
+
+
+
+2010-09-23T14:37:45.047759Z
+d04b071ce8f05b44ca6993c56fea9b1f
+2009-01-04T17:09:25.896068Z
+2234
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1466
+
+helpers
+dir
+
+access_control.rb
+file
+
+
+
+
+2010-09-23T14:37:45.015759Z
+e7e4c44515553e36bffa6e8f8960080b
+2008-09-25T18:51:03.022592Z
+1907
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3531
+
+search.rb
+file
+
+
+
+
+2010-09-23T14:37:45.043748Z
+6f968bcc4f81562e9cbddb02ebc62601
+2010-02-17T20:05:51.124365Z
+3444
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2631
+
+core_ext
+dir
+
+about.rb
+file
+
+
+
+
+2010-09-23T14:37:45.015759Z
+91ed592a8419f1bec48ba880c7a86e29
+2009-05-25T19:10:26.065563Z
+2766
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+431
+
+syntax_highlighting.rb
+file
+
+
+
+
+2010-09-23T14:37:45.043748Z
+4a40844a6cd11aa7409bc8f4e9a2c74e
+2010-03-28T11:30:48.135356Z
+3619
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1909
+
+notifiable.rb
+file
+
+
+
+
+2010-11-19T13:04:51.416932Z
+cfdd5556d40422dd9610d2124a2fefac
+2010-09-28T21:09:06.467392Z
+4222
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+916
+
+i18n.rb
+file
+
+
+
+
+2010-11-19T13:04:51.412966Z
+f1b6f1af024068879494612c2494e865
+2010-09-26T17:13:52.794850Z
+4183
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2378
+
+scm
+dir
+
 platform.rb
 file
 
@@ -168,50 +517,16 @@
 
 2761
 
-themes.rb
-file
-
-
-
-
-2010-09-23T14:37:45.043748Z
-209d3f63cbc76795042695c71f6230f1
-2010-04-30T12:44:19.138265Z
-3710
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2311
-
 version.rb
 file
 
 
 
 
-2010-09-23T14:37:45.047759Z
-6b901e32b10f12644f73eaad79a192aa
-2010-08-22T21:15:38.956901Z
-4028
+2010-11-19T13:04:51.412966Z
+8241f5642ac2d1aaa38fc1625f8816e6
+2010-11-01T00:37:19.679270Z
+4349
 edavis10
 has-props
 
@@ -236,40 +551,6 @@
 
 1056
 
-imap.rb
-file
-
-
-
-
-2010-09-23T14:37:45.031809Z
-caeedebd5c05aede1d232510d03ad136
-2008-12-31T14:56:30.439880Z
-2220
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2349
-
 mime_type.rb
 file
 
@@ -304,83 +585,12 @@
 
 3498
 
-activity
-dir
-
 views
 dir
 
 wiki_formatting
 dir
 
-info.rb
-file
-
-
-
-
-2010-09-23T14:37:45.031809Z
-ddadcd03b97455adae2451a2140afbf6
-2009-05-30T23:00:22.602473Z
-2776
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-399
-
-access_keys.rb
-file
-
-
-
-
-2010-09-23T14:37:45.015759Z
-41c2852d003d94cb23c231f06be62d12
-2008-01-20T13:07:19.003764Z
-1081
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1160
-
 activity.rb
 file
 
@@ -449,17 +659,51 @@
 
 4431
 
+plugin.rb
+file
+
+
+
+
+2010-11-19T13:04:51.412966Z
+81bc46012d5a0067e18e08bada197d8c
+2010-10-25T23:32:01.793182Z
+4293
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11219
+
 menu_manager.rb
 file
 
 
 
 
-2010-09-23T14:37:45.031809Z
-14187e67feb3e810abc8737c44d25654
-2010-03-04T06:01:05.500229Z
-3539
-edavis10
+2010-11-19T13:04:51.412966Z
+7f3739a749929e1f65efb292620d361b
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 has-props
 
 
@@ -481,44 +725,7 @@
 
 
 
-15321
-
-plugin.rb
-file
-
-
-
-
-2010-09-23T14:37:45.031809Z
-62caf1a80b1f5985c9f75fa41bf9b147
-2010-07-16T03:11:35.104268Z
-3841
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-11049
-
-helpers
-dir
+15303
 
 hook.rb
 file
@@ -526,44 +733,10 @@
 
 
 
-2010-09-23T14:37:45.027790Z
-0d02603ed1f291c8f33bc5b6ed3800e6
-2009-02-25T07:25:01.090780Z
-2522
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5198
-
-utils.rb
-file
-
-
-
-
-2010-09-23T14:37:45.047759Z
-d04b071ce8f05b44ca6993c56fea9b1f
-2009-01-04T17:09:25.896068Z
-2234
+2010-11-19T13:04:51.416932Z
+dfacee092edce74d74e8ea7d7a54aeba
+2010-11-14T16:24:21.989522Z
+4406
 jplang
 has-props
 
@@ -586,78 +759,7 @@
 
 
 
-1466
-
-access_control.rb
-file
-
-
-
-
-2010-09-23T14:37:45.015759Z
-e7e4c44515553e36bffa6e8f8960080b
-2008-09-25T18:51:03.022592Z
-1907
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3531
-
-search.rb
-file
-
-
-
-
-2010-09-23T14:37:45.043748Z
-6f968bcc4f81562e9cbddb02ebc62601
-2010-02-17T20:05:51.124365Z
-3444
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2631
-
-core_ext
-dir
+5192
 
 core_ext.rb
 file
@@ -693,77 +795,6 @@
 
 77
 
-about.rb
-file
-
-
-
-
-2010-09-23T14:37:45.015759Z
-91ed592a8419f1bec48ba880c7a86e29
-2009-05-25T19:10:26.065563Z
-2766
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-431
-
-default_data
-dir
-
-syntax_highlighting.rb
-file
-
-
-
-
-2010-09-23T14:37:45.043748Z
-4a40844a6cd11aa7409bc8f4e9a2c74e
-2010-03-28T11:30:48.135356Z
-3619
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1909
-
 unified_diff.rb
 file
 
@@ -798,3 +829,6 @@
 
 5259
 
+default_data
+dir
+
--- a/lib/redmine/.svn/text-base/hook.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/.svn/text-base/hook.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -57,7 +57,7 @@
       # Calls a hook.
       # Returns the listeners response.
       def call_hook(hook, context={})
-        returning [] do |response|
+        [].tap do |response|
           hls = hook_listeners(hook)
           if hls.any?
             hls.each {|listener| response << listener.send(hook, context)}
--- a/lib/redmine/.svn/text-base/i18n.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/.svn/text-base/i18n.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -37,7 +37,7 @@
 
     def format_date(date)
       return nil unless date
-      Setting.date_format.blank? ? ::I18n.l(date.to_date) : date.strftime(Setting.date_format)
+      Setting.date_format.blank? ? ::I18n.l(date.to_date, :count => date.strftime('%d')) : date.strftime(Setting.date_format)
     end
     
     def format_time(time, include_date = true)
@@ -45,7 +45,7 @@
       time = time.to_time if time.is_a?(String)
       zone = User.current.time_zone
       local = zone ? time.in_time_zone(zone) : (time.utc? ? time.localtime : time)
-      Setting.time_format.blank? ? ::I18n.l(local, :format => (include_date ? :default : :time)) : 
+      Setting.time_format.blank? ? ::I18n.l(local, :count => local.strftime('%d'), :format => (include_date ? :default : :time)) : 
                                    ((include_date ? "#{format_date(time)} " : "") + "#{local.strftime(Setting.time_format)}")
     end
 
--- a/lib/redmine/.svn/text-base/menu_manager.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/.svn/text-base/menu_manager.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -192,13 +192,13 @@
       def render_menu_node_with_children(node, project=nil)
         caption, url, selected = extract_node_details(node, project)
 
-        html = returning [] do |html|
+        html = [].tap do |html|
           html << '<li>'
           # Parent
           html << render_single_menu_node(node, caption, url, selected)
 
           # Standard children
-          standard_children_list = returning "" do |child_html|
+          standard_children_list = "".tap do |child_html|
             node.children.each do |child|
               child_html << render_menu_node(child, project)
             end
@@ -219,7 +219,7 @@
       def render_unattached_children_menu(node, project)
         return nil unless node.child_menus
 
-        returning "" do |child_html|
+        "".tap do |child_html|
           unattached_children = node.child_menus.call(project)
           # Tree nodes support #each so we need to do object detection
           if unattached_children.is_a? Array
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/.svn/text-base/notifiable.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,25 @@
+module Redmine
+  class Notifiable < Struct.new(:name, :parent)
+
+    def to_s
+      name
+    end
+    
+    # TODO: Plugin API for adding a new notification?
+    def self.all
+      notifications = []
+      notifications << Notifiable.new('issue_added')
+      notifications << Notifiable.new('issue_updated')
+      notifications << Notifiable.new('issue_note_added', 'issue_updated')
+      notifications << Notifiable.new('issue_status_updated', 'issue_updated')
+      notifications << Notifiable.new('issue_priority_updated', 'issue_updated')
+      notifications << Notifiable.new('news_added')
+      notifications << Notifiable.new('document_added')
+      notifications << Notifiable.new('file_added')
+      notifications << Notifiable.new('message_posted')
+      notifications << Notifiable.new('wiki_content_added')
+      notifications << Notifiable.new('wiki_content_updated')
+      notifications
+    end
+  end
+end
--- a/lib/redmine/.svn/text-base/plugin.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/.svn/text-base/plugin.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -89,6 +89,13 @@
     def self.clear
       @registered_plugins = {}
     end
+
+    # Checks if a plugin is installed
+    #
+    # @param [String] id name of the plugin
+    def self.installed?(id)
+      registered_plugins[id.to_sym].present?
+    end
     
     def initialize(id)
       @id = id.to_sym
--- a/lib/redmine/.svn/text-base/version.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/.svn/text-base/version.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -4,7 +4,7 @@
   module VERSION #:nodoc:
     MAJOR = 1
     MINOR = 0
-    TINY  = 1
+    TINY  = 3
     
     # Branch values:
     # * official release: nil
--- a/lib/redmine/activity/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/activity/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/activity
 http://redmine.rubyforge.org/svn
 
--- a/lib/redmine/core_ext/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/core_ext/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/core_ext
 http://redmine.rubyforge.org/svn
 
--- a/lib/redmine/core_ext/string/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/core_ext/string/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/core_ext/string
 http://redmine.rubyforge.org/svn
 
--- a/lib/redmine/default_data/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/default_data/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/default_data
 http://redmine.rubyforge.org/svn
 
--- a/lib/redmine/export/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/export/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/export
 http://redmine.rubyforge.org/svn
 
--- a/lib/redmine/helpers/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/helpers/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4074/trunk/lib/redmine/helpers
+/svn/!svn/ver/4392/trunk/lib/redmine/helpers
 END
 gantt.rb
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/4074/trunk/lib/redmine/helpers/gantt.rb
+/svn/!svn/ver/4392/trunk/lib/redmine/helpers/gantt.rb
 END
 calendar.rb
 K 25
--- a/lib/redmine/helpers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/helpers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/helpers
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-10T03:09:18.467829Z
-4074
-edavis10
+2010-11-11T13:44:23.942520Z
+4392
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-24T12:48:29.795823Z
-b227b416933df707aaa9a62cb52a3f9e
-2010-09-10T03:09:18.467829Z
-4074
-edavis10
+2010-11-19T13:04:51.408930Z
+3c093f4a7147fe4ebdbaed2749d602f1
+2010-11-11T13:44:23.942520Z
+4392
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-40757
+40744
 
 calendar.rb
 file
--- a/lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -283,8 +283,8 @@
       end
 
       def line_for_project(project, options)
-        # Skip versions that don't have a start_date
-        if project.is_a?(Project) && project.start_date
+        # Skip versions that don't have a start_date or due date
+        if project.is_a?(Project) && project.start_date && project.due_date
           options[:zoom] ||= 1
           options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
 
@@ -419,7 +419,7 @@
 
       def line_for_version(version, options)
         # Skip versions that don't have a start_date
-        if version.is_a?(Version) && version.start_date
+        if version.is_a?(Version) && version.start_date && version.due_date
           options[:zoom] ||= 1
           options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
 
@@ -536,8 +536,6 @@
             end
             output << "<span class='#{css_classes.join(' ')}'>"
             output << view.link_to_issue(issue)
-            output << ":"
-            output << h(issue.subject)
             output << '</span>'
           else
             ActiveRecord::Base.logger.debug "Gantt#subject_for_issue was not given an issue"
--- a/lib/redmine/helpers/gantt.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/helpers/gantt.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -283,8 +283,8 @@
       end
 
       def line_for_project(project, options)
-        # Skip versions that don't have a start_date
-        if project.is_a?(Project) && project.start_date
+        # Skip versions that don't have a start_date or due date
+        if project.is_a?(Project) && project.start_date && project.due_date
           options[:zoom] ||= 1
           options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
 
@@ -419,7 +419,7 @@
 
       def line_for_version(version, options)
         # Skip versions that don't have a start_date
-        if version.is_a?(Version) && version.start_date
+        if version.is_a?(Version) && version.start_date && version.due_date
           options[:zoom] ||= 1
           options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
 
@@ -536,8 +536,6 @@
             end
             output << "<span class='#{css_classes.join(' ')}'>"
             output << view.link_to_issue(issue)
-            output << ":"
-            output << h(issue.subject)
             output << '</span>'
           else
             ActiveRecord::Base.logger.debug "Gantt#subject_for_issue was not given an issue"
--- a/lib/redmine/hook.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/hook.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -57,7 +57,7 @@
       # Calls a hook.
       # Returns the listeners response.
       def call_hook(hook, context={})
-        returning [] do |response|
+        [].tap do |response|
           hls = hook_listeners(hook)
           if hls.any?
             hls.each {|listener| response << listener.send(hook, context)}
--- a/lib/redmine/i18n.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/i18n.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -37,7 +37,7 @@
 
     def format_date(date)
       return nil unless date
-      Setting.date_format.blank? ? ::I18n.l(date.to_date) : date.strftime(Setting.date_format)
+      Setting.date_format.blank? ? ::I18n.l(date.to_date, :count => date.strftime('%d')) : date.strftime(Setting.date_format)
     end
     
     def format_time(time, include_date = true)
@@ -45,7 +45,7 @@
       time = time.to_time if time.is_a?(String)
       zone = User.current.time_zone
       local = zone ? time.in_time_zone(zone) : (time.utc? ? time.localtime : time)
-      Setting.time_format.blank? ? ::I18n.l(local, :format => (include_date ? :default : :time)) : 
+      Setting.time_format.blank? ? ::I18n.l(local, :count => local.strftime('%d'), :format => (include_date ? :default : :time)) : 
                                    ((include_date ? "#{format_date(time)} " : "") + "#{local.strftime(Setting.time_format)}")
     end
 
--- a/lib/redmine/menu_manager.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/menu_manager.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -192,13 +192,13 @@
       def render_menu_node_with_children(node, project=nil)
         caption, url, selected = extract_node_details(node, project)
 
-        html = returning [] do |html|
+        html = [].tap do |html|
           html << '<li>'
           # Parent
           html << render_single_menu_node(node, caption, url, selected)
 
           # Standard children
-          standard_children_list = returning "" do |child_html|
+          standard_children_list = "".tap do |child_html|
             node.children.each do |child|
               child_html << render_menu_node(child, project)
             end
@@ -219,7 +219,7 @@
       def render_unattached_children_menu(node, project)
         return nil unless node.child_menus
 
-        returning "" do |child_html|
+        "".tap do |child_html|
           unattached_children = node.child_menus.call(project)
           # Tree nodes support #each so we need to do object detection
           if unattached_children.is_a? Array
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/notifiable.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,25 @@
+module Redmine
+  class Notifiable < Struct.new(:name, :parent)
+
+    def to_s
+      name
+    end
+    
+    # TODO: Plugin API for adding a new notification?
+    def self.all
+      notifications = []
+      notifications << Notifiable.new('issue_added')
+      notifications << Notifiable.new('issue_updated')
+      notifications << Notifiable.new('issue_note_added', 'issue_updated')
+      notifications << Notifiable.new('issue_status_updated', 'issue_updated')
+      notifications << Notifiable.new('issue_priority_updated', 'issue_updated')
+      notifications << Notifiable.new('news_added')
+      notifications << Notifiable.new('document_added')
+      notifications << Notifiable.new('file_added')
+      notifications << Notifiable.new('message_posted')
+      notifications << Notifiable.new('wiki_content_added')
+      notifications << Notifiable.new('wiki_content_updated')
+      notifications
+    end
+  end
+end
--- a/lib/redmine/plugin.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/plugin.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -89,6 +89,13 @@
     def self.clear
       @registered_plugins = {}
     end
+
+    # Checks if a plugin is installed
+    #
+    # @param [String] id name of the plugin
+    def self.installed?(id)
+      registered_plugins[id.to_sym].present?
+    end
     
     def initialize(id)
       @id = id.to_sym
--- a/lib/redmine/scm/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/scm/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 40
-/svn/!svn/ver/3925/trunk/lib/redmine/scm
+/svn/!svn/ver/4386/trunk/lib/redmine/scm
 END
 base.rb
 K 25
--- a/lib/redmine/scm/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/scm/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-08T07:07:30.284069Z
-3925
+2010-11-07T15:19:05.831621Z
+4386
 jbbarth
 
 
--- a/lib/redmine/scm/adapters/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/scm/adapters/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/3925/trunk/lib/redmine/scm/adapters
+/svn/!svn/ver/4386/trunk/lib/redmine/scm/adapters
 END
 subversion_adapter.rb
 K 25
@@ -25,7 +25,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/3925/trunk/lib/redmine/scm/adapters/git_adapter.rb
+/svn/!svn/ver/4386/trunk/lib/redmine/scm/adapters/git_adapter.rb
 END
 mercurial_adapter.rb
 K 25
--- a/lib/redmine/scm/adapters/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/scm/adapters/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm/adapters
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-08T07:07:30.284069Z
-3925
+2010-11-07T15:19:05.831621Z
+4386
 jbbarth
 
 
@@ -137,10 +137,10 @@
 
 
 
-2010-09-23T14:37:45.039790Z
-562f6950cbe67adb35946547436fe2df
-2010-08-08T07:07:30.284069Z
-3925
+2010-11-19T13:04:51.245032Z
+6b1c25eff34500f43f3b7cf9c0a78bec
+2010-11-07T15:19:05.831621Z
+4386
 jbbarth
 has-props
 
@@ -163,7 +163,7 @@
 
 
 
-9747
+9867
 
 mercurial_adapter.rb
 file
--- a/lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -35,7 +35,7 @@
         def branches
           return @branches if @branches
           @branches = []
-          cmd = "#{GIT_BIN} --git-dir #{target('')} branch"
+          cmd = "#{GIT_BIN} --git-dir #{target('')} branch --no-color"
           shellout(cmd) do |io|
             io.each_line do |line|
               @branches << line.match('\s*\*?\s*(.*)$')[1]
@@ -65,7 +65,7 @@
           shellout(cmd)  do |io|
             io.each_line do |line|
               e = line.chomp.to_s
-              if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\s+(.+)$/
+              if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\t(.+)$/
                 type = $1
                 sha = $2
                 size = $3
@@ -86,15 +86,15 @@
 
         def lastrev(path,rev)
           return nil if path.nil?
-          cmd = "#{GIT_BIN} --git-dir #{target('')} log --pretty=fuller --no-merges -n 1 "
+          cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --date=iso --pretty=fuller --no-merges -n 1 "
           cmd << " #{shell_quote rev} " if rev 
-          cmd <<  "-- #{path} " unless path.empty?
+          cmd <<  "-- #{shell_quote path} " unless path.empty?
           shellout(cmd) do |io|
             begin
               id = io.gets.split[1]
               author = io.gets.match('Author:\s+(.*)$')[1]
               2.times { io.gets }
-              time = io.gets.match('CommitDate:\s+(.*)$')[1]
+              time = Time.parse(io.gets.match('CommitDate:\s+(.*)$')[1]).localtime
 
               Revision.new({
                 :identifier => id,
@@ -114,14 +114,14 @@
         def revisions(path, identifier_from, identifier_to, options={})
           revisions = Revisions.new
 
-          cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw --date=iso --pretty=fuller "
+          cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --raw --date=iso --pretty=fuller "
           cmd << " --reverse " if options[:reverse]
           cmd << " --all " if options[:all]
           cmd << " -n #{options[:limit]} " if options[:limit]
           cmd << "#{shell_quote(identifier_from + '..')}" if identifier_from
           cmd << "#{shell_quote identifier_to}" if identifier_to
           cmd << " --since=#{shell_quote(options[:since].strftime("%Y-%m-%d %H:%M:%S"))}" if options[:since]
-          cmd << " -- #{path}" if path && !path.empty?
+          cmd << " -- #{shell_quote path}" if path && !path.empty?
 
           shellout(cmd) do |io|
             files=[]
@@ -165,13 +165,13 @@
                 parsing_descr = 1
                 changeset[:description] = ""
               elsif (parsing_descr == 1 || parsing_descr == 2) \
-              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\s+(.+)$/
+              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/
                 parsing_descr = 2
                 fileaction = $1
                 filepath = $2
                 files << {:action => fileaction, :path => filepath}
               elsif (parsing_descr == 1 || parsing_descr == 2) \
-              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\s+(.+)$/
+              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/
                 parsing_descr = 2
                 fileaction = $1
                 filepath = $3
@@ -209,9 +209,9 @@
           path ||= ''
 
           if identifier_to
-            cmd = "#{GIT_BIN} --git-dir #{target('')} diff #{shell_quote identifier_to} #{shell_quote identifier_from}" 
+            cmd = "#{GIT_BIN} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" 
           else
-            cmd = "#{GIT_BIN} --git-dir #{target('')} show #{shell_quote identifier_from}"
+            cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}"
           end
 
           cmd << " -- #{shell_quote path}" unless path.empty?
@@ -255,7 +255,7 @@
           if identifier.nil?
             identifier = 'HEAD'
           end
-          cmd = "#{GIT_BIN} --git-dir #{target('')} show #{shell_quote(identifier + ':' + path)}"
+          cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote(identifier + ':' + path)}"
           cat = nil
           shellout(cmd) do |io|
             io.binmode
--- a/lib/redmine/scm/adapters/git_adapter.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/scm/adapters/git_adapter.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -35,7 +35,7 @@
         def branches
           return @branches if @branches
           @branches = []
-          cmd = "#{GIT_BIN} --git-dir #{target('')} branch"
+          cmd = "#{GIT_BIN} --git-dir #{target('')} branch --no-color"
           shellout(cmd) do |io|
             io.each_line do |line|
               @branches << line.match('\s*\*?\s*(.*)$')[1]
@@ -65,7 +65,7 @@
           shellout(cmd)  do |io|
             io.each_line do |line|
               e = line.chomp.to_s
-              if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\s+(.+)$/
+              if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\t(.+)$/
                 type = $1
                 sha = $2
                 size = $3
@@ -86,15 +86,15 @@
 
         def lastrev(path,rev)
           return nil if path.nil?
-          cmd = "#{GIT_BIN} --git-dir #{target('')} log --pretty=fuller --no-merges -n 1 "
+          cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --date=iso --pretty=fuller --no-merges -n 1 "
           cmd << " #{shell_quote rev} " if rev 
-          cmd <<  "-- #{path} " unless path.empty?
+          cmd <<  "-- #{shell_quote path} " unless path.empty?
           shellout(cmd) do |io|
             begin
               id = io.gets.split[1]
               author = io.gets.match('Author:\s+(.*)$')[1]
               2.times { io.gets }
-              time = io.gets.match('CommitDate:\s+(.*)$')[1]
+              time = Time.parse(io.gets.match('CommitDate:\s+(.*)$')[1]).localtime
 
               Revision.new({
                 :identifier => id,
@@ -114,14 +114,14 @@
         def revisions(path, identifier_from, identifier_to, options={})
           revisions = Revisions.new
 
-          cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw --date=iso --pretty=fuller "
+          cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --raw --date=iso --pretty=fuller "
           cmd << " --reverse " if options[:reverse]
           cmd << " --all " if options[:all]
           cmd << " -n #{options[:limit]} " if options[:limit]
           cmd << "#{shell_quote(identifier_from + '..')}" if identifier_from
           cmd << "#{shell_quote identifier_to}" if identifier_to
           cmd << " --since=#{shell_quote(options[:since].strftime("%Y-%m-%d %H:%M:%S"))}" if options[:since]
-          cmd << " -- #{path}" if path && !path.empty?
+          cmd << " -- #{shell_quote path}" if path && !path.empty?
 
           shellout(cmd) do |io|
             files=[]
@@ -165,13 +165,13 @@
                 parsing_descr = 1
                 changeset[:description] = ""
               elsif (parsing_descr == 1 || parsing_descr == 2) \
-              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\s+(.+)$/
+              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/
                 parsing_descr = 2
                 fileaction = $1
                 filepath = $2
                 files << {:action => fileaction, :path => filepath}
               elsif (parsing_descr == 1 || parsing_descr == 2) \
-              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\s+(.+)$/
+              && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/
                 parsing_descr = 2
                 fileaction = $1
                 filepath = $3
@@ -209,9 +209,9 @@
           path ||= ''
 
           if identifier_to
-            cmd = "#{GIT_BIN} --git-dir #{target('')} diff #{shell_quote identifier_to} #{shell_quote identifier_from}" 
+            cmd = "#{GIT_BIN} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" 
           else
-            cmd = "#{GIT_BIN} --git-dir #{target('')} show #{shell_quote identifier_from}"
+            cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}"
           end
 
           cmd << " -- #{shell_quote path}" unless path.empty?
@@ -255,7 +255,7 @@
           if identifier.nil?
             identifier = 'HEAD'
           end
-          cmd = "#{GIT_BIN} --git-dir #{target('')} show #{shell_quote(identifier + ':' + path)}"
+          cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote(identifier + ':' + path)}"
           cat = nil
           shellout(cmd) do |io|
             io.binmode
--- a/lib/redmine/scm/adapters/mercurial/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/scm/adapters/mercurial/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm/adapters/mercurial
 http://redmine.rubyforge.org/svn
 
--- a/lib/redmine/version.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/version.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -4,7 +4,7 @@
   module VERSION #:nodoc:
     MAJOR = 1
     MINOR = 0
-    TINY  = 1
+    TINY  = 3
     
     # Branch values:
     # * official release: nil
--- a/lib/redmine/views/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/views/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/views
 http://redmine.rubyforge.org/svn
 
--- a/lib/redmine/views/my_page/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/views/my_page/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/views/my_page
 http://redmine.rubyforge.org/svn
 
--- a/lib/redmine/wiki_formatting/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/wiki_formatting/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/3811/trunk/lib/redmine/wiki_formatting
+/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting
 END
 macros.rb
 K 25
 svn:wc:ra_dav:version-url
 V 62
-/svn/!svn/ver/3006/trunk/lib/redmine/wiki_formatting/macros.rb
+/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting/macros.rb
 END
--- a/lib/redmine/wiki_formatting/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/wiki_formatting/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/wiki_formatting
 http://redmine.rubyforge.org/svn
 
 
 
-2010-06-24T02:35:24.648446Z
-3811
-edavis10
+2010-11-06T17:47:27.890964Z
+4376
+jplang
 
 
 
@@ -32,10 +32,10 @@
 
 
 
-2010-09-23T14:37:45.051779Z
-a16e05369f2e3dbb2bd33d9c2895ffdf
-2009-11-04T12:36:45.918398Z
-3006
+2010-11-19T13:04:51.401011Z
+879f8ce24a6bb5e4f5ea3b6f798b7a63
+2010-11-06T17:47:27.890964Z
+4376
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-4928
+4948
 
 textile
 dir
--- a/lib/redmine/wiki_formatting/.svn/text-base/macros.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/wiki_formatting/.svn/text-base/macros.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -112,7 +112,7 @@
         @included_wiki_pages ||= []
         raise 'Circular inclusion detected' if @included_wiki_pages.include?(page.title)
         @included_wiki_pages << page.title
-        out = textilizable(page.content, :text, :attachments => page.attachments)
+        out = textilizable(page.content, :text, :attachments => page.attachments, :headings => false)
         @included_wiki_pages.pop
         out
       end
--- a/lib/redmine/wiki_formatting/macros.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/wiki_formatting/macros.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -112,7 +112,7 @@
         @included_wiki_pages ||= []
         raise 'Circular inclusion detected' if @included_wiki_pages.include?(page.title)
         @included_wiki_pages << page.title
-        out = textilizable(page.content, :text, :attachments => page.attachments)
+        out = textilizable(page.content, :text, :attachments => page.attachments, :headings => false)
         @included_wiki_pages.pop
         out
       end
--- a/lib/redmine/wiki_formatting/textile/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/wiki_formatting/textile/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 60
-/svn/!svn/ver/3811/trunk/lib/redmine/wiki_formatting/textile
+/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting/textile
 END
 helper.rb
 K 25
@@ -13,5 +13,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 73
-/svn/!svn/ver/3811/trunk/lib/redmine/wiki_formatting/textile/formatter.rb
+/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting/textile/formatter.rb
 END
--- a/lib/redmine/wiki_formatting/textile/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/wiki_formatting/textile/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/wiki_formatting/textile
 http://redmine.rubyforge.org/svn
 
 
 
-2010-06-24T02:35:24.648446Z
-3811
-edavis10
+2010-11-06T17:47:27.890964Z
+4376
+jplang
 
 
 
@@ -66,11 +66,11 @@
 
 
 
-2010-09-23T14:37:45.051779Z
-28027996d41c6fc1e52168e77c09de3f
-2010-06-24T02:35:24.648446Z
-3811
-edavis10
+2010-11-19T13:04:51.401011Z
+b8052f700ecb0991fabdd3a5b684a412
+2010-11-06T17:47:27.890964Z
+4376
+jplang
 has-props
 
 
@@ -92,5 +92,5 @@
 
 
 
-6512
+4724
 
--- a/lib/redmine/wiki_formatting/textile/.svn/text-base/formatter.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/wiki_formatting/textile/.svn/text-base/formatter.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2010  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -24,7 +24,7 @@
         include ActionView::Helpers::TagHelper
         
         # auto_link rule after textile rules so that it doesn't break !image_url! tags
-        RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto, :inline_toc]
+        RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto]
         
         def initialize(*args)
           super
@@ -61,51 +61,6 @@
           end
         end
         
-        # Patch to add 'table of content' support to RedCloth
-        def textile_p_withtoc(tag, atts, cite, content)
-          # removes wiki links from the item
-          toc_item = content.gsub(/(\[\[([^\]\|]*)(\|([^\]]*))?\]\])/) { $4 || $2 }
-          # sanitizes titles from links
-          # see redcloth3.rb, same as "#{pre}#{text}#{post}"
-          toc_item.gsub!(LINK_RE) { [$2, $4, $9].join }
-          # sanitizes image links from titles
-          toc_item.gsub!(IMAGE_RE) { [$5].join }
-          # removes styles
-          # eg. %{color:red}Triggers% => Triggers
-          toc_item.gsub! %r[%\{[^\}]*\}([^%]+)%], '\\1'
-          
-          # replaces non word caracters by dashes
-          anchor = toc_item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
-  
-          unless anchor.blank?
-            if tag =~ /^h(\d)$/
-              @toc << [$1.to_i, anchor, toc_item]
-            end
-            atts << " id=\"#{anchor}\""
-            content = content + "<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a>"
-          end
-          textile_p(tag, atts, cite, content)
-        end
-  
-        alias :textile_h1 :textile_p_withtoc
-        alias :textile_h2 :textile_p_withtoc
-        alias :textile_h3 :textile_p_withtoc
-        
-        def inline_toc(text)
-          text.gsub!(/<p>\{\{([<>]?)toc\}\}<\/p>/i) do
-            div_class = 'toc'
-            div_class << ' right' if $1 == '>'
-            div_class << ' left' if $1 == '<'
-            out = "<ul class=\"#{div_class}\">"
-            @toc.each do |heading|
-              level, anchor, toc_item = heading
-              out << "<li class=\"heading#{level}\"><a href=\"##{anchor}\">#{toc_item}</a></li>\n"
-            end
-            out << '</ul>'
-            out
-          end
-        end
-        
         AUTO_LINK_RE = %r{
                         (                          # leading text
                           <\w+.*?>|                # leading HTML tag, or
@@ -121,7 +76,7 @@
                           (\S+?)                   # url
                           (\/)?                    # slash
                         )
-                        ([^\w\=\/;\(\)]*?)               # post
+                        ((?:&gt;)?|[^\w\=\/;\(\)]*?)               # post
                         (?=<|\s|$)
                        }x unless const_defined?(:AUTO_LINK_RE)
   
--- a/lib/redmine/wiki_formatting/textile/formatter.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/redmine/wiki_formatting/textile/formatter.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2010  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -24,7 +24,7 @@
         include ActionView::Helpers::TagHelper
         
         # auto_link rule after textile rules so that it doesn't break !image_url! tags
-        RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto, :inline_toc]
+        RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto]
         
         def initialize(*args)
           super
@@ -61,51 +61,6 @@
           end
         end
         
-        # Patch to add 'table of content' support to RedCloth
-        def textile_p_withtoc(tag, atts, cite, content)
-          # removes wiki links from the item
-          toc_item = content.gsub(/(\[\[([^\]\|]*)(\|([^\]]*))?\]\])/) { $4 || $2 }
-          # sanitizes titles from links
-          # see redcloth3.rb, same as "#{pre}#{text}#{post}"
-          toc_item.gsub!(LINK_RE) { [$2, $4, $9].join }
-          # sanitizes image links from titles
-          toc_item.gsub!(IMAGE_RE) { [$5].join }
-          # removes styles
-          # eg. %{color:red}Triggers% => Triggers
-          toc_item.gsub! %r[%\{[^\}]*\}([^%]+)%], '\\1'
-          
-          # replaces non word caracters by dashes
-          anchor = toc_item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
-  
-          unless anchor.blank?
-            if tag =~ /^h(\d)$/
-              @toc << [$1.to_i, anchor, toc_item]
-            end
-            atts << " id=\"#{anchor}\""
-            content = content + "<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a>"
-          end
-          textile_p(tag, atts, cite, content)
-        end
-  
-        alias :textile_h1 :textile_p_withtoc
-        alias :textile_h2 :textile_p_withtoc
-        alias :textile_h3 :textile_p_withtoc
-        
-        def inline_toc(text)
-          text.gsub!(/<p>\{\{([<>]?)toc\}\}<\/p>/i) do
-            div_class = 'toc'
-            div_class << ' right' if $1 == '>'
-            div_class << ' left' if $1 == '<'
-            out = "<ul class=\"#{div_class}\">"
-            @toc.each do |heading|
-              level, anchor, toc_item = heading
-              out << "<li class=\"heading#{level}\"><a href=\"##{anchor}\">#{toc_item}</a></li>\n"
-            end
-            out << '</ul>'
-            out
-          end
-        end
-        
         AUTO_LINK_RE = %r{
                         (                          # leading text
                           <\w+.*?>|                # leading HTML tag, or
@@ -121,7 +76,7 @@
                           (\S+?)                   # url
                           (\/)?                    # slash
                         )
-                        ([^\w\=\/;\(\)]*?)               # post
+                        ((?:&gt;)?|[^\w\=\/;\(\)]*?)               # post
                         (?=<|\s|$)
                        }x unless const_defined?(:AUTO_LINK_RE)
   
--- a/lib/tasks/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/tasks/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 34
-/svn/!svn/ver/4167/trunk/lib/tasks
+/svn/!svn/ver/4405/trunk/lib/tasks
 END
 deprecated.rake
 K 25
@@ -27,18 +27,18 @@
 V 48
 /svn/!svn/ver/4167/trunk/lib/tasks/reminder.rake
 END
+initializers.rake
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/4405/trunk/lib/tasks/initializers.rake
+END
 metrics.rake
 K 25
 svn:wc:ra_dav:version-url
 V 47
 /svn/!svn/ver/2825/trunk/lib/tasks/metrics.rake
 END
-initializers.rake
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3785/trunk/lib/tasks/initializers.rake
-END
 permissions.rake
 K 25
 svn:wc:ra_dav:version-url
@@ -63,23 +63,23 @@
 V 48
 /svn/!svn/ver/3167/trunk/lib/tasks/watchers.rake
 END
+yardoc.rake
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/3922/trunk/lib/tasks/yardoc.rake
+END
 plugins.rake
 K 25
 svn:wc:ra_dav:version-url
 V 47
 /svn/!svn/ver/1786/trunk/lib/tasks/plugins.rake
 END
-yardoc.rake
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/3922/trunk/lib/tasks/yardoc.rake
-END
 locales.rake
 K 25
 svn:wc:ra_dav:version-url
 V 47
-/svn/!svn/ver/2502/trunk/lib/tasks/locales.rake
+/svn/!svn/ver/4254/trunk/lib/tasks/locales.rake
 END
 migrate_from_trac.rake
 K 25
@@ -91,13 +91,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/3328/trunk/lib/tasks/migrate_from_mantis.rake
+/svn/!svn/ver/4403/trunk/lib/tasks/migrate_from_mantis.rake
 END
 email.rake
 K 25
 svn:wc:ra_dav:version-url
 V 45
-/svn/!svn/ver/3330/trunk/lib/tasks/email.rake
+/svn/!svn/ver/4256/trunk/lib/tasks/email.rake
 END
 migrate_plugins.rake
 K 25
--- a/lib/tasks/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/tasks/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/lib/tasks
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-20T23:17:51.402972Z
-4167
-edavis10
+2010-11-14T15:14:19.280754Z
+4405
+jplang
 
 
 
@@ -162,6 +162,40 @@
 
 1606
 
+initializers.rake
+file
+
+
+
+
+2010-11-19T13:04:51.424933Z
+c25b466de7654465538a91e5f5ab32b9
+2010-11-14T15:14:19.280754Z
+4405
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1343
+
 metrics.rake
 file
 
@@ -196,40 +230,6 @@
 
 113
 
-initializers.rake
-file
-
-
-
-
-2010-09-23T14:37:45.063748Z
-561f310a7d3a42b31ab7271aec396633
-2010-06-19T20:04:47.615499Z
-3785
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1351
-
 permissions.rake
 file
 
@@ -366,6 +366,40 @@
 
 180
 
+yardoc.rake
+file
+
+
+
+
+2010-09-23T14:37:45.067787Z
+5c9889bed6f4a4d18dbeb3d904855bb6
+2010-08-07T15:11:26.667915Z
+3922
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+578
+
 plugins.rake
 file
 
@@ -400,51 +434,17 @@
 
 1256
 
-yardoc.rake
-file
-
-
-
-
-2010-09-23T14:37:45.067787Z
-5c9889bed6f4a4d18dbeb3d904855bb6
-2010-08-07T15:11:26.667915Z
-3922
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-578
-
 locales.rake
 file
 
 
 
 
-2010-09-23T14:37:45.063748Z
-4b8985b7b23bbc48dc414dbd1999ca1b
-2009-02-21T15:21:31.040851Z
-2502
-jplang
+2010-11-19T13:04:51.424933Z
+8cb19171aae8528b3149b7efa211fc50
+2010-10-15T22:41:47.658318Z
+4254
+edavis10
 has-props
 
 
@@ -466,7 +466,7 @@
 
 
 
-961
+3360
 
 migrate_from_trac.rake
 file
@@ -508,10 +508,10 @@
 
 
 
-2010-09-23T14:37:45.063748Z
-da88af55c1e96cf9caca3be6a29b3259
-2010-01-17T12:00:45.233005Z
-3328
+2010-11-19T13:04:51.424933Z
+d58affc991ec64b615bcbf3f9a1bb176
+2010-11-14T13:16:39.968867Z
+4403
 jplang
 
 
@@ -534,7 +534,7 @@
 
 
 
-19302
+19253
 
 email.rake
 file
@@ -542,11 +542,11 @@
 
 
 
-2010-09-23T14:37:45.063748Z
-09d22d744d29edd8922bc899e4ec8be2
-2010-01-17T13:53:13.544777Z
-3330
-jplang
+2010-11-19T13:04:51.424933Z
+7875b7a15307c626a93c284f33757320
+2010-10-15T22:50:33.240825Z
+4256
+edavis10
 
 
 
@@ -568,7 +568,7 @@
 
 
 
-7537
+8244
 
 migrate_plugins.rake
 file
--- a/lib/tasks/.svn/text-base/email.rake.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/tasks/.svn/text-base/email.rake.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -165,5 +165,22 @@
       
       Redmine::POP3.check(pop_options, options)
     end
+    
+    desc "Send a test email to the user with the provided login name"
+    task :test, :login, :needs => :environment do |task, args|
+      include Redmine::I18n
+      abort l(:notice_email_error, "Please include the user login to test with. Example: login=examle-login") if args[:login].blank?
+
+      user = User.find_by_login(args[:login])
+      abort l(:notice_email_error, "User #{args[:login]} not found") unless user.logged?
+      
+      ActionMailer::Base.raise_delivery_errors = true
+      begin
+        Mailer.deliver_test(User.current)
+        puts l(:notice_email_sent, user.mail)
+      rescue Exception => e
+        abort l(:notice_email_error, e.message)
+      end
+    end
   end
 end
--- a/lib/tasks/.svn/text-base/initializers.rake.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/tasks/.svn/text-base/initializers.rake.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -16,7 +16,7 @@
 # secret is at least 30 characters and all random, no regular words or
 # you'll be exposed to dictionary attacks.
 ActionController::Base.session = {
-  :session_key => '_redmine_session',
+  :key => '_redmine_session',
   #
   # Uncomment and edit the :session_path below if are hosting your Redmine
   # at a suburi and don't want the top level path to access the cookies
--- a/lib/tasks/.svn/text-base/locales.rake.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/tasks/.svn/text-base/locales.rake.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -28,4 +28,62 @@
       lang.close
     end
   end
+
+  desc <<-END_DESC
+Removes a translation string from all locale file (only works for top-level childless non-multiline keys, probably doesn\'t work on windows).
+
+Options:
+  key=key_1,key_2    Comma-separated list of keys to delete
+  skip=en,de         Comma-separated list of locale files to ignore (filename without extension)
+END_DESC
+
+  task :remove_key do
+    dir = ENV['DIR'] || './config/locales'
+    files = Dir.glob(File.join(dir,'*.yml'))
+    skips = ENV['skip'] ? Regexp.union(ENV['skip'].split(',')) : nil
+    deletes = ENV['key'] ? Regexp.union(ENV['key'].split(',')) : nil
+    # Ignore multiline keys (begin with | or >) and keys with children (nothing meaningful after :)
+    delete_regex = /\A  #{deletes}: +[^\|>\s#].*\z/
+    
+    files.each do |path|
+      # Skip certain locales
+      (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips
+      puts "Deleting selected keys from #{path}"
+      orig_content = File.open(path, 'r') {|file| file.read}
+      File.open(path, 'w') {|file| orig_content.each_line {|line| file.puts line unless line.chomp =~ delete_regex}}
+    end
+  end
+  
+  desc <<-END_DESC
+Adds a new top-level translation string to all locale file (only works for childless keys, probably doesn\'t work on windows, doesn't check for duplicates).
+
+Options:
+  key="some_key=foo"
+  key1="another_key=bar"
+  key_fb="foo=bar"         Keys to add in the form key=value, every option of the form key[,\\d,_*] will be recognised
+  skip=en,de               Comma-separated list of locale files to ignore (filename without extension)
+END_DESC
+
+  task :add_key do
+    dir = ENV['DIR'] || './config/locales'
+    files = Dir.glob(File.join(dir,'*.yml'))
+    skips = ENV['skip'] ? Regexp.union(ENV['skip'].split(',')) : nil
+    keys_regex = /\Akey(\d+|_.+)?\z/
+    adds = ENV.reject {|k,v| !(k =~ keys_regex)}.values.collect {|v| Array.new v.split("=",2)}
+    key_list = adds.collect {|v| v[0]}.join(", ")
+
+    files.each do |path|
+      # Skip certain locales
+      (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips
+      # TODO: Check for dupliate/existing keys
+      puts "Adding #{key_list} to #{path}"
+      File.open(path, 'a') do |file|
+        adds.each do |kv|
+          Hash[*kv].to_yaml.each_line do |line|
+            file.puts "  #{line}" unless (line =~ /^---/ || line.empty?)
+          end
+        end
+      end
+    end
+  end
 end
--- a/lib/tasks/.svn/text-base/migrate_from_mantis.rake.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/tasks/.svn/text-base/migrate_from_mantis.rake.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -120,12 +120,8 @@
       has_many :news, :class_name => "MantisNews", :foreign_key => :project_id
       has_many :members, :class_name => "MantisProjectUser", :foreign_key => :project_id
       
-      def name
-        read_attribute(:name)[0..29]
-      end
-      
       def identifier
-        read_attribute(:name).underscore[0..19].gsub(/[^a-z0-9\-]/, '-')
+        read_attribute(:name).gsub(/[^a-z0-9\-]+/, '-').slice(0, Project::IDENTIFIER_MAX_LENGTH)
       end
     end
     
--- a/lib/tasks/email.rake	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/tasks/email.rake	Fri Nov 19 13:24:41 2010 +0000
@@ -165,5 +165,22 @@
       
       Redmine::POP3.check(pop_options, options)
     end
+    
+    desc "Send a test email to the user with the provided login name"
+    task :test, :login, :needs => :environment do |task, args|
+      include Redmine::I18n
+      abort l(:notice_email_error, "Please include the user login to test with. Example: login=examle-login") if args[:login].blank?
+
+      user = User.find_by_login(args[:login])
+      abort l(:notice_email_error, "User #{args[:login]} not found") unless user.logged?
+      
+      ActionMailer::Base.raise_delivery_errors = true
+      begin
+        Mailer.deliver_test(User.current)
+        puts l(:notice_email_sent, user.mail)
+      rescue Exception => e
+        abort l(:notice_email_error, e.message)
+      end
+    end
   end
 end
--- a/lib/tasks/initializers.rake	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/tasks/initializers.rake	Fri Nov 19 13:24:41 2010 +0000
@@ -16,7 +16,7 @@
 # secret is at least 30 characters and all random, no regular words or
 # you'll be exposed to dictionary attacks.
 ActionController::Base.session = {
-  :session_key => '_redmine_session',
+  :key => '_redmine_session',
   #
   # Uncomment and edit the :session_path below if are hosting your Redmine
   # at a suburi and don't want the top level path to access the cookies
--- a/lib/tasks/locales.rake	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/tasks/locales.rake	Fri Nov 19 13:24:41 2010 +0000
@@ -28,4 +28,62 @@
       lang.close
     end
   end
+
+  desc <<-END_DESC
+Removes a translation string from all locale file (only works for top-level childless non-multiline keys, probably doesn\'t work on windows).
+
+Options:
+  key=key_1,key_2    Comma-separated list of keys to delete
+  skip=en,de         Comma-separated list of locale files to ignore (filename without extension)
+END_DESC
+
+  task :remove_key do
+    dir = ENV['DIR'] || './config/locales'
+    files = Dir.glob(File.join(dir,'*.yml'))
+    skips = ENV['skip'] ? Regexp.union(ENV['skip'].split(',')) : nil
+    deletes = ENV['key'] ? Regexp.union(ENV['key'].split(',')) : nil
+    # Ignore multiline keys (begin with | or >) and keys with children (nothing meaningful after :)
+    delete_regex = /\A  #{deletes}: +[^\|>\s#].*\z/
+    
+    files.each do |path|
+      # Skip certain locales
+      (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips
+      puts "Deleting selected keys from #{path}"
+      orig_content = File.open(path, 'r') {|file| file.read}
+      File.open(path, 'w') {|file| orig_content.each_line {|line| file.puts line unless line.chomp =~ delete_regex}}
+    end
+  end
+  
+  desc <<-END_DESC
+Adds a new top-level translation string to all locale file (only works for childless keys, probably doesn\'t work on windows, doesn't check for duplicates).
+
+Options:
+  key="some_key=foo"
+  key1="another_key=bar"
+  key_fb="foo=bar"         Keys to add in the form key=value, every option of the form key[,\\d,_*] will be recognised
+  skip=en,de               Comma-separated list of locale files to ignore (filename without extension)
+END_DESC
+
+  task :add_key do
+    dir = ENV['DIR'] || './config/locales'
+    files = Dir.glob(File.join(dir,'*.yml'))
+    skips = ENV['skip'] ? Regexp.union(ENV['skip'].split(',')) : nil
+    keys_regex = /\Akey(\d+|_.+)?\z/
+    adds = ENV.reject {|k,v| !(k =~ keys_regex)}.values.collect {|v| Array.new v.split("=",2)}
+    key_list = adds.collect {|v| v[0]}.join(", ")
+
+    files.each do |path|
+      # Skip certain locales
+      (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips
+      # TODO: Check for dupliate/existing keys
+      puts "Adding #{key_list} to #{path}"
+      File.open(path, 'a') do |file|
+        adds.each do |kv|
+          Hash[*kv].to_yaml.each_line do |line|
+            file.puts "  #{line}" unless (line =~ /^---/ || line.empty?)
+          end
+        end
+      end
+    end
+  end
 end
--- a/lib/tasks/migrate_from_mantis.rake	Fri Sep 24 14:06:04 2010 +0100
+++ b/lib/tasks/migrate_from_mantis.rake	Fri Nov 19 13:24:41 2010 +0000
@@ -120,12 +120,8 @@
       has_many :news, :class_name => "MantisNews", :foreign_key => :project_id
       has_many :members, :class_name => "MantisProjectUser", :foreign_key => :project_id
       
-      def name
-        read_attribute(:name)[0..29]
-      end
-      
       def identifier
-        read_attribute(:name).underscore[0..19].gsub(/[^a-z0-9\-]/, '-')
+        read_attribute(:name).gsub(/[^a-z0-9\-]+/, '-').slice(0, Project::IDENTIFIER_MAX_LENGTH)
       end
     end
     
--- a/log/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/log/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/log
 http://redmine.rubyforge.org/svn
 
--- a/public/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 31
-/svn/!svn/ver/4072/trunk/public
+/svn/!svn/ver/4377/trunk/public
 END
 dispatch.fcgi.example
 K 25
--- a/public/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-06T18:52:07.556711Z
+4377
+jplang
 has-props
 
 
--- a/public/help/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/help/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 36
-/svn/!svn/ver/3595/trunk/public/help
+/svn/!svn/ver/4308/trunk/public/help
 END
 wiki_syntax_detailed.html
 K 25
 svn:wc:ra_dav:version-url
 V 62
-/svn/!svn/ver/3595/trunk/public/help/wiki_syntax_detailed.html
+/svn/!svn/ver/4308/trunk/public/help/wiki_syntax_detailed.html
 END
 wiki_syntax.html
 K 25
--- a/public/help/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/help/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/help
 http://redmine.rubyforge.org/svn
 
 
 
-2010-03-16T21:48:21.610865Z
-3595
-jplang
+2010-10-29T22:48:59.506153Z
+4308
+jbbarth
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-23T14:37:45.075747Z
-73d1d55e3e3341a687d13e571825b6b9
-2010-03-16T21:48:21.610865Z
-3595
-jplang
+2010-11-19T13:04:51.444942Z
+380699b753ffb01cba5c9504216ff64b
+2010-10-29T22:48:59.506153Z
+4308
+jbbarth
 
 
 
@@ -58,7 +58,7 @@
 
 
 
-10590
+11397
 
 wiki_syntax.html
 file
--- a/public/help/.svn/text-base/wiki_syntax_detailed.html.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/help/.svn/text-base/wiki_syntax_detailed.html.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -66,7 +66,7 @@
 
         <p>Wiki links are displayed in red if the page doesn't exist yet, eg: <a href="#" class="wiki-page new">Nonexistent page</a>.</p>
 
-        <p>Links to others resources (0.7):</p>
+        <p>Links to other resources:</p>
 
         <ul>
             <li>Documents:
@@ -74,6 +74,7 @@
                     <li><strong>document#17</strong> (link to document with id 17)</li>
                     <li><strong>document:Greetings</strong> (link to the document with title "Greetings")</li>
                     <li><strong>document:"Some document"</strong> (double quotes can be used when document title contains spaces)</li>
+                    <li><strong>document:some_project:"Some document"</strong> (link to a document with title "Some document" in other project "some_project")
                 </ul></li>
         </ul>
 
@@ -95,19 +96,36 @@
         </ul>
 
         <ul>
-             <li>Repository files
+             <li>Repository files:
                 <ul>
-                    <li><strong>source:some/file</strong>          -- Link to the file located at /some/file in the project's repository</li>
-                    <li><strong>source:some/file@52</strong>       -- Link to the file's revision 52</li>
-                    <li><strong>source:some/file#L120</strong>     -- Link to line 120 of the file</li>
-                    <li><strong>source:some/file@52#L120</strong>  -- Link to line 120 of the file's revision 52</li>
-                    <li><strong>export:some/file</strong>          -- Force the download of the file</li>
-            </ul></li>
+                    <li><strong>source:some/file</strong>           (link to the file located at /some/file in the project's repository)</li>
+                    <li><strong>source:some/file@52</strong>        (link to the file's revision 52)</li>
+                    <li><strong>source:some/file#L120</strong>      (link to line 120 of the file)</li>
+                    <li><strong>source:some/file@52#L120</strong>   (link to line 120 of the file's revision 52)</li>
+                    <li><strong>source:"some file@52#L120"</strong> (use double quotes when the URL contains spaces</li>
+                    <li><strong>export:some/file</strong>           (force the download of the file)</li>
+                </ul></li>
         </ul>
-        
-        <p>Escaping (0.7):</p>
 
         <ul>
+            <li>Forum messages:
+                <ul>
+                    <li><strong>message#1218</strong> (link to message with id 1218)</li>
+                </ul></li>
+        </ul>
+
+        <ul>
+            <li>Projects:
+                <ul>
+                    <li><strong>project#3</strong> (link to project with id 3)</li>
+                    <li><strong>project:someproject</strong> (link to project named "someproject")</li>
+                </ul></li>
+        </ul>
+
+
+        <p>Escaping:</p>
+
+        <ul>
             <li>You can prevent Redmine links from being parsed by preceding them with an exclamation mark: !</li>
         </ul>
 
@@ -219,7 +237,7 @@
 
     <h2><a name="13" class="wiki-page"></a>Code highlighting</h2>
 
-    <p>Code highlightment relies on <a href="http://coderay.rubychan.de/" class="external">CodeRay</a>, a fast syntax highlighting library written completely in Ruby. It currently supports c, html, javascript, rhtml, ruby, scheme, xml languages.</p>
+    <p>Code highlightment relies on <a href="http://coderay.rubychan.de/" class="external">CodeRay</a>, a fast syntax highlighting library written completely in Ruby. It currently supports c, cpp, css, delphi, groovy, html, java, javascript, json, php, python, rhtml, ruby, scheme, sql, xml and yaml languages.</p>
 
     <p>You can highlight code in your wiki page using this syntax:</p>
 
--- a/public/help/wiki_syntax_detailed.html	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/help/wiki_syntax_detailed.html	Fri Nov 19 13:24:41 2010 +0000
@@ -66,7 +66,7 @@
 
         <p>Wiki links are displayed in red if the page doesn't exist yet, eg: <a href="#" class="wiki-page new">Nonexistent page</a>.</p>
 
-        <p>Links to others resources (0.7):</p>
+        <p>Links to other resources:</p>
 
         <ul>
             <li>Documents:
@@ -74,6 +74,7 @@
                     <li><strong>document#17</strong> (link to document with id 17)</li>
                     <li><strong>document:Greetings</strong> (link to the document with title "Greetings")</li>
                     <li><strong>document:"Some document"</strong> (double quotes can be used when document title contains spaces)</li>
+                    <li><strong>document:some_project:"Some document"</strong> (link to a document with title "Some document" in other project "some_project")
                 </ul></li>
         </ul>
 
@@ -95,19 +96,36 @@
         </ul>
 
         <ul>
-             <li>Repository files
+             <li>Repository files:
                 <ul>
-                    <li><strong>source:some/file</strong>          -- Link to the file located at /some/file in the project's repository</li>
-                    <li><strong>source:some/file@52</strong>       -- Link to the file's revision 52</li>
-                    <li><strong>source:some/file#L120</strong>     -- Link to line 120 of the file</li>
-                    <li><strong>source:some/file@52#L120</strong>  -- Link to line 120 of the file's revision 52</li>
-                    <li><strong>export:some/file</strong>          -- Force the download of the file</li>
-            </ul></li>
+                    <li><strong>source:some/file</strong>           (link to the file located at /some/file in the project's repository)</li>
+                    <li><strong>source:some/file@52</strong>        (link to the file's revision 52)</li>
+                    <li><strong>source:some/file#L120</strong>      (link to line 120 of the file)</li>
+                    <li><strong>source:some/file@52#L120</strong>   (link to line 120 of the file's revision 52)</li>
+                    <li><strong>source:"some file@52#L120"</strong> (use double quotes when the URL contains spaces</li>
+                    <li><strong>export:some/file</strong>           (force the download of the file)</li>
+                </ul></li>
         </ul>
-        
-        <p>Escaping (0.7):</p>
 
         <ul>
+            <li>Forum messages:
+                <ul>
+                    <li><strong>message#1218</strong> (link to message with id 1218)</li>
+                </ul></li>
+        </ul>
+
+        <ul>
+            <li>Projects:
+                <ul>
+                    <li><strong>project#3</strong> (link to project with id 3)</li>
+                    <li><strong>project:someproject</strong> (link to project named "someproject")</li>
+                </ul></li>
+        </ul>
+
+
+        <p>Escaping:</p>
+
+        <ul>
             <li>You can prevent Redmine links from being parsed by preceding them with an exclamation mark: !</li>
         </ul>
 
@@ -219,7 +237,7 @@
 
     <h2><a name="13" class="wiki-page"></a>Code highlighting</h2>
 
-    <p>Code highlightment relies on <a href="http://coderay.rubychan.de/" class="external">CodeRay</a>, a fast syntax highlighting library written completely in Ruby. It currently supports c, html, javascript, rhtml, ruby, scheme, xml languages.</p>
+    <p>Code highlightment relies on <a href="http://coderay.rubychan.de/" class="external">CodeRay</a>, a fast syntax highlighting library written completely in Ruby. It currently supports c, cpp, css, delphi, groovy, html, java, javascript, json, php, python, rhtml, ruby, scheme, sql, xml and yaml languages.</p>
 
     <p>You can highlight code in your wiki page using this syntax:</p>
 
--- a/public/images/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/images/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/images
 http://redmine.rubyforge.org/svn
 
@@ -162,6 +162,74 @@
 
 218
 
+milestone_late.png
+file
+
+
+
+
+2010-09-24T12:48:29.823793Z
+ecc1979ed435769c700725495428359f
+2010-09-10T03:09:02.311267Z
+4072
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+160
+
+2downarrow.png
+file
+
+
+
+
+2010-09-23T14:37:45.123788Z
+6730b4ea633194233bec98ee5f7a3977
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+282
+
 folder_open_add.png
 file
 
@@ -196,74 +264,6 @@
 
 375
 
-2downarrow.png
-file
-
-
-
-
-2010-09-23T14:37:45.123788Z
-6730b4ea633194233bec98ee5f7a3977
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-282
-
-milestone_late.png
-file
-
-
-
-
-2010-09-24T12:48:29.823793Z
-ecc1979ed435769c700725495428359f
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-160
-
 warning.png
 file
 
@@ -298,6 +298,74 @@
 
 613
 
+fav_off.png
+file
+
+
+
+
+2010-09-23T14:37:45.131805Z
+ff96c02d8f18116bb3f005f2c8b86e91
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+211
+
+move.png
+file
+
+
+
+
+2010-09-23T14:37:45.155802Z
+0a2ceb01cbc3c01186fdcc25ced8eb0d
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+321
+
 reload.png
 file
 
@@ -332,74 +400,6 @@
 
 549
 
-move.png
-file
-
-
-
-
-2010-09-23T14:37:45.155802Z
-0a2ceb01cbc3c01186fdcc25ced8eb0d
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-321
-
-fav_off.png
-file
-
-
-
-
-2010-09-23T14:37:45.131805Z
-ff96c02d8f18116bb3f005f2c8b86e91
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-211
-
 project_marker.png
 file
 
@@ -468,6 +468,40 @@
 
 641
 
+zoom_in.png
+file
+
+
+
+
+2010-09-23T14:37:45.163769Z
+91b883d074b727f1a95cd0ce48510a3c
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+461
+
 copy.png
 file
 
@@ -502,40 +536,6 @@
 
 925
 
-zoom_in.png
-file
-
-
-
-
-2010-09-23T14:37:45.163769Z
-91b883d074b727f1a95cd0ce48510a3c
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-461
-
 news.png
 file
 
@@ -1083,6 +1083,40 @@
 
 137
 
+bullet_delete.png
+file
+
+
+
+
+2010-09-23T14:37:45.123788Z
+fba036d7348ff28f7ab7dacbc52bc32a
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+255
+
 text_list_bullets.png
 file
 
@@ -1117,40 +1151,6 @@
 
 291
 
-bullet_delete.png
-file
-
-
-
-
-2010-09-23T14:37:45.123788Z
-fba036d7348ff28f7ab7dacbc52bc32a
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-255
-
 bullet_arrow_left.png
 file
 
@@ -1423,6 +1423,40 @@
 
 403
 
+textfield.png
+file
+
+
+
+
+2010-09-23T14:37:45.159811Z
+985a1dadffeaa303ff1eef4ea53ec0f4
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+100
+
 attachment.png
 file
 
@@ -1457,40 +1491,6 @@
 
 939
 
-textfield.png
-file
-
-
-
-
-2010-09-23T14:37:45.159811Z
-985a1dadffeaa303ff1eef4ea53ec0f4
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-100
-
 false.png
 file
 
@@ -1525,6 +1525,40 @@
 
 459
 
+unlock.png
+file
+
+
+
+
+2010-09-23T14:37:45.159811Z
+fa1be48a747127ee34d4fae020b825d4
+2010-02-14T13:13:16.743297Z
+3430
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+448
+
 bullet_toggle_plus.png
 file
 
@@ -1559,40 +1593,6 @@
 
 217
 
-unlock.png
-file
-
-
-
-
-2010-09-23T14:37:45.159811Z
-fa1be48a747127ee34d4fae020b825d4
-2010-02-14T13:13:16.743297Z
-3430
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-448
-
 group.png
 file
 
@@ -1627,6 +1627,108 @@
 
 700
 
+save.png
+file
+
+
+
+
+2010-09-23T14:37:45.155802Z
+9e64db8f4905a17e3a6f68792cd5e199
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+440
+
+bullet_blue.png
+file
+
+
+
+
+2010-09-23T14:37:45.123788Z
+3363f60299360fb5539b769d089e145f
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+241
+
+loading.gif
+file
+
+
+
+
+2010-09-23T14:37:45.151760Z
+03ce3dcc84af110e9da8699a841e5200
+2006-12-03T19:55:45.161980Z
+62
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1553
+
 plugin.png
 file
 
@@ -1661,108 +1763,6 @@
 
 538
 
-loading.gif
-file
-
-
-
-
-2010-09-23T14:37:45.151760Z
-03ce3dcc84af110e9da8699a841e5200
-2006-12-03T19:55:45.161980Z
-62
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1553
-
-bullet_blue.png
-file
-
-
-
-
-2010-09-23T14:37:45.123788Z
-3363f60299360fb5539b769d089e145f
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-241
-
-save.png
-file
-
-
-
-
-2010-09-23T14:37:45.155802Z
-9e64db8f4905a17e3a6f68792cd5e199
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-440
-
 bullet_add.png
 file
 
@@ -1831,6 +1831,40 @@
 
 1885
 
+milestone_done.png
+file
+
+
+
+
+2010-09-24T12:48:29.823793Z
+40c58172e0c52eee4deb5227ec37f0cf
+2010-09-10T03:09:02.311267Z
+4072
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+137
+
 exclamation.png
 file
 
@@ -1865,40 +1899,6 @@
 
 648
 
-milestone_done.png
-file
-
-
-
-
-2010-09-24T12:48:29.823793Z
-40c58172e0c52eee4deb5227ec37f0cf
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-137
-
 ticket_go.png
 file
 
@@ -1933,6 +1933,74 @@
 
 608
 
+zoom_out.png
+file
+
+
+
+
+2010-09-23T14:37:45.163769Z
+42b319d6ad0249fb20833a17d5f373a4
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+461
+
+report.png
+file
+
+
+
+
+2010-09-23T14:37:45.155802Z
+8d8ec49f5773997411ff708a82e40568
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1014
+
 folder.png
 file
 
@@ -1967,74 +2035,6 @@
 
 970
 
-report.png
-file
-
-
-
-
-2010-09-23T14:37:45.155802Z
-8d8ec49f5773997411ff708a82e40568
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1014
-
-zoom_out.png
-file
-
-
-
-
-2010-09-23T14:37:45.163769Z
-42b319d6ad0249fb20833a17d5f373a4
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-461
-
 fav.png
 file
 
@@ -2069,6 +2069,40 @@
 
 378
 
+bullet_purple.png
+file
+
+
+
+
+2010-09-23T14:37:45.127811Z
+c4c76ce450e3e838afd6aa8f34a8d9a8
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+244
+
 document.png
 file
 
@@ -2103,40 +2137,6 @@
 
 333
 
-bullet_purple.png
-file
-
-
-
-
-2010-09-23T14:37:45.127811Z
-c4c76ce450e3e838afd6aa8f34a8d9a8
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-244
-
 true.png
 file
 
--- a/public/images/files/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/images/files/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/images/files
 http://redmine.rubyforge.org/svn
 
--- a/public/images/jstoolbar/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/images/jstoolbar/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/images/jstoolbar
 http://redmine.rubyforge.org/svn
 
@@ -94,6 +94,74 @@
 
 252
 
+bt_code.png
+file
+
+
+
+
+2010-09-23T14:37:45.151760Z
+ef6624df45946b54e3b23db2a0c6b77b
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+927
+
+bt_h3.png
+file
+
+
+
+
+2010-09-23T14:37:45.151760Z
+cb940b592da5ed0367305cb0514d5684
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+261
+
 bt_ol.png
 file
 
@@ -128,14 +196,14 @@
 
 248
 
-bt_h3.png
+bt_img.png
 file
 
 
 
 
 2010-09-23T14:37:45.151760Z
-cb940b592da5ed0367305cb0514d5684
+04a0e86c9eec7d85d445e7627b5fc8ea
 2010-02-13T09:08:12.698526Z
 3419
 jplang
@@ -160,41 +228,7 @@
 
 
 
-261
-
-bt_code.png
-file
-
-
-
-
-2010-09-23T14:37:45.151760Z
-ef6624df45946b54e3b23db2a0c6b77b
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-927
+1027
 
 bt_strong.png
 file
@@ -230,40 +264,6 @@
 
 244
 
-bt_img.png
-file
-
-
-
-
-2010-09-23T14:37:45.151760Z
-04a0e86c9eec7d85d445e7627b5fc8ea
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1027
-
 bt_bq_remove.png
 file
 
--- a/public/javascripts/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/javascripts/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 43
-/svn/!svn/ver/4060/trunk/public/javascripts
+/svn/!svn/ver/4222/trunk/public/javascripts
 END
 prototype.js
 K 25
@@ -43,7 +43,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/3879/trunk/public/javascripts/application.js
+/svn/!svn/ver/4222/trunk/public/javascripts/application.js
 END
 controls.js
 K 25
--- a/public/javascripts/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/javascripts/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/javascripts
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-05T11:33:08.614151Z
-4060
-winterheart
+2010-09-28T21:09:06.467392Z
+4222
+edavis10
 
 
 
@@ -242,11 +242,11 @@
 
 
 
-2010-09-23T14:37:45.171796Z
-6645a3ecbb861b6ed2923565afa744aa
-2010-07-25T10:34:55.569539Z
-3879
-jplang
+2010-11-19T13:04:51.565792Z
+cff005d7bada484046dc85e1caaeebe2
+2010-09-28T21:09:06.467392Z
+4222
+edavis10
 has-props
 
 
@@ -268,7 +268,7 @@
 
 
 
-6439
+6581
 
 controls.js
 file
--- a/public/javascripts/.svn/text-base/application.js.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/javascripts/.svn/text-base/application.js.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -17,6 +17,13 @@
 	for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
 }
 
+function setCheckboxesBySelector(checked, selector) {
+  var boxes = $$(selector);
+  boxes.each(function(ele) {
+    ele.checked = checked;
+  });
+}
+
 function showAndScrollTo(id, focus) {
 	Element.show(id);
 	if (focus!=null) { Form.Element.focus(focus); }
@@ -56,7 +63,6 @@
     dLabel.addClassName('inline');
     // Pulls the languge value used for Optional Description
     dLabel.update($('attachment_description_label_content').innerHTML)
-    
     p = document.getElementById("attachments_fields");
     p.appendChild(document.createElement("br"));
     p.appendChild(f);
--- a/public/javascripts/application.js	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/javascripts/application.js	Fri Nov 19 13:24:41 2010 +0000
@@ -17,6 +17,13 @@
 	for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
 }
 
+function setCheckboxesBySelector(checked, selector) {
+  var boxes = $$(selector);
+  boxes.each(function(ele) {
+    ele.checked = checked;
+  });
+}
+
 function showAndScrollTo(id, focus) {
 	Element.show(id);
 	if (focus!=null) { Form.Element.focus(focus); }
@@ -56,7 +63,6 @@
     dLabel.addClassName('inline');
     // Pulls the languge value used for Optional Description
     dLabel.update($('attachment_description_label_content').innerHTML)
-    
     p = document.getElementById("attachments_fields");
     p.appendChild(document.createElement("br"));
     p.appendChild(f);
--- a/public/javascripts/calendar/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/javascripts/calendar/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/javascripts/calendar
 http://redmine.rubyforge.org/svn
 
--- a/public/javascripts/calendar/lang/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/javascripts/calendar/lang/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/javascripts/calendar/lang
 http://redmine.rubyforge.org/svn
 
@@ -570,6 +570,40 @@
 
 3845
 
+calendar-gl.js
+file
+
+
+
+
+2010-09-23T14:37:45.195758Z
+c4f74e36f6a3debcf8ec065bc6886f04
+2009-01-23T15:37:59.406714Z
+2296
+winterheart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3855
+
 calendar-en.js
 file
 
@@ -604,40 +638,6 @@
 
 3600
 
-calendar-gl.js
-file
-
-
-
-
-2010-09-23T14:37:45.195758Z
-c4f74e36f6a3debcf8ec065bc6886f04
-2009-01-23T15:37:59.406714Z
-2296
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3855
-
 calendar-fr.js
 file
 
@@ -672,6 +672,74 @@
 
 3870
 
+calendar-zh-tw.js
+file
+
+
+
+
+2010-09-23T14:37:45.203758Z
+0bed4c9c046772a12267b4118bf1504a
+2008-06-07T09:03:20.687527Z
+1498
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3841
+
+calendar-hr.js
+file
+
+
+
+
+2010-09-23T14:37:45.195758Z
+f8d0daa275cf612206c43d4c9be95d08
+2010-01-17T10:33:30.937961Z
+3320
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3646
+
 calendar-nl.js
 file
 
@@ -706,74 +774,6 @@
 
 3701
 
-calendar-hr.js
-file
-
-
-
-
-2010-09-23T14:37:45.195758Z
-f8d0daa275cf612206c43d4c9be95d08
-2010-01-17T10:33:30.937961Z
-3320
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3646
-
-calendar-zh-tw.js
-file
-
-
-
-
-2010-09-23T14:37:45.203758Z
-0bed4c9c046772a12267b4118bf1504a
-2008-06-07T09:03:20.687527Z
-1498
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3841
-
 calendar-mn.js
 file
 
@@ -808,40 +808,6 @@
 
 3904
 
-calendar-pl.js
-file
-
-
-
-
-2010-09-23T14:37:45.199778Z
-eabf711c28d30bb9474f3f505766f286
-2007-09-22T14:56:09.057923Z
-749
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3974
-
 calendar-th.js
 file
 
@@ -876,6 +842,40 @@
 
 4417
 
+calendar-pl.js
+file
+
+
+
+
+2010-09-23T14:37:45.199778Z
+eabf711c28d30bb9474f3f505766f286
+2007-09-22T14:56:09.057923Z
+749
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3974
+
 calendar-it.js
 file
 
@@ -978,40 +978,6 @@
 
 3909
 
-calendar-lv.js
-file
-
-
-
-
-2010-09-23T14:37:45.199778Z
-b260d88c13c01ebf4e7c94b9cb022930
-2010-05-14T18:15:41.754813Z
-3737
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3803
-
 calendar-zh.js
 file
 
@@ -1046,6 +1012,40 @@
 
 3600
 
+calendar-lv.js
+file
+
+
+
+
+2010-09-23T14:37:45.199778Z
+b260d88c13c01ebf4e7c94b9cb022930
+2010-05-14T18:15:41.754813Z
+3737
+winterheart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3803
+
 calendar-ca.js
 file
 
--- a/public/javascripts/jstoolbar/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/javascripts/jstoolbar/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/javascripts/jstoolbar
 http://redmine.rubyforge.org/svn
 
--- a/public/javascripts/jstoolbar/lang/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/javascripts/jstoolbar/lang/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/javascripts/jstoolbar/lang
 http://redmine.rubyforge.org/svn
 
@@ -570,6 +570,74 @@
 
 753
 
+jstoolbar-zh-tw.js
+file
+
+
+
+
+2010-09-23T14:37:45.239756Z
+be45a6e710f3a07e9fab41d795a64030
+2008-06-07T09:03:20.687527Z
+1498
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+716
+
+jstoolbar-hr.js
+file
+
+
+
+
+2010-09-23T14:37:45.231813Z
+f13f0553753c4b53bd96c294ca6ce15e
+2010-01-17T10:33:30.937961Z
+3320
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+721
+
 jstoolbar-nl.js
 file
 
@@ -604,74 +672,6 @@
 
 753
 
-jstoolbar-hr.js
-file
-
-
-
-
-2010-09-23T14:37:45.231813Z
-f13f0553753c4b53bd96c294ca6ce15e
-2010-01-17T10:33:30.937961Z
-3320
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-721
-
-jstoolbar-zh-tw.js
-file
-
-
-
-
-2010-09-23T14:37:45.239756Z
-be45a6e710f3a07e9fab41d795a64030
-2008-06-07T09:03:20.687527Z
-1498
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-716
-
 jstoolbar-mn.js
 file
 
@@ -706,6 +706,40 @@
 
 916
 
+jstoolbar-th.js
+file
+
+
+
+
+2010-09-23T14:37:45.239756Z
+3f844a6495d4eebb122b5c7b21696282
+2008-05-30T16:35:36.510811Z
+1479
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+931
+
 jstoolbar-pl.js
 file
 
@@ -740,40 +774,6 @@
 
 851
 
-jstoolbar-th.js
-file
-
-
-
-
-2010-09-23T14:37:45.239756Z
-3f844a6495d4eebb122b5c7b21696282
-2008-05-30T16:35:36.510811Z
-1479
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-931
-
 jstoolbar-it.js
 file
 
@@ -876,40 +876,6 @@
 
 754
 
-jstoolbar-lv.js
-file
-
-
-
-
-2010-09-23T14:37:45.235815Z
-5a44b7a9bd5b7db86d0a7398ee5bc779
-2010-05-14T18:15:41.754813Z
-3737
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-836
-
 jstoolbar-zh.js
 file
 
@@ -944,6 +910,74 @@
 
 722
 
+jstoolbar-lv.js
+file
+
+
+
+
+2010-09-23T14:37:45.235815Z
+5a44b7a9bd5b7db86d0a7398ee5bc779
+2010-05-14T18:15:41.754813Z
+3737
+winterheart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+836
+
+jstoolbar-ca.js
+file
+
+
+
+
+2010-09-23T14:37:45.231813Z
+6aacb53ed49e6e14831baf8c38096662
+2008-09-15T16:07:30.857601Z
+1865
+winterheart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+763
+
 jstoolbar-pt.js
 file
 
@@ -978,39 +1012,39 @@
 
 823
 
-jstoolbar-ca.js
+jstoolbar-da.js
 file
 
 
 
 
 2010-09-23T14:37:45.231813Z
-6aacb53ed49e6e14831baf8c38096662
-2008-09-15T16:07:30.857601Z
-1865
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-763
+4061b38de5e085dac922f77f94bd254a
+2009-10-11T09:24:45.635758Z
+2921
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+746
 
 jstoolbar-pt-br.js
 file
@@ -1046,40 +1080,6 @@
 
 819
 
-jstoolbar-da.js
-file
-
-
-
-
-2010-09-23T14:37:45.231813Z
-4061b38de5e085dac922f77f94bd254a
-2009-10-11T09:24:45.635758Z
-2921
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-746
-
 jstoolbar-sr.js
 file
 
--- a/public/stylesheets/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/stylesheets/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 43
-/svn/!svn/ver/4072/trunk/public/stylesheets
+/svn/!svn/ver/4377/trunk/public/stylesheets
 END
 context_menu.css
 K 25
@@ -49,5 +49,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4072/trunk/public/stylesheets/application.css
+/svn/!svn/ver/4377/trunk/public/stylesheets/application.css
 END
--- a/public/stylesheets/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/stylesheets/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/stylesheets
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-06T18:52:07.556711Z
+4377
+jplang
 
 
 
@@ -271,9 +271,9 @@
 
 
 
-e6a7b38459368e48b9c463dadb2e9f5f
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+d7fddb955f6ccbe8119b5ba02b0fc466
+2010-11-06T18:52:07.556711Z
+4377
+jplang
 has-props
 
--- a/public/stylesheets/.svn/text-base/application.css.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/stylesheets/.svn/text-base/application.css.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -113,7 +113,7 @@
 
 tr.project td.name a { white-space:nowrap; }
 
-tr.project.idnt td.name a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
+tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
 tr.project.idnt-1 td.name {padding-left: 0.5em;}
 tr.project.idnt-2 td.name {padding-left: 2em;}
 tr.project.idnt-3 td.name {padding-left: 3.5em;}
@@ -419,6 +419,7 @@
 .tabular.settings textarea { width: 99%; }
 
 fieldset.settings label { display: block; }
+.parent { padding-left: 20px; }
 
 .required {color: #bb0000;}
 .summary {font-style: italic;}
@@ -714,9 +715,10 @@
 
 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
 div.wiki ul.toc.left  { float: left; margin-right: 12px; margin-left: 0; width: auto; }
-div.wiki ul.toc li { list-style-type:none;}
-div.wiki ul.toc li.heading2 { margin-left: 6px; }
-div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
+div.wiki ul.toc ul { margin: 0; padding: 0; }
+div.wiki ul.toc li { list-style-type:none; margin: 0;}
+div.wiki ul.toc li li { margin-left: 1.5em; }
+div.wiki ul.toc li li li { font-size: 0.8em; }
 
 div.wiki ul.toc a {
     font-size: 0.9em;
@@ -853,6 +855,8 @@
 .icon-summary  { background-image: url(../images/lightning.png); }
 .icon-server-authentication { background-image: url(../images/server_key.png); }
 .icon-issue { background-image: url(../images/ticket.png); }
+.icon-zoom-in { background-image: url(../images/zoom_in.png); }
+.icon-zoom-out { background-image: url(../images/zoom_out.png); }
 
 .icon-file { background-image: url(../images/files/default.png); }
 .icon-file.text-plain { background-image: url(../images/files/text.png); }
--- a/public/stylesheets/application.css	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/stylesheets/application.css	Fri Nov 19 13:24:41 2010 +0000
@@ -113,7 +113,7 @@
 
 tr.project td.name a { white-space:nowrap; }
 
-tr.project.idnt td.name a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
+tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
 tr.project.idnt-1 td.name {padding-left: 0.5em;}
 tr.project.idnt-2 td.name {padding-left: 2em;}
 tr.project.idnt-3 td.name {padding-left: 3.5em;}
@@ -419,6 +419,7 @@
 .tabular.settings textarea { width: 99%; }
 
 fieldset.settings label { display: block; }
+.parent { padding-left: 20px; }
 
 .required {color: #bb0000;}
 .summary {font-style: italic;}
@@ -714,9 +715,10 @@
 
 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
 div.wiki ul.toc.left  { float: left; margin-right: 12px; margin-left: 0; width: auto; }
-div.wiki ul.toc li { list-style-type:none;}
-div.wiki ul.toc li.heading2 { margin-left: 6px; }
-div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
+div.wiki ul.toc ul { margin: 0; padding: 0; }
+div.wiki ul.toc li { list-style-type:none; margin: 0;}
+div.wiki ul.toc li li { margin-left: 1.5em; }
+div.wiki ul.toc li li li { font-size: 0.8em; }
 
 div.wiki ul.toc a {
     font-size: 0.9em;
@@ -853,6 +855,8 @@
 .icon-summary  { background-image: url(../images/lightning.png); }
 .icon-server-authentication { background-image: url(../images/server_key.png); }
 .icon-issue { background-image: url(../images/ticket.png); }
+.icon-zoom-in { background-image: url(../images/zoom_in.png); }
+.icon-zoom-out { background-image: url(../images/zoom_out.png); }
 
 .icon-file { background-image: url(../images/files/default.png); }
 .icon-file.text-plain { background-image: url(../images/files/text.png); }
--- a/public/themes/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/themes/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/themes
 http://redmine.rubyforge.org/svn
 
--- a/public/themes/alternate/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/themes/alternate/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/themes/alternate
 http://redmine.rubyforge.org/svn
 
--- a/public/themes/alternate/stylesheets/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/themes/alternate/stylesheets/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/themes/alternate/stylesheets
 http://redmine.rubyforge.org/svn
 
--- a/public/themes/classic/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/themes/classic/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/themes/classic
 http://redmine.rubyforge.org/svn
 
--- a/public/themes/classic/images/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/themes/classic/images/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/themes/classic/images
 http://redmine.rubyforge.org/svn
 
--- a/public/themes/classic/stylesheets/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/public/themes/classic/stylesheets/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/public/themes/classic/stylesheets
 http://redmine.rubyforge.org/svn
 
--- a/script/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,59 +1,59 @@
 K 25
 svn:wc:ra_dav:version-url
 V 31
-/svn/!svn/ver/2783/trunk/script
+/svn/!svn/ver/4359/trunk/script
 END
 console
 K 25
 svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/331/trunk/script/console
+V 39
+/svn/!svn/ver/4359/trunk/script/console
 END
 breakpointer
 K 25
 svn:wc:ra_dav:version-url
-V 43
-/svn/!svn/ver/331/trunk/script/breakpointer
+V 44
+/svn/!svn/ver/4359/trunk/script/breakpointer
 END
 server
 K 25
 svn:wc:ra_dav:version-url
-V 37
-/svn/!svn/ver/331/trunk/script/server
+V 38
+/svn/!svn/ver/4359/trunk/script/server
 END
 dbconsole
 K 25
 svn:wc:ra_dav:version-url
 V 41
-/svn/!svn/ver/1623/trunk/script/dbconsole
+/svn/!svn/ver/4359/trunk/script/dbconsole
 END
 destroy
 K 25
 svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/331/trunk/script/destroy
+V 39
+/svn/!svn/ver/4359/trunk/script/destroy
 END
 runner
 K 25
 svn:wc:ra_dav:version-url
-V 37
-/svn/!svn/ver/331/trunk/script/runner
+V 38
+/svn/!svn/ver/4359/trunk/script/runner
 END
 about
 K 25
 svn:wc:ra_dav:version-url
 V 37
-/svn/!svn/ver/2783/trunk/script/about
+/svn/!svn/ver/4359/trunk/script/about
 END
 generate
 K 25
 svn:wc:ra_dav:version-url
-V 39
-/svn/!svn/ver/331/trunk/script/generate
+V 40
+/svn/!svn/ver/4359/trunk/script/generate
 END
 plugin
 K 25
 svn:wc:ra_dav:version-url
-V 37
-/svn/!svn/ver/331/trunk/script/plugin
+V 38
+/svn/!svn/ver/4359/trunk/script/plugin
 END
--- a/script/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/script
 http://redmine.rubyforge.org/svn
 
 
 
-2009-06-07T18:22:27.408484Z
-2783
-edavis10
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 
 
 
@@ -35,11 +35,11 @@
 
 
 
-2010-09-23T14:37:45.263770Z
-e9da4d9bd98b629d856b280caa927f42
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:51.017028Z
+623b2f8265970f73bdb3489872d00eb6
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -61,7 +61,7 @@
 
 
 
-97
+104
 
 breakpointer
 file
@@ -69,11 +69,11 @@
 
 
 
-2010-09-23T14:37:45.263770Z
-efe05546991854cb1323026c0cdc7d27
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:51.017028Z
+2ac529bf7a654b9b91b2fea2275aa44e
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -95,7 +95,7 @@
 
 
 
-102
+109
 
 server
 file
@@ -103,11 +103,11 @@
 
 
 
-2010-09-23T14:37:45.271755Z
-bba2905059daec6033f7a51cff19aff6
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:51.017028Z
+ff97a702418dbc85fec089b97506281f
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -129,7 +129,7 @@
 
 
 
-96
+103
 
 dbconsole
 file
@@ -137,11 +137,11 @@
 
 
 
-2010-09-23T14:37:45.263770Z
-5a6a7708fafd8f806775405f2f33fe99
-2008-07-04T17:58:14.743502Z
-1623
-jplang
+2010-11-19T13:04:51.017028Z
+1fd5fa2d4aeee5b4111a40f62ae85446
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -163,7 +163,7 @@
 
 
 
-100
+106
 
 destroy
 file
@@ -171,11 +171,11 @@
 
 
 
-2010-09-23T14:37:45.263770Z
-f09bb329fb28e89340567a704a4619f8
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:51.017028Z
+95866cb3b894816b540afd282b952618
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -197,7 +197,7 @@
 
 
 
-97
+104
 
 runner
 file
@@ -205,11 +205,11 @@
 
 
 
-2010-09-23T14:37:45.271755Z
-78522a2f43ce4bf932cf237076c0d2a1
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:51.017028Z
+0cccc4eabf129ebd7b571d3eceda8893
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -231,7 +231,7 @@
 
 
 
-96
+103
 
 about
 file
@@ -239,11 +239,11 @@
 
 
 
-2010-09-23T14:37:45.263770Z
-a1b78de0b704be4cfa29b11cfbd35a5e
-2009-06-07T18:22:27.408484Z
-2783
-edavis10
+2010-11-19T13:04:51.017028Z
+b0aeca2e257a2226502c570e671e1b76
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -265,7 +265,7 @@
 
 
 
-187
+193
 
 generate
 file
@@ -273,11 +273,11 @@
 
 
 
-2010-09-23T14:37:45.267755Z
-ef69c53ee39f550f43a4bd3a09482ff7
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:51.017028Z
+fb51df9bca94c25a928f40468354700f
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -299,7 +299,7 @@
 
 
 
-98
+105
 
 process
 dir
@@ -310,11 +310,11 @@
 
 
 
-2010-09-23T14:37:45.267755Z
-4c5aa44730cde119ab839486212f4ac5
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:51.017028Z
+db0dd437d39c21fe52e1fc05a0680163
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -336,5 +336,5 @@
 
 
 
-96
+103
 
--- a/script/.svn/text-base/about.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/.svn/text-base/about.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 $LOAD_PATH.unshift "#{RAILTIES_PATH}/builtin/rails_info"
 require 'commands/about'
 
--- a/script/.svn/text-base/breakpointer.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/.svn/text-base/breakpointer.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/breakpointer'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/breakpointer'
--- a/script/.svn/text-base/console.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/.svn/text-base/console.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/console'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/console'
--- a/script/.svn/text-base/dbconsole.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/.svn/text-base/dbconsole.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/dbconsole'
--- a/script/.svn/text-base/destroy.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/.svn/text-base/destroy.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/destroy'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/destroy'
--- a/script/.svn/text-base/generate.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/.svn/text-base/generate.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/generate'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/generate'
--- a/script/.svn/text-base/plugin.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/.svn/text-base/plugin.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/plugin'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/plugin'
--- a/script/.svn/text-base/runner.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/.svn/text-base/runner.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/runner'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/runner'
--- a/script/.svn/text-base/server.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/.svn/text-base/server.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/server'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/server'
--- a/script/about	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/about	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 $LOAD_PATH.unshift "#{RAILTIES_PATH}/builtin/rails_info"
 require 'commands/about'
 
--- a/script/breakpointer	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/breakpointer	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/breakpointer'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/breakpointer'
--- a/script/console	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/console	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/console'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/console'
--- a/script/dbconsole	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/dbconsole	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/dbconsole'
--- a/script/destroy	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/destroy	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/destroy'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/destroy'
--- a/script/generate	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/generate	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/generate'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/generate'
--- a/script/performance/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/performance/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,23 +1,23 @@
 K 25
 svn:wc:ra_dav:version-url
 V 43
-/svn/!svn/ver/1623/trunk/script/performance
+/svn/!svn/ver/4359/trunk/script/performance
 END
 benchmarker
 K 25
 svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/331/trunk/script/performance/benchmarker
+V 55
+/svn/!svn/ver/4359/trunk/script/performance/benchmarker
 END
 profiler
 K 25
 svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/331/trunk/script/performance/profiler
+V 52
+/svn/!svn/ver/4359/trunk/script/performance/profiler
 END
 request
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/1623/trunk/script/performance/request
+/svn/!svn/ver/4359/trunk/script/performance/request
 END
--- a/script/performance/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/performance/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/script/performance
 http://redmine.rubyforge.org/svn
 
 
 
-2008-07-04T17:58:14.743502Z
-1623
-jplang
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-23T14:37:45.267755Z
-91086af38733556c5aabc91eb4b20bed
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:50.988983Z
+33063b7a3d4dbef12ac8bcb55a5e6e3e
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-117
+123
 
 profiler
 file
@@ -66,11 +66,11 @@
 
 
 
-2010-09-23T14:37:45.267755Z
-4dd7faa9b0b5f678082e19c97852b005
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:50.988983Z
+9d3b872769337c49e648b9fe47e4e280
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-114
+120
 
 request
 file
@@ -100,11 +100,11 @@
 
 
 
-2010-09-23T14:37:45.267755Z
-9316140f20aace6cf628d17b5bfd1119
-2008-07-04T17:58:14.743502Z
-1623
-jplang
+2010-11-19T13:04:50.988983Z
+b6500710f6029724e44cbd25f80eaaf1
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -126,5 +126,5 @@
 
 
 
-113
+116
 
--- a/script/performance/.svn/text-base/benchmarker.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/performance/.svn/text-base/benchmarker.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../../config/boot',  __FILE__)
 require 'commands/performance/benchmarker'
--- a/script/performance/.svn/text-base/profiler.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/performance/.svn/text-base/profiler.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../../config/boot',  __FILE__)
 require 'commands/performance/profiler'
--- a/script/performance/.svn/text-base/request.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/performance/.svn/text-base/request.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/performance/request'
--- a/script/performance/benchmarker	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/performance/benchmarker	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../../config/boot',  __FILE__)
 require 'commands/performance/benchmarker'
--- a/script/performance/profiler	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/performance/profiler	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../../config/boot',  __FILE__)
 require 'commands/performance/profiler'
--- a/script/performance/request	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/performance/request	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/performance/request'
--- a/script/plugin	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/plugin	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/plugin'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/plugin'
--- a/script/process/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/process/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,29 +1,29 @@
 K 25
 svn:wc:ra_dav:version-url
 V 39
-/svn/!svn/ver/1623/trunk/script/process
+/svn/!svn/ver/4359/trunk/script/process
 END
 spawner
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/331/trunk/script/process/spawner
+V 47
+/svn/!svn/ver/4359/trunk/script/process/spawner
 END
 inspector
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/1623/trunk/script/process/inspector
+/svn/!svn/ver/4359/trunk/script/process/inspector
 END
 reaper
 K 25
 svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/331/trunk/script/process/reaper
+V 46
+/svn/!svn/ver/4359/trunk/script/process/reaper
 END
 spinner
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/331/trunk/script/process/spinner
+V 47
+/svn/!svn/ver/4359/trunk/script/process/spinner
 END
--- a/script/process/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/process/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/script/process
 http://redmine.rubyforge.org/svn
 
 
 
-2008-07-04T17:58:14.743502Z
-1623
-jplang
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-23T14:37:45.271755Z
-e7e52ded28489a821b5eb156f92ca0f5
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:51.012938Z
+47bf41d8d2c97d220d9f70916e94c651
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-109
+112
 
 inspector
 file
@@ -66,11 +66,11 @@
 
 
 
-2010-09-23T14:37:45.271755Z
-73662c6991e4d3ea2332b5fcadd5b3d3
-2008-07-04T17:58:14.743502Z
-1623
-jplang
+2010-11-19T13:04:51.012938Z
+9137857ebdaf61d57a3496f7e61fede3
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-111
+114
 
 reaper
 file
@@ -100,11 +100,11 @@
 
 
 
-2010-09-23T14:37:45.271755Z
-77608fa9e09e9f24410e7374c67956b7
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:51.012938Z
+99af2666610d48d13e2eeceacf487d16
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -126,7 +126,7 @@
 
 
 
-108
+111
 
 spinner
 file
@@ -134,11 +134,11 @@
 
 
 
-2010-09-23T14:37:45.271755Z
-69800f080d6bdd2f06c76c32f23c2c86
-2007-03-12T17:29:04.309051Z
-331
-jplang
+2010-11-19T13:04:51.012938Z
+64b5316e88e7555bf827ad04edbce4a6
+2010-11-02T00:20:21.419252Z
+4359
+jbbarth
 has-props
 
 
@@ -160,5 +160,5 @@
 
 
 
-109
+112
 
--- a/script/process/.svn/text-base/inspector.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/process/.svn/text-base/inspector.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/process/inspector'
--- a/script/process/.svn/text-base/reaper.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/process/.svn/text-base/reaper.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/process/reaper'
--- a/script/process/.svn/text-base/spawner.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/process/.svn/text-base/spawner.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/process/spawner'
--- a/script/process/.svn/text-base/spinner.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/process/.svn/text-base/spinner.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/process/spinner'
--- a/script/process/inspector	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/process/inspector	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/process/inspector'
--- a/script/process/reaper	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/process/reaper	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/process/reaper'
--- a/script/process/spawner	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/process/spawner	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/process/spawner'
--- a/script/process/spinner	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/process/spinner	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
+require File.expand_path('../../config/boot',  __FILE__)
 require 'commands/process/spinner'
--- a/script/runner	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/runner	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/runner'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/runner'
--- a/script/server	Fri Sep 24 14:06:04 2010 +0100
+++ b/script/server	Fri Nov 19 13:24:41 2010 +0000
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/server'
\ No newline at end of file
+require File.expand_path('../../config/boot',  __FILE__)
+require 'commands/server'
--- a/test/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 29
-/svn/!svn/ver/4172/trunk/test
+/svn/!svn/ver/4411/trunk/test
 END
 object_daddy_helpers.rb
 K 25
@@ -13,7 +13,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4010/trunk/test/test_helper.rb
+/svn/!svn/ver/4366/trunk/test/test_helper.rb
 END
 helper_testcase.rb
 K 25
--- a/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-11-17T18:27:38.712585Z
+4411
+jplang
 
 
 
@@ -72,10 +72,10 @@
 
 
 
-2010-09-23T14:37:45.443777Z
-ac78351cc24dae03cb70f9e4bd9163fa
-2010-08-19T22:24:42.251508Z
-4010
+2010-11-19T13:04:46.868876Z
+cc87df32bc2794f57f75ec6b0ed7e373
+2010-11-05T17:49:20.446583Z
+4366
 edavis10
 has-props
 
@@ -98,7 +98,7 @@
 
 
 
-6789
+16405
 
 functional
 dir
--- a/test/.svn/text-base/test_helper.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/.svn/text-base/test_helper.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -113,11 +113,15 @@
   def self.repository_configured?(vendor)
     File.directory?(repository_path(vendor))
   end
+  
+  def assert_error_tag(options={})
+    assert_tag({:tag => 'p', :attributes => { :id => 'errorExplanation' }}.merge(options))
+  end
 
   # Shoulda macros
   def self.should_render_404
     should_respond_with :not_found
-    should_render_template 'common/404'
+    should_render_template 'common/error'
   end
 
   def self.should_have_before_filter(expected_method, options = {})
@@ -181,4 +185,236 @@
       assert !user.new_record?
     end
   end
+
+  # Test that a request allows the three types of API authentication
+  #
+  # * HTTP Basic with username and password
+  # * HTTP Basic with an api key for the username
+  # * Key based with the key=X parameter
+  #
+  # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete)
+  # @param [String] url the request url
+  # @param [optional, Hash] parameters additional request parameters
+  # @param [optional, Hash] options additional options
+  # @option options [Symbol] :success_code Successful response code (:success)
+  # @option options [Symbol] :failure_code Failure response code (:unauthorized)
+  def self.should_allow_api_authentication(http_method, url, parameters={}, options={})
+    should_allow_http_basic_auth_with_username_and_password(http_method, url, parameters, options)
+    should_allow_http_basic_auth_with_key(http_method, url, parameters, options)
+    should_allow_key_based_auth(http_method, url, parameters, options)
+  end
+
+  # Test that a request allows the username and password for HTTP BASIC
+  #
+  # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete)
+  # @param [String] url the request url
+  # @param [optional, Hash] parameters additional request parameters
+  # @param [optional, Hash] options additional options
+  # @option options [Symbol] :success_code Successful response code (:success)
+  # @option options [Symbol] :failure_code Failure response code (:unauthorized)
+  def self.should_allow_http_basic_auth_with_username_and_password(http_method, url, parameters={}, options={})
+    success_code = options[:success_code] || :success
+    failure_code = options[:failure_code] || :unauthorized
+    
+    context "should allow http basic auth using a username and password for #{http_method} #{url}" do
+      context "with a valid HTTP authentication" do
+        setup do
+          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password', :admin => true) # Admin so they can access the project
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
+          send(http_method, url, parameters, {:authorization => @authorization})
+        end
+        
+        should_respond_with success_code
+        should_respond_with_content_type_based_on_url(url)
+        should "login as the user" do
+          assert_equal @user, User.current
+        end
+      end
+
+      context "with an invalid HTTP authentication" do
+        setup do
+          @user = User.generate_with_protected!
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password')
+          send(http_method, url, parameters, {:authorization => @authorization})
+        end
+        
+        should_respond_with failure_code
+        should_respond_with_content_type_based_on_url(url)
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+      
+      context "without credentials" do
+        setup do
+          send(http_method, url, parameters, {:authorization => ''})
+        end
+
+        should_respond_with failure_code
+        should_respond_with_content_type_based_on_url(url)
+        should "include_www_authenticate_header" do
+          assert @controller.response.headers.has_key?('WWW-Authenticate')
+        end
+      end
+    end
+
+  end
+
+  # Test that a request allows the API key with HTTP BASIC
+  #
+  # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete)
+  # @param [String] url the request url
+  # @param [optional, Hash] parameters additional request parameters
+  # @param [optional, Hash] options additional options
+  # @option options [Symbol] :success_code Successful response code (:success)
+  # @option options [Symbol] :failure_code Failure response code (:unauthorized)
+  def self.should_allow_http_basic_auth_with_key(http_method, url, parameters={}, options={})
+    success_code = options[:success_code] || :success
+    failure_code = options[:failure_code] || :unauthorized
+
+    context "should allow http basic auth with a key for #{http_method} #{url}" do
+      context "with a valid HTTP authentication using the API token" do
+        setup do
+          @user = User.generate_with_protected!(:admin => true)
+          @token = Token.generate!(:user => @user, :action => 'api')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
+          send(http_method, url, parameters, {:authorization => @authorization})
+        end
+        
+        should_respond_with success_code
+        should_respond_with_content_type_based_on_url(url)
+        should_be_a_valid_response_string_based_on_url(url)
+        should "login as the user" do
+          assert_equal @user, User.current
+        end
+      end
+
+      context "with an invalid HTTP authentication" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'feeds')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
+          send(http_method, url, parameters, {:authorization => @authorization})
+        end
+
+        should_respond_with failure_code
+        should_respond_with_content_type_based_on_url(url)
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+    end
+  end
+  
+  # Test that a request allows full key authentication
+  #
+  # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete)
+  # @param [String] url the request url, without the key=ZXY parameter
+  # @param [optional, Hash] parameters additional request parameters
+  # @param [optional, Hash] options additional options
+  # @option options [Symbol] :success_code Successful response code (:success)
+  # @option options [Symbol] :failure_code Failure response code (:unauthorized)
+  def self.should_allow_key_based_auth(http_method, url, parameters={}, options={})
+    success_code = options[:success_code] || :success
+    failure_code = options[:failure_code] || :unauthorized
+
+    context "should allow key based auth using key=X for #{http_method} #{url}" do
+      context "with a valid api token" do
+        setup do
+          @user = User.generate_with_protected!(:admin => true)
+          @token = Token.generate!(:user => @user, :action => 'api')
+          # Simple url parse to add on ?key= or &key=
+          request_url = if url.match(/\?/)
+                          url + "&key=#{@token.value}"
+                        else
+                          url + "?key=#{@token.value}"
+                        end
+          send(http_method, request_url, parameters)
+        end
+        
+        should_respond_with success_code
+        should_respond_with_content_type_based_on_url(url)
+        should_be_a_valid_response_string_based_on_url(url)
+        should "login as the user" do
+          assert_equal @user, User.current
+        end
+      end
+
+      context "with an invalid api token" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'feeds')
+          # Simple url parse to add on ?key= or &key=
+          request_url = if url.match(/\?/)
+                          url + "&key=#{@token.value}"
+                        else
+                          url + "?key=#{@token.value}"
+                        end
+          send(http_method, request_url, parameters)
+        end
+        
+        should_respond_with failure_code
+        should_respond_with_content_type_based_on_url(url)
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+    end
+    
+  end
+
+  # Uses should_respond_with_content_type based on what's in the url:
+  #
+  # '/project/issues.xml' => should_respond_with_content_type :xml
+  # '/project/issues.json' => should_respond_with_content_type :json
+  #
+  # @param [String] url Request
+  def self.should_respond_with_content_type_based_on_url(url)
+    case
+    when url.match(/xml/i)
+      should_respond_with_content_type :xml
+    when url.match(/json/i)
+      should_respond_with_content_type :json
+    else
+      raise "Unknown content type for should_respond_with_content_type_based_on_url: #{url}"
+    end
+    
+  end
+
+  # Uses the url to assert which format the response should be in
+  #
+  # '/project/issues.xml' => should_be_a_valid_xml_string
+  # '/project/issues.json' => should_be_a_valid_json_string
+  #
+  # @param [String] url Request
+  def self.should_be_a_valid_response_string_based_on_url(url)
+    case
+    when url.match(/xml/i)
+      should_be_a_valid_xml_string
+    when url.match(/json/i)
+      should_be_a_valid_json_string
+    else
+      raise "Unknown content type for should_be_a_valid_response_based_on_url: #{url}"
+    end
+    
+  end
+  
+  # Checks that the response is a valid JSON string
+  def self.should_be_a_valid_json_string
+    should "be a valid JSON string (or empty)" do
+      assert (response.body.blank? || ActiveSupport::JSON.decode(response.body))
+    end
+  end
+
+  # Checks that the response is a valid XML string
+  def self.should_be_a_valid_xml_string
+    should "be a valid XML string" do
+      assert REXML::Document.new(response.body)
+    end
+  end
+  
 end
+
+# Simple module to "namespace" all of the API tests
+module ApiTest
+end
--- a/test/exemplars/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/exemplars/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 39
-/svn/!svn/ver/4010/trunk/test/exemplars
+/svn/!svn/ver/4406/trunk/test/exemplars
 END
 message_exemplar.rb
 K 25
@@ -79,7 +79,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/3759/trunk/test/exemplars/project_exemplar.rb
+/svn/!svn/ver/4406/trunk/test/exemplars/project_exemplar.rb
 END
 custom_value_exemplar.rb
 K 25
@@ -135,17 +135,23 @@
 V 57
 /svn/!svn/ver/3340/trunk/test/exemplars/board_exemplar.rb
 END
+member_role_exemplar.rb
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/3340/trunk/test/exemplars/member_role_exemplar.rb
+END
 issue_exemplar.rb
 K 25
 svn:wc:ra_dav:version-url
 V 57
 /svn/!svn/ver/3398/trunk/test/exemplars/issue_exemplar.rb
 END
-member_role_exemplar.rb
+tracker_exemplar.rb
 K 25
 svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/3340/trunk/test/exemplars/member_role_exemplar.rb
+V 59
+/svn/!svn/ver/2930/trunk/test/exemplars/tracker_exemplar.rb
 END
 issue_status_exemplar.rb
 K 25
@@ -153,11 +159,11 @@
 V 64
 /svn/!svn/ver/2930/trunk/test/exemplars/issue_status_exemplar.rb
 END
-tracker_exemplar.rb
+time_entry_activity.rb
 K 25
 svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/2930/trunk/test/exemplars/tracker_exemplar.rb
+V 62
+/svn/!svn/ver/2930/trunk/test/exemplars/time_entry_activity.rb
 END
 subversion_repository_exemplar.rb
 K 25
@@ -165,11 +171,11 @@
 V 73
 /svn/!svn/ver/3340/trunk/test/exemplars/subversion_repository_exemplar.rb
 END
-time_entry_activity.rb
+role_exemplar.rb
 K 25
 svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/2930/trunk/test/exemplars/time_entry_activity.rb
+V 56
+/svn/!svn/ver/2930/trunk/test/exemplars/role_exemplar.rb
 END
 changeset_exemplar.rb
 K 25
@@ -177,12 +183,6 @@
 V 61
 /svn/!svn/ver/3340/trunk/test/exemplars/changeset_exemplar.rb
 END
-role_exemplar.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/2930/trunk/test/exemplars/role_exemplar.rb
-END
 comment_exemplar.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -211,7 +211,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 56
-/svn/!svn/ver/3010/trunk/test/exemplars/user_exemplar.rb
+/svn/!svn/ver/4218/trunk/test/exemplars/user_exemplar.rb
 END
 time_entry_exemplar.rb
 K 25
--- a/test/exemplars/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/exemplars/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/exemplars
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-19T22:24:42.251508Z
-4010
-edavis10
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 
 
 
@@ -440,33 +440,33 @@
 
 
 
-2010-09-23T14:37:45.291809Z
-0b0e9ab56f34b8d5f3fd7265d2dd4ffe
-2010-05-27T17:16:05.103190Z
-3759
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-816
+2010-11-19T13:04:41.365641Z
+9be3a10325013fa24b00903db30d1ca3
+2010-11-14T16:24:21.989522Z
+4406
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+810
 
 custom_value_exemplar.rb
 file
@@ -774,6 +774,40 @@
 
 481
 
+issue_exemplar.rb
+file
+
+
+
+
+2010-09-23T14:37:45.287807Z
+92ac53d6b3a2e00ae1a9e0e4bc5d548b
+2010-02-08T18:53:12.750770Z
+3398
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+449
+
 member_role_exemplar.rb
 file
 
@@ -808,16 +842,16 @@
 
 250
 
-issue_exemplar.rb
+issue_status_exemplar.rb
 file
 
 
 
 
 2010-09-23T14:37:45.287807Z
-92ac53d6b3a2e00ae1a9e0e4bc5d548b
-2010-02-08T18:53:12.750770Z
-3398
+d17dfd87c9c081965089712a4ce42a6d
+2009-10-18T22:25:00.956502Z
+2930
 edavis10
 
 
@@ -840,7 +874,7 @@
 
 
 
-449
+182
 
 tracker_exemplar.rb
 file
@@ -876,16 +910,16 @@
 
 179
 
-issue_status_exemplar.rb
+subversion_repository_exemplar.rb
 file
 
 
 
 
-2010-09-23T14:37:45.287807Z
-d17dfd87c9c081965089712a4ce42a6d
-2009-10-18T22:25:00.956502Z
-2930
+2010-09-23T14:37:45.291809Z
+908d8689f3ff469978b8af8bb55084b4
+2010-01-27T18:29:03.119133Z
+3340
 edavis10
 
 
@@ -908,7 +942,7 @@
 
 
 
-182
+235
 
 time_entry_activity.rb
 file
@@ -944,14 +978,14 @@
 
 236
 
-subversion_repository_exemplar.rb
+changeset_exemplar.rb
 file
 
 
 
 
-2010-09-23T14:37:45.291809Z
-908d8689f3ff469978b8af8bb55084b4
+2010-09-23T14:37:45.287807Z
+c01820cc719616bb5a0895cfddb40798
 2010-01-27T18:29:03.119133Z
 3340
 edavis10
@@ -976,7 +1010,7 @@
 
 
 
-235
+377
 
 role_exemplar.rb
 file
@@ -1012,40 +1046,6 @@
 
 157
 
-changeset_exemplar.rb
-file
-
-
-
-
-2010-09-23T14:37:45.287807Z
-c01820cc719616bb5a0895cfddb40798
-2010-01-27T18:29:03.119133Z
-3340
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-377
-
 comment_exemplar.rb
 file
 
@@ -1188,10 +1188,10 @@
 
 
 
-2010-09-23T14:37:45.291809Z
-c4ea7f6c706d04e3ef3f809e37867766
-2009-11-05T21:32:26.784578Z
-3010
+2010-11-19T13:04:41.365641Z
+44278bb3b28eed2566aab063777becf7
+2010-09-28T18:22:10.512346Z
+4218
 edavis10
 
 
@@ -1214,7 +1214,7 @@
 
 
 
-648
+650
 
 time_entry_exemplar.rb
 file
--- a/test/exemplars/.svn/text-base/project_exemplar.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/exemplars/.svn/text-base/project_exemplar.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -18,7 +18,7 @@
   end
 
   def self.all_modules
-    returning [] do |modules|
+    [].tap do |modules|
       Redmine::AccessControl.available_project_modules.each do |name|
         modules << EnabledModule.new(:name => name.to_s)
       end
--- a/test/exemplars/.svn/text-base/user_exemplar.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/exemplars/.svn/text-base/user_exemplar.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -3,7 +3,7 @@
   generator_for :mail, :method => :next_email
   generator_for :firstname, :method => :next_firstname
   generator_for :lastname, :method => :next_lastname
-
+  
   def self.next_login
     @gen_login ||= 'user1'
     @gen_login.succ!
--- a/test/exemplars/project_exemplar.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/exemplars/project_exemplar.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -18,7 +18,7 @@
   end
 
   def self.all_modules
-    returning [] do |modules|
+    [].tap do |modules|
       Redmine::AccessControl.available_project_modules.each do |name|
         modules << EnabledModule.new(:name => name.to_s)
       end
--- a/test/exemplars/user_exemplar.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/exemplars/user_exemplar.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -3,7 +3,7 @@
   generator_for :mail, :method => :next_email
   generator_for :firstname, :method => :next_firstname
   generator_for :lastname, :method => :next_lastname
-
+  
   def self.next_login
     @gen_login ||= 'user1'
     @gen_login.succ!
--- a/test/fixtures/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 38
-/svn/!svn/ver/4013/trunk/test/fixtures
+/svn/!svn/ver/4404/trunk/test/fixtures
 END
 journal_details.yml
 K 25
@@ -61,7 +61,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 56
-/svn/!svn/ver/3112/trunk/test/fixtures/custom_values.yml
+/svn/!svn/ver/4382/trunk/test/fixtures/custom_values.yml
 END
 issue_categories.yml
 K 25
@@ -105,23 +105,17 @@
 V 50
 /svn/!svn/ver/2895/trunk/test/fixtures/changes.yml
 END
-enumerations.yml
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3573/trunk/test/fixtures/enumerations.yml
-END
 custom_fields_projects.yml
 K 25
 svn:wc:ra_dav:version-url
 V 65
 /svn/!svn/ver/3278/trunk/test/fixtures/custom_fields_projects.yml
 END
-issues.yml
+enumerations.yml
 K 25
 svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3663/trunk/test/fixtures/issues.yml
+V 55
+/svn/!svn/ver/3573/trunk/test/fixtures/enumerations.yml
 END
 member_roles.yml
 K 25
@@ -129,23 +123,35 @@
 V 55
 /svn/!svn/ver/3250/trunk/test/fixtures/member_roles.yml
 END
+issues.yml
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/4186/trunk/test/fixtures/issues.yml
+END
 queries.yml
 K 25
 svn:wc:ra_dav:version-url
 V 50
 /svn/!svn/ver/3071/trunk/test/fixtures/queries.yml
 END
+watchers.yml
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/2456/trunk/test/fixtures/watchers.yml
+END
 wiki_contents.yml
 K 25
 svn:wc:ra_dav:version-url
 V 56
 /svn/!svn/ver/3412/trunk/test/fixtures/wiki_contents.yml
 END
-watchers.yml
+enabled_modules.yml
 K 25
 svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/2456/trunk/test/fixtures/watchers.yml
+V 58
+/svn/!svn/ver/4013/trunk/test/fixtures/enabled_modules.yml
 END
 wiki_pages.yml
 K 25
@@ -153,11 +159,11 @@
 V 53
 /svn/!svn/ver/3412/trunk/test/fixtures/wiki_pages.yml
 END
-enabled_modules.yml
+wiki_content_versions.yml
 K 25
 svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/4013/trunk/test/fixtures/enabled_modules.yml
+V 64
+/svn/!svn/ver/2895/trunk/test/fixtures/wiki_content_versions.yml
 END
 comments.yml
 K 25
@@ -165,30 +171,24 @@
 V 51
 /svn/!svn/ver/2895/trunk/test/fixtures/comments.yml
 END
-wiki_content_versions.yml
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/2895/trunk/test/fixtures/wiki_content_versions.yml
-END
 members.yml
 K 25
 svn:wc:ra_dav:version-url
 V 50
 /svn/!svn/ver/3250/trunk/test/fixtures/members.yml
 END
+workflows.yml
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/2895/trunk/test/fixtures/workflows.yml
+END
 journals.yml
 K 25
 svn:wc:ra_dav:version-url
 V 51
 /svn/!svn/ver/3123/trunk/test/fixtures/journals.yml
 END
-workflows.yml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/2895/trunk/test/fixtures/workflows.yml
-END
 custom_fields.yml
 K 25
 svn:wc:ra_dav:version-url
@@ -199,7 +199,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/3024/trunk/test/fixtures/users.yml
+/svn/!svn/ver/4216/trunk/test/fixtures/users.yml
 END
 auth_sources.yml
 K 25
--- a/test/fixtures/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-22T18:42:00.112555Z
-4013
-edavis10
+2010-11-14T13:48:01.671461Z
+4404
+jplang
 
 
 
@@ -313,10 +313,10 @@
 
 
 
-2010-09-23T14:37:45.319762Z
-7c37bf142019bf7e3d15cb2f10c6c5ba
-2009-12-02T18:57:17.339733Z
-3112
+2010-11-19T13:04:46.864726Z
+4d480d87e42663a5e874353649c86039
+2010-11-07T14:15:01.891476Z
+4382
 jplang
 has-props
 
@@ -339,7 +339,7 @@
 
 
 
-1919
+1933
 
 projects.yml
 file
@@ -616,6 +616,43 @@
 
 377
 
+mailer
+dir
+
+enumerations.yml
+file
+
+
+
+
+2010-09-23T14:37:45.323763Z
+bafbddc194242dbdcac1f2bfc550c27b
+2010-03-13T14:56:49.379682Z
+3573
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1391
+
 custom_fields_projects.yml
 file
 
@@ -650,17 +687,17 @@
 
 71
 
-enumerations.yml
+issues.yml
 file
 
 
 
 
-2010-09-23T14:37:45.323763Z
-bafbddc194242dbdcac1f2bfc550c27b
-2010-03-13T14:56:49.379682Z
-3573
-jplang
+2010-11-19T13:04:46.864726Z
+6d21fa7811e1d7b4a1db0f4062fcba45
+2010-09-26T18:13:31.522853Z
+4186
+edavis10
 has-props
 
 
@@ -682,10 +719,7 @@
 
 
 
-1391
-
-mailer
-dir
+5661
 
 member_roles.yml
 file
@@ -721,40 +755,6 @@
 
 692
 
-issues.yml
-file
-
-
-
-
-2010-09-23T14:37:45.327799Z
-5c4431f5ee0ecd68c45712b87da9ca3e
-2010-04-11T16:27:37.584909Z
-3663
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5644
-
 queries.yml
 file
 
@@ -789,6 +789,40 @@
 
 2345
 
+wiki_contents.yml
+file
+
+
+
+
+2010-09-23T14:37:45.355763Z
+8e7549cddb3ed2eb4c5778e3506e3e0c
+2010-02-11T19:30:53.136370Z
+3412
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1795
+
 watchers.yml
 file
 
@@ -823,17 +857,17 @@
 
 219
 
-wiki_contents.yml
+enabled_modules.yml
 file
 
 
 
 
-2010-09-23T14:37:45.355763Z
-8e7549cddb3ed2eb4c5778e3506e3e0c
-2010-02-11T19:30:53.136370Z
-3412
-jplang
+2010-09-23T14:37:45.319762Z
+8a815e166641ad170ffddcf33646ca04
+2010-08-22T18:42:00.112555Z
+4013
+edavis10
 has-props
 
 
@@ -855,7 +889,7 @@
 
 
 
-1795
+1539
 
 wiki_pages.yml
 file
@@ -891,40 +925,6 @@
 
 1227
 
-enabled_modules.yml
-file
-
-
-
-
-2010-09-23T14:37:45.319762Z
-8a815e166641ad170ffddcf33646ca04
-2010-08-22T18:42:00.112555Z
-4013
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1539
-
 comments.yml
 file
 
@@ -1141,11 +1141,11 @@
 
 
 
-2010-09-23T14:37:45.351765Z
-ac7c965e48b0bb9568999ecaa86a627e
-2009-11-11T10:48:54.418561Z
-3024
-jplang
+2010-11-19T13:04:46.864726Z
+f590d477ec468a76d8d31d5ed99de0e6
+2010-09-28T18:22:00.231301Z
+4216
+edavis10
 has-props
 
 
@@ -1167,7 +1167,7 @@
 
 
 
-3262
+3294
 
 auth_sources.yml
 file
--- a/test/fixtures/.svn/text-base/custom_values.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/.svn/text-base/custom_values.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -28,7 +28,7 @@
   custom_field_id: 4
   customized_id: 2
   id: 3
-  value: ""
+  value: "01 42 50 00 00"
 custom_values_004: 
   customized_type: Issue
   custom_field_id: 2
--- a/test/fixtures/.svn/text-base/issues.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/.svn/text-base/issues.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -38,6 +38,7 @@
   lft: 1
   rgt: 2
   lock_version: 3
+  done_ratio: 30
 issues_003: 
   created_on: 2006-07-19 21:07:27 +02:00
   project_id: 1
--- a/test/fixtures/.svn/text-base/users.yml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/.svn/text-base/users.yml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -12,7 +12,7 @@
   firstname: Robert
   id: 4
   auth_source_id: 
-  mail_notification: true
+  mail_notification: all
   login: rhill
   type: User
 users_001: 
@@ -28,7 +28,7 @@
   firstname: redMine
   id: 1
   auth_source_id: 
-  mail_notification: true
+  mail_notification: all
   login: admin
   type: User
 users_002: 
@@ -44,7 +44,7 @@
   firstname: John
   id: 2
   auth_source_id: 
-  mail_notification: true
+  mail_notification: all
   login: jsmith
   type: User
 users_003: 
@@ -60,7 +60,7 @@
   firstname: Dave
   id: 3
   auth_source_id: 
-  mail_notification: true
+  mail_notification: all
   login: dlopper
   type: User
 users_005: 
@@ -77,7 +77,7 @@
   lastname: Lopper2
   firstname: Dave2
   auth_source_id: 
-  mail_notification: true
+  mail_notification: all
   login: dlopper2
   type: User
 users_006: 
@@ -93,7 +93,7 @@
   lastname: Anonymous
   firstname: ''
   auth_source_id: 
-  mail_notification: false
+  mail_notification: only_my_events
   login: ''
   type: AnonymousUser
 users_007: 
@@ -109,7 +109,7 @@
   lastname: One
   firstname: Some
   auth_source_id: 
-  mail_notification: false
+  mail_notification: only_my_events
   login: someone
   type: User
 users_008: 
@@ -125,7 +125,7 @@
   lastname: Misc
   firstname: User
   auth_source_id: 
-  mail_notification: false
+  mail_notification: only_my_events
   login: miscuser8
   type: User
 users_009: 
@@ -141,7 +141,7 @@
   lastname: Misc
   firstname: User
   auth_source_id: 
-  mail_notification: false
+  mail_notification: only_my_events
   login: miscuser9
   type: User
 groups_010: 
@@ -153,4 +153,4 @@
   lastname: B Team
   type: Group
 
-  
\ No newline at end of file
+  
--- a/test/fixtures/custom_values.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/custom_values.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -28,7 +28,7 @@
   custom_field_id: 4
   customized_id: 2
   id: 3
-  value: ""
+  value: "01 42 50 00 00"
 custom_values_004: 
   customized_type: Issue
   custom_field_id: 2
--- a/test/fixtures/diffs/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/diffs/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/fixtures/diffs
 http://redmine.rubyforge.org/svn
 
--- a/test/fixtures/encoding/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/encoding/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/fixtures/encoding
 http://redmine.rubyforge.org/svn
 
--- a/test/fixtures/files/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/files/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/fixtures/files
 http://redmine.rubyforge.org/svn
 
--- a/test/fixtures/issues.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/issues.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -38,6 +38,7 @@
   lft: 1
   rgt: 2
   lock_version: 3
+  done_ratio: 30
 issues_003: 
   created_on: 2006-07-19 21:07:27 +02:00
   project_id: 1
--- a/test/fixtures/ldap/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/ldap/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/fixtures/ldap
 http://redmine.rubyforge.org/svn
 
--- a/test/fixtures/mail_handler/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/mail_handler/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/3801/trunk/test/fixtures/mail_handler
+/svn/!svn/ver/4404/trunk/test/fixtures/mail_handler
+END
+message_reply_by_subject.eml
+K 25
+svn:wc:ra_dav:version-url
+V 80
+/svn/!svn/ver/2294/trunk/test/fixtures/mail_handler/message_reply_by_subject.eml
 END
 ticket_html_only.eml
 K 25
@@ -9,11 +15,11 @@
 V 72
 /svn/!svn/ver/2136/trunk/test/fixtures/mail_handler/ticket_html_only.eml
 END
-message_reply_by_subject.eml
+issue_update_with_multiple_quoted_reply_above.eml
 K 25
 svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/2294/trunk/test/fixtures/mail_handler/message_reply_by_subject.eml
+V 101
+/svn/!svn/ver/4361/trunk/test/fixtures/mail_handler/issue_update_with_multiple_quoted_reply_above.eml
 END
 ticket_with_spaces_between_attribute_and_separator.eml
 K 25
@@ -21,6 +27,12 @@
 V 106
 /svn/!svn/ver/2838/trunk/test/fixtures/mail_handler/ticket_with_spaces_between_attribute_and_separator.eml
 END
+ticket_with_localized_attributes.eml
+K 25
+svn:wc:ra_dav:version-url
+V 88
+/svn/!svn/ver/4395/trunk/test/fixtures/mail_handler/ticket_with_localized_attributes.eml
+END
 ticket_with_long_subject.eml
 K 25
 svn:wc:ra_dav:version-url
@@ -69,17 +81,35 @@
 V 78
 /svn/!svn/ver/2789/trunk/test/fixtures/mail_handler/ticket_by_unknown_user.eml
 END
+ticket_with_invalid_attributes.eml
+K 25
+svn:wc:ra_dav:version-url
+V 86
+/svn/!svn/ver/4404/trunk/test/fixtures/mail_handler/ticket_with_invalid_attributes.eml
+END
 ticket_reply_with_status.eml
 K 25
 svn:wc:ra_dav:version-url
 V 80
-/svn/!svn/ver/3764/trunk/test/fixtures/mail_handler/ticket_reply_with_status.eml
+/svn/!svn/ver/4394/trunk/test/fixtures/mail_handler/ticket_reply_with_status.eml
 END
 ticket_on_given_project.eml
 K 25
 svn:wc:ra_dav:version-url
 V 79
-/svn/!svn/ver/3764/trunk/test/fixtures/mail_handler/ticket_on_given_project.eml
+/svn/!svn/ver/4394/trunk/test/fixtures/mail_handler/ticket_on_given_project.eml
+END
+issue_update_with_quoted_reply_above.eml
+K 25
+svn:wc:ra_dav:version-url
+V 92
+/svn/!svn/ver/4361/trunk/test/fixtures/mail_handler/issue_update_with_quoted_reply_above.eml
+END
+ticket_reply.eml
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/2288/trunk/test/fixtures/mail_handler/ticket_reply.eml
 END
 ticket_with_custom_fields.eml
 K 25
@@ -87,12 +117,6 @@
 V 81
 /svn/!svn/ver/2211/trunk/test/fixtures/mail_handler/ticket_with_custom_fields.eml
 END
-ticket_reply.eml
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/2288/trunk/test/fixtures/mail_handler/ticket_reply.eml
-END
 message_reply.eml
 K 25
 svn:wc:ra_dav:version-url
--- a/test/fixtures/mail_handler/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/mail_handler/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/fixtures/mail_handler
 http://redmine.rubyforge.org/svn
 
 
 
-2010-06-20T16:22:36.211973Z
-3801
-edavis10
+2010-11-14T13:48:01.671461Z
+4404
+jplang
 
 
 
@@ -26,6 +26,40 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+message_reply_by_subject.eml
+file
+
+
+
+
+2010-09-23T14:37:45.339796Z
+09130a1100cb410ed07fdff5564b2993
+2009-01-21T18:22:30.765588Z
+2294
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+410
+
 ticket_html_only.eml
 file
 
@@ -60,18 +94,17 @@
 
 691
 
-message_reply_by_subject.eml
+issue_update_with_multiple_quoted_reply_above.eml
 file
 
 
 
 
-2010-09-23T14:37:45.339796Z
-09130a1100cb410ed07fdff5564b2993
-2009-01-21T18:22:30.765588Z
-2294
-jplang
-has-props
+2010-11-19T13:04:46.204713Z
+ef4c0db9f76d81792292785d2ae9cb6a
+2010-11-02T19:00:31.177706Z
+4361
+edavis10
 
 
 
@@ -92,7 +125,8 @@
 
 
 
-410
+
+2018
 
 ticket_with_spaces_between_attribute_and_separator.eml
 file
@@ -128,6 +162,40 @@
 
 1903
 
+ticket_with_localized_attributes.eml
+file
+
+
+
+
+2010-11-19T13:04:46.204713Z
+8ac895d880e6f19fc21333c4003babaf
+2010-11-12T12:29:35.878777Z
+4395
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1944
+
 ticket_with_long_subject.eml
 file
 
@@ -400,17 +468,51 @@
 
 526
 
+ticket_with_invalid_attributes.eml
+file
+
+
+
+
+2010-11-19T13:04:46.204713Z
+605f28e31469b6897f33cf34bbc1ad0a
+2010-11-14T13:48:01.671461Z
+4404
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2028
+
 ticket_reply_with_status.eml
 file
 
 
 
 
-2010-09-23T14:37:45.339796Z
-2a98751dfc76fcc9eefa7eaf2a8098e4
-2010-05-29T00:05:24.040852Z
-3764
-edavis10
+2010-11-19T13:04:46.204713Z
+88a90b088de41d263e9135d1810cf58c
+2010-11-12T11:34:53.754717Z
+4394
+jplang
 
 
 
@@ -432,7 +534,7 @@
 
 
 
-2026
+2065
 
 ticket_on_given_project.eml
 file
@@ -440,10 +542,44 @@
 
 
 
-2010-09-23T14:37:45.339796Z
-6cd634ffcd88be96cbe8789ae9545c5f
-2010-05-29T00:05:24.040852Z
-3764
+2010-11-19T13:04:46.204713Z
+af7f3e5f9caddc2cad5fba0ba9d73882
+2010-11-12T11:34:53.754717Z
+4394
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2255
+
+issue_update_with_quoted_reply_above.eml
+file
+
+
+
+
+2010-11-19T13:04:46.204713Z
+977375e727ce2d63ce878f877d692c62
+2010-11-02T19:00:31.177706Z
+4361
 edavis10
 
 
@@ -466,7 +602,41 @@
 
 
 
-2195
+1979
+
+ticket_reply.eml
+file
+
+
+
+
+2010-09-23T14:37:45.339796Z
+4bd4decc00f83404fdd1a835809e4552
+2009-01-19T18:29:07.726757Z
+2288
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2012
 
 ticket_with_custom_fields.eml
 file
@@ -502,40 +672,6 @@
 
 1887
 
-ticket_reply.eml
-file
-
-
-
-
-2010-09-23T14:37:45.339796Z
-4bd4decc00f83404fdd1a835809e4552
-2009-01-19T18:29:07.726757Z
-2288
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2012
-
 message_reply.eml
 file
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/mail_handler/.svn/text-base/issue_update_with_multiple_quoted_reply_above.eml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,48 @@
+Return-Path: <JSmith@somenet.foo>
+Received: from osiris ([127.0.0.1])
+	by OSIRIS
+	with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
+Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
+In-Reply-To: <redmine.issue-2.20060719210421@osiris>
+From: "John Smith" <JSmith@somenet.foo>
+To: <redmine@somenet.foo>
+Subject: Re: update to issue 2
+Date: Sun, 22 Jun 2008 12:28:07 +0200
+MIME-Version: 1.0
+Content-Type: text/plain;
+	format=flowed;
+	charset="iso-8859-1";
+	reply-type=original
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2900.2869
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
+
+An update to the issue by the sender.
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet 
+turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus 
+blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti 
+sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In 
+in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras 
+sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum 
+id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus 
+eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique 
+sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et 
+malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
+platea dictumst.
+
+>> > --- Reply above. Do not remove this line. ---
+>> > 
+>> > Issue #6779 has been updated by Eric Davis.
+>> > 
+>> > Subject changed from Projects with JSON to Project JSON API
+>> > Status changed from New to Assigned
+>> > Assignee set to Eric Davis
+>> > Priority changed from Low to Normal
+>> > Estimated time deleted (1.00)
+>> > 
+>> > Looks like the JSON api for projects was missed. I'm going to be
+>> > reviewing the existing APIs and trying to clean them up over the next
+>> > few weeks.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/mail_handler/.svn/text-base/issue_update_with_quoted_reply_above.eml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,48 @@
+Return-Path: <JSmith@somenet.foo>
+Received: from osiris ([127.0.0.1])
+	by OSIRIS
+	with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
+Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
+In-Reply-To: <redmine.issue-2.20060719210421@osiris>
+From: "John Smith" <JSmith@somenet.foo>
+To: <redmine@somenet.foo>
+Subject: Re: update to issue 2
+Date: Sun, 22 Jun 2008 12:28:07 +0200
+MIME-Version: 1.0
+Content-Type: text/plain;
+	format=flowed;
+	charset="iso-8859-1";
+	reply-type=original
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2900.2869
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
+
+An update to the issue by the sender.
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet 
+turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus 
+blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti 
+sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In 
+in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras 
+sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum 
+id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus 
+eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique 
+sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et 
+malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
+platea dictumst.
+
+> --- Reply above. Do not remove this line. ---
+> 
+> Issue #6779 has been updated by Eric Davis.
+> 
+> Subject changed from Projects with JSON to Project JSON API
+> Status changed from New to Assigned
+> Assignee set to Eric Davis
+> Priority changed from Low to Normal
+> Estimated time deleted (1.00)
+> 
+> Looks like the JSON api for projects was missed. I'm going to be
+> reviewing the existing APIs and trying to clean them up over the next
+> few weeks.
--- a/test/fixtures/mail_handler/.svn/text-base/ticket_on_given_project.eml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/mail_handler/.svn/text-base/ticket_on_given_project.eml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -54,4 +54,7 @@
 due date: 2010-12-31
 Start Date:2010-01-01
 Assigned to: John Smith
+fixed version: alpha
+estimated hours: 2.5
+done ratio: 30
 
--- a/test/fixtures/mail_handler/.svn/text-base/ticket_reply_with_status.eml.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/mail_handler/.svn/text-base/ticket_reply_with_status.eml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -29,6 +29,7 @@
 due date: 2010-12-31
 Start Date:2010-01-01
 Assigned to: jsmith@somenet.foo
+searchable field: Updated custom value
 
 ------=_NextPart_000_0067_01C8D3CE.711F9CC0
 Content-Type: text/html;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/mail_handler/.svn/text-base/ticket_with_invalid_attributes.eml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,47 @@
+Return-Path: <jsmith@somenet.foo>
+Received: from osiris ([127.0.0.1])
+	by OSIRIS
+	with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
+Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
+From: "John Smith" <jsmith@somenet.foo>
+To: <redmine@somenet.foo>
+Subject: New ticket on a given project
+Date: Sun, 22 Jun 2008 12:28:07 +0200
+MIME-Version: 1.0
+Content-Type: text/plain;
+	format=flowed;
+	charset="iso-8859-1";
+	reply-type=original
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2900.2869
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet 
+turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus 
+blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti 
+sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In 
+in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras 
+sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum 
+id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus 
+eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique 
+sed, mauris. Pellentesque habitant morbi tristique senectus et netus et 
+malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
+platea dictumst.
+
+Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque 
+sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. 
+Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, 
+dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, 
+massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo 
+pulvinar dui, a gravida orci mi eget odio. Nunc a lacus.
+
+Project: onlinestore
+Tracker: Feature request
+category: Stock management
+assigned to: miscuser9@foo.bar
+priority: foo
+done ratio: x
+start date: some day 
+due date: never
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/mail_handler/.svn/text-base/ticket_with_localized_attributes.eml.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,43 @@
+Return-Path: <jsmith@somenet.foo>
+Received: from osiris ([127.0.0.1])
+	by OSIRIS
+	with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
+Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
+From: "John Smith" <jsmith@somenet.foo>
+To: <redmine@somenet.foo>
+Subject: New ticket on a given project
+Date: Sun, 22 Jun 2008 12:28:07 +0200
+MIME-Version: 1.0
+Content-Type: text/plain;
+	format=flowed;
+	charset="iso-8859-1";
+	reply-type=original
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2900.2869
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet 
+turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus 
+blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti 
+sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In 
+in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras 
+sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum 
+id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus 
+eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique 
+sed, mauris. Pellentesque habitant morbi tristique senectus et netus et 
+malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
+platea dictumst.
+
+Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque 
+sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. 
+Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, 
+dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, 
+massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo 
+pulvinar dui, a gravida orci mi eget odio. Nunc a lacus.
+
+Projet: onlinestore
+Tracker: Feature request
+catégorie: Stock management
+priorité: Urgent
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/mail_handler/issue_update_with_multiple_quoted_reply_above.eml	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,48 @@
+Return-Path: <JSmith@somenet.foo>
+Received: from osiris ([127.0.0.1])
+	by OSIRIS
+	with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
+Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
+In-Reply-To: <redmine.issue-2.20060719210421@osiris>
+From: "John Smith" <JSmith@somenet.foo>
+To: <redmine@somenet.foo>
+Subject: Re: update to issue 2
+Date: Sun, 22 Jun 2008 12:28:07 +0200
+MIME-Version: 1.0
+Content-Type: text/plain;
+	format=flowed;
+	charset="iso-8859-1";
+	reply-type=original
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2900.2869
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
+
+An update to the issue by the sender.
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet 
+turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus 
+blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti 
+sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In 
+in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras 
+sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum 
+id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus 
+eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique 
+sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et 
+malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
+platea dictumst.
+
+>> > --- Reply above. Do not remove this line. ---
+>> > 
+>> > Issue #6779 has been updated by Eric Davis.
+>> > 
+>> > Subject changed from Projects with JSON to Project JSON API
+>> > Status changed from New to Assigned
+>> > Assignee set to Eric Davis
+>> > Priority changed from Low to Normal
+>> > Estimated time deleted (1.00)
+>> > 
+>> > Looks like the JSON api for projects was missed. I'm going to be
+>> > reviewing the existing APIs and trying to clean them up over the next
+>> > few weeks.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/mail_handler/issue_update_with_quoted_reply_above.eml	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,48 @@
+Return-Path: <JSmith@somenet.foo>
+Received: from osiris ([127.0.0.1])
+	by OSIRIS
+	with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
+Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
+In-Reply-To: <redmine.issue-2.20060719210421@osiris>
+From: "John Smith" <JSmith@somenet.foo>
+To: <redmine@somenet.foo>
+Subject: Re: update to issue 2
+Date: Sun, 22 Jun 2008 12:28:07 +0200
+MIME-Version: 1.0
+Content-Type: text/plain;
+	format=flowed;
+	charset="iso-8859-1";
+	reply-type=original
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2900.2869
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
+
+An update to the issue by the sender.
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet 
+turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus 
+blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti 
+sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In 
+in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras 
+sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum 
+id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus 
+eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique 
+sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et 
+malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
+platea dictumst.
+
+> --- Reply above. Do not remove this line. ---
+> 
+> Issue #6779 has been updated by Eric Davis.
+> 
+> Subject changed from Projects with JSON to Project JSON API
+> Status changed from New to Assigned
+> Assignee set to Eric Davis
+> Priority changed from Low to Normal
+> Estimated time deleted (1.00)
+> 
+> Looks like the JSON api for projects was missed. I'm going to be
+> reviewing the existing APIs and trying to clean them up over the next
+> few weeks.
--- a/test/fixtures/mail_handler/ticket_on_given_project.eml	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/mail_handler/ticket_on_given_project.eml	Fri Nov 19 13:24:41 2010 +0000
@@ -54,4 +54,7 @@
 due date: 2010-12-31
 Start Date:2010-01-01
 Assigned to: John Smith
+fixed version: alpha
+estimated hours: 2.5
+done ratio: 30
 
--- a/test/fixtures/mail_handler/ticket_reply_with_status.eml	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/mail_handler/ticket_reply_with_status.eml	Fri Nov 19 13:24:41 2010 +0000
@@ -29,6 +29,7 @@
 due date: 2010-12-31
 Start Date:2010-01-01
 Assigned to: jsmith@somenet.foo
+searchable field: Updated custom value
 
 ------=_NextPart_000_0067_01C8D3CE.711F9CC0
 Content-Type: text/html;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/mail_handler/ticket_with_invalid_attributes.eml	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,47 @@
+Return-Path: <jsmith@somenet.foo>
+Received: from osiris ([127.0.0.1])
+	by OSIRIS
+	with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
+Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
+From: "John Smith" <jsmith@somenet.foo>
+To: <redmine@somenet.foo>
+Subject: New ticket on a given project
+Date: Sun, 22 Jun 2008 12:28:07 +0200
+MIME-Version: 1.0
+Content-Type: text/plain;
+	format=flowed;
+	charset="iso-8859-1";
+	reply-type=original
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2900.2869
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet 
+turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus 
+blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti 
+sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In 
+in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras 
+sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum 
+id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus 
+eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique 
+sed, mauris. Pellentesque habitant morbi tristique senectus et netus et 
+malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
+platea dictumst.
+
+Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque 
+sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. 
+Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, 
+dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, 
+massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo 
+pulvinar dui, a gravida orci mi eget odio. Nunc a lacus.
+
+Project: onlinestore
+Tracker: Feature request
+category: Stock management
+assigned to: miscuser9@foo.bar
+priority: foo
+done ratio: x
+start date: some day 
+due date: never
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/mail_handler/ticket_with_localized_attributes.eml	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,43 @@
+Return-Path: <jsmith@somenet.foo>
+Received: from osiris ([127.0.0.1])
+	by OSIRIS
+	with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
+Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
+From: "John Smith" <jsmith@somenet.foo>
+To: <redmine@somenet.foo>
+Subject: New ticket on a given project
+Date: Sun, 22 Jun 2008 12:28:07 +0200
+MIME-Version: 1.0
+Content-Type: text/plain;
+	format=flowed;
+	charset="iso-8859-1";
+	reply-type=original
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2900.2869
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet 
+turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus 
+blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti 
+sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In 
+in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras 
+sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum 
+id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus 
+eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique 
+sed, mauris. Pellentesque habitant morbi tristique senectus et netus et 
+malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
+platea dictumst.
+
+Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque 
+sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. 
+Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, 
+dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, 
+massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo 
+pulvinar dui, a gravida orci mi eget odio. Nunc a lacus.
+
+Projet: onlinestore
+Tracker: Feature request
+catégorie: Stock management
+priorité: Urgent
--- a/test/fixtures/mailer/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/mailer/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/fixtures/mailer
 http://redmine.rubyforge.org/svn
 
--- a/test/fixtures/repositories/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/repositories/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/3828/trunk/test/fixtures/repositories
+/svn/!svn/ver/4310/trunk/test/fixtures/repositories
 END
 darcs_repository.tar.gz
 K 25
@@ -25,7 +25,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 73
-/svn/!svn/ver/3828/trunk/test/fixtures/repositories/git_repository.tar.gz
+/svn/!svn/ver/4310/trunk/test/fixtures/repositories/git_repository.tar.gz
 END
 mercurial_repository.tar.gz
 K 25
--- a/test/fixtures/repositories/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/repositories/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/fixtures/repositories
 http://redmine.rubyforge.org/svn
 
 
 
-2010-07-06T02:07:46.557097Z
-3828
-edavis10
+2010-10-29T23:21:57.240368Z
+4310
+jbbarth
 
 
 
@@ -134,11 +134,11 @@
 
 
 
-2010-09-23T14:37:45.351765Z
-4717d4ab5ae991a07ac8256d6cc83c36
-2010-07-06T02:07:46.557097Z
-3828
-edavis10
+2010-11-19T13:04:46.860726Z
+300e21b10239e2fa28df3111924b8328
+2010-10-29T23:21:57.240368Z
+4310
+jbbarth
 has-props
 
 
@@ -160,7 +160,7 @@
 
 
 
-19452
+20730
 
 mercurial_repository.tar.gz
 file
Binary file test/fixtures/repositories/.svn/text-base/git_repository.tar.gz.svn-base has changed
Binary file test/fixtures/repositories/git_repository.tar.gz has changed
--- a/test/fixtures/users.yml	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/fixtures/users.yml	Fri Nov 19 13:24:41 2010 +0000
@@ -12,7 +12,7 @@
   firstname: Robert
   id: 4
   auth_source_id: 
-  mail_notification: true
+  mail_notification: all
   login: rhill
   type: User
 users_001: 
@@ -28,7 +28,7 @@
   firstname: redMine
   id: 1
   auth_source_id: 
-  mail_notification: true
+  mail_notification: all
   login: admin
   type: User
 users_002: 
@@ -44,7 +44,7 @@
   firstname: John
   id: 2
   auth_source_id: 
-  mail_notification: true
+  mail_notification: all
   login: jsmith
   type: User
 users_003: 
@@ -60,7 +60,7 @@
   firstname: Dave
   id: 3
   auth_source_id: 
-  mail_notification: true
+  mail_notification: all
   login: dlopper
   type: User
 users_005: 
@@ -77,7 +77,7 @@
   lastname: Lopper2
   firstname: Dave2
   auth_source_id: 
-  mail_notification: true
+  mail_notification: all
   login: dlopper2
   type: User
 users_006: 
@@ -93,7 +93,7 @@
   lastname: Anonymous
   firstname: ''
   auth_source_id: 
-  mail_notification: false
+  mail_notification: only_my_events
   login: ''
   type: AnonymousUser
 users_007: 
@@ -109,7 +109,7 @@
   lastname: One
   firstname: Some
   auth_source_id: 
-  mail_notification: false
+  mail_notification: only_my_events
   login: someone
   type: User
 users_008: 
@@ -125,7 +125,7 @@
   lastname: Misc
   firstname: User
   auth_source_id: 
-  mail_notification: false
+  mail_notification: only_my_events
   login: miscuser8
   type: User
 users_009: 
@@ -141,7 +141,7 @@
   lastname: Misc
   firstname: User
   auth_source_id: 
-  mail_notification: false
+  mail_notification: only_my_events
   login: miscuser9
   type: User
 groups_010: 
@@ -153,4 +153,4 @@
   lastname: B Team
   type: Group
 
-  
\ No newline at end of file
+  
--- a/test/functional/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,19 +1,19 @@
 K 25
 svn:wc:ra_dav:version-url
 V 40
-/svn/!svn/ver/4172/trunk/test/functional
+/svn/!svn/ver/4411/trunk/test/functional
 END
 issues_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 66
-/svn/!svn/ver/4083/trunk/test/functional/issues_controller_test.rb
+/svn/!svn/ver/4411/trunk/test/functional/issues_controller_test.rb
 END
 news_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/4172/trunk/test/functional/news_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/news_controller_test.rb
 END
 queries_controller_test.rb
 K 25
@@ -43,19 +43,19 @@
 K 25
 svn:wc:ra_dav:version-url
 V 65
-/svn/!svn/ver/3435/trunk/test/functional/roles_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/roles_controller_test.rb
 END
 my_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 62
-/svn/!svn/ver/3217/trunk/test/functional/my_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/my_controller_test.rb
 END
 comments_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 68
-/svn/!svn/ver/4172/trunk/test/functional/comments_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/comments_controller_test.rb
 END
 wikis_controller_test.rb
 K 25
@@ -79,19 +79,25 @@
 K 25
 svn:wc:ra_dav:version-url
 V 73
-/svn/!svn/ver/4055/trunk/test/functional/context_menus_controller_test.rb
+/svn/!svn/ver/4242/trunk/test/functional/context_menus_controller_test.rb
 END
 account_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 67
-/svn/!svn/ver/3933/trunk/test/functional/account_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/account_controller_test.rb
 END
 calendars_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 69
-/svn/!svn/ver/3913/trunk/test/functional/calendars_controller_test.rb
+/svn/!svn/ver/4245/trunk/test/functional/calendars_controller_test.rb
+END
+journals_controller_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/4034/trunk/test/functional/journals_controller_test.rb
 END
 workflows_controller_test.rb
 K 25
@@ -99,41 +105,41 @@
 V 69
 /svn/!svn/ver/3188/trunk/test/functional/workflows_controller_test.rb
 END
-journals_controller_test.rb
+time_entry_reports_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4034/trunk/test/functional/journals_controller_test.rb
+V 78
+/svn/!svn/ver/4232/trunk/test/functional/time_entry_reports_controller_test.rb
 END
 project_enumerations_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 80
-/svn/!svn/ver/4075/trunk/test/functional/project_enumerations_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/project_enumerations_controller_test.rb
 END
 gantts_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 66
-/svn/!svn/ver/4072/trunk/test/functional/gantts_controller_test.rb
+/svn/!svn/ver/4280/trunk/test/functional/gantts_controller_test.rb
+END
+users_controller_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/4382/trunk/test/functional/users_controller_test.rb
 END
 issue_moves_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 71
-/svn/!svn/ver/3937/trunk/test/functional/issue_moves_controller_test.rb
-END
-users_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4066/trunk/test/functional/users_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/issue_moves_controller_test.rb
 END
 repositories_cvs_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 76
-/svn/!svn/ver/2887/trunk/test/functional/repositories_cvs_controller_test.rb
+/svn/!svn/ver/4289/trunk/test/functional/repositories_cvs_controller_test.rb
 END
 application_controller_test.rb
 K 25
@@ -147,17 +153,23 @@
 V 70
 /svn/!svn/ver/4047/trunk/test/functional/activities_controller_test.rb
 END
+search_controller_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/4407/trunk/test/functional/search_controller_test.rb
+END
 ldap_auth_sources_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 72
 /svn/!svn/ver/3744/trunk/test/functional/ldap_auth_sources_controller.rb
 END
-search_controller_test.rb
+messages_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/3806/trunk/test/functional/search_controller_test.rb
+V 68
+/svn/!svn/ver/4407/trunk/test/functional/messages_controller_test.rb
 END
 repositories_bazaar_controller_test.rb
 K 25
@@ -165,17 +177,11 @@
 V 79
 /svn/!svn/ver/2887/trunk/test/functional/repositories_bazaar_controller_test.rb
 END
-messages_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/3687/trunk/test/functional/messages_controller_test.rb
-END
 attachments_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 71
-/svn/!svn/ver/3687/trunk/test/functional/attachments_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/attachments_controller_test.rb
 END
 sys_controller_test.rb
 K 25
@@ -187,7 +193,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 66
-/svn/!svn/ver/2989/trunk/test/functional/groups_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/groups_controller_test.rb
 END
 issues_controller_transaction_test.rb
 K 25
@@ -211,19 +217,19 @@
 K 25
 svn:wc:ra_dav:version-url
 V 72
-/svn/!svn/ver/3687/trunk/test/functional/repositories_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/repositories_controller_test.rb
 END
 projects_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 68
-/svn/!svn/ver/4070/trunk/test/functional/projects_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/projects_controller_test.rb
 END
 repositories_git_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 76
-/svn/!svn/ver/3828/trunk/test/functional/repositories_git_controller_test.rb
+/svn/!svn/ver/4289/trunk/test/functional/repositories_git_controller_test.rb
 END
 members_controller_test.rb
 K 25
@@ -259,25 +265,25 @@
 K 25
 svn:wc:ra_dav:version-url
 V 68
-/svn/!svn/ver/3013/trunk/test/functional/settings_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/settings_controller_test.rb
 END
 timelog_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 67
-/svn/!svn/ver/4087/trunk/test/functional/timelog_controller_test.rb
+/svn/!svn/ver/4250/trunk/test/functional/timelog_controller_test.rb
 END
 documents_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 69
-/svn/!svn/ver/3788/trunk/test/functional/documents_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/documents_controller_test.rb
 END
 files_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 65
-/svn/!svn/ver/4085/trunk/test/functional/files_controller_test.rb
+/svn/!svn/ver/4407/trunk/test/functional/files_controller_test.rb
 END
 repositories_darcs_controller_test.rb
 K 25
@@ -289,7 +295,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/3686/trunk/test/functional/wiki_controller_test.rb
+/svn/!svn/ver/4375/trunk/test/functional/wiki_controller_test.rb
 END
 auth_sources_controller_test.rb
 K 25
@@ -301,13 +307,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 68
-/svn/!svn/ver/3946/trunk/test/functional/previews_controller_test.rb
+/svn/!svn/ver/4174/trunk/test/functional/previews_controller_test.rb
 END
 repositories_subversion_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 83
-/svn/!svn/ver/3800/trunk/test/functional/repositories_subversion_controller_test.rb
+/svn/!svn/ver/4289/trunk/test/functional/repositories_subversion_controller_test.rb
 END
 issue_relations_controller_test.rb
 K 25
@@ -319,7 +325,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 68
-/svn/!svn/ver/4097/trunk/test/functional/versions_controller_test.rb
+/svn/!svn/ver/4354/trunk/test/functional/versions_controller_test.rb
 END
 enumerations_controller_test.rb
 K 25
--- a/test/functional/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/functional
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-11-17T18:27:38.712585Z
+4411
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-24T12:48:25.875739Z
-07a21279794955753d580c1ae2e523fb
-2010-09-11T20:21:27.018967Z
-4083
-jbbarth
+2010-11-19T13:04:41.460658Z
+63b42848e4b9c141f6081fb9b5187e91
+2010-11-17T18:27:38.712585Z
+4411
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-38747
+46917
 
 news_controller_test.rb
 file
@@ -66,11 +66,11 @@
 
 
 
-2010-09-24T12:48:25.875739Z
-1c72a2e1843e72e60be2f30f97197b91
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-11-19T13:04:41.460658Z
+0673b926675d6ac108f0af70a8f609f4
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-4365
+3948
 
 queries_controller_test.rb
 file
@@ -236,11 +236,11 @@
 
 
 
-2010-09-23T14:37:45.423771Z
-e2ab383bae04b68e626c1f5f9a196bfb
-2010-02-15T16:41:16.346582Z
-3435
-edavis10
+2010-11-19T13:04:41.460658Z
+7258b2945e07b02349515daea0f85ce7
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 has-props
 
 
@@ -262,7 +262,7 @@
 
 
 
-6078
+6089
 
 my_controller_test.rb
 file
@@ -270,11 +270,11 @@
 
 
 
-2010-09-23T14:37:45.387766Z
-23fcfd5e58263663f9a6507566e6fe2d
-2009-12-23T06:27:28.577661Z
-3217
-edavis10
+2010-11-19T13:04:41.464645Z
+cbb9551bd925ce88a319d20ca2b127ab
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 has-props
 
 
@@ -296,7 +296,7 @@
 
 
 
-6205
+6207
 
 comments_controller_test.rb
 file
@@ -304,33 +304,33 @@
 
 
 
-2010-09-24T12:48:25.875739Z
-70dea926748aacbab944bce556c551c6
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2027
+2010-11-19T13:04:41.464645Z
+8a36a09743e192b6be46bb008ac7297e
+2010-11-14T16:45:32.457767Z
+4407
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2030
 
 wikis_controller_test.rb
 file
@@ -440,10 +440,10 @@
 
 
 
-2010-09-24T12:48:25.875739Z
-c73a61b28b04990574ae25575051aa52
-2010-09-03T19:54:24.083210Z
-4055
+2010-11-19T13:04:41.464645Z
+96877cbbea85ba3fd99502907477340f
+2010-10-08T03:09:51.863032Z
+4242
 jbbarth
 
 
@@ -466,7 +466,7 @@
 
 
 
-5093
+6032
 
 account_controller_test.rb
 file
@@ -474,11 +474,11 @@
 
 
 
-2010-09-23T14:37:45.383766Z
-01299f951a82e5acf560044b7e89b5ab
-2010-08-10T21:12:32.103531Z
-3933
-jbbarth
+2010-11-19T13:04:41.464645Z
+a907569b5ac8764a0d6db597aa736851
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 has-props
 
 
@@ -500,7 +500,7 @@
 
 
 
-7329
+7335
 
 calendars_controller_test.rb
 file
@@ -508,10 +508,10 @@
 
 
 
-2010-09-23T14:37:45.383766Z
-998bc7746491ec2c407187c5c7646990
-2010-08-04T15:04:30.993800Z
-3913
+2010-11-19T13:04:41.464645Z
+ff8293f6d80647d3d03c66072bde5c98
+2010-10-10T21:17:10.784165Z
+4245
 edavis10
 
 
@@ -534,7 +534,41 @@
 
 
 
-2188
+2385
+
+workflows_controller_test.rb
+file
+
+
+
+
+2010-09-23T14:37:45.427769Z
+be835c79372fac52c849870791d982ff
+2009-12-18T15:41:32.828284Z
+3188
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6668
 
 journals_controller_test.rb
 file
@@ -570,39 +604,39 @@
 
 2642
 
-workflows_controller_test.rb
+time_entry_reports_controller_test.rb
 file
 
 
 
 
-2010-09-23T14:37:45.427769Z
-be835c79372fac52c849870791d982ff
-2009-12-18T15:41:32.828284Z
-3188
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6668
+2010-11-19T13:04:41.464645Z
+89c906bd5446b26ea9463b90cebaa807
+2010-10-05T16:07:17.015270Z
+4232
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5419
 
 project_enumerations_controller_test.rb
 file
@@ -610,33 +644,33 @@
 
 
 
-2010-09-24T12:48:25.875739Z
-abb9be62ab6ed5867d6070fd14ffd31d
-2010-09-10T16:00:49.687515Z
-4075
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-9530
+2010-11-19T13:04:41.464645Z
+37775addcfb51a3ce3d8cddc3b1e907a
+2010-11-14T16:45:32.457767Z
+4407
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9534
 
 gantts_controller_test.rb
 file
@@ -644,33 +678,67 @@
 
 
 
-2010-09-24T12:48:25.875739Z
-fb255e043b31b095c741248bc5a9a287
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1716
+2010-11-19T13:04:41.464645Z
+3037031df4af4a9e2e77bd75083a4bcc
+2010-10-22T22:13:39.617506Z
+4280
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2272
+
+issue_moves_controller_test.rb
+file
+
+
+
+
+2010-11-19T13:04:41.464645Z
+79f29b51a76072a1272e3ec50bec0e0f
+2010-11-14T16:45:32.457767Z
+4407
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5098
 
 users_controller_test.rb
 file
@@ -678,11 +746,11 @@
 
 
 
-2010-09-24T12:48:25.875739Z
-bc114889d45857af9ea3a87862f6f0e5
-2010-09-06T01:02:52.851079Z
-4066
-edavis10
+2010-11-19T13:04:41.464645Z
+79742c00eadbe609d9abb6317856022f
+2010-11-07T14:15:01.891476Z
+4382
+jplang
 has-props
 
 
@@ -704,41 +772,7 @@
 
 
 
-5574
-
-issue_moves_controller_test.rb
-file
-
-
-
-
-2010-09-23T14:37:45.387766Z
-54756d7f1e65c8d37dca5b41aac6e3ae
-2010-08-12T13:57:46.562058Z
-3937
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4304
+7363
 
 repositories_cvs_controller_test.rb
 file
@@ -746,10 +780,10 @@
 
 
 
-2010-09-23T14:37:45.419982Z
-e8d80bc0ee812d5226adf9c1d952ece8
-2009-09-13T17:14:35.707881Z
-2887
+2010-11-19T13:04:41.468647Z
+e01a04614a9b23c31bb216e61c81759d
+2010-10-25T15:42:41.795656Z
+4289
 edavis10
 has-props
 
@@ -772,7 +806,7 @@
 
 
 
-6556
+6562
 
 application_controller_test.rb
 file
@@ -842,6 +876,40 @@
 
 2695
 
+search_controller_test.rb
+file
+
+
+
+
+2010-11-19T13:04:41.468647Z
+2e14f0628773a6ad6b3b59b3429d187d
+2010-11-14T16:45:32.457767Z
+4407
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4675
+
 ldap_auth_sources_controller.rb
 file
 
@@ -876,17 +944,17 @@
 
 491
 
-search_controller_test.rb
+messages_controller_test.rb
 file
 
 
 
 
-2010-09-23T14:37:45.423771Z
-9dc6da996eea99b8108da65990ef6be3
-2010-06-20T20:01:32.722003Z
-3806
-edavis10
+2010-11-19T13:04:41.468647Z
+4514c9f19bf7270410fbf05098128346
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 has-props
 
 
@@ -908,7 +976,7 @@
 
 
 
-4674
+5042
 
 repositories_bazaar_controller_test.rb
 file
@@ -944,51 +1012,17 @@
 
 5054
 
-messages_controller_test.rb
-file
-
-
-
-
-2010-09-23T14:37:45.387766Z
-e70455a2b4bd135f10862b69df7a70bf
-2010-04-21T16:02:55.125733Z
-3687
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5038
-
 attachments_controller_test.rb
 file
 
 
 
 
-2010-09-23T14:37:45.383766Z
-25de9e7d8cc73997221a567f9ae1c363
-2010-04-21T16:02:55.125733Z
-3687
-edavis10
+2010-11-19T13:04:41.468647Z
+06a5a66df669f08e5f357931edb12db1
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 has-props
 
 
@@ -1010,7 +1044,7 @@
 
 
 
-4244
+4245
 
 sys_controller_test.rb
 file
@@ -1052,10 +1086,10 @@
 
 
 
-2010-09-23T14:37:45.383766Z
-440543b92d6281235fa9a3ec7b569514
-2009-10-29T18:40:00.797736Z
-2989
+2010-11-19T13:04:41.468647Z
+708f3fdb0cee16797fdd197cc5de756e
+2010-11-14T16:45:32.457767Z
+4407
 jplang
 has-props
 
@@ -1078,7 +1112,7 @@
 
 
 
-3014
+3017
 
 issues_controller_transaction_test.rb
 file
@@ -1188,11 +1222,11 @@
 
 
 
-2010-09-23T14:37:45.419982Z
-d89f24390b27494109c2e4b393fbce7c
-2010-04-21T16:02:55.125733Z
-3687
-edavis10
+2010-11-19T13:04:41.468647Z
+8e3650db9518fe44471fc80fbb6dbd21
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 has-props
 
 
@@ -1214,7 +1248,7 @@
 
 
 
-4569
+4570
 
 projects_controller_test.rb
 file
@@ -1222,11 +1256,11 @@
 
 
 
-2010-09-24T12:48:25.875739Z
-8a06ffc175377efeb3bac6e70067fa45
-2010-09-08T16:01:51.939478Z
-4070
-edavis10
+2010-11-19T13:04:41.468647Z
+c4b243a5a18c509cc65794be84ffd752
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 has-props
 
 
@@ -1248,7 +1282,7 @@
 
 
 
-14899
+15977
 
 members_controller_test.rb
 file
@@ -1290,10 +1324,10 @@
 
 
 
-2010-09-23T14:37:45.423771Z
-c2447def1a06fe360c98745749ef2066
-2010-07-06T02:07:46.557097Z
-3828
+2010-11-19T13:04:41.472627Z
+f64a33705a8376f5a398502f116c0db4
+2010-10-25T15:42:41.795656Z
+4289
 edavis10
 has-props
 
@@ -1316,7 +1350,7 @@
 
 
 
-6470
+6689
 
 repositories_mercurial_controller_test.rb
 file
@@ -1460,10 +1494,10 @@
 
 
 
-2010-09-23T14:37:45.423771Z
-580f9a678b8f7f505a52b444d5f70dba
-2009-11-07T08:44:56.035544Z
-3013
+2010-11-19T13:04:41.472627Z
+cc2bc5f554f121c21ba82c60216f01d5
+2010-11-14T16:45:32.457767Z
+4407
 jplang
 has-props
 
@@ -1486,7 +1520,7 @@
 
 
 
-2121
+2122
 
 timelog_controller_test.rb
 file
@@ -1494,10 +1528,10 @@
 
 
 
-2010-09-24T12:48:25.879729Z
-478bfd41fe3ea1d3f9d2c91b26ee7a62
-2010-09-14T19:02:25.847894Z
-4087
+2010-11-19T13:04:41.472627Z
+be5f7d864581bed744c8991964a97ae6
+2010-10-12T15:55:21.984670Z
+4250
 edavis10
 has-props
 
@@ -1520,7 +1554,7 @@
 
 
 
-13631
+8487
 
 documents_controller_test.rb
 file
@@ -1528,11 +1562,11 @@
 
 
 
-2010-09-23T14:37:45.383766Z
-6d6a011a4f7f17ccff7b514eac561ce8
-2010-06-19T22:17:34.496523Z
-3788
-edavis10
+2010-11-19T13:04:41.472627Z
+e92d7b72633aaca649a4df81ea39305a
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 has-props
 
 
@@ -1554,7 +1588,7 @@
 
 
 
-4670
+4672
 
 files_controller_test.rb
 file
@@ -1562,33 +1596,33 @@
 
 
 
-2010-09-24T12:48:25.879729Z
-5d12ff23b3756ee66c539417f2d5dedc
-2010-09-14T16:24:07.840869Z
-4085
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2306
+2010-11-19T13:04:41.472627Z
+1682b4116f36633c8816d1dff0d49cb5
+2010-11-14T16:45:32.457767Z
+4407
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2308
 
 repositories_darcs_controller_test.rb
 file
@@ -1630,11 +1664,11 @@
 
 
 
-2010-09-23T14:37:45.427769Z
-5e11aaeb4ee3d552c2668034c201d6e2
-2010-04-20T15:42:57.800422Z
-3686
-edavis10
+2010-11-19T13:04:41.472627Z
+35fe09d5b7c9ad179df6c1aa5d09e25d
+2010-11-06T14:30:32.528294Z
+4375
+jplang
 has-props
 
 
@@ -1656,7 +1690,7 @@
 
 
 
-13195
+16321
 
 auth_sources_controller_test.rb
 file
@@ -1698,10 +1732,10 @@
 
 
 
-2010-09-23T14:37:45.387766Z
-7bac137a145f14ca591811bb76d56bee
-2010-08-18T15:01:35.032314Z
-3946
+2010-11-19T13:04:41.472627Z
+055c4c3716d7eb1d123482c20d453a67
+2010-09-24T16:26:46.819682Z
+4174
 edavis10
 
 
@@ -1724,7 +1758,7 @@
 
 
 
-688
+1101
 
 repositories_subversion_controller_test.rb
 file
@@ -1732,10 +1766,10 @@
 
 
 
-2010-09-23T14:37:45.423771Z
-3a3e1acd6e8097c938879aca2284280b
-2010-06-20T16:08:26.745839Z
-3800
+2010-11-19T13:04:41.472627Z
+78fad597ea49ad0dfc7d71f2d33c381f
+2010-10-25T15:42:41.795656Z
+4289
 edavis10
 has-props
 
@@ -1758,7 +1792,7 @@
 
 
 
-8790
+8796
 
 issue_relations_controller_test.rb
 file
@@ -1800,11 +1834,11 @@
 
 
 
-2010-09-24T12:48:25.879729Z
-0ec41a16228288272bc26862cb87c358
-2010-09-17T15:55:08.377083Z
-4097
-edavis10
+2010-11-19T13:04:41.476627Z
+dcafef0668ab2fa1356e11ec2651965e
+2010-11-01T13:13:32.982466Z
+4354
+jplang
 has-props
 
 
@@ -1826,7 +1860,7 @@
 
 
 
-5035
+5338
 
 enumerations_controller_test.rb
 file
--- a/test/functional/.svn/text-base/account_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/account_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -64,7 +64,7 @@
     assert existing_user.save!
 
     post :login, :openid_url => existing_user.identity_url
-    assert_redirected_to 'my/page'
+    assert_redirected_to '/my/page'
   end
 
   def test_login_with_invalid_openid_provider
@@ -86,14 +86,14 @@
     assert existing_user.save!
 
     post :login, :openid_url => existing_user.identity_url
-    assert_redirected_to 'login'
+    assert_redirected_to '/login'
   end
 
   def test_login_with_openid_with_new_user_created
     Setting.self_registration = '3'
     Setting.openid = '1'
     post :login, :openid_url => 'http://openid.example.com/good_user'
-    assert_redirected_to 'my/account'
+    assert_redirected_to '/my/account'
     user = User.find_by_login('cool_user')
     assert user
     assert_equal 'Cool', user.firstname
@@ -113,7 +113,7 @@
     Setting.self_registration = '1'
     Setting.openid = '1'
     post :login, :openid_url => 'http://openid.example.com/good_user'
-    assert_redirected_to 'login'
+    assert_redirected_to '/login'
     user = User.find_by_login('cool_user')
     assert user
 
@@ -125,7 +125,7 @@
     Setting.self_registration = '2'
     Setting.openid = '1'
     post :login, :openid_url => 'http://openid.example.com/good_user'
-    assert_redirected_to 'login'
+    assert_redirected_to '/login'
     user = User.find_by_login('cool_user')
     assert user
     assert_equal User::STATUS_REGISTERED, user.status
@@ -157,7 +157,7 @@
   def test_logout
     @request.session[:user_id] = 2
     get :logout
-    assert_redirected_to ''
+    assert_redirected_to '/'
     assert_nil @request.session[:user_id]
   end
 
--- a/test/functional/.svn/text-base/attachments_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/attachments_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -95,7 +95,7 @@
       post :destroy, :id => 1
     end
     # no referrer
-    assert_redirected_to 'projects/ecookbook'
+    assert_redirected_to '/projects/ecookbook'
     assert_nil Attachment.find_by_id(1)
     j = issue.journals.find(:first, :order => 'created_on DESC')
     assert_equal 'attachment', j.details.first.property
--- a/test/functional/.svn/text-base/calendars_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/calendars_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -16,6 +16,16 @@
     assert_template 'calendar'
     assert_not_nil assigns(:calendar)
   end
+
+  context "GET :show" do
+    should "run custom queries" do
+      @query = Query.generate_default!
+      
+      get :show, :query_id => @query.id
+      assert_response :success
+    end
+    
+  end
   
   def test_week_number_calculation
     Setting.start_of_week = 7
--- a/test/functional/.svn/text-base/comments_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/comments_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -27,7 +27,7 @@
   def test_add_comment
     @request.session[:user_id] = 2
     post :create, :id => 1, :comment => { :comments => 'This is a test comment' }
-    assert_redirected_to 'news/1'
+    assert_redirected_to '/news/1'
     
     comment = News.find(1).comments.find(:first, :order => 'created_on DESC')
     assert_not_nil comment
@@ -40,7 +40,7 @@
     assert_no_difference 'Comment.count' do
       post :create, :id => 1, :comment => { :comments => '' }
       assert_response :redirect
-      assert_redirected_to 'news/1'
+      assert_redirected_to '/news/1'
     end
   end
 
@@ -48,7 +48,7 @@
     comments_count = News.find(1).comments.size
     @request.session[:user_id] = 2
     delete :destroy, :id => 1, :comment_id => 2
-    assert_redirected_to 'news/1'
+    assert_redirected_to '/news/1'
     assert_nil Comment.find_by_id(2)
     assert_equal comments_count - 1, News.find(1).comments.size
   end
--- a/test/functional/.svn/text-base/context_menus_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/context_menus_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -79,14 +79,27 @@
                                              :class => 'icon-del' }
   end
 
-  def test_context_menu_multiple_issues_of_different_project
+  def test_context_menu_multiple_issues_of_different_projects
     @request.session[:user_id] = 2
-    get :issues, :ids => [1, 2, 4]
+    get :issues, :ids => [1, 2, 6]
     assert_response :success
     assert_template 'context_menu'
+    ids = "ids%5B%5D=1&amp;ids%5B%5D=2&amp;ids%5B%5D=6"
+    assert_tag :tag => 'a', :content => 'Edit',
+                            :attributes => { :href => "/issues/bulk_edit?#{ids}",
+                                             :class => 'icon-edit' }
+    assert_tag :tag => 'a', :content => 'Closed',
+                            :attributes => { :href => "/issues/bulk_edit?#{ids}&amp;issue%5Bstatus_id%5D=5",
+                                             :class => '' }
+    assert_tag :tag => 'a', :content => 'Immediate',
+                            :attributes => { :href => "/issues/bulk_edit?#{ids}&amp;issue%5Bpriority_id%5D=8",
+                                             :class => '' }
+    assert_tag :tag => 'a', :content => 'John Smith',
+                            :attributes => { :href => "/issues/bulk_edit?#{ids}&amp;issue%5Bassigned_to_id%5D=2",
+                                             :class => '' }
     assert_tag :tag => 'a', :content => 'Delete',
-                            :attributes => { :href => '#',
-                                             :class => 'icon-del disabled' }
+                            :attributes => { :href => "/issues/destroy?#{ids}",
+                                             :class => 'icon-del' }
   end
   
 end
--- a/test/functional/.svn/text-base/documents_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/documents_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -77,7 +77,7 @@
                               :category_id => 2},
                :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
                
-    assert_redirected_to 'projects/ecookbook/documents'
+    assert_redirected_to '/projects/ecookbook/documents'
     
     document = Document.find_by_title('DocumentsControllerTest#test_post_new')
     assert_not_nil document
@@ -90,7 +90,7 @@
   def test_destroy
     @request.session[:user_id] = 2
     post :destroy, :id => 1
-    assert_redirected_to 'projects/ecookbook/documents'
+    assert_redirected_to '/projects/ecookbook/documents'
     assert_nil Document.find_by_id(1)
   end
 end
--- a/test/functional/.svn/text-base/files_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/files_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -37,7 +37,7 @@
            :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
       assert_response :redirect
     end
-    assert_redirected_to 'projects/ecookbook/files'
+    assert_redirected_to '/projects/ecookbook/files'
     a = Attachment.find(:first, :order => 'created_on DESC')
     assert_equal 'testfile.txt', a.filename
     assert_equal Project.find(1), a.container
@@ -58,7 +58,7 @@
            :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
       assert_response :redirect
     end
-    assert_redirected_to 'projects/ecookbook/files'
+    assert_redirected_to '/projects/ecookbook/files'
     a = Attachment.find(:first, :order => 'created_on DESC')
     assert_equal 'testfile.txt', a.filename
     assert_equal Version.find(2), a.container
--- a/test/functional/.svn/text-base/gantts_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/gantts_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -20,6 +20,25 @@
       i = Issue.find(2)
       assert_select "div a.issue", /##{i.id}/
     end
+    
+    should "work without issue due dates" do
+      Issue.update_all("due_date = NULL")
+      
+      get :show, :project_id => 1
+      assert_response :success
+      assert_template 'show.html.erb'
+      assert_not_nil assigns(:gantt)
+    end
+    
+    should "work without issue and version due dates" do
+      Issue.update_all("due_date = NULL")
+      Version.update_all("effective_date = NULL")
+      
+      get :show, :project_id => 1
+      assert_response :success
+      assert_template 'show.html.erb'
+      assert_not_nil assigns(:gantt)
+    end
 
     should "work cross project" do
       get :show
--- a/test/functional/.svn/text-base/groups_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/groups_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -54,7 +54,7 @@
     assert_difference 'Group.count' do
       post :create, :group => {:lastname => 'New group'}
     end
-    assert_redirected_to 'groups'
+    assert_redirected_to '/groups'
   end
   
   def test_edit
@@ -65,14 +65,14 @@
   
   def test_update
     post :update, :id => 10
-    assert_redirected_to 'groups'
+    assert_redirected_to '/groups'
   end
   
   def test_destroy
     assert_difference 'Group.count', -1 do
       post :destroy, :id => 10
     end
-    assert_redirected_to 'groups'
+    assert_redirected_to '/groups'
   end
   
   def test_add_users
--- a/test/functional/.svn/text-base/issue_moves_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/issue_moves_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -40,6 +40,31 @@
     assert_equal 2, Issue.find(2).tracker_id
   end
 
+  context "#create via bulk move" do
+    setup do
+      @request.session[:user_id] = 2
+    end
+    
+    should "allow changing the issue priority" do
+      post :create, :ids => [1, 2], :priority_id => 6
+
+      assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook'
+      assert_equal 6, Issue.find(1).priority_id
+      assert_equal 6, Issue.find(2).priority_id
+
+    end
+
+    should "allow adding a note when moving" do
+      post :create, :ids => [1, 2], :notes => 'Moving two issues'
+
+      assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook'
+      assert_equal 'Moving two issues', Issue.find(1).journals.last.notes
+      assert_equal 'Moving two issues', Issue.find(2).journals.last.notes
+
+    end
+    
+  end
+
   def test_bulk_copy_to_another_project
     @request.session[:user_id] = 2
     assert_difference 'Issue.count', 2 do
@@ -47,7 +72,7 @@
         post :create, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'}
       end
     end
-    assert_redirected_to 'projects/ecookbook/issues'
+    assert_redirected_to '/projects/ecookbook/issues'
   end
 
   context "#create via bulk copy" do
--- a/test/functional/.svn/text-base/issues_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/issues_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -125,11 +125,42 @@
     assert_tag :tag => 'a', :content => /Issue of a private subproject/
   end
   
-  def test_index_with_project_and_filter
+  def test_index_with_project_and_default_filter
     get :index, :project_id => 1, :set_filter => 1
     assert_response :success
     assert_template 'index.rhtml'
     assert_not_nil assigns(:issues)
+    
+    query = assigns(:query)
+    assert_not_nil query
+    # default filter
+    assert_equal({'status_id' => {:operator => 'o', :values => ['']}}, query.filters)
+  end
+  
+  def test_index_with_project_and_filter
+    get :index, :project_id => 1, :set_filter => 1, 
+      :fields => ['tracker_id'],
+      :operators => {'tracker_id' => '='},
+      :values => {'tracker_id' => ['1']} 
+    assert_response :success
+    assert_template 'index.rhtml'
+    assert_not_nil assigns(:issues)
+    
+    query = assigns(:query)
+    assert_not_nil query
+    assert_equal({'tracker_id' => {:operator => '=', :values => ['1']}}, query.filters)
+  end
+  
+  def test_index_with_project_and_empty_filters
+    get :index, :project_id => 1, :set_filter => 1, :fields => ['']
+    assert_response :success
+    assert_template 'index.rhtml'
+    assert_not_nil assigns(:issues)
+    
+    query = assigns(:query)
+    assert_not_nil query
+    # no filter
+    assert_equal({}, query.filters)
   end
   
   def test_index_with_query
@@ -340,9 +371,7 @@
     
     get :new, :project_id => 1
     assert_response 500
-    assert_not_nil flash[:error]
-    assert_tag :tag => 'div', :attributes => { :class => /error/ },
-                              :content => /No default issue/
+    assert_error_tag :content => /No default issue/
   end
   
   def test_get_new_with_no_tracker_should_display_an_error
@@ -351,9 +380,7 @@
     
     get :new, :project_id => 1
     assert_response 500
-    assert_not_nil flash[:error]
-    assert_tag :tag => 'div', :attributes => { :class => /error/ },
-                              :content => /No tracker/
+    assert_error_tag :content => /No tracker/
   end
   
   def test_update_new_form
@@ -382,6 +409,7 @@
                             :subject => 'This is the test_new issue',
                             :description => 'This is the description',
                             :priority_id => 5,
+                            :start_date => '2010-11-07',
                             :estimated_hours => '',
                             :custom_field_values => {'2' => 'Value for field 2'}}
     end
@@ -392,12 +420,33 @@
     assert_equal 2, issue.author_id
     assert_equal 3, issue.tracker_id
     assert_equal 2, issue.status_id
+    assert_equal Date.parse('2010-11-07'), issue.start_date
     assert_nil issue.estimated_hours
     v = issue.custom_values.find(:first, :conditions => {:custom_field_id => 2})
     assert_not_nil v
     assert_equal 'Value for field 2', v.value
   end
   
+  def test_post_create_without_start_date
+    @request.session[:user_id] = 2
+    assert_difference 'Issue.count' do
+      post :create, :project_id => 1, 
+                 :issue => {:tracker_id => 3,
+                            :status_id => 2,
+                            :subject => 'This is the test_new issue',
+                            :description => 'This is the description',
+                            :priority_id => 5,
+                            :start_date => '',
+                            :estimated_hours => '',
+                            :custom_field_values => {'2' => 'Value for field 2'}}
+    end
+    assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
+    
+    issue = Issue.find_by_subject('This is the test_new issue')
+    assert_not_nil issue
+    assert_nil issue.start_date
+  end
+  
   def test_post_create_and_continue
     @request.session[:user_id] = 2
     post :create, :project_id => 1, 
@@ -531,7 +580,7 @@
   context "without workflow privilege" do
     setup do
       Workflow.delete_all(["role_id = ?", Role.anonymous.id])
-      Role.anonymous.add_permission! :add_issues
+      Role.anonymous.add_permission! :add_issues, :add_issue_notes
     end
     
     context "#new" do
@@ -556,6 +605,17 @@
         assert_equal IssueStatus.default, issue.status
       end
       
+      should "accept default status" do
+        assert_difference 'Issue.count' do
+          post :create, :project_id => 1, 
+                     :issue => {:tracker_id => 1,
+                                :subject => 'This is an issue',
+                                :status_id => 1}
+        end
+        issue = Issue.last(:order => 'id')
+        assert_equal IssueStatus.default, issue.status
+      end
+      
       should "ignore unauthorized status" do
         assert_difference 'Issue.count' do
           post :create, :project_id => 1, 
@@ -567,6 +627,94 @@
         assert_equal IssueStatus.default, issue.status
       end
     end
+    
+    context "#update" do
+      should "ignore status change" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3}
+        end
+        assert_equal 1, Issue.find(1).status_id
+      end
+      
+      should "ignore attributes changes" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2}
+        end
+        issue = Issue.find(1)
+        assert_equal "Can't print recipes", issue.subject
+        assert_nil issue.assigned_to
+      end
+    end
+  end
+  
+  context "with workflow privilege" do
+    setup do
+      Workflow.delete_all(["role_id = ?", Role.anonymous.id])
+      Workflow.create!(:role => Role.anonymous, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3)
+      Workflow.create!(:role => Role.anonymous, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4)
+      Role.anonymous.add_permission! :add_issues, :add_issue_notes
+    end
+    
+    context "#update" do
+      should "accept authorized status" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3}
+        end
+        assert_equal 3, Issue.find(1).status_id
+      end
+      
+      should "ignore unauthorized status" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2}
+        end
+        assert_equal 1, Issue.find(1).status_id
+      end
+      
+      should "accept authorized attributes changes" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:assigned_to_id => 2}
+        end
+        issue = Issue.find(1)
+        assert_equal 2, issue.assigned_to_id
+      end
+      
+      should "ignore unauthorized attributes changes" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed'}
+        end
+        issue = Issue.find(1)
+        assert_equal "Can't print recipes", issue.subject
+      end
+    end
+    
+    context "and :edit_issues permission" do
+      setup do
+        Role.anonymous.add_permission! :add_issues, :edit_issues
+      end
+
+      should "accept authorized status" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3}
+        end
+        assert_equal 3, Issue.find(1).status_id
+      end
+      
+      should "ignore unauthorized status" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2}
+        end
+        assert_equal 1, Issue.find(1).status_id
+      end
+      
+      should "accept authorized attributes changes" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2}
+        end
+        issue = Issue.find(1)
+        assert_equal "changed", issue.subject
+        assert_equal 2, issue.assigned_to_id
+      end
+    end
   end
   
   def test_copy_issue
@@ -589,7 +737,8 @@
   
   def test_get_edit_with_params
     @request.session[:user_id] = 2
-    get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 }
+    get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 },
+        :time_entry => { :hours => '2.5', :comments => 'test_get_edit_with_params', :activity_id => TimeEntryActivity.first.id }
     assert_response :success
     assert_template 'edit'
     
@@ -607,6 +756,12 @@
                         :child => { :tag => 'option', 
                                     :content => 'Urgent',
                                     :attributes => { :selected => 'selected' } }
+
+    assert_tag :input, :attributes => { :name => 'time_entry[hours]', :value => '2.5' }
+    assert_tag :select, :attributes => { :name => 'time_entry[activity_id]' },
+                        :child => { :tag => 'option',
+                                    :attributes => { :selected => 'selected', :value => TimeEntryActivity.first.id } }
+    assert_tag :input, :attributes => { :name => 'time_entry[comments]', :value => 'test_get_edit_with_params' }
   end
 
   def test_update_edit_form
@@ -911,6 +1066,19 @@
     assert_tag :select, :attributes => {:name => 'issue[custom_field_values][1]'}
   end
 
+  def test_get_bulk_edit_on_different_projects
+    @request.session[:user_id] = 2
+    get :bulk_edit, :ids => [1, 2, 6]
+    assert_response :success
+    assert_template 'bulk_edit'
+    
+    # Project specific custom field, date type
+    field = CustomField.find(9)
+    assert !field.is_for_all?
+    assert !field.project_ids.include?(Issue.find(6).project_id)
+    assert_no_tag :input, :attributes => {:name => 'issue[custom_field_values][9]'}
+  end
+
   def test_bulk_update
     @request.session[:user_id] = 2
     # update issues priority
@@ -930,6 +1098,39 @@
     assert_equal 1, journal.details.size
   end
 
+  def test_bulk_update_on_different_projects
+    @request.session[:user_id] = 2
+    # update issues priority
+    post :bulk_update, :ids => [1, 2, 6], :notes => 'Bulk editing',
+                                     :issue => {:priority_id => 7,
+                                                :assigned_to_id => '',
+                                                :custom_field_values => {'2' => ''}}
+    
+    assert_response 302
+    # check that the issues were updated
+    assert_equal [7, 7, 7], Issue.find([1,2,6]).map(&:priority_id)
+    
+    issue = Issue.find(1)
+    journal = issue.journals.find(:first, :order => 'created_on DESC')
+    assert_equal '125', issue.custom_value_for(2).value
+    assert_equal 'Bulk editing', journal.notes
+    assert_equal 1, journal.details.size
+  end
+
+  def test_bulk_update_on_different_projects_without_rights
+    @request.session[:user_id] = 3
+    user = User.find(3)
+    action = { :controller => "issues", :action => "bulk_update" }
+    assert user.allowed_to?(action, Issue.find(1).project)
+    assert ! user.allowed_to?(action, Issue.find(6).project)
+    post :bulk_update, :ids => [1, 6], :notes => 'Bulk should fail',
+                                     :issue => {:priority_id => 7,
+                                                :assigned_to_id => '',
+                                                :custom_field_values => {'2' => ''}}
+    assert_response 403
+    assert_not_equal "Bulk should fail", Journal.last.notes
+  end
+    
   def test_bullk_update_should_send_a_notification
     @request.session[:user_id] = 2
     ActionMailer::Base.deliveries.clear
@@ -1061,6 +1262,13 @@
     assert_equal 2, TimeEntry.find(2).issue_id
   end
   
+  def test_destroy_issues_from_different_projects
+    @request.session[:user_id] = 2
+    post :destroy, :ids => [1, 2, 6], :todo => 'destroy'
+    assert_redirected_to :controller => 'issues', :action => 'index'
+    assert !(Issue.find_by_id(1) || Issue.find_by_id(2) || Issue.find_by_id(6))
+  end
+  
   def test_default_search_scope
     get :index
     assert_tag :div, :attributes => {:id => 'quick-search'},
--- a/test/functional/.svn/text-base/messages_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/messages_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -87,7 +87,7 @@
                              :content => 'Message body'}
     message = Message.find_by_subject('Test created message')
     assert_not_nil message
-    assert_redirected_to "boards/1/topics/#{message.to_param}"
+    assert_redirected_to "/boards/1/topics/#{message.to_param}"
     assert_equal 'Message body', message.content
     assert_equal 2, message.author_id
     assert_equal 1, message.board_id
@@ -114,7 +114,7 @@
     post :edit, :board_id => 1, :id => 1,
                 :message => { :subject => 'New subject',
                               :content => 'New body'}
-    assert_redirected_to 'boards/1/topics/1'
+    assert_redirected_to '/boards/1/topics/1'
     message = Message.find(1)
     assert_equal 'New subject', message.subject
     assert_equal 'New body', message.content
@@ -124,14 +124,14 @@
     @request.session[:user_id] = 2
     post :reply, :board_id => 1, :id => 1, :reply => { :content => 'This is a test reply', :subject => 'Test reply' }
     reply = Message.find(:first, :order => 'id DESC')
-    assert_redirected_to "boards/1/topics/1?r=#{reply.id}"
+    assert_redirected_to "/boards/1/topics/1?r=#{reply.id}"
     assert Message.find_by_subject('Test reply')
   end
   
   def test_destroy_topic
     @request.session[:user_id] = 2
     post :destroy, :board_id => 1, :id => 1
-    assert_redirected_to 'projects/ecookbook/boards/1'
+    assert_redirected_to '/projects/ecookbook/boards/1'
     assert_nil Message.find_by_id(1)
   end
   
--- a/test/functional/.svn/text-base/my_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/my_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -68,7 +68,7 @@
                              :login => "root",
                              :admin => 1,
                              :custom_field_values => {"4" => "0100562500"}}
-    assert_redirected_to 'my/account'
+    assert_redirected_to '/my/account'
     user = User.find(2)
     assert_equal user, assigns(:user)
     assert_equal "Joe", user.firstname
@@ -102,7 +102,7 @@
     post :password, :password => 'jsmith',
                     :new_password => 'hello',
                     :new_password_confirmation => 'hello'
-    assert_redirected_to 'my/account'
+    assert_redirected_to '/my/account'
     assert User.try_to_login('jsmith', 'hello')
   end
   
--- a/test/functional/.svn/text-base/news_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/news_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -73,7 +73,7 @@
     post :create, :project_id => 1, :news => { :title => 'NewsControllerTest',
                                             :description => 'This is the description',
                                             :summary => '' }
-    assert_redirected_to 'projects/ecookbook/news'
+    assert_redirected_to '/projects/ecookbook/news'
     
     news = News.find_by_title('NewsControllerTest')
     assert_not_nil news
@@ -93,7 +93,7 @@
   def test_put_update
     @request.session[:user_id] = 2
     put :update, :id => 1, :news => { :description => 'Description changed by test_post_edit' }
-    assert_redirected_to 'news/1'
+    assert_redirected_to '/news/1'
     news = News.find(1)
     assert_equal 'Description changed by test_post_edit', news.description
   end
@@ -113,19 +113,8 @@
   
   def test_destroy
     @request.session[:user_id] = 2
-    post :destroy, :id => 1
-    assert_redirected_to 'projects/ecookbook/news'
+    delete :destroy, :id => 1
+    assert_redirected_to '/projects/ecookbook/news'
     assert_nil News.find_by_id(1)
   end
-  
-  def test_preview
-    get :preview, :project_id => 1,
-                  :news => {:title => '',
-                            :description => 'News description',
-                            :summary => ''}
-    assert_response :success
-    assert_template 'common/_preview'
-    assert_tag :tag => 'fieldset', :attributes => { :class => 'preview' },
-                                   :content => /News description/
-  end
 end
--- a/test/functional/.svn/text-base/previews_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/previews_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -19,4 +19,14 @@
     assert_not_nil assigns(:notes)
   end
 
+  def test_news
+    get :news, :project_id => 1,
+                  :news => {:title => '',
+                            :description => 'News description',
+                            :summary => ''}
+    assert_response :success
+    assert_template 'common/_preview'
+    assert_tag :tag => 'fieldset', :attributes => { :class => 'preview' },
+                                   :content => /News description/
+  end
 end
--- a/test/functional/.svn/text-base/project_enumerations_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/project_enumerations_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -20,7 +20,7 @@
     }
 
     assert_response :redirect
-    assert_redirected_to 'projects/ecookbook/settings/activities'
+    assert_redirected_to '/projects/ecookbook/settings/activities'
 
     # Created project specific activities...
     project = Project.find('ecookbook')
@@ -83,7 +83,7 @@
     }
 
     assert_response :redirect
-    assert_redirected_to 'projects/ecookbook/settings/activities'
+    assert_redirected_to '/projects/ecookbook/settings/activities'
 
     # Created project specific activities...
     project = Project.find('ecookbook')
@@ -159,7 +159,7 @@
 
     delete :destroy, :project_id => 1
     assert_response :redirect
-    assert_redirected_to 'projects/ecookbook/settings/activities'
+    assert_redirected_to '/projects/ecookbook/settings/activities'
 
     assert_nil TimeEntryActivity.find_by_id(project_activity.id)
     assert_nil TimeEntryActivity.find_by_id(project_activity_two.id)
@@ -179,7 +179,7 @@
     
     delete :destroy, :project_id => 1
     assert_response :redirect
-    assert_redirected_to 'projects/ecookbook/settings/activities'
+    assert_redirected_to '/projects/ecookbook/settings/activities'
 
     assert_nil TimeEntryActivity.find_by_id(project_activity.id)
     assert_equal 0, TimeEntry.find_all_by_activity_id_and_project_id(project_activity.id, 1).size, "TimeEntries still assigned to project specific activity"
--- a/test/functional/.svn/text-base/projects_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/projects_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -284,6 +284,18 @@
     assert_template 'show'
     assert_not_nil assigns(:project)
     assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
+    
+    assert_tag 'li', :content => /Development status/
+  end
+
+  def test_show_should_not_display_hidden_custom_fields
+    ProjectCustomField.find_by_name('Development status').update_attribute :visible, false
+    get :show, :id => 'ecookbook'
+    assert_response :success
+    assert_template 'show'
+    assert_not_nil assigns(:project)
+    
+    assert_no_tag 'li', :content => /Development status/
   end
   
   def test_show_should_not_fail_when_custom_values_are_nil
@@ -296,6 +308,16 @@
     assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
   end
   
+  def show_archived_project_should_be_denied
+    project = Project.find_by_identifier('ecookbook')
+    project.archive!
+    
+    get :show, :id => 'ecookbook'
+    assert_response 403
+    assert_nil assigns(:project)
+    assert_tag :tag => 'p', :content => /archived/
+  end
+  
   def test_private_subprojects_hidden
     get :show, :id => 'ecookbook'
     assert_response :success
@@ -322,7 +344,7 @@
     @request.session[:user_id] = 2 # manager
     post :update, :id => 1, :project => {:name => 'Test changed name',
                                        :issue_custom_field_ids => ['']}
-    assert_redirected_to 'projects/ecookbook/settings'
+    assert_redirected_to '/projects/ecookbook/settings'
     project = Project.find(1)
     assert_equal 'Test changed name', project.name
   end
@@ -338,14 +360,14 @@
   def test_post_destroy
     @request.session[:user_id] = 1 # admin
     post :destroy, :id => 1, :confirm => 1
-    assert_redirected_to 'admin/projects'
+    assert_redirected_to '/admin/projects'
     assert_nil Project.find_by_id(1)
   end
   
   def test_archive
     @request.session[:user_id] = 1 # admin
     post :archive, :id => 1
-    assert_redirected_to 'admin/projects'
+    assert_redirected_to '/admin/projects'
     assert !Project.find(1).active?
   end
   
@@ -353,7 +375,7 @@
     @request.session[:user_id] = 1 # admin
     Project.find(1).archive
     post :unarchive, :id => 1
-    assert_redirected_to 'admin/projects'
+    assert_redirected_to '/admin/projects'
     assert Project.find(1).active?
   end
   
@@ -389,9 +411,20 @@
     assert_redirected_to :controller => 'admin', :action => 'projects'
   end
 
+  context "POST :copy" do
+    should "TODO: test the rest of the method"
+
+    should "redirect to the project settings when successful" do
+      @request.session[:user_id] = 1 # admin
+      post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'}
+      assert_response :redirect
+      assert_redirected_to :controller => 'projects', :action => 'settings'
+    end
+  end
+
   def test_jump_should_redirect_to_active_tab
     get :show, :id => 1, :jump => 'issues'
-    assert_redirected_to 'projects/ecookbook/issues'
+    assert_redirected_to '/projects/ecookbook/issues'
   end
   
   def test_jump_should_not_redirect_to_inactive_tab
--- a/test/functional/.svn/text-base/repositories_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/repositories_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -98,7 +98,7 @@
     
     assert_no_difference "Changeset.count(:conditions => 'user_id = 3')" do
       post :committers, :id => 1, :committers => { '0' => ['foo', '2'], '1' => ['dlopper', '3']}
-      assert_redirected_to 'projects/ecookbook/repository/committers'
+      assert_redirected_to '/projects/ecookbook/repository/committers'
       assert_equal User.find(2), c.reload.user
     end
   end
--- a/test/functional/.svn/text-base/repositories_cvs_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/repositories_cvs_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -106,7 +106,7 @@
     
     def test_entry_not_found
       get :entry, :id => 1, :path => ['sources', 'zzz.c']
-      assert_tag :tag => 'div', :attributes => { :class => /error/ },
+      assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /The entry or revision was not found in the repository/
     end
   
--- a/test/functional/.svn/text-base/repositories_git_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/repositories_git_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -50,7 +50,7 @@
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
-      assert_equal 7, assigns(:entries).size
+      assert_equal 9, assigns(:entries).size
       assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'this_is_a_really_long_and_verbose_directory_name' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
@@ -58,6 +58,8 @@
       assert assigns(:entries).detect {|e| e.name == 'copied_README' && e.kind == 'file'}
       assert assigns(:entries).detect {|e| e.name == 'new_file.txt' && e.kind == 'file'}
       assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'}
+      assert assigns(:entries).detect {|e| e.name == 'filemane with spaces.txt' && e.kind == 'file'}
+      assert assigns(:entries).detect {|e| e.name == ' filename with a leading space.txt ' && e.kind == 'file'}
     end
 
     def test_browse_branch
@@ -152,7 +154,7 @@
     def test_annotate_binary_file
       get :annotate, :id => 3, :path => ['images', 'edit.png']
       assert_response 500
-      assert_tag :tag => 'div', :attributes => { :class => /error/ },
+      assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /can not be annotated/
     end
   else
--- a/test/functional/.svn/text-base/repositories_subversion_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/repositories_subversion_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -129,7 +129,7 @@
     
     def test_entry_not_found
       get :entry, :id => 1, :path => ['subversion_test', 'zzz.c']
-      assert_tag :tag => 'div', :attributes => { :class => /error/ },
+      assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /The entry or revision was not found in the repository/
     end
   
--- a/test/functional/.svn/text-base/roles_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/roles_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -65,7 +65,7 @@
                          :permissions => ['add_issues', 'edit_issues', 'log_time', ''],
                          :assignable => '0'}
     
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     role = Role.find_by_name('RoleWithoutWorkflowCopy')
     assert_not_nil role
     assert_equal [:add_issues, :edit_issues, :log_time], role.permissions
@@ -78,7 +78,7 @@
                          :assignable => '0'},
                :copy_workflow_from => '1'
     
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     role = Role.find_by_name('RoleWithWorkflowCopy')
     assert_not_nil role
     assert_equal Role.find(1).workflows.size, role.workflows.size
@@ -97,7 +97,7 @@
                           :permissions => ['edit_project', ''],
                           :assignable => '0'}
     
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     role = Role.find(1)
     assert_equal [:edit_project], role.permissions
   end
@@ -107,13 +107,13 @@
     assert r.save
     
     post :destroy, :id => r
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert_nil Role.find_by_id(r.id)
   end
   
   def test_destroy_role_in_use
     post :destroy, :id => 1
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert flash[:error] == 'This role is in use and can not be deleted.'
     assert_not_nil Role.find_by_id(1)
   end
@@ -139,7 +139,7 @@
   
   def test_post_report
     post :report, :permissions => { '0' => '', '1' => ['edit_issues'], '3' => ['add_issues', 'delete_issues']}
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     
     assert_equal [:edit_issues], Role.find(1).permissions
     assert_equal [:add_issues, :delete_issues], Role.find(3).permissions
@@ -148,33 +148,33 @@
   
   def test_clear_all_permissions
     post :report, :permissions => { '0' => '' }
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert Role.find(1).permissions.empty?
   end
   
   def test_move_highest
     post :edit, :id => 3, :role => {:move_to => 'highest'}
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert_equal 1, Role.find(3).position
   end
 
   def test_move_higher
     position = Role.find(3).position
     post :edit, :id => 3, :role => {:move_to => 'higher'}
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert_equal position - 1, Role.find(3).position
   end
 
   def test_move_lower
     position = Role.find(2).position
     post :edit, :id => 2, :role => {:move_to => 'lower'}
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert_equal position + 1, Role.find(2).position
   end
 
   def test_move_lowest
     post :edit, :id => 2, :role => {:move_to => 'lowest'}
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert_equal Role.count, Role.find(2).position
   end
 end
--- a/test/functional/.svn/text-base/search_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/search_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -126,7 +126,7 @@
   def test_quick_jump_to_issue
     # issue of a public project
     get :index, :q => "3"
-    assert_redirected_to 'issues/3'
+    assert_redirected_to '/issues/3'
     
     # issue of a private project
     get :index, :q => "4"
--- a/test/functional/.svn/text-base/settings_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/settings_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -50,7 +50,7 @@
                               :notified_events => %w(issue_added issue_updated news_added),
                               :emails_footer => 'Test footer'
                               }
-    assert_redirected_to 'settings/edit'
+    assert_redirected_to '/settings/edit'
     assert_equal 'functional@test.foo', Setting.mail_from
     assert !Setting.bcc_recipients?
     assert_equal %w(issue_added issue_updated news_added), Setting.notified_events
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/functional/.svn/text-base/time_entry_reports_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,134 @@
+# -*- coding: utf-8 -*-
+require File.dirname(__FILE__) + '/../test_helper'
+
+class TimeEntryReportsControllerTest < ActionController::TestCase
+  fixtures :projects, :enabled_modules, :roles, :members, :member_roles, :issues, :time_entries, :users, :trackers, :enumerations, :issue_statuses, :custom_fields, :custom_values
+
+  def test_report_no_criteria
+    get :report, :project_id => 1
+    assert_response :success
+    assert_template 'report'
+  end
+  
+  def test_report_all_projects
+    get :report
+    assert_response :success
+    assert_template 'report'
+  end
+  
+  def test_report_all_projects_denied
+    r = Role.anonymous
+    r.permissions.delete(:view_time_entries)
+    r.permissions_will_change!
+    r.save
+    get :report
+    assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Ftime_entries%2Freport'
+  end
+  
+  def test_report_all_projects_one_criteria
+    get :report, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project']
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "8.65", "%.2f" % assigns(:total_hours)
+  end
+
+  def test_report_all_time
+    get :report, :project_id => 1, :criterias => ['project', 'issue']
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "162.90", "%.2f" % assigns(:total_hours)
+  end
+
+  def test_report_all_time_by_day
+    get :report, :project_id => 1, :criterias => ['project', 'issue'], :columns => 'day'
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "162.90", "%.2f" % assigns(:total_hours)
+    assert_tag :tag => 'th', :content => '2007-03-12'
+  end
+  
+  def test_report_one_criteria
+    get :report, :project_id => 1, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project']
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "8.65", "%.2f" % assigns(:total_hours)
+  end
+  
+  def test_report_two_criterias
+    get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"]
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "162.90", "%.2f" % assigns(:total_hours)
+  end
+  
+  def test_report_one_day
+    get :report, :project_id => 1, :columns => 'day', :from => "2007-03-23", :to => "2007-03-23", :criterias => ["member", "activity"]
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "4.25", "%.2f" % assigns(:total_hours)
+  end
+  
+  def test_report_at_issue_level
+    get :report, :project_id => 1, :issue_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"]
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "154.25", "%.2f" % assigns(:total_hours)
+  end
+  
+  def test_report_custom_field_criteria
+    get :report, :project_id => 1, :criterias => ['project', 'cf_1', 'cf_7']
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_not_nil assigns(:criterias)
+    assert_equal 3, assigns(:criterias).size
+    assert_equal "162.90", "%.2f" % assigns(:total_hours)
+    # Custom field column
+    assert_tag :tag => 'th', :content => 'Database'
+    # Custom field row
+    assert_tag :tag => 'td', :content => 'MySQL',
+                             :sibling => { :tag => 'td', :attributes => { :class => 'hours' },
+                                                         :child => { :tag => 'span', :attributes => { :class => 'hours hours-int' },
+                                                                                     :content => '1' }}
+    # Second custom field column
+    assert_tag :tag => 'th', :content => 'Billable'
+  end
+  
+  def test_report_one_criteria_no_result
+    get :report, :project_id => 1, :columns => 'week', :from => "1998-04-01", :to => "1998-04-30", :criterias => ['project']
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "0.00", "%.2f" % assigns(:total_hours)
+  end
+  
+  def test_report_all_projects_csv_export
+    get :report, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv"
+    assert_response :success
+    assert_equal 'text/csv', @response.content_type
+    lines = @response.body.chomp.split("\n")
+    # Headers
+    assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first
+    # Total row
+    assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last
+  end
+  
+  def test_report_csv_export
+    get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv"
+    assert_response :success
+    assert_equal 'text/csv', @response.content_type
+    lines = @response.body.chomp.split("\n")
+    # Headers
+    assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first
+    # Total row
+    assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last
+  end
+  
+end
--- a/test/functional/.svn/text-base/timelog_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/timelog_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -31,9 +31,9 @@
     @response   = ActionController::TestResponse.new
   end
   
-  def test_get_edit
+  def test_get_new
     @request.session[:user_id] = 3
-    get :edit, :project_id => 1
+    get :new, :project_id => 1
     assert_response :success
     assert_template 'edit'
     # Default activity selected
@@ -41,24 +41,24 @@
                                  :content => 'Development'
   end
   
+  def test_get_new_should_only_show_active_time_entry_activities
+    @request.session[:user_id] = 3
+    get :new, :project_id => 1
+    assert_response :success
+    assert_template 'edit'
+    assert_no_tag :tag => 'option', :content => 'Inactive Activity'
+                                    
+  end
+
   def test_get_edit_existing_time
     @request.session[:user_id] = 2
     get :edit, :id => 2, :project_id => nil
     assert_response :success
     assert_template 'edit'
     # Default activity selected
-    assert_tag :tag => 'form', :attributes => { :action => '/projects/ecookbook/timelog/edit/2' }
+    assert_tag :tag => 'form', :attributes => { :action => '/projects/ecookbook/time_entries/2' }
   end
   
-  def test_get_edit_should_only_show_active_time_entry_activities
-    @request.session[:user_id] = 3
-    get :edit, :project_id => 1
-    assert_response :success
-    assert_template 'edit'
-    assert_no_tag :tag => 'option', :content => 'Inactive Activity'
-                                    
-  end
-
   def test_get_edit_with_an_existing_time_entry_with_inactive_activity
     te = TimeEntry.find(1)
     te.activity = TimeEntryActivity.find_by_name("Inactive Activity")
@@ -72,18 +72,18 @@
     assert_tag :tag => 'option', :content => '--- Please select ---'
   end
   
-  def test_post_edit
+  def test_post_create
     # TODO: should POST to issues’ time log instead of project. change form
     # and routing
     @request.session[:user_id] = 3
-    post :edit, :project_id => 1,
+    post :create, :project_id => 1,
                 :time_entry => {:comments => 'Some work on TimelogControllerTest',
                                 # Not the default activity
                                 :activity_id => '11',
                                 :spent_on => '2008-03-14',
                                 :issue_id => '1',
                                 :hours => '7.3'}
-    assert_redirected_to :action => 'details', :project_id => 'ecookbook'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     
     i = Issue.find(1)
     t = TimeEntry.find_by_comments('Some work on TimelogControllerTest')
@@ -101,10 +101,10 @@
     assert_equal 2, entry.user_id
     
     @request.session[:user_id] = 1
-    post :edit, :id => 1,
+    put :update, :id => 1,
                 :time_entry => {:issue_id => '2',
                                 :hours => '8'}
-    assert_redirected_to :action => 'details', :project_id => 'ecookbook'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     entry.reload
     
     assert_equal 8, entry.hours
@@ -114,8 +114,8 @@
   
   def test_destroy
     @request.session[:user_id] = 2
-    post :destroy, :id => 1
-    assert_redirected_to :action => 'details', :project_id => 'ecookbook'
+    delete :destroy, :id => 1
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_equal I18n.t(:notice_successful_delete), flash[:notice]
     assert_nil TimeEntry.find_by_id(1)
   end
@@ -128,8 +128,8 @@
     end
 
     @request.session[:user_id] = 2
-    post :destroy, :id => 1
-    assert_redirected_to :action => 'details', :project_id => 'ecookbook'
+    delete :destroy, :id => 1
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_equal I18n.t(:notice_unable_delete_time_entry), flash[:error]
     assert_not_nil TimeEntry.find_by_id(1)
 
@@ -137,145 +137,18 @@
     TimeEntry.before_destroy.reject! {|callback| callback.method == :stop_callback_chain }
   end
   
-  def test_report_no_criteria
-    get :report, :project_id => 1
+  def test_index_all_projects
+    get :index
     assert_response :success
-    assert_template 'report'
-  end
-  
-  def test_report_all_projects
-    get :report
-    assert_response :success
-    assert_template 'report'
-  end
-  
-  def test_report_all_projects_denied
-    r = Role.anonymous
-    r.permissions.delete(:view_time_entries)
-    r.permissions_will_change!
-    r.save
-    get :report
-    assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Ftime_entries%2Freport'
-  end
-  
-  def test_report_all_projects_one_criteria
-    get :report, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project']
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "8.65", "%.2f" % assigns(:total_hours)
-  end
-
-  def test_report_all_time
-    get :report, :project_id => 1, :criterias => ['project', 'issue']
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "162.90", "%.2f" % assigns(:total_hours)
-  end
-
-  def test_report_all_time_by_day
-    get :report, :project_id => 1, :criterias => ['project', 'issue'], :columns => 'day'
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "162.90", "%.2f" % assigns(:total_hours)
-    assert_tag :tag => 'th', :content => '2007-03-12'
-  end
-  
-  def test_report_one_criteria
-    get :report, :project_id => 1, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project']
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "8.65", "%.2f" % assigns(:total_hours)
-  end
-  
-  def test_report_two_criterias
-    get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"]
-    assert_response :success
-    assert_template 'report'
+    assert_template 'index'
     assert_not_nil assigns(:total_hours)
     assert_equal "162.90", "%.2f" % assigns(:total_hours)
   end
   
-  def test_report_one_day
-    get :report, :project_id => 1, :columns => 'day', :from => "2007-03-23", :to => "2007-03-23", :criterias => ["member", "activity"]
+  def test_index_at_project_level
+    get :index, :project_id => 1
     assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "4.25", "%.2f" % assigns(:total_hours)
-  end
-  
-  def test_report_at_issue_level
-    get :report, :project_id => 1, :issue_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"]
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "154.25", "%.2f" % assigns(:total_hours)
-  end
-  
-  def test_report_custom_field_criteria
-    get :report, :project_id => 1, :criterias => ['project', 'cf_1', 'cf_7']
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_not_nil assigns(:criterias)
-    assert_equal 3, assigns(:criterias).size
-    assert_equal "162.90", "%.2f" % assigns(:total_hours)
-    # Custom field column
-    assert_tag :tag => 'th', :content => 'Database'
-    # Custom field row
-    assert_tag :tag => 'td', :content => 'MySQL',
-                             :sibling => { :tag => 'td', :attributes => { :class => 'hours' },
-                                                         :child => { :tag => 'span', :attributes => { :class => 'hours hours-int' },
-                                                                                     :content => '1' }}
-    # Second custom field column
-    assert_tag :tag => 'th', :content => 'Billable'
-  end
-  
-  def test_report_one_criteria_no_result
-    get :report, :project_id => 1, :columns => 'week', :from => "1998-04-01", :to => "1998-04-30", :criterias => ['project']
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "0.00", "%.2f" % assigns(:total_hours)
-  end
-  
-  def test_report_all_projects_csv_export
-    get :report, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv"
-    assert_response :success
-    assert_equal 'text/csv', @response.content_type
-    lines = @response.body.chomp.split("\n")
-    # Headers
-    assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first
-    # Total row
-    assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last
-  end
-  
-  def test_report_csv_export
-    get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv"
-    assert_response :success
-    assert_equal 'text/csv', @response.content_type
-    lines = @response.body.chomp.split("\n")
-    # Headers
-    assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first
-    # Total row
-    assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last
-  end
-  
-  def test_details_all_projects
-    get :details
-    assert_response :success
-    assert_template 'details'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "162.90", "%.2f" % assigns(:total_hours)
-  end
-  
-  def test_details_at_project_level
-    get :details, :project_id => 1
-    assert_response :success
-    assert_template 'details'
+    assert_template 'index'
     assert_not_nil assigns(:entries)
     assert_equal 4, assigns(:entries).size
     # project and subproject
@@ -287,10 +160,10 @@
     assert_equal '2007-04-22'.to_date, assigns(:to)
   end
   
-  def test_details_at_project_level_with_date_range
-    get :details, :project_id => 1, :from => '2007-03-20', :to => '2007-04-30'
+  def test_index_at_project_level_with_date_range
+    get :index, :project_id => 1, :from => '2007-03-20', :to => '2007-04-30'
     assert_response :success
-    assert_template 'details'
+    assert_template 'index'
     assert_not_nil assigns(:entries)
     assert_equal 3, assigns(:entries).size
     assert_not_nil assigns(:total_hours)
@@ -299,28 +172,28 @@
     assert_equal '2007-04-30'.to_date, assigns(:to)
   end
 
-  def test_details_at_project_level_with_period
-    get :details, :project_id => 1, :period => '7_days'
+  def test_index_at_project_level_with_period
+    get :index, :project_id => 1, :period => '7_days'
     assert_response :success
-    assert_template 'details'
+    assert_template 'index'
     assert_not_nil assigns(:entries)
     assert_not_nil assigns(:total_hours)
     assert_equal Date.today - 7, assigns(:from)
     assert_equal Date.today, assigns(:to)
   end
 
-  def test_details_one_day
-    get :details, :project_id => 1, :from => "2007-03-23", :to => "2007-03-23"
+  def test_index_one_day
+    get :index, :project_id => 1, :from => "2007-03-23", :to => "2007-03-23"
     assert_response :success
-    assert_template 'details'
+    assert_template 'index'
     assert_not_nil assigns(:total_hours)
     assert_equal "4.25", "%.2f" % assigns(:total_hours)
   end
   
-  def test_details_at_issue_level
-    get :details, :issue_id => 1
+  def test_index_at_issue_level
+    get :index, :issue_id => 1
     assert_response :success
-    assert_template 'details'
+    assert_template 'index'
     assert_not_nil assigns(:entries)
     assert_equal 2, assigns(:entries).size
     assert_not_nil assigns(:total_hours)
@@ -330,26 +203,26 @@
     assert_equal '2007-04-22'.to_date, assigns(:to)
   end
   
-  def test_details_atom_feed
-    get :details, :project_id => 1, :format => 'atom'
+  def test_index_atom_feed
+    get :index, :project_id => 1, :format => 'atom'
     assert_response :success
     assert_equal 'application/atom+xml', @response.content_type
     assert_not_nil assigns(:items)
     assert assigns(:items).first.is_a?(TimeEntry)
   end
   
-  def test_details_all_projects_csv_export
+  def test_index_all_projects_csv_export
     Setting.date_format = '%m/%d/%Y'
-    get :details, :format => 'csv'
+    get :index, :format => 'csv'
     assert_response :success
     assert_equal 'text/csv', @response.content_type
     assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n")
     assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\"\n")
   end
   
-  def test_details_csv_export
+  def test_index_csv_export
     Setting.date_format = '%m/%d/%Y'
-    get :details, :project_id => 1, :format => 'csv'
+    get :index, :project_id => 1, :format => 'csv'
     assert_response :success
     assert_equal 'text/csv', @response.content_type
     assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n")
--- a/test/functional/.svn/text-base/users_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/users_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -24,7 +24,7 @@
 class UsersControllerTest < ActionController::TestCase
   include Redmine::I18n
   
-  fixtures :users, :projects, :members, :member_roles, :roles
+  fixtures :users, :projects, :members, :member_roles, :roles, :auth_sources, :custom_fields, :custom_values
   
   def setup
     @controller = UsersController.new
@@ -65,6 +65,19 @@
     assert_response :success
     assert_template 'show'
     assert_not_nil assigns(:user)
+    
+    assert_tag 'li', :content => /Phone number/
+  end
+  
+  def test_show_should_not_display_hidden_custom_fields
+    @request.session[:user_id] = nil
+    UserCustomField.find_by_name('Phone number').update_attribute :visible, false
+    get :show, :id => 2
+    assert_response :success
+    assert_template 'show'
+    assert_not_nil assigns(:user)
+    
+    assert_no_tag 'li', :content => /Phone number/
   end
 
   def test_show_should_not_fail_when_custom_values_are_nil
@@ -107,14 +120,65 @@
     assert project_ids.include?(2) #private project admin can see
   end
 
-  def test_edit
+  context "GET :new" do
+    setup do
+      get :new
+    end
+
+    should_assign_to :user
+    should_respond_with :success
+    should_render_template :new
+  end
+
+  context "POST :create" do
+    context "when successful" do
+      setup do
+        post :create, :user => {
+          :firstname => 'John',
+          :lastname => 'Doe',
+          :login => 'jdoe',
+          :password => 'test',
+          :password_confirmation => 'test',
+          :mail => 'jdoe@gmail.com'
+        },
+        :notification_option => 'none'
+      end
+
+      should_assign_to :user
+      should_respond_with :redirect
+      should_redirect_to('user edit') { {:controller => 'users', :action => 'edit', :id => User.find_by_login('jdoe')}}
+
+      should 'set the users mail notification' do
+        user = User.last
+        assert_equal 'none', user.mail_notification
+      end
+    end
+
+    context "when unsuccessful" do
+      setup do
+        post :create, :user => {}
+      end
+
+      should_assign_to :user
+      should_respond_with :success
+      should_render_template :new
+    end
+
+  end
+
+  def test_update
     ActionMailer::Base.deliveries.clear
-    post :edit, :id => 2, :user => {:firstname => 'Changed'}
-    assert_equal 'Changed', User.find(2).firstname
+    put :update, :id => 2, :user => {:firstname => 'Changed'}, :notification_option => 'all', :pref => {:hide_mail => '1', :comments_sorting => 'desc'}
+
+    user = User.find(2)
+    assert_equal 'Changed', user.firstname
+    assert_equal 'all', user.mail_notification
+    assert_equal true, user.pref[:hide_mail]
+    assert_equal 'desc', user.pref[:comments_sorting]
     assert ActionMailer::Base.deliveries.empty?
   end
   
-  def test_edit_with_activation_should_send_a_notification
+  def test_update_with_activation_should_send_a_notification
     u = User.new(:firstname => 'Foo', :lastname => 'Bar', :mail => 'foo.bar@somenet.foo', :language => 'fr')
     u.login = 'foo'
     u.status = User::STATUS_REGISTERED
@@ -122,7 +186,7 @@
     ActionMailer::Base.deliveries.clear
     Setting.bcc_recipients = '1'
     
-    post :edit, :id => u.id, :user => {:status => User::STATUS_ACTIVE}
+    put :update, :id => u.id, :user => {:status => User::STATUS_ACTIVE}
     assert u.reload.active?
     mail = ActionMailer::Base.deliveries.last
     assert_not_nil mail
@@ -130,12 +194,12 @@
     assert mail.body.include?(ll('fr', :notice_account_activated))
   end
   
-  def test_edit_with_password_change_should_send_a_notification
+  def test_updat_with_password_change_should_send_a_notification
     ActionMailer::Base.deliveries.clear
     Setting.bcc_recipients = '1'
     
     u = User.find(2)
-    post :edit, :id => u.id, :user => {}, :password => 'newpass', :password_confirmation => 'newpass', :send_information => '1'
+    put :update, :id => u.id, :user => {}, :password => 'newpass', :password_confirmation => 'newpass', :send_information => '1'
     assert_equal User.hash_password('newpass'), u.reload.hashed_password 
     
     mail = ActionMailer::Base.deliveries.last
@@ -144,13 +208,13 @@
     assert mail.body.include?('newpass')
   end
 
-  test "POST :edit with a password change to an AuthSource user switching to Internal authentication" do
+  test "put :update with a password change to an AuthSource user switching to Internal authentication" do
     # Configure as auth source
     u = User.find(2)
     u.auth_source = AuthSource.find(1)
     u.save!
 
-    post :edit, :id => u.id, :user => {:auth_source_id => ''}, :password => 'newpass', :password_confirmation => 'newpass'
+    put :update, :id => u.id, :user => {:auth_source_id => ''}, :password => 'newpass', :password_confirmation => 'newpass'
 
     assert_equal nil, u.reload.auth_source
     assert_equal User.hash_password('newpass'), u.reload.hashed_password
--- a/test/functional/.svn/text-base/versions_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/versions_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -123,6 +123,15 @@
     assert_equal 'New version name', version.name
     assert_equal Date.today, version.effective_date
   end
+  
+  def test_post_update_with_validation_failure
+    @request.session[:user_id] = 2
+    put :update, :id => 2, 
+                 :version => { :name => '', 
+                               :effective_date => Date.today.strftime("%Y-%m-%d")}
+    assert_response :success
+    assert_template 'edit'
+  end
 
   def test_destroy
     @request.session[:user_id] = 2
--- a/test/functional/.svn/text-base/wiki_controller_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/.svn/text-base/wiki_controller_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -32,7 +32,7 @@
   end
   
   def test_show_start_page
-    get :index, :id => 'ecookbook'
+    get :show, :project_id => 'ecookbook'
     assert_response :success
     assert_template 'show'
     assert_tag :tag => 'h1', :content => /CookBook documentation/
@@ -45,7 +45,7 @@
   end
   
   def test_show_page_with_name
-    get :index, :id => 1, :page => 'Another_page'
+    get :show, :project_id => 1, :id => 'Another_page'
     assert_response :success
     assert_template 'show'
     assert_tag :tag => 'h1', :content => /Another page/
@@ -60,32 +60,32 @@
     page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
     page.save!
     
-    get :index, :id => 1, :page => 'Another_page'
+    get :show, :project_id => 1, :id => 'Another_page'
     assert_response :success
     assert_tag :tag => 'div', :attributes => {:id => 'sidebar'},
                               :content => /Side bar content for test_show_with_sidebar/
   end
   
   def test_show_unexistent_page_without_edit_right
-    get :index, :id => 1, :page => 'Unexistent page'
+    get :show, :project_id => 1, :id => 'Unexistent page'
     assert_response 404
   end
   
   def test_show_unexistent_page_with_edit_right
     @request.session[:user_id] = 2
-    get :index, :id => 1, :page => 'Unexistent page'
+    get :show, :project_id => 1, :id => 'Unexistent page'
     assert_response :success
     assert_template 'edit'
   end
   
   def test_create_page
     @request.session[:user_id] = 2
-    post :edit, :id => 1,
-                :page => 'New page',
+    put :update, :project_id => 1,
+                :id => 'New page',
                 :content => {:comments => 'Created the page',
                              :text => "h1. New page\n\nThis is a new page",
                              :version => 0}
-    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'New_page'
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'New_page'
     page = Project.find(1).wiki.find_page('New page')
     assert !page.new_record?
     assert_not_nil page.content
@@ -96,8 +96,8 @@
     @request.session[:user_id] = 2
     assert_difference 'WikiPage.count' do
       assert_difference 'Attachment.count' do
-        post :edit, :id => 1,
-                    :page => 'New page',
+        put :update, :project_id => 1,
+                    :id => 'New page',
                     :content => {:comments => 'Created the page',
                                  :text => "h1. New page\n\nThis is a new page",
                                  :version => 0},
@@ -111,7 +111,7 @@
   
   def test_preview
     @request.session[:user_id] = 2
-    xhr :post, :preview, :id => 1, :page => 'CookBook_documentation',
+    xhr :post, :preview, :project_id => 1, :id => 'CookBook_documentation',
                                    :content => { :comments => '',
                                                  :text => 'this is a *previewed text*',
                                                  :version => 3 }
@@ -122,7 +122,7 @@
   
   def test_preview_new_page
     @request.session[:user_id] = 2
-    xhr :post, :preview, :id => 1, :page => 'New page',
+    xhr :post, :preview, :project_id => 1, :id => 'New page',
                                    :content => { :text => 'h1. New page',
                                                  :comments => '',
                                                  :version => 0 }
@@ -132,7 +132,7 @@
   end
   
   def test_history
-    get :history, :id => 1, :page => 'CookBook_documentation'
+    get :history, :project_id => 1, :id => 'CookBook_documentation'
     assert_response :success
     assert_template 'history'
     assert_not_nil assigns(:versions)
@@ -141,7 +141,7 @@
   end
 
   def test_history_with_one_version
-    get :history, :id => 1, :page => 'Another_page'
+    get :history, :project_id => 1, :id => 'Another_page'
     assert_response :success
     assert_template 'history'
     assert_not_nil assigns(:versions)
@@ -150,7 +150,7 @@
   end
   
   def test_diff
-    get :diff, :id => 1, :page => 'CookBook_documentation', :version => 2, :version_from => 1
+    get :diff, :project_id => 1, :id => 'CookBook_documentation', :version => 2, :version_from => 1
     assert_response :success
     assert_template 'diff'
     assert_tag :tag => 'span', :attributes => { :class => 'diff_in'},
@@ -158,7 +158,7 @@
   end
   
   def test_annotate
-    get :annotate, :id => 1, :page =>  'CookBook_documentation', :version => 2
+    get :annotate, :project_id => 1, :id =>  'CookBook_documentation', :version => 2
     assert_response :success
     assert_template 'annotate'
     # Line 1
@@ -170,13 +170,45 @@
                              :child => { :tag => 'td', :attributes => {:class => 'author'}, :content => /redMine Admin/ },
                              :child => { :tag => 'td', :content => /Some updated \[\[documentation\]\] here/ }
   end
+
+  def test_get_rename
+    @request.session[:user_id] = 2
+    get :rename, :project_id => 1, :id => 'Another_page'
+    assert_response :success
+    assert_template 'rename'
+    assert_tag 'option',
+      :attributes => {:value => ''},
+      :content => '',
+      :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
+    assert_no_tag 'option',
+      :attributes => {:selected => 'selected'},
+      :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
+  end
+  
+  def test_get_rename_child_page
+    @request.session[:user_id] = 2
+    get :rename, :project_id => 1, :id => 'Child_1'
+    assert_response :success
+    assert_template 'rename'
+    assert_tag 'option',
+      :attributes => {:value => ''},
+      :content => '',
+      :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
+    assert_tag 'option',
+      :attributes => {:value => '2', :selected => 'selected'},
+      :content => /Another page/,
+      :parent => {
+        :tag => 'select',
+        :attributes => {:name => 'wiki_page[parent_id]'}
+      }
+  end
   
   def test_rename_with_redirect
     @request.session[:user_id] = 2
-    post :rename, :id => 1, :page => 'Another_page',
+    post :rename, :project_id => 1, :id => 'Another_page',
                             :wiki_page => { :title => 'Another renamed page',
                                             :redirect_existing_links => 1 }
-    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_renamed_page'
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_renamed_page'
     wiki = Project.find(1).wiki
     # Check redirects
     assert_not_nil wiki.find_page('Another page')
@@ -185,25 +217,41 @@
 
   def test_rename_without_redirect
     @request.session[:user_id] = 2
-    post :rename, :id => 1, :page => 'Another_page',
+    post :rename, :project_id => 1, :id => 'Another_page',
                             :wiki_page => { :title => 'Another renamed page',
                                             :redirect_existing_links => "0" }
-    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_renamed_page'
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_renamed_page'
     wiki = Project.find(1).wiki
     # Check that there's no redirects
     assert_nil wiki.find_page('Another page')
   end
   
+  def test_rename_with_parent_assignment
+    @request.session[:user_id] = 2
+    post :rename, :project_id => 1, :id => 'Another_page',
+      :wiki_page => { :title => 'Another page', :redirect_existing_links => "0", :parent_id => '4' }
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page'
+    assert_equal WikiPage.find(4), WikiPage.find_by_title('Another_page').parent
+  end
+
+  def test_rename_with_parent_unassignment
+    @request.session[:user_id] = 2
+    post :rename, :project_id => 1, :id => 'Child_1',
+      :wiki_page => { :title => 'Child 1', :redirect_existing_links => "0", :parent_id => '' }
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Child_1'
+    assert_nil WikiPage.find_by_title('Child_1').parent
+  end
+  
   def test_destroy_child
     @request.session[:user_id] = 2
-    post :destroy, :id => 1, :page => 'Child_1'
-    assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index'
+    delete :destroy, :project_id => 1, :id => 'Child_1'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
   end
   
   def test_destroy_parent
     @request.session[:user_id] = 2
     assert_no_difference('WikiPage.count') do
-      post :destroy, :id => 1, :page => 'Another_page'
+      delete :destroy, :project_id => 1, :id => 'Another_page'
     end
     assert_response :success
     assert_template 'destroy'
@@ -212,18 +260,18 @@
   def test_destroy_parent_with_nullify
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -1) do
-      post :destroy, :id => 1, :page => 'Another_page', :todo => 'nullify'
+      delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'nullify'
     end
-    assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_nil WikiPage.find_by_id(2)
   end
   
   def test_destroy_parent_with_cascade
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -3) do
-      post :destroy, :id => 1, :page => 'Another_page', :todo => 'destroy'
+      delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'destroy'
     end
-    assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_nil WikiPage.find_by_id(2)
     assert_nil WikiPage.find_by_id(5)
   end
@@ -231,17 +279,17 @@
   def test_destroy_parent_with_reassign
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -1) do
-      post :destroy, :id => 1, :page => 'Another_page', :todo => 'reassign', :reassign_to_id => 1
+      delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'reassign', :reassign_to_id => 1
     end
-    assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_nil WikiPage.find_by_id(2)
     assert_equal WikiPage.find(1), WikiPage.find_by_id(5).parent
   end
   
-  def test_page_index
-    get :special, :id => 'ecookbook', :page => 'Page_index'
+  def test_index
+    get :index, :project_id => 'ecookbook'
     assert_response :success
-    assert_template 'special_page_index'
+    assert_template 'index'
     pages = assigns(:pages)
     assert_not_nil pages
     assert_equal Project.find(1).wiki.pages.size, pages.size
@@ -256,9 +304,49 @@
                     :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Another_page' },
                                                                        :content => 'Another page' } }
   end
+
+  context "GET :export" do
+    context "with an authorized user to export the wiki" do
+      setup do
+        @request.session[:user_id] = 2
+        get :export, :project_id => 'ecookbook'
+      end
+      
+      should_respond_with :success
+      should_assign_to :pages
+      should_respond_with_content_type "text/html"
+      should "export all of the wiki pages to a single html file" do
+        assert_select "a[name=?]", "CookBook_documentation"
+        assert_select "a[name=?]", "Another_page"
+        assert_select "a[name=?]", "Page_with_an_inline_image"
+      end
+      
+    end
+
+    context "with an unauthorized user" do
+      setup do
+        get :export, :project_id => 'ecookbook'
+
+        should_respond_with :redirect
+        should_redirect_to('wiki index') { {:action => 'show', :project_id => @project, :id => nil} }
+      end
+    end
+  end
+
+  context "GET :date_index" do
+    setup do
+      get :date_index, :project_id => 'ecookbook'
+    end
+
+    should_respond_with :success
+    should_assign_to :pages
+    should_assign_to :pages_by_date
+    should_render_template 'wiki/date_index'
+    
+  end
   
   def test_not_found
-    get :index, :id => 999
+    get :show, :project_id => 999
     assert_response 404
   end
   
@@ -266,8 +354,8 @@
     page = WikiPage.find_by_wiki_id_and_title(1, 'Another_page')
     assert !page.protected?
     @request.session[:user_id] = 2
-    post :protect, :id => 1, :page => page.title, :protected => '1'
-    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_page'
+    post :protect, :project_id => 1, :id => page.title, :protected => '1'
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page'
     assert page.reload.protected?
   end
   
@@ -275,14 +363,14 @@
     page = WikiPage.find_by_wiki_id_and_title(1, 'CookBook_documentation')
     assert page.protected?
     @request.session[:user_id] = 2
-    post :protect, :id => 1, :page => page.title, :protected => '0'
-    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'CookBook_documentation'
+    post :protect, :project_id => 1, :id => page.title, :protected => '0'
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'CookBook_documentation'
     assert !page.reload.protected?
   end
   
   def test_show_page_with_edit_link
     @request.session[:user_id] = 2
-    get :index, :id => 1
+    get :show, :project_id => 1
     assert_response :success
     assert_template 'show'
     assert_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
@@ -290,7 +378,7 @@
   
   def test_show_page_without_edit_link
     @request.session[:user_id] = 4
-    get :index, :id => 1
+    get :show, :project_id => 1
     assert_response :success
     assert_template 'show'
     assert_no_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
@@ -299,7 +387,7 @@
   def test_edit_unprotected_page
     # Non members can edit unprotected wiki pages
     @request.session[:user_id] = 4
-    get :edit, :id => 1, :page => 'Another_page'
+    get :edit, :project_id => 1, :id => 'Another_page'
     assert_response :success
     assert_template 'edit'
   end
@@ -307,19 +395,19 @@
   def test_edit_protected_page_by_nonmember
     # Non members can't edit protected wiki pages
     @request.session[:user_id] = 4
-    get :edit, :id => 1, :page => 'CookBook_documentation'
+    get :edit, :project_id => 1, :id => 'CookBook_documentation'
     assert_response 403
   end
   
   def test_edit_protected_page_by_member
     @request.session[:user_id] = 2
-    get :edit, :id => 1, :page => 'CookBook_documentation'
+    get :edit, :project_id => 1, :id => 'CookBook_documentation'
     assert_response :success
     assert_template 'edit'    
   end
   
   def test_history_of_non_existing_page_should_return_404
-    get :history, :id => 1, :page => 'Unknown_page'
+    get :history, :project_id => 1, :id => 'Unknown_page'
     assert_response 404
   end
 end
--- a/test/functional/account_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/account_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -64,7 +64,7 @@
     assert existing_user.save!
 
     post :login, :openid_url => existing_user.identity_url
-    assert_redirected_to 'my/page'
+    assert_redirected_to '/my/page'
   end
 
   def test_login_with_invalid_openid_provider
@@ -86,14 +86,14 @@
     assert existing_user.save!
 
     post :login, :openid_url => existing_user.identity_url
-    assert_redirected_to 'login'
+    assert_redirected_to '/login'
   end
 
   def test_login_with_openid_with_new_user_created
     Setting.self_registration = '3'
     Setting.openid = '1'
     post :login, :openid_url => 'http://openid.example.com/good_user'
-    assert_redirected_to 'my/account'
+    assert_redirected_to '/my/account'
     user = User.find_by_login('cool_user')
     assert user
     assert_equal 'Cool', user.firstname
@@ -113,7 +113,7 @@
     Setting.self_registration = '1'
     Setting.openid = '1'
     post :login, :openid_url => 'http://openid.example.com/good_user'
-    assert_redirected_to 'login'
+    assert_redirected_to '/login'
     user = User.find_by_login('cool_user')
     assert user
 
@@ -125,7 +125,7 @@
     Setting.self_registration = '2'
     Setting.openid = '1'
     post :login, :openid_url => 'http://openid.example.com/good_user'
-    assert_redirected_to 'login'
+    assert_redirected_to '/login'
     user = User.find_by_login('cool_user')
     assert user
     assert_equal User::STATUS_REGISTERED, user.status
@@ -157,7 +157,7 @@
   def test_logout
     @request.session[:user_id] = 2
     get :logout
-    assert_redirected_to ''
+    assert_redirected_to '/'
     assert_nil @request.session[:user_id]
   end
 
--- a/test/functional/attachments_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/attachments_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -95,7 +95,7 @@
       post :destroy, :id => 1
     end
     # no referrer
-    assert_redirected_to 'projects/ecookbook'
+    assert_redirected_to '/projects/ecookbook'
     assert_nil Attachment.find_by_id(1)
     j = issue.journals.find(:first, :order => 'created_on DESC')
     assert_equal 'attachment', j.details.first.property
--- a/test/functional/calendars_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/calendars_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -16,6 +16,16 @@
     assert_template 'calendar'
     assert_not_nil assigns(:calendar)
   end
+
+  context "GET :show" do
+    should "run custom queries" do
+      @query = Query.generate_default!
+      
+      get :show, :query_id => @query.id
+      assert_response :success
+    end
+    
+  end
   
   def test_week_number_calculation
     Setting.start_of_week = 7
--- a/test/functional/comments_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/comments_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -27,7 +27,7 @@
   def test_add_comment
     @request.session[:user_id] = 2
     post :create, :id => 1, :comment => { :comments => 'This is a test comment' }
-    assert_redirected_to 'news/1'
+    assert_redirected_to '/news/1'
     
     comment = News.find(1).comments.find(:first, :order => 'created_on DESC')
     assert_not_nil comment
@@ -40,7 +40,7 @@
     assert_no_difference 'Comment.count' do
       post :create, :id => 1, :comment => { :comments => '' }
       assert_response :redirect
-      assert_redirected_to 'news/1'
+      assert_redirected_to '/news/1'
     end
   end
 
@@ -48,7 +48,7 @@
     comments_count = News.find(1).comments.size
     @request.session[:user_id] = 2
     delete :destroy, :id => 1, :comment_id => 2
-    assert_redirected_to 'news/1'
+    assert_redirected_to '/news/1'
     assert_nil Comment.find_by_id(2)
     assert_equal comments_count - 1, News.find(1).comments.size
   end
--- a/test/functional/context_menus_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/context_menus_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -79,14 +79,27 @@
                                              :class => 'icon-del' }
   end
 
-  def test_context_menu_multiple_issues_of_different_project
+  def test_context_menu_multiple_issues_of_different_projects
     @request.session[:user_id] = 2
-    get :issues, :ids => [1, 2, 4]
+    get :issues, :ids => [1, 2, 6]
     assert_response :success
     assert_template 'context_menu'
+    ids = "ids%5B%5D=1&amp;ids%5B%5D=2&amp;ids%5B%5D=6"
+    assert_tag :tag => 'a', :content => 'Edit',
+                            :attributes => { :href => "/issues/bulk_edit?#{ids}",
+                                             :class => 'icon-edit' }
+    assert_tag :tag => 'a', :content => 'Closed',
+                            :attributes => { :href => "/issues/bulk_edit?#{ids}&amp;issue%5Bstatus_id%5D=5",
+                                             :class => '' }
+    assert_tag :tag => 'a', :content => 'Immediate',
+                            :attributes => { :href => "/issues/bulk_edit?#{ids}&amp;issue%5Bpriority_id%5D=8",
+                                             :class => '' }
+    assert_tag :tag => 'a', :content => 'John Smith',
+                            :attributes => { :href => "/issues/bulk_edit?#{ids}&amp;issue%5Bassigned_to_id%5D=2",
+                                             :class => '' }
     assert_tag :tag => 'a', :content => 'Delete',
-                            :attributes => { :href => '#',
-                                             :class => 'icon-del disabled' }
+                            :attributes => { :href => "/issues/destroy?#{ids}",
+                                             :class => 'icon-del' }
   end
   
 end
--- a/test/functional/documents_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/documents_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -77,7 +77,7 @@
                               :category_id => 2},
                :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
                
-    assert_redirected_to 'projects/ecookbook/documents'
+    assert_redirected_to '/projects/ecookbook/documents'
     
     document = Document.find_by_title('DocumentsControllerTest#test_post_new')
     assert_not_nil document
@@ -90,7 +90,7 @@
   def test_destroy
     @request.session[:user_id] = 2
     post :destroy, :id => 1
-    assert_redirected_to 'projects/ecookbook/documents'
+    assert_redirected_to '/projects/ecookbook/documents'
     assert_nil Document.find_by_id(1)
   end
 end
--- a/test/functional/files_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/files_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -37,7 +37,7 @@
            :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
       assert_response :redirect
     end
-    assert_redirected_to 'projects/ecookbook/files'
+    assert_redirected_to '/projects/ecookbook/files'
     a = Attachment.find(:first, :order => 'created_on DESC')
     assert_equal 'testfile.txt', a.filename
     assert_equal Project.find(1), a.container
@@ -58,7 +58,7 @@
            :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
       assert_response :redirect
     end
-    assert_redirected_to 'projects/ecookbook/files'
+    assert_redirected_to '/projects/ecookbook/files'
     a = Attachment.find(:first, :order => 'created_on DESC')
     assert_equal 'testfile.txt', a.filename
     assert_equal Version.find(2), a.container
--- a/test/functional/gantts_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/gantts_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -20,6 +20,25 @@
       i = Issue.find(2)
       assert_select "div a.issue", /##{i.id}/
     end
+    
+    should "work without issue due dates" do
+      Issue.update_all("due_date = NULL")
+      
+      get :show, :project_id => 1
+      assert_response :success
+      assert_template 'show.html.erb'
+      assert_not_nil assigns(:gantt)
+    end
+    
+    should "work without issue and version due dates" do
+      Issue.update_all("due_date = NULL")
+      Version.update_all("effective_date = NULL")
+      
+      get :show, :project_id => 1
+      assert_response :success
+      assert_template 'show.html.erb'
+      assert_not_nil assigns(:gantt)
+    end
 
     should "work cross project" do
       get :show
--- a/test/functional/groups_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/groups_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -54,7 +54,7 @@
     assert_difference 'Group.count' do
       post :create, :group => {:lastname => 'New group'}
     end
-    assert_redirected_to 'groups'
+    assert_redirected_to '/groups'
   end
   
   def test_edit
@@ -65,14 +65,14 @@
   
   def test_update
     post :update, :id => 10
-    assert_redirected_to 'groups'
+    assert_redirected_to '/groups'
   end
   
   def test_destroy
     assert_difference 'Group.count', -1 do
       post :destroy, :id => 10
     end
-    assert_redirected_to 'groups'
+    assert_redirected_to '/groups'
   end
   
   def test_add_users
--- a/test/functional/issue_moves_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/issue_moves_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -40,6 +40,31 @@
     assert_equal 2, Issue.find(2).tracker_id
   end
 
+  context "#create via bulk move" do
+    setup do
+      @request.session[:user_id] = 2
+    end
+    
+    should "allow changing the issue priority" do
+      post :create, :ids => [1, 2], :priority_id => 6
+
+      assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook'
+      assert_equal 6, Issue.find(1).priority_id
+      assert_equal 6, Issue.find(2).priority_id
+
+    end
+
+    should "allow adding a note when moving" do
+      post :create, :ids => [1, 2], :notes => 'Moving two issues'
+
+      assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook'
+      assert_equal 'Moving two issues', Issue.find(1).journals.last.notes
+      assert_equal 'Moving two issues', Issue.find(2).journals.last.notes
+
+    end
+    
+  end
+
   def test_bulk_copy_to_another_project
     @request.session[:user_id] = 2
     assert_difference 'Issue.count', 2 do
@@ -47,7 +72,7 @@
         post :create, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'}
       end
     end
-    assert_redirected_to 'projects/ecookbook/issues'
+    assert_redirected_to '/projects/ecookbook/issues'
   end
 
   context "#create via bulk copy" do
--- a/test/functional/issues_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/issues_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -125,11 +125,42 @@
     assert_tag :tag => 'a', :content => /Issue of a private subproject/
   end
   
-  def test_index_with_project_and_filter
+  def test_index_with_project_and_default_filter
     get :index, :project_id => 1, :set_filter => 1
     assert_response :success
     assert_template 'index.rhtml'
     assert_not_nil assigns(:issues)
+    
+    query = assigns(:query)
+    assert_not_nil query
+    # default filter
+    assert_equal({'status_id' => {:operator => 'o', :values => ['']}}, query.filters)
+  end
+  
+  def test_index_with_project_and_filter
+    get :index, :project_id => 1, :set_filter => 1, 
+      :fields => ['tracker_id'],
+      :operators => {'tracker_id' => '='},
+      :values => {'tracker_id' => ['1']} 
+    assert_response :success
+    assert_template 'index.rhtml'
+    assert_not_nil assigns(:issues)
+    
+    query = assigns(:query)
+    assert_not_nil query
+    assert_equal({'tracker_id' => {:operator => '=', :values => ['1']}}, query.filters)
+  end
+  
+  def test_index_with_project_and_empty_filters
+    get :index, :project_id => 1, :set_filter => 1, :fields => ['']
+    assert_response :success
+    assert_template 'index.rhtml'
+    assert_not_nil assigns(:issues)
+    
+    query = assigns(:query)
+    assert_not_nil query
+    # no filter
+    assert_equal({}, query.filters)
   end
   
   def test_index_with_query
@@ -340,9 +371,7 @@
     
     get :new, :project_id => 1
     assert_response 500
-    assert_not_nil flash[:error]
-    assert_tag :tag => 'div', :attributes => { :class => /error/ },
-                              :content => /No default issue/
+    assert_error_tag :content => /No default issue/
   end
   
   def test_get_new_with_no_tracker_should_display_an_error
@@ -351,9 +380,7 @@
     
     get :new, :project_id => 1
     assert_response 500
-    assert_not_nil flash[:error]
-    assert_tag :tag => 'div', :attributes => { :class => /error/ },
-                              :content => /No tracker/
+    assert_error_tag :content => /No tracker/
   end
   
   def test_update_new_form
@@ -382,6 +409,7 @@
                             :subject => 'This is the test_new issue',
                             :description => 'This is the description',
                             :priority_id => 5,
+                            :start_date => '2010-11-07',
                             :estimated_hours => '',
                             :custom_field_values => {'2' => 'Value for field 2'}}
     end
@@ -392,12 +420,33 @@
     assert_equal 2, issue.author_id
     assert_equal 3, issue.tracker_id
     assert_equal 2, issue.status_id
+    assert_equal Date.parse('2010-11-07'), issue.start_date
     assert_nil issue.estimated_hours
     v = issue.custom_values.find(:first, :conditions => {:custom_field_id => 2})
     assert_not_nil v
     assert_equal 'Value for field 2', v.value
   end
   
+  def test_post_create_without_start_date
+    @request.session[:user_id] = 2
+    assert_difference 'Issue.count' do
+      post :create, :project_id => 1, 
+                 :issue => {:tracker_id => 3,
+                            :status_id => 2,
+                            :subject => 'This is the test_new issue',
+                            :description => 'This is the description',
+                            :priority_id => 5,
+                            :start_date => '',
+                            :estimated_hours => '',
+                            :custom_field_values => {'2' => 'Value for field 2'}}
+    end
+    assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
+    
+    issue = Issue.find_by_subject('This is the test_new issue')
+    assert_not_nil issue
+    assert_nil issue.start_date
+  end
+  
   def test_post_create_and_continue
     @request.session[:user_id] = 2
     post :create, :project_id => 1, 
@@ -531,7 +580,7 @@
   context "without workflow privilege" do
     setup do
       Workflow.delete_all(["role_id = ?", Role.anonymous.id])
-      Role.anonymous.add_permission! :add_issues
+      Role.anonymous.add_permission! :add_issues, :add_issue_notes
     end
     
     context "#new" do
@@ -556,6 +605,17 @@
         assert_equal IssueStatus.default, issue.status
       end
       
+      should "accept default status" do
+        assert_difference 'Issue.count' do
+          post :create, :project_id => 1, 
+                     :issue => {:tracker_id => 1,
+                                :subject => 'This is an issue',
+                                :status_id => 1}
+        end
+        issue = Issue.last(:order => 'id')
+        assert_equal IssueStatus.default, issue.status
+      end
+      
       should "ignore unauthorized status" do
         assert_difference 'Issue.count' do
           post :create, :project_id => 1, 
@@ -567,6 +627,94 @@
         assert_equal IssueStatus.default, issue.status
       end
     end
+    
+    context "#update" do
+      should "ignore status change" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3}
+        end
+        assert_equal 1, Issue.find(1).status_id
+      end
+      
+      should "ignore attributes changes" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2}
+        end
+        issue = Issue.find(1)
+        assert_equal "Can't print recipes", issue.subject
+        assert_nil issue.assigned_to
+      end
+    end
+  end
+  
+  context "with workflow privilege" do
+    setup do
+      Workflow.delete_all(["role_id = ?", Role.anonymous.id])
+      Workflow.create!(:role => Role.anonymous, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3)
+      Workflow.create!(:role => Role.anonymous, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4)
+      Role.anonymous.add_permission! :add_issues, :add_issue_notes
+    end
+    
+    context "#update" do
+      should "accept authorized status" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3}
+        end
+        assert_equal 3, Issue.find(1).status_id
+      end
+      
+      should "ignore unauthorized status" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2}
+        end
+        assert_equal 1, Issue.find(1).status_id
+      end
+      
+      should "accept authorized attributes changes" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:assigned_to_id => 2}
+        end
+        issue = Issue.find(1)
+        assert_equal 2, issue.assigned_to_id
+      end
+      
+      should "ignore unauthorized attributes changes" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed'}
+        end
+        issue = Issue.find(1)
+        assert_equal "Can't print recipes", issue.subject
+      end
+    end
+    
+    context "and :edit_issues permission" do
+      setup do
+        Role.anonymous.add_permission! :add_issues, :edit_issues
+      end
+
+      should "accept authorized status" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3}
+        end
+        assert_equal 3, Issue.find(1).status_id
+      end
+      
+      should "ignore unauthorized status" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2}
+        end
+        assert_equal 1, Issue.find(1).status_id
+      end
+      
+      should "accept authorized attributes changes" do
+        assert_difference 'Journal.count' do
+          put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2}
+        end
+        issue = Issue.find(1)
+        assert_equal "changed", issue.subject
+        assert_equal 2, issue.assigned_to_id
+      end
+    end
   end
   
   def test_copy_issue
@@ -589,7 +737,8 @@
   
   def test_get_edit_with_params
     @request.session[:user_id] = 2
-    get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 }
+    get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 },
+        :time_entry => { :hours => '2.5', :comments => 'test_get_edit_with_params', :activity_id => TimeEntryActivity.first.id }
     assert_response :success
     assert_template 'edit'
     
@@ -607,6 +756,12 @@
                         :child => { :tag => 'option', 
                                     :content => 'Urgent',
                                     :attributes => { :selected => 'selected' } }
+
+    assert_tag :input, :attributes => { :name => 'time_entry[hours]', :value => '2.5' }
+    assert_tag :select, :attributes => { :name => 'time_entry[activity_id]' },
+                        :child => { :tag => 'option',
+                                    :attributes => { :selected => 'selected', :value => TimeEntryActivity.first.id } }
+    assert_tag :input, :attributes => { :name => 'time_entry[comments]', :value => 'test_get_edit_with_params' }
   end
 
   def test_update_edit_form
@@ -911,6 +1066,19 @@
     assert_tag :select, :attributes => {:name => 'issue[custom_field_values][1]'}
   end
 
+  def test_get_bulk_edit_on_different_projects
+    @request.session[:user_id] = 2
+    get :bulk_edit, :ids => [1, 2, 6]
+    assert_response :success
+    assert_template 'bulk_edit'
+    
+    # Project specific custom field, date type
+    field = CustomField.find(9)
+    assert !field.is_for_all?
+    assert !field.project_ids.include?(Issue.find(6).project_id)
+    assert_no_tag :input, :attributes => {:name => 'issue[custom_field_values][9]'}
+  end
+
   def test_bulk_update
     @request.session[:user_id] = 2
     # update issues priority
@@ -930,6 +1098,39 @@
     assert_equal 1, journal.details.size
   end
 
+  def test_bulk_update_on_different_projects
+    @request.session[:user_id] = 2
+    # update issues priority
+    post :bulk_update, :ids => [1, 2, 6], :notes => 'Bulk editing',
+                                     :issue => {:priority_id => 7,
+                                                :assigned_to_id => '',
+                                                :custom_field_values => {'2' => ''}}
+    
+    assert_response 302
+    # check that the issues were updated
+    assert_equal [7, 7, 7], Issue.find([1,2,6]).map(&:priority_id)
+    
+    issue = Issue.find(1)
+    journal = issue.journals.find(:first, :order => 'created_on DESC')
+    assert_equal '125', issue.custom_value_for(2).value
+    assert_equal 'Bulk editing', journal.notes
+    assert_equal 1, journal.details.size
+  end
+
+  def test_bulk_update_on_different_projects_without_rights
+    @request.session[:user_id] = 3
+    user = User.find(3)
+    action = { :controller => "issues", :action => "bulk_update" }
+    assert user.allowed_to?(action, Issue.find(1).project)
+    assert ! user.allowed_to?(action, Issue.find(6).project)
+    post :bulk_update, :ids => [1, 6], :notes => 'Bulk should fail',
+                                     :issue => {:priority_id => 7,
+                                                :assigned_to_id => '',
+                                                :custom_field_values => {'2' => ''}}
+    assert_response 403
+    assert_not_equal "Bulk should fail", Journal.last.notes
+  end
+    
   def test_bullk_update_should_send_a_notification
     @request.session[:user_id] = 2
     ActionMailer::Base.deliveries.clear
@@ -1061,6 +1262,13 @@
     assert_equal 2, TimeEntry.find(2).issue_id
   end
   
+  def test_destroy_issues_from_different_projects
+    @request.session[:user_id] = 2
+    post :destroy, :ids => [1, 2, 6], :todo => 'destroy'
+    assert_redirected_to :controller => 'issues', :action => 'index'
+    assert !(Issue.find_by_id(1) || Issue.find_by_id(2) || Issue.find_by_id(6))
+  end
+  
   def test_default_search_scope
     get :index
     assert_tag :div, :attributes => {:id => 'quick-search'},
--- a/test/functional/messages_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/messages_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -87,7 +87,7 @@
                              :content => 'Message body'}
     message = Message.find_by_subject('Test created message')
     assert_not_nil message
-    assert_redirected_to "boards/1/topics/#{message.to_param}"
+    assert_redirected_to "/boards/1/topics/#{message.to_param}"
     assert_equal 'Message body', message.content
     assert_equal 2, message.author_id
     assert_equal 1, message.board_id
@@ -114,7 +114,7 @@
     post :edit, :board_id => 1, :id => 1,
                 :message => { :subject => 'New subject',
                               :content => 'New body'}
-    assert_redirected_to 'boards/1/topics/1'
+    assert_redirected_to '/boards/1/topics/1'
     message = Message.find(1)
     assert_equal 'New subject', message.subject
     assert_equal 'New body', message.content
@@ -124,14 +124,14 @@
     @request.session[:user_id] = 2
     post :reply, :board_id => 1, :id => 1, :reply => { :content => 'This is a test reply', :subject => 'Test reply' }
     reply = Message.find(:first, :order => 'id DESC')
-    assert_redirected_to "boards/1/topics/1?r=#{reply.id}"
+    assert_redirected_to "/boards/1/topics/1?r=#{reply.id}"
     assert Message.find_by_subject('Test reply')
   end
   
   def test_destroy_topic
     @request.session[:user_id] = 2
     post :destroy, :board_id => 1, :id => 1
-    assert_redirected_to 'projects/ecookbook/boards/1'
+    assert_redirected_to '/projects/ecookbook/boards/1'
     assert_nil Message.find_by_id(1)
   end
   
--- a/test/functional/my_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/my_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -68,7 +68,7 @@
                              :login => "root",
                              :admin => 1,
                              :custom_field_values => {"4" => "0100562500"}}
-    assert_redirected_to 'my/account'
+    assert_redirected_to '/my/account'
     user = User.find(2)
     assert_equal user, assigns(:user)
     assert_equal "Joe", user.firstname
@@ -102,7 +102,7 @@
     post :password, :password => 'jsmith',
                     :new_password => 'hello',
                     :new_password_confirmation => 'hello'
-    assert_redirected_to 'my/account'
+    assert_redirected_to '/my/account'
     assert User.try_to_login('jsmith', 'hello')
   end
   
--- a/test/functional/news_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/news_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -73,7 +73,7 @@
     post :create, :project_id => 1, :news => { :title => 'NewsControllerTest',
                                             :description => 'This is the description',
                                             :summary => '' }
-    assert_redirected_to 'projects/ecookbook/news'
+    assert_redirected_to '/projects/ecookbook/news'
     
     news = News.find_by_title('NewsControllerTest')
     assert_not_nil news
@@ -93,7 +93,7 @@
   def test_put_update
     @request.session[:user_id] = 2
     put :update, :id => 1, :news => { :description => 'Description changed by test_post_edit' }
-    assert_redirected_to 'news/1'
+    assert_redirected_to '/news/1'
     news = News.find(1)
     assert_equal 'Description changed by test_post_edit', news.description
   end
@@ -113,19 +113,8 @@
   
   def test_destroy
     @request.session[:user_id] = 2
-    post :destroy, :id => 1
-    assert_redirected_to 'projects/ecookbook/news'
+    delete :destroy, :id => 1
+    assert_redirected_to '/projects/ecookbook/news'
     assert_nil News.find_by_id(1)
   end
-  
-  def test_preview
-    get :preview, :project_id => 1,
-                  :news => {:title => '',
-                            :description => 'News description',
-                            :summary => ''}
-    assert_response :success
-    assert_template 'common/_preview'
-    assert_tag :tag => 'fieldset', :attributes => { :class => 'preview' },
-                                   :content => /News description/
-  end
 end
--- a/test/functional/previews_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/previews_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -19,4 +19,14 @@
     assert_not_nil assigns(:notes)
   end
 
+  def test_news
+    get :news, :project_id => 1,
+                  :news => {:title => '',
+                            :description => 'News description',
+                            :summary => ''}
+    assert_response :success
+    assert_template 'common/_preview'
+    assert_tag :tag => 'fieldset', :attributes => { :class => 'preview' },
+                                   :content => /News description/
+  end
 end
--- a/test/functional/project_enumerations_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/project_enumerations_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -20,7 +20,7 @@
     }
 
     assert_response :redirect
-    assert_redirected_to 'projects/ecookbook/settings/activities'
+    assert_redirected_to '/projects/ecookbook/settings/activities'
 
     # Created project specific activities...
     project = Project.find('ecookbook')
@@ -83,7 +83,7 @@
     }
 
     assert_response :redirect
-    assert_redirected_to 'projects/ecookbook/settings/activities'
+    assert_redirected_to '/projects/ecookbook/settings/activities'
 
     # Created project specific activities...
     project = Project.find('ecookbook')
@@ -159,7 +159,7 @@
 
     delete :destroy, :project_id => 1
     assert_response :redirect
-    assert_redirected_to 'projects/ecookbook/settings/activities'
+    assert_redirected_to '/projects/ecookbook/settings/activities'
 
     assert_nil TimeEntryActivity.find_by_id(project_activity.id)
     assert_nil TimeEntryActivity.find_by_id(project_activity_two.id)
@@ -179,7 +179,7 @@
     
     delete :destroy, :project_id => 1
     assert_response :redirect
-    assert_redirected_to 'projects/ecookbook/settings/activities'
+    assert_redirected_to '/projects/ecookbook/settings/activities'
 
     assert_nil TimeEntryActivity.find_by_id(project_activity.id)
     assert_equal 0, TimeEntry.find_all_by_activity_id_and_project_id(project_activity.id, 1).size, "TimeEntries still assigned to project specific activity"
--- a/test/functional/projects_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/projects_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -284,6 +284,18 @@
     assert_template 'show'
     assert_not_nil assigns(:project)
     assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
+    
+    assert_tag 'li', :content => /Development status/
+  end
+
+  def test_show_should_not_display_hidden_custom_fields
+    ProjectCustomField.find_by_name('Development status').update_attribute :visible, false
+    get :show, :id => 'ecookbook'
+    assert_response :success
+    assert_template 'show'
+    assert_not_nil assigns(:project)
+    
+    assert_no_tag 'li', :content => /Development status/
   end
   
   def test_show_should_not_fail_when_custom_values_are_nil
@@ -296,6 +308,16 @@
     assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
   end
   
+  def show_archived_project_should_be_denied
+    project = Project.find_by_identifier('ecookbook')
+    project.archive!
+    
+    get :show, :id => 'ecookbook'
+    assert_response 403
+    assert_nil assigns(:project)
+    assert_tag :tag => 'p', :content => /archived/
+  end
+  
   def test_private_subprojects_hidden
     get :show, :id => 'ecookbook'
     assert_response :success
@@ -322,7 +344,7 @@
     @request.session[:user_id] = 2 # manager
     post :update, :id => 1, :project => {:name => 'Test changed name',
                                        :issue_custom_field_ids => ['']}
-    assert_redirected_to 'projects/ecookbook/settings'
+    assert_redirected_to '/projects/ecookbook/settings'
     project = Project.find(1)
     assert_equal 'Test changed name', project.name
   end
@@ -338,14 +360,14 @@
   def test_post_destroy
     @request.session[:user_id] = 1 # admin
     post :destroy, :id => 1, :confirm => 1
-    assert_redirected_to 'admin/projects'
+    assert_redirected_to '/admin/projects'
     assert_nil Project.find_by_id(1)
   end
   
   def test_archive
     @request.session[:user_id] = 1 # admin
     post :archive, :id => 1
-    assert_redirected_to 'admin/projects'
+    assert_redirected_to '/admin/projects'
     assert !Project.find(1).active?
   end
   
@@ -353,7 +375,7 @@
     @request.session[:user_id] = 1 # admin
     Project.find(1).archive
     post :unarchive, :id => 1
-    assert_redirected_to 'admin/projects'
+    assert_redirected_to '/admin/projects'
     assert Project.find(1).active?
   end
   
@@ -389,9 +411,20 @@
     assert_redirected_to :controller => 'admin', :action => 'projects'
   end
 
+  context "POST :copy" do
+    should "TODO: test the rest of the method"
+
+    should "redirect to the project settings when successful" do
+      @request.session[:user_id] = 1 # admin
+      post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'}
+      assert_response :redirect
+      assert_redirected_to :controller => 'projects', :action => 'settings'
+    end
+  end
+
   def test_jump_should_redirect_to_active_tab
     get :show, :id => 1, :jump => 'issues'
-    assert_redirected_to 'projects/ecookbook/issues'
+    assert_redirected_to '/projects/ecookbook/issues'
   end
   
   def test_jump_should_not_redirect_to_inactive_tab
--- a/test/functional/repositories_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/repositories_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -98,7 +98,7 @@
     
     assert_no_difference "Changeset.count(:conditions => 'user_id = 3')" do
       post :committers, :id => 1, :committers => { '0' => ['foo', '2'], '1' => ['dlopper', '3']}
-      assert_redirected_to 'projects/ecookbook/repository/committers'
+      assert_redirected_to '/projects/ecookbook/repository/committers'
       assert_equal User.find(2), c.reload.user
     end
   end
--- a/test/functional/repositories_cvs_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/repositories_cvs_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -106,7 +106,7 @@
     
     def test_entry_not_found
       get :entry, :id => 1, :path => ['sources', 'zzz.c']
-      assert_tag :tag => 'div', :attributes => { :class => /error/ },
+      assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /The entry or revision was not found in the repository/
     end
   
--- a/test/functional/repositories_git_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/repositories_git_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -50,7 +50,7 @@
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
-      assert_equal 7, assigns(:entries).size
+      assert_equal 9, assigns(:entries).size
       assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'this_is_a_really_long_and_verbose_directory_name' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
@@ -58,6 +58,8 @@
       assert assigns(:entries).detect {|e| e.name == 'copied_README' && e.kind == 'file'}
       assert assigns(:entries).detect {|e| e.name == 'new_file.txt' && e.kind == 'file'}
       assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'}
+      assert assigns(:entries).detect {|e| e.name == 'filemane with spaces.txt' && e.kind == 'file'}
+      assert assigns(:entries).detect {|e| e.name == ' filename with a leading space.txt ' && e.kind == 'file'}
     end
 
     def test_browse_branch
@@ -152,7 +154,7 @@
     def test_annotate_binary_file
       get :annotate, :id => 3, :path => ['images', 'edit.png']
       assert_response 500
-      assert_tag :tag => 'div', :attributes => { :class => /error/ },
+      assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /can not be annotated/
     end
   else
--- a/test/functional/repositories_subversion_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/repositories_subversion_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -129,7 +129,7 @@
     
     def test_entry_not_found
       get :entry, :id => 1, :path => ['subversion_test', 'zzz.c']
-      assert_tag :tag => 'div', :attributes => { :class => /error/ },
+      assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /The entry or revision was not found in the repository/
     end
   
--- a/test/functional/roles_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/roles_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -65,7 +65,7 @@
                          :permissions => ['add_issues', 'edit_issues', 'log_time', ''],
                          :assignable => '0'}
     
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     role = Role.find_by_name('RoleWithoutWorkflowCopy')
     assert_not_nil role
     assert_equal [:add_issues, :edit_issues, :log_time], role.permissions
@@ -78,7 +78,7 @@
                          :assignable => '0'},
                :copy_workflow_from => '1'
     
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     role = Role.find_by_name('RoleWithWorkflowCopy')
     assert_not_nil role
     assert_equal Role.find(1).workflows.size, role.workflows.size
@@ -97,7 +97,7 @@
                           :permissions => ['edit_project', ''],
                           :assignable => '0'}
     
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     role = Role.find(1)
     assert_equal [:edit_project], role.permissions
   end
@@ -107,13 +107,13 @@
     assert r.save
     
     post :destroy, :id => r
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert_nil Role.find_by_id(r.id)
   end
   
   def test_destroy_role_in_use
     post :destroy, :id => 1
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert flash[:error] == 'This role is in use and can not be deleted.'
     assert_not_nil Role.find_by_id(1)
   end
@@ -139,7 +139,7 @@
   
   def test_post_report
     post :report, :permissions => { '0' => '', '1' => ['edit_issues'], '3' => ['add_issues', 'delete_issues']}
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     
     assert_equal [:edit_issues], Role.find(1).permissions
     assert_equal [:add_issues, :delete_issues], Role.find(3).permissions
@@ -148,33 +148,33 @@
   
   def test_clear_all_permissions
     post :report, :permissions => { '0' => '' }
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert Role.find(1).permissions.empty?
   end
   
   def test_move_highest
     post :edit, :id => 3, :role => {:move_to => 'highest'}
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert_equal 1, Role.find(3).position
   end
 
   def test_move_higher
     position = Role.find(3).position
     post :edit, :id => 3, :role => {:move_to => 'higher'}
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert_equal position - 1, Role.find(3).position
   end
 
   def test_move_lower
     position = Role.find(2).position
     post :edit, :id => 2, :role => {:move_to => 'lower'}
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert_equal position + 1, Role.find(2).position
   end
 
   def test_move_lowest
     post :edit, :id => 2, :role => {:move_to => 'lowest'}
-    assert_redirected_to 'roles'
+    assert_redirected_to '/roles'
     assert_equal Role.count, Role.find(2).position
   end
 end
--- a/test/functional/search_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/search_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -126,7 +126,7 @@
   def test_quick_jump_to_issue
     # issue of a public project
     get :index, :q => "3"
-    assert_redirected_to 'issues/3'
+    assert_redirected_to '/issues/3'
     
     # issue of a private project
     get :index, :q => "4"
--- a/test/functional/settings_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/settings_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -50,7 +50,7 @@
                               :notified_events => %w(issue_added issue_updated news_added),
                               :emails_footer => 'Test footer'
                               }
-    assert_redirected_to 'settings/edit'
+    assert_redirected_to '/settings/edit'
     assert_equal 'functional@test.foo', Setting.mail_from
     assert !Setting.bcc_recipients?
     assert_equal %w(issue_added issue_updated news_added), Setting.notified_events
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/functional/time_entry_reports_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,134 @@
+# -*- coding: utf-8 -*-
+require File.dirname(__FILE__) + '/../test_helper'
+
+class TimeEntryReportsControllerTest < ActionController::TestCase
+  fixtures :projects, :enabled_modules, :roles, :members, :member_roles, :issues, :time_entries, :users, :trackers, :enumerations, :issue_statuses, :custom_fields, :custom_values
+
+  def test_report_no_criteria
+    get :report, :project_id => 1
+    assert_response :success
+    assert_template 'report'
+  end
+  
+  def test_report_all_projects
+    get :report
+    assert_response :success
+    assert_template 'report'
+  end
+  
+  def test_report_all_projects_denied
+    r = Role.anonymous
+    r.permissions.delete(:view_time_entries)
+    r.permissions_will_change!
+    r.save
+    get :report
+    assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Ftime_entries%2Freport'
+  end
+  
+  def test_report_all_projects_one_criteria
+    get :report, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project']
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "8.65", "%.2f" % assigns(:total_hours)
+  end
+
+  def test_report_all_time
+    get :report, :project_id => 1, :criterias => ['project', 'issue']
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "162.90", "%.2f" % assigns(:total_hours)
+  end
+
+  def test_report_all_time_by_day
+    get :report, :project_id => 1, :criterias => ['project', 'issue'], :columns => 'day'
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "162.90", "%.2f" % assigns(:total_hours)
+    assert_tag :tag => 'th', :content => '2007-03-12'
+  end
+  
+  def test_report_one_criteria
+    get :report, :project_id => 1, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project']
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "8.65", "%.2f" % assigns(:total_hours)
+  end
+  
+  def test_report_two_criterias
+    get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"]
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "162.90", "%.2f" % assigns(:total_hours)
+  end
+  
+  def test_report_one_day
+    get :report, :project_id => 1, :columns => 'day', :from => "2007-03-23", :to => "2007-03-23", :criterias => ["member", "activity"]
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "4.25", "%.2f" % assigns(:total_hours)
+  end
+  
+  def test_report_at_issue_level
+    get :report, :project_id => 1, :issue_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"]
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "154.25", "%.2f" % assigns(:total_hours)
+  end
+  
+  def test_report_custom_field_criteria
+    get :report, :project_id => 1, :criterias => ['project', 'cf_1', 'cf_7']
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_not_nil assigns(:criterias)
+    assert_equal 3, assigns(:criterias).size
+    assert_equal "162.90", "%.2f" % assigns(:total_hours)
+    # Custom field column
+    assert_tag :tag => 'th', :content => 'Database'
+    # Custom field row
+    assert_tag :tag => 'td', :content => 'MySQL',
+                             :sibling => { :tag => 'td', :attributes => { :class => 'hours' },
+                                                         :child => { :tag => 'span', :attributes => { :class => 'hours hours-int' },
+                                                                                     :content => '1' }}
+    # Second custom field column
+    assert_tag :tag => 'th', :content => 'Billable'
+  end
+  
+  def test_report_one_criteria_no_result
+    get :report, :project_id => 1, :columns => 'week', :from => "1998-04-01", :to => "1998-04-30", :criterias => ['project']
+    assert_response :success
+    assert_template 'report'
+    assert_not_nil assigns(:total_hours)
+    assert_equal "0.00", "%.2f" % assigns(:total_hours)
+  end
+  
+  def test_report_all_projects_csv_export
+    get :report, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv"
+    assert_response :success
+    assert_equal 'text/csv', @response.content_type
+    lines = @response.body.chomp.split("\n")
+    # Headers
+    assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first
+    # Total row
+    assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last
+  end
+  
+  def test_report_csv_export
+    get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv"
+    assert_response :success
+    assert_equal 'text/csv', @response.content_type
+    lines = @response.body.chomp.split("\n")
+    # Headers
+    assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first
+    # Total row
+    assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last
+  end
+  
+end
--- a/test/functional/timelog_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/timelog_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -31,9 +31,9 @@
     @response   = ActionController::TestResponse.new
   end
   
-  def test_get_edit
+  def test_get_new
     @request.session[:user_id] = 3
-    get :edit, :project_id => 1
+    get :new, :project_id => 1
     assert_response :success
     assert_template 'edit'
     # Default activity selected
@@ -41,24 +41,24 @@
                                  :content => 'Development'
   end
   
+  def test_get_new_should_only_show_active_time_entry_activities
+    @request.session[:user_id] = 3
+    get :new, :project_id => 1
+    assert_response :success
+    assert_template 'edit'
+    assert_no_tag :tag => 'option', :content => 'Inactive Activity'
+                                    
+  end
+
   def test_get_edit_existing_time
     @request.session[:user_id] = 2
     get :edit, :id => 2, :project_id => nil
     assert_response :success
     assert_template 'edit'
     # Default activity selected
-    assert_tag :tag => 'form', :attributes => { :action => '/projects/ecookbook/timelog/edit/2' }
+    assert_tag :tag => 'form', :attributes => { :action => '/projects/ecookbook/time_entries/2' }
   end
   
-  def test_get_edit_should_only_show_active_time_entry_activities
-    @request.session[:user_id] = 3
-    get :edit, :project_id => 1
-    assert_response :success
-    assert_template 'edit'
-    assert_no_tag :tag => 'option', :content => 'Inactive Activity'
-                                    
-  end
-
   def test_get_edit_with_an_existing_time_entry_with_inactive_activity
     te = TimeEntry.find(1)
     te.activity = TimeEntryActivity.find_by_name("Inactive Activity")
@@ -72,18 +72,18 @@
     assert_tag :tag => 'option', :content => '--- Please select ---'
   end
   
-  def test_post_edit
+  def test_post_create
     # TODO: should POST to issues’ time log instead of project. change form
     # and routing
     @request.session[:user_id] = 3
-    post :edit, :project_id => 1,
+    post :create, :project_id => 1,
                 :time_entry => {:comments => 'Some work on TimelogControllerTest',
                                 # Not the default activity
                                 :activity_id => '11',
                                 :spent_on => '2008-03-14',
                                 :issue_id => '1',
                                 :hours => '7.3'}
-    assert_redirected_to :action => 'details', :project_id => 'ecookbook'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     
     i = Issue.find(1)
     t = TimeEntry.find_by_comments('Some work on TimelogControllerTest')
@@ -101,10 +101,10 @@
     assert_equal 2, entry.user_id
     
     @request.session[:user_id] = 1
-    post :edit, :id => 1,
+    put :update, :id => 1,
                 :time_entry => {:issue_id => '2',
                                 :hours => '8'}
-    assert_redirected_to :action => 'details', :project_id => 'ecookbook'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     entry.reload
     
     assert_equal 8, entry.hours
@@ -114,8 +114,8 @@
   
   def test_destroy
     @request.session[:user_id] = 2
-    post :destroy, :id => 1
-    assert_redirected_to :action => 'details', :project_id => 'ecookbook'
+    delete :destroy, :id => 1
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_equal I18n.t(:notice_successful_delete), flash[:notice]
     assert_nil TimeEntry.find_by_id(1)
   end
@@ -128,8 +128,8 @@
     end
 
     @request.session[:user_id] = 2
-    post :destroy, :id => 1
-    assert_redirected_to :action => 'details', :project_id => 'ecookbook'
+    delete :destroy, :id => 1
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_equal I18n.t(:notice_unable_delete_time_entry), flash[:error]
     assert_not_nil TimeEntry.find_by_id(1)
 
@@ -137,145 +137,18 @@
     TimeEntry.before_destroy.reject! {|callback| callback.method == :stop_callback_chain }
   end
   
-  def test_report_no_criteria
-    get :report, :project_id => 1
+  def test_index_all_projects
+    get :index
     assert_response :success
-    assert_template 'report'
-  end
-  
-  def test_report_all_projects
-    get :report
-    assert_response :success
-    assert_template 'report'
-  end
-  
-  def test_report_all_projects_denied
-    r = Role.anonymous
-    r.permissions.delete(:view_time_entries)
-    r.permissions_will_change!
-    r.save
-    get :report
-    assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Ftime_entries%2Freport'
-  end
-  
-  def test_report_all_projects_one_criteria
-    get :report, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project']
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "8.65", "%.2f" % assigns(:total_hours)
-  end
-
-  def test_report_all_time
-    get :report, :project_id => 1, :criterias => ['project', 'issue']
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "162.90", "%.2f" % assigns(:total_hours)
-  end
-
-  def test_report_all_time_by_day
-    get :report, :project_id => 1, :criterias => ['project', 'issue'], :columns => 'day'
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "162.90", "%.2f" % assigns(:total_hours)
-    assert_tag :tag => 'th', :content => '2007-03-12'
-  end
-  
-  def test_report_one_criteria
-    get :report, :project_id => 1, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project']
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "8.65", "%.2f" % assigns(:total_hours)
-  end
-  
-  def test_report_two_criterias
-    get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"]
-    assert_response :success
-    assert_template 'report'
+    assert_template 'index'
     assert_not_nil assigns(:total_hours)
     assert_equal "162.90", "%.2f" % assigns(:total_hours)
   end
   
-  def test_report_one_day
-    get :report, :project_id => 1, :columns => 'day', :from => "2007-03-23", :to => "2007-03-23", :criterias => ["member", "activity"]
+  def test_index_at_project_level
+    get :index, :project_id => 1
     assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "4.25", "%.2f" % assigns(:total_hours)
-  end
-  
-  def test_report_at_issue_level
-    get :report, :project_id => 1, :issue_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"]
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "154.25", "%.2f" % assigns(:total_hours)
-  end
-  
-  def test_report_custom_field_criteria
-    get :report, :project_id => 1, :criterias => ['project', 'cf_1', 'cf_7']
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_not_nil assigns(:criterias)
-    assert_equal 3, assigns(:criterias).size
-    assert_equal "162.90", "%.2f" % assigns(:total_hours)
-    # Custom field column
-    assert_tag :tag => 'th', :content => 'Database'
-    # Custom field row
-    assert_tag :tag => 'td', :content => 'MySQL',
-                             :sibling => { :tag => 'td', :attributes => { :class => 'hours' },
-                                                         :child => { :tag => 'span', :attributes => { :class => 'hours hours-int' },
-                                                                                     :content => '1' }}
-    # Second custom field column
-    assert_tag :tag => 'th', :content => 'Billable'
-  end
-  
-  def test_report_one_criteria_no_result
-    get :report, :project_id => 1, :columns => 'week', :from => "1998-04-01", :to => "1998-04-30", :criterias => ['project']
-    assert_response :success
-    assert_template 'report'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "0.00", "%.2f" % assigns(:total_hours)
-  end
-  
-  def test_report_all_projects_csv_export
-    get :report, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv"
-    assert_response :success
-    assert_equal 'text/csv', @response.content_type
-    lines = @response.body.chomp.split("\n")
-    # Headers
-    assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first
-    # Total row
-    assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last
-  end
-  
-  def test_report_csv_export
-    get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv"
-    assert_response :success
-    assert_equal 'text/csv', @response.content_type
-    lines = @response.body.chomp.split("\n")
-    # Headers
-    assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first
-    # Total row
-    assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last
-  end
-  
-  def test_details_all_projects
-    get :details
-    assert_response :success
-    assert_template 'details'
-    assert_not_nil assigns(:total_hours)
-    assert_equal "162.90", "%.2f" % assigns(:total_hours)
-  end
-  
-  def test_details_at_project_level
-    get :details, :project_id => 1
-    assert_response :success
-    assert_template 'details'
+    assert_template 'index'
     assert_not_nil assigns(:entries)
     assert_equal 4, assigns(:entries).size
     # project and subproject
@@ -287,10 +160,10 @@
     assert_equal '2007-04-22'.to_date, assigns(:to)
   end
   
-  def test_details_at_project_level_with_date_range
-    get :details, :project_id => 1, :from => '2007-03-20', :to => '2007-04-30'
+  def test_index_at_project_level_with_date_range
+    get :index, :project_id => 1, :from => '2007-03-20', :to => '2007-04-30'
     assert_response :success
-    assert_template 'details'
+    assert_template 'index'
     assert_not_nil assigns(:entries)
     assert_equal 3, assigns(:entries).size
     assert_not_nil assigns(:total_hours)
@@ -299,28 +172,28 @@
     assert_equal '2007-04-30'.to_date, assigns(:to)
   end
 
-  def test_details_at_project_level_with_period
-    get :details, :project_id => 1, :period => '7_days'
+  def test_index_at_project_level_with_period
+    get :index, :project_id => 1, :period => '7_days'
     assert_response :success
-    assert_template 'details'
+    assert_template 'index'
     assert_not_nil assigns(:entries)
     assert_not_nil assigns(:total_hours)
     assert_equal Date.today - 7, assigns(:from)
     assert_equal Date.today, assigns(:to)
   end
 
-  def test_details_one_day
-    get :details, :project_id => 1, :from => "2007-03-23", :to => "2007-03-23"
+  def test_index_one_day
+    get :index, :project_id => 1, :from => "2007-03-23", :to => "2007-03-23"
     assert_response :success
-    assert_template 'details'
+    assert_template 'index'
     assert_not_nil assigns(:total_hours)
     assert_equal "4.25", "%.2f" % assigns(:total_hours)
   end
   
-  def test_details_at_issue_level
-    get :details, :issue_id => 1
+  def test_index_at_issue_level
+    get :index, :issue_id => 1
     assert_response :success
-    assert_template 'details'
+    assert_template 'index'
     assert_not_nil assigns(:entries)
     assert_equal 2, assigns(:entries).size
     assert_not_nil assigns(:total_hours)
@@ -330,26 +203,26 @@
     assert_equal '2007-04-22'.to_date, assigns(:to)
   end
   
-  def test_details_atom_feed
-    get :details, :project_id => 1, :format => 'atom'
+  def test_index_atom_feed
+    get :index, :project_id => 1, :format => 'atom'
     assert_response :success
     assert_equal 'application/atom+xml', @response.content_type
     assert_not_nil assigns(:items)
     assert assigns(:items).first.is_a?(TimeEntry)
   end
   
-  def test_details_all_projects_csv_export
+  def test_index_all_projects_csv_export
     Setting.date_format = '%m/%d/%Y'
-    get :details, :format => 'csv'
+    get :index, :format => 'csv'
     assert_response :success
     assert_equal 'text/csv', @response.content_type
     assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n")
     assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\"\n")
   end
   
-  def test_details_csv_export
+  def test_index_csv_export
     Setting.date_format = '%m/%d/%Y'
-    get :details, :project_id => 1, :format => 'csv'
+    get :index, :project_id => 1, :format => 'csv'
     assert_response :success
     assert_equal 'text/csv', @response.content_type
     assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n")
--- a/test/functional/users_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/users_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -24,7 +24,7 @@
 class UsersControllerTest < ActionController::TestCase
   include Redmine::I18n
   
-  fixtures :users, :projects, :members, :member_roles, :roles
+  fixtures :users, :projects, :members, :member_roles, :roles, :auth_sources, :custom_fields, :custom_values
   
   def setup
     @controller = UsersController.new
@@ -65,6 +65,19 @@
     assert_response :success
     assert_template 'show'
     assert_not_nil assigns(:user)
+    
+    assert_tag 'li', :content => /Phone number/
+  end
+  
+  def test_show_should_not_display_hidden_custom_fields
+    @request.session[:user_id] = nil
+    UserCustomField.find_by_name('Phone number').update_attribute :visible, false
+    get :show, :id => 2
+    assert_response :success
+    assert_template 'show'
+    assert_not_nil assigns(:user)
+    
+    assert_no_tag 'li', :content => /Phone number/
   end
 
   def test_show_should_not_fail_when_custom_values_are_nil
@@ -107,14 +120,65 @@
     assert project_ids.include?(2) #private project admin can see
   end
 
-  def test_edit
+  context "GET :new" do
+    setup do
+      get :new
+    end
+
+    should_assign_to :user
+    should_respond_with :success
+    should_render_template :new
+  end
+
+  context "POST :create" do
+    context "when successful" do
+      setup do
+        post :create, :user => {
+          :firstname => 'John',
+          :lastname => 'Doe',
+          :login => 'jdoe',
+          :password => 'test',
+          :password_confirmation => 'test',
+          :mail => 'jdoe@gmail.com'
+        },
+        :notification_option => 'none'
+      end
+
+      should_assign_to :user
+      should_respond_with :redirect
+      should_redirect_to('user edit') { {:controller => 'users', :action => 'edit', :id => User.find_by_login('jdoe')}}
+
+      should 'set the users mail notification' do
+        user = User.last
+        assert_equal 'none', user.mail_notification
+      end
+    end
+
+    context "when unsuccessful" do
+      setup do
+        post :create, :user => {}
+      end
+
+      should_assign_to :user
+      should_respond_with :success
+      should_render_template :new
+    end
+
+  end
+
+  def test_update
     ActionMailer::Base.deliveries.clear
-    post :edit, :id => 2, :user => {:firstname => 'Changed'}
-    assert_equal 'Changed', User.find(2).firstname
+    put :update, :id => 2, :user => {:firstname => 'Changed'}, :notification_option => 'all', :pref => {:hide_mail => '1', :comments_sorting => 'desc'}
+
+    user = User.find(2)
+    assert_equal 'Changed', user.firstname
+    assert_equal 'all', user.mail_notification
+    assert_equal true, user.pref[:hide_mail]
+    assert_equal 'desc', user.pref[:comments_sorting]
     assert ActionMailer::Base.deliveries.empty?
   end
   
-  def test_edit_with_activation_should_send_a_notification
+  def test_update_with_activation_should_send_a_notification
     u = User.new(:firstname => 'Foo', :lastname => 'Bar', :mail => 'foo.bar@somenet.foo', :language => 'fr')
     u.login = 'foo'
     u.status = User::STATUS_REGISTERED
@@ -122,7 +186,7 @@
     ActionMailer::Base.deliveries.clear
     Setting.bcc_recipients = '1'
     
-    post :edit, :id => u.id, :user => {:status => User::STATUS_ACTIVE}
+    put :update, :id => u.id, :user => {:status => User::STATUS_ACTIVE}
     assert u.reload.active?
     mail = ActionMailer::Base.deliveries.last
     assert_not_nil mail
@@ -130,12 +194,12 @@
     assert mail.body.include?(ll('fr', :notice_account_activated))
   end
   
-  def test_edit_with_password_change_should_send_a_notification
+  def test_updat_with_password_change_should_send_a_notification
     ActionMailer::Base.deliveries.clear
     Setting.bcc_recipients = '1'
     
     u = User.find(2)
-    post :edit, :id => u.id, :user => {}, :password => 'newpass', :password_confirmation => 'newpass', :send_information => '1'
+    put :update, :id => u.id, :user => {}, :password => 'newpass', :password_confirmation => 'newpass', :send_information => '1'
     assert_equal User.hash_password('newpass'), u.reload.hashed_password 
     
     mail = ActionMailer::Base.deliveries.last
@@ -144,13 +208,13 @@
     assert mail.body.include?('newpass')
   end
 
-  test "POST :edit with a password change to an AuthSource user switching to Internal authentication" do
+  test "put :update with a password change to an AuthSource user switching to Internal authentication" do
     # Configure as auth source
     u = User.find(2)
     u.auth_source = AuthSource.find(1)
     u.save!
 
-    post :edit, :id => u.id, :user => {:auth_source_id => ''}, :password => 'newpass', :password_confirmation => 'newpass'
+    put :update, :id => u.id, :user => {:auth_source_id => ''}, :password => 'newpass', :password_confirmation => 'newpass'
 
     assert_equal nil, u.reload.auth_source
     assert_equal User.hash_password('newpass'), u.reload.hashed_password
--- a/test/functional/versions_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/versions_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -123,6 +123,15 @@
     assert_equal 'New version name', version.name
     assert_equal Date.today, version.effective_date
   end
+  
+  def test_post_update_with_validation_failure
+    @request.session[:user_id] = 2
+    put :update, :id => 2, 
+                 :version => { :name => '', 
+                               :effective_date => Date.today.strftime("%Y-%m-%d")}
+    assert_response :success
+    assert_template 'edit'
+  end
 
   def test_destroy
     @request.session[:user_id] = 2
--- a/test/functional/wiki_controller_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/functional/wiki_controller_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -32,7 +32,7 @@
   end
   
   def test_show_start_page
-    get :index, :id => 'ecookbook'
+    get :show, :project_id => 'ecookbook'
     assert_response :success
     assert_template 'show'
     assert_tag :tag => 'h1', :content => /CookBook documentation/
@@ -45,7 +45,7 @@
   end
   
   def test_show_page_with_name
-    get :index, :id => 1, :page => 'Another_page'
+    get :show, :project_id => 1, :id => 'Another_page'
     assert_response :success
     assert_template 'show'
     assert_tag :tag => 'h1', :content => /Another page/
@@ -60,32 +60,32 @@
     page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
     page.save!
     
-    get :index, :id => 1, :page => 'Another_page'
+    get :show, :project_id => 1, :id => 'Another_page'
     assert_response :success
     assert_tag :tag => 'div', :attributes => {:id => 'sidebar'},
                               :content => /Side bar content for test_show_with_sidebar/
   end
   
   def test_show_unexistent_page_without_edit_right
-    get :index, :id => 1, :page => 'Unexistent page'
+    get :show, :project_id => 1, :id => 'Unexistent page'
     assert_response 404
   end
   
   def test_show_unexistent_page_with_edit_right
     @request.session[:user_id] = 2
-    get :index, :id => 1, :page => 'Unexistent page'
+    get :show, :project_id => 1, :id => 'Unexistent page'
     assert_response :success
     assert_template 'edit'
   end
   
   def test_create_page
     @request.session[:user_id] = 2
-    post :edit, :id => 1,
-                :page => 'New page',
+    put :update, :project_id => 1,
+                :id => 'New page',
                 :content => {:comments => 'Created the page',
                              :text => "h1. New page\n\nThis is a new page",
                              :version => 0}
-    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'New_page'
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'New_page'
     page = Project.find(1).wiki.find_page('New page')
     assert !page.new_record?
     assert_not_nil page.content
@@ -96,8 +96,8 @@
     @request.session[:user_id] = 2
     assert_difference 'WikiPage.count' do
       assert_difference 'Attachment.count' do
-        post :edit, :id => 1,
-                    :page => 'New page',
+        put :update, :project_id => 1,
+                    :id => 'New page',
                     :content => {:comments => 'Created the page',
                                  :text => "h1. New page\n\nThis is a new page",
                                  :version => 0},
@@ -111,7 +111,7 @@
   
   def test_preview
     @request.session[:user_id] = 2
-    xhr :post, :preview, :id => 1, :page => 'CookBook_documentation',
+    xhr :post, :preview, :project_id => 1, :id => 'CookBook_documentation',
                                    :content => { :comments => '',
                                                  :text => 'this is a *previewed text*',
                                                  :version => 3 }
@@ -122,7 +122,7 @@
   
   def test_preview_new_page
     @request.session[:user_id] = 2
-    xhr :post, :preview, :id => 1, :page => 'New page',
+    xhr :post, :preview, :project_id => 1, :id => 'New page',
                                    :content => { :text => 'h1. New page',
                                                  :comments => '',
                                                  :version => 0 }
@@ -132,7 +132,7 @@
   end
   
   def test_history
-    get :history, :id => 1, :page => 'CookBook_documentation'
+    get :history, :project_id => 1, :id => 'CookBook_documentation'
     assert_response :success
     assert_template 'history'
     assert_not_nil assigns(:versions)
@@ -141,7 +141,7 @@
   end
 
   def test_history_with_one_version
-    get :history, :id => 1, :page => 'Another_page'
+    get :history, :project_id => 1, :id => 'Another_page'
     assert_response :success
     assert_template 'history'
     assert_not_nil assigns(:versions)
@@ -150,7 +150,7 @@
   end
   
   def test_diff
-    get :diff, :id => 1, :page => 'CookBook_documentation', :version => 2, :version_from => 1
+    get :diff, :project_id => 1, :id => 'CookBook_documentation', :version => 2, :version_from => 1
     assert_response :success
     assert_template 'diff'
     assert_tag :tag => 'span', :attributes => { :class => 'diff_in'},
@@ -158,7 +158,7 @@
   end
   
   def test_annotate
-    get :annotate, :id => 1, :page =>  'CookBook_documentation', :version => 2
+    get :annotate, :project_id => 1, :id =>  'CookBook_documentation', :version => 2
     assert_response :success
     assert_template 'annotate'
     # Line 1
@@ -170,13 +170,45 @@
                              :child => { :tag => 'td', :attributes => {:class => 'author'}, :content => /redMine Admin/ },
                              :child => { :tag => 'td', :content => /Some updated \[\[documentation\]\] here/ }
   end
+
+  def test_get_rename
+    @request.session[:user_id] = 2
+    get :rename, :project_id => 1, :id => 'Another_page'
+    assert_response :success
+    assert_template 'rename'
+    assert_tag 'option',
+      :attributes => {:value => ''},
+      :content => '',
+      :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
+    assert_no_tag 'option',
+      :attributes => {:selected => 'selected'},
+      :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
+  end
+  
+  def test_get_rename_child_page
+    @request.session[:user_id] = 2
+    get :rename, :project_id => 1, :id => 'Child_1'
+    assert_response :success
+    assert_template 'rename'
+    assert_tag 'option',
+      :attributes => {:value => ''},
+      :content => '',
+      :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
+    assert_tag 'option',
+      :attributes => {:value => '2', :selected => 'selected'},
+      :content => /Another page/,
+      :parent => {
+        :tag => 'select',
+        :attributes => {:name => 'wiki_page[parent_id]'}
+      }
+  end
   
   def test_rename_with_redirect
     @request.session[:user_id] = 2
-    post :rename, :id => 1, :page => 'Another_page',
+    post :rename, :project_id => 1, :id => 'Another_page',
                             :wiki_page => { :title => 'Another renamed page',
                                             :redirect_existing_links => 1 }
-    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_renamed_page'
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_renamed_page'
     wiki = Project.find(1).wiki
     # Check redirects
     assert_not_nil wiki.find_page('Another page')
@@ -185,25 +217,41 @@
 
   def test_rename_without_redirect
     @request.session[:user_id] = 2
-    post :rename, :id => 1, :page => 'Another_page',
+    post :rename, :project_id => 1, :id => 'Another_page',
                             :wiki_page => { :title => 'Another renamed page',
                                             :redirect_existing_links => "0" }
-    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_renamed_page'
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_renamed_page'
     wiki = Project.find(1).wiki
     # Check that there's no redirects
     assert_nil wiki.find_page('Another page')
   end
   
+  def test_rename_with_parent_assignment
+    @request.session[:user_id] = 2
+    post :rename, :project_id => 1, :id => 'Another_page',
+      :wiki_page => { :title => 'Another page', :redirect_existing_links => "0", :parent_id => '4' }
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page'
+    assert_equal WikiPage.find(4), WikiPage.find_by_title('Another_page').parent
+  end
+
+  def test_rename_with_parent_unassignment
+    @request.session[:user_id] = 2
+    post :rename, :project_id => 1, :id => 'Child_1',
+      :wiki_page => { :title => 'Child 1', :redirect_existing_links => "0", :parent_id => '' }
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Child_1'
+    assert_nil WikiPage.find_by_title('Child_1').parent
+  end
+  
   def test_destroy_child
     @request.session[:user_id] = 2
-    post :destroy, :id => 1, :page => 'Child_1'
-    assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index'
+    delete :destroy, :project_id => 1, :id => 'Child_1'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
   end
   
   def test_destroy_parent
     @request.session[:user_id] = 2
     assert_no_difference('WikiPage.count') do
-      post :destroy, :id => 1, :page => 'Another_page'
+      delete :destroy, :project_id => 1, :id => 'Another_page'
     end
     assert_response :success
     assert_template 'destroy'
@@ -212,18 +260,18 @@
   def test_destroy_parent_with_nullify
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -1) do
-      post :destroy, :id => 1, :page => 'Another_page', :todo => 'nullify'
+      delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'nullify'
     end
-    assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_nil WikiPage.find_by_id(2)
   end
   
   def test_destroy_parent_with_cascade
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -3) do
-      post :destroy, :id => 1, :page => 'Another_page', :todo => 'destroy'
+      delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'destroy'
     end
-    assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_nil WikiPage.find_by_id(2)
     assert_nil WikiPage.find_by_id(5)
   end
@@ -231,17 +279,17 @@
   def test_destroy_parent_with_reassign
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -1) do
-      post :destroy, :id => 1, :page => 'Another_page', :todo => 'reassign', :reassign_to_id => 1
+      delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'reassign', :reassign_to_id => 1
     end
-    assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index'
+    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_nil WikiPage.find_by_id(2)
     assert_equal WikiPage.find(1), WikiPage.find_by_id(5).parent
   end
   
-  def test_page_index
-    get :special, :id => 'ecookbook', :page => 'Page_index'
+  def test_index
+    get :index, :project_id => 'ecookbook'
     assert_response :success
-    assert_template 'special_page_index'
+    assert_template 'index'
     pages = assigns(:pages)
     assert_not_nil pages
     assert_equal Project.find(1).wiki.pages.size, pages.size
@@ -256,9 +304,49 @@
                     :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Another_page' },
                                                                        :content => 'Another page' } }
   end
+
+  context "GET :export" do
+    context "with an authorized user to export the wiki" do
+      setup do
+        @request.session[:user_id] = 2
+        get :export, :project_id => 'ecookbook'
+      end
+      
+      should_respond_with :success
+      should_assign_to :pages
+      should_respond_with_content_type "text/html"
+      should "export all of the wiki pages to a single html file" do
+        assert_select "a[name=?]", "CookBook_documentation"
+        assert_select "a[name=?]", "Another_page"
+        assert_select "a[name=?]", "Page_with_an_inline_image"
+      end
+      
+    end
+
+    context "with an unauthorized user" do
+      setup do
+        get :export, :project_id => 'ecookbook'
+
+        should_respond_with :redirect
+        should_redirect_to('wiki index') { {:action => 'show', :project_id => @project, :id => nil} }
+      end
+    end
+  end
+
+  context "GET :date_index" do
+    setup do
+      get :date_index, :project_id => 'ecookbook'
+    end
+
+    should_respond_with :success
+    should_assign_to :pages
+    should_assign_to :pages_by_date
+    should_render_template 'wiki/date_index'
+    
+  end
   
   def test_not_found
-    get :index, :id => 999
+    get :show, :project_id => 999
     assert_response 404
   end
   
@@ -266,8 +354,8 @@
     page = WikiPage.find_by_wiki_id_and_title(1, 'Another_page')
     assert !page.protected?
     @request.session[:user_id] = 2
-    post :protect, :id => 1, :page => page.title, :protected => '1'
-    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_page'
+    post :protect, :project_id => 1, :id => page.title, :protected => '1'
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page'
     assert page.reload.protected?
   end
   
@@ -275,14 +363,14 @@
     page = WikiPage.find_by_wiki_id_and_title(1, 'CookBook_documentation')
     assert page.protected?
     @request.session[:user_id] = 2
-    post :protect, :id => 1, :page => page.title, :protected => '0'
-    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'CookBook_documentation'
+    post :protect, :project_id => 1, :id => page.title, :protected => '0'
+    assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'CookBook_documentation'
     assert !page.reload.protected?
   end
   
   def test_show_page_with_edit_link
     @request.session[:user_id] = 2
-    get :index, :id => 1
+    get :show, :project_id => 1
     assert_response :success
     assert_template 'show'
     assert_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
@@ -290,7 +378,7 @@
   
   def test_show_page_without_edit_link
     @request.session[:user_id] = 4
-    get :index, :id => 1
+    get :show, :project_id => 1
     assert_response :success
     assert_template 'show'
     assert_no_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
@@ -299,7 +387,7 @@
   def test_edit_unprotected_page
     # Non members can edit unprotected wiki pages
     @request.session[:user_id] = 4
-    get :edit, :id => 1, :page => 'Another_page'
+    get :edit, :project_id => 1, :id => 'Another_page'
     assert_response :success
     assert_template 'edit'
   end
@@ -307,19 +395,19 @@
   def test_edit_protected_page_by_nonmember
     # Non members can't edit protected wiki pages
     @request.session[:user_id] = 4
-    get :edit, :id => 1, :page => 'CookBook_documentation'
+    get :edit, :project_id => 1, :id => 'CookBook_documentation'
     assert_response 403
   end
   
   def test_edit_protected_page_by_member
     @request.session[:user_id] = 2
-    get :edit, :id => 1, :page => 'CookBook_documentation'
+    get :edit, :project_id => 1, :id => 'CookBook_documentation'
     assert_response :success
     assert_template 'edit'    
   end
   
   def test_history_of_non_existing_page_should_return_404
-    get :history, :id => 1, :page => 'Unknown_page'
+    get :history, :project_id => 1, :id => 'Unknown_page'
     assert_response 404
   end
 end
--- a/test/integration/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,19 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 41
-/svn/!svn/ver/4172/trunk/test/integration
-END
-api_token_login_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/3220/trunk/test/integration/api_token_login_test.rb
-END
-projects_api_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/3687/trunk/test/integration/projects_api_test.rb
+/svn/!svn/ver/4407/trunk/test/integration
 END
 application_test.rb
 K 25
@@ -21,59 +9,35 @@
 V 61
 /svn/!svn/ver/2779/trunk/test/integration/application_test.rb
 END
-issues_api_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4048/trunk/test/integration/issues_api_test.rb
-END
 routing_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/4172/trunk/test/integration/routing_test.rb
+/svn/!svn/ver/4372/trunk/test/integration/routing_test.rb
 END
 admin_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/3050/trunk/test/integration/admin_test.rb
-END
-http_basic_login_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/3679/trunk/test/integration/http_basic_login_test.rb
+/svn/!svn/ver/4231/trunk/test/integration/admin_test.rb
 END
 projects_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/2317/trunk/test/integration/projects_test.rb
+/svn/!svn/ver/4407/trunk/test/integration/projects_test.rb
 END
 issues_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 56
-/svn/!svn/ver/4041/trunk/test/integration/issues_test.rb
+/svn/!svn/ver/4407/trunk/test/integration/issues_test.rb
 END
 account_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/3492/trunk/test/integration/account_test.rb
-END
-http_basic_login_with_api_token_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/3220/trunk/test/integration/http_basic_login_with_api_token_test.rb
-END
-disabled_rest_api_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/3220/trunk/test/integration/disabled_rest_api_test.rb
+/svn/!svn/ver/4407/trunk/test/integration/account_test.rb
 END
 layout_test.rb
 K 25
--- a/test/integration/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/integration
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 
 
 
@@ -26,74 +26,6 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
-api_token_login_test.rb
-file
-
-
-
-
-2010-09-23T14:37:45.435782Z
-f99fc81982309b06b38b5a1ace40ca5e
-2009-12-23T06:27:44.373427Z
-3220
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2255
-
-projects_api_test.rb
-file
-
-
-
-
-2010-09-23T14:37:45.439778Z
-f71d3a9198cd46dcbe8c38b581be1bdb
-2010-04-21T16:02:55.125733Z
-3687
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3675
-
 application_test.rb
 file
 
@@ -128,40 +60,6 @@
 
 1967
 
-issues_api_test.rb
-file
-
-
-
-
-2010-09-24T12:48:25.883734Z
-ffd48cf98057bd4ed0175bc4147c61cb
-2010-08-27T20:08:59.729788Z
-4048
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-9701
-
 lib
 dir
 
@@ -171,11 +69,11 @@
 
 
 
-2010-09-24T12:48:25.883734Z
-b1064aaf94d0e5242305bc5a09f0a596
-2010-09-23T15:20:19.085385Z
-4172
-edavis10
+2010-11-19T13:04:46.192843Z
+badebe423de738346d93306b99e49615
+2010-11-06T13:22:23.662480Z
+4372
+jplang
 
 
 
@@ -197,7 +95,10 @@
 
 
 
-24890
+27995
+
+api_test
+dir
 
 admin_test.rb
 file
@@ -205,10 +106,10 @@
 
 
 
-2010-09-23T14:37:45.435782Z
-d3db25767f7a6741931fa9b307ea9da9
-2009-11-14T19:41:02.240160Z
-3050
+2010-11-19T13:04:46.192843Z
+9d09badb144b1e0700cd7996b6582064
+2010-10-04T15:36:16.880272Z
+4231
 edavis10
 has-props
 
@@ -231,41 +132,7 @@
 
 
 
-2092
-
-http_basic_login_test.rb
-file
-
-
-
-
-2010-09-23T14:37:45.435782Z
-18dc5fe7b0619021768deecf38ad573a
-2010-04-17T12:45:23.887495Z
-3679
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3403
+2097
 
 projects_test.rb
 file
@@ -273,11 +140,11 @@
 
 
 
-2010-09-23T14:37:45.439778Z
-aedb3aed4364cf43d6dc1e721d10b685
-2009-01-26T01:47:51.253124Z
-2317
-edavis10
+2010-11-19T13:04:46.192843Z
+c93f89c5c055ea2c9f60c8b845b3dc18
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 has-props
 
 
@@ -299,7 +166,7 @@
 
 
 
-1553
+1555
 
 issues_test.rb
 file
@@ -307,11 +174,11 @@
 
 
 
-2010-09-24T12:48:25.883734Z
-6125e0c4cbdc852b5831a85c0ded60f0
-2010-08-26T16:36:59.817467Z
-4041
-edavis10
+2010-11-19T13:04:46.196712Z
+d074b40a90cba528fe661e18a6e69f23
+2010-11-14T16:45:32.457767Z
+4407
+jplang
 has-props
 
 
@@ -333,7 +200,7 @@
 
 
 
-4795
+4796
 
 account_test.rb
 file
@@ -341,10 +208,10 @@
 
 
 
-2010-09-23T14:37:45.435782Z
-dbb93f00bb81496a00069bc0f4d044c8
-2010-02-26T09:13:12.187275Z
-3492
+2010-11-19T13:04:46.196712Z
+8241ee2ac85e8c0bd227d80e120c2112
+2010-11-14T16:45:32.457767Z
+4407
 jplang
 has-props
 
@@ -367,75 +234,7 @@
 
 
 
-7130
-
-http_basic_login_with_api_token_test.rb
-file
-
-
-
-
-2010-09-23T14:37:45.435782Z
-f6d32b05d3ebaf4c30fac1532ecae7d2
-2009-12-23T06:27:44.373427Z
-3220
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2856
-
-disabled_rest_api_test.rb
-file
-
-
-
-
-2010-09-23T14:37:45.435782Z
-e244128a26c244c305a434ad5dab2946
-2009-12-23T06:27:44.373427Z
-3220
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3819
+7134
 
 layout_test.rb
 file
--- a/test/integration/.svn/prop-base/issues_api_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/test/integration/.svn/prop-base/projects_api_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/test/integration/.svn/text-base/account_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/.svn/text-base/account_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -44,7 +44,7 @@
     
     # User logs in with 'autologin' checked
     post '/login', :username => user.login, :password => 'admin', :autologin => 1
-    assert_redirected_to 'my/page'
+    assert_redirected_to '/my/page'
     token = Token.find :first
     assert_not_nil token
     assert_equal user, token.user
@@ -105,7 +105,7 @@
     
     post 'account/register', :user => {:login => "newuser", :language => "en", :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar"}, 
                              :password => "newpass", :password_confirmation => "newpass"
-    assert_redirected_to 'my/account'
+    assert_redirected_to '/my/account'
     follow_redirect!
     assert_response :success
     assert_template 'my/account'
@@ -152,7 +152,7 @@
     AuthSource.expects(:authenticate).returns({:login => 'foo', :firstname => 'Foo', :lastname => 'Smith', :mail => 'foo@bar.com', :auth_source_id => 66})
   
     post 'account/login', :username => 'foo', :password => 'bar'
-    assert_redirected_to 'my/page'
+    assert_redirected_to '/my/page'
     
     user = User.find_by_login('foo')
     assert user.is_a?(User)
@@ -187,7 +187,7 @@
     sid = session[:session_id]
     
     post '/login', :username => 'admin', :password => 'admin'
-    assert_redirected_to 'my/page'
+    assert_redirected_to '/my/page'
     assert_not_equal sid, session[:session_id], "login should reset session"
     assert_equal 1, session[:user_id]
     sid = session[:session_id]
--- a/test/integration/.svn/text-base/admin_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/.svn/text-base/admin_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -22,10 +22,10 @@
 
   def test_add_user
     log_user("admin", "admin")
-    get "/users/add"
+    get "/users/new"
     assert_response :success
-    assert_template "users/add"
-    post "/users/add", :user => { :login => "psmith", :firstname => "Paul", :lastname => "Smith", :mail => "psmith@somenet.foo", :language => "en" }, :password => "psmith09", :password_confirmation => "psmith09"
+    assert_template "users/new"
+    post "/users/create", :user => { :login => "psmith", :firstname => "Paul", :lastname => "Smith", :mail => "psmith@somenet.foo", :language => "en" }, :password => "psmith09", :password_confirmation => "psmith09"
     
     user = User.find_by_login("psmith")
     assert_kind_of User, user
@@ -35,15 +35,15 @@
     assert_kind_of User, logged_user
     assert_equal "Paul", logged_user.firstname
     
-    post "users/edit", :id => user.id, :user => { :status => User::STATUS_LOCKED }
+    put "users/#{user.id}", :id => user.id, :user => { :status => User::STATUS_LOCKED }
     assert_redirected_to "/users/#{ user.id }/edit"
     locked_user = User.try_to_login("psmith", "psmith09")
     assert_equal nil, locked_user
   end
 
   test "Add a user as an anonymous user should fail" do
-    post '/users/add', :user => { :login => 'psmith', :firstname => 'Paul'}, :password => "psmith09", :password_confirmation => "psmith09"
+    post '/users/create', :user => { :login => 'psmith', :firstname => 'Paul'}, :password => "psmith09", :password_confirmation => "psmith09"
     assert_response :redirect
-    assert_redirected_to "/login?back_url=http%3A%2F%2Fwww.example.com%2Fusers%2Fnew"
+    assert_redirected_to "/login?back_url=http%3A%2F%2Fwww.example.com%2Fusers"
   end
 end
--- a/test/integration/.svn/text-base/api_token_login_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class ApiTokenLoginTest < ActionController::IntegrationTest
-  fixtures :all
-
-  def setup
-    Setting.rest_api_enabled = '1'
-    Setting.login_required = '1'
-  end
-
-  def teardown
-    Setting.rest_api_enabled = '0'
-    Setting.login_required = '0'
-  end
-  
-  # Using the NewsController because it's a simple API.
-  context "get /news" do
-
-    context "in :xml format" do
-      context "with a valid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          get "/news.xml?key=#{@token.value}"
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :xml
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'feeds')
-          get "/news.xml?key=#{@token.value}"
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-
-    context "in :json format" do
-      context "with a valid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          get "/news.json?key=#{@token.value}"
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :json
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'feeds')
-          get "/news.json?key=#{@token.value}"
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-    
-  end
-end
--- a/test/integration/.svn/text-base/disabled_rest_api_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class DisabledRestApi < ActionController::IntegrationTest
-  fixtures :all
-
-  def setup
-    Setting.rest_api_enabled = '0'
-    Setting.login_required = '1'
-  end
-
-  def teardown
-    Setting.rest_api_enabled = '1'
-    Setting.login_required = '0'
-  end
-  
-  # Using the NewsController because it's a simple API.
-  context "get /news with the API disabled" do
-
-    context "in :xml format" do
-      context "with a valid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          get "/news.xml?key=#{@token.value}"
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-
-      context "with a valid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-
-      context "with a valid HTTP authentication using the API token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-
-    context "in :json format" do
-      context "with a valid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          get "/news.json?key=#{@token.value}"
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-
-      context "with a valid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
-          get "/news.json", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-
-      context "with a valid HTTP authentication using the API token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter')
-          get "/news.json", nil, :authorization => @authorization
-        end
-
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-      
-    end    
-  end
-end
--- a/test/integration/.svn/text-base/http_basic_login_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class HttpBasicLoginTest < ActionController::IntegrationTest
-  fixtures :all
-
-  def setup
-    Setting.rest_api_enabled = '1'
-    Setting.login_required = '1'
-  end
-
-  def teardown
-    Setting.rest_api_enabled = '0'
-    Setting.login_required = '0'
-  end
-  
-  # Using the NewsController because it's a simple API.
-  context "get /news" do
-
-    context "in :xml format" do
-      context "with a valid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :xml
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-      
-      context "without credentials" do
-        setup do
-          get "/projects/onlinestore/news.xml"
-        end
-
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "include_www_authenticate_header" do
-          assert @controller.response.headers.has_key?('WWW-Authenticate')
-        end
-      end
-    end
-
-    context "in :json format" do
-      context "with a valid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
-          get "/news.json", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :json
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password')
-          get "/news.json", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-    
-    context "without credentials" do
-      setup do
-        get "/projects/onlinestore/news.json"
-      end
-
-      should_respond_with :unauthorized
-      should_respond_with_content_type :json
-      should "include_www_authenticate_header" do
-        assert @controller.response.headers.has_key?('WWW-Authenticate')
-      end
-    end
-  end
-end
--- a/test/integration/.svn/text-base/http_basic_login_with_api_token_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class HttpBasicLoginWithApiTokenTest < ActionController::IntegrationTest
-  fixtures :all
-
-  def setup
-    Setting.rest_api_enabled = '1'
-    Setting.login_required = '1'
-  end
-
-  def teardown
-    Setting.rest_api_enabled = '0'
-    Setting.login_required = '0'
-  end
-  
-  # Using the NewsController because it's a simple API.
-  context "get /news" do
-
-    context "in :xml format" do
-      context "with a valid HTTP authentication using the API token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :xml
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'feeds')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-
-    context "in :json format" do
-      context "with a valid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter')
-          get "/news.json", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :json
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'feeds')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter')
-          get "/news.json", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-    
-  end
-end
--- a/test/integration/.svn/text-base/issues_api_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +0,0 @@
-# Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class IssuesApiTest < ActionController::IntegrationTest
-  fixtures :projects,
-    :users,
-    :roles,
-    :members,
-    :member_roles,
-    :issues,
-    :issue_statuses,
-    :versions,
-    :trackers,
-    :projects_trackers,
-    :issue_categories,
-    :enabled_modules,
-    :enumerations,
-    :attachments,
-    :workflows,
-    :custom_fields,
-    :custom_values,
-    :custom_fields_projects,
-    :custom_fields_trackers,
-    :time_entries,
-    :journals,
-    :journal_details,
-    :queries
-
-  def setup
-    Setting.rest_api_enabled = '1'
-  end
-
-  context "/index.xml" do
-    setup do
-      get '/issues.xml'
-    end
-
-    should_respond_with :success
-    should_respond_with_content_type 'application/xml'
-  end
-
-  context "/index.json" do
-    setup do
-      get '/issues.json'
-    end
-
-    should_respond_with :success
-    should_respond_with_content_type 'application/json'
-
-    should 'return a valid JSON string' do
-      assert ActiveSupport::JSON.decode(response.body)
-    end
-  end
-
-  context "/index.xml with filter" do
-    setup do
-      get '/issues.xml?status_id=5'
-    end
-    
-    should_respond_with :success
-    should_respond_with_content_type 'application/xml'
-    should "show only issues with the status_id" do
-      assert_tag :tag => 'issues',
-                 :children => { :count => Issue.visible.count(:conditions => {:status_id => 5}), 
-                                :only => { :tag => 'issue' } }
-    end
-  end
-
-  context "/index.json with filter" do
-    setup do
-      get '/issues.json?status_id=5'
-    end
-
-    should_respond_with :success
-    should_respond_with_content_type 'application/json'
-
-    should 'return a valid JSON string' do
-      assert ActiveSupport::JSON.decode(response.body)
-    end
-
-    should "show only issues with the status_id" do
-      json = ActiveSupport::JSON.decode(response.body)
-      status_ids_used = json.collect {|j| j['status_id'] }
-      assert_equal 3, status_ids_used.length
-      assert status_ids_used.all? {|id| id == 5 }
-    end
-
-  end
-
-  context "/issues/1.xml" do
-    setup do
-      get '/issues/1.xml'
-    end
-    
-    should_respond_with :success
-    should_respond_with_content_type 'application/xml'
-  end
-
-  context "/issues/1.json" do
-    setup do
-      get '/issues/1.json'
-    end
-    
-    should_respond_with :success
-    should_respond_with_content_type 'application/json'
-
-    should 'return a valid JSON string' do
-      assert ActiveSupport::JSON.decode(response.body)
-    end
-  end
-
-  context "POST /issues.xml" do
-    setup do
-      @issue_count = Issue.count
-      @attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}
-      post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :created
-    should_respond_with_content_type 'application/xml'
-
-    should "create an issue with the attributes" do
-      assert_equal Issue.count, @issue_count + 1
-
-      issue = Issue.first(:order => 'id DESC')
-      @attributes.each do |attribute, value|
-        assert_equal value, issue.send(attribute)
-      end
-    end
-  end
-  
-  context "POST /issues.xml with failure" do
-    setup do
-      @attributes = {:project_id => 1}
-      post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :unprocessable_entity
-    should_respond_with_content_type 'application/xml'
-
-    should "have an errors tag" do
-      assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
-    end
-  end
-
-  context "POST /issues.json" do
-    setup do
-      @issue_count = Issue.count
-      @attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}
-      post '/issues.json', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :created
-    should_respond_with_content_type 'application/json'
-
-    should "create an issue with the attributes" do
-      assert_equal Issue.count, @issue_count + 1
-
-      issue = Issue.first(:order => 'id DESC')
-      @attributes.each do |attribute, value|
-        assert_equal value, issue.send(attribute)
-      end
-    end
-  end
-  
-  context "POST /issues.json with failure" do
-    setup do
-      @attributes = {:project_id => 1}
-      post '/issues.json', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :unprocessable_entity
-    should_respond_with_content_type 'application/json'
-
-    should "have an errors element" do
-      json = ActiveSupport::JSON.decode(response.body)
-      assert_equal "can't be blank", json.first['subject']
-    end
-  end
-
-  context "PUT /issues/1.xml" do
-    setup do
-      @issue_count = Issue.count
-      @journal_count = Journal.count
-      @attributes = {:subject => 'API update', :notes => 'A new note'}
-
-      put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-    
-    should_respond_with :ok
-    should_respond_with_content_type 'application/xml'
-
-    should "not create a new issue" do
-      assert_equal Issue.count, @issue_count
-    end
-
-    should "create a new journal" do
-      assert_equal Journal.count, @journal_count + 1
-    end
-
-    should "add the note to the journal" do
-      journal = Journal.last
-      assert_equal "A new note", journal.notes
-    end
-
-    should "update the issue" do
-      issue = Issue.find(1)
-      @attributes.each do |attribute, value|
-        assert_equal value, issue.send(attribute) unless attribute == :notes
-      end
-    end
-    
-  end
-  
-  context "PUT /issues/1.xml with failed update" do
-    setup do
-      @attributes = {:subject => ''}
-      @issue_count = Issue.count
-      @journal_count = Journal.count
-
-      put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-    
-    should_respond_with :unprocessable_entity
-    should_respond_with_content_type 'application/xml'
-  
-    should "not create a new issue" do
-      assert_equal Issue.count, @issue_count
-    end
-
-    should "not create a new journal" do
-      assert_equal Journal.count, @journal_count
-    end
-
-    should "have an errors tag" do
-      assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
-    end
-  end
-
-  context "PUT /issues/1.json" do
-    setup do
-      @issue_count = Issue.count
-      @journal_count = Journal.count
-      @attributes = {:subject => 'API update', :notes => 'A new note'}
-
-      put '/issues/1.json', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-    
-    should_respond_with :ok
-    should_respond_with_content_type 'application/json'
-
-    should "not create a new issue" do
-      assert_equal Issue.count, @issue_count
-    end
-
-    should "create a new journal" do
-      assert_equal Journal.count, @journal_count + 1
-    end
-
-    should "add the note to the journal" do
-      journal = Journal.last
-      assert_equal "A new note", journal.notes
-    end
-
-    should "update the issue" do
-      issue = Issue.find(1)
-      @attributes.each do |attribute, value|
-        assert_equal value, issue.send(attribute) unless attribute == :notes
-      end
-    end
-
-  end
-  
-  context "PUT /issues/1.json with failed update" do
-    setup do
-      @attributes = {:subject => ''}
-      @issue_count = Issue.count
-      @journal_count = Journal.count
-
-      put '/issues/1.json', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-    
-    should_respond_with :unprocessable_entity
-    should_respond_with_content_type 'application/json'
-  
-    should "not create a new issue" do
-      assert_equal Issue.count, @issue_count
-    end
-
-    should "not create a new journal" do
-      assert_equal Journal.count, @journal_count
-    end
-
-    should "have an errors attribute" do
-      json = ActiveSupport::JSON.decode(response.body)
-      assert_equal "can't be blank", json.first['subject']
-    end
-  end
-
-  context "DELETE /issues/1.xml" do
-    setup do
-      @issue_count = Issue.count
-      delete '/issues/1.xml', {}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :ok
-    should_respond_with_content_type 'application/xml'
-
-    should "delete the issue" do
-      assert_equal Issue.count, @issue_count -1
-      assert_nil Issue.find_by_id(1)
-    end
-  end
-
-  context "DELETE /issues/1.json" do
-    setup do
-      @issue_count = Issue.count
-      delete '/issues/1.json', {}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :ok
-    should_respond_with_content_type 'application/json'
-
-    should "delete the issue" do
-      assert_equal Issue.count, @issue_count -1
-      assert_nil Issue.find_by_id(1)
-    end
-  end
-
-  def credentials(user, password=nil)
-    ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)
-  end
-end
--- a/test/integration/.svn/text-base/issues_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/.svn/text-base/issues_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -72,7 +72,7 @@
     put 'issues/1',
          :notes => 'Some notes',
          :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain'), 'description' => 'This is an attachment'}}
-    assert_redirected_to "issues/1"
+    assert_redirected_to "/issues/1"
     
     # make sure attachment was saved
     attachment = Issue.find(1).attachments.find_by_filename("testfile.txt")
--- a/test/integration/.svn/text-base/projects_api_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-# Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class ProjectsApiTest < ActionController::IntegrationTest
-  fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
-           :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
-           :attachments, :custom_fields, :custom_values, :time_entries
-
-  def setup
-    Setting.rest_api_enabled = '1'
-  end
-    
-  def test_index
-    get '/projects.xml'
-    assert_response :success
-    assert_equal 'application/xml', @response.content_type
-  end
-    
-  def test_show
-    get '/projects/1.xml'
-    assert_response :success
-    assert_equal 'application/xml', @response.content_type
-  end
-    
-  def test_create
-    attributes = {:name => 'API test', :identifier => 'api-test'}
-    assert_difference 'Project.count' do
-      post '/projects.xml', {:project => attributes}, :authorization => credentials('admin')
-    end
-    assert_response :created
-    assert_equal 'application/xml', @response.content_type
-    project = Project.first(:order => 'id DESC')
-    attributes.each do |attribute, value|
-      assert_equal value, project.send(attribute)
-    end
-  end
-  
-  def test_create_failure
-    attributes = {:name => 'API test'}
-    assert_no_difference 'Project.count' do
-      post '/projects.xml', {:project => attributes}, :authorization => credentials('admin')
-    end
-    assert_response :unprocessable_entity
-    assert_equal 'application/xml', @response.content_type
-    assert_tag :errors, :child => {:tag => 'error', :content => "Identifier can't be blank"}
-  end
-    
-  def test_update
-    attributes = {:name => 'API update'}
-    assert_no_difference 'Project.count' do
-      put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith')
-    end
-    assert_response :ok
-    assert_equal 'application/xml', @response.content_type
-    project = Project.find(1)
-    attributes.each do |attribute, value|
-      assert_equal value, project.send(attribute)
-    end
-  end
-  
-  def test_update_failure
-    attributes = {:name => ''}
-    assert_no_difference 'Project.count' do
-      put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith')
-    end
-    assert_response :unprocessable_entity
-    assert_equal 'application/xml', @response.content_type
-    assert_tag :errors, :child => {:tag => 'error', :content => "Name can't be blank"}
-  end
-    
-  def test_destroy
-    assert_difference 'Project.count', -1 do
-      delete '/projects/2.xml', {}, :authorization => credentials('admin')
-    end
-    assert_response :ok
-    assert_equal 'application/xml', @response.content_type
-    assert_nil Project.find_by_id(2)
-  end
-  
-  def credentials(user, password=nil)
-    ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)
-  end
-end
--- a/test/integration/.svn/text-base/projects_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/.svn/text-base/projects_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -27,7 +27,7 @@
     assert_response :success
     assert_template "admin/projects"
     post "projects/archive", :id => 1
-    assert_redirected_to "admin/projects"
+    assert_redirected_to "/admin/projects"
     assert !Project.find(1).active?
     
     get 'projects/1'
@@ -36,7 +36,7 @@
     assert_response 403
     
     post "projects/unarchive", :id => 1
-    assert_redirected_to "admin/projects"
+    assert_redirected_to "/admin/projects"
     assert Project.find(1).active?
     get "projects/1"
     assert_response :success
--- a/test/integration/.svn/text-base/routing_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/.svn/text-base/routing_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -157,13 +157,14 @@
     should_route :get, "/projects/567/news/new", :controller => 'news', :action => 'new', :project_id => '567'
     should_route :get, "/news/234", :controller => 'news', :action => 'show', :id => '234'
     should_route :get, "/news/567/edit", :controller => 'news', :action => 'edit', :id => '567'
+    should_route :get, "/news/preview", :controller => 'previews', :action => 'news'
+    
+    should_route :post, "/projects/567/news", :controller => 'news', :action => 'create', :project_id => '567'
+    should_route :post, "/news/567/comments", :controller => 'comments', :action => 'create', :id => '567'
 
-    should_route :post, "/projects/567/news", :controller => 'news', :action => 'create', :project_id => '567'
-    should_route :post, "/news/567/destroy", :controller => 'news', :action => 'destroy', :id => '567'
-    should_route :post, "/news/567/comments", :controller => 'comments', :action => 'create', :id => '567'
-    
-    should_route :put, "/news/567/edit", :controller => 'news', :action => 'update', :id => '567'
+    should_route :put, "/news/567", :controller => 'news', :action => 'update', :id => '567'
 
+    should_route :delete, "/news/567", :controller => 'news', :action => 'destroy', :id => '567'
     should_route :delete, "/news/567/comments/15", :controller => 'comments', :action => 'destroy', :id => '567', :comment_id => '15'
   end
 
@@ -220,40 +221,81 @@
     should_route :post, "/projects/redmine/repository/edit", :controller => 'repositories', :action => 'edit', :id => 'redmine'
   end
 
-  context "timelogs" do
-    should_route :get, "/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :issue_id => '567'
-    should_route :get, "/projects/ecookbook/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook'
-    should_route :get, "/projects/ecookbook/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook', :issue_id => '567'
+  context "timelogs (global)" do
+    should_route :get, "/time_entries", :controller => 'timelog', :action => 'index'
+    should_route :get, "/time_entries.csv", :controller => 'timelog', :action => 'index', :format => 'csv'
+    should_route :get, "/time_entries.atom", :controller => 'timelog', :action => 'index', :format => 'atom'
+    should_route :get, "/time_entries/new", :controller => 'timelog', :action => 'new'
     should_route :get, "/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22'
-    should_route :get, "/time_entries/report", :controller => 'timelog', :action => 'report'
-    should_route :get, "/projects/567/time_entries/report", :controller => 'timelog', :action => 'report', :project_id => '567'
-    should_route :get, "/projects/567/time_entries/report.csv", :controller => 'timelog', :action => 'report', :project_id => '567', :format => 'csv'
-    should_route :get, "/time_entries", :controller => 'timelog', :action => 'details'
-    should_route :get, "/time_entries.csv", :controller => 'timelog', :action => 'details', :format => 'csv'
-    should_route :get, "/time_entries.atom", :controller => 'timelog', :action => 'details', :format => 'atom'
-    should_route :get, "/projects/567/time_entries", :controller => 'timelog', :action => 'details', :project_id => '567'
-    should_route :get, "/projects/567/time_entries.csv", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'csv'
-    should_route :get, "/projects/567/time_entries.atom", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'atom'
-    should_route :get, "/issues/234/time_entries", :controller => 'timelog', :action => 'details', :issue_id => '234'
-    should_route :get, "/issues/234/time_entries.csv", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'csv'
-    should_route :get, "/issues/234/time_entries.atom", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'atom'
-    should_route :get, "/projects/ecookbook/issues/123/time_entries", :controller => 'timelog', :action => 'details', :project_id => 'ecookbook', :issue_id => '123'
 
-    should_route :post, "/time_entries/55/destroy", :controller => 'timelog', :action => 'destroy', :id => '55'
+    should_route :post, "/time_entries", :controller => 'timelog', :action => 'create'
+
+    should_route :put, "/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22'
+
+    should_route :delete, "/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55'
+  end
+
+  context "timelogs (scoped under project)" do
+    should_route :get, "/projects/567/time_entries", :controller => 'timelog', :action => 'index', :project_id => '567'
+    should_route :get, "/projects/567/time_entries.csv", :controller => 'timelog', :action => 'index', :project_id => '567', :format => 'csv'
+    should_route :get, "/projects/567/time_entries.atom", :controller => 'timelog', :action => 'index', :project_id => '567', :format => 'atom'
+    should_route :get, "/projects/567/time_entries/new", :controller => 'timelog', :action => 'new', :project_id => '567'
+    should_route :get, "/projects/567/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :project_id => '567'
+
+    should_route :post, "/projects/567/time_entries", :controller => 'timelog', :action => 'create', :project_id => '567'
+
+    should_route :put, "/projects/567/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :project_id => '567'
+
+    should_route :delete, "/projects/567/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :project_id => '567'
+  end
+
+  context "timelogs (scoped under issues)" do
+    should_route :get, "/issues/234/time_entries", :controller => 'timelog', :action => 'index', :issue_id => '234'
+    should_route :get, "/issues/234/time_entries.csv", :controller => 'timelog', :action => 'index', :issue_id => '234', :format => 'csv'
+    should_route :get, "/issues/234/time_entries.atom", :controller => 'timelog', :action => 'index', :issue_id => '234', :format => 'atom'
+    should_route :get, "/issues/234/time_entries/new", :controller => 'timelog', :action => 'new', :issue_id => '234'
+    should_route :get, "/issues/234/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :issue_id => '234'
+
+    should_route :post, "/issues/234/time_entries", :controller => 'timelog', :action => 'create', :issue_id => '234'
+
+    should_route :put, "/issues/234/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :issue_id => '234'
+
+    should_route :delete, "/issues/234/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :issue_id => '234'
+  end
+
+  context "timelogs (scoped under project and issues)" do
+    should_route :get, "/projects/ecookbook/issues/234/time_entries", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook'
+    should_route :get, "/projects/ecookbook/issues/234/time_entries.csv", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook', :format => 'csv'
+    should_route :get, "/projects/ecookbook/issues/234/time_entries.atom", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook', :format => 'atom'
+    should_route :get, "/projects/ecookbook/issues/234/time_entries/new", :controller => 'timelog', :action => 'new', :issue_id => '234', :project_id => 'ecookbook'
+    should_route :get, "/projects/ecookbook/issues/234/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :issue_id => '234', :project_id => 'ecookbook'
+
+    should_route :post, "/projects/ecookbook/issues/234/time_entries", :controller => 'timelog', :action => 'create', :issue_id => '234', :project_id => 'ecookbook'
+
+    should_route :put, "/projects/ecookbook/issues/234/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :issue_id => '234', :project_id => 'ecookbook'
+
+    should_route :delete, "/projects/ecookbook/issues/234/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :issue_id => '234', :project_id => 'ecookbook'
+  end
+
+  context "time_entry_reports" do
+    should_route :get, "/time_entries/report", :controller => 'time_entry_reports', :action => 'report'
+    should_route :get, "/projects/567/time_entries/report", :controller => 'time_entry_reports', :action => 'report', :project_id => '567'
+    should_route :get, "/projects/567/time_entries/report.csv", :controller => 'time_entry_reports', :action => 'report', :project_id => '567', :format => 'csv'
   end
 
   context "users" do
     should_route :get, "/users", :controller => 'users', :action => 'index'
     should_route :get, "/users/44", :controller => 'users', :action => 'show', :id => '44'
-    should_route :get, "/users/new", :controller => 'users', :action => 'add'
+    should_route :get, "/users/new", :controller => 'users', :action => 'new'
     should_route :get, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444'
     should_route :get, "/users/222/edit/membership", :controller => 'users', :action => 'edit', :id => '222', :tab => 'membership'
 
-    should_route :post, "/users/new", :controller => 'users', :action => 'add'
-    should_route :post, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444'
+    should_route :post, "/users", :controller => 'users', :action => 'create'
     should_route :post, "/users/123/memberships", :controller => 'users', :action => 'edit_membership', :id => '123'
     should_route :post, "/users/123/memberships/55", :controller => 'users', :action => 'edit_membership', :id => '123', :membership_id => '55'
     should_route :post, "/users/567/memberships/12/destroy", :controller => 'users', :action => 'destroy_membership', :id => '567', :membership_id => '12'
+
+    should_route :put, "/users/444", :controller => 'users', :action => 'update', :id => '444'
   end
 
   # TODO: should they all be scoped under /projects/:project_id ?
@@ -269,23 +311,27 @@
   end
 
   context "wiki (singular, project's pages)" do
-    should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'index', :id => '567'
-    should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'index', :id => '567', :page => 'lalala'
-    should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page'
-    should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :id => '1', :page => 'CookBook_documentation'
-    should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :id => '1', :page => 'CookBook_documentation', :version => '2', :version_from => '1'
-    should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :id => '1', :page => 'CookBook_documentation', :version => '2'
-    should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida'
-    should_route :get, "/projects/567/wiki/page_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'page_index'
-    should_route :get, "/projects/567/wiki/Page_Index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'Page_Index'
-    should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'date_index'
-    should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'special', :id => '567', :page => 'export'
+    should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'show', :project_id => '567'
+    should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'show', :project_id => '567', :id => 'lalala'
+    should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :project_id => '567', :id => 'my_page'
+    should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :project_id => '1', :id => 'CookBook_documentation'
+    should_route :get, "/projects/1/wiki/CookBook_documentation/diff", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation'
+    should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation', :version => '2'
+    should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation', :version => '2', :version_from => '1'
+    should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :project_id => '1', :id => 'CookBook_documentation', :version => '2'
+    should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :id => 'ladida'
+    should_route :get, "/projects/567/wiki/index", :controller => 'wiki', :action => 'index', :project_id => '567'
+    should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'date_index', :project_id => '567'
+    should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'export', :project_id => '567'
     
-    should_route :post, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page'
-    should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :id => '567', :page => 'CookBook_documentation'
-    should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida'
-    should_route :post, "/projects/22/wiki/ladida/destroy", :controller => 'wiki', :action => 'destroy', :id => '22', :page => 'ladida'
-    should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :id => '22', :page => 'ladida'
+    should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :project_id => '567', :id => 'CookBook_documentation'
+    should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :id => 'ladida'
+    should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :project_id => '22', :id => 'ladida'
+    should_route :post, "/projects/22/wiki/ladida/add_attachment", :controller => 'wiki', :action => 'add_attachment', :project_id => '22', :id => 'ladida'
+
+    should_route :put, "/projects/567/wiki/my_page", :controller => 'wiki', :action => 'update', :project_id => '567', :id => 'my_page'
+
+    should_route :delete, "/projects/22/wiki/ladida", :controller => 'wiki', :action => 'destroy', :project_id => '22', :id => 'ladida'
   end
 
   context "wikis (plural, admin setup)" do
--- a/test/integration/account_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/account_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -44,7 +44,7 @@
     
     # User logs in with 'autologin' checked
     post '/login', :username => user.login, :password => 'admin', :autologin => 1
-    assert_redirected_to 'my/page'
+    assert_redirected_to '/my/page'
     token = Token.find :first
     assert_not_nil token
     assert_equal user, token.user
@@ -105,7 +105,7 @@
     
     post 'account/register', :user => {:login => "newuser", :language => "en", :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar"}, 
                              :password => "newpass", :password_confirmation => "newpass"
-    assert_redirected_to 'my/account'
+    assert_redirected_to '/my/account'
     follow_redirect!
     assert_response :success
     assert_template 'my/account'
@@ -152,7 +152,7 @@
     AuthSource.expects(:authenticate).returns({:login => 'foo', :firstname => 'Foo', :lastname => 'Smith', :mail => 'foo@bar.com', :auth_source_id => 66})
   
     post 'account/login', :username => 'foo', :password => 'bar'
-    assert_redirected_to 'my/page'
+    assert_redirected_to '/my/page'
     
     user = User.find_by_login('foo')
     assert user.is_a?(User)
@@ -187,7 +187,7 @@
     sid = session[:session_id]
     
     post '/login', :username => 'admin', :password => 'admin'
-    assert_redirected_to 'my/page'
+    assert_redirected_to '/my/page'
     assert_not_equal sid, session[:session_id], "login should reset session"
     assert_equal 1, session[:user_id]
     sid = session[:session_id]
--- a/test/integration/admin_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/admin_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -22,10 +22,10 @@
 
   def test_add_user
     log_user("admin", "admin")
-    get "/users/add"
+    get "/users/new"
     assert_response :success
-    assert_template "users/add"
-    post "/users/add", :user => { :login => "psmith", :firstname => "Paul", :lastname => "Smith", :mail => "psmith@somenet.foo", :language => "en" }, :password => "psmith09", :password_confirmation => "psmith09"
+    assert_template "users/new"
+    post "/users/create", :user => { :login => "psmith", :firstname => "Paul", :lastname => "Smith", :mail => "psmith@somenet.foo", :language => "en" }, :password => "psmith09", :password_confirmation => "psmith09"
     
     user = User.find_by_login("psmith")
     assert_kind_of User, user
@@ -35,15 +35,15 @@
     assert_kind_of User, logged_user
     assert_equal "Paul", logged_user.firstname
     
-    post "users/edit", :id => user.id, :user => { :status => User::STATUS_LOCKED }
+    put "users/#{user.id}", :id => user.id, :user => { :status => User::STATUS_LOCKED }
     assert_redirected_to "/users/#{ user.id }/edit"
     locked_user = User.try_to_login("psmith", "psmith09")
     assert_equal nil, locked_user
   end
 
   test "Add a user as an anonymous user should fail" do
-    post '/users/add', :user => { :login => 'psmith', :firstname => 'Paul'}, :password => "psmith09", :password_confirmation => "psmith09"
+    post '/users/create', :user => { :login => 'psmith', :firstname => 'Paul'}, :password => "psmith09", :password_confirmation => "psmith09"
     assert_response :redirect
-    assert_redirected_to "/login?back_url=http%3A%2F%2Fwww.example.com%2Fusers%2Fnew"
+    assert_redirected_to "/login?back_url=http%3A%2F%2Fwww.example.com%2Fusers"
   end
 end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,41 @@
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/4397/trunk/test/integration/api_test
+END
+token_authentication_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4358/trunk/test/integration/api_test/token_authentication_test.rb
+END
+http_basic_login_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/4360/trunk/test/integration/api_test/http_basic_login_test.rb
+END
+projects_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/svn/!svn/ver/4397/trunk/test/integration/api_test/projects_test.rb
+END
+issues_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/4397/trunk/test/integration/api_test/issues_test.rb
+END
+http_basic_login_with_api_token_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 90
+/svn/!svn/ver/4363/trunk/test/integration/api_test/http_basic_login_with_api_token_test.rb
+END
+disabled_rest_api_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/4357/trunk/test/integration/api_test/disabled_rest_api_test.rb
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,232 @@
+10
+
+dir
+4411
+http://redmine.rubyforge.org/svn/trunk/test/integration/api_test
+http://redmine.rubyforge.org/svn
+
+
+
+2010-11-13T10:05:43.644565Z
+4397
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+token_authentication_test.rb
+file
+
+
+
+
+2010-11-19T13:04:46.164708Z
+65fbddeb3566ca683746b74e4cbbcedd
+2010-11-01T15:45:03.207475Z
+4358
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+606
+
+http_basic_login_test.rb
+file
+
+
+
+
+2010-11-19T13:04:46.164708Z
+c8145f134a31604365baa69990b0233f
+2010-11-02T15:52:06.649052Z
+4360
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+830
+
+projects_test.rb
+file
+
+
+
+
+2010-11-19T13:04:46.164708Z
+925aa948a6a6bcf558ea5270731a93e5
+2010-11-13T10:05:43.644565Z
+4397
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4223
+
+issues_test.rb
+file
+
+
+
+
+2010-11-19T13:04:46.164708Z
+4d1156dc608214ea129768309dd61963
+2010-11-13T10:05:43.644565Z
+4397
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11171
+
+http_basic_login_with_api_token_test.rb
+file
+
+
+
+
+2010-11-19T13:04:46.164708Z
+48bd13d41a1e011f9bdde27bc8cf034c
+2010-11-03T16:48:23.980579Z
+4363
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+634
+
+disabled_rest_api_test.rb
+file
+
+
+
+
+2010-11-19T13:04:46.164708Z
+5294c8d805e67e246bb1535b4fe769d4
+2010-11-01T15:26:05.436106Z
+4357
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3835
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/.svn/prop-base/issues_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/.svn/prop-base/projects_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/.svn/text-base/disabled_rest_api_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,110 @@
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::DisabledRestApiTest < ActionController::IntegrationTest
+  fixtures :all
+
+  def setup
+    Setting.rest_api_enabled = '0'
+    Setting.login_required = '1'
+  end
+
+  def teardown
+    Setting.rest_api_enabled = '1'
+    Setting.login_required = '0'
+  end
+  
+  # Using the NewsController because it's a simple API.
+  context "get /news with the API disabled" do
+
+    context "in :xml format" do
+      context "with a valid api token" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'api')
+          get "/news.xml?key=#{@token.value}"
+        end
+        
+        should_respond_with :unauthorized
+        should_respond_with_content_type :xml
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+
+      context "with a valid HTTP authentication" do
+        setup do
+          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
+          get "/news.xml", nil, :authorization => @authorization
+        end
+        
+        should_respond_with :unauthorized
+        should_respond_with_content_type :xml
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+
+      context "with a valid HTTP authentication using the API token" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'api')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
+          get "/news.xml", nil, :authorization => @authorization
+        end
+        
+        should_respond_with :unauthorized
+        should_respond_with_content_type :xml
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+    end
+
+    context "in :json format" do
+      context "with a valid api token" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'api')
+          get "/news.json?key=#{@token.value}"
+        end
+        
+        should_respond_with :unauthorized
+        should_respond_with_content_type :json
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+
+      context "with a valid HTTP authentication" do
+        setup do
+          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
+          get "/news.json", nil, :authorization => @authorization
+        end
+        
+        should_respond_with :unauthorized
+        should_respond_with_content_type :json
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+
+      context "with a valid HTTP authentication using the API token" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'api')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter')
+          get "/news.json", nil, :authorization => @authorization
+        end
+
+        should_respond_with :unauthorized
+        should_respond_with_content_type :json
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+      
+    end    
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/.svn/text-base/http_basic_login_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,31 @@
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::HttpBasicLoginTest < ActionController::IntegrationTest
+  fixtures :all
+
+  def setup
+    Setting.rest_api_enabled = '1'
+    Setting.login_required = '1'
+  end
+
+  def teardown
+    Setting.rest_api_enabled = '0'
+    Setting.login_required = '0'
+  end
+  
+  # Using the NewsController because it's a simple API.
+  context "get /news" do
+    setup do
+      project = Project.find('onlinestore')
+      EnabledModule.create(:project => project, :name => 'news')
+    end
+
+    context "in :xml format" do
+      should_allow_http_basic_auth_with_username_and_password(:get, "/projects/onlinestore/news.xml")
+    end
+
+    context "in :json format" do
+      should_allow_http_basic_auth_with_username_and_password(:get, "/projects/onlinestore/news.json")
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/.svn/text-base/http_basic_login_with_api_token_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,27 @@
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::HttpBasicLoginWithApiTokenTest < ActionController::IntegrationTest
+  fixtures :all
+
+  def setup
+    Setting.rest_api_enabled = '1'
+    Setting.login_required = '1'
+  end
+
+  def teardown
+    Setting.rest_api_enabled = '0'
+    Setting.login_required = '0'
+  end
+  
+  # Using the NewsController because it's a simple API.
+  context "get /news" do
+
+    context "in :xml format" do
+      should_allow_http_basic_auth_with_key(:get, "/news.xml")
+    end
+
+    context "in :json format" do
+      should_allow_http_basic_auth_with_key(:get, "/news.json")
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/.svn/text-base/issues_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,340 @@
+# Redmine - project management software
+# Copyright (C) 2006-2010  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::IssuesTest < ActionController::IntegrationTest
+  fixtures :projects,
+    :users,
+    :roles,
+    :members,
+    :member_roles,
+    :issues,
+    :issue_statuses,
+    :versions,
+    :trackers,
+    :projects_trackers,
+    :issue_categories,
+    :enabled_modules,
+    :enumerations,
+    :attachments,
+    :workflows,
+    :custom_fields,
+    :custom_values,
+    :custom_fields_projects,
+    :custom_fields_trackers,
+    :time_entries,
+    :journals,
+    :journal_details,
+    :queries
+
+  def setup
+    Setting.rest_api_enabled = '1'
+  end
+
+  # Use a private project to make sure auth is really working and not just
+  # only showing public issues.
+  context "/index.xml" do
+    should_allow_api_authentication(:get, "/projects/private-child/issues.xml")
+  end
+
+  context "/index.json" do
+    should_allow_api_authentication(:get, "/projects/private-child/issues.json")
+  end
+
+  context "/index.xml with filter" do
+    should_allow_api_authentication(:get, "/projects/private-child/issues.xml?status_id=5")
+
+    should "show only issues with the status_id" do
+      get '/issues.xml?status_id=5'
+      assert_tag :tag => 'issues',
+                 :children => { :count => Issue.visible.count(:conditions => {:status_id => 5}), 
+                                :only => { :tag => 'issue' } }
+    end
+  end
+
+  context "/index.json with filter" do
+    should_allow_api_authentication(:get, "/projects/private-child/issues.json?status_id=5")
+
+    should "show only issues with the status_id" do
+      get '/issues.json?status_id=5'
+
+      json = ActiveSupport::JSON.decode(response.body)
+      status_ids_used = json.collect {|j| j['status_id'] }
+      assert_equal 3, status_ids_used.length
+      assert status_ids_used.all? {|id| id == 5 }
+    end
+
+  end
+
+  # Issue 6 is on a private project
+  context "/issues/6.xml" do
+    should_allow_api_authentication(:get, "/issues/6.xml")
+  end
+
+  context "/issues/6.json" do
+    should_allow_api_authentication(:get, "/issues/6.json")
+  end
+
+  context "POST /issues.xml" do
+    should_allow_api_authentication(:post,
+                                    '/issues.xml',
+                                    {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}},
+                                    {:success_code => :created})
+
+    should "create an issue with the attributes" do
+      assert_difference('Issue.count') do
+        post '/issues.xml', {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, :authorization => credentials('jsmith')
+      end
+        
+      issue = Issue.first(:order => 'id DESC')
+      assert_equal 1, issue.project_id
+      assert_equal 2, issue.tracker_id
+      assert_equal 3, issue.status_id
+      assert_equal 'API test', issue.subject
+  
+      assert_response :created
+      assert_equal 'application/xml', @response.content_type
+      assert_tag 'issue', :child => {:tag => 'id', :content => issue.id.to_s}
+    end
+  end
+  
+  context "POST /issues.xml with failure" do
+    should_allow_api_authentication(:post,
+                                    '/issues.xml',
+                                    {:issue => {:project_id => 1}},
+                                    {:success_code => :unprocessable_entity})
+
+    should "have an errors tag" do
+      assert_no_difference('Issue.count') do
+        post '/issues.xml', {:issue => {:project_id => 1}}, :authorization => credentials('jsmith')
+      end
+
+      assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
+    end
+  end
+
+  context "POST /issues.json" do
+    should_allow_api_authentication(:post,
+                                    '/issues.json',
+                                    {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}},
+                                    {:success_code => :created})
+
+    should "create an issue with the attributes" do
+      assert_difference('Issue.count') do
+        post '/issues.json', {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, :authorization => credentials('jsmith')
+      end
+        
+      issue = Issue.first(:order => 'id DESC')
+      assert_equal 1, issue.project_id
+      assert_equal 2, issue.tracker_id
+      assert_equal 3, issue.status_id
+      assert_equal 'API test', issue.subject
+    end
+    
+  end
+  
+  context "POST /issues.json with failure" do
+    should_allow_api_authentication(:post,
+                                    '/issues.json',
+                                    {:issue => {:project_id => 1}},
+                                    {:success_code => :unprocessable_entity})
+
+    should "have an errors element" do
+      assert_no_difference('Issue.count') do
+        post '/issues.json', {:issue => {:project_id => 1}}, :authorization => credentials('jsmith')
+      end
+
+      json = ActiveSupport::JSON.decode(response.body)
+      assert_equal "can't be blank", json.first['subject']
+    end
+  end
+
+  # Issue 6 is on a private project
+  context "PUT /issues/6.xml" do
+    setup do
+      @parameters = {:issue => {:subject => 'API update', :notes => 'A new note'}}
+      @headers = { :authorization => credentials('jsmith') }
+    end
+    
+    should_allow_api_authentication(:put,
+                                    '/issues/6.xml',
+                                    {:issue => {:subject => 'API update', :notes => 'A new note'}},
+                                    {:success_code => :ok})
+
+    should "not create a new issue" do
+      assert_no_difference('Issue.count') do
+        put '/issues/6.xml', @parameters, @headers
+      end
+    end
+
+    should "create a new journal" do
+      assert_difference('Journal.count') do
+        put '/issues/6.xml', @parameters, @headers
+      end
+    end
+
+    should "add the note to the journal" do
+      put '/issues/6.xml', @parameters, @headers
+      
+      journal = Journal.last
+      assert_equal "A new note", journal.notes
+    end
+
+    should "update the issue" do
+      put '/issues/6.xml', @parameters, @headers
+      
+      issue = Issue.find(6)
+      assert_equal "API update", issue.subject
+    end
+    
+  end
+  
+  context "PUT /issues/6.xml with failed update" do
+    setup do
+      @parameters = {:issue => {:subject => ''}}
+      @headers = { :authorization => credentials('jsmith') }
+    end
+
+    should_allow_api_authentication(:put,
+                                    '/issues/6.xml',
+                                    {:issue => {:subject => ''}}, # Missing subject should fail
+                                    {:success_code => :unprocessable_entity})
+
+    should "not create a new issue" do
+      assert_no_difference('Issue.count') do
+        put '/issues/6.xml', @parameters, @headers
+      end
+    end
+
+    should "not create a new journal" do
+      assert_no_difference('Journal.count') do
+        put '/issues/6.xml', @parameters, @headers
+      end
+    end
+
+    should "have an errors tag" do
+      put '/issues/6.xml', @parameters, @headers
+
+      assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
+    end
+  end
+
+  context "PUT /issues/6.json" do
+    setup do
+      @parameters = {:issue => {:subject => 'API update', :notes => 'A new note'}}
+      @headers = { :authorization => credentials('jsmith') }
+    end
+    
+    should_allow_api_authentication(:put,
+                                    '/issues/6.json',
+                                    {:issue => {:subject => 'API update', :notes => 'A new note'}},
+                                    {:success_code => :ok})
+
+    should "not create a new issue" do
+      assert_no_difference('Issue.count') do
+        put '/issues/6.json', @parameters, @headers
+      end
+    end
+
+    should "create a new journal" do
+      assert_difference('Journal.count') do
+        put '/issues/6.json', @parameters, @headers
+      end
+    end
+
+    should "add the note to the journal" do
+      put '/issues/6.json', @parameters, @headers
+      
+      journal = Journal.last
+      assert_equal "A new note", journal.notes
+    end
+
+    should "update the issue" do
+      put '/issues/6.json', @parameters, @headers
+      
+      issue = Issue.find(6)
+      assert_equal "API update", issue.subject
+    end
+    
+  end
+  
+  context "PUT /issues/6.json with failed update" do
+    setup do
+      @parameters = {:issue => {:subject => ''}}
+      @headers = { :authorization => credentials('jsmith') }
+    end
+
+    should_allow_api_authentication(:put,
+                                    '/issues/6.json',
+                                    {:issue => {:subject => ''}}, # Missing subject should fail
+                                    {:success_code => :unprocessable_entity})
+
+    should "not create a new issue" do
+      assert_no_difference('Issue.count') do
+        put '/issues/6.json', @parameters, @headers
+      end
+    end
+
+    should "not create a new journal" do
+      assert_no_difference('Journal.count') do
+        put '/issues/6.json', @parameters, @headers
+      end
+    end
+
+    should "have an errors attribute" do
+      put '/issues/6.json', @parameters, @headers
+
+      json = ActiveSupport::JSON.decode(response.body)
+      assert_equal "can't be blank", json.first['subject']
+    end
+  end
+
+  context "DELETE /issues/1.xml" do
+    should_allow_api_authentication(:delete,
+                                    '/issues/6.xml',
+                                    {},
+                                    {:success_code => :ok})
+
+    should "delete the issue" do
+      assert_difference('Issue.count',-1) do
+        delete '/issues/6.xml', {}, :authorization => credentials('jsmith')
+      end
+      
+      assert_nil Issue.find_by_id(6)
+    end
+  end
+
+  context "DELETE /issues/1.json" do
+    should_allow_api_authentication(:delete,
+                                    '/issues/6.json',
+                                    {},
+                                    {:success_code => :ok})
+
+    should "delete the issue" do
+      assert_difference('Issue.count',-1) do
+        delete '/issues/6.json', {}, :authorization => credentials('jsmith')
+      end
+      
+      assert_nil Issue.find_by_id(6)
+    end
+  end
+
+  def credentials(user, password=nil)
+    ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/.svn/text-base/projects_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,111 @@
+# Redmine - project management software
+# Copyright (C) 2006-2010  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::ProjectsTest < ActionController::IntegrationTest
+  fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
+           :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
+           :attachments, :custom_fields, :custom_values, :time_entries
+
+  def setup
+    Setting.rest_api_enabled = '1'
+  end
+    
+  def test_index
+    get '/projects.xml'
+    assert_response :success
+    assert_equal 'application/xml', @response.content_type
+  end
+    
+  def test_show
+    get '/projects/1.xml'
+    assert_response :success
+    assert_equal 'application/xml', @response.content_type
+    assert_tag 'custom_field', :attributes => {:name => 'Development status'}, :content => 'Stable'
+  end
+    
+  def test_show_should_not_display_hidden_custom_fields
+    ProjectCustomField.find_by_name('Development status').update_attribute :visible, false
+    get '/projects/1.xml'
+    assert_response :success
+    assert_equal 'application/xml', @response.content_type
+    assert_no_tag 'custom_field', :attributes => {:name => 'Development status'}
+  end
+    
+  def test_create
+    attributes = {:name => 'API test', :identifier => 'api-test'}
+    assert_difference 'Project.count' do
+      post '/projects.xml', {:project => attributes}, :authorization => credentials('admin')
+    end
+    
+    project = Project.first(:order => 'id DESC')
+    attributes.each do |attribute, value|
+      assert_equal value, project.send(attribute)
+    end
+
+    assert_response :created
+    assert_equal 'application/xml', @response.content_type
+    assert_tag 'project', :child => {:tag => 'id', :content => project.id.to_s}
+  end
+  
+  def test_create_failure
+    attributes = {:name => 'API test'}
+    assert_no_difference 'Project.count' do
+      post '/projects.xml', {:project => attributes}, :authorization => credentials('admin')
+    end
+    assert_response :unprocessable_entity
+    assert_equal 'application/xml', @response.content_type
+    assert_tag :errors, :child => {:tag => 'error', :content => "Identifier can't be blank"}
+  end
+    
+  def test_update
+    attributes = {:name => 'API update'}
+    assert_no_difference 'Project.count' do
+      put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith')
+    end
+    assert_response :ok
+    assert_equal 'application/xml', @response.content_type
+    project = Project.find(1)
+    attributes.each do |attribute, value|
+      assert_equal value, project.send(attribute)
+    end
+  end
+  
+  def test_update_failure
+    attributes = {:name => ''}
+    assert_no_difference 'Project.count' do
+      put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith')
+    end
+    assert_response :unprocessable_entity
+    assert_equal 'application/xml', @response.content_type
+    assert_tag :errors, :child => {:tag => 'error', :content => "Name can't be blank"}
+  end
+    
+  def test_destroy
+    assert_difference 'Project.count', -1 do
+      delete '/projects/2.xml', {}, :authorization => credentials('admin')
+    end
+    assert_response :ok
+    assert_equal 'application/xml', @response.content_type
+    assert_nil Project.find_by_id(2)
+  end
+  
+  def credentials(user, password=nil)
+    ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/.svn/text-base/token_authentication_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,26 @@
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::TokenAuthenticationTest < ActionController::IntegrationTest
+  fixtures :all
+
+  def setup
+    Setting.rest_api_enabled = '1'
+    Setting.login_required = '1'
+  end
+
+  def teardown
+    Setting.rest_api_enabled = '0'
+    Setting.login_required = '0'
+  end
+  
+  # Using the NewsController because it's a simple API.
+  context "get /news" do
+    context "in :xml format" do
+      should_allow_key_based_auth(:get, "/news.xml")
+    end
+
+    context "in :json format" do
+      should_allow_key_based_auth(:get, "/news.json")
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/disabled_rest_api_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,110 @@
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::DisabledRestApiTest < ActionController::IntegrationTest
+  fixtures :all
+
+  def setup
+    Setting.rest_api_enabled = '0'
+    Setting.login_required = '1'
+  end
+
+  def teardown
+    Setting.rest_api_enabled = '1'
+    Setting.login_required = '0'
+  end
+  
+  # Using the NewsController because it's a simple API.
+  context "get /news with the API disabled" do
+
+    context "in :xml format" do
+      context "with a valid api token" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'api')
+          get "/news.xml?key=#{@token.value}"
+        end
+        
+        should_respond_with :unauthorized
+        should_respond_with_content_type :xml
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+
+      context "with a valid HTTP authentication" do
+        setup do
+          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
+          get "/news.xml", nil, :authorization => @authorization
+        end
+        
+        should_respond_with :unauthorized
+        should_respond_with_content_type :xml
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+
+      context "with a valid HTTP authentication using the API token" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'api')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
+          get "/news.xml", nil, :authorization => @authorization
+        end
+        
+        should_respond_with :unauthorized
+        should_respond_with_content_type :xml
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+    end
+
+    context "in :json format" do
+      context "with a valid api token" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'api')
+          get "/news.json?key=#{@token.value}"
+        end
+        
+        should_respond_with :unauthorized
+        should_respond_with_content_type :json
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+
+      context "with a valid HTTP authentication" do
+        setup do
+          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
+          get "/news.json", nil, :authorization => @authorization
+        end
+        
+        should_respond_with :unauthorized
+        should_respond_with_content_type :json
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+
+      context "with a valid HTTP authentication using the API token" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'api')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter')
+          get "/news.json", nil, :authorization => @authorization
+        end
+
+        should_respond_with :unauthorized
+        should_respond_with_content_type :json
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+      
+    end    
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/http_basic_login_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,31 @@
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::HttpBasicLoginTest < ActionController::IntegrationTest
+  fixtures :all
+
+  def setup
+    Setting.rest_api_enabled = '1'
+    Setting.login_required = '1'
+  end
+
+  def teardown
+    Setting.rest_api_enabled = '0'
+    Setting.login_required = '0'
+  end
+  
+  # Using the NewsController because it's a simple API.
+  context "get /news" do
+    setup do
+      project = Project.find('onlinestore')
+      EnabledModule.create(:project => project, :name => 'news')
+    end
+
+    context "in :xml format" do
+      should_allow_http_basic_auth_with_username_and_password(:get, "/projects/onlinestore/news.xml")
+    end
+
+    context "in :json format" do
+      should_allow_http_basic_auth_with_username_and_password(:get, "/projects/onlinestore/news.json")
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/http_basic_login_with_api_token_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,27 @@
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::HttpBasicLoginWithApiTokenTest < ActionController::IntegrationTest
+  fixtures :all
+
+  def setup
+    Setting.rest_api_enabled = '1'
+    Setting.login_required = '1'
+  end
+
+  def teardown
+    Setting.rest_api_enabled = '0'
+    Setting.login_required = '0'
+  end
+  
+  # Using the NewsController because it's a simple API.
+  context "get /news" do
+
+    context "in :xml format" do
+      should_allow_http_basic_auth_with_key(:get, "/news.xml")
+    end
+
+    context "in :json format" do
+      should_allow_http_basic_auth_with_key(:get, "/news.json")
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/issues_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,340 @@
+# Redmine - project management software
+# Copyright (C) 2006-2010  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::IssuesTest < ActionController::IntegrationTest
+  fixtures :projects,
+    :users,
+    :roles,
+    :members,
+    :member_roles,
+    :issues,
+    :issue_statuses,
+    :versions,
+    :trackers,
+    :projects_trackers,
+    :issue_categories,
+    :enabled_modules,
+    :enumerations,
+    :attachments,
+    :workflows,
+    :custom_fields,
+    :custom_values,
+    :custom_fields_projects,
+    :custom_fields_trackers,
+    :time_entries,
+    :journals,
+    :journal_details,
+    :queries
+
+  def setup
+    Setting.rest_api_enabled = '1'
+  end
+
+  # Use a private project to make sure auth is really working and not just
+  # only showing public issues.
+  context "/index.xml" do
+    should_allow_api_authentication(:get, "/projects/private-child/issues.xml")
+  end
+
+  context "/index.json" do
+    should_allow_api_authentication(:get, "/projects/private-child/issues.json")
+  end
+
+  context "/index.xml with filter" do
+    should_allow_api_authentication(:get, "/projects/private-child/issues.xml?status_id=5")
+
+    should "show only issues with the status_id" do
+      get '/issues.xml?status_id=5'
+      assert_tag :tag => 'issues',
+                 :children => { :count => Issue.visible.count(:conditions => {:status_id => 5}), 
+                                :only => { :tag => 'issue' } }
+    end
+  end
+
+  context "/index.json with filter" do
+    should_allow_api_authentication(:get, "/projects/private-child/issues.json?status_id=5")
+
+    should "show only issues with the status_id" do
+      get '/issues.json?status_id=5'
+
+      json = ActiveSupport::JSON.decode(response.body)
+      status_ids_used = json.collect {|j| j['status_id'] }
+      assert_equal 3, status_ids_used.length
+      assert status_ids_used.all? {|id| id == 5 }
+    end
+
+  end
+
+  # Issue 6 is on a private project
+  context "/issues/6.xml" do
+    should_allow_api_authentication(:get, "/issues/6.xml")
+  end
+
+  context "/issues/6.json" do
+    should_allow_api_authentication(:get, "/issues/6.json")
+  end
+
+  context "POST /issues.xml" do
+    should_allow_api_authentication(:post,
+                                    '/issues.xml',
+                                    {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}},
+                                    {:success_code => :created})
+
+    should "create an issue with the attributes" do
+      assert_difference('Issue.count') do
+        post '/issues.xml', {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, :authorization => credentials('jsmith')
+      end
+        
+      issue = Issue.first(:order => 'id DESC')
+      assert_equal 1, issue.project_id
+      assert_equal 2, issue.tracker_id
+      assert_equal 3, issue.status_id
+      assert_equal 'API test', issue.subject
+  
+      assert_response :created
+      assert_equal 'application/xml', @response.content_type
+      assert_tag 'issue', :child => {:tag => 'id', :content => issue.id.to_s}
+    end
+  end
+  
+  context "POST /issues.xml with failure" do
+    should_allow_api_authentication(:post,
+                                    '/issues.xml',
+                                    {:issue => {:project_id => 1}},
+                                    {:success_code => :unprocessable_entity})
+
+    should "have an errors tag" do
+      assert_no_difference('Issue.count') do
+        post '/issues.xml', {:issue => {:project_id => 1}}, :authorization => credentials('jsmith')
+      end
+
+      assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
+    end
+  end
+
+  context "POST /issues.json" do
+    should_allow_api_authentication(:post,
+                                    '/issues.json',
+                                    {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}},
+                                    {:success_code => :created})
+
+    should "create an issue with the attributes" do
+      assert_difference('Issue.count') do
+        post '/issues.json', {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, :authorization => credentials('jsmith')
+      end
+        
+      issue = Issue.first(:order => 'id DESC')
+      assert_equal 1, issue.project_id
+      assert_equal 2, issue.tracker_id
+      assert_equal 3, issue.status_id
+      assert_equal 'API test', issue.subject
+    end
+    
+  end
+  
+  context "POST /issues.json with failure" do
+    should_allow_api_authentication(:post,
+                                    '/issues.json',
+                                    {:issue => {:project_id => 1}},
+                                    {:success_code => :unprocessable_entity})
+
+    should "have an errors element" do
+      assert_no_difference('Issue.count') do
+        post '/issues.json', {:issue => {:project_id => 1}}, :authorization => credentials('jsmith')
+      end
+
+      json = ActiveSupport::JSON.decode(response.body)
+      assert_equal "can't be blank", json.first['subject']
+    end
+  end
+
+  # Issue 6 is on a private project
+  context "PUT /issues/6.xml" do
+    setup do
+      @parameters = {:issue => {:subject => 'API update', :notes => 'A new note'}}
+      @headers = { :authorization => credentials('jsmith') }
+    end
+    
+    should_allow_api_authentication(:put,
+                                    '/issues/6.xml',
+                                    {:issue => {:subject => 'API update', :notes => 'A new note'}},
+                                    {:success_code => :ok})
+
+    should "not create a new issue" do
+      assert_no_difference('Issue.count') do
+        put '/issues/6.xml', @parameters, @headers
+      end
+    end
+
+    should "create a new journal" do
+      assert_difference('Journal.count') do
+        put '/issues/6.xml', @parameters, @headers
+      end
+    end
+
+    should "add the note to the journal" do
+      put '/issues/6.xml', @parameters, @headers
+      
+      journal = Journal.last
+      assert_equal "A new note", journal.notes
+    end
+
+    should "update the issue" do
+      put '/issues/6.xml', @parameters, @headers
+      
+      issue = Issue.find(6)
+      assert_equal "API update", issue.subject
+    end
+    
+  end
+  
+  context "PUT /issues/6.xml with failed update" do
+    setup do
+      @parameters = {:issue => {:subject => ''}}
+      @headers = { :authorization => credentials('jsmith') }
+    end
+
+    should_allow_api_authentication(:put,
+                                    '/issues/6.xml',
+                                    {:issue => {:subject => ''}}, # Missing subject should fail
+                                    {:success_code => :unprocessable_entity})
+
+    should "not create a new issue" do
+      assert_no_difference('Issue.count') do
+        put '/issues/6.xml', @parameters, @headers
+      end
+    end
+
+    should "not create a new journal" do
+      assert_no_difference('Journal.count') do
+        put '/issues/6.xml', @parameters, @headers
+      end
+    end
+
+    should "have an errors tag" do
+      put '/issues/6.xml', @parameters, @headers
+
+      assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
+    end
+  end
+
+  context "PUT /issues/6.json" do
+    setup do
+      @parameters = {:issue => {:subject => 'API update', :notes => 'A new note'}}
+      @headers = { :authorization => credentials('jsmith') }
+    end
+    
+    should_allow_api_authentication(:put,
+                                    '/issues/6.json',
+                                    {:issue => {:subject => 'API update', :notes => 'A new note'}},
+                                    {:success_code => :ok})
+
+    should "not create a new issue" do
+      assert_no_difference('Issue.count') do
+        put '/issues/6.json', @parameters, @headers
+      end
+    end
+
+    should "create a new journal" do
+      assert_difference('Journal.count') do
+        put '/issues/6.json', @parameters, @headers
+      end
+    end
+
+    should "add the note to the journal" do
+      put '/issues/6.json', @parameters, @headers
+      
+      journal = Journal.last
+      assert_equal "A new note", journal.notes
+    end
+
+    should "update the issue" do
+      put '/issues/6.json', @parameters, @headers
+      
+      issue = Issue.find(6)
+      assert_equal "API update", issue.subject
+    end
+    
+  end
+  
+  context "PUT /issues/6.json with failed update" do
+    setup do
+      @parameters = {:issue => {:subject => ''}}
+      @headers = { :authorization => credentials('jsmith') }
+    end
+
+    should_allow_api_authentication(:put,
+                                    '/issues/6.json',
+                                    {:issue => {:subject => ''}}, # Missing subject should fail
+                                    {:success_code => :unprocessable_entity})
+
+    should "not create a new issue" do
+      assert_no_difference('Issue.count') do
+        put '/issues/6.json', @parameters, @headers
+      end
+    end
+
+    should "not create a new journal" do
+      assert_no_difference('Journal.count') do
+        put '/issues/6.json', @parameters, @headers
+      end
+    end
+
+    should "have an errors attribute" do
+      put '/issues/6.json', @parameters, @headers
+
+      json = ActiveSupport::JSON.decode(response.body)
+      assert_equal "can't be blank", json.first['subject']
+    end
+  end
+
+  context "DELETE /issues/1.xml" do
+    should_allow_api_authentication(:delete,
+                                    '/issues/6.xml',
+                                    {},
+                                    {:success_code => :ok})
+
+    should "delete the issue" do
+      assert_difference('Issue.count',-1) do
+        delete '/issues/6.xml', {}, :authorization => credentials('jsmith')
+      end
+      
+      assert_nil Issue.find_by_id(6)
+    end
+  end
+
+  context "DELETE /issues/1.json" do
+    should_allow_api_authentication(:delete,
+                                    '/issues/6.json',
+                                    {},
+                                    {:success_code => :ok})
+
+    should "delete the issue" do
+      assert_difference('Issue.count',-1) do
+        delete '/issues/6.json', {}, :authorization => credentials('jsmith')
+      end
+      
+      assert_nil Issue.find_by_id(6)
+    end
+  end
+
+  def credentials(user, password=nil)
+    ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/projects_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,111 @@
+# Redmine - project management software
+# Copyright (C) 2006-2010  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::ProjectsTest < ActionController::IntegrationTest
+  fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
+           :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
+           :attachments, :custom_fields, :custom_values, :time_entries
+
+  def setup
+    Setting.rest_api_enabled = '1'
+  end
+    
+  def test_index
+    get '/projects.xml'
+    assert_response :success
+    assert_equal 'application/xml', @response.content_type
+  end
+    
+  def test_show
+    get '/projects/1.xml'
+    assert_response :success
+    assert_equal 'application/xml', @response.content_type
+    assert_tag 'custom_field', :attributes => {:name => 'Development status'}, :content => 'Stable'
+  end
+    
+  def test_show_should_not_display_hidden_custom_fields
+    ProjectCustomField.find_by_name('Development status').update_attribute :visible, false
+    get '/projects/1.xml'
+    assert_response :success
+    assert_equal 'application/xml', @response.content_type
+    assert_no_tag 'custom_field', :attributes => {:name => 'Development status'}
+  end
+    
+  def test_create
+    attributes = {:name => 'API test', :identifier => 'api-test'}
+    assert_difference 'Project.count' do
+      post '/projects.xml', {:project => attributes}, :authorization => credentials('admin')
+    end
+    
+    project = Project.first(:order => 'id DESC')
+    attributes.each do |attribute, value|
+      assert_equal value, project.send(attribute)
+    end
+
+    assert_response :created
+    assert_equal 'application/xml', @response.content_type
+    assert_tag 'project', :child => {:tag => 'id', :content => project.id.to_s}
+  end
+  
+  def test_create_failure
+    attributes = {:name => 'API test'}
+    assert_no_difference 'Project.count' do
+      post '/projects.xml', {:project => attributes}, :authorization => credentials('admin')
+    end
+    assert_response :unprocessable_entity
+    assert_equal 'application/xml', @response.content_type
+    assert_tag :errors, :child => {:tag => 'error', :content => "Identifier can't be blank"}
+  end
+    
+  def test_update
+    attributes = {:name => 'API update'}
+    assert_no_difference 'Project.count' do
+      put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith')
+    end
+    assert_response :ok
+    assert_equal 'application/xml', @response.content_type
+    project = Project.find(1)
+    attributes.each do |attribute, value|
+      assert_equal value, project.send(attribute)
+    end
+  end
+  
+  def test_update_failure
+    attributes = {:name => ''}
+    assert_no_difference 'Project.count' do
+      put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith')
+    end
+    assert_response :unprocessable_entity
+    assert_equal 'application/xml', @response.content_type
+    assert_tag :errors, :child => {:tag => 'error', :content => "Name can't be blank"}
+  end
+    
+  def test_destroy
+    assert_difference 'Project.count', -1 do
+      delete '/projects/2.xml', {}, :authorization => credentials('admin')
+    end
+    assert_response :ok
+    assert_equal 'application/xml', @response.content_type
+    assert_nil Project.find_by_id(2)
+  end
+  
+  def credentials(user, password=nil)
+    ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/integration/api_test/token_authentication_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,26 @@
+require "#{File.dirname(__FILE__)}/../../test_helper"
+
+class ApiTest::TokenAuthenticationTest < ActionController::IntegrationTest
+  fixtures :all
+
+  def setup
+    Setting.rest_api_enabled = '1'
+    Setting.login_required = '1'
+  end
+
+  def teardown
+    Setting.rest_api_enabled = '0'
+    Setting.login_required = '0'
+  end
+  
+  # Using the NewsController because it's a simple API.
+  context "get /news" do
+    context "in :xml format" do
+      should_allow_key_based_auth(:get, "/news.xml")
+    end
+
+    context "in :json format" do
+      should_allow_key_based_auth(:get, "/news.json")
+    end
+  end
+end
--- a/test/integration/api_token_login_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class ApiTokenLoginTest < ActionController::IntegrationTest
-  fixtures :all
-
-  def setup
-    Setting.rest_api_enabled = '1'
-    Setting.login_required = '1'
-  end
-
-  def teardown
-    Setting.rest_api_enabled = '0'
-    Setting.login_required = '0'
-  end
-  
-  # Using the NewsController because it's a simple API.
-  context "get /news" do
-
-    context "in :xml format" do
-      context "with a valid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          get "/news.xml?key=#{@token.value}"
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :xml
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'feeds')
-          get "/news.xml?key=#{@token.value}"
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-
-    context "in :json format" do
-      context "with a valid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          get "/news.json?key=#{@token.value}"
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :json
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'feeds')
-          get "/news.json?key=#{@token.value}"
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-    
-  end
-end
--- a/test/integration/disabled_rest_api_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class DisabledRestApi < ActionController::IntegrationTest
-  fixtures :all
-
-  def setup
-    Setting.rest_api_enabled = '0'
-    Setting.login_required = '1'
-  end
-
-  def teardown
-    Setting.rest_api_enabled = '1'
-    Setting.login_required = '0'
-  end
-  
-  # Using the NewsController because it's a simple API.
-  context "get /news with the API disabled" do
-
-    context "in :xml format" do
-      context "with a valid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          get "/news.xml?key=#{@token.value}"
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-
-      context "with a valid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-
-      context "with a valid HTTP authentication using the API token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-
-    context "in :json format" do
-      context "with a valid api token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          get "/news.json?key=#{@token.value}"
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-
-      context "with a valid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
-          get "/news.json", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-
-      context "with a valid HTTP authentication using the API token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter')
-          get "/news.json", nil, :authorization => @authorization
-        end
-
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-      
-    end    
-  end
-end
--- a/test/integration/http_basic_login_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class HttpBasicLoginTest < ActionController::IntegrationTest
-  fixtures :all
-
-  def setup
-    Setting.rest_api_enabled = '1'
-    Setting.login_required = '1'
-  end
-
-  def teardown
-    Setting.rest_api_enabled = '0'
-    Setting.login_required = '0'
-  end
-  
-  # Using the NewsController because it's a simple API.
-  context "get /news" do
-
-    context "in :xml format" do
-      context "with a valid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :xml
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-      
-      context "without credentials" do
-        setup do
-          get "/projects/onlinestore/news.xml"
-        end
-
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "include_www_authenticate_header" do
-          assert @controller.response.headers.has_key?('WWW-Authenticate')
-        end
-      end
-    end
-
-    context "in :json format" do
-      context "with a valid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
-          get "/news.json", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :json
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password')
-          get "/news.json", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-    
-    context "without credentials" do
-      setup do
-        get "/projects/onlinestore/news.json"
-      end
-
-      should_respond_with :unauthorized
-      should_respond_with_content_type :json
-      should "include_www_authenticate_header" do
-        assert @controller.response.headers.has_key?('WWW-Authenticate')
-      end
-    end
-  end
-end
--- a/test/integration/http_basic_login_with_api_token_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class HttpBasicLoginWithApiTokenTest < ActionController::IntegrationTest
-  fixtures :all
-
-  def setup
-    Setting.rest_api_enabled = '1'
-    Setting.login_required = '1'
-  end
-
-  def teardown
-    Setting.rest_api_enabled = '0'
-    Setting.login_required = '0'
-  end
-  
-  # Using the NewsController because it's a simple API.
-  context "get /news" do
-
-    context "in :xml format" do
-      context "with a valid HTTP authentication using the API token" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :xml
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'feeds')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
-          get "/news.xml", nil, :authorization => @authorization
-        end
-
-        should_respond_with :unauthorized
-        should_respond_with_content_type :xml
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-
-    context "in :json format" do
-      context "with a valid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'api')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter')
-          get "/news.json", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :success
-        should_respond_with_content_type :json
-        should "login as the user" do
-          assert_equal @user, User.current
-        end
-      end
-
-      context "with an invalid HTTP authentication" do
-        setup do
-          @user = User.generate_with_protected!
-          @token = Token.generate!(:user => @user, :action => 'feeds')
-          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter')
-          get "/news.json", nil, :authorization => @authorization
-        end
-        
-        should_respond_with :unauthorized
-        should_respond_with_content_type :json
-        should "not login as the user" do
-          assert_equal User.anonymous, User.current
-        end
-      end
-    end
-    
-  end
-end
--- a/test/integration/issues_api_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +0,0 @@
-# Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class IssuesApiTest < ActionController::IntegrationTest
-  fixtures :projects,
-    :users,
-    :roles,
-    :members,
-    :member_roles,
-    :issues,
-    :issue_statuses,
-    :versions,
-    :trackers,
-    :projects_trackers,
-    :issue_categories,
-    :enabled_modules,
-    :enumerations,
-    :attachments,
-    :workflows,
-    :custom_fields,
-    :custom_values,
-    :custom_fields_projects,
-    :custom_fields_trackers,
-    :time_entries,
-    :journals,
-    :journal_details,
-    :queries
-
-  def setup
-    Setting.rest_api_enabled = '1'
-  end
-
-  context "/index.xml" do
-    setup do
-      get '/issues.xml'
-    end
-
-    should_respond_with :success
-    should_respond_with_content_type 'application/xml'
-  end
-
-  context "/index.json" do
-    setup do
-      get '/issues.json'
-    end
-
-    should_respond_with :success
-    should_respond_with_content_type 'application/json'
-
-    should 'return a valid JSON string' do
-      assert ActiveSupport::JSON.decode(response.body)
-    end
-  end
-
-  context "/index.xml with filter" do
-    setup do
-      get '/issues.xml?status_id=5'
-    end
-    
-    should_respond_with :success
-    should_respond_with_content_type 'application/xml'
-    should "show only issues with the status_id" do
-      assert_tag :tag => 'issues',
-                 :children => { :count => Issue.visible.count(:conditions => {:status_id => 5}), 
-                                :only => { :tag => 'issue' } }
-    end
-  end
-
-  context "/index.json with filter" do
-    setup do
-      get '/issues.json?status_id=5'
-    end
-
-    should_respond_with :success
-    should_respond_with_content_type 'application/json'
-
-    should 'return a valid JSON string' do
-      assert ActiveSupport::JSON.decode(response.body)
-    end
-
-    should "show only issues with the status_id" do
-      json = ActiveSupport::JSON.decode(response.body)
-      status_ids_used = json.collect {|j| j['status_id'] }
-      assert_equal 3, status_ids_used.length
-      assert status_ids_used.all? {|id| id == 5 }
-    end
-
-  end
-
-  context "/issues/1.xml" do
-    setup do
-      get '/issues/1.xml'
-    end
-    
-    should_respond_with :success
-    should_respond_with_content_type 'application/xml'
-  end
-
-  context "/issues/1.json" do
-    setup do
-      get '/issues/1.json'
-    end
-    
-    should_respond_with :success
-    should_respond_with_content_type 'application/json'
-
-    should 'return a valid JSON string' do
-      assert ActiveSupport::JSON.decode(response.body)
-    end
-  end
-
-  context "POST /issues.xml" do
-    setup do
-      @issue_count = Issue.count
-      @attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}
-      post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :created
-    should_respond_with_content_type 'application/xml'
-
-    should "create an issue with the attributes" do
-      assert_equal Issue.count, @issue_count + 1
-
-      issue = Issue.first(:order => 'id DESC')
-      @attributes.each do |attribute, value|
-        assert_equal value, issue.send(attribute)
-      end
-    end
-  end
-  
-  context "POST /issues.xml with failure" do
-    setup do
-      @attributes = {:project_id => 1}
-      post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :unprocessable_entity
-    should_respond_with_content_type 'application/xml'
-
-    should "have an errors tag" do
-      assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
-    end
-  end
-
-  context "POST /issues.json" do
-    setup do
-      @issue_count = Issue.count
-      @attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}
-      post '/issues.json', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :created
-    should_respond_with_content_type 'application/json'
-
-    should "create an issue with the attributes" do
-      assert_equal Issue.count, @issue_count + 1
-
-      issue = Issue.first(:order => 'id DESC')
-      @attributes.each do |attribute, value|
-        assert_equal value, issue.send(attribute)
-      end
-    end
-  end
-  
-  context "POST /issues.json with failure" do
-    setup do
-      @attributes = {:project_id => 1}
-      post '/issues.json', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :unprocessable_entity
-    should_respond_with_content_type 'application/json'
-
-    should "have an errors element" do
-      json = ActiveSupport::JSON.decode(response.body)
-      assert_equal "can't be blank", json.first['subject']
-    end
-  end
-
-  context "PUT /issues/1.xml" do
-    setup do
-      @issue_count = Issue.count
-      @journal_count = Journal.count
-      @attributes = {:subject => 'API update', :notes => 'A new note'}
-
-      put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-    
-    should_respond_with :ok
-    should_respond_with_content_type 'application/xml'
-
-    should "not create a new issue" do
-      assert_equal Issue.count, @issue_count
-    end
-
-    should "create a new journal" do
-      assert_equal Journal.count, @journal_count + 1
-    end
-
-    should "add the note to the journal" do
-      journal = Journal.last
-      assert_equal "A new note", journal.notes
-    end
-
-    should "update the issue" do
-      issue = Issue.find(1)
-      @attributes.each do |attribute, value|
-        assert_equal value, issue.send(attribute) unless attribute == :notes
-      end
-    end
-    
-  end
-  
-  context "PUT /issues/1.xml with failed update" do
-    setup do
-      @attributes = {:subject => ''}
-      @issue_count = Issue.count
-      @journal_count = Journal.count
-
-      put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-    
-    should_respond_with :unprocessable_entity
-    should_respond_with_content_type 'application/xml'
-  
-    should "not create a new issue" do
-      assert_equal Issue.count, @issue_count
-    end
-
-    should "not create a new journal" do
-      assert_equal Journal.count, @journal_count
-    end
-
-    should "have an errors tag" do
-      assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
-    end
-  end
-
-  context "PUT /issues/1.json" do
-    setup do
-      @issue_count = Issue.count
-      @journal_count = Journal.count
-      @attributes = {:subject => 'API update', :notes => 'A new note'}
-
-      put '/issues/1.json', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-    
-    should_respond_with :ok
-    should_respond_with_content_type 'application/json'
-
-    should "not create a new issue" do
-      assert_equal Issue.count, @issue_count
-    end
-
-    should "create a new journal" do
-      assert_equal Journal.count, @journal_count + 1
-    end
-
-    should "add the note to the journal" do
-      journal = Journal.last
-      assert_equal "A new note", journal.notes
-    end
-
-    should "update the issue" do
-      issue = Issue.find(1)
-      @attributes.each do |attribute, value|
-        assert_equal value, issue.send(attribute) unless attribute == :notes
-      end
-    end
-
-  end
-  
-  context "PUT /issues/1.json with failed update" do
-    setup do
-      @attributes = {:subject => ''}
-      @issue_count = Issue.count
-      @journal_count = Journal.count
-
-      put '/issues/1.json', {:issue => @attributes}, :authorization => credentials('jsmith')
-    end
-    
-    should_respond_with :unprocessable_entity
-    should_respond_with_content_type 'application/json'
-  
-    should "not create a new issue" do
-      assert_equal Issue.count, @issue_count
-    end
-
-    should "not create a new journal" do
-      assert_equal Journal.count, @journal_count
-    end
-
-    should "have an errors attribute" do
-      json = ActiveSupport::JSON.decode(response.body)
-      assert_equal "can't be blank", json.first['subject']
-    end
-  end
-
-  context "DELETE /issues/1.xml" do
-    setup do
-      @issue_count = Issue.count
-      delete '/issues/1.xml', {}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :ok
-    should_respond_with_content_type 'application/xml'
-
-    should "delete the issue" do
-      assert_equal Issue.count, @issue_count -1
-      assert_nil Issue.find_by_id(1)
-    end
-  end
-
-  context "DELETE /issues/1.json" do
-    setup do
-      @issue_count = Issue.count
-      delete '/issues/1.json', {}, :authorization => credentials('jsmith')
-    end
-
-    should_respond_with :ok
-    should_respond_with_content_type 'application/json'
-
-    should "delete the issue" do
-      assert_equal Issue.count, @issue_count -1
-      assert_nil Issue.find_by_id(1)
-    end
-  end
-
-  def credentials(user, password=nil)
-    ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)
-  end
-end
--- a/test/integration/issues_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/issues_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -72,7 +72,7 @@
     put 'issues/1',
          :notes => 'Some notes',
          :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain'), 'description' => 'This is an attachment'}}
-    assert_redirected_to "issues/1"
+    assert_redirected_to "/issues/1"
     
     # make sure attachment was saved
     attachment = Issue.find(1).attachments.find_by_filename("testfile.txt")
--- a/test/integration/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/integration/lib
 http://redmine.rubyforge.org/svn
 
--- a/test/integration/lib/redmine/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/lib/redmine/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/integration/lib/redmine
 http://redmine.rubyforge.org/svn
 
--- a/test/integration/projects_api_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-# Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-class ProjectsApiTest < ActionController::IntegrationTest
-  fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
-           :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
-           :attachments, :custom_fields, :custom_values, :time_entries
-
-  def setup
-    Setting.rest_api_enabled = '1'
-  end
-    
-  def test_index
-    get '/projects.xml'
-    assert_response :success
-    assert_equal 'application/xml', @response.content_type
-  end
-    
-  def test_show
-    get '/projects/1.xml'
-    assert_response :success
-    assert_equal 'application/xml', @response.content_type
-  end
-    
-  def test_create
-    attributes = {:name => 'API test', :identifier => 'api-test'}
-    assert_difference 'Project.count' do
-      post '/projects.xml', {:project => attributes}, :authorization => credentials('admin')
-    end
-    assert_response :created
-    assert_equal 'application/xml', @response.content_type
-    project = Project.first(:order => 'id DESC')
-    attributes.each do |attribute, value|
-      assert_equal value, project.send(attribute)
-    end
-  end
-  
-  def test_create_failure
-    attributes = {:name => 'API test'}
-    assert_no_difference 'Project.count' do
-      post '/projects.xml', {:project => attributes}, :authorization => credentials('admin')
-    end
-    assert_response :unprocessable_entity
-    assert_equal 'application/xml', @response.content_type
-    assert_tag :errors, :child => {:tag => 'error', :content => "Identifier can't be blank"}
-  end
-    
-  def test_update
-    attributes = {:name => 'API update'}
-    assert_no_difference 'Project.count' do
-      put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith')
-    end
-    assert_response :ok
-    assert_equal 'application/xml', @response.content_type
-    project = Project.find(1)
-    attributes.each do |attribute, value|
-      assert_equal value, project.send(attribute)
-    end
-  end
-  
-  def test_update_failure
-    attributes = {:name => ''}
-    assert_no_difference 'Project.count' do
-      put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith')
-    end
-    assert_response :unprocessable_entity
-    assert_equal 'application/xml', @response.content_type
-    assert_tag :errors, :child => {:tag => 'error', :content => "Name can't be blank"}
-  end
-    
-  def test_destroy
-    assert_difference 'Project.count', -1 do
-      delete '/projects/2.xml', {}, :authorization => credentials('admin')
-    end
-    assert_response :ok
-    assert_equal 'application/xml', @response.content_type
-    assert_nil Project.find_by_id(2)
-  end
-  
-  def credentials(user, password=nil)
-    ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)
-  end
-end
--- a/test/integration/projects_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/projects_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -27,7 +27,7 @@
     assert_response :success
     assert_template "admin/projects"
     post "projects/archive", :id => 1
-    assert_redirected_to "admin/projects"
+    assert_redirected_to "/admin/projects"
     assert !Project.find(1).active?
     
     get 'projects/1'
@@ -36,7 +36,7 @@
     assert_response 403
     
     post "projects/unarchive", :id => 1
-    assert_redirected_to "admin/projects"
+    assert_redirected_to "/admin/projects"
     assert Project.find(1).active?
     get "projects/1"
     assert_response :success
--- a/test/integration/routing_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/integration/routing_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -157,13 +157,14 @@
     should_route :get, "/projects/567/news/new", :controller => 'news', :action => 'new', :project_id => '567'
     should_route :get, "/news/234", :controller => 'news', :action => 'show', :id => '234'
     should_route :get, "/news/567/edit", :controller => 'news', :action => 'edit', :id => '567'
+    should_route :get, "/news/preview", :controller => 'previews', :action => 'news'
+    
+    should_route :post, "/projects/567/news", :controller => 'news', :action => 'create', :project_id => '567'
+    should_route :post, "/news/567/comments", :controller => 'comments', :action => 'create', :id => '567'
 
-    should_route :post, "/projects/567/news", :controller => 'news', :action => 'create', :project_id => '567'
-    should_route :post, "/news/567/destroy", :controller => 'news', :action => 'destroy', :id => '567'
-    should_route :post, "/news/567/comments", :controller => 'comments', :action => 'create', :id => '567'
-    
-    should_route :put, "/news/567/edit", :controller => 'news', :action => 'update', :id => '567'
+    should_route :put, "/news/567", :controller => 'news', :action => 'update', :id => '567'
 
+    should_route :delete, "/news/567", :controller => 'news', :action => 'destroy', :id => '567'
     should_route :delete, "/news/567/comments/15", :controller => 'comments', :action => 'destroy', :id => '567', :comment_id => '15'
   end
 
@@ -220,40 +221,81 @@
     should_route :post, "/projects/redmine/repository/edit", :controller => 'repositories', :action => 'edit', :id => 'redmine'
   end
 
-  context "timelogs" do
-    should_route :get, "/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :issue_id => '567'
-    should_route :get, "/projects/ecookbook/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook'
-    should_route :get, "/projects/ecookbook/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook', :issue_id => '567'
+  context "timelogs (global)" do
+    should_route :get, "/time_entries", :controller => 'timelog', :action => 'index'
+    should_route :get, "/time_entries.csv", :controller => 'timelog', :action => 'index', :format => 'csv'
+    should_route :get, "/time_entries.atom", :controller => 'timelog', :action => 'index', :format => 'atom'
+    should_route :get, "/time_entries/new", :controller => 'timelog', :action => 'new'
     should_route :get, "/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22'
-    should_route :get, "/time_entries/report", :controller => 'timelog', :action => 'report'
-    should_route :get, "/projects/567/time_entries/report", :controller => 'timelog', :action => 'report', :project_id => '567'
-    should_route :get, "/projects/567/time_entries/report.csv", :controller => 'timelog', :action => 'report', :project_id => '567', :format => 'csv'
-    should_route :get, "/time_entries", :controller => 'timelog', :action => 'details'
-    should_route :get, "/time_entries.csv", :controller => 'timelog', :action => 'details', :format => 'csv'
-    should_route :get, "/time_entries.atom", :controller => 'timelog', :action => 'details', :format => 'atom'
-    should_route :get, "/projects/567/time_entries", :controller => 'timelog', :action => 'details', :project_id => '567'
-    should_route :get, "/projects/567/time_entries.csv", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'csv'
-    should_route :get, "/projects/567/time_entries.atom", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'atom'
-    should_route :get, "/issues/234/time_entries", :controller => 'timelog', :action => 'details', :issue_id => '234'
-    should_route :get, "/issues/234/time_entries.csv", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'csv'
-    should_route :get, "/issues/234/time_entries.atom", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'atom'
-    should_route :get, "/projects/ecookbook/issues/123/time_entries", :controller => 'timelog', :action => 'details', :project_id => 'ecookbook', :issue_id => '123'
 
-    should_route :post, "/time_entries/55/destroy", :controller => 'timelog', :action => 'destroy', :id => '55'
+    should_route :post, "/time_entries", :controller => 'timelog', :action => 'create'
+
+    should_route :put, "/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22'
+
+    should_route :delete, "/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55'
+  end
+
+  context "timelogs (scoped under project)" do
+    should_route :get, "/projects/567/time_entries", :controller => 'timelog', :action => 'index', :project_id => '567'
+    should_route :get, "/projects/567/time_entries.csv", :controller => 'timelog', :action => 'index', :project_id => '567', :format => 'csv'
+    should_route :get, "/projects/567/time_entries.atom", :controller => 'timelog', :action => 'index', :project_id => '567', :format => 'atom'
+    should_route :get, "/projects/567/time_entries/new", :controller => 'timelog', :action => 'new', :project_id => '567'
+    should_route :get, "/projects/567/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :project_id => '567'
+
+    should_route :post, "/projects/567/time_entries", :controller => 'timelog', :action => 'create', :project_id => '567'
+
+    should_route :put, "/projects/567/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :project_id => '567'
+
+    should_route :delete, "/projects/567/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :project_id => '567'
+  end
+
+  context "timelogs (scoped under issues)" do
+    should_route :get, "/issues/234/time_entries", :controller => 'timelog', :action => 'index', :issue_id => '234'
+    should_route :get, "/issues/234/time_entries.csv", :controller => 'timelog', :action => 'index', :issue_id => '234', :format => 'csv'
+    should_route :get, "/issues/234/time_entries.atom", :controller => 'timelog', :action => 'index', :issue_id => '234', :format => 'atom'
+    should_route :get, "/issues/234/time_entries/new", :controller => 'timelog', :action => 'new', :issue_id => '234'
+    should_route :get, "/issues/234/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :issue_id => '234'
+
+    should_route :post, "/issues/234/time_entries", :controller => 'timelog', :action => 'create', :issue_id => '234'
+
+    should_route :put, "/issues/234/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :issue_id => '234'
+
+    should_route :delete, "/issues/234/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :issue_id => '234'
+  end
+
+  context "timelogs (scoped under project and issues)" do
+    should_route :get, "/projects/ecookbook/issues/234/time_entries", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook'
+    should_route :get, "/projects/ecookbook/issues/234/time_entries.csv", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook', :format => 'csv'
+    should_route :get, "/projects/ecookbook/issues/234/time_entries.atom", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook', :format => 'atom'
+    should_route :get, "/projects/ecookbook/issues/234/time_entries/new", :controller => 'timelog', :action => 'new', :issue_id => '234', :project_id => 'ecookbook'
+    should_route :get, "/projects/ecookbook/issues/234/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :issue_id => '234', :project_id => 'ecookbook'
+
+    should_route :post, "/projects/ecookbook/issues/234/time_entries", :controller => 'timelog', :action => 'create', :issue_id => '234', :project_id => 'ecookbook'
+
+    should_route :put, "/projects/ecookbook/issues/234/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :issue_id => '234', :project_id => 'ecookbook'
+
+    should_route :delete, "/projects/ecookbook/issues/234/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :issue_id => '234', :project_id => 'ecookbook'
+  end
+
+  context "time_entry_reports" do
+    should_route :get, "/time_entries/report", :controller => 'time_entry_reports', :action => 'report'
+    should_route :get, "/projects/567/time_entries/report", :controller => 'time_entry_reports', :action => 'report', :project_id => '567'
+    should_route :get, "/projects/567/time_entries/report.csv", :controller => 'time_entry_reports', :action => 'report', :project_id => '567', :format => 'csv'
   end
 
   context "users" do
     should_route :get, "/users", :controller => 'users', :action => 'index'
     should_route :get, "/users/44", :controller => 'users', :action => 'show', :id => '44'
-    should_route :get, "/users/new", :controller => 'users', :action => 'add'
+    should_route :get, "/users/new", :controller => 'users', :action => 'new'
     should_route :get, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444'
     should_route :get, "/users/222/edit/membership", :controller => 'users', :action => 'edit', :id => '222', :tab => 'membership'
 
-    should_route :post, "/users/new", :controller => 'users', :action => 'add'
-    should_route :post, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444'
+    should_route :post, "/users", :controller => 'users', :action => 'create'
     should_route :post, "/users/123/memberships", :controller => 'users', :action => 'edit_membership', :id => '123'
     should_route :post, "/users/123/memberships/55", :controller => 'users', :action => 'edit_membership', :id => '123', :membership_id => '55'
     should_route :post, "/users/567/memberships/12/destroy", :controller => 'users', :action => 'destroy_membership', :id => '567', :membership_id => '12'
+
+    should_route :put, "/users/444", :controller => 'users', :action => 'update', :id => '444'
   end
 
   # TODO: should they all be scoped under /projects/:project_id ?
@@ -269,23 +311,27 @@
   end
 
   context "wiki (singular, project's pages)" do
-    should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'index', :id => '567'
-    should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'index', :id => '567', :page => 'lalala'
-    should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page'
-    should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :id => '1', :page => 'CookBook_documentation'
-    should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :id => '1', :page => 'CookBook_documentation', :version => '2', :version_from => '1'
-    should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :id => '1', :page => 'CookBook_documentation', :version => '2'
-    should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida'
-    should_route :get, "/projects/567/wiki/page_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'page_index'
-    should_route :get, "/projects/567/wiki/Page_Index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'Page_Index'
-    should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'date_index'
-    should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'special', :id => '567', :page => 'export'
+    should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'show', :project_id => '567'
+    should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'show', :project_id => '567', :id => 'lalala'
+    should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :project_id => '567', :id => 'my_page'
+    should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :project_id => '1', :id => 'CookBook_documentation'
+    should_route :get, "/projects/1/wiki/CookBook_documentation/diff", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation'
+    should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation', :version => '2'
+    should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation', :version => '2', :version_from => '1'
+    should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :project_id => '1', :id => 'CookBook_documentation', :version => '2'
+    should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :id => 'ladida'
+    should_route :get, "/projects/567/wiki/index", :controller => 'wiki', :action => 'index', :project_id => '567'
+    should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'date_index', :project_id => '567'
+    should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'export', :project_id => '567'
     
-    should_route :post, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page'
-    should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :id => '567', :page => 'CookBook_documentation'
-    should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida'
-    should_route :post, "/projects/22/wiki/ladida/destroy", :controller => 'wiki', :action => 'destroy', :id => '22', :page => 'ladida'
-    should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :id => '22', :page => 'ladida'
+    should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :project_id => '567', :id => 'CookBook_documentation'
+    should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :id => 'ladida'
+    should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :project_id => '22', :id => 'ladida'
+    should_route :post, "/projects/22/wiki/ladida/add_attachment", :controller => 'wiki', :action => 'add_attachment', :project_id => '22', :id => 'ladida'
+
+    should_route :put, "/projects/567/wiki/my_page", :controller => 'wiki', :action => 'update', :project_id => '567', :id => 'my_page'
+
+    should_route :delete, "/projects/22/wiki/ladida", :controller => 'wiki', :action => 'destroy', :project_id => '22', :id => 'ladida'
   end
 
   context "wikis (plural, admin setup)" do
--- a/test/mocks/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/mocks/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/mocks
 http://redmine.rubyforge.org/svn
 
--- a/test/mocks/development/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/mocks/development/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/mocks/development
 http://redmine.rubyforge.org/svn
 
--- a/test/mocks/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/mocks/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/mocks/test
 http://redmine.rubyforge.org/svn
 
--- a/test/test_helper.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/test_helper.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -113,11 +113,15 @@
   def self.repository_configured?(vendor)
     File.directory?(repository_path(vendor))
   end
+  
+  def assert_error_tag(options={})
+    assert_tag({:tag => 'p', :attributes => { :id => 'errorExplanation' }}.merge(options))
+  end
 
   # Shoulda macros
   def self.should_render_404
     should_respond_with :not_found
-    should_render_template 'common/404'
+    should_render_template 'common/error'
   end
 
   def self.should_have_before_filter(expected_method, options = {})
@@ -181,4 +185,236 @@
       assert !user.new_record?
     end
   end
+
+  # Test that a request allows the three types of API authentication
+  #
+  # * HTTP Basic with username and password
+  # * HTTP Basic with an api key for the username
+  # * Key based with the key=X parameter
+  #
+  # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete)
+  # @param [String] url the request url
+  # @param [optional, Hash] parameters additional request parameters
+  # @param [optional, Hash] options additional options
+  # @option options [Symbol] :success_code Successful response code (:success)
+  # @option options [Symbol] :failure_code Failure response code (:unauthorized)
+  def self.should_allow_api_authentication(http_method, url, parameters={}, options={})
+    should_allow_http_basic_auth_with_username_and_password(http_method, url, parameters, options)
+    should_allow_http_basic_auth_with_key(http_method, url, parameters, options)
+    should_allow_key_based_auth(http_method, url, parameters, options)
+  end
+
+  # Test that a request allows the username and password for HTTP BASIC
+  #
+  # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete)
+  # @param [String] url the request url
+  # @param [optional, Hash] parameters additional request parameters
+  # @param [optional, Hash] options additional options
+  # @option options [Symbol] :success_code Successful response code (:success)
+  # @option options [Symbol] :failure_code Failure response code (:unauthorized)
+  def self.should_allow_http_basic_auth_with_username_and_password(http_method, url, parameters={}, options={})
+    success_code = options[:success_code] || :success
+    failure_code = options[:failure_code] || :unauthorized
+    
+    context "should allow http basic auth using a username and password for #{http_method} #{url}" do
+      context "with a valid HTTP authentication" do
+        setup do
+          @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password', :admin => true) # Admin so they can access the project
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
+          send(http_method, url, parameters, {:authorization => @authorization})
+        end
+        
+        should_respond_with success_code
+        should_respond_with_content_type_based_on_url(url)
+        should "login as the user" do
+          assert_equal @user, User.current
+        end
+      end
+
+      context "with an invalid HTTP authentication" do
+        setup do
+          @user = User.generate_with_protected!
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password')
+          send(http_method, url, parameters, {:authorization => @authorization})
+        end
+        
+        should_respond_with failure_code
+        should_respond_with_content_type_based_on_url(url)
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+      
+      context "without credentials" do
+        setup do
+          send(http_method, url, parameters, {:authorization => ''})
+        end
+
+        should_respond_with failure_code
+        should_respond_with_content_type_based_on_url(url)
+        should "include_www_authenticate_header" do
+          assert @controller.response.headers.has_key?('WWW-Authenticate')
+        end
+      end
+    end
+
+  end
+
+  # Test that a request allows the API key with HTTP BASIC
+  #
+  # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete)
+  # @param [String] url the request url
+  # @param [optional, Hash] parameters additional request parameters
+  # @param [optional, Hash] options additional options
+  # @option options [Symbol] :success_code Successful response code (:success)
+  # @option options [Symbol] :failure_code Failure response code (:unauthorized)
+  def self.should_allow_http_basic_auth_with_key(http_method, url, parameters={}, options={})
+    success_code = options[:success_code] || :success
+    failure_code = options[:failure_code] || :unauthorized
+
+    context "should allow http basic auth with a key for #{http_method} #{url}" do
+      context "with a valid HTTP authentication using the API token" do
+        setup do
+          @user = User.generate_with_protected!(:admin => true)
+          @token = Token.generate!(:user => @user, :action => 'api')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
+          send(http_method, url, parameters, {:authorization => @authorization})
+        end
+        
+        should_respond_with success_code
+        should_respond_with_content_type_based_on_url(url)
+        should_be_a_valid_response_string_based_on_url(url)
+        should "login as the user" do
+          assert_equal @user, User.current
+        end
+      end
+
+      context "with an invalid HTTP authentication" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'feeds')
+          @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
+          send(http_method, url, parameters, {:authorization => @authorization})
+        end
+
+        should_respond_with failure_code
+        should_respond_with_content_type_based_on_url(url)
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+    end
+  end
+  
+  # Test that a request allows full key authentication
+  #
+  # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete)
+  # @param [String] url the request url, without the key=ZXY parameter
+  # @param [optional, Hash] parameters additional request parameters
+  # @param [optional, Hash] options additional options
+  # @option options [Symbol] :success_code Successful response code (:success)
+  # @option options [Symbol] :failure_code Failure response code (:unauthorized)
+  def self.should_allow_key_based_auth(http_method, url, parameters={}, options={})
+    success_code = options[:success_code] || :success
+    failure_code = options[:failure_code] || :unauthorized
+
+    context "should allow key based auth using key=X for #{http_method} #{url}" do
+      context "with a valid api token" do
+        setup do
+          @user = User.generate_with_protected!(:admin => true)
+          @token = Token.generate!(:user => @user, :action => 'api')
+          # Simple url parse to add on ?key= or &key=
+          request_url = if url.match(/\?/)
+                          url + "&key=#{@token.value}"
+                        else
+                          url + "?key=#{@token.value}"
+                        end
+          send(http_method, request_url, parameters)
+        end
+        
+        should_respond_with success_code
+        should_respond_with_content_type_based_on_url(url)
+        should_be_a_valid_response_string_based_on_url(url)
+        should "login as the user" do
+          assert_equal @user, User.current
+        end
+      end
+
+      context "with an invalid api token" do
+        setup do
+          @user = User.generate_with_protected!
+          @token = Token.generate!(:user => @user, :action => 'feeds')
+          # Simple url parse to add on ?key= or &key=
+          request_url = if url.match(/\?/)
+                          url + "&key=#{@token.value}"
+                        else
+                          url + "?key=#{@token.value}"
+                        end
+          send(http_method, request_url, parameters)
+        end
+        
+        should_respond_with failure_code
+        should_respond_with_content_type_based_on_url(url)
+        should "not login as the user" do
+          assert_equal User.anonymous, User.current
+        end
+      end
+    end
+    
+  end
+
+  # Uses should_respond_with_content_type based on what's in the url:
+  #
+  # '/project/issues.xml' => should_respond_with_content_type :xml
+  # '/project/issues.json' => should_respond_with_content_type :json
+  #
+  # @param [String] url Request
+  def self.should_respond_with_content_type_based_on_url(url)
+    case
+    when url.match(/xml/i)
+      should_respond_with_content_type :xml
+    when url.match(/json/i)
+      should_respond_with_content_type :json
+    else
+      raise "Unknown content type for should_respond_with_content_type_based_on_url: #{url}"
+    end
+    
+  end
+
+  # Uses the url to assert which format the response should be in
+  #
+  # '/project/issues.xml' => should_be_a_valid_xml_string
+  # '/project/issues.json' => should_be_a_valid_json_string
+  #
+  # @param [String] url Request
+  def self.should_be_a_valid_response_string_based_on_url(url)
+    case
+    when url.match(/xml/i)
+      should_be_a_valid_xml_string
+    when url.match(/json/i)
+      should_be_a_valid_json_string
+    else
+      raise "Unknown content type for should_be_a_valid_response_based_on_url: #{url}"
+    end
+    
+  end
+  
+  # Checks that the response is a valid JSON string
+  def self.should_be_a_valid_json_string
+    should "be a valid JSON string (or empty)" do
+      assert (response.body.blank? || ActiveSupport::JSON.decode(response.body))
+    end
+  end
+
+  # Checks that the response is a valid XML string
+  def self.should_be_a_valid_xml_string
+    should "be a valid XML string" do
+      assert REXML::Document.new(response.body)
+    end
+  end
+  
 end
+
+# Simple module to "namespace" all of the API tests
+module ApiTest
+end
--- a/test/unit/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 34
-/svn/!svn/ver/4167/trunk/test/unit
+/svn/!svn/ver/4408/trunk/test/unit
 END
 document_test.rb
 K 25
@@ -19,7 +19,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/3828/trunk/test/unit/repository_git_test.rb
+/svn/!svn/ver/4189/trunk/test/unit/repository_git_test.rb
 END
 repository_mercurial_test.rb
 K 25
@@ -55,7 +55,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/4072/trunk/test/unit/issue_test.rb
+/svn/!svn/ver/4408/trunk/test/unit/issue_test.rb
 END
 issue_status_test.rb
 K 25
@@ -87,18 +87,18 @@
 V 60
 /svn/!svn/ver/2887/trunk/test/unit/repository_bazaar_test.rb
 END
+role_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/3363/trunk/test/unit/role_test.rb
+END
 changeset_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 52
 /svn/!svn/ver/3466/trunk/test/unit/changeset_test.rb
 END
-role_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/3363/trunk/test/unit/role_test.rb
-END
 comment_test.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -139,7 +139,19 @@
 K 25
 svn:wc:ra_dav:version-url
 V 47
-/svn/!svn/ver/4058/trunk/test/unit/user_test.rb
+/svn/!svn/ver/4233/trunk/test/unit/user_test.rb
+END
+mail_handler_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/4404/trunk/test/unit/mail_handler_test.rb
+END
+repository_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/4221/trunk/test/unit/repository_test.rb
 END
 time_entry_test.rb
 K 25
@@ -147,17 +159,11 @@
 V 53
 /svn/!svn/ver/4087/trunk/test/unit/time_entry_test.rb
 END
-repository_test.rb
+principal_test.rb
 K 25
 svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/2895/trunk/test/unit/repository_test.rb
-END
-mail_handler_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/3801/trunk/test/unit/mail_handler_test.rb
+V 52
+/svn/!svn/ver/3152/trunk/test/unit/principal_test.rb
 END
 auth_source_ldap_test.rb
 K 25
@@ -165,11 +171,17 @@
 V 59
 /svn/!svn/ver/3492/trunk/test/unit/auth_source_ldap_test.rb
 END
-principal_test.rb
+journal_observer_test.rb
 K 25
 svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/3152/trunk/test/unit/principal_test.rb
+V 59
+/svn/!svn/ver/4221/trunk/test/unit/journal_observer_test.rb
+END
+project_nested_set_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/3354/trunk/test/unit/project_nested_set_test.rb
 END
 repository_filesystem_test.rb
 K 25
@@ -177,12 +189,6 @@
 V 64
 /svn/!svn/ver/2887/trunk/test/unit/repository_filesystem_test.rb
 END
-project_nested_set_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/3354/trunk/test/unit/project_nested_set_test.rb
-END
 wiki_redirect_test.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -271,7 +277,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/4106/trunk/test/unit/query_test.rb
+/svn/!svn/ver/4260/trunk/test/unit/query_test.rb
 END
 search_test.rb
 K 25
@@ -283,7 +289,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 50
-/svn/!svn/ver/4072/trunk/test/unit/project_test.rb
+/svn/!svn/ver/4391/trunk/test/unit/project_test.rb
 END
 custom_value_test.rb
 K 25
@@ -301,7 +307,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4167/trunk/test/unit/mailer_test.rb
+/svn/!svn/ver/4362/trunk/test/unit/mailer_test.rb
 END
 news_test.rb
 K 25
--- a/test/unit/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/unit
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-20T23:17:51.402972Z
-4167
-edavis10
+2010-11-14T16:51:10.651861Z
+4408
+jplang
 
 
 
@@ -100,10 +100,10 @@
 
 
 
-2010-09-23T14:37:45.507762Z
-b599c36bc2156f6812220a40f054d41e
-2010-07-06T02:07:46.557097Z
-3828
+2010-11-19T13:04:41.337562Z
+7c656f1b1b7984259ebf4d29bdc629a5
+2010-09-26T21:54:52.929683Z
+4189
 edavis10
 has-props
 
@@ -304,11 +304,11 @@
 
 
 
-2010-09-24T12:48:25.791803Z
-0e1f710ecc564f8951d5f5805c440bc8
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-19T13:04:41.337562Z
+b66aaf32f10148354e6319cd7ae7ca27
+2010-11-14T16:51:10.651861Z
+4408
+jplang
 has-props
 
 
@@ -330,7 +330,7 @@
 
 
 
-26011
+29577
 
 issue_status_test.rb
 file
@@ -502,6 +502,43 @@
 
 3118
 
+helpers
+dir
+
+role_test.rb
+file
+
+
+
+
+2010-09-23T14:37:45.507762Z
+01913aeac402c002ff86c6497513c795
+2010-02-03T17:47:47.868223Z
+3363
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3049
+
 changeset_test.rb
 file
 
@@ -536,43 +573,6 @@
 
 4805
 
-role_test.rb
-file
-
-
-
-
-2010-09-23T14:37:45.507762Z
-01913aeac402c002ff86c6497513c795
-2010-02-03T17:47:47.868223Z
-3363
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3049
-
-helpers
-dir
-
 comment_test.rb
 file
 
@@ -786,10 +786,10 @@
 
 
 
-2010-09-24T12:48:25.791803Z
-ee0a9f52ec52313eb2a7e6496590a3fc
-2010-09-03T20:16:00.529106Z
-4058
+2010-11-19T13:04:41.341624Z
+59e73a45159ae21d5dc53098f8e1b637
+2010-10-06T05:08:31.041293Z
+4233
 jbbarth
 has-props
 
@@ -812,75 +812,7 @@
 
 
 
-13887
-
-mail_handler_test.rb
-file
-
-
-
-
-2010-09-23T14:37:45.503764Z
-53cf7d3c94f63febd50685da486d8adf
-2010-06-20T16:22:36.211973Z
-3801
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-14765
-
-repository_test.rb
-file
-
-
-
-
-2010-09-23T14:37:45.507762Z
-fe604b00b9f78fbe70c9c48bac2cd05d
-2009-09-20T14:06:57.257282Z
-2895
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6407
+17550
 
 time_entry_test.rb
 file
@@ -916,39 +848,73 @@
 
 3574
 
-principal_test.rb
+repository_test.rb
 file
 
 
 
 
-2010-09-23T14:37:45.503764Z
-f36cb1e2cd1746903fbd8d269179f177
-2009-12-12T06:18:40.500267Z
-3152
+2010-11-19T13:04:41.341624Z
+61d46cec13bffa4dce694de6c0fb0c93
+2010-09-28T20:20:00.843023Z
+4221
 edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2073
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6469
+
+mail_handler_test.rb
+file
+
+
+
+
+2010-11-19T13:04:41.341624Z
+b5e8191d182e090ce55ccd46b3cc3954
+2010-11-14T13:48:01.671461Z
+4404
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+17912
 
 auth_source_ldap_test.rb
 file
@@ -984,6 +950,74 @@
 
 2788
 
+principal_test.rb
+file
+
+
+
+
+2010-09-23T14:37:45.503764Z
+f36cb1e2cd1746903fbd8d269179f177
+2009-12-12T06:18:40.500267Z
+3152
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2073
+
+journal_observer_test.rb
+file
+
+
+
+
+2010-11-19T13:04:41.341624Z
+b8ca46992b1064fd7f35c44663a40358
+2010-09-28T20:20:00.843023Z
+4221
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3954
+
 repository_filesystem_test.rb
 file
 
@@ -1534,10 +1568,10 @@
 
 
 
-2010-09-24T12:48:25.791803Z
-950344f6f29a4c954bd631c9ab64b447
-2010-09-20T02:55:32.251493Z
-4106
+2010-11-19T13:04:41.341624Z
+e84894671a39a3e44cd69ad6e4d6f9d9
+2010-10-16T00:00:23.359489Z
+4260
 edavis10
 has-props
 
@@ -1560,7 +1594,7 @@
 
 
 
-20070
+20090
 
 search_test.rb
 file
@@ -1602,11 +1636,11 @@
 
 
 
-2010-09-24T12:48:25.791803Z
-987d196dcce3cb336836d449fd1cbd78
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-19T13:04:41.341624Z
+5cb6742ca68637e837794c7a912a1c71
+2010-11-11T13:39:14.764400Z
+4391
+jplang
 has-props
 
 
@@ -1628,7 +1662,7 @@
 
 
 
-35653
+37951
 
 custom_value_test.rb
 file
@@ -1704,10 +1738,10 @@
 
 
 
-2010-09-24T12:48:25.791803Z
-53a7d37c2d3f37d4bd092f325cd8d9ac
-2010-09-20T23:17:51.402972Z
-4167
+2010-11-19T13:04:41.341624Z
+59e4140b58e03b066b15f7213c23fc6d
+2010-11-02T19:00:36.834304Z
+4362
 edavis10
 has-props
 
@@ -1730,7 +1764,7 @@
 
 
 
-13583
+13954
 
 news_test.rb
 file
--- a/test/unit/.svn/text-base/issue_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/.svn/text-base/issue_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -503,6 +503,17 @@
     assert !closed_statuses.empty?
   end
   
+  def test_rescheduling_an_issue_should_reschedule_following_issue
+    issue1 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2)
+    issue2 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2)
+    IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES)
+    assert_equal issue1.due_date + 1, issue2.reload.start_date
+    
+    issue1.due_date = Date.today + 5
+    issue1.save!
+    assert_equal issue1.due_date + 1, issue2.reload.start_date
+  end
+  
   def test_overdue
     assert Issue.new(:due_date => 1.day.ago.to_date).overdue?
     assert !Issue.new(:due_date => Date.today).overdue?
@@ -532,9 +543,28 @@
       assert Issue.new(:start_date => 100.days.ago.to_date, :due_date => Date.today, :done_ratio => 90).behind_schedule?
     end
   end
-  
-  def test_assignable_users
-    assert_kind_of User, Issue.find(1).assignable_users.first
+
+  context "#assignable_users" do
+    should "be Users" do
+      assert_kind_of User, Issue.find(1).assignable_users.first
+    end
+
+    should "include the issue author" do
+      project = Project.find(1)
+      non_project_member = User.generate!
+      issue = Issue.generate_for_project!(project, :author => non_project_member)
+
+      assert issue.assignable_users.include?(non_project_member)
+    end
+
+    should "not show the issue author twice" do
+      assignable_user_ids = Issue.find(1).assignable_users.collect(&:id)
+      assert_equal 2, assignable_user_ids.length
+      
+      assignable_user_ids.each do |user_id|
+        assert_equal 1, assignable_user_ids.select {|i| i == user_id}.length, "User #{user_id} appears more or less than once"
+      end
+    end
   end
   
   def test_create_should_send_email_notification
@@ -544,7 +574,7 @@
     assert issue.save
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_stale_issue_should_not_send_email_notification
     ActionMailer::Base.deliveries.clear
     issue = Issue.find(1)
@@ -593,6 +623,9 @@
       @issue = Issue.find(1)
       @issue_status = IssueStatus.find(1)
       @issue_status.update_attribute(:default_done_ratio, 50)
+      @issue2 = Issue.find(2)
+      @issue_status2 = IssueStatus.find(2)
+      @issue_status2.update_attribute(:default_done_ratio, 0)
     end
     
     context "with Setting.issue_done_ratio using the issue_field" do
@@ -602,6 +635,7 @@
       
       should "read the issue's field" do
         assert_equal 0, @issue.done_ratio
+        assert_equal 30, @issue2.done_ratio
       end
     end
 
@@ -612,6 +646,7 @@
       
       should "read the Issue Status's default done ratio" do
         assert_equal 50, @issue.done_ratio
+        assert_equal 0, @issue2.done_ratio
       end
     end
   end
@@ -621,6 +656,9 @@
       @issue = Issue.find(1)
       @issue_status = IssueStatus.find(1)
       @issue_status.update_attribute(:default_done_ratio, 50)
+      @issue2 = Issue.find(2)
+      @issue_status2 = IssueStatus.find(2)
+      @issue_status2.update_attribute(:default_done_ratio, 0)
     end
     
     context "with Setting.issue_done_ratio using the issue_field" do
@@ -630,8 +668,10 @@
       
       should "not change the issue" do
         @issue.update_done_ratio_from_issue_status
+        @issue2.update_done_ratio_from_issue_status
 
-        assert_equal 0, @issue.done_ratio
+        assert_equal 0, @issue.read_attribute(:done_ratio)
+        assert_equal 30, @issue2.read_attribute(:done_ratio)
       end
     end
 
@@ -640,10 +680,12 @@
         Setting.issue_done_ratio = 'issue_status'
       end
       
-      should "not change the issue's done ratio" do
+      should "change the issue's done ratio" do
         @issue.update_done_ratio_from_issue_status
+        @issue2.update_done_ratio_from_issue_status
 
-        assert_equal 50, @issue.done_ratio
+        assert_equal 50, @issue.read_attribute(:done_ratio)
+        assert_equal 0, @issue2.read_attribute(:done_ratio)
       end
     end
   end
@@ -726,4 +768,49 @@
     assert issue.save
     assert_equal before, Issue.on_active_project.length
   end
+
+  context "Issue#recipients" do
+    setup do
+      @project = Project.find(1)
+      @author = User.generate_with_protected!
+      @assignee = User.generate_with_protected!
+      @issue = Issue.generate_for_project!(@project, :assigned_to => @assignee, :author => @author)
+    end
+    
+    should "include project recipients" do
+      assert @project.recipients.present?
+      @project.recipients.each do |project_recipient|
+        assert @issue.recipients.include?(project_recipient)
+      end
+    end
+
+    should "include the author if the author is active" do
+      assert @issue.author, "No author set for Issue"
+      assert @issue.recipients.include?(@issue.author.mail)
+    end
+    
+    should "include the assigned to user if the assigned to user is active" do
+      assert @issue.assigned_to, "No assigned_to set for Issue"
+      assert @issue.recipients.include?(@issue.assigned_to.mail)
+    end
+
+    should "not include users who opt out of all email" do
+      @author.update_attribute(:mail_notification, :none)
+
+      assert !@issue.recipients.include?(@issue.author.mail)
+    end
+
+    should "not include the issue author if they are only notified of assigned issues" do
+      @author.update_attribute(:mail_notification, :only_assigned)
+
+      assert !@issue.recipients.include?(@issue.author.mail)
+    end
+
+    should "not include the assigned user if they are only notified of owned issues" do
+      @assignee.update_attribute(:mail_notification, :only_owner)
+
+      assert !@issue.recipients.include?(@issue.assigned_to.mail)
+    end
+
+  end
 end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/.svn/text-base/journal_observer_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,118 @@
+# redMine - project management software
+# Copyright (C) 2006-2009  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../test_helper'
+
+class JournalObserverTest < ActiveSupport::TestCase
+  fixtures :issues, :issue_statuses, :journals, :journal_details
+
+  def setup
+    ActionMailer::Base.deliveries.clear
+    @journal = Journal.find 1
+  end
+
+  # context: issue_updated notified_events
+  def test_create_should_send_email_notification_with_issue_updated
+    Setting.notified_events = ['issue_updated']
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    journal = issue.init_journal(user, issue)
+
+    assert journal.save
+    assert_equal 1, ActionMailer::Base.deliveries.size
+  end
+
+  def test_create_should_not_send_email_notification_without_issue_updated
+    Setting.notified_events = []
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    journal = issue.init_journal(user, issue)
+
+    assert journal.save
+    assert_equal 0, ActionMailer::Base.deliveries.size
+  end
+
+  # context: issue_note_added notified_events
+  def test_create_should_send_email_notification_with_issue_note_added
+    Setting.notified_events = ['issue_note_added']
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    journal = issue.init_journal(user, issue)
+    journal.notes = 'This update has a note'
+
+    assert journal.save
+    assert_equal 1, ActionMailer::Base.deliveries.size
+  end
+
+  def test_create_should_not_send_email_notification_without_issue_note_added
+    Setting.notified_events = []
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    journal = issue.init_journal(user, issue)
+    journal.notes = 'This update has a note'
+    
+    assert journal.save
+    assert_equal 0, ActionMailer::Base.deliveries.size
+  end
+
+  # context: issue_status_updated notified_events
+  def test_create_should_send_email_notification_with_issue_status_updated
+    Setting.notified_events = ['issue_status_updated']
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    issue.init_journal(user, issue)
+    issue.status = IssueStatus.last
+
+    assert issue.save
+    assert_equal 1, ActionMailer::Base.deliveries.size
+  end
+
+  def test_create_should_not_send_email_notification_without_issue_status_updated
+    Setting.notified_events = []
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    issue.init_journal(user, issue)
+    issue.status = IssueStatus.last
+    
+    assert issue.save
+    assert_equal 0, ActionMailer::Base.deliveries.size
+  end
+
+  # context: issue_priority_updated notified_events
+  def test_create_should_send_email_notification_with_issue_priority_updated
+    Setting.notified_events = ['issue_priority_updated']
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    issue.init_journal(user, issue)
+    issue.priority = IssuePriority.last
+
+    assert issue.save
+    assert_equal 1, ActionMailer::Base.deliveries.size
+  end
+
+  def test_create_should_not_send_email_notification_without_issue_priority_updated
+    Setting.notified_events = []
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    issue.init_journal(user, issue)
+    issue.priority = IssuePriority.last
+    
+    assert issue.save
+    assert_equal 0, ActionMailer::Base.deliveries.size
+  end
+
+end
--- a/test/unit/.svn/text-base/mail_handler_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/.svn/text-base/mail_handler_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -25,11 +25,13 @@
                    :roles,
                    :members,
                    :member_roles,
+                   :users,
                    :issues,
                    :issue_statuses,
                    :workflows,
                    :trackers,
                    :projects_trackers,
+                   :versions,
                    :enumerations,
                    :issue_categories,
                    :custom_fields,
@@ -41,6 +43,7 @@
   
   def setup
     ActionMailer::Base.deliveries.clear
+    Setting.notified_events = Redmine::Notifiable.all.collect(&:name)
   end
   
   def test_add_issue
@@ -58,6 +61,9 @@
     assert_equal '2010-01-01', issue.start_date.to_s
     assert_equal '2010-12-31', issue.due_date.to_s
     assert_equal User.find_by_login('jsmith'), issue.assigned_to
+    assert_equal Version.find_by_name('alpha'), issue.fixed_version
+    assert_equal 2.5, issue.estimated_hours
+    assert_equal 30, issue.done_ratio
     # keywords should be removed from the email body
     assert !issue.description.match(/^Project:/i)
     assert !issue.description.match(/^Status:/i)
@@ -152,7 +158,7 @@
     assert !issue.new_record?
     issue.reload
     assert issue.watched_by?(User.find_by_mail('dlopper@somenet.foo'))
-    assert_equal 1, issue.watchers.size
+    assert_equal 1, issue.watcher_user_ids.size
   end
   
   def test_add_issue_by_unknown_user
@@ -223,6 +229,34 @@
     Role.anonymous.add_permission!(:add_issues)
     assert_equal false, submit_email('ticket_without_from_header.eml')
   end
+
+  def test_add_issue_with_invalid_attributes
+    issue = submit_email('ticket_with_invalid_attributes.eml', :allow_override => 'tracker,category,priority')
+    assert issue.is_a?(Issue)
+    assert !issue.new_record?
+    issue.reload
+    assert_nil issue.assigned_to
+    assert_nil issue.start_date
+    assert_nil issue.due_date
+    assert_equal 0, issue.done_ratio
+    assert_equal 'Normal', issue.priority.to_s
+    assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
+  end
+
+  def test_add_issue_with_localized_attributes
+    User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr'
+    issue = submit_email('ticket_with_localized_attributes.eml', :allow_override => 'tracker,category,priority')
+    assert issue.is_a?(Issue)
+    assert !issue.new_record?
+    issue.reload
+    assert_equal 'New ticket on a given project', issue.subject
+    assert_equal User.find_by_login('jsmith'), issue.author
+    assert_equal Project.find(2), issue.project
+    assert_equal 'Feature request', issue.tracker.to_s
+    assert_equal 'Stock management', issue.category.to_s
+    assert_equal 'Urgent', issue.priority.to_s
+    assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
+  end
   
   def test_add_issue_with_japanese_keywords
     tracker = Tracker.create!(:name => '開発')
@@ -240,6 +274,7 @@
   end
 
   def test_add_issue_should_send_email_notification
+    Setting.notified_events = ['issue_added']
     ActionMailer::Base.deliveries.clear
     # This email contains: 'Project: onlinestore'
     issue = submit_email('ticket_on_given_project.eml')
@@ -267,6 +302,7 @@
     assert_equal '2010-01-01', issue.start_date.to_s
     assert_equal '2010-12-31', issue.due_date.to_s
     assert_equal User.find_by_login('jsmith'), issue.assigned_to
+    assert_equal 'Updated custom value', issue.custom_value_for(CustomField.find_by_name('Searchable field')).value
   end
 
   def test_add_issue_note_should_send_email_notification
@@ -333,6 +369,38 @@
       end
     end
 
+    context "with a single quoted reply (e.g. reply to a Redmine email notification)" do
+      setup do
+        Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
+      end
+
+      should "truncate the email at the delimiter with the quoted reply symbols (>)" do
+        journal = submit_email('issue_update_with_quoted_reply_above.eml')
+        assert journal.is_a?(Journal)
+        assert journal.notes.include?('An update to the issue by the sender.')
+        assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
+        assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
+
+      end
+
+    end
+    
+    context "with multiple quoted replies (e.g. reply to a reply of a Redmine email notification)" do
+      setup do
+        Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
+      end
+
+      should "truncate the email at the delimiter with the quoted reply symbols (>)" do
+        journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml')
+        assert journal.is_a?(Journal)
+        assert journal.notes.include?('An update to the issue by the sender.')
+        assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
+        assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
+
+      end
+
+    end
+
     context "with multiple strings" do
       setup do
         Setting.mail_handler_body_delimiters = "---\nBREAK"
--- a/test/unit/.svn/text-base/mailer_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/.svn/text-base/mailer_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -393,4 +393,21 @@
     # should restore perform_deliveries
     assert ActionMailer::Base.perform_deliveries
   end
+
+  context "layout" do
+    should "include the emails_header" do
+      with_settings(:emails_header => "*Header content*") do
+        assert Mailer.deliver_test(User.find(1))
+
+        assert_select_email do
+          assert_select ".header" do
+            assert_select "strong", :text => "Header content"
+          end
+        end
+      end
+      
+    end
+    
+  end
+  
 end
--- a/test/unit/.svn/text-base/project_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/.svn/text-base/project_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -29,7 +29,6 @@
   should_validate_presence_of :name
   should_validate_presence_of :identifier
 
-  should_validate_uniqueness_of :name
   should_validate_uniqueness_of :identifier
 
   context "associations" do
@@ -102,6 +101,7 @@
     @ecookbook.reload
     
     assert !@ecookbook.active?
+    assert @ecookbook.archived?
     assert !user.projects.include?(@ecookbook)
     # Subproject are also archived
     assert !@ecookbook.children.empty?
@@ -129,6 +129,7 @@
     assert @ecookbook.unarchive
     @ecookbook.reload
     assert @ecookbook.active?
+    assert !@ecookbook.archived?
     assert user.projects.include?(@ecookbook)
     # Subproject can now be unarchived
     @ecookbook_sub1.reload
@@ -860,6 +861,8 @@
       
       assert_nil @project.start_date
     end
+    
+    should "be tested when issues have no start date"
 
     should "be the earliest start date of it's issues" do
       early = 7.days.ago.to_date
@@ -889,6 +892,8 @@
       
       assert_nil @project.due_date
     end
+    
+    should "be tested when issues have no due date"
 
     should "be the latest due date of it's issues" do
       future = 7.days.from_now.to_date
@@ -960,4 +965,54 @@
 
     end
   end
+
+  context "#notified_users" do
+    setup do
+      @project = Project.generate!
+      @role = Role.generate!
+      
+      @user_with_membership_notification = User.generate!(:mail_notification => 'selected')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @user_with_membership_notification, :mail_notification => true)
+
+      @all_events_user = User.generate!(:mail_notification => 'all')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @all_events_user)
+
+      @no_events_user = User.generate!(:mail_notification => 'none')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @no_events_user)
+
+      @only_my_events_user = User.generate!(:mail_notification => 'only_my_events')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @only_my_events_user)
+
+      @only_assigned_user = User.generate!(:mail_notification => 'only_assigned')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @only_assigned_user)
+
+      @only_owned_user = User.generate!(:mail_notification => 'only_owner')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @only_owned_user)
+    end
+    
+    should "include members with a mail notification" do
+      assert @project.notified_users.include?(@user_with_membership_notification)
+    end
+    
+    should "include users with the 'all' notification option" do
+      assert @project.notified_users.include?(@all_events_user)
+    end
+    
+    should "not include users with the 'none' notification option" do
+      assert !@project.notified_users.include?(@no_events_user)
+    end
+    
+    should "not include users with the 'only_my_events' notification option" do
+      assert !@project.notified_users.include?(@only_my_events_user)
+    end
+    
+    should "not include users with the 'only_assigned' notification option" do
+      assert !@project.notified_users.include?(@only_assigned_user)
+    end
+    
+    should "not include users with the 'only_owner' notification option" do
+      assert !@project.notified_users.include?(@only_owned_user)
+    end
+  end
+  
 end
--- a/test/unit/.svn/text-base/query_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/.svn/text-base/query_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -397,8 +397,8 @@
         group2 = Group.generate!.reload
 
         expected_group_list = [
-                               [group1.name, group1.id],
-                               [group2.name, group2.id]
+                               [group1.name, group1.id.to_s],
+                               [group2.name, group2.id.to_s]
                               ]
         assert_equal expected_group_list.sort, @query.available_filters["member_of_group"][:values].sort
       end
@@ -415,14 +415,14 @@
       end
       
       should "have a list of the Roles as values" do
-        assert @query.available_filters["assigned_to_role"][:values].include?(['Manager',1])
-        assert @query.available_filters["assigned_to_role"][:values].include?(['Developer',2])
-        assert @query.available_filters["assigned_to_role"][:values].include?(['Reporter',3])
+        assert @query.available_filters["assigned_to_role"][:values].include?(['Manager','1'])
+        assert @query.available_filters["assigned_to_role"][:values].include?(['Developer','2'])
+        assert @query.available_filters["assigned_to_role"][:values].include?(['Reporter','3'])
       end
 
       should "not include the built in Roles as values" do
-        assert ! @query.available_filters["assigned_to_role"][:values].include?(['Non member',4])
-        assert ! @query.available_filters["assigned_to_role"][:values].include?(['Anonymous',5])
+        assert ! @query.available_filters["assigned_to_role"][:values].include?(['Non member','4'])
+        assert ! @query.available_filters["assigned_to_role"][:values].include?(['Anonymous','5'])
       end
 
     end
--- a/test/unit/.svn/text-base/repository_git_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/.svn/text-base/repository_git_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -34,8 +34,8 @@
       @repository.fetch_changesets
       @repository.reload
       
-      assert_equal 13, @repository.changesets.count
-      assert_equal 22, @repository.changes.count
+      assert_equal 15, @repository.changesets.count
+      assert_equal 24, @repository.changes.count
       
       commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
       assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
@@ -57,10 +57,10 @@
       # Remove the 3 latest changesets
       @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy)
       @repository.reload
-      assert_equal 10, @repository.changesets.count
+      assert_equal 12, @repository.changesets.count
       
       @repository.fetch_changesets
-      assert_equal 13, @repository.changesets.count
+      assert_equal 15, @repository.changesets.count
     end
   else
     puts "Git test repository NOT FOUND. Skipping unit tests !!!"
--- a/test/unit/.svn/text-base/repository_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/.svn/text-base/repository_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -67,6 +67,7 @@
   
   def test_scan_changesets_for_issue_ids
     Setting.default_language = 'en'
+    Setting.notified_events = ['issue_added','issue_updated']
     
     # choosing a status to apply to fix issues
     Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
--- a/test/unit/.svn/text-base/user_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/.svn/text-base/user_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -60,6 +60,18 @@
     user.password, user.password_confirmation = "password", "password"
     assert user.save
   end
+
+  context "User#before_create" do
+    should "set the mail_notification to the default Setting" do
+      @user1 = User.generate_with_protected!
+      assert_equal 'only_my_events', @user1.mail_notification
+
+      with_settings :default_notification_option => 'all' do
+        @user2 = User.generate_with_protected!
+        assert_equal 'all', @user2.mail_notification
+      end
+    end
+  end
   
   context "User.login" do
     should "be case-insensitive." do
@@ -285,7 +297,7 @@
   end
   
   def test_mail_notification_all
-    @jsmith.mail_notification = true
+    @jsmith.mail_notification = 'all'
     @jsmith.notified_project_ids = []
     @jsmith.save
     @jsmith.reload
@@ -293,15 +305,15 @@
   end
   
   def test_mail_notification_selected
-    @jsmith.mail_notification = false
+    @jsmith.mail_notification = 'selected'
     @jsmith.notified_project_ids = [1]
     @jsmith.save
     @jsmith.reload
     assert Project.find(1).recipients.include?(@jsmith.mail)
   end
   
-  def test_mail_notification_none
-    @jsmith.mail_notification = false
+  def test_mail_notification_only_my_events
+    @jsmith.mail_notification = 'only_my_events'
     @jsmith.notified_project_ids = []
     @jsmith.save
     @jsmith.reload
@@ -384,6 +396,23 @@
         assert ! @dlopper.allowed_to?(:delete_messages, project) #Developper
       end
     end
+
+    context "with multiple projects" do
+      should "return false if array is empty" do
+        assert ! @admin.allowed_to?(:view_project, [])
+      end
+      
+      should "return true only if user has permission on all these projects" do
+        assert @admin.allowed_to?(:view_project, Project.all)
+        assert ! @dlopper.allowed_to?(:view_project, Project.all) #cannot see Project(2)
+        assert @jsmith.allowed_to?(:edit_issues, @jsmith.projects) #Manager or Developer everywhere
+        assert ! @jsmith.allowed_to?(:delete_issue_watchers, @jsmith.projects) #Dev cannot delete_issue_watchers
+      end
+      
+      should "behave correctly with arrays of 1 project" do
+        assert ! User.anonymous.allowed_to?(:delete_issues, [Project.first])
+      end
+    end
     
     context "with options[:global]" do
       should "authorize if user has at least one role that has this permission" do
@@ -398,6 +427,72 @@
     end
   end
   
+  context "User#notify_about?" do
+    context "Issues" do
+      setup do
+        @project = Project.find(1)
+        @author = User.generate_with_protected!
+        @assignee = User.generate_with_protected!
+        @issue = Issue.generate_for_project!(@project, :assigned_to => @assignee, :author => @author)
+      end
+
+      should "be true for a user with :all" do
+        @author.update_attribute(:mail_notification, :all)
+        assert @author.notify_about?(@issue)
+      end
+      
+      should "be false for a user with :none" do
+        @author.update_attribute(:mail_notification, :none)
+        assert ! @author.notify_about?(@issue)
+      end
+      
+      should "be false for a user with :only_my_events and isn't an author, creator, or assignee" do
+        @user = User.generate_with_protected!(:mail_notification => :only_my_events)
+        assert ! @user.notify_about?(@issue)
+      end
+      
+      should "be true for a user with :only_my_events and is the author" do
+        @author.update_attribute(:mail_notification, :only_my_events)
+        assert @author.notify_about?(@issue)
+      end
+      
+      should "be true for a user with :only_my_events and is the assignee" do
+        @assignee.update_attribute(:mail_notification, :only_my_events)
+        assert @assignee.notify_about?(@issue)
+      end
+      
+      should "be true for a user with :only_assigned and is the assignee" do
+        @assignee.update_attribute(:mail_notification, :only_assigned)
+        assert @assignee.notify_about?(@issue)
+      end
+      
+      should "be false for a user with :only_assigned and is not the assignee" do
+        @author.update_attribute(:mail_notification, :only_assigned)
+        assert ! @author.notify_about?(@issue)
+      end
+      
+      should "be true for a user with :only_owner and is the author" do
+        @author.update_attribute(:mail_notification, :only_owner)
+        assert @author.notify_about?(@issue)
+      end
+      
+      should "be false for a user with :only_owner and is not the author" do
+        @assignee.update_attribute(:mail_notification, :only_owner)
+        assert ! @assignee.notify_about?(@issue)
+      end
+      
+      should "be false if the mail_notification is anything else" do
+        @assignee.update_attribute(:mail_notification, :somthing_else)
+        assert ! @assignee.notify_about?(@issue)
+      end
+      
+    end
+
+    context "other events" do
+      should 'be added and tested'
+    end
+  end
+  
   if Object.const_defined?(:OpenID)
     
   def test_setting_identity_url
--- a/test/unit/helpers/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/helpers/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 42
-/svn/!svn/ver/4072/trunk/test/unit/helpers
+/svn/!svn/ver/4377/trunk/test/unit/helpers
 END
 custom_fields_helper_test.rb
 K 25
@@ -25,7 +25,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 69
-/svn/!svn/ver/4072/trunk/test/unit/helpers/application_helper_test.rb
+/svn/!svn/ver/4377/trunk/test/unit/helpers/application_helper_test.rb
 END
 search_helper_test.rb
 K 25
--- a/test/unit/helpers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/helpers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/unit/helpers
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-06T18:52:07.556711Z
+4377
+jplang
 
 
 
@@ -134,11 +134,11 @@
 
 
 
-2010-09-24T12:48:25.635718Z
-7f682835f4e55f0f74513fb50a363168
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-19T13:04:41.233647Z
+93e1fbbe347fd0b1526df779b0244489
+2010-11-06T18:52:07.556711Z
+4377
+jplang
 has-props
 
 
@@ -160,7 +160,7 @@
 
 
 
-29071
+29154
 
 search_helper_test.rb
 file
--- a/test/unit/helpers/.svn/text-base/application_helper_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/helpers/.svn/text-base/application_helper_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2010  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -49,15 +49,6 @@
       assert_match /href/, response
     end
     
-    should "allow using the url for the target link" do
-      User.current = User.find_by_login('admin')
-
-      @project = Issue.first.project # Used by helper
-      response = link_to_if_authorized("By url",
-                                       new_issue_move_path(:id => Issue.first.id))
-      assert_match /href/, response
-    end
-
   end
   
   def test_auto_links
@@ -88,6 +79,8 @@
       'http://example.net/path!602815048C7B5C20!302.html' => '<a class="external" href="http://example.net/path!602815048C7B5C20!302.html">http://example.net/path!602815048C7B5C20!302.html</a>',
       # escaping
       'http://foo"bar' => '<a class="external" href="http://foo&quot;bar">http://foo"bar</a>',
+      # wrap in angle brackets
+      '<http://foo.bar>' => '&lt;<a class="external" href="http://foo.bar">http://foo.bar</a>&gt;'
     }
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
   end
@@ -123,15 +116,6 @@
     assert textilizable(raw).include?('<img src="bar.gif" alt="" />')
   end
   
-  def test_acronyms
-    to_test = {
-      'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>',
-      'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted &quot;title&quot;">GPL</acronym>',
-    }
-    to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
-    
-  end
-  
   def test_attached_images
     to_test = {
       'Inline image: !logo.gif!' => 'Inline image: <img src="/attachments/download/3" title="This is a logo" alt="This is a logo" />',
@@ -260,8 +244,8 @@
       '[[Unknown page]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">Unknown page</a>',
       '[[Unknown page|404]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">404</a>',
       # link to another project wiki
-      '[[onlinestore:]]' => '<a href="/projects/onlinestore/wiki/" class="wiki-page">onlinestore</a>',
-      '[[onlinestore:|Wiki]]' => '<a href="/projects/onlinestore/wiki/" class="wiki-page">Wiki</a>',
+      '[[onlinestore:]]' => '<a href="/projects/onlinestore/wiki" class="wiki-page">onlinestore</a>',
+      '[[onlinestore:|Wiki]]' => '<a href="/projects/onlinestore/wiki" class="wiki-page">Wiki</a>',
       '[[onlinestore:Start page]]' => '<a href="/projects/onlinestore/wiki/Start_page" class="wiki-page">Start page</a>',
       '[[onlinestore:Start page|Text]]' => '<a href="/projects/onlinestore/wiki/Start_page" class="wiki-page">Text</a>',
       '[[onlinestore:Unknown page]]' => '<a href="/projects/onlinestore/wiki/Unknown_page" class="wiki-page new">Unknown page</a>',
@@ -408,11 +392,6 @@
     assert_equal '<p>Dashes: ---</p>', textilizable('Dashes: ---')
   end
   
-  def test_acronym
-    assert_equal '<p>This is an acronym: <acronym title="American Civil Liberties Union">ACLU</acronym>.</p>',
-                 textilizable('This is an acronym: ACLU(American Civil Liberties Union).')
-  end
-  
   def test_footnotes
     raw = <<-RAW
 This is some text[1].
@@ -443,25 +422,60 @@
 h2. Subtitle with [[Wiki|another Wiki]] link
 
 h2. Subtitle with %{color:red}red text%
+    
+h3. Subtitle with *some* _modifiers_
 
 h1. Another title
 
-h2. An "Internet link":http://www.redmine.org/ inside subtitle
+h3. An "Internet link":http://www.redmine.org/ inside subtitle
 
 h2. "Project Name !/attachments/1234/logo_small.gif! !/attachments/5678/logo_2.png!":/projects/projectname/issues
 
 RAW
 
-    expected = '<ul class="toc">' +
-               '<li class="heading1"><a href="#Title">Title</a></li>' +
-               '<li class="heading2"><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + 
-               '<li class="heading2"><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + 
-               '<li class="heading2"><a href="#Subtitle-with-red-text">Subtitle with red text</a></li>' +
-               '<li class="heading1"><a href="#Another-title">Another title</a></li>' +
-               '<li class="heading2"><a href="#An-Internet-link-inside-subtitle">An Internet link inside subtitle</a></li>' +
-               '<li class="heading2"><a href="#Project-Name">Project Name</a></li>' +
+    expected =  '<ul class="toc">' +
+                  '<li><a href="#Title">Title</a>' +
+                    '<ul>' +
+                      '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + 
+                      '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + 
+                      '<li><a href="#Subtitle-with-red-text">Subtitle with red text</a>' +
+                        '<ul>' +
+                          '<li><a href="#Subtitle-with-some-modifiers">Subtitle with some modifiers</a></li>' +
+                        '</ul>' +
+                      '</li>' +
+                    '</ul>' +
+                  '</li>' +
+                  '<li><a href="#Another-title">Another title</a>' +
+                    '<ul>' +
+                      '<li>' +
+                        '<ul>' +
+                          '<li><a href="#An-Internet-link-inside-subtitle">An Internet link inside subtitle</a></li>' +
+                        '</ul>' +
+                      '</li>' +
+                      '<li><a href="#Project-Name">Project Name</a></li>' +
+                    '</ul>' +
+                  '</li>' +
                '</ul>'
 
+    @project = Project.find(1)
+    assert textilizable(raw).gsub("\n", "").include?(expected)
+  end
+  
+  def test_table_of_content_should_contain_included_page_headings
+    raw = <<-RAW
+{{toc}}
+
+h1. Included
+
+{{include(Child_1)}}
+RAW
+
+    expected = '<ul class="toc">' +
+               '<li><a href="#Included">Included</a></li>' +
+               '<li><a href="#Child-page-1">Child page 1</a></li>' + 
+               '</ul>'
+
+    @project = Project.find(1)
     assert textilizable(raw).gsub("\n", "").include?(expected)
   end
   
--- a/test/unit/helpers/application_helper_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/helpers/application_helper_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2010  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -49,15 +49,6 @@
       assert_match /href/, response
     end
     
-    should "allow using the url for the target link" do
-      User.current = User.find_by_login('admin')
-
-      @project = Issue.first.project # Used by helper
-      response = link_to_if_authorized("By url",
-                                       new_issue_move_path(:id => Issue.first.id))
-      assert_match /href/, response
-    end
-
   end
   
   def test_auto_links
@@ -88,6 +79,8 @@
       'http://example.net/path!602815048C7B5C20!302.html' => '<a class="external" href="http://example.net/path!602815048C7B5C20!302.html">http://example.net/path!602815048C7B5C20!302.html</a>',
       # escaping
       'http://foo"bar' => '<a class="external" href="http://foo&quot;bar">http://foo"bar</a>',
+      # wrap in angle brackets
+      '<http://foo.bar>' => '&lt;<a class="external" href="http://foo.bar">http://foo.bar</a>&gt;'
     }
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
   end
@@ -123,15 +116,6 @@
     assert textilizable(raw).include?('<img src="bar.gif" alt="" />')
   end
   
-  def test_acronyms
-    to_test = {
-      'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>',
-      'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted &quot;title&quot;">GPL</acronym>',
-    }
-    to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
-    
-  end
-  
   def test_attached_images
     to_test = {
       'Inline image: !logo.gif!' => 'Inline image: <img src="/attachments/download/3" title="This is a logo" alt="This is a logo" />',
@@ -260,8 +244,8 @@
       '[[Unknown page]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">Unknown page</a>',
       '[[Unknown page|404]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">404</a>',
       # link to another project wiki
-      '[[onlinestore:]]' => '<a href="/projects/onlinestore/wiki/" class="wiki-page">onlinestore</a>',
-      '[[onlinestore:|Wiki]]' => '<a href="/projects/onlinestore/wiki/" class="wiki-page">Wiki</a>',
+      '[[onlinestore:]]' => '<a href="/projects/onlinestore/wiki" class="wiki-page">onlinestore</a>',
+      '[[onlinestore:|Wiki]]' => '<a href="/projects/onlinestore/wiki" class="wiki-page">Wiki</a>',
       '[[onlinestore:Start page]]' => '<a href="/projects/onlinestore/wiki/Start_page" class="wiki-page">Start page</a>',
       '[[onlinestore:Start page|Text]]' => '<a href="/projects/onlinestore/wiki/Start_page" class="wiki-page">Text</a>',
       '[[onlinestore:Unknown page]]' => '<a href="/projects/onlinestore/wiki/Unknown_page" class="wiki-page new">Unknown page</a>',
@@ -408,11 +392,6 @@
     assert_equal '<p>Dashes: ---</p>', textilizable('Dashes: ---')
   end
   
-  def test_acronym
-    assert_equal '<p>This is an acronym: <acronym title="American Civil Liberties Union">ACLU</acronym>.</p>',
-                 textilizable('This is an acronym: ACLU(American Civil Liberties Union).')
-  end
-  
   def test_footnotes
     raw = <<-RAW
 This is some text[1].
@@ -443,25 +422,60 @@
 h2. Subtitle with [[Wiki|another Wiki]] link
 
 h2. Subtitle with %{color:red}red text%
+    
+h3. Subtitle with *some* _modifiers_
 
 h1. Another title
 
-h2. An "Internet link":http://www.redmine.org/ inside subtitle
+h3. An "Internet link":http://www.redmine.org/ inside subtitle
 
 h2. "Project Name !/attachments/1234/logo_small.gif! !/attachments/5678/logo_2.png!":/projects/projectname/issues
 
 RAW
 
-    expected = '<ul class="toc">' +
-               '<li class="heading1"><a href="#Title">Title</a></li>' +
-               '<li class="heading2"><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + 
-               '<li class="heading2"><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + 
-               '<li class="heading2"><a href="#Subtitle-with-red-text">Subtitle with red text</a></li>' +
-               '<li class="heading1"><a href="#Another-title">Another title</a></li>' +
-               '<li class="heading2"><a href="#An-Internet-link-inside-subtitle">An Internet link inside subtitle</a></li>' +
-               '<li class="heading2"><a href="#Project-Name">Project Name</a></li>' +
+    expected =  '<ul class="toc">' +
+                  '<li><a href="#Title">Title</a>' +
+                    '<ul>' +
+                      '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + 
+                      '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + 
+                      '<li><a href="#Subtitle-with-red-text">Subtitle with red text</a>' +
+                        '<ul>' +
+                          '<li><a href="#Subtitle-with-some-modifiers">Subtitle with some modifiers</a></li>' +
+                        '</ul>' +
+                      '</li>' +
+                    '</ul>' +
+                  '</li>' +
+                  '<li><a href="#Another-title">Another title</a>' +
+                    '<ul>' +
+                      '<li>' +
+                        '<ul>' +
+                          '<li><a href="#An-Internet-link-inside-subtitle">An Internet link inside subtitle</a></li>' +
+                        '</ul>' +
+                      '</li>' +
+                      '<li><a href="#Project-Name">Project Name</a></li>' +
+                    '</ul>' +
+                  '</li>' +
                '</ul>'
 
+    @project = Project.find(1)
+    assert textilizable(raw).gsub("\n", "").include?(expected)
+  end
+  
+  def test_table_of_content_should_contain_included_page_headings
+    raw = <<-RAW
+{{toc}}
+
+h1. Included
+
+{{include(Child_1)}}
+RAW
+
+    expected = '<ul class="toc">' +
+               '<li><a href="#Included">Included</a></li>' +
+               '<li><a href="#Child-page-1">Child page 1</a></li>' + 
+               '</ul>'
+
+    @project = Project.find(1)
     assert textilizable(raw).gsub("\n", "").include?(expected)
   end
   
--- a/test/unit/issue_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/issue_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -503,6 +503,17 @@
     assert !closed_statuses.empty?
   end
   
+  def test_rescheduling_an_issue_should_reschedule_following_issue
+    issue1 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2)
+    issue2 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2)
+    IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES)
+    assert_equal issue1.due_date + 1, issue2.reload.start_date
+    
+    issue1.due_date = Date.today + 5
+    issue1.save!
+    assert_equal issue1.due_date + 1, issue2.reload.start_date
+  end
+  
   def test_overdue
     assert Issue.new(:due_date => 1.day.ago.to_date).overdue?
     assert !Issue.new(:due_date => Date.today).overdue?
@@ -532,9 +543,28 @@
       assert Issue.new(:start_date => 100.days.ago.to_date, :due_date => Date.today, :done_ratio => 90).behind_schedule?
     end
   end
-  
-  def test_assignable_users
-    assert_kind_of User, Issue.find(1).assignable_users.first
+
+  context "#assignable_users" do
+    should "be Users" do
+      assert_kind_of User, Issue.find(1).assignable_users.first
+    end
+
+    should "include the issue author" do
+      project = Project.find(1)
+      non_project_member = User.generate!
+      issue = Issue.generate_for_project!(project, :author => non_project_member)
+
+      assert issue.assignable_users.include?(non_project_member)
+    end
+
+    should "not show the issue author twice" do
+      assignable_user_ids = Issue.find(1).assignable_users.collect(&:id)
+      assert_equal 2, assignable_user_ids.length
+      
+      assignable_user_ids.each do |user_id|
+        assert_equal 1, assignable_user_ids.select {|i| i == user_id}.length, "User #{user_id} appears more or less than once"
+      end
+    end
   end
   
   def test_create_should_send_email_notification
@@ -544,7 +574,7 @@
     assert issue.save
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
-  
+
   def test_stale_issue_should_not_send_email_notification
     ActionMailer::Base.deliveries.clear
     issue = Issue.find(1)
@@ -593,6 +623,9 @@
       @issue = Issue.find(1)
       @issue_status = IssueStatus.find(1)
       @issue_status.update_attribute(:default_done_ratio, 50)
+      @issue2 = Issue.find(2)
+      @issue_status2 = IssueStatus.find(2)
+      @issue_status2.update_attribute(:default_done_ratio, 0)
     end
     
     context "with Setting.issue_done_ratio using the issue_field" do
@@ -602,6 +635,7 @@
       
       should "read the issue's field" do
         assert_equal 0, @issue.done_ratio
+        assert_equal 30, @issue2.done_ratio
       end
     end
 
@@ -612,6 +646,7 @@
       
       should "read the Issue Status's default done ratio" do
         assert_equal 50, @issue.done_ratio
+        assert_equal 0, @issue2.done_ratio
       end
     end
   end
@@ -621,6 +656,9 @@
       @issue = Issue.find(1)
       @issue_status = IssueStatus.find(1)
       @issue_status.update_attribute(:default_done_ratio, 50)
+      @issue2 = Issue.find(2)
+      @issue_status2 = IssueStatus.find(2)
+      @issue_status2.update_attribute(:default_done_ratio, 0)
     end
     
     context "with Setting.issue_done_ratio using the issue_field" do
@@ -630,8 +668,10 @@
       
       should "not change the issue" do
         @issue.update_done_ratio_from_issue_status
+        @issue2.update_done_ratio_from_issue_status
 
-        assert_equal 0, @issue.done_ratio
+        assert_equal 0, @issue.read_attribute(:done_ratio)
+        assert_equal 30, @issue2.read_attribute(:done_ratio)
       end
     end
 
@@ -640,10 +680,12 @@
         Setting.issue_done_ratio = 'issue_status'
       end
       
-      should "not change the issue's done ratio" do
+      should "change the issue's done ratio" do
         @issue.update_done_ratio_from_issue_status
+        @issue2.update_done_ratio_from_issue_status
 
-        assert_equal 50, @issue.done_ratio
+        assert_equal 50, @issue.read_attribute(:done_ratio)
+        assert_equal 0, @issue2.read_attribute(:done_ratio)
       end
     end
   end
@@ -726,4 +768,49 @@
     assert issue.save
     assert_equal before, Issue.on_active_project.length
   end
+
+  context "Issue#recipients" do
+    setup do
+      @project = Project.find(1)
+      @author = User.generate_with_protected!
+      @assignee = User.generate_with_protected!
+      @issue = Issue.generate_for_project!(@project, :assigned_to => @assignee, :author => @author)
+    end
+    
+    should "include project recipients" do
+      assert @project.recipients.present?
+      @project.recipients.each do |project_recipient|
+        assert @issue.recipients.include?(project_recipient)
+      end
+    end
+
+    should "include the author if the author is active" do
+      assert @issue.author, "No author set for Issue"
+      assert @issue.recipients.include?(@issue.author.mail)
+    end
+    
+    should "include the assigned to user if the assigned to user is active" do
+      assert @issue.assigned_to, "No assigned_to set for Issue"
+      assert @issue.recipients.include?(@issue.assigned_to.mail)
+    end
+
+    should "not include users who opt out of all email" do
+      @author.update_attribute(:mail_notification, :none)
+
+      assert !@issue.recipients.include?(@issue.author.mail)
+    end
+
+    should "not include the issue author if they are only notified of assigned issues" do
+      @author.update_attribute(:mail_notification, :only_assigned)
+
+      assert !@issue.recipients.include?(@issue.author.mail)
+    end
+
+    should "not include the assigned user if they are only notified of owned issues" do
+      @assignee.update_attribute(:mail_notification, :only_owner)
+
+      assert !@issue.recipients.include?(@issue.assigned_to.mail)
+    end
+
+  end
 end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/journal_observer_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,118 @@
+# redMine - project management software
+# Copyright (C) 2006-2009  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../test_helper'
+
+class JournalObserverTest < ActiveSupport::TestCase
+  fixtures :issues, :issue_statuses, :journals, :journal_details
+
+  def setup
+    ActionMailer::Base.deliveries.clear
+    @journal = Journal.find 1
+  end
+
+  # context: issue_updated notified_events
+  def test_create_should_send_email_notification_with_issue_updated
+    Setting.notified_events = ['issue_updated']
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    journal = issue.init_journal(user, issue)
+
+    assert journal.save
+    assert_equal 1, ActionMailer::Base.deliveries.size
+  end
+
+  def test_create_should_not_send_email_notification_without_issue_updated
+    Setting.notified_events = []
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    journal = issue.init_journal(user, issue)
+
+    assert journal.save
+    assert_equal 0, ActionMailer::Base.deliveries.size
+  end
+
+  # context: issue_note_added notified_events
+  def test_create_should_send_email_notification_with_issue_note_added
+    Setting.notified_events = ['issue_note_added']
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    journal = issue.init_journal(user, issue)
+    journal.notes = 'This update has a note'
+
+    assert journal.save
+    assert_equal 1, ActionMailer::Base.deliveries.size
+  end
+
+  def test_create_should_not_send_email_notification_without_issue_note_added
+    Setting.notified_events = []
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    journal = issue.init_journal(user, issue)
+    journal.notes = 'This update has a note'
+    
+    assert journal.save
+    assert_equal 0, ActionMailer::Base.deliveries.size
+  end
+
+  # context: issue_status_updated notified_events
+  def test_create_should_send_email_notification_with_issue_status_updated
+    Setting.notified_events = ['issue_status_updated']
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    issue.init_journal(user, issue)
+    issue.status = IssueStatus.last
+
+    assert issue.save
+    assert_equal 1, ActionMailer::Base.deliveries.size
+  end
+
+  def test_create_should_not_send_email_notification_without_issue_status_updated
+    Setting.notified_events = []
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    issue.init_journal(user, issue)
+    issue.status = IssueStatus.last
+    
+    assert issue.save
+    assert_equal 0, ActionMailer::Base.deliveries.size
+  end
+
+  # context: issue_priority_updated notified_events
+  def test_create_should_send_email_notification_with_issue_priority_updated
+    Setting.notified_events = ['issue_priority_updated']
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    issue.init_journal(user, issue)
+    issue.priority = IssuePriority.last
+
+    assert issue.save
+    assert_equal 1, ActionMailer::Base.deliveries.size
+  end
+
+  def test_create_should_not_send_email_notification_without_issue_priority_updated
+    Setting.notified_events = []
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    issue.init_journal(user, issue)
+    issue.priority = IssuePriority.last
+    
+    assert issue.save
+    assert_equal 0, ActionMailer::Base.deliveries.size
+  end
+
+end
--- a/test/unit/lib/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
 V 38
-/svn/!svn/ver/4072/trunk/test/unit/lib
+/svn/!svn/ver/4388/trunk/test/unit/lib
 END
 redmine_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 54
-/svn/!svn/ver/4013/trunk/test/unit/lib/redmine_test.rb
+/svn/!svn/ver/4388/trunk/test/unit/lib/redmine_test.rb
 END
--- a/test/unit/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-07T22:38:10.728638Z
+4388
+jplang
 
 
 
@@ -35,11 +35,11 @@
 
 
 
-2010-09-23T14:37:45.503764Z
+2010-11-19T13:04:41.321681Z
 8adb9955639998853d35f1a1181cd654
-2010-08-22T18:42:00.112555Z
-4013
-edavis10
+2010-11-07T22:38:10.728638Z
+4388
+jplang
 
 
 
--- a/test/unit/lib/redmine/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4072/trunk/test/unit/lib/redmine
+/svn/!svn/ver/4376/trunk/test/unit/lib/redmine
 END
 menu_manager_test.rb
 K 25
@@ -25,7 +25,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/3034/trunk/test/unit/lib/redmine/i18n_test.rb
+/svn/!svn/ver/4183/trunk/test/unit/lib/redmine/i18n_test.rb
 END
 hook_test.rb
 K 25
@@ -51,3 +51,9 @@
 V 67
 /svn/!svn/ver/3028/trunk/test/unit/lib/redmine/unified_diff_test.rb
 END
+notifiable_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/4222/trunk/test/unit/lib/redmine/notifiable_test.rb
+END
--- a/test/unit/lib/redmine/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-06T17:47:27.890964Z
+4376
+jplang
 
 
 
@@ -134,11 +134,11 @@
 
 
 
-2010-09-23T14:37:45.491768Z
-f6356bf322f1fd30abbdaedc92e615f6
-2009-11-12T22:00:29.290944Z
-3034
-jplang
+2010-11-19T13:04:41.309564Z
+a134c7beb75336db19db53dcfdb95250
+2010-09-26T17:13:52.794850Z
+4183
+edavis10
 has-props
 
 
@@ -160,7 +160,7 @@
 
 
 
-3669
+3798
 
 hook_test.rb
 file
@@ -307,6 +307,40 @@
 wiki_formatting
 dir
 
+notifiable_test.rb
+file
+
+
+
+
+2010-11-19T13:04:41.309564Z
+5bcb90581762b7478b6fd175746846e7
+2010-09-28T21:09:06.467392Z
+4222
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1323
+
 menu_manager
 dir
 
--- a/test/unit/lib/redmine/.svn/text-base/i18n_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/.svn/text-base/i18n_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -29,7 +29,7 @@
     set_language_if_valid 'en'
     today = Date.today
     Setting.date_format = ''    
-    assert_equal I18n.l(today), format_date(today)
+    assert_equal I18n.l(today, :count => today.strftime('%d')), format_date(today)
   end
   
   def test_date_format
@@ -47,7 +47,7 @@
         format_date(Date.today)
         format_time(Time.now)
         format_time(Time.now, false)
-        assert_not_equal 'default', ::I18n.l(Date.today, :format => :default), "date.formats.default missing in #{lang}"
+        assert_not_equal 'default', ::I18n.l(Date.today, :count => Date.today.strftime('%d'), :format => :default), "date.formats.default missing in #{lang}"
         assert_not_equal 'time',    ::I18n.l(Time.now, :format => :time),      "time.formats.time missing in #{lang}"
       end
       assert l('date.day_names').is_a?(Array)
@@ -63,8 +63,8 @@
     now = Time.now
     Setting.date_format = ''
     Setting.time_format = ''    
-    assert_equal I18n.l(now), format_time(now)
-    assert_equal I18n.l(now, :format => :time), format_time(now, false)
+    assert_equal I18n.l(now, :count => now.strftime('%d')), format_time(now)
+    assert_equal I18n.l(now, :count => now.strftime('%d'), :format => :time), format_time(now, false)
   end
   
   def test_time_format
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/.svn/text-base/notifiable_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,31 @@
+# redMine - project management software
+# Copyright (C) 2006-2008  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../../../test_helper'
+
+class Redmine::NotifiableTest < ActiveSupport::TestCase
+  def setup
+  end
+
+  def test_all
+    assert_equal 11, Redmine::Notifiable.all.length
+
+    %w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable|
+      assert Redmine::Notifiable.all.collect(&:name).include?(notifiable), "missing #{notifiable}"
+    end
+  end
+end
--- a/test/unit/lib/redmine/helpers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/helpers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/helpers
 http://redmine.rubyforge.org/svn
 
--- a/test/unit/lib/redmine/i18n_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/i18n_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -29,7 +29,7 @@
     set_language_if_valid 'en'
     today = Date.today
     Setting.date_format = ''    
-    assert_equal I18n.l(today), format_date(today)
+    assert_equal I18n.l(today, :count => today.strftime('%d')), format_date(today)
   end
   
   def test_date_format
@@ -47,7 +47,7 @@
         format_date(Date.today)
         format_time(Time.now)
         format_time(Time.now, false)
-        assert_not_equal 'default', ::I18n.l(Date.today, :format => :default), "date.formats.default missing in #{lang}"
+        assert_not_equal 'default', ::I18n.l(Date.today, :count => Date.today.strftime('%d'), :format => :default), "date.formats.default missing in #{lang}"
         assert_not_equal 'time',    ::I18n.l(Time.now, :format => :time),      "time.formats.time missing in #{lang}"
       end
       assert l('date.day_names').is_a?(Array)
@@ -63,8 +63,8 @@
     now = Time.now
     Setting.date_format = ''
     Setting.time_format = ''    
-    assert_equal I18n.l(now), format_time(now)
-    assert_equal I18n.l(now, :format => :time), format_time(now, false)
+    assert_equal I18n.l(now, :count => now.strftime('%d')), format_time(now)
+    assert_equal I18n.l(now, :count => now.strftime('%d'), :format => :time), format_time(now, false)
   end
   
   def test_time_format
--- a/test/unit/lib/redmine/menu_manager/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/menu_manager/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/menu_manager
 http://redmine.rubyforge.org/svn
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/notifiable_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -0,0 +1,31 @@
+# redMine - project management software
+# Copyright (C) 2006-2008  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../../../test_helper'
+
+class Redmine::NotifiableTest < ActiveSupport::TestCase
+  def setup
+  end
+
+  def test_all
+    assert_equal 11, Redmine::Notifiable.all.length
+
+    %w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable|
+      assert Redmine::Notifiable.all.collect(&:name).include?(notifiable), "missing #{notifiable}"
+    end
+  end
+end
--- a/test/unit/lib/redmine/scm/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/scm/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 50
-/svn/!svn/ver/3925/trunk/test/unit/lib/redmine/scm
+/svn/!svn/ver/4189/trunk/test/unit/lib/redmine/scm
 END
--- a/test/unit/lib/redmine/scm/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/scm/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/scm
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-08T07:07:30.284069Z
-3925
-jbbarth
+2010-09-26T21:54:52.929683Z
+4189
+edavis10
 
 
 
--- a/test/unit/lib/redmine/scm/adapters/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/scm/adapters/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/3925/trunk/test/unit/lib/redmine/scm/adapters
+/svn/!svn/ver/4189/trunk/test/unit/lib/redmine/scm/adapters
 END
 subversion_adapter_test.rb
 K 25
@@ -13,7 +13,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 79
-/svn/!svn/ver/3925/trunk/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb
+/svn/!svn/ver/4189/trunk/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb
 END
 mercurial_adapter_test.rb
 K 25
--- a/test/unit/lib/redmine/scm/adapters/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/scm/adapters/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/scm/adapters
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-08T07:07:30.284069Z
-3925
-jbbarth
+2010-09-26T21:54:52.929683Z
+4189
+edavis10
 
 
 
@@ -66,11 +66,11 @@
 
 
 
-2010-09-23T14:37:45.499807Z
-2a16f983128223e9db99adc3f1fffa75
-2010-08-08T07:07:30.284069Z
-3925
-jbbarth
+2010-11-19T13:04:41.277281Z
+e02110174147a44bc84b41d56c9bde65
+2010-09-26T21:54:52.929683Z
+4189
+edavis10
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-1472
+2992
 
 mercurial_adapter_test.rb
 file
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/git_adapter_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/git_adapter_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -13,13 +13,25 @@
     end
 
     def test_getting_all_revisions
-      assert_equal 13, @adapter.revisions('',nil,nil,:all => true).length
+      assert_equal 15, @adapter.revisions('',nil,nil,:all => true).length
     end
     
     def test_getting_certain_revisions
       assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
     end
     
+    def test_getting_revisions_with_spaces_in_filename
+      assert_equal 1, @adapter.revisions("filemane with spaces.txt", nil, nil, :all => true).length
+    end
+    
+    def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
+      assert_equal " filename with a leading space.txt ", @adapter.revisions(" filename with a leading space.txt ", nil, nil, :all => true)[0].paths[0][:path]
+    end
+    
+    def test_getting_entries_with_leading_and_trailing_spaces_in_filename
+      assert_equal " filename with a leading space.txt ", @adapter.entries('', '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
+    end
+    
     def test_annotate
       annotate = @adapter.annotate('sources/watchers_controller.rb')
       assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
@@ -34,6 +46,22 @@
       assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
       assert_equal 2, annotate.lines.size
     end
+    
+    def test_last_rev
+      last_rev = @adapter.lastrev("README", "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
+      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
+      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
+      assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
+      assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
+    end
+    
+    def test_last_rev_with_spaces_in_filename
+      last_rev = @adapter.lastrev("filemane with spaces.txt", "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
+      assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
+      assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
+      assert_equal "Felix Schäfer <felix@fachschaften.org>", last_rev.author
+      assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
+    end
   else
     puts "Git test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -13,13 +13,25 @@
     end
 
     def test_getting_all_revisions
-      assert_equal 13, @adapter.revisions('',nil,nil,:all => true).length
+      assert_equal 15, @adapter.revisions('',nil,nil,:all => true).length
     end
     
     def test_getting_certain_revisions
       assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
     end
     
+    def test_getting_revisions_with_spaces_in_filename
+      assert_equal 1, @adapter.revisions("filemane with spaces.txt", nil, nil, :all => true).length
+    end
+    
+    def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
+      assert_equal " filename with a leading space.txt ", @adapter.revisions(" filename with a leading space.txt ", nil, nil, :all => true)[0].paths[0][:path]
+    end
+    
+    def test_getting_entries_with_leading_and_trailing_spaces_in_filename
+      assert_equal " filename with a leading space.txt ", @adapter.entries('', '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
+    end
+    
     def test_annotate
       annotate = @adapter.annotate('sources/watchers_controller.rb')
       assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
@@ -34,6 +46,22 @@
       assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
       assert_equal 2, annotate.lines.size
     end
+    
+    def test_last_rev
+      last_rev = @adapter.lastrev("README", "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
+      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
+      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
+      assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
+      assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
+    end
+    
+    def test_last_rev_with_spaces_in_filename
+      last_rev = @adapter.lastrev("filemane with spaces.txt", "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
+      assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
+      assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
+      assert_equal "Felix Schäfer <felix@fachschaften.org>", last_rev.author
+      assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
+    end
   else
     puts "Git test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/lib/redmine/wiki_formatting/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/wiki_formatting/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,17 +1,17 @@
 K 25
 svn:wc:ra_dav:version-url
 V 62
-/svn/!svn/ver/3605/trunk/test/unit/lib/redmine/wiki_formatting
+/svn/!svn/ver/4376/trunk/test/unit/lib/redmine/wiki_formatting
 END
 textile_formatter_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 88
-/svn/!svn/ver/3605/trunk/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb
+/svn/!svn/ver/4374/trunk/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb
 END
 macros_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 77
-/svn/!svn/ver/2317/trunk/test/unit/lib/redmine/wiki_formatting/macros_test.rb
+/svn/!svn/ver/4376/trunk/test/unit/lib/redmine/wiki_formatting/macros_test.rb
 END
--- a/test/unit/lib/redmine/wiki_formatting/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/wiki_formatting/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/wiki_formatting
 http://redmine.rubyforge.org/svn
 
 
 
-2010-03-20T12:54:23.540906Z
-3605
+2010-11-06T17:47:27.890964Z
+4376
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2010-09-23T14:37:45.503764Z
-b8ba1b21fe83c63c449dd87d6e0a3e29
-2010-03-20T12:54:23.540906Z
-3605
+2010-11-19T13:04:41.297604Z
+b45c5a45c4f044bae05fc85dba330c90
+2010-11-06T13:29:23.489999Z
+4374
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-3038
+3468
 
 macros_test.rb
 file
@@ -66,11 +66,11 @@
 
 
 
-2010-09-23T14:37:45.503764Z
-a1049f9d77597fa44715313283e4fdf6
-2009-01-26T01:47:51.253124Z
-2317
-edavis10
+2010-11-19T13:04:41.297604Z
+b78c91f5e9e344345217756cb443e096
+2010-11-06T17:47:27.890964Z
+4376
+jplang
 has-props
 
 
@@ -92,5 +92,5 @@
 
 
 
-4009
+4117
 
--- a/test/unit/lib/redmine/wiki_formatting/.svn/text-base/macros_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/wiki_formatting/.svn/text-base/macros_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -20,6 +20,9 @@
 class Redmine::WikiFormatting::MacrosTest < HelperTestCase
   include ApplicationHelper
   include ActionView::Helpers::TextHelper
+  include ActionView::Helpers::SanitizeHelper
+  extend ActionView::Helpers::SanitizeHelper::ClassMethods
+  
   fixtures :projects, :roles, :enabled_modules, :users,
                       :repositories, :changesets, 
                       :trackers, :issue_statuses, :issues,
--- a/test/unit/lib/redmine/wiki_formatting/.svn/text-base/textile_formatter_test.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/wiki_formatting/.svn/text-base/textile_formatter_test.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -78,6 +78,14 @@
     )
   end
   
+  def test_acronyms
+    assert_html_output(
+      'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>',
+      '2 letters JP(Jean-Philippe) acronym' => '2 letters <acronym title="Jean-Philippe">JP</acronym> acronym',
+      'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted &quot;title&quot;">GPL</acronym>'
+    )
+  end
+  
   private
   
   def assert_html_output(to_test)
--- a/test/unit/lib/redmine/wiki_formatting/macros_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/wiki_formatting/macros_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -20,6 +20,9 @@
 class Redmine::WikiFormatting::MacrosTest < HelperTestCase
   include ApplicationHelper
   include ActionView::Helpers::TextHelper
+  include ActionView::Helpers::SanitizeHelper
+  extend ActionView::Helpers::SanitizeHelper::ClassMethods
+  
   fixtures :projects, :roles, :enabled_modules, :users,
                       :repositories, :changesets, 
                       :trackers, :issue_statuses, :issues,
--- a/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -78,6 +78,14 @@
     )
   end
   
+  def test_acronyms
+    assert_html_output(
+      'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>',
+      '2 letters JP(Jean-Philippe) acronym' => '2 letters <acronym title="Jean-Philippe">JP</acronym> acronym',
+      'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted &quot;title&quot;">GPL</acronym>'
+    )
+  end
+  
   private
   
   def assert_html_output(to_test)
--- a/test/unit/mail_handler_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/mail_handler_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -25,11 +25,13 @@
                    :roles,
                    :members,
                    :member_roles,
+                   :users,
                    :issues,
                    :issue_statuses,
                    :workflows,
                    :trackers,
                    :projects_trackers,
+                   :versions,
                    :enumerations,
                    :issue_categories,
                    :custom_fields,
@@ -41,6 +43,7 @@
   
   def setup
     ActionMailer::Base.deliveries.clear
+    Setting.notified_events = Redmine::Notifiable.all.collect(&:name)
   end
   
   def test_add_issue
@@ -58,6 +61,9 @@
     assert_equal '2010-01-01', issue.start_date.to_s
     assert_equal '2010-12-31', issue.due_date.to_s
     assert_equal User.find_by_login('jsmith'), issue.assigned_to
+    assert_equal Version.find_by_name('alpha'), issue.fixed_version
+    assert_equal 2.5, issue.estimated_hours
+    assert_equal 30, issue.done_ratio
     # keywords should be removed from the email body
     assert !issue.description.match(/^Project:/i)
     assert !issue.description.match(/^Status:/i)
@@ -152,7 +158,7 @@
     assert !issue.new_record?
     issue.reload
     assert issue.watched_by?(User.find_by_mail('dlopper@somenet.foo'))
-    assert_equal 1, issue.watchers.size
+    assert_equal 1, issue.watcher_user_ids.size
   end
   
   def test_add_issue_by_unknown_user
@@ -223,6 +229,34 @@
     Role.anonymous.add_permission!(:add_issues)
     assert_equal false, submit_email('ticket_without_from_header.eml')
   end
+
+  def test_add_issue_with_invalid_attributes
+    issue = submit_email('ticket_with_invalid_attributes.eml', :allow_override => 'tracker,category,priority')
+    assert issue.is_a?(Issue)
+    assert !issue.new_record?
+    issue.reload
+    assert_nil issue.assigned_to
+    assert_nil issue.start_date
+    assert_nil issue.due_date
+    assert_equal 0, issue.done_ratio
+    assert_equal 'Normal', issue.priority.to_s
+    assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
+  end
+
+  def test_add_issue_with_localized_attributes
+    User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr'
+    issue = submit_email('ticket_with_localized_attributes.eml', :allow_override => 'tracker,category,priority')
+    assert issue.is_a?(Issue)
+    assert !issue.new_record?
+    issue.reload
+    assert_equal 'New ticket on a given project', issue.subject
+    assert_equal User.find_by_login('jsmith'), issue.author
+    assert_equal Project.find(2), issue.project
+    assert_equal 'Feature request', issue.tracker.to_s
+    assert_equal 'Stock management', issue.category.to_s
+    assert_equal 'Urgent', issue.priority.to_s
+    assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
+  end
   
   def test_add_issue_with_japanese_keywords
     tracker = Tracker.create!(:name => '開発')
@@ -240,6 +274,7 @@
   end
 
   def test_add_issue_should_send_email_notification
+    Setting.notified_events = ['issue_added']
     ActionMailer::Base.deliveries.clear
     # This email contains: 'Project: onlinestore'
     issue = submit_email('ticket_on_given_project.eml')
@@ -267,6 +302,7 @@
     assert_equal '2010-01-01', issue.start_date.to_s
     assert_equal '2010-12-31', issue.due_date.to_s
     assert_equal User.find_by_login('jsmith'), issue.assigned_to
+    assert_equal 'Updated custom value', issue.custom_value_for(CustomField.find_by_name('Searchable field')).value
   end
 
   def test_add_issue_note_should_send_email_notification
@@ -333,6 +369,38 @@
       end
     end
 
+    context "with a single quoted reply (e.g. reply to a Redmine email notification)" do
+      setup do
+        Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
+      end
+
+      should "truncate the email at the delimiter with the quoted reply symbols (>)" do
+        journal = submit_email('issue_update_with_quoted_reply_above.eml')
+        assert journal.is_a?(Journal)
+        assert journal.notes.include?('An update to the issue by the sender.')
+        assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
+        assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
+
+      end
+
+    end
+    
+    context "with multiple quoted replies (e.g. reply to a reply of a Redmine email notification)" do
+      setup do
+        Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
+      end
+
+      should "truncate the email at the delimiter with the quoted reply symbols (>)" do
+        journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml')
+        assert journal.is_a?(Journal)
+        assert journal.notes.include?('An update to the issue by the sender.')
+        assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---"))
+        assert !journal.notes.include?('Looks like the JSON api for projects was missed.')
+
+      end
+
+    end
+
     context "with multiple strings" do
       setup do
         Setting.mail_handler_body_delimiters = "---\nBREAK"
--- a/test/unit/mailer_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/mailer_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -393,4 +393,21 @@
     # should restore perform_deliveries
     assert ActionMailer::Base.perform_deliveries
   end
+
+  context "layout" do
+    should "include the emails_header" do
+      with_settings(:emails_header => "*Header content*") do
+        assert Mailer.deliver_test(User.find(1))
+
+        assert_select_email do
+          assert_select ".header" do
+            assert_select "strong", :text => "Header content"
+          end
+        end
+      end
+      
+    end
+    
+  end
+  
 end
--- a/test/unit/project_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/project_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -29,7 +29,6 @@
   should_validate_presence_of :name
   should_validate_presence_of :identifier
 
-  should_validate_uniqueness_of :name
   should_validate_uniqueness_of :identifier
 
   context "associations" do
@@ -102,6 +101,7 @@
     @ecookbook.reload
     
     assert !@ecookbook.active?
+    assert @ecookbook.archived?
     assert !user.projects.include?(@ecookbook)
     # Subproject are also archived
     assert !@ecookbook.children.empty?
@@ -129,6 +129,7 @@
     assert @ecookbook.unarchive
     @ecookbook.reload
     assert @ecookbook.active?
+    assert !@ecookbook.archived?
     assert user.projects.include?(@ecookbook)
     # Subproject can now be unarchived
     @ecookbook_sub1.reload
@@ -860,6 +861,8 @@
       
       assert_nil @project.start_date
     end
+    
+    should "be tested when issues have no start date"
 
     should "be the earliest start date of it's issues" do
       early = 7.days.ago.to_date
@@ -889,6 +892,8 @@
       
       assert_nil @project.due_date
     end
+    
+    should "be tested when issues have no due date"
 
     should "be the latest due date of it's issues" do
       future = 7.days.from_now.to_date
@@ -960,4 +965,54 @@
 
     end
   end
+
+  context "#notified_users" do
+    setup do
+      @project = Project.generate!
+      @role = Role.generate!
+      
+      @user_with_membership_notification = User.generate!(:mail_notification => 'selected')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @user_with_membership_notification, :mail_notification => true)
+
+      @all_events_user = User.generate!(:mail_notification => 'all')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @all_events_user)
+
+      @no_events_user = User.generate!(:mail_notification => 'none')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @no_events_user)
+
+      @only_my_events_user = User.generate!(:mail_notification => 'only_my_events')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @only_my_events_user)
+
+      @only_assigned_user = User.generate!(:mail_notification => 'only_assigned')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @only_assigned_user)
+
+      @only_owned_user = User.generate!(:mail_notification => 'only_owner')
+      Member.generate!(:project => @project, :roles => [@role], :principal => @only_owned_user)
+    end
+    
+    should "include members with a mail notification" do
+      assert @project.notified_users.include?(@user_with_membership_notification)
+    end
+    
+    should "include users with the 'all' notification option" do
+      assert @project.notified_users.include?(@all_events_user)
+    end
+    
+    should "not include users with the 'none' notification option" do
+      assert !@project.notified_users.include?(@no_events_user)
+    end
+    
+    should "not include users with the 'only_my_events' notification option" do
+      assert !@project.notified_users.include?(@only_my_events_user)
+    end
+    
+    should "not include users with the 'only_assigned' notification option" do
+      assert !@project.notified_users.include?(@only_assigned_user)
+    end
+    
+    should "not include users with the 'only_owner' notification option" do
+      assert !@project.notified_users.include?(@only_owned_user)
+    end
+  end
+  
 end
--- a/test/unit/query_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/query_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -397,8 +397,8 @@
         group2 = Group.generate!.reload
 
         expected_group_list = [
-                               [group1.name, group1.id],
-                               [group2.name, group2.id]
+                               [group1.name, group1.id.to_s],
+                               [group2.name, group2.id.to_s]
                               ]
         assert_equal expected_group_list.sort, @query.available_filters["member_of_group"][:values].sort
       end
@@ -415,14 +415,14 @@
       end
       
       should "have a list of the Roles as values" do
-        assert @query.available_filters["assigned_to_role"][:values].include?(['Manager',1])
-        assert @query.available_filters["assigned_to_role"][:values].include?(['Developer',2])
-        assert @query.available_filters["assigned_to_role"][:values].include?(['Reporter',3])
+        assert @query.available_filters["assigned_to_role"][:values].include?(['Manager','1'])
+        assert @query.available_filters["assigned_to_role"][:values].include?(['Developer','2'])
+        assert @query.available_filters["assigned_to_role"][:values].include?(['Reporter','3'])
       end
 
       should "not include the built in Roles as values" do
-        assert ! @query.available_filters["assigned_to_role"][:values].include?(['Non member',4])
-        assert ! @query.available_filters["assigned_to_role"][:values].include?(['Anonymous',5])
+        assert ! @query.available_filters["assigned_to_role"][:values].include?(['Non member','4'])
+        assert ! @query.available_filters["assigned_to_role"][:values].include?(['Anonymous','5'])
       end
 
     end
--- a/test/unit/repository_git_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/repository_git_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -34,8 +34,8 @@
       @repository.fetch_changesets
       @repository.reload
       
-      assert_equal 13, @repository.changesets.count
-      assert_equal 22, @repository.changes.count
+      assert_equal 15, @repository.changesets.count
+      assert_equal 24, @repository.changes.count
       
       commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
       assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
@@ -57,10 +57,10 @@
       # Remove the 3 latest changesets
       @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy)
       @repository.reload
-      assert_equal 10, @repository.changesets.count
+      assert_equal 12, @repository.changesets.count
       
       @repository.fetch_changesets
-      assert_equal 13, @repository.changesets.count
+      assert_equal 15, @repository.changesets.count
     end
   else
     puts "Git test repository NOT FOUND. Skipping unit tests !!!"
--- a/test/unit/repository_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/repository_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -67,6 +67,7 @@
   
   def test_scan_changesets_for_issue_ids
     Setting.default_language = 'en'
+    Setting.notified_events = ['issue_added','issue_updated']
     
     # choosing a status to apply to fix issues
     Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
--- a/test/unit/user_test.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/test/unit/user_test.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -60,6 +60,18 @@
     user.password, user.password_confirmation = "password", "password"
     assert user.save
   end
+
+  context "User#before_create" do
+    should "set the mail_notification to the default Setting" do
+      @user1 = User.generate_with_protected!
+      assert_equal 'only_my_events', @user1.mail_notification
+
+      with_settings :default_notification_option => 'all' do
+        @user2 = User.generate_with_protected!
+        assert_equal 'all', @user2.mail_notification
+      end
+    end
+  end
   
   context "User.login" do
     should "be case-insensitive." do
@@ -285,7 +297,7 @@
   end
   
   def test_mail_notification_all
-    @jsmith.mail_notification = true
+    @jsmith.mail_notification = 'all'
     @jsmith.notified_project_ids = []
     @jsmith.save
     @jsmith.reload
@@ -293,15 +305,15 @@
   end
   
   def test_mail_notification_selected
-    @jsmith.mail_notification = false
+    @jsmith.mail_notification = 'selected'
     @jsmith.notified_project_ids = [1]
     @jsmith.save
     @jsmith.reload
     assert Project.find(1).recipients.include?(@jsmith.mail)
   end
   
-  def test_mail_notification_none
-    @jsmith.mail_notification = false
+  def test_mail_notification_only_my_events
+    @jsmith.mail_notification = 'only_my_events'
     @jsmith.notified_project_ids = []
     @jsmith.save
     @jsmith.reload
@@ -384,6 +396,23 @@
         assert ! @dlopper.allowed_to?(:delete_messages, project) #Developper
       end
     end
+
+    context "with multiple projects" do
+      should "return false if array is empty" do
+        assert ! @admin.allowed_to?(:view_project, [])
+      end
+      
+      should "return true only if user has permission on all these projects" do
+        assert @admin.allowed_to?(:view_project, Project.all)
+        assert ! @dlopper.allowed_to?(:view_project, Project.all) #cannot see Project(2)
+        assert @jsmith.allowed_to?(:edit_issues, @jsmith.projects) #Manager or Developer everywhere
+        assert ! @jsmith.allowed_to?(:delete_issue_watchers, @jsmith.projects) #Dev cannot delete_issue_watchers
+      end
+      
+      should "behave correctly with arrays of 1 project" do
+        assert ! User.anonymous.allowed_to?(:delete_issues, [Project.first])
+      end
+    end
     
     context "with options[:global]" do
       should "authorize if user has at least one role that has this permission" do
@@ -398,6 +427,72 @@
     end
   end
   
+  context "User#notify_about?" do
+    context "Issues" do
+      setup do
+        @project = Project.find(1)
+        @author = User.generate_with_protected!
+        @assignee = User.generate_with_protected!
+        @issue = Issue.generate_for_project!(@project, :assigned_to => @assignee, :author => @author)
+      end
+
+      should "be true for a user with :all" do
+        @author.update_attribute(:mail_notification, :all)
+        assert @author.notify_about?(@issue)
+      end
+      
+      should "be false for a user with :none" do
+        @author.update_attribute(:mail_notification, :none)
+        assert ! @author.notify_about?(@issue)
+      end
+      
+      should "be false for a user with :only_my_events and isn't an author, creator, or assignee" do
+        @user = User.generate_with_protected!(:mail_notification => :only_my_events)
+        assert ! @user.notify_about?(@issue)
+      end
+      
+      should "be true for a user with :only_my_events and is the author" do
+        @author.update_attribute(:mail_notification, :only_my_events)
+        assert @author.notify_about?(@issue)
+      end
+      
+      should "be true for a user with :only_my_events and is the assignee" do
+        @assignee.update_attribute(:mail_notification, :only_my_events)
+        assert @assignee.notify_about?(@issue)
+      end
+      
+      should "be true for a user with :only_assigned and is the assignee" do
+        @assignee.update_attribute(:mail_notification, :only_assigned)
+        assert @assignee.notify_about?(@issue)
+      end
+      
+      should "be false for a user with :only_assigned and is not the assignee" do
+        @author.update_attribute(:mail_notification, :only_assigned)
+        assert ! @author.notify_about?(@issue)
+      end
+      
+      should "be true for a user with :only_owner and is the author" do
+        @author.update_attribute(:mail_notification, :only_owner)
+        assert @author.notify_about?(@issue)
+      end
+      
+      should "be false for a user with :only_owner and is not the author" do
+        @assignee.update_attribute(:mail_notification, :only_owner)
+        assert ! @assignee.notify_about?(@issue)
+      end
+      
+      should "be false if the mail_notification is anything else" do
+        @assignee.update_attribute(:mail_notification, :somthing_else)
+        assert ! @assignee.notify_about?(@issue)
+      end
+      
+    end
+
+    context "other events" do
+      should 'be added and tested'
+    end
+  end
+  
   if Object.const_defined?(:OpenID)
     
   def test_setting_identity_url
--- a/tmp/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/tmp/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/tmp
 http://redmine.rubyforge.org/svn
 
--- a/tmp/cache/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/tmp/cache/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/tmp/cache
 http://redmine.rubyforge.org/svn
 
--- a/tmp/sessions/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/tmp/sessions/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/tmp/sessions
 http://redmine.rubyforge.org/svn
 
--- a/tmp/sockets/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/tmp/sockets/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/tmp/sockets
 http://redmine.rubyforge.org/svn
 
--- a/tmp/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/tmp/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/tmp/test
 http://redmine.rubyforge.org/svn
 
--- a/vendor/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 31
-/svn/!svn/ver/4094/trunk/vendor
+/svn/!svn/ver/4406/trunk/vendor
 END
--- a/vendor/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-17T04:06:40.671348Z
-4094
-edavis10
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 has-props
 
 
--- a/vendor/gems/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/gems/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/gems
 http://redmine.rubyforge.org/svn
 
--- a/vendor/gems/rubytree-0.5.2/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/gems/rubytree-0.5.2/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2
 http://redmine.rubyforge.org/svn
 
--- a/vendor/gems/rubytree-0.5.2/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/gems/rubytree-0.5.2/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/lib/tree
 http://redmine.rubyforge.org/svn
 
--- a/vendor/gems/rubytree-0.5.2/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/gems/rubytree-0.5.2/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/test
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 39
-/svn/!svn/ver/4094/trunk/vendor/plugins
+/svn/!svn/ver/4406/trunk/vendor/plugins
 END
--- a/vendor/plugins/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-17T04:06:40.671348Z
-4094
-edavis10
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 
 
 
@@ -41,10 +41,10 @@
 engines
 dir
 
-classic_pagination
+coderay-0.9.2
 dir
 
-coderay-0.9.2
+classic_pagination
 dir
 
 acts_as_versioned
--- a/vendor/plugins/acts_as_activity_provider/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_activity_provider/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_activity_provider
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_activity_provider/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_activity_provider/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_activity_provider/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_attachable/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_attachable/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_attachable
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_attachable/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_attachable/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_attachable/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_customizable/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_customizable/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 60
-/svn/!svn/ver/3573/trunk/vendor/plugins/acts_as_customizable
+/svn/!svn/ver/4382/trunk/vendor/plugins/acts_as_customizable
 END
 init.rb
 K 25
--- a/vendor/plugins/acts_as_customizable/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_customizable/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_customizable
 http://redmine.rubyforge.org/svn
 
 
 
-2010-03-13T14:56:49.379682Z
-3573
+2010-11-07T14:15:01.891476Z
+4382
 jplang
 
 
--- a/vendor/plugins/acts_as_customizable/lib/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_customizable/lib/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/3573/trunk/vendor/plugins/acts_as_customizable/lib
+/svn/!svn/ver/4382/trunk/vendor/plugins/acts_as_customizable/lib
 END
 acts_as_customizable.rb
 K 25
 svn:wc:ra_dav:version-url
 V 88
-/svn/!svn/ver/3573/trunk/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb
+/svn/!svn/ver/4382/trunk/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb
 END
--- a/vendor/plugins/acts_as_customizable/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_customizable/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_customizable/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-03-13T14:56:49.379682Z
-3573
+2010-11-07T14:15:01.891476Z
+4382
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2010-09-23T14:37:45.539808Z
-9d2f2e3d8ac21a68cbaafca4788c2f1d
-2010-03-13T14:56:49.379682Z
-3573
+2010-11-19T13:04:50.920916Z
+1b80419ad25063ffc8725be3174c8fb8
+2010-11-07T14:15:01.891476Z
+4382
 jplang
 has-props
 
@@ -58,5 +58,5 @@
 
 
 
-3715
+3825
 
--- a/vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -62,6 +62,10 @@
           @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:custom_field => x, :value => nil) }
         end
         
+        def visible_custom_field_values
+          custom_field_values.select(&:visible?)
+        end
+        
         def custom_field_values_changed?
           @custom_field_values_changed == true
         end
--- a/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -62,6 +62,10 @@
           @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:custom_field => x, :value => nil) }
         end
         
+        def visible_custom_field_values
+          custom_field_values.select(&:visible?)
+        end
+        
         def custom_field_values_changed?
           @custom_field_values_changed == true
         end
--- a/vendor/plugins/acts_as_event/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_event/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_event
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_event/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_event/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_event/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_list/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_list/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_list/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_list/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_list/lib/active_record/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_list/lib/active_record/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib/active_record
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib/active_record/acts
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_list/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_list/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/test
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_searchable/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_searchable/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_searchable
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_searchable/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_searchable/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_searchable/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_tree/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_tree/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_tree/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_tree/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_tree/lib/active_record/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_tree/lib/active_record/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib/active_record
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib/active_record/acts
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_tree/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_tree/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/test
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_tree/test/fixtures/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_tree/test/fixtures/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/test/fixtures
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_versioned/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_versioned/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_versioned/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_versioned/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_versioned/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_versioned/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test/fixtures
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test/fixtures/migrations
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_watchable/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_watchable/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_watchable
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/acts_as_watchable/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/acts_as_watchable/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_watchable/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/awesome_nested_set/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/3573/trunk/vendor/plugins/awesome_nested_set
+/svn/!svn/ver/4406/trunk/vendor/plugins/awesome_nested_set
 END
 awesome_nested_set.gemspec
 K 25
--- a/vendor/plugins/awesome_nested_set/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set
 http://redmine.rubyforge.org/svn
 
 
 
-2010-03-13T14:56:49.379682Z
-3573
+2010-11-14T16:24:21.989522Z
+4406
 jplang
 
 
--- a/vendor/plugins/awesome_nested_set/lib/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/lib/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
 V 62
-/svn/!svn/ver/3573/trunk/vendor/plugins/awesome_nested_set/lib
+/svn/!svn/ver/4406/trunk/vendor/plugins/awesome_nested_set/lib
 END
 awesome_nested_set.rb
 K 25
 svn:wc:ra_dav:version-url
 V 84
-/svn/!svn/ver/3573/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb
+/svn/!svn/ver/4406/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb
 END
--- a/vendor/plugins/awesome_nested_set/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-03-13T14:56:49.379682Z
-3573
+2010-11-14T16:24:21.989522Z
+4406
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2010-09-23T14:37:45.591804Z
-a881f7ea58b493a96550b4457057cddb
-2010-03-13T14:56:49.379682Z
-3573
+2010-11-19T13:04:50.944921Z
+e8fd989882fd3a10519da66c2a73e982
+2010-11-14T16:24:21.989522Z
+4406
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-21535
+21530
 
 awesome_nested_set
 dir
--- a/vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -154,7 +154,7 @@
         def each_root_valid?(roots_to_validate)
           left = right = 0
           roots_to_validate.all? do |root|
-            returning(root.left > left && root.right > right) do
+            (root.left > left && root.right > right).tap do
               left = root.left
               right = root.right
             end
--- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -154,7 +154,7 @@
         def each_root_valid?(roots_to_validate)
           left = right = 0
           roots_to_validate.all? do |root|
-            returning(root.left > left && root.right > right) do
+            (root.left > left && root.right > right).tap do
               left = root.left
               right = root.right
             end
--- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/awesome_nested_set/rails/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/rails/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/rails
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/awesome_nested_set/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/awesome_nested_set
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/awesome_nested_set/test/db/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/test/db/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/db
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/fixtures
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/classic_pagination/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/classic_pagination/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/classic_pagination/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/classic_pagination/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/classic_pagination/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/classic_pagination/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/test
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/classic_pagination/test/fixtures/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/classic_pagination/test/fixtures/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/test/fixtures
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/coderay-0.9.2/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/coderay-0.9.2/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/coderay-0.9.2/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/coderay-0.9.2/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders
 http://redmine.rubyforge.org/svn
 
@@ -162,6 +162,40 @@
 
 835
 
+count.rb
+file
+
+
+
+
+2010-09-23T14:37:45.643761Z
+c262d84ddbdf37e99ff6bcf6dd6a66c2
+2010-03-16T20:29:12.319937Z
+3592
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+230
+
 lines_of_code.rb
 file
 
@@ -196,40 +230,6 @@
 
 2395
 
-count.rb
-file
-
-
-
-
-2010-09-23T14:37:45.643761Z
-c262d84ddbdf37e99ff6bcf6dd6a66c2
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-230
-
 xml.rb
 file
 
@@ -298,6 +298,9 @@
 
 236
 
+html
+dir
+
 yaml.rb
 file
 
@@ -332,9 +335,6 @@
 
 264
 
-html
-dir
-
 html.rb
 file
 
@@ -369,6 +369,74 @@
 
 7856
 
+comment_filter.rb
+file
+
+
+
+
+2010-09-23T14:37:45.643761Z
+32f2d1a9db6f58636d3946a43b5a60f0
+2010-03-16T20:29:12.319937Z
+3592
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+808
+
+statistic.rb
+file
+
+
+
+
+2010-09-23T14:37:45.647759Z
+49017735ef679f73dd65795e30d8e5c7
+2010-03-16T20:29:12.319937Z
+3592
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1800
+
 term.rb
 file
 
@@ -403,74 +471,6 @@
 
 4324
 
-statistic.rb
-file
-
-
-
-
-2010-09-23T14:37:45.647759Z
-49017735ef679f73dd65795e30d8e5c7
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1800
-
-comment_filter.rb
-file
-
-
-
-
-2010-09-23T14:37:45.643761Z
-32f2d1a9db6f58636d3946a43b5a60f0
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-808
-
 json.rb
 file
 
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/helpers
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners
 http://redmine.rubyforge.org/svn
 
@@ -26,11 +26,79 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+ruby
+dir
+
 java
 dir
 
-ruby
-dir
+ruby.rb
+file
+
+
+
+
+2010-09-23T14:37:45.675761Z
+4a49513a2bda4483a1bfaeba8e57fb2c
+2010-03-16T20:29:12.319937Z
+3592
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+13715
+
+python.rb
+file
+
+
+
+
+2010-09-23T14:37:45.675761Z
+939e009d9b197cb6437646be82c02982
+2010-03-16T20:29:12.319937Z
+3592
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9190
 
 java.rb
 file
@@ -66,14 +134,14 @@
 
 5046
 
-python.rb
+c.rb
 file
 
 
 
 
-2010-09-23T14:37:45.675761Z
-939e009d9b197cb6437646be82c02982
+2010-09-23T14:37:45.667815Z
+299db2bdce8368d0bc6d90f5839c87ee
 2010-03-16T20:29:12.319937Z
 3592
 jplang
@@ -98,41 +166,7 @@
 
 
 
-9190
-
-ruby.rb
-file
-
-
-
-
-2010-09-23T14:37:45.675761Z
-4a49513a2bda4483a1bfaeba8e57fb2c
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-13715
+5408
 
 cpp.rb
 file
@@ -168,40 +202,6 @@
 
 6286
 
-c.rb
-file
-
-
-
-
-2010-09-23T14:37:45.667815Z
-299db2bdce8368d0bc6d90f5839c87ee
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5408
-
 groovy.rb
 file
 
@@ -236,6 +236,40 @@
 
 8521
 
+rhtml.rb
+file
+
+
+
+
+2010-09-23T14:37:45.675761Z
+456da0b0587037dce29f70bdb4d42253
+2010-03-16T20:29:12.319937Z
+3592
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1526
+
 debug.rb
 file
 
@@ -270,40 +304,6 @@
 
 1281
 
-rhtml.rb
-file
-
-
-
-
-2010-09-23T14:37:45.675761Z
-456da0b0587037dce29f70bdb4d42253
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1526
-
 php.rb
 file
 
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/styles
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 47
-/svn/!svn/ver/4094/trunk/vendor/plugins/engines
+/svn/!svn/ver/4406/trunk/vendor/plugins/engines
 END
 Rakefile
 K 25
--- a/vendor/plugins/engines/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-17T04:06:40.671348Z
-4094
-edavis10
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 
 
 
--- a/vendor/plugins/engines/generators/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/generators/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/2904/trunk/vendor/plugins/engines/generators
+/svn/!svn/ver/4406/trunk/vendor/plugins/engines/generators
 END
--- a/vendor/plugins/engines/generators/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/generators/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators
 http://redmine.rubyforge.org/svn
 
 
 
-2009-10-07T16:43:50.656336Z
-2904
-edavis10
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 
 
 
--- a/vendor/plugins/engines/generators/plugin_migration/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/generators/plugin_migration/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 75
-/svn/!svn/ver/2904/trunk/vendor/plugins/engines/generators/plugin_migration
+/svn/!svn/ver/4406/trunk/vendor/plugins/engines/generators/plugin_migration
 END
 plugin_migration_generator.rb
 K 25
 svn:wc:ra_dav:version-url
 V 105
-/svn/!svn/ver/2904/trunk/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb
+/svn/!svn/ver/4406/trunk/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb
 END
 USAGE
 K 25
--- a/vendor/plugins/engines/generators/plugin_migration/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/generators/plugin_migration/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration
 http://redmine.rubyforge.org/svn
 
 
 
-2009-10-07T16:43:50.656336Z
-2904
-edavis10
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-23T14:37:45.691758Z
-e7efe6b1595915b993b92a7804dd810b
-2009-10-07T16:43:50.656336Z
-2904
-edavis10
+2010-11-19T13:04:50.916901Z
+3f4805cb1e4a8b8a3ed180f22d81c285
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-3571
+3565
 
 USAGE
 file
--- a/vendor/plugins/engines/generators/plugin_migration/.svn/text-base/plugin_migration_generator.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/generators/plugin_migration/.svn/text-base/plugin_migration_generator.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -76,7 +76,7 @@
     # plugin names involved is shorter than 230 characters that one will be
     # used. Otherwise a shorter name will be returned.
     def build_migration_name
-      returning descriptive_migration_name do |name|        
+      descriptive_migration_name.tap do |name|        
         name.replace short_migration_name if name.length > MAX_FILENAME_LENGTH
       end
     end
--- a/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -76,7 +76,7 @@
     # plugin names involved is shorter than 230 characters that one will be
     # used. Otherwise a shorter name will be returned.
     def build_migration_name
-      returning descriptive_migration_name do |name|        
+      descriptive_migration_name.tap do |name|        
         name.replace short_migration_name if name.length > MAX_FILENAME_LENGTH
       end
     end
--- a/vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration/templates
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/lib/engines/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/lib/engines/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/lib/engines/plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/lib/engines/plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/rails_extensions
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/tasks/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/tasks/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/tasks
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/controllers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/controllers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/controllers/namespace/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/controllers/namespace/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/helpers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/helpers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/helpers
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/models/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/models/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/models
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/things/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/things/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/things
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/views/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/views/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/app_and_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/views/namespace/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/views/namespace/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace/app_and_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/views/notify_mail/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/views/notify_mail/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/notify_mail
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/plugin_mail
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/functional/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/functional/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/functional
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/models
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/locales
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/models
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/locales
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/not_a_plugin
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/not_a_plugin/public
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/controllers
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/assets
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/public
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/public/subfolder
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app/things
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_load_path/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_load_path/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_load_path
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_migration/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_migration/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration/db
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration/db/migrate
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_routing/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_routing/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/config
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_testing/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_testing/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/app
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test/fixtures
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test/unit
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/unit/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/unit/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/unit
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/engines/test/unit/test_testing/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/engines/test/unit/test_testing/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/unit/test_testing
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/gravatar/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/gravatar/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/4072/trunk/vendor/plugins/gravatar
+/svn/!svn/ver/4406/trunk/vendor/plugins/gravatar
 END
 Rakefile
 K 25
--- a/vendor/plugins/gravatar/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/gravatar/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 
 
 
--- a/vendor/plugins/gravatar/lib/.svn/all-wcprops	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/gravatar/lib/.svn/all-wcprops	Fri Nov 19 13:24:41 2010 +0000
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/4072/trunk/vendor/plugins/gravatar/lib
+/svn/!svn/ver/4406/trunk/vendor/plugins/gravatar/lib
 END
 gravatar.rb
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/4072/trunk/vendor/plugins/gravatar/lib/gravatar.rb
+/svn/!svn/ver/4406/trunk/vendor/plugins/gravatar/lib/gravatar.rb
 END
--- a/vendor/plugins/gravatar/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/gravatar/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-24T12:48:29.639851Z
-a988835a981d11a6fb73f61ba01e56e4
-2010-09-10T03:09:02.311267Z
-4072
-edavis10
+2010-11-19T13:04:50.928934Z
+a25a3e98e0d582955ee8fd520f424273
+2010-11-14T16:24:21.989522Z
+4406
+jplang
 
 
 
@@ -58,5 +58,5 @@
 
 
 
-3076
+3070
 
--- a/vendor/plugins/gravatar/lib/.svn/text-base/gravatar.rb.svn-base	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/gravatar/lib/.svn/text-base/gravatar.rb.svn-base	Fri Nov 19 13:24:41 2010 +0000
@@ -71,7 +71,7 @@
       email_hash = Digest::MD5.hexdigest(email)
       options = DEFAULT_OPTIONS.merge(options)
       options[:default] = CGI::escape(options[:default]) unless options[:default].nil?
-      returning gravatar_api_url(email_hash, options.delete(:ssl)) do |url|
+      gravatar_api_url(email_hash, options.delete(:ssl)).tap do |url|
         opts = []
         [:rating, :size, :default].each do |opt|
           unless options[opt].nil?
--- a/vendor/plugins/gravatar/lib/gravatar.rb	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/gravatar/lib/gravatar.rb	Fri Nov 19 13:24:41 2010 +0000
@@ -71,7 +71,7 @@
       email_hash = Digest::MD5.hexdigest(email)
       options = DEFAULT_OPTIONS.merge(options)
       options[:default] = CGI::escape(options[:default]) unless options[:default].nil?
-      returning gravatar_api_url(email_hash, options.delete(:ssl)) do |url|
+      gravatar_api_url(email_hash, options.delete(:ssl)).tap do |url|
         opts = []
         [:rating, :size, :default].each do |opt|
           unless options[opt].nil?
--- a/vendor/plugins/gravatar/spec/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/gravatar/spec/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar/spec
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/open_id_authentication/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/open_id_authentication/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/open_id_authentication/generators/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/open_id_authentication/generators/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/open_id_authentication/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/open_id_authentication/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/open_id_authentication/tasks/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/open_id_authentication/tasks/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/tasks
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/open_id_authentication/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/open_id_authentication/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/test
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/prepend_engine_views/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/prepend_engine_views/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/prepend_engine_views
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/rfpdf/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/rfpdf/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/rfpdf/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/rfpdf/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/rfpdf/lib/rfpdf/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/lib/rfpdf
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/rfpdf/test/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/rfpdf/test/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/test
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap
 http://redmine.rubyforge.org/svn
 
--- a/vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries	Fri Sep 24 14:06:04 2010 +0100
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries	Fri Nov 19 13:24:41 2010 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4173
+4411
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests
 http://redmine.rubyforge.org/svn