Compare commits

..
1 Commits
Author SHA1 Message Date
Jean-Philippe Lang b1b08e2c89 tagged version 2.2.0
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/tags/2.2.0@11045 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-18 12:43:14 +00:00
39 changed files with 2731 additions and 2883 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
source 'http://rubygems.org'
gem 'rails', '3.2.12'
gem 'rails', '3.2.9'
gem "jquery-rails", "~> 2.0.2"
gem "i18n", "~> 0.6.0"
gem "coderay", "~> 1.0.6"
+9 -10
View File
@@ -147,16 +147,15 @@ class MyController < ApplicationController
# params[:block] : id of the block to add
def add_block
block = params[:block].to_s.underscore
if block.present? && BLOCKS.key?(block)
@user = User.current
layout = @user.pref[:my_page_layout] || {}
# remove if already present in a group
%w(top left right).each {|f| (layout[f] ||= []).delete block }
# add it on top
layout['top'].unshift block
@user.pref[:my_page_layout] = layout
@user.pref.save
end
(render :nothing => true; return) unless block && (BLOCKS.keys.include? block)
@user = User.current
layout = @user.pref[:my_page_layout] || {}
# remove if already present in a group
%w(top left right).each {|f| (layout[f] ||= []).delete block }
# add it on top
layout['top'].unshift block
@user.pref[:my_page_layout] = layout
@user.pref.save
redirect_to :action => 'page_layout'
end
+6 -8
View File
@@ -597,9 +597,8 @@ module ApplicationHelper
def parse_inline_attachments(text, project, obj, attr, only_path, options)
# when using an image link, try to use an attachment, if possible
attachments = options[:attachments] || []
attachments += obj.attachments if obj.respond_to?(:attachments)
if attachments.present?
if options[:attachments] || (obj && obj.respond_to?(:attachments))
attachments = options[:attachments] || obj.attachments
text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m|
filename, ext, alt, alttext = $1.downcase, $2, $3, $4
# search for the picture in attachments
@@ -704,11 +703,10 @@ module ApplicationHelper
# identifier:document:"Some document"
# identifier:version:1.0.0
# identifier:source:some/file
def parse_redmine_links(text, default_project, obj, attr, only_path, options)
text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(([a-z0-9\-_]+):)?(attachment|document|version|forum|news|message|project|commit|source|export)?(((#)|((([a-z0-9\-_]+)\|)?(r)))((\d+)((#note)?-(\d+))?)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]][^A-Za-z0-9_/])|,|\s|\]|<|$)}) do |m|
def parse_redmine_links(text, project, obj, attr, only_path, options)
text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(([a-z0-9\-_]+):)?(attachment|document|version|forum|news|message|project|commit|source|export)?(((#)|((([a-z0-9\-]+)\|)?(r)))((\d+)((#note)?-(\d+))?)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]][^A-Za-z0-9_/])|,|\s|\]|<|$)}) do |m|
leading, esc, project_prefix, project_identifier, prefix, repo_prefix, repo_identifier, sep, identifier, comment_suffix, comment_id = $1, $2, $3, $4, $5, $10, $11, $8 || $12 || $18, $14 || $19, $15, $17
link = nil
project = default_project
if project_identifier
project = Project.visible.find_by_identifier(project_identifier)
end
@@ -794,7 +792,7 @@ module ApplicationHelper
when 'commit', 'source', 'export'
if project
repository = nil
if name =~ %r{^(([a-z0-9\-_]+)\|)(.+)$}
if name =~ %r{^(([a-z0-9\-]+)\|)(.+)$}
repo_prefix, repo_identifier, name = $1, $2, $3
repository = project.repositories.detect {|repo| repo.identifier == repo_identifier}
else
@@ -821,7 +819,7 @@ module ApplicationHelper
end
when 'attachment'
attachments = options[:attachments] || (obj && obj.respond_to?(:attachments) ? obj.attachments : nil)
if attachments && attachment = Attachment.latest_attach(attachments, name)
if attachments && attachment = attachments.detect {|a| a.filename == name }
link = link_to h(attachment.filename), {:only_path => only_path, :controller => 'attachments', :action => 'download', :id => attachment},
:class => 'attachment'
end
+4 -4
View File
@@ -87,14 +87,14 @@ module QueriesHelper
format_time(value)
when 'Date'
format_date(value)
when 'Fixnum'
when 'Fixnum', 'Float'
if column.name == :done_ratio
progress_bar(value, :width => '80px')
elsif column.name == :spent_hours
sprintf "%.2f", value
else
value.to_s
h(value.to_s)
end
when 'Float'
sprintf "%.2f", value
when 'User'
link_to_user value
when 'Project'
+1 -1
View File
@@ -418,7 +418,7 @@ class Issue < ActiveRecord::Base
if attrs['parent_issue_id'].present?
s = attrs['parent_issue_id'].to_s
unless (m = s.match(%r{\A#?(\d+)\z})) && (m[1] == parent_id.to_s || Issue.visible(user).exists?(m[1]))
unless (m = s.match(%r{\A#?(\d+)\z})) && Issue.visible(user).exists?(m[1])
@invalid_parent_issue_id = attrs.delete('parent_issue_id')
end
end
+1 -3
View File
@@ -731,7 +731,7 @@ class Project < ActiveRecord::Base
def copy_wiki(project)
# Check that the source project has a wiki first
unless project.wiki.nil?
wiki = self.wiki || Wiki.new
self.wiki ||= Wiki.new
wiki.attributes = project.wiki.attributes.dup.except("id", "project_id")
wiki_pages_map = {}
project.wiki.pages.each do |page|
@@ -743,8 +743,6 @@ class Project < ActiveRecord::Base
wiki.pages << new_wiki_page
wiki_pages_map[page.id] = new_wiki_page
end
self.wiki = wiki
wiki.save
# Reproduce page hierarchy
project.wiki.pages.each do |page|
+1 -1
View File
@@ -111,7 +111,7 @@
<li><%= bulk_update_custom_field_context_menu_link(field, text, value || text) %></li>
<% end %>
<% unless field.is_required? %>
<li><%= bulk_update_custom_field_context_menu_link(field, l(:label_none), '__none__') %></li>
<li><%= bulk_update_custom_field_context_menu_link(field, l(:label_none), '') %></li>
<% end %>
</ul>
</li>
+1 -1
View File
@@ -18,7 +18,7 @@
<% end %>
<% if @issue.safe_attribute? 'subject' %>
<p><%= f.text_field :subject, :size => 80, :maxlength => 255, :required => true %></p>
<p><%= f.text_field :subject, :size => 80, :required => true %></p>
<% end %>
<% if @issue.safe_attribute? 'description' %>
+1 -1
View File
@@ -12,7 +12,7 @@
<p><%= f.text_field :issue_id, :size => 6 %> <em><%= h("#{@time_entry.issue.tracker.name} ##{@time_entry.issue.id}: #{@time_entry.issue.subject}") if @time_entry.issue %></em></p>
<p><%= f.text_field :spent_on, :size => 10, :required => true %><%= calendar_for('time_entry_spent_on') %></p>
<p><%= f.text_field :hours, :size => 6, :required => true %></p>
<p><%= f.text_field :comments, :size => 100, :maxlength => 255 %></p>
<p><%= f.text_field :comments, :size => 100 %></p>
<p><%= f.select :activity_id, activity_collection_for_select_options(@time_entry), :required => true %></p>
<% @time_entry.custom_field_values.each do |value| %>
<p><%= custom_field_tag_with_label :time_entry, value %></p>
+1 -1
View File
@@ -833,7 +833,7 @@ bg:
label_generate_key: Генериране на ключ
label_issue_watchers: Наблюдатели
label_example: Пример
label_display: Показване
label_display: Display
label_sort: Сортиране
label_ascending: Нарастващ
label_descending: Намаляващ
+66 -66
View File
@@ -1037,84 +1037,84 @@ es:
description_selected_columns: Columnas seleccionadas
label_parent_revision: Padre
label_child_revision: Hijo
setting_default_issue_start_date_to_creation_date: Utilizar la fecha actual como fecha de inicio para nuevas peticiones
button_edit_section: Editar esta sección
setting_repositories_encodings: Codificación de adjuntos y repositorios
setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
button_edit_section: Edit this section
setting_repositories_encodings: Attachments and repositories encodings
description_all_columns: Todas las columnas
button_export: Exportar
label_export_options: "%{export_format} opciones de exportación"
error_attachment_too_big: Este fichero no se puede adjuntar porque excede el tamaño máximo de fichero (%{max_size})
notice_failed_to_save_time_entries: "Error al guardar %{count} entradas de tiempo de las %{total} seleccionadas: %{ids}."
notice_failed_to_save_time_entries: "Error al guarda %{count} entradas de tiempo de las %{total} seleccionadas: %{ids}."
label_x_issues:
zero: 0 petición
one: 1 petición
other: "%{count} peticiones"
label_repository_new: Nuevo repositorio
field_repository_is_default: Repositorio principal
label_copy_attachments: Copiar adjuntos
label_repository_new: New repository
field_repository_is_default: Main repository
label_copy_attachments: Copy attachments
label_item_position: "%{position}/%{count}"
label_completed_versions: Versiones completadas
text_project_identifier_info: Solo se permiten letras en minúscula (a-z), números, guiones y barras bajas.<br />Una vez guardado, el identificador no se puede cambiar.
field_multiple: Valores múltiples
setting_commit_cross_project_ref: Permitir referenciar y resolver peticiones de todos los demás proyectos
text_issue_conflict_resolution_add_notes: Añadir mis notas y descartar mis otros cambios
text_issue_conflict_resolution_overwrite: Aplicar mis campos de todas formas (las notas anteriores se mantendrán pero algunos cambios podrían ser sobreescritos)
notice_issue_update_conflict: La petición ha sido actualizada por otro usuario mientras la editaba.
text_issue_conflict_resolution_cancel: Descartar todos mis cambios y mostrar de nuevo %{link}
permission_manage_related_issues: Gestionar peticiones relacionadas
field_auth_source_ldap_filter: Filtro LDAP
label_search_for_watchers: Buscar seguidores para añadirlos
notice_account_deleted: Su cuenta ha sido eliminada
setting_unsubscribe: Permitir a los usuarios borrar sus propias cuentas
button_delete_my_account: Borrar mi cuenta
label_completed_versions: Completed versions
text_project_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
field_multiple: Multiple values
setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
text_issue_conflict_resolution_add_notes: Add my notes and discard my other changes
text_issue_conflict_resolution_overwrite: Apply my changes anyway (previous notes will be kept but some changes may be overwritten)
notice_issue_update_conflict: The issue has been updated by an other user while you were editing it.
text_issue_conflict_resolution_cancel: Discard all my changes and redisplay %{link}
permission_manage_related_issues: Manage related issues
field_auth_source_ldap_filter: LDAP filter
label_search_for_watchers: Search for watchers to add
notice_account_deleted: Your account has been permanently deleted.
setting_unsubscribe: Allow users to delete their own account
button_delete_my_account: Delete my account
text_account_destroy_confirmation: |-
¿Está seguro de querer proceder?
Su cuenta quedará borrada permanentemente, sin la posibilidad de reactivarla.
error_session_expired: Su sesión ha expirado. Por favor, vuelva a identificarse.
text_session_expiration_settings: "Advertencia: el cambio de estas opciones podría hacer expirar las sesiones activas, incluyendo la suya."
setting_session_lifetime: Tiempo de vida máximo de las sesiones
setting_session_timeout: Tiempo máximo de inactividad de las sesiones
label_session_expiration: Expiración de sesiones
permission_close_project: Cerrar / reabrir el proyecto
label_show_closed_projects: Ver proyectos cerrados
button_close: Cerrar
button_reopen: Reabrir
project_status_active: activo
project_status_closed: cerrado
project_status_archived: archivado
text_project_closed: Este proyecto está cerrado y es de sólo lectura
notice_user_successful_create: Usuario %{id} creado.
field_core_fields: Campos básicos
field_timeout: Tiempo de inactividad (en segundos)
setting_thumbnails_enabled: Mostrar miniaturas de los adjuntos
setting_thumbnails_size: Tamaño de las miniaturas (en píxeles)
label_status_transitions: Transiciones de estado
label_fields_permissions: Permisos sobre los campos
label_readonly: Sólo lectura
label_required: Requerido
text_repository_identifier_info: Solo se permiten letras en minúscula (a-z), números, guiones y barras bajas.<br />Una vez guardado, el identificador no se puede cambiar.
field_board_parent: Foro padre
label_attribute_of_project: "%{name} del proyecto"
label_attribute_of_author: "%{name} del autor"
label_attribute_of_assigned_to: "%{name} de la persona asignada"
label_attribute_of_fixed_version: "%{name} de la versión indicada"
label_copy_subtasks: Copiar subtareas
label_copied_to: copiada a
label_copied_from: copiada desde
label_any_issues_in_project: cualquier petición del proyecto
label_any_issues_not_in_project: cualquier petición que no sea del proyecto
field_private_notes: Notas privadas
permission_view_private_notes: Ver notas privadas
permission_set_notes_private: Poner notas como privadas
label_no_issues_in_project: no hay peticiones en el proyecto
Are you sure you want to proceed?
Your account will be permanently deleted, with no way to reactivate it.
error_session_expired: Your session has expired. Please login again.
text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours."
setting_session_lifetime: Session maximum lifetime
setting_session_timeout: Session inactivity timeout
label_session_expiration: Session expiration
permission_close_project: Close / reopen the project
label_show_closed_projects: View closed projects
button_close: Close
button_reopen: Reopen
project_status_active: active
project_status_closed: closed
project_status_archived: archived
text_project_closed: This project is closed and read-only.
notice_user_successful_create: User %{id} created.
field_core_fields: Standard fields
field_timeout: Timeout (in seconds)
setting_thumbnails_enabled: Display attachment thumbnails
setting_thumbnails_size: Thumbnails size (in pixels)
label_status_transitions: Status transitions
label_fields_permissions: Fields permissions
label_readonly: Read-only
label_required: Required
text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
field_board_parent: Parent forum
label_attribute_of_project: Project's %{name}
label_attribute_of_author: Author's %{name}
label_attribute_of_assigned_to: Assignee's %{name}
label_attribute_of_fixed_version: Target version's %{name}
label_copy_subtasks: Copy subtasks
label_copied_to: copied to
label_copied_from: copied from
label_any_issues_in_project: any issues in project
label_any_issues_not_in_project: any issues not in project
field_private_notes: Private notes
permission_view_private_notes: View private notes
permission_set_notes_private: Set notes as private
label_no_issues_in_project: no issues in project
label_any: todos
label_last_n_weeks: en las últimas %{count} semanas
setting_cross_project_subtasks: Permitir subtareas cruzadas entre proyectos
label_last_n_weeks: last %{count} weeks
setting_cross_project_subtasks: Allow cross-project subtasks
label_cross_project_descendants: Con proyectos hijo
label_cross_project_tree: Con el árbol del proyecto
label_cross_project_hierarchy: Con la jerarquía del proyecto
label_cross_project_system: Con todos los proyectos
button_hide: Ocultar
setting_non_working_week_days: Días no laborables
label_in_the_next_days: en los próximos
label_in_the_past_days: en los anteriores
button_hide: Hide
setting_non_working_week_days: Non-working days
label_in_the_next_days: in the next
label_in_the_past_days: in the past
+3 -3
View File
@@ -117,8 +117,8 @@ ru:
many: "около %{count} часов"
other: "около %{count} часа"
x_hours:
one: "1 час"
other: "%{count} часов"
one: "1 hour"
other: "%{count} hours"
x_days:
one: "%{count} день"
few: "%{count} дня"
@@ -1147,7 +1147,7 @@ ru:
button_delete_my_account: "Удалить мою учетную запись"
text_account_destroy_confirmation: "Ваша учетная запись будет полностью удалена без возможности восстановления.\nВы уверены, что хотите продолжить?"
error_session_expired: Срок вашей сессии истек. Пожалуйста войдите еще раз
text_session_expiration_settings: "Внимание! Изменение этих настроек может привести к завершению текущих сессий, включая вашу."
text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours."
setting_session_lifetime: Максимальная продолжительность сессии
setting_session_timeout: Таймут сессии
label_session_expiration: Срок истечения сессии
+32 -32
View File
@@ -923,47 +923,47 @@ sr-YU:
project_module_calendar: Kalendar
button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
field_text: Text field
label_user_mail_option_only_owner: Samo za stvari koje posedujem
setting_default_notification_option: Podrazumevana opcija za notifikaciju
label_user_mail_option_only_my_events: Za dogadjaje koje pratim ili sam u njih uključen
label_user_mail_option_only_assigned: Za dogadjaje koji su mi dodeljeni lično
label_user_mail_option_none: Bez obaveštenja
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: Projekat kome pokušavate da pristupite je arhiviran
label_principal_search: "Traži korisnike ili grupe:"
label_user_search: "Traži korisnike:"
field_visible: Vidljivo
setting_emails_header: Email zaglavlje
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
setting_commit_logtime_activity_id: Activity for logged time
text_time_logged_by_changeset: Applied in changeset %{value}.
setting_commit_logtime_enabled: Omogući praćenje vremena
setting_commit_logtime_enabled: Enable time logging
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
setting_gantt_items_limit: Maksimalan broj stavki na gant grafiku
field_warn_on_leaving_unsaved: Upozori me ako napuštam stranu sa tekstom koji nije snimljen
text_warn_on_leaving_unsaved: Strana sadrži tekst koji nije snimljen i biće izgubljen ako je napustite.
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
label_my_queries: My custom queries
text_journal_changed_no_detail: "%{label} ažuriran"
label_news_comment_added: Komentar dodat u novosti
button_expand_all: Proširi sve
button_collapse_all: Zatvori sve
text_journal_changed_no_detail: "%{label} updated"
label_news_comment_added: Comment added to a news
button_expand_all: Expand all
button_collapse_all: Collapse all
label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
label_bulk_edit_selected_time_entries: Bulk edit selected time entries
text_time_entries_destroy_confirmation: Da li ste sigurni da želite da obrišete selektovane stavke ?
label_role_anonymous: Anonimus
label_role_non_member: Nije član
label_issue_note_added: Nota dodana
label_issue_status_updated: Status ažuriran
label_issue_priority_updated: Prioritet ažuriran
label_issues_visibility_own: Problem kreiran od strane ili je dodeljen korisniku
field_issues_visibility: Vidljivost problema
label_issues_visibility_all: Svi problemi
permission_set_own_issues_private: Podesi sopstveni problem kao privatan ili javan
field_is_private: Privatno
permission_set_issues_private: Podesi problem kao privatan ili javan
label_issues_visibility_public: Svi javni problemi
text_issues_destroy_descendants_confirmation: Ova operacija će takođe obrisati %{count} podzadataka.
text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
label_role_anonymous: Anonymous
label_role_non_member: Non member
label_issue_note_added: Note added
label_issue_status_updated: Status updated
label_issue_priority_updated: Priority updated
label_issues_visibility_own: Issues created by or assigned to the user
field_issues_visibility: Issues visibility
label_issues_visibility_all: All issues
permission_set_own_issues_private: Set own issues public or private
field_is_private: Private
permission_set_issues_private: Set issues public or private
label_issues_visibility_public: All non private issues
text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
field_commit_logs_encoding: Kodiranje izvršnih poruka
field_scm_path_encoding: Path encoding
text_scm_path_encoding_note: "Default: UTF-8"
+44 -45
View File
@@ -79,8 +79,8 @@ sv:
one: "ungefär en timme"
other: "ungefär %{count} timmar"
x_hours:
one: "1 timme"
other: "%{count} timmar"
one: "1 hour"
other: "%{count} hours"
x_days:
one: "en dag"
other: "%{count} dagar"
@@ -219,7 +219,6 @@ sv:
notice_issue_successful_create: Ärende %{id} skapades.
notice_issue_update_conflict: Detta ärende har uppdaterats av en annan användare samtidigt som du redigerade det.
notice_account_deleted: Ditt konto har avslutats permanent.
notice_user_successful_create: "Användare %{id} skapad."
error_can_t_load_default_data: "Standardkonfiguration gick inte att läsa in: %{value}"
error_scm_not_found: "Inlägg och/eller revision finns inte i detta versionsarkiv."
@@ -240,7 +239,6 @@ sv:
error_unable_delete_issue_status: 'Ärendestatus kunde inte tas bort'
error_unable_to_connect: "Kan inte ansluta (%{value})"
error_attachment_too_big: Denna fil kan inte laddas upp eftersom den överstiger maximalt tillåten filstorlek (%{max_size})
error_session_expired: "Din session har gått ut. Vänligen logga in på nytt."
warning_attachments_not_saved: "%{count} fil(er) kunde inte sparas."
mail_subject_lost_password: "Ditt %{value} lösenord"
@@ -370,10 +368,6 @@ sv:
field_repository_is_default: Huvudarkiv
field_multiple: Flera värden
field_auth_source_ldap_filter: LDAP-filter
field_core_fields: Standardfält
field_timeout: "Timeout (i sekunder)"
field_board_parent: Förälderforum
field_private_notes: Privata anteckningar
setting_app_title: Applikationsrubrik
setting_app_subtitle: Applikationsunderrubrik
@@ -398,7 +392,6 @@ sv:
setting_autologin: Automatisk inloggning
setting_date_format: Datumformat
setting_time_format: Tidsformat
setting_cross_project_subtasks: Tillåt underaktiviteter mellan projekt
setting_cross_project_issue_relations: Tillåt ärenderelationer mellan projekt
setting_issue_list_default_columns: Standardkolumner i ärendelistan
setting_repositories_encodings: Encoding för bilagor och versionsarkiv
@@ -437,16 +430,10 @@ sv:
setting_default_issue_start_date_to_creation_date: Använd dagens datum som startdatum för nya ärenden
setting_commit_cross_project_ref: Tillåt ärende i alla de andra projekten att bli refererade och fixade
setting_unsubscribe: Tillåt användare att avsluta prenumereration
setting_session_lifetime: Maximal sessionslivslängd
setting_session_timeout: Tidsgräns för sessionsinaktivitet
setting_thumbnails_enabled: Visa miniatyrbilder av bilagor
setting_thumbnails_size: Storlek på miniatyrbilder (i pixlar)
setting_non_working_week_days: Lediga dagar
permission_add_project: Skapa projekt
permission_add_subprojects: Skapa underprojekt
permission_edit_project: Ändra projekt
permission_close_project: Stänga / återöppna projektet
permission_select_project_modules: Välja projektmoduler
permission_manage_members: Hantera medlemmar
permission_manage_project_activities: Hantera projektaktiviteter
@@ -461,8 +448,6 @@ sv:
permission_add_issue_notes: Lägga till ärendenotering
permission_edit_issue_notes: Ändra ärendenoteringar
permission_edit_own_issue_notes: Ändra egna ärendenoteringar
permission_view_private_notes: Visa privata anteckningar
permission_set_notes_private: Ställa in anteckningar som privata
permission_move_issues: Flytta ärenden
permission_delete_issues: Ta bort ärenden
permission_manage_public_queries: Hantera publika frågor
@@ -697,8 +682,6 @@ sv:
label_not_equals: är inte
label_in_less_than: om mindre än
label_in_more_than: om mer än
label_in_the_next_days: under kommande
label_in_the_past_days: under föregående
label_greater_or_equal: '>='
label_less_or_equal: '<='
label_between: mellan
@@ -708,7 +691,6 @@ sv:
label_yesterday: igår
label_this_week: denna vecka
label_last_week: senaste veckan
label_last_n_weeks: "senaste %{count} veckorna"
label_last_n_days: "senaste %{count} dagarna"
label_this_month: denna månad
label_last_month: senaste månaden
@@ -719,9 +701,6 @@ sv:
label_ago: dagar sedan
label_contains: innehåller
label_not_contains: innehåller inte
label_any_issues_in_project: några ärenden i projektet
label_any_issues_not_in_project: några ärenden utanför projektet
label_no_issues_in_project: inga ärenden i projektet
label_day_plural: dagar
label_repository: Versionsarkiv
label_repository_new: Nytt versionsarkiv
@@ -797,8 +776,6 @@ sv:
label_blocked_by: blockerad av
label_precedes: kommer före
label_follows: följer
label_copied_to: Kopierad till
label_copied_from: Kopierad från
label_end_to_start: slut till start
label_end_to_end: slut till slut
label_start_to_start: start till start
@@ -912,20 +889,9 @@ sv:
label_child_revision: Barn
label_export_options: "%{export_format} exportalternativ"
label_copy_attachments: Kopiera bilagor
label_copy_subtasks: Kopiera underaktiviteter
label_item_position: "%{position}/%{count}"
label_completed_versions: Klara versioner
label_search_for_watchers: Sök efter bevakare att lägga till
label_session_expiration: Sessionsutgång
label_show_closed_projects: Visa stängda projekt
label_status_transitions: Statusövergångar
label_fields_permissions: Fältbehörigheter
label_readonly: Skrivskyddad
label_required: Nödvändig
label_attribute_of_project: Projektets %{name}
label_attribute_of_author: Författarens %{name}
label_attribute_of_assigned_to: Tilldelads %{name}
label_attribute_of_fixed_version: Målversionens %{name}
button_login: Logga in
button_submit: Skicka
@@ -973,21 +939,14 @@ sv:
button_quote: Citera
button_duplicate: Duplicera
button_show: Visa
button_hide: Göm
button_edit_section: Redigera denna sektion
button_export: Exportera
button_delete_my_account: Ta bort mitt konto
button_close: Stäng
button_reopen: Återöppna
status_active: aktiv
status_registered: registrerad
status_locked: låst
project_status_active: aktiv
project_status_closed: stängd
project_status_archived: arkiverad
version_status_open: öppen
version_status_locked: låst
version_status_closed: stängd
@@ -1067,8 +1026,6 @@ sv:
text_issue_conflict_resolution_add_notes: Lägg till mina anteckningar och kasta mina andra ändringar
text_issue_conflict_resolution_cancel: Kasta alla mina ändringar och visa igen %{link}
text_account_destroy_confirmation: "Är du säker på att du vill fortsätta?\nDitt konto kommer tas bort permanent, utan möjlighet att återaktivera det."
text_session_expiration_settings: "Varning: ändring av dessa inställningar kan få alla nuvarande sessioner, inklusive din egen, att gå ut."
text_project_closed: Detta projekt är stängt och skrivskyddat.
default_role_manager: Projektledare
default_role_developer: Utvecklare
@@ -1114,9 +1071,51 @@ sv:
description_date_range_interval: Ange intervall genom att välja start- och slutdatum
description_date_from: Ange startdatum
description_date_to: Ange slutdatum
error_session_expired: Your session has expired. Please login again.
text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours."
setting_session_lifetime: Session maximum lifetime
setting_session_timeout: Session inactivity timeout
label_session_expiration: Session expiration
permission_close_project: Close / reopen the project
label_show_closed_projects: View closed projects
button_close: Close
button_reopen: Reopen
project_status_active: active
project_status_closed: closed
project_status_archived: archived
text_project_closed: This project is closed and read-only.
notice_user_successful_create: User %{id} created.
field_core_fields: Standard fields
field_timeout: Timeout (in seconds)
setting_thumbnails_enabled: Display attachment thumbnails
setting_thumbnails_size: Thumbnails size (in pixels)
label_status_transitions: Status transitions
label_fields_permissions: Fields permissions
label_readonly: Read-only
label_required: Required
text_repository_identifier_info: Ändast gemener (a-z), siffror, streck och understreck är tillåtna.<br />När identifieraren sparats kan den inte ändras.
field_board_parent: Parent forum
label_attribute_of_project: Project's %{name}
label_attribute_of_author: Author's %{name}
label_attribute_of_assigned_to: Assignee's %{name}
label_attribute_of_fixed_version: Target version's %{name}
label_copy_subtasks: Copy subtasks
label_copied_to: copied to
label_copied_from: copied from
label_any_issues_in_project: any issues in project
label_any_issues_not_in_project: any issues not in project
field_private_notes: Private notes
permission_view_private_notes: View private notes
permission_set_notes_private: Set notes as private
label_no_issues_in_project: no issues in project
label_any: alla
label_last_n_weeks: last %{count} weeks
setting_cross_project_subtasks: Allow cross-project subtasks
label_cross_project_descendants: Med underprojekt
label_cross_project_tree: Med projektträd
label_cross_project_hierarchy: Med projekthierarki
label_cross_project_system: Med alla projekt
button_hide: Hide
setting_non_working_week_days: Non-working days
label_in_the_next_days: in the next
label_in_the_past_days: in the past
-37
View File
@@ -4,43 +4,6 @@ Redmine - project management software
Copyright (C) 2006-2012 Jean-Philippe Lang
http://www.redmine.org/
== 2013-02-12 v2.2.3
* Upgrade to Rails 3.2.12
* Defect #11987: pdf: Broken new line in table
* Defect #12930: 404 Error when referencing different project source files in the wiki syntax
* Defect #12979: Wiki link syntax commit:repo_a:abcd doesn't work
* Defect #13075: Can't clear custom field value through context menu in the issue list
* Defect #13097: Project copy fails when wiki module is disabled
* Defect #13126: Issue view: estimated time vs. spent time
* Patch #12922: Update Spanish translation
* Patch #12928: Bulgarian translation for 2.2-stable
* Patch #12987: Russian translation for 2.2-stable
== 2013-01-20 v2.2.2
* Defect #7510: Link to attachment should return latest attachment
* Defect #9842: {{toc}} is not replaced by table of content when exporting wiki page to pdf
* Defect #12749: Plugins cannot route wiki page sub-path
* Defect #12799: Cannot edit a wiki section which title starts with a tab
* Defect #12801: Viewing the history of a wiki page with attachments raises an error
* Defect #12833: Input fields restricted on length should have maxlength parameter set
* Defect #12838: Blank page when clicking Add with no block selected on my page layout
* Defect #12851: "Parent task is invalid" while editing child issues by Role with restricted Issues Visibility
* Patch #12800: Serbian Latin translation patch (sr-YU.yml)
* Patch #12809: Swedish Translation for r11162
* Patch #12818: Minor swedish translation fix
== 2013-01-09 v2.2.1
* Upgrade to Rails 3.2.11
* Defect #12652: "Copy ticket" selects "new ticket"
* Defect #12691: Textile Homepage Dead?
* Defect #12711: incorrect fix of lib/SVG/Graph/TimeSeries.rb
* Defect #12744: Unable to call a macro with a name that contains uppercase letters
* Defect #12776: Security vulnerability in Rails 3.2.10 (CVE-2013-0156)
* Patch #12630: Russian "x_hours" translation
== 2012-12-18 v2.2.0
* Defect #4787: Gannt to PNG - CJK (Chinese, Japanese and Korean) characters appear as ?
+1 -1
View File
@@ -171,7 +171,7 @@ module SVG
protected
def min_x_value=(value)
@min_x_value = DateTime.parse( value ).to_time
@min_x_value = DateTime.parse( data[:data][i] ).to_time
end
-4
View File
@@ -4002,10 +4002,6 @@ class TCPDF
@quote_page[@quote_count] = @page;
@quote_count += 1
when 'br'
if @tdbegin
@tdtext << "\n"
return
end
Ln();
if (@li_spacer.length > 0)
+1 -1
View File
@@ -198,7 +198,7 @@ Redmine::MenuManager.map :project_menu do |menu|
menu.push :roadmap, { :controller => 'versions', :action => 'index' }, :param => :project_id,
:if => Proc.new { |p| p.shared_versions.any? }
menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural
menu.push :new_issue, { :controller => 'issues', :action => 'new', :copy_from => nil }, :param => :project_id, :caption => :label_issue_new,
menu.push :new_issue, { :controller => 'issues', :action => 'new' }, :param => :project_id, :caption => :label_issue_new,
:html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) }
menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :param => :project_id, :caption => :label_gantt
menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar
+2 -8
View File
@@ -109,13 +109,6 @@ module Redmine
RDMPdfEncoding::rdm_from_utf8(txt, l(:general_pdf_encoding))
end
def formatted_text(text)
html = Redmine::WikiFormatting.to_html(Setting.text_formatting, text)
# Strip {{toc}} tags
html.gsub!(/<p>\{\{([<>]?)toc\}\}<\/p>/i, '')
html
end
def RDMCell(w ,h=0, txt='', border=0, ln=0, align='', fill=0, link='')
Cell(w, h, fix_text_encoding(txt), border, ln, align, fill, link)
end
@@ -127,7 +120,8 @@ module Redmine
def RDMwriteHTMLCell(w, h, x, y, txt='', attachments=[], border=0, ln=1, fill=0)
@attachments = attachments
writeHTMLCell(w, h, x, y,
fix_text_encoding(formatted_text(txt)),
fix_text_encoding(
Redmine::WikiFormatting.to_html(Setting.text_formatting, txt)),
border, ln, fill)
end
+1 -1
View File
@@ -4,7 +4,7 @@ module Redmine
module VERSION #:nodoc:
MAJOR = 2
MINOR = 2
TINY = 3
TINY = 0
# Branch values:
# * official release: nil
+2 -2
View File
@@ -147,10 +147,10 @@ module Redmine
unless block_given?
raise "Can not create a macro without a block!"
end
name = name.to_s.downcase.to_sym
name = name.to_sym if name.is_a?(String)
available_macros[name] = {:desc => @@desc || ''}.merge(options)
@@desc = nil
Definitions.send :define_method, "macro_#{name}", &block
Definitions.send :define_method, "macro_#{name}".downcase, &block
end
# Sets description for the next macro to be defined
@@ -69,7 +69,7 @@ module Redmine
l = 1
started = false
ended = false
text.scan(/(((?:.*?)(\A|\r?\n\s*\r?\n))(h(\d+)(#{A}#{C})\.(?::(\S+))?[ \t](.*?)$)|.*)/m).each do |all, content, lf, heading, level|
text.scan(/(((?:.*?)(\A|\r?\n\s*\r?\n))(h(\d+)(#{A}#{C})\.(?::(\S+))? (.*?)$)|.*)/m).each do |all, content, lf, heading, level|
if heading.nil?
if ended
after << all
+1 -1
View File
@@ -169,7 +169,7 @@ http://www.redmine.org, someone@foo.bar
<h2><a name="5" class="wiki-page"></a>Text formatting</h2>
<p>For things such as headlines, bold, tables, lists, Redmine supports Textile syntax. See <a class="external" href="http://en.wikipedia.org/wiki/Textile_%28markup_language%29">http://en.wikipedia.org/wiki/Textile_(markup_language)</a> for information on using any of these features. A few samples are included below, but the engine is capable of much more of that.</p>
<p>For things such as headlines, bold, tables, lists, Redmine supports Textile syntax. See <a class="external" href="http://www.textism.com/tools/textile/">http://www.textism.com/tools/textile/</a> for information on using any of these features. A few samples are included below, but the engine is capable of much more of that.</p>
<h3><a name="6" class="wiki-page"></a>Font style</h3>
-14
View File
@@ -99,18 +99,4 @@ wiki_content_versions_006:
version: 3
author_id: 1
comments:
wiki_content_versions_007:
data: |-
h1. Page with an inline image
This is an inline image:
!logo.gif!
updated_on: 2007-03-08 00:18:07 +01:00
page_id: 4
wiki_content_id: 4
id: 7
version: 1
author_id: 1
comments:
@@ -37,7 +37,7 @@ class ActivitiesControllerTest < ActionController::TestCase
end
def test_previous_project_index
get :index, :id => 1, :from => 2.days.ago.to_date
get :index, :id => 1, :from => 3.days.ago.to_date
assert_response :success
assert_template 'index'
assert_not_nil assigns(:events_by_day)
@@ -132,7 +132,7 @@ class ContextMenusControllerTest < ActionController::TestCase
:attributes => {:href => "/issues/bulk_update?ids%5B%5D=1&amp;issue%5Bcustom_field_values%5D%5B#{field.id}%5D=Foo"}
assert_tag 'a',
:content => 'none',
:attributes => {:href => "/issues/bulk_update?ids%5B%5D=1&amp;issue%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__"}
:attributes => {:href => "/issues/bulk_update?ids%5B%5D=1&amp;issue%5Bcustom_field_values%5D%5B#{field.id}%5D="}
end
def test_context_menu_should_not_include_null_value_for_required_custom_fields
-17
View File
@@ -2356,9 +2356,6 @@ class IssuesControllerTest < ActionController::TestCase
assert_tag 'select', :attributes => {:name => 'issue[project_id]'},
:child => {:tag => 'option', :attributes => {:value => '2', :selected => nil}, :content => 'OnlineStore'}
assert_tag 'input', :attributes => {:name => 'copy_from', :value => '1'}
# "New issue" menu item should not link to copy
assert_select '#main-menu a.new-issue[href=/projects/ecookbook/issues/new]'
end
def test_new_as_copy_with_attachments_should_show_copy_attachments_checkbox
@@ -2914,20 +2911,6 @@ class IssuesControllerTest < ActionController::TestCase
assert_equal spent_hours_before + 2.5, issue.spent_hours
end
def test_put_update_should_preserve_parent_issue_even_if_not_visible
parent = Issue.generate!(:project_id => 1, :is_private => true)
issue = Issue.generate!(:parent_issue_id => parent.id)
assert !parent.visible?(User.find(3))
@request.session[:user_id] = 3
get :edit, :id => issue.id
assert_select 'input[name=?][value=?]', 'issue[parent_issue_id]', parent.id.to_s
put :update, :id => issue.id, :issue => {:subject => 'New subject', :parent_issue_id => parent.id.to_s}
assert_response 302
assert_equal parent, issue.parent
end
def test_put_update_with_attachment_only
set_tmp_attachments_directory
-5
View File
@@ -187,11 +187,6 @@ class MyControllerTest < ActionController::TestCase
assert User.find(2).pref[:my_page_layout]['top'].include?('issuesreportedbyme')
end
def test_add_invalid_block_should_redirect
post :add_block, :block => 'invalid'
assert_redirected_to '/my/page_layout'
end
def test_remove_block
post :remove_block, :block => 'issuesassignedtome'
assert_redirected_to '/my/page_layout'
-13
View File
@@ -75,19 +75,6 @@ class WikiControllerTest < ActionController::TestCase
assert_select 'a[href=?]', '/projects/ecookbook/wiki/CookBook_documentation', :text => /Current version/
end
def test_show_old_version_with_attachments
page = WikiPage.find(4)
assert page.attachments.any?
content = page.content
content.text = "update"
content.save!
get :show, :project_id => 'ecookbook', :id => page.title, :version => '1'
assert_kind_of WikiContent::Version, assigns(:content)
assert_response :success
assert_template 'show'
end
def test_show_old_version_without_permission_should_be_denied
Role.anonymous.remove_permission! :view_wiki_edits
-12
View File
@@ -118,16 +118,4 @@ module ObjectHelpers
board.save!
board
end
def Attachment.generate!(attributes={})
@generated_filename ||= 'testfile0'
@generated_filename.succ!
attributes = attributes.dup
attachment = Attachment.new(attributes)
attachment.container ||= Issue.find(1)
attachment.author ||= User.find(2)
attachment.filename = @generated_filename if attachment.filename.blank?
attachment.save!
attachment
end
end
+3 -21
View File
@@ -347,15 +347,6 @@ RAW
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text), "#{text} failed" }
end
def test_redmine_links_with_a_different_project_before_current_project
vp1 = Version.generate!(:project_id => 1, :name => '1.4.4')
vp3 = Version.generate!(:project_id => 3, :name => '1.4.4')
@project = Project.find(3)
assert_equal %(<p><a href="/versions/#{vp1.id}" class="version">1.4.4</a> <a href="/versions/#{vp3.id}" class="version">1.4.4</a></p>),
textilizable("ecookbook:version:1.4.4 version:1.4.4")
end
def test_escaped_redmine_links_should_not_be_parsed
to_test = [
'#3.',
@@ -403,14 +394,14 @@ RAW
end
def test_multiple_repositories_redmine_links
svn = Repository::Subversion.create!(:project_id => 1, :identifier => 'svn_repo-1', :url => 'file:///foo/hg')
svn = Repository::Subversion.create!(:project_id => 1, :identifier => 'svn1', :url => 'file:///foo/hg')
Changeset.create!(:repository => svn, :committed_on => Time.now, :revision => '123')
hg = Repository::Mercurial.create!(:project_id => 1, :identifier => 'hg1', :url => '/foo/hg')
Changeset.create!(:repository => hg, :committed_on => Time.now, :revision => '123', :scmid => 'abcd')
changeset_link = link_to('r2', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 2},
:class => 'changeset', :title => 'This commit fixes #1, #2 and references #1 & #3')
svn_changeset_link = link_to('svn_repo-1|r123', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :repository_id => 'svn_repo-1', :rev => 123},
svn_changeset_link = link_to('svn1|r123', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :repository_id => 'svn1', :rev => 123},
:class => 'changeset', :title => '')
hg_changeset_link = link_to('hg1|abcd', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :repository_id => 'hg1', :rev => 'abcd'},
:class => 'changeset', :title => '')
@@ -420,7 +411,7 @@ RAW
to_test = {
'r2' => changeset_link,
'svn_repo-1|r123' => svn_changeset_link,
'svn1|r123' => svn_changeset_link,
'invalid|r123' => 'invalid|r123',
'commit:hg1|abcd' => hg_changeset_link,
'commit:invalid|abcd' => 'commit:invalid|abcd',
@@ -560,15 +551,6 @@ RAW
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text, :attachments => Issue.find(3).attachments), "#{text} failed" }
end
def test_attachment_link_should_link_to_latest_attachment
set_tmp_attachments_directory
a1 = Attachment.generate!(:filename => "test.txt", :created_on => 1.hour.ago)
a2 = Attachment.generate!(:filename => "test.txt")
assert_equal %(<p><a href="/attachments/download/#{a2.id}" class="attachment">test.txt</a></p>),
textilizable('attachment:test.txt', :attachments => [a1, a2])
end
def test_wiki_links
to_test = {
'[[CookBook documentation]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation" class="wiki-page">CookBook documentation</a>',
@@ -78,12 +78,6 @@ class Redmine::WikiFormatting::MacrosTest < ActionView::TestCase
assert_equal "<p>Baz: (arg1,arg2) (String) (line1\nline2)</p>", textilizable("{{baz(arg1, arg2)\nline1\nline2\n}}")
end
def test_macro_name_with_upper_case
Redmine::WikiFormatting::Macros.macro(:UpperCase) {|obj, args| "Upper"}
assert_equal "<p>Upper</p>", textilizable("{{UpperCase}}")
end
def test_multiple_macros_on_the_same_line
Redmine::WikiFormatting::Macros.macro :foo do |obj, args|
args.any? ? "args: #{args.join(',')}" : "no args"
@@ -419,20 +419,6 @@ STR
end
end
def test_get_section_should_support_headings_starting_with_a_tab
text = <<-STR
h1.\tHeading 1
Content 1
h1. Heading 2
Content 2
STR
assert_match /\Ah1.\tHeading 1\s+Content 1\z/, @formatter.new(text).get_section(1).first
end
private
def assert_html_output(to_test, expect_paragraph = true)