Compare commits

..

1 Commits

Author SHA1 Message Date
Jean-Philippe Lang 3351ef22b2 tagged version 1.3.0
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/tags/1.3.0@8180 e93f8b46-1217-0410-a6f0-8f06a7374b81
2011-12-10 14:50:59 +00:00
109 changed files with 316 additions and 1951 deletions
@@ -29,11 +29,6 @@ class AttachmentsController < ApplicationController
@diff = File.new(@attachment.diskfile, "rb").read
@diff_type = params[:type] || User.current.pref[:diff_type] || 'inline'
@diff_type = 'inline' unless %w(inline sbs).include?(@diff_type)
# Save diff type as user preference
if User.current.logged? && @diff_type != User.current.pref[:diff_type]
User.current.pref[:diff_type] = @diff_type
User.current.preference.save
end
render :action => 'diff'
elsif @attachment.is_text? && @attachment.filesize <= Setting.file_max_size_displayed.to_i.kilobyte
@content = File.new(@attachment.diskfile, "rb").read
+2 -4
View File
@@ -65,8 +65,7 @@ class BoardsController < ApplicationController
verify :method => :post, :only => [ :destroy ], :redirect_to => { :action => :index }
def new
@board = Board.new
@board.safe_attributes = params[:board]
@board = Board.new(params[:board])
@board.project = @project
if request.post? && @board.save
flash[:notice] = l(:notice_successful_create)
@@ -75,8 +74,7 @@ class BoardsController < ApplicationController
end
def edit
@board.safe_attributes = params[:board]
if request.post? && @board.save
if request.post? && @board.update_attributes(params[:board])
redirect_to_settings_in_projects
end
end
+1 -2
View File
@@ -7,8 +7,7 @@ class CommentsController < ApplicationController
verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
def create
@comment = Comment.new
@comment.safe_attributes = params[:comment]
@comment = Comment.new(params[:comment])
@comment.author = User.current
if @news.comments << @comment
flash[:notice] = l(:label_comment_added)
+2 -4
View File
@@ -47,8 +47,7 @@ class DocumentsController < ApplicationController
end
def new
@document = @project.documents.build
@document.safe_attributes = params[:document]
@document = @project.documents.build(params[:document])
if request.post? and @document.save
attachments = Attachment.attach_files(@document, params[:attachments])
render_attachment_warning_if_needed(@document)
@@ -59,8 +58,7 @@ class DocumentsController < ApplicationController
def edit
@categories = DocumentCategory.active #TODO: use it in the views
@document.safe_attributes = params[:document]
if request.post? and @document.save
if request.post? and @document.update_attributes(params[:document])
flash[:notice] = l(:notice_successful_update)
redirect_to :action => 'show', :id => @document
end
@@ -39,14 +39,12 @@ class IssueCategoriesController < ApplicationController
end
def new
@category = @project.issue_categories.build
@category.safe_attributes = params[:issue_category]
@category = @project.issue_categories.build(params[:issue_category])
end
verify :method => :post, :only => :create
def create
@category = @project.issue_categories.build
@category.safe_attributes = params[:issue_category]
@category = @project.issue_categories.build(params[:issue_category])
if @category.save
respond_to do |format|
format.html do
@@ -77,8 +75,7 @@ class IssueCategoriesController < ApplicationController
verify :method => :put, :only => :update
def update
@category.safe_attributes = params[:issue_category]
if @category.save
if @category.update_attributes(params[:issue_category])
respond_to do |format|
format.html {
flash[:notice] = l(:notice_successful_update)
+4 -7
View File
@@ -28,10 +28,10 @@ class MembersController < ApplicationController
attrs = params[:member].dup
if (user_ids = attrs.delete(:user_ids))
user_ids.each do |user_id|
members << Member.new(:role_ids => params[:member][:role_ids], :user_id => user_id)
members << Member.new(attrs.merge(:user_id => user_id))
end
else
members << Member.new(:role_ids => params[:member][:role_ids], :user_id => params[:member][:user_id])
members << Member.new(attrs)
end
@project.members << members
end
@@ -64,10 +64,7 @@ class MembersController < ApplicationController
end
def edit
if params[:member]
@member.role_ids = params[:member][:role_ids]
end
if request.post? and @member.save
if request.post? and @member.update_attributes(params[:member])
respond_to do |format|
format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
format.js {
@@ -96,7 +93,7 @@ class MembersController < ApplicationController
end
def autocomplete_for_member
@principals = Principal.active.not_member_of(@project).like(params[:q]).all(:limit => 100)
@principals = Principal.active.like(params[:q]).find(:all, :limit => 100) - @project.principals
render :layout => false
end
+11 -6
View File
@@ -53,10 +53,13 @@ class MessagesController < ApplicationController
# Create a new topic
def new
@message = Message.new
@message = Message.new(params[:message])
@message.author = User.current
@message.board = @board
@message.safe_attributes = params[:message]
if params[:message] && User.current.allowed_to?(:edit_messages, @project)
@message.locked = params[:message]['locked']
@message.sticky = params[:message]['sticky']
end
if request.post? && @message.save
call_hook(:controller_messages_new_after_save, { :params => params, :message => @message})
attachments = Attachment.attach_files(@message, params[:attachments])
@@ -67,10 +70,9 @@ class MessagesController < ApplicationController
# Reply to a topic
def reply
@reply = Message.new
@reply = Message.new(params[:reply])
@reply.author = User.current
@reply.board = @board
@reply.safe_attributes = params[:reply]
@topic.children << @reply
if !@reply.new_record?
call_hook(:controller_messages_reply_after_save, { :params => params, :message => @reply})
@@ -83,8 +85,11 @@ class MessagesController < ApplicationController
# Edit a message
def edit
(render_403; return false) unless @message.editable_by?(User.current)
@message.safe_attributes = params[:message]
if request.post? && @message.save
if params[:message]
@message.locked = params[:message]['locked']
@message.sticky = params[:message]['sticky']
end
if request.post? && @message.update_attributes(params[:message])
attachments = Attachment.attach_files(@message, params[:attachments])
render_attachment_warning_if_needed(@message)
flash[:notice] = l(:notice_successful_update)
+2 -3
View File
@@ -67,8 +67,8 @@ class NewsController < ApplicationController
def create
@news = News.new(:project => @project, :author => User.current)
@news.safe_attributes = params[:news]
if request.post?
@news.attributes = params[:news]
if @news.save
flash[:notice] = l(:notice_successful_create)
redirect_to :controller => 'news', :action => 'index', :project_id => @project
@@ -82,8 +82,7 @@ class NewsController < ApplicationController
end
def update
@news.safe_attributes = params[:news]
if request.put? and @news.save
if request.put? and @news.update_attributes(params[:news])
flash[:notice] = l(:notice_successful_update)
redirect_to :action => 'show', :id => @news
else
+1 -2
View File
@@ -66,8 +66,7 @@ class ProjectsController < ApplicationController
def new
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
@trackers = Tracker.all
@project = Project.new
@project.safe_attributes = params[:project]
@project = Project.new(params[:project])
end
verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
+5 -5
View File
@@ -105,7 +105,7 @@ class TimelogController < ApplicationController
def new
@time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today)
@time_entry.safe_attributes = params[:time_entry]
@time_entry.attributes = params[:time_entry]
call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
render :action => 'edit'
@@ -114,7 +114,7 @@ class TimelogController < ApplicationController
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.safe_attributes = params[:time_entry]
@time_entry.attributes = params[:time_entry]
call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
@@ -135,14 +135,14 @@ class TimelogController < ApplicationController
end
def edit
@time_entry.safe_attributes = params[:time_entry]
@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.safe_attributes = params[:time_entry]
@time_entry.attributes = params[:time_entry]
call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
@@ -173,7 +173,7 @@ class TimelogController < ApplicationController
unsaved_time_entry_ids = []
@time_entries.each do |time_entry|
time_entry.reload
time_entry.safe_attributes = attributes
time_entry.attributes = attributes
call_hook(:controller_time_entries_bulk_edit_before_save, { :params => params, :time_entry => time_entry })
unless time_entry.save
# Keep unsaved time_entry ids to display them in flash error
+4 -5
View File
@@ -23,7 +23,7 @@ class VersionsController < ApplicationController
before_filter :find_project, :only => [:index, :new, :create, :close_completed]
before_filter :authorize
accept_api_auth :index, :show, :create, :update, :destroy
accept_api_auth :index, :create, :update, :destroy
helper :custom_fields
helper :projects
@@ -75,7 +75,7 @@ class VersionsController < ApplicationController
if params[:version]
attributes = params[:version].dup
attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
@version.safe_attributes = attributes
@version.attributes = attributes
end
end
@@ -85,7 +85,7 @@ class VersionsController < ApplicationController
if params[:version]
attributes = params[:version].dup
attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
@version.safe_attributes = attributes
@version.attributes = attributes
end
if request.post?
@@ -124,8 +124,7 @@ class VersionsController < ApplicationController
if request.put? && params[:version]
attributes = params[:version].dup
attributes.delete('sharing') unless @version.allowed_sharings.include?(attributes['sharing'])
@version.safe_attributes = attributes
if @version.save
if @version.update_attributes(attributes)
respond_to do |format|
format.html {
flash[:notice] = l(:notice_successful_update)
+1 -1
View File
@@ -22,7 +22,7 @@ class WikisController < ApplicationController
# Create or update a project's wiki
def edit
@wiki = @project.wiki || Wiki.new(:project => @project)
@wiki.safe_attributes = params[:wiki]
@wiki.attributes = params[:wiki]
@wiki.save if request.post?
render(:update) {|page| page.replace_html "tab-content-wiki", :partial => 'projects/settings/wiki'}
end
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
+1 -10
View File
@@ -490,16 +490,12 @@ module ApplicationHelper
text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr)
@parsed_headings = []
@heading_anchors = {}
@current_section = 0 if options[:edit_section_links]
parse_sections(text, project, obj, attr, only_path, options)
text = parse_non_pre_blocks(text) do |text|
[:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_macros].each do |method_name|
[:parse_sections, :parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_macros, :parse_headings].each do |method_name|
send method_name, text, project, obj, attr, only_path, options
end
end
parse_headings(text, project, obj, attr, only_path, options)
if @parsed_headings.any?
replace_toc(text, @parsed_headings)
@@ -782,11 +778,6 @@ module ApplicationHelper
anchor = sanitize_anchor_name(item)
# used for single-file wiki export
anchor = "#{obj.page.title}_#{anchor}" if options[:wiki_links] == :anchor && (obj.is_a?(WikiContent) || obj.is_a?(WikiContent::Version))
@heading_anchors[anchor] ||= 0
idx = (@heading_anchors[anchor] += 1)
if idx > 1
anchor = "#{anchor}-#{idx}"
end
@parsed_headings << [level, anchor, item]
"<a name=\"#{anchor}\"></a>\n<h#{level} #{attrs}>#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a></h#{level}>"
end
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-19
View File
@@ -1,22 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 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.
module CalendarsHelper
def link_to_previous_month(year, month, options={})
target_year, target_month = if month == 1
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,4 +1,2 @@
# encoding: utf-8
#
module IssueMovesHelper
end
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Helpers to sort tables using clickable column headers.
#
# Author: Stuart Rackham <srackham@methods.co.nz>, March 2005.
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-2
View File
@@ -1,5 +1,3 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
#
-3
View File
@@ -16,7 +16,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Board < ActiveRecord::Base
include Redmine::SafeAttributes
belongs_to :project
has_many :topics, :class_name => 'Message', :conditions => "#{Message.table_name}.parent_id IS NULL", :order => "#{Message.table_name}.created_on DESC"
has_many :messages, :dependent => :destroy, :order => "#{Message.table_name}.created_on DESC"
@@ -31,8 +30,6 @@ class Board < ActiveRecord::Base
named_scope :visible, lambda {|*args| { :include => :project,
:conditions => Project.allowed_to_condition(args.shift || User.current, :view_messages, *args) } }
safe_attributes 'name', 'description', 'move_to'
def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_messages, project)
end
+4 -8
View File
@@ -151,16 +151,12 @@ class Changeset < ActiveRecord::Base
@long_comments || split_comments.last
end
def text_tag(ref_project=nil)
tag = if scmid?
def text_tag
if scmid?
"commit:#{scmid}"
else
"r#{revision}"
end
if ref_project && project && ref_project != project
tag = "#{project.identifier}:#{tag}"
end
tag
end
# Returns the previous changeset
@@ -217,7 +213,7 @@ class Changeset < ActiveRecord::Base
# don't change the status is the issue is closed
return if issue.status && issue.status.is_closed?
journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, text_tag(issue.project)))
journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, text_tag))
issue.status = status
unless Setting.commit_fix_done_ratio.blank?
issue.done_ratio = Setting.commit_fix_done_ratio.to_i
@@ -236,7 +232,7 @@ class Changeset < ActiveRecord::Base
:hours => hours,
:issue => issue,
:spent_on => commit_date,
:comments => l(:text_time_logged_by_changeset, :value => text_tag(issue.project),
:comments => l(:text_time_logged_by_changeset, :value => text_tag,
:locale => Setting.default_language)
)
time_entry.activity = log_time_activity unless log_time_activity.nil?
-3
View File
@@ -16,11 +16,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Comment < ActiveRecord::Base
include Redmine::SafeAttributes
belongs_to :commented, :polymorphic => true, :counter_cache => true
belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
validates_presence_of :commented, :author, :comments
safe_attributes 'comments'
end
-3
View File
@@ -16,7 +16,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Document < ActiveRecord::Base
include Redmine::SafeAttributes
belongs_to :project
belongs_to :category, :class_name => "DocumentCategory", :foreign_key => "category_id"
acts_as_attachable :delete_permission => :manage_documents
@@ -33,8 +32,6 @@ class Document < ActiveRecord::Base
named_scope :visible, lambda {|*args| { :include => :project,
:conditions => Project.allowed_to_condition(args.shift || User.current, :view_documents, *args) } }
safe_attributes 'category_id', 'title', 'description'
def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_documents, project)
end
-8
View File
@@ -51,14 +51,6 @@ class Group < Principal
end
end
def self.human_attribute_name(attribute_key_name)
attr_name = attribute_key_name
if attr_name == 'lastname'
attr_name = "name"
end
super(attr_name)
end
private
# Removes references that are not handled by associations
+1 -2
View File
@@ -16,7 +16,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class IssueCategory < ActiveRecord::Base
include Redmine::SafeAttributes
belongs_to :project
belongs_to :assigned_to, :class_name => 'Principal', :foreign_key => 'assigned_to_id'
has_many :issues, :foreign_key => 'category_id', :dependent => :nullify
@@ -25,7 +24,7 @@ class IssueCategory < ActiveRecord::Base
validates_uniqueness_of :name, :scope => [:project_id]
validates_length_of :name, :maximum => 30
safe_attributes 'name', 'assigned_to_id'
attr_protected :project_id
named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}}
+1 -11
View File
@@ -50,17 +50,7 @@ class Member < ActiveRecord::Base
def <=>(member)
a, b = roles.sort.first, member.roles.sort.first
if a == b
if principal
principal <=> member.principal
else
1
end
elsif a
a <=> b
else
1
end
a == b ? (principal <=> member.principal) : (a <=> b)
end
def deletable?
-7
View File
@@ -16,7 +16,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Message < ActiveRecord::Base
include Redmine::SafeAttributes
belongs_to :board
belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
acts_as_tree :counter_cache => :replies_count, :order => "#{Message.table_name}.created_on ASC"
@@ -49,12 +48,6 @@ class Message < ActiveRecord::Base
named_scope :visible, lambda {|*args| { :include => {:board => :project},
:conditions => Project.allowed_to_condition(args.shift || User.current, :view_messages, *args) } }
safe_attributes 'subject', 'content'
safe_attributes 'locked', 'sticky',
:if => lambda {|message, user|
user.allowed_to?(:edit_messages, message.project)
}
def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_messages, project)
end
-3
View File
@@ -16,7 +16,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class News < ActiveRecord::Base
include Redmine::SafeAttributes
belongs_to :project
belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on"
@@ -38,8 +37,6 @@ class News < ActiveRecord::Base
:conditions => Project.allowed_to_condition(args.shift || User.current, :view_news, *args)
}}
safe_attributes 'title', 'summary', 'description'
def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_news, project)
end
+1 -13
View File
@@ -32,16 +32,6 @@ class Principal < ActiveRecord::Base
:order => 'type, login, lastname, firstname, mail'
}
}
# Principals that are not members of projects
named_scope :not_member_of, lambda {|projects|
projects = [projects] unless projects.is_a?(Array)
if projects.empty?
{:conditions => "1=0"}
else
ids = projects.map(&:id)
{:conditions => ["#{Principal.table_name}.id NOT IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids]}
end
}
before_create :set_default_empty_values
@@ -50,9 +40,7 @@ class Principal < ActiveRecord::Base
end
def <=>(principal)
if principal.nil?
-1
elsif self.class.name == principal.class.name
if self.class.name == principal.class.name
self.to_s.downcase <=> principal.to_s.downcase
else
# groups after users
+5 -10
View File
@@ -253,7 +253,7 @@ class Project < ActiveRecord::Base
def to_param
# id is used for projects with a numeric identifier (compatibility)
@to_param ||= (identifier.to_s =~ %r{^\d*$} ? id.to_s : identifier)
@to_param ||= (identifier.to_s =~ %r{^\d*$} ? id : identifier)
end
def active?
@@ -390,21 +390,16 @@ class Project < ActiveRecord::Base
# Returns a scope of the Versions used by the project
def shared_versions
if new_record?
@shared_versions ||= begin
r = root? ? self : root
Version.scoped(:include => :project,
:conditions => "#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND #{Version.table_name}.sharing = 'system'")
else
@shared_versions ||= begin
r = root? ? self : root
Version.scoped(:include => :project,
:conditions => "#{Project.table_name}.id = #{id}" +
" OR (#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND (" +
:conditions => "#{Project.table_name}.id = #{id}" +
" OR (#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND (" +
" #{Version.table_name}.sharing = 'system'" +
" OR (#{Project.table_name}.lft >= #{r.lft} AND #{Project.table_name}.rgt <= #{r.rgt} AND #{Version.table_name}.sharing = 'tree')" +
" OR (#{Project.table_name}.lft < #{lft} AND #{Project.table_name}.rgt > #{rgt} AND #{Version.table_name}.sharing IN ('hierarchy', 'descendants'))" +
" OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt} AND #{Version.table_name}.sharing = 'hierarchy')" +
"))")
end
end
end
+1 -5
View File
@@ -169,10 +169,6 @@ private
name = name.to_s
raise "There's no setting named #{name}" unless @@available_settings.has_key?(name)
setting = find_by_name(name)
unless setting
setting = new(:name => name)
setting.value = @@available_settings[name]['default']
end
setting
setting ||= new(:name => name, :value => @@available_settings[name]['default']) if @@available_settings.has_key? name
end
end
-3
View File
@@ -16,7 +16,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class TimeEntry < ActiveRecord::Base
include Redmine::SafeAttributes
# could have used polymorphic association
# project association here allows easy loading of time entries at project level with one database trip
belongs_to :project
@@ -47,8 +46,6 @@ class TimeEntry < ActiveRecord::Base
:conditions => Project.allowed_to_condition(args.shift || User.current, :view_time_entries, *args)
}}
safe_attributes 'hours', 'comments', 'issue_id', 'activity_id', 'spent_on', 'custom_field_values'
def after_initialize
if new_record? && self.activity.nil?
if default_activity = TimeEntryActivity.default
+1 -1
View File
@@ -19,7 +19,7 @@ class UserPreference < ActiveRecord::Base
belongs_to :user
serialize :others
attr_protected :others, :user_id
attr_protected :others
def initialize(attributes = nil)
super
-14
View File
@@ -16,7 +16,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Version < ActiveRecord::Base
include Redmine::SafeAttributes
after_update :update_issues_from_sharing_change
belongs_to :project
has_many :fixed_issues, :class_name => 'Issue', :foreign_key => 'fixed_version_id', :dependent => :nullify
@@ -39,15 +38,6 @@ class Version < ActiveRecord::Base
named_scope :visible, lambda {|*args| { :include => :project,
:conditions => Project.allowed_to_condition(args.first || User.current, :view_issues) } }
safe_attributes 'name',
'description',
'effective_date',
'due_date',
'wiki_page_title',
'status',
'sharing',
'custom_field_values'
# Returns true if +user+ or current user is allowed to view the version
def visible?(user=User.current)
user.allowed_to?(:view_issues, self.project)
@@ -66,10 +56,6 @@ class Version < ActiveRecord::Base
effective_date
end
def due_date=(arg)
self.effective_date=(arg)
end
# Returns the total estimated time for this version
# (sum of leaves estimated_hours)
def estimated_hours
-3
View File
@@ -16,7 +16,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Wiki < ActiveRecord::Base
include Redmine::SafeAttributes
belongs_to :project
has_many :pages, :class_name => 'WikiPage', :dependent => :destroy, :order => 'title'
has_many :redirects, :class_name => 'WikiRedirect', :dependent => :delete_all
@@ -26,8 +25,6 @@ class Wiki < ActiveRecord::Base
validates_presence_of :start_page
validates_format_of :start_page, :with => /^[^,\.\/\?\;\|\:]*$/
safe_attributes 'start_page'
def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_wiki_pages, project)
end
+1 -2
View File
@@ -20,8 +20,7 @@
<td class="start_date"><%= format_date(relation.other_issue(@issue).start_date) %></td>
<td class="due_date"><%= format_date(relation.other_issue(@issue).due_date) %></td>
<td class="buttons"><%= link_to_remote(image_tag('link_break.png'), { :url => {:controller => 'issue_relations', :action => 'destroy', :id => relation},
:method => :delete,
:confirm => l(:text_are_you_sure)
:method => :delete
}, :title => l(:label_relation_delete)) if authorize_for('issue_relations', 'destroy') %></td>
</tr>
<% end %>
+1 -1
View File
@@ -76,7 +76,7 @@
<div id="footer">
<div class="bgl"><div class="bgr">
Powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %> &copy; 2006-2012 Jean-Philippe Lang
Powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %> &copy; 2006-2011 Jean-Philippe Lang
</div></div>
</div>
</div>
@@ -50,7 +50,7 @@
<% end %>
</div>
<% principals = Principal.active.not_member_of(@project).all(:limit => 100, :order => 'type, login, lastname ASC') %>
<% principals = Principal.active.find(:all, :limit => 100, :order => 'type, login, lastname ASC') - @project.principals %>
<div class="splitcontentright">
<% if roles.any? && principals.any? %>
@@ -10,7 +10,7 @@
<%= label_tag('repository_scm', l(:label_scm)) %><%= scm_select_tag(@repository) %>
<% if @repository && ! @repository.class.scm_available %>
<br />
<em class="info error"><%= content_tag 'span', l(:text_scm_command_not_available) %></em>
<em><%= content_tag 'span', l(:text_scm_command_not_available), :class => 'error' %></em>
<% end %>
</p>
<% button_disabled = true %>
@@ -5,9 +5,9 @@
<%= javascript_include_tag "revision_graph.js" %>
<script type="text/javascript">
Event.observe(window,"load", function(){
window.onload = function(){
branchGraph(document.getElementById("holder"));
})
}
</script>
<div id="holder" class="graph"></div>
@@ -1,7 +1,6 @@
<% form_tag({:action => 'edit', :tab => 'repositories'}) do %>
<fieldset class="box settings enabled_scm">
<%= hidden_field_tag 'settings[enabled_scm][]', '' %>
<legend><%= l(:setting_enabled_scm) %></legend>
<table>
<tr>
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -343,7 +343,7 @@ bg:
setting_time_format: Формат на часа
setting_cross_project_issue_relations: Релации на задачи между проекти
setting_issue_list_default_columns: Показвани колони по подразбиране
setting_repositories_encodings: Кодова таблица на прикачените файлове и хранилищата
setting_repositories_encodings: Attachments and repositories encodings
setting_emails_header: Emails header
setting_emails_footer: Подтекст за e-mail
setting_protocol: Протокол
@@ -370,7 +370,7 @@ bg:
setting_issue_done_ratio_issue_status: Използване на състоянието на задачите
setting_start_of_week: Първи ден на седмицата
setting_rest_api_enabled: Разрешаване на REST web сървис
setting_cache_formatted_text: Кеширане на форматираните текстове
setting_cache_formatted_text: Кещиране на форматираните текстове
setting_default_notification_option: Подразбиращ се начин за известяване
setting_commit_logtime_enabled: Разрешаване на отчитането на работното време
setting_commit_logtime_activity_id: Дейност при отчитане на работното време
+29 -29
View File
@@ -320,7 +320,7 @@ es:
field_start_date: Fecha de inicio
field_start_page: Página principal
field_status: Estado
field_subject: Asunto
field_subject: Tema
field_subproject: Proyecto secundario
field_summary: Resumen
field_time_zone: Zona horaria
@@ -1012,34 +1012,34 @@ es:
label_git_report_last_commit: Informar del último commit para ficheros y directorios
text_scm_config: Puede configurar las órdenes de cada scm en configuration/configuration.yml. Por favor, reinicie la aplicación después de editarlo
text_scm_command_not_available: La orden para el Scm no está disponible. Por favor, compruebe la configuración en el panel de administración.
notice_issue_successful_create: Petición %{id} creada.
label_between: entre
setting_issue_group_assignment: Permitir asignar peticiones a grupos
label_diff: diferencias
text_git_repository_note: El repositorio es básico y local (p.e. /gitrepo, c:\gitrepo)
description_query_sort_criteria_direction: Dirección de ordenación
description_project_scope: Ámbito de búsqueda
description_filter: Filtro
description_user_mail_notification: Configuración de notificaciones por correo
description_date_from: Introduzca la fecha de inicio
description_message_content: Contenido del mensaje
description_available_columns: Columnas disponibles
description_date_range_interval: Elija el rango seleccionando la fecha de inicio y fin
description_issue_category_reassign: Elija la categoría de la petición
description_search: Campo de búsqueda
description_notes: Notas
description_date_range_list: Elija el rango en la lista
description_choose_project: Proyectos
description_date_to: Introduzca la fecha fin
description_query_sort_criteria_attribute: Atributo de ordenación
description_wiki_subpages_reassign: Elija la nueva página padre
description_selected_columns: Columnas seleccionadas
label_parent_revision: Padre
label_child_revision: Hijo
notice_issue_successful_create: Issue %{id} created.
label_between: between
setting_issue_group_assignment: Allow issue assignment to groups
label_diff: diff
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
description_query_sort_criteria_direction: Sort direction
description_project_scope: Search scope
description_filter: Filter
description_user_mail_notification: Mail notification settings
description_date_from: Enter start date
description_message_content: Message content
description_available_columns: Available Columns
description_date_range_interval: Choose range by selecting start and end date
description_issue_category_reassign: Choose issue category
description_search: Searchfield
description_notes: Notes
description_date_range_list: Choose range from list
description_choose_project: Projects
description_date_to: Enter end date
description_query_sort_criteria_attribute: Sort attribute
description_wiki_subpages_reassign: Choose new parent page
description_selected_columns: Selected Columns
label_parent_revision: Parent
label_child_revision: Child
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})
description_all_columns: All Columns
button_export: Export
label_export_options: "%{export_format} export options"
error_attachment_too_big: This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})
+1 -1
View File
@@ -898,7 +898,7 @@ fa:
text_user_wrote: "%{value} نوشت:"
text_enumeration_destroy_question: "%{count} داده به این برشمردنی وابسته شده‌اند."
text_enumeration_category_reassign_to: 'به این برشمردنی وابسته شوند:'
text_email_delivery_not_configured: "دریافت ایمیل پیکربندی نشده است و آگاه‌سازی‌ها غیر فعال هستند.\nکارگزار SMTP خود را در config/configuration.yml پیکربندی کنید و برنامه را بازنشانی کنید تا فعال شوند."
text_email_delivery_not_configured: "دریافت ایمیل پیکربندی نشده است و آگاه‌سازی‌ها غیر فعال هستند.\nکارگزار SMTP خود را در config/email.yml پیکربندی کنید و برنامه را بازنشانی کنید تا فعال شوند."
text_repository_usernames_mapping: "کاربر Redmine که به هر نام کاربری پیام‌های انباره نگاشت می‌شود را برگزینید.\nکاربرانی که نام کاربری یا ایمیل همسان دارند، خود به خود نگاشت می‌شوند."
text_diff_truncated: '... این تفاوت بریده شده چون بیشتر از بیشترین اندازه نمایش دادنی است.'
text_custom_field_possible_values_info: 'یک خط برای هر مقدار'
+27 -27
View File
@@ -979,31 +979,31 @@ it:
label_between: tra
setting_issue_group_assignment: Permetti di assegnare una segnalazione a gruppi
label_diff: diff
text_git_repository_note: Il repository è spoglio e locale (e.g. /gitrepo, c:\gitrepo)
description_query_sort_criteria_direction: Ordinamento
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
description_query_sort_criteria_direction: Sort direction
description_project_scope: Search scope
description_filter: Filtro
description_user_mail_notification: Impostazioni notifica via mail
description_date_from: Inserisci la data d'inizio
description_message_content: Contenuto del messaggio
description_available_columns: Colonne disponibili
description_date_range_interval: Scegli l'intervallo selezionando la data di inizio e di fine
description_issue_category_reassign: Scegli la categoria della segnalazione
description_search: Campo di ricerca
description_notes: Note
description_date_range_list: Scegli l'intervallo dalla lista
description_choose_project: Progetti
description_date_to: Inserisci la data di fine
description_query_sort_criteria_attribute: Attributo di ordinamento
description_wiki_subpages_reassign: Scegli la nuova pagina padre
description_selected_columns: Colonne selezionate
label_parent_revision: Padre
label_child_revision: Figlio
error_scm_annotate_big_text_file: La nota non può essere salvata, supera la dimensiona massima del campo di testo.
setting_default_issue_start_date_to_creation_date: Usa la data corrente come data d'inizio per le nuove segnalazioni
button_edit_section: Modifica questa sezione
setting_repositories_encodings: Codifica degli allegati e dei repository
description_all_columns: Tutte le colonne
button_export: Esporta
label_export_options: "%{export_format} opzioni per l'export"
error_attachment_too_big: Questo file non può essere caricato in quanto la sua dimensione supera la massima consentita (%{max_size})
description_filter: Filter
description_user_mail_notification: Mail notification settings
description_date_from: Enter start date
description_message_content: Message content
description_available_columns: Available Columns
description_date_range_interval: Choose range by selecting start and end date
description_issue_category_reassign: Choose issue category
description_search: Searchfield
description_notes: Notes
description_date_range_list: Choose range from list
description_choose_project: Projects
description_date_to: Enter end date
description_query_sort_criteria_attribute: Sort attribute
description_wiki_subpages_reassign: Choose new parent page
description_selected_columns: Selected Columns
label_parent_revision: Parent
label_child_revision: Child
error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
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: All Columns
button_export: Export
label_export_options: "%{export_format} export options"
error_attachment_too_big: This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})
+77 -78
View File
@@ -2,8 +2,7 @@
# by Kihyun Yoon(ddumbugie@gmail.com),http://plenum.textcube.com/
# by John Hwang (jhwang@tavon.org),http://github.com/tavon
# by Yonghwan SO(please insert your email), last update at 2009-09-11
# by Ki Won Kim(xyz37@naver.com, http://xyz37.blog.me, https://x10.mine.nu/redmine), last update at 2012-02-01
# last update at 2012-02-02 by Ki Won Kim
# last update at 2010-09-06 by Kihyun Yoon
ko:
direction: ltr
date:
@@ -177,7 +176,7 @@ ko:
greater_than_start_date: "는 시작날짜보다 커야 합니다"
not_same_project: "는 같은 프로젝트에 속해 있지 않습니다"
circular_dependency: "이 관계는 순환 의존관계를 만들 수 있습니다"
cant_link_an_issue_with_a_descendant: "일감은 그것의 하위 일감과 연결할 수 없습니다."
cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
actionview_instancetag_blank_option: 선택하세요
@@ -288,7 +287,7 @@ ko:
field_admin: 관리자
field_last_login_on: 마지막 로그인
field_language: 언어
field_effective_date: 날짜
field_effective_date: 일자
field_password: 비밀번호
field_new_password: 새 비밀번호
field_password_confirmation: 비밀번호 확인
@@ -364,7 +363,7 @@ ko:
setting_user_format: 사용자 표시 형식
setting_activity_days_default: 프로젝트 작업내역에 표시할 기간
setting_display_subprojects_issues: 하위 프로젝트의 일감을 함께 표시
setting_enabled_scm: "지원할 SCM(Source Control Management)"
setting_enabled_scm: 지원할 SCM
setting_mail_handler_api_enabled: 수신 메일에 WS를 허용
setting_mail_handler_api_key: API 키
setting_sequential_project_identifiers: 프로젝트 식별자를 순차적으로 생성
@@ -687,10 +686,10 @@ ko:
label_blocked_by: "다음 일감에게 막혀 있음:"
label_precedes: "다음에 진행할 일감:"
label_follows: "다음 일감을 우선 진행:"
label_end_to_start: "끝에서 시작"
label_end_to_end: "끝에서 끝"
label_start_to_start: "시작에서 시작"
label_start_to_end: "시작에서 끝"
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_stay_logged_in: 로그인 유지
label_disabled: 비활성화
label_show_completed_versions: 완료된 버전 보기
@@ -988,74 +987,74 @@ ko:
setting_commit_logtime_activity_id: 기록된 시간에 적용할 작업분류
text_time_logged_by_changeset: "변경묶음 %{value}에서 적용되었습니다."
setting_commit_logtime_enabled: 커밋 시점에 작업 시간 기록 활성화
notice_gantt_chart_truncated: "표시할 수 있는 최대 항목수(%{max})를 초과하여 차트가 잘렸습니다."
setting_gantt_items_limit: "Gantt 차트에 표시되는 최대 항목수"
field_warn_on_leaving_unsaved: "저장하지 않은 페이지를 빠져나갈 때 나에게 알림"
text_warn_on_leaving_unsaved: "현재 페이지는 저장되지 않은 문자가 있습니다. 이 페이지를 빠져나가면 내용을 잃을것입니다."
label_my_queries: "내 검색 양식"
text_journal_changed_no_detail: "%{label}이 변경되었습니다."
label_news_comment_added: "뉴스에 설명이 추가되었습니다."
button_expand_all: "모두 확장"
button_collapse_all: "모두 축소"
label_additional_workflow_transitions_for_assignee: "사용자가 작업자일 때 허용되는 추가 상태"
label_additional_workflow_transitions_for_author: "사용자가 저자일 때 허용되는 추가 상태"
label_bulk_edit_selected_time_entries: "선택된 소요 시간 대량 편집"
text_time_entries_destroy_confirmation: "선택한 소요 시간 항목을 삭제하시겠습니까?"
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: 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} 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: 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: "덧글이 추가되었습니다."
label_issue_status_updated: "상태가 변경되었습니다."
label_issue_priority_updated: "우선 순위가 변경되었습니다."
label_issues_visibility_own: "일감을 생성하거나 할당된 사용자"
field_issues_visibility: "일감 보임"
label_issues_visibility_all: "모든 일감"
permission_set_own_issues_private: "자신의 일감을 공개나 비공개로 설정"
field_is_private: "비공개"
permission_set_issues_private: "일감을 공개나 비공개로 설정"
label_issues_visibility_public: "모든 비공개 일감"
text_issues_destroy_descendants_confirmation: "%{count} 개의 하위 일감을 삭제할 것입니다."
field_commit_logs_encoding: "제출(commit) 기록 인코딩"
field_scm_path_encoding: "경로 인코딩"
text_scm_path_encoding_note: "기본: UTF-8"
field_path_to_repository: "저장소 경로"
field_root_directory: "루트 경로"
field_cvs_module: "모듈"
field_cvsroot: "CVS 루트"
text_mercurial_repository_note: "로컬 저장소 (예: /hgrepo, c:\hgrepo)"
text_scm_command: "명령"
text_scm_command_version: "버전"
label_git_report_last_commit: "파일이나 폴더의 마지막 제출(commit)을 보고"
text_scm_config: "SCM 명령을 config/configuration.yml에서 수정할 수 있습니다. 수정후에는 재시작하십시오."
text_scm_command_not_available: "SCM 명령을 사용할 수 없습니다. 관리 페이지의 설정을 검사하십시오."
notice_issue_successful_create: "%{id} 일감이 생성되었습니다."
label_between: "사이"
setting_issue_group_assignment: "그룹에 일감 할당 허용"
label_diff: "비교(diff)"
text_git_repository_note: "저장소는 노출된 로컬입니다. (예: /gitrepo, c:\gitrepo)"
description_query_sort_criteria_direction: "정렬 방향"
description_project_scope: "검색 범위"
description_filter: "검색 조건"
description_user_mail_notification: "메일 알림 설정"
description_date_from: "시작 날짜 입력"
description_message_content: "메세지 내용"
description_available_columns: "가능한 컬럼"
description_date_range_interval: 시작과 끝 날짜로 범위를 선택하십시오."
description_issue_category_reassign: "일감 범주를 선택하십시오."
description_search: "검색항목"
description_notes: "덧글"
description_date_range_list: "목록에서 범위를 선택 하십시오."
description_choose_project: "프로젝트"
description_date_to: "종료 날짜 입력"
description_query_sort_criteria_attribute: "정렬 속성"
description_wiki_subpages_reassign: "새로운 상위 페이지를 선택하십시오."
description_selected_columns: "선택된 컬럼"
label_parent_revision: "상위"
label_child_revision: "하위"
error_scm_annotate_big_text_file: "최대 텍스트 파일 크기를 초과 하면 항목은 이력화 될 수 없습니다."
setting_default_issue_start_date_to_creation_date: "새로운 일감의 시작 날짜로 오늘 날짜 사용"
button_edit_section: "이 부분 수정"
setting_repositories_encodings: "첨부파일이나 저장소 인코딩"
description_all_columns: "모든 컬럼"
button_export: "내보내기"
label_export_options: "내보내기 옵션: %{export_format}"
error_attachment_too_big: "이 파일은 제한된 크기(%{max_size})를 초과하였기 때문에 업로드 할 수 없습니다."
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: 제출(commit) 기록 인코딩
field_scm_path_encoding: Path encoding
text_scm_path_encoding_note: "Default: UTF-8"
field_path_to_repository: Path to repository
field_root_directory: Root directory
field_cvs_module: Module
field_cvsroot: CVSROOT
text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
text_scm_command: Command
text_scm_command_version: Version
label_git_report_last_commit: Report last commit for files and directories
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
notice_issue_successful_create: Issue %{id} created.
label_between: between
setting_issue_group_assignment: Allow issue assignment to groups
label_diff: diff
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
description_query_sort_criteria_direction: Sort direction
description_project_scope: Search scope
description_filter: Filter
description_user_mail_notification: Mail notification settings
description_date_from: Enter start date
description_message_content: Message content
description_available_columns: Available Columns
description_date_range_interval: Choose range by selecting start and end date
description_issue_category_reassign: Choose issue category
description_search: Searchfield
description_notes: Notes
description_date_range_list: Choose range from list
description_choose_project: Projects
description_date_to: Enter end date
description_query_sort_criteria_attribute: Sort attribute
description_wiki_subpages_reassign: Choose new parent page
description_selected_columns: Selected Columns
label_parent_revision: Parent
label_child_revision: Child
error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
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: All Columns
button_export: Export
label_export_options: "%{export_format} export options"
error_attachment_too_big: This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})
+14 -16
View File
@@ -1000,25 +1000,23 @@ pt-BR:
setting_issue_group_assignment: Allow issue assignment to groups
label_diff: diff
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
description_query_sort_criteria_direction: Sort direction
description_project_scope: Escopo da pesquisa
description_filter: Filtro
description_user_mail_notification: Configuração de notificações por e-mail
description_date_from: Digita a data inicial
description_message_content: Conteúdo da mensagem
description_available_columns: Colunas disponíveis
description_date_range_interval: Escolha um período selecionando a data de início e fim
description_issue_category_reassign: Escolha uma categoria de tarefas
description_project_scope: Search scope
description_filter: Filter
description_user_mail_notification: Mail notification settings
description_date_from: Enter start date
description_message_content: Message content
description_available_columns: Available Columns
description_date_range_interval: Choose range by selecting start and end date
description_issue_category_reassign: Choose issue category
description_search: Searchfield
description_notes: Notas
description_date_range_list: Escolha um período a partira da lista
description_choose_project: Projetos
description_date_to: Digite a data final
description_notes: Notes
description_date_range_list: Choose range from list
description_choose_project: Projects
description_date_to: Enter end date
description_query_sort_criteria_attribute: Sort attribute
description_wiki_subpages_reassign: Escolha uma nova página pai
description_selected_columns: Colunas selecionadas
description_wiki_subpages_reassign: Choose new parent page
description_selected_columns: Selected Columns
label_parent_revision: Parent
label_child_revision: Child
error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
+46 -47
View File
@@ -8,10 +8,10 @@ uk:
default: "%Y-%m-%d"
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]
# 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]
@@ -29,7 +29,7 @@ uk:
long: "%B %d, %Y %H:%M"
am: "am"
pm: "pm"
datetime:
distance_in_words:
half_a_minute: "half a minute"
@@ -67,32 +67,32 @@ uk:
one: "almost 1 year"
other: "almost %{count} years"
number:
number:
format:
separator: "."
delimiter: ""
precision: 3
human:
format:
human:
format:
precision: 1
delimiter: ""
storage_units:
storage_units:
format: "%n %u"
units:
units:
kb: KB
tb: TB
gb: GB
byte:
byte:
one: Byte
other: Bytes
mb: MB
# Used in array.to_sentence.
support:
array:
sentence_connector: "and"
skip_last_comma: false
activerecord:
errors:
template:
@@ -126,7 +126,7 @@ uk:
cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
actionview_instancetag_blank_option: Оберіть
general_text_No: 'Ні'
general_text_Yes: 'Так'
general_text_no: 'Ні'
@@ -137,7 +137,7 @@ uk:
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: Пароль успішно оновлений.
@@ -161,7 +161,7 @@ uk:
notice_failed_to_save_issues: "Не вдалося зберегти %{count} пункт(ів) з %{total} вибраних: %{ids}."
notice_no_issue_selected: "Не вибрано жодної задачі! Будь ласка, відзначте задачу, яку ви хочете відредагувати."
notice_account_pending: "Ваш обліковий запис створено і він чекає на підтвердження адміністратором."
mail_subject_lost_password: "Ваш %{value} пароль"
mail_body_lost_password: 'Для зміни пароля, зайдіть за наступним посиланням:'
mail_subject_register: "Активація облікового запису %{value}"
@@ -170,10 +170,10 @@ uk:
mail_body_account_information: Інформація по Вашому обліковому запису
mail_subject_account_activation_request: "Запит на активацію облікового запису %{value}"
mail_body_account_activation_request: "Новий користувач (%{value}) зареєструвався. Його обліковий запис чекає на ваше підтвердження:"
gui_validation_error: 1 помилка
gui_validation_error_plural: "%{count} помилки(ок)"
field_name: Ім'я
field_description: Опис
field_summary: Короткий опис
@@ -191,8 +191,8 @@ uk:
field_is_for_all: Для усіх проектів
field_possible_values: Можливі значення
field_regexp: Регулярний вираз
field_min_length: Мінімальна довжина
field_max_length: Максимальна довжина
field_min_length: Мінімальна довжина
field_max_length: Максимальна довжина
field_value: Значення
field_category: Категорія
field_title: Назва
@@ -214,9 +214,9 @@ uk:
field_is_public: Публічний
field_parent: Підпроект
field_is_in_roadmap: Питання, що відображаються в оперативному плані
field_login: Вхід
field_login: Вхід
field_mail_notification: Повідомлення за електронною поштою
field_admin: Адміністратор
field_admin: Адміністратор
field_last_login_on: Останнє підключення
field_language: Мова
field_effective_date: Дата
@@ -255,7 +255,7 @@ uk:
field_column_names: Колонки
field_time_zone: Часовий пояс
field_searchable: Вживається у пошуку
setting_app_title: Назва додатку
setting_app_subtitle: Підзаголовок додатку
setting_welcome_text: Текст привітання
@@ -281,7 +281,7 @@ uk:
setting_issue_list_default_columns: Колонки, що відображаються за умовчанням в списку питань
setting_emails_footer: Підпис до електронної пошти
setting_protocol: Протокол
label_user: Користувач
label_user_plural: Користувачі
label_user_new: Новий користувач
@@ -404,15 +404,15 @@ uk:
label_total: Всього
label_permissions: Права доступу
label_current_status: Поточний статус
label_new_statuses_allowed: Дозволені нові статуси
label_new_statuses_allowed: Дозволені нові статуси
label_all: Усі
label_none: Нікому
label_nobody: Ніхто
label_next: Наступний
label_previous: Попередній
label_used_by: Використовується
label_used_by: Використовується
label_details: Подробиці
label_add_note: Додати зауваження
label_add_note: Додати зауваження
label_per_page: На сторінку
label_calendar: Календар
label_months_from: місяців(ця) з
@@ -442,8 +442,8 @@ uk:
label_in: у
label_today: сьогодні
label_this_week: цього тижня
label_less_than_ago: менш ніж днів(я) назад
label_more_than_ago: більш ніж днів(я) назад
label_less_than_ago: менш ніж днів(я) назад
label_more_than_ago: більш ніж днів(я) назад
label_ago: днів(я) назад
label_contains: містить
label_not_contains: не містить
@@ -455,7 +455,7 @@ uk:
label_revision: Версія
label_revision_plural: Версій
label_added: додано
label_modified: змінене
label_modified: змінене
label_deleted: видалено
label_latest_revision: Остання версія
label_latest_revision_plural: Останні версії
@@ -470,11 +470,11 @@ uk:
label_roadmap_overdue: "%{value} запізнення"
label_roadmap_no_issues: Немає питань для даної версії
label_search: Пошук
label_result_plural: Результати
label_result_plural: Результати
label_all_words: Всі слова
label_wiki: Wiki
label_wiki_edit: Редагування Wiki
label_wiki_edit_plural: Редагування Wiki
label_wiki_edit_plural: Редагування Wiki
label_wiki_page: Сторінка Wiki
label_wiki_page_plural: Сторінки Wiki
label_index_by_title: Індекс за назвою
@@ -482,7 +482,7 @@ uk:
label_current_version: Поточна версія
label_preview: Попередній перегляд
label_feed_plural: Подання
label_changes_details: Подробиці по всіх змінах
label_changes_details: Подробиці по всіх змінах
label_issue_tracking: Координація питань
label_spent_time: Витрачений час
label_f_hour: "%{value} година"
@@ -491,7 +491,7 @@ uk:
label_change_plural: Зміни
label_statistics: Статистика
label_commits_per_month: Подань на місяць
label_commits_per_author: Подань на користувача
label_commits_per_author: Подань на користувача
label_view_diff: Проглянути відмінності
label_diff_inline: підключений
label_diff_side_by_side: поряд
@@ -507,7 +507,7 @@ uk:
label_relates_to: пов'язане з
label_duplicates: дублює
label_blocks: блокує
label_blocked_by: заблоковане
label_blocked_by: заблоковане
label_precedes: передує
label_follows: наступний за
label_end_to_start: з кінця до початку
@@ -555,12 +555,12 @@ uk:
label_registration_manual_activation: ручна активація облікового запису
label_registration_automatic_activation: автоматична активація облыкового
label_my_time_report: Мій звіт витраченого часу
button_login: Вхід
button_submit: Відправити
button_save: Зберегти
button_check_all: Відзначити все
button_uncheck_all: Очистити
button_check_all: Відзначити все
button_uncheck_all: Очистити
button_delete: Видалити
button_create: Створити
button_test: Перевірити
@@ -588,14 +588,14 @@ uk:
button_unarchive: Розархівувати
button_reset: Перезапустити
button_rename: Перейменувати
button_change_password: Змінити пароль
button_change_password: Змінити пароль
button_copy: Копіювати
button_annotate: Анотувати
status_active: Активний
status_registered: Зареєстрований
status_registered: Зареєстрований
status_locked: Заблокований
text_select_mail_notifications: Виберіть дії, на які відсилатиметься повідомлення на електронну пошту.
text_regexp_info: eg. ^[A-Z0-9]+$
text_min_max_length_info: 0 означає відсутність заборон
@@ -620,14 +620,12 @@ uk:
text_issue_category_destroy_assignments: Видалити призначення категорії
text_issue_category_reassign_to: Перепризначити задачі до даної категорії
text_user_mail_option: "Для невибраних проектів ви отримуватимете повідомлення тільки про те, що проглядаєте або в чому берете участь (наприклад, питання автором яких ви є або які вам призначені)."
default_role_manager: Менеджер
default_role_developer: Розробник
default_role_reporter: Репортер
# default_tracker_bug: Bug
# звітів default_tracker_bug: Помилка
default_tracker_bug: Помилка
default_tracker_feature: Властивість
звітів default_tracker_bug: Помилка
default_tracker_feature: Властивість
default_tracker_support: Підтримка
default_issue_status_new: Новий
default_issue_status_in_progress: In Progress
@@ -636,7 +634,7 @@ uk:
default_issue_status_closed: Зачинено
default_issue_status_rejected: Відмовлено
default_doc_category_user: Документація користувача
default_doc_category_tech: Технічна документація
default_doc_category_tech: Технічна документація
default_priority_low: Низький
default_priority_normal: Нормальний
default_priority_high: Високий
@@ -644,7 +642,7 @@ uk:
default_priority_immediate: Негайний
default_activity_design: Проектування
default_activity_development: Розробка
enumeration_issue_priorities: Пріоритети питань
enumeration_doc_categories: Категорії документів
enumeration_activities: Дії (облік часу)
@@ -665,6 +663,7 @@ uk:
label_file_added: File added
label_more: More
field_default_value: Default value
default_tracker_bug: Bug
label_scm: SCM
label_general: General
button_update: Update
+1 -39
View File
@@ -1,47 +1,9 @@
== Redmine changelog
Redmine - project management software
Copyright (C) 2006-2012 Jean-Philippe Lang
Copyright (C) 2006-2011 Jean-Philippe Lang
http://www.redmine.org/
== 2012-03-11 v1.3.2
* Defect #8194: {{toc}} uses identical anchors for subsections with the same name
* Defect #9143: Partial diff comparison should be done on actual code, not on html
* Defect #9523: {{toc}} does not display headers with @ code markup
* Defect #9815: Release 1.3.0 does not detect rubytree with rubgems 1.8
* Defect #10053: undefined method `<=>' for nil:NilClass when accessing the settings of a project
* Defect #10135: ActionView::TemplateError (can't convert Fixnum into String)
* Defect #10193: Unappropriate icons in highlighted code block
* Defect #10199: No wiki section edit when title contains code
* Defect #10218: Error when creating a project with a version custom field
* Defect #10241: "get version by ID" fails with "401 not authorized" error when using API access key
* Defect #10284: Note added by commit from a subproject does not contain project identifier
* Defect #10374: User list is empty when adding users to project / group if remaining users are added late
* Defect #10390: Mass assignment security vulnerability
* Patch #8413: Confirmation message before deleting a relationship
* Patch #10160: Bulgarian translation (r8777)
* Patch #10242: Migrate Redmine.pm from Digest::Sha1 to Digest::Sha
* Patch #10258: Italian translation for 1.3-stable
== 2012-02-06 v1.3.1
* Defect #9775: app/views/repository/_revision_graph.html.erb sets window.onload directly..
* Defect #9792: Ruby 1.9: [v1.3.0] Error: incompatible character encodings for it translation on Calendar page
* Defect #9793: Bad spacing between numbered list and heading (recently broken).
* Defect #9795: Unrelated error message when creating a group with an invalid name
* Defect #9832: Revision graph height should depend on height of rows in revisions table
* Defect #9937: Repository settings are not saved when all SCM are disabled
* Defect #9961: Ukrainian "default_tracker_bug" is wrong
* Defect #10013: Rest API - Create Version -> Internal server error 500
* Defect #10115: Javascript error - Can't attach more than 1 file on IE 6 and 7
* Defect #10130: Broken italic text style in edited comment preview
* Defect #10152: Attachment diff type is not saved in user preference
* Feature #9943: Arabic translation
* Patch #9874: pt-BR translation updates
* Patch #9922: Spanish translation updated
* Patch #10137: Korean language file ko.yml updated to Redmine 1.3.0
== 2011-12-10 v1.3.0
* Defect #2109: Context menu is being submitted twice per right click
+3 -3
View File
@@ -99,7 +99,7 @@ use strict;
use warnings FATAL => 'all', NONFATAL => 'redefine';
use DBI;
use Digest::SHA;
use Digest::SHA1;
# optional module for LDAP authentication
my $CanUseLDAPAuth = eval("use Authen::Simple::LDAP; 1");
@@ -327,7 +327,7 @@ sub is_member {
my $dbh = connect_database($r);
my $project_id = get_project_identifier($r);
my $pass_digest = Digest::SHA::sha1_hex($redmine_pass);
my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass);
my $access_mode = defined $read_only_methods{$r->method} ? "R" : "W";
@@ -346,7 +346,7 @@ sub is_member {
unless ($auth_source_id) {
my $method = $r->method;
my $salted_password = Digest::SHA::sha1_hex($salt.$pass_digest);
my $salted_password = Digest::SHA1::sha1_hex($salt.$pass_digest);
if ($hashed_password eq $salted_password && (($access_mode eq "R" && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/) ) {
$ret = 1;
last;
+3 -3
View File
@@ -340,9 +340,9 @@ class RedCloth3 < String
#
A_HLGN = /(?:(?:<>|<|>|\=|[()]+)+)/
A_VLGN = /[\-^~]/
C_CLAS = '(?:\([^")]+\))'
C_LNGE = '(?:\[[^"\[\]]+\])'
C_STYL = '(?:\{[^"}]+\})'
C_CLAS = '(?:\([^)]+\))'
C_LNGE = '(?:\[[^\[\]]+\])'
C_STYL = '(?:\{[^}]+\})'
S_CSPN = '(?:\\\\\d+)'
S_RSPN = '(?:/\d+)'
A = "(?:#{A_HLGN}?#{A_VLGN}?|#{A_VLGN}?#{A_HLGN}?)"
+24 -25
View File
@@ -112,6 +112,11 @@ module Redmine
private
# Escape the HTML for the diff
def escapeHTML(line)
CGI.escapeHTML(line)
end
def diff_for_added_line
if @type == 'sbs' && @removed > 0 && @added < @removed
self[-(@removed - @added)]
@@ -125,7 +130,7 @@ module Redmine
def parse_line(line, type="inline")
if line[0, 1] == "+"
diff = diff_for_added_line
diff.line_right = line[1..-1]
diff.line_right = escapeHTML line[1..-1]
diff.nb_line_right = @line_num_r
diff.type_diff_right = 'diff_in'
@line_num_r += 1
@@ -133,7 +138,7 @@ module Redmine
true
elsif line[0, 1] == "-"
diff = Diff.new
diff.line_left = line[1..-1]
diff.line_left = escapeHTML line[1..-1]
diff.nb_line_left = @line_num_l
diff.type_diff_left = 'diff_out'
self << diff
@@ -144,9 +149,9 @@ module Redmine
write_offsets
if line[0, 1] =~ /\s/
diff = Diff.new
diff.line_right = line[1..-1]
diff.line_right = escapeHTML line[1..-1]
diff.nb_line_right = @line_num_r
diff.line_left = line[1..-1]
diff.line_left = escapeHTML line[1..-1]
diff.nb_line_left = @line_num_l
self << diff
@line_num_l += 1
@@ -219,15 +224,27 @@ module Redmine
end
def html_line_left
line_to_html(line_left, offsets)
if offsets
line_left.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
else
line_left
end
end
def html_line_right
line_to_html(line_right, offsets)
if offsets
line_right.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
else
line_right
end
end
def html_line
line_to_html(line, offsets)
if offsets
line.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>')
else
line
end
end
def inspect
@@ -237,23 +254,5 @@ module Redmine
puts self.nb_line_right
puts self.line_right
end
private
def line_to_html(line, offsets)
if offsets
s = ''
unless offsets.first == 0
s << CGI.escapeHTML(line[0..offsets.first-1])
end
s << '<span>' + CGI.escapeHTML(line[offsets.first..offsets.last]) + '</span>'
unless offsets.last == -1
s << CGI.escapeHTML(line[offsets.last+1..-1])
end
s
else
CGI.escapeHTML(line)
end
end
end
end
+1 -1
View File
@@ -4,7 +4,7 @@ module Redmine
module VERSION #:nodoc:
MAJOR = 1
MINOR = 3
TINY = 2
TINY = 0
# Branch values:
# * official release: nil
+1 -1
View File
@@ -89,7 +89,7 @@ function addFileField() {
var fields = $('attachments_fields');
if (fields.childElements().length >= 10) return false;
fileFieldCount++;
var s = new Element('span');
var s = document.createElement("span");
s.update(fields.down('span').innerHTML);
s.down('input.file').name = "attachments[" + fileFieldCount + "][file]";
s.down('input.description').name = "attachments[" + fileFieldCount + "][description]";
@@ -1,125 +0,0 @@
// Calendar AR language
// Author: SmartData.com.sa
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("الاحد",
"الاثنين",
"الثلاثاء",
"الاربعاء",
"الخميس",
"الجمعة",
"السبت",
"الاحد");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("أح",
"إث",
"ث",
"أر",
"خ",
"ج",
"س",
"أح");
// First day of the week. "0" means display Sunday first, "1" means display
// Monday first, etc.
Calendar._FD = 0;
// full month names
Calendar._MN = new Array
("كانون الثاني",
"شباط",
"حزيران",
"آذار",
"أيار",
"نيسان",
"تموز",
"آب",
"أيلول",
"تشرين الاول",
"تشرين الثاني",
"كانون الاول");
// short month names
Calendar._SMN = new Array
("كانون الثاني",
"شباط",
"حزيران",
"آذار",
"أيار",
"نيسان",
"تموز",
"آب",
"أيلول",
"تشرين الاول",
"تشرين الثاني",
"كانون الاول");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "حول التقويم";
Calendar._TT["ABOUT"] =
"اختيار الوقت والتاريخ\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"اختيار التاريخ:\n" +
"- استخدم هذه الازرار \xab, \xbb لاختيار السنة\n" +
"- استخدم هذه الازرار " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " لاختيار الشهر\n" +
"- استمر في النقر فوق الازرار للتظليل السريع.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"اختيار الوقت:\n" +
"- انقر على اي جزء من اجزاء الوقت لزيادته\n" +
"- لانقاصهShiftاو انقر مع الضغط على مفتاح \n" +
"- او انقر واسحب للتظليل السريع.";
Calendar._TT["PREV_YEAR"] = "السنة السابقة";
Calendar._TT["PREV_MONTH"] = "الشهر السابق";
Calendar._TT["GO_TODAY"] = "اذهب لليوم";
Calendar._TT["NEXT_MONTH"] = "الشهر القادم";
Calendar._TT["NEXT_YEAR"] = "السنة القادمة";
Calendar._TT["SEL_DATE"] = "اختر التاريخ";
Calendar._TT["DRAG_TO_MOVE"] = "اسحب للتتحرك";
Calendar._TT["PART_TODAY"] = "اليوم";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = " اولا%sاعرض ";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "5,6";
Calendar._TT["CLOSE"] = "مغلق";
Calendar._TT["TODAY"] = "اليوم";
Calendar._TT["TIME_PART"] = "انقر او اسحب لتغير القيمة";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "رقم الاسبوع";
Calendar._TT["TIME"] = "الوقت:";
@@ -1,16 +0,0 @@
jsToolBar.strings = {};
jsToolBar.strings ['Strong'] = 'قوي';
jsToolBar.strings ['Italic'] = 'مائل';
jsToolBar.strings ['Underline'] = 'تسطير';
jsToolBar.strings ['Deleted'] = 'محذوف';
jsToolBar.strings ['Code'] = 'رمز ضمني';
jsToolBar.strings ['Heading 1'] = 'عنوان 1';
jsToolBar.strings ['Heading 2'] = 'عنوان 2';
jsToolBar.strings ['Heading 3'] = 'عنوان 3';
jsToolBar.strings ['Unordered list'] = 'قائمة غير مرتبة';
jsToolBar.strings ['Ordered list'] = 'قائمة مرتبة';
jsToolBar.strings ['Quote'] = 'اقتباس';
jsToolBar.strings ['Unquote'] = 'إزالة الاقتباس';
jsToolBar.strings ['Preformatted text'] = 'نص مسبق التنسيق';
jsToolBar.strings ['Wiki link'] = 'رابط الى صفحة ويكي';
jsToolBar.strings ['Image'] = 'صورة';
+1 -2
View File
@@ -26,8 +26,7 @@ for (var k = 0; k < max_space; k++) {
}
function branchGraph(holder) {
var xstep = 20;
var ystep = $$('tr.changeset')[0].getHeight();
var xstep = 20, ystep = 20;
var ch, cw;
cw = max_space * xstep + xstep;
ch = max_rdmid * ystep + ystep;
+5 -6
View File
@@ -391,7 +391,7 @@ ul.properties li span {font-style:italic;}
.total-hours span.hours-int { font-size: 120%; }
.autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
#user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select, #user_identity_url { width: 90%; }
#user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select { width: 90%; }
#workflow_copy_form select { width: 200px; }
@@ -443,6 +443,8 @@ margin-left: 5px !important;
width: auto;
}
form em {font-style:normal;font-size:90%;color:#888;}
label.no-css {
font-weight: inherit;
float:none;
@@ -481,9 +483,6 @@ p.other-formats { text-align: right; font-size:0.9em; color: #666; }
a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
em.info {font-style:normal;font-size:90%;color:#888;display:block;}
em.info.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
/* Project members tab */
div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% }
div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% }
@@ -537,6 +536,8 @@ div.flash.warning {
color: #A6750C;
}
span.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
#errorExplanation ul { font-size: 0.9em;}
#errorExplanation h2, #errorExplanation p { display: none; }
@@ -748,8 +749,6 @@ div.wiki a.new {
color: #b73535;
}
div.wiki ul, div.wiki ol {margin-bottom:1em;}
div.wiki pre {
margin: 1em 1em 1em 1.6em;
padding: 2px 2px 2px 0;
@@ -91,21 +91,6 @@ class AttachmentsControllerTest < ActionController::TestCase
set_tmp_attachments_directory
end
def test_save_diff_type
@request.session[:user_id] = 1 # admin
user = User.find(1)
get :show, :id => 5
assert_response :success
assert_template 'diff'
user.reload
assert_equal "inline", user.pref[:diff_type]
get :show, :id => 5, :type => 'sbs'
assert_response :success
assert_template 'diff'
user.reload
assert_equal "sbs", user.pref[:diff_type]
end
def test_show_text_file
get :show, :id => 4
assert_response :success
@@ -88,14 +88,6 @@ class BoardsControllerTest < ActionController::TestCase
assert_equal 'Testing', Board.find(2).name
end
def test_update_position
@request.session[:user_id] = 2
post :edit, :project_id => 1, :id => 2, :board => { :move_to => 'highest'}
assert_redirected_to '/projects/ecookbook/settings/boards'
board = Board.find(2)
assert_equal 1, board.position
end
def test_post_destroy
@request.session[:user_id] = 2
assert_difference 'Board.count', -1 do
+7 -5
View File
@@ -147,6 +147,7 @@ class IssuesControllerTest < ActionController::TestCase
end
def test_index_with_short_filters
to_test = {
'status_id' => {
'o' => { :op => 'o', :values => [''] },
@@ -180,9 +181,9 @@ class IssuesControllerTest < ActionController::TestCase
't-2' => { :op => 't-', :values => ['2'] }},
'created_on' => {
'>=2011-10-12' => { :op => '>=', :values => ['2011-10-12'] },
'<t-2' => { :op => '<t-', :values => ['2'] },
'>t-2' => { :op => '>t-', :values => ['2'] },
't-2' => { :op => 't-', :values => ['2'] }},
'<t+2' => { :op => '=', :values => ['<t+2'] },
'>t+2' => { :op => '=', :values => ['>t+2'] },
't+2' => { :op => 't', :values => ['+2'] }},
'cf_1' => {
'c' => { :op => '=', :values => ['c'] },
'!c' => { :op => '!', :values => ['c'] },
@@ -214,6 +215,7 @@ class IssuesControllerTest < ActionController::TestCase
assert_equal(default_filter.merge({field => {:operator => expected[:op], :values => expected[:values]}}), query.filters)
end
end
end
def test_index_with_project_and_empty_filters
@@ -931,7 +933,7 @@ class IssuesControllerTest < ActionController::TestCase
def test_post_new_with_group_assignment
group = Group.find(11)
project = Project.find(1)
project.members << Member.new(:principal => group, :roles => [Role.givable.first])
project.members << Member.new(:principal => group, :roles => [Role.first])
with_settings :issue_group_assignment => '1' do
@request.session[:user_id] = 2
@@ -1801,7 +1803,7 @@ class IssuesControllerTest < ActionController::TestCase
def test_bulk_update_with_group_assignee
group = Group.find(11)
project = Project.find(1)
project.members << Member.new(:principal => group, :roles => [Role.givable.first])
project.members << Member.new(:principal => group, :roles => [Role.first])
@request.session[:user_id] = 2
# update issues assignee
@@ -13,8 +13,6 @@ class ProjectEnumerationsControllerTest < ActionController::TestCase
:custom_fields_trackers, :custom_values,
:time_entries
self.use_transactional_fixtures = false
def setup
@request.session[:user_id] = nil
Setting.default_language = 'en'
@@ -308,26 +308,6 @@ class RepositoriesGitControllerTest < ActionController::TestCase
end
end
def test_save_diff_type
@request.session[:user_id] = 1 # admin
user = User.find(1)
get :diff,
:id => PRJ_ID,
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
assert_response :success
assert_template 'diff'
user.reload
assert_equal "inline", user.pref[:diff_type]
get :diff,
:id => PRJ_ID,
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7',
:type => 'sbs'
assert_response :success
assert_template 'diff'
user.reload
assert_equal "sbs", user.pref[:diff_type]
end
def test_annotate
get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
assert_response :success
@@ -42,8 +42,6 @@ class SettingsControllerTest < ActionController::TestCase
get :edit
assert_response :success
assert_template 'edit'
assert_tag 'input', :attributes => {:name => 'settings[enabled_scm][]', :value => ''}
end
def test_post_edit_notifications
+1 -1
View File
@@ -64,7 +64,7 @@ class TrackersControllerTest < ActionController::TestCase
tracker = Tracker.first(:order => 'id DESC')
assert_equal 'New tracker', tracker.name
assert_equal [1], tracker.project_ids.sort
assert_equal [1, 6], tracker.custom_field_ids.sort
assert_equal [1, 6], tracker.custom_field_ids
assert_equal 0, tracker.workflows.count
end
@@ -69,20 +69,6 @@ class ApiTest::VersionsTest < ActionController::IntegrationTest
assert_tag 'version', :child => {:tag => 'id', :content => version.id.to_s}
end
should "create the version with due date" do
assert_difference 'Version.count' do
post '/projects/1/versions.xml', {:version => {:name => 'API test', :due_date => '2012-01-24'}}, :authorization => credentials('jsmith')
end
version = Version.first(:order => 'id DESC')
assert_equal 'API test', version.name
assert_equal Date.parse('2012-01-24'), version.due_date
assert_response :created
assert_equal 'application/xml', @response.content_type
assert_tag 'version', :child => {:tag => 'id', :content => version.id.to_s}
end
context "with failure" do
should "return the errors" do
assert_no_difference('Version.count') do
-38
View File
@@ -178,24 +178,6 @@ class ChangesetTest < ActiveSupport::TestCase
assert c.issues.first.project != c.project
end
def test_commit_closing_a_subproject_issue
with_settings :commit_fix_status_id => 5, :commit_fix_keywords => 'closes' do
issue = Issue.find(5)
assert !issue.closed?
assert_difference 'Journal.count' do
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => Time.now,
:comments => 'closes #5, a subproject issue',
:revision => '12345')
assert c.save
end
assert issue.reload.closed?
journal = Journal.first(:order => 'id DESC')
assert_equal issue, journal.issue
assert_include "Applied in changeset ecookbook:r12345.", journal.notes
end
end
def test_commit_referencing_a_parent_project_issue
# repository of child project
r = Repository::Subversion.create!(
@@ -215,16 +197,6 @@ class ChangesetTest < ActiveSupport::TestCase
assert_equal 'r520', c.text_tag
end
def test_text_tag_revision_with_same_project
c = Changeset.new(:revision => '520', :repository => Project.find(1).repository)
assert_equal 'r520', c.text_tag(Project.find(1))
end
def test_text_tag_revision_with_different_project
c = Changeset.new(:revision => '520', :repository => Project.find(1).repository)
assert_equal 'ecookbook:r520', c.text_tag(Project.find(2))
end
def test_text_tag_hash
c = Changeset.new(
:scmid => '7234cb2750b63f47bff735edc50a1c0a433c2518',
@@ -232,16 +204,6 @@ class ChangesetTest < ActiveSupport::TestCase
assert_equal 'commit:7234cb2750b63f47bff735edc50a1c0a433c2518', c.text_tag
end
def test_text_tag_hash_with_same_project
c = Changeset.new(:revision => '7234cb27', :scmid => '7234cb27', :repository => Project.find(1).repository)
assert_equal 'commit:7234cb27', c.text_tag(Project.find(1))
end
def test_text_tag_hash_with_different_project
c = Changeset.new(:revision => '7234cb27', :scmid => '7234cb27', :repository => Project.find(1).repository)
assert_equal 'ecookbook:commit:7234cb27', c.text_tag(Project.find(2))
end
def test_text_tag_hash_all_number
c = Changeset.new(:scmid => '0123456789', :revision => '0123456789')
assert_equal 'commit:0123456789', c.text_tag

Some files were not shown because too many files have changed in this diff Show More