Revision 912:5e80956cc792 .svn/pristine/01

View differences:

.svn/pristine/01/01049e9d9cec55a96b7b1a93672943d74c1a87d6.svn-base
1
class AddCustomFieldsSearchable < ActiveRecord::Migration
2
  def self.up
3
    add_column :custom_fields, :searchable, :boolean, :default => false
4
  end
5

  
6
  def self.down
7
    remove_column :custom_fields, :searchable
8
  end
9
end
.svn/pristine/01/011d952bc7773843d5a8219df22dce0959479d6d.svn-base
1
# Redmine - project management software
2
# Copyright (C) 2006-2011  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17

  
18
require File.expand_path('../../test_helper', __FILE__)
19

  
20
class DocumentCategoryTest < ActiveSupport::TestCase
21
  fixtures :enumerations, :documents, :issues
22

  
23
  def test_should_be_an_enumeration
24
    assert DocumentCategory.ancestors.include?(Enumeration)
25
  end
26

  
27
  def test_objects_count
28
    assert_equal 2, DocumentCategory.find_by_name("Uncategorized").objects_count
29
    assert_equal 0, DocumentCategory.find_by_name("User documentation").objects_count
30
  end
31

  
32
  def test_option_name
33
    assert_equal :enumeration_doc_categories, DocumentCategory.new.option_name
34
  end
35
end
.svn/pristine/01/01272907f6842a5e924d61c923ee0994110ab686.svn-base
1
# Redmine - project management software
2
# Copyright (C) 2006-2011  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17

  
18
require File.expand_path('../../../../../test_helper', __FILE__)
19

  
20
class Redmine::MenuManager::MenuHelperTest < HelperTestCase
21
  include Redmine::MenuManager::MenuHelper
22
  include ActionController::Assertions::SelectorAssertions
23
  fixtures :users, :members, :projects, :enabled_modules
24

  
25
  # Used by assert_select
26
  def html_document
27
    HTML::Document.new(@response.body)
28
  end
29

  
30
  def setup
31
    super
32
    @response = ActionController::TestResponse.new
33
    # Stub the current menu item in the controller
34
    def current_menu_item
35
      :index
36
    end
37
  end
38

  
39

  
40
  context "MenuManager#current_menu_item" do
41
    should "be tested"
42
  end
43

  
44
  context "MenuManager#render_main_menu" do
45
    should "be tested"
46
  end
47

  
48
  context "MenuManager#render_menu" do
49
    should "be tested"
50
  end
51

  
52
  context "MenuManager#menu_item_and_children" do
53
    should "be tested"
54
  end
55

  
56
  context "MenuManager#extract_node_details" do
57
    should "be tested"
58
  end
59

  
60
  def test_render_single_menu_node
61
    node = Redmine::MenuManager::MenuItem.new(:testing, '/test', { })
62
    @response.body = render_single_menu_node(node, 'This is a test', node.url, false)
63

  
64
    assert_select("a.testing", "This is a test")
65
  end
66

  
67
  def test_render_menu_node
68
    single_node = Redmine::MenuManager::MenuItem.new(:single_node, '/test', { })
69
    @response.body = render_menu_node(single_node, nil)
70

  
71
    assert_select("li") do
72
      assert_select("a.single-node", "Single node")
73
    end
74
  end
75

  
76
  def test_render_menu_node_with_nested_items
77
    parent_node = Redmine::MenuManager::MenuItem.new(:parent_node, '/test', { })
78
    parent_node << Redmine::MenuManager::MenuItem.new(:child_one_node, '/test', { })
79
    parent_node << Redmine::MenuManager::MenuItem.new(:child_two_node, '/test', { })
80
    parent_node <<
81
      Redmine::MenuManager::MenuItem.new(:child_three_node, '/test', { }) <<
82
      Redmine::MenuManager::MenuItem.new(:child_three_inner_node, '/test', { })
83

  
84
    @response.body = render_menu_node(parent_node, nil)
85

  
86
    assert_select("li") do
87
      assert_select("a.parent-node", "Parent node")
88
      assert_select("ul") do
89
        assert_select("li a.child-one-node", "Child one node")
90
        assert_select("li a.child-two-node", "Child two node")
91
        assert_select("li") do
92
          assert_select("a.child-three-node", "Child three node")
93
          assert_select("ul") do
94
            assert_select("li a.child-three-inner-node", "Child three inner node")
95
          end
96
        end
97
      end
98
    end
99

  
100
  end
101

  
102
  def test_render_menu_node_with_children
103
    User.current = User.find(2)
104

  
105
    parent_node = Redmine::MenuManager::MenuItem.new(:parent_node,
106
                                                     '/test',
107
                                                     {
108
                                                       :children => Proc.new {|p|
109
                                                         children = []
110
                                                         3.times do |time|
111
                                                           children << Redmine::MenuManager::MenuItem.new("test_child_#{time}",
112
                                                                                                             {:controller => 'issues', :action => 'index'},
113
                                                                                                             {})
114
                                                         end
115
                                                         children
116
                                                       }
117
                                                     })
118
    @response.body = render_menu_node(parent_node, Project.find(1))
119

  
120
    assert_select("li") do
121
      assert_select("a.parent-node", "Parent node")
122
      assert_select("ul") do
123
        assert_select("li a.test-child-0", "Test child 0")
124
        assert_select("li a.test-child-1", "Test child 1")
125
        assert_select("li a.test-child-2", "Test child 2")
126
      end
127
    end
128
  end
129

  
130
  def test_render_menu_node_with_nested_items_and_children
131
    User.current = User.find(2)
132

  
133
    parent_node = Redmine::MenuManager::MenuItem.new(:parent_node,
134
                                                     '/test',
135
                                                     {
136
                                                       :children => Proc.new {|p|
137
                                                         children = []
138
                                                         3.times do |time|
139
                                                           children << Redmine::MenuManager::MenuItem.new("test_child_#{time}", {:controller => 'issues', :action => 'index'}, {})
140
                                                         end
141
                                                         children
142
                                                       }
143
                                                     })
144

  
145
    parent_node << Redmine::MenuManager::MenuItem.new(:child_node,
146
                                                     '/test',
147
                                                     {
148
                                                       :children => Proc.new {|p|
149
                                                         children = []
150
                                                         6.times do |time|
151
                                                            children << Redmine::MenuManager::MenuItem.new("test_dynamic_child_#{time}", {:controller => 'issues', :action => 'index'}, {})
152
                                                         end
153
                                                         children
154
                                                       }
155
                                                     })
156

  
157
    @response.body = render_menu_node(parent_node, Project.find(1))
158

  
159
    assert_select("li") do
160
      assert_select("a.parent-node", "Parent node")
161
      assert_select("ul") do
162
        assert_select("li a.child-node", "Child node")
163
        assert_select("ul") do
164
          assert_select("li a.test-dynamic-child-0", "Test dynamic child 0")
165
          assert_select("li a.test-dynamic-child-1", "Test dynamic child 1")
166
          assert_select("li a.test-dynamic-child-2", "Test dynamic child 2")
167
          assert_select("li a.test-dynamic-child-3", "Test dynamic child 3")
168
          assert_select("li a.test-dynamic-child-4", "Test dynamic child 4")
169
          assert_select("li a.test-dynamic-child-5", "Test dynamic child 5")
170
        end
171
        assert_select("li a.test-child-0", "Test child 0")
172
        assert_select("li a.test-child-1", "Test child 1")
173
        assert_select("li a.test-child-2", "Test child 2")
174
      end
175
    end
176
  end
177

  
178
  def test_render_menu_node_with_children_without_an_array
179
    parent_node = Redmine::MenuManager::MenuItem.new(:parent_node,
180
                                                     '/test',
181
                                                     {
182
                                                       :children => Proc.new {|p| Redmine::MenuManager::MenuItem.new("test_child", "/testing", {})}
183
                                                     })
184

  
185
    assert_raises Redmine::MenuManager::MenuError, ":children must be an array of MenuItems" do
186
      @response.body = render_menu_node(parent_node, Project.find(1))
187
    end
188
  end
189

  
190
  def test_render_menu_node_with_incorrect_children
191
    parent_node = Redmine::MenuManager::MenuItem.new(:parent_node,
192
                                                     '/test',
193
                                                     {
194
                                                       :children => Proc.new {|p| ["a string"] }
195
                                                     })
196

  
197
    assert_raises Redmine::MenuManager::MenuError, ":children must be an array of MenuItems" do
198
      @response.body = render_menu_node(parent_node, Project.find(1))
199
    end
200

  
201
  end
202

  
203
  def test_menu_items_for_should_yield_all_items_if_passed_a_block
204
    menu_name = :test_menu_items_for_should_yield_all_items_if_passed_a_block
205
    Redmine::MenuManager.map menu_name do |menu|
206
      menu.push(:a_menu, '/', { })
207
      menu.push(:a_menu_2, '/', { })
208
      menu.push(:a_menu_3, '/', { })
209
    end
210

  
211
    items_yielded = []
212
    menu_items_for(menu_name) do |item|
213
      items_yielded << item
214
    end
215

  
216
    assert_equal 3, items_yielded.size
217
  end
218

  
219
  def test_menu_items_for_should_return_all_items
220
    menu_name = :test_menu_items_for_should_return_all_items
221
    Redmine::MenuManager.map menu_name do |menu|
222
      menu.push(:a_menu, '/', { })
223
      menu.push(:a_menu_2, '/', { })
224
      menu.push(:a_menu_3, '/', { })
225
    end
226

  
227
    items = menu_items_for(menu_name)
228
    assert_equal 3, items.size
229
  end
230

  
231
  def test_menu_items_for_should_skip_unallowed_items_on_a_project
232
    menu_name = :test_menu_items_for_should_skip_unallowed_items_on_a_project
233
    Redmine::MenuManager.map menu_name do |menu|
234
      menu.push(:a_menu, {:controller => 'issues', :action => 'index' }, { })
235
      menu.push(:a_menu_2, {:controller => 'issues', :action => 'index' }, { })
236
      menu.push(:unallowed, {:controller => 'issues', :action => 'unallowed' }, { })
237
    end
238

  
239
    User.current = User.find(2)
240

  
241
    items = menu_items_for(menu_name, Project.find(1))
242
    assert_equal 2, items.size
243
  end
244

  
245
  def test_menu_items_for_should_skip_items_that_fail_the_conditions
246
    menu_name = :test_menu_items_for_should_skip_items_that_fail_the_conditions
247
    Redmine::MenuManager.map menu_name do |menu|
248
      menu.push(:a_menu, {:controller => 'issues', :action => 'index' }, { })
249
      menu.push(:unallowed,
250
                {:controller => 'issues', :action => 'index' },
251
                { :if => Proc.new { false }})
252
    end
253

  
254
    User.current = User.find(2)
255

  
256
    items = menu_items_for(menu_name, Project.find(1))
257
    assert_equal 1, items.size
258
  end
259

  
260
end
.svn/pristine/01/013035c9e2d7a0734359dad136ab782f7272366b.svn-base
1
class CreateJournals < ActiveRecord::Migration
2

  
3
  # model removed, but needed for data migration
4
  class IssueHistory < ActiveRecord::Base; belongs_to :issue; end
5
  # model removed
6
  class Permission < ActiveRecord::Base; end
7

  
8
  def self.up
9
    create_table :journals, :force => true do |t|
10
      t.column "journalized_id", :integer, :default => 0, :null => false
11
      t.column "journalized_type", :string, :limit => 30, :default => "", :null => false
12
      t.column "user_id", :integer, :default => 0, :null => false
13
      t.column "notes", :text
14
      t.column "created_on", :datetime, :null => false
15
    end
16
    create_table :journal_details, :force => true do |t|
17
      t.column "journal_id", :integer, :default => 0, :null => false
18
      t.column "property", :string, :limit => 30, :default => "", :null => false
19
      t.column "prop_key", :string, :limit => 30, :default => "", :null => false
20
      t.column "old_value", :string
21
      t.column "value", :string
22
    end
23

  
24
    # indexes
25
    add_index "journals", ["journalized_id", "journalized_type"], :name => "journals_journalized_id"
26
    add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id"
27

  
28
    Permission.create :controller => "issues", :action => "history", :description => "label_history", :sort => 1006, :is_public => true, :mail_option => 0, :mail_enabled => 0
29

  
30
    # data migration
31
    IssueHistory.find(:all, :include => :issue).each {|h|
32
      j = Journal.new(:journalized => h.issue, :user_id => h.author_id, :notes => h.notes, :created_on => h.created_on)
33
      j.details << JournalDetail.new(:property => 'attr', :prop_key => 'status_id', :value => h.status_id)
34
      j.save
35
    }
36

  
37
    drop_table :issue_histories
38
  end
39

  
40
  def self.down
41
    drop_table :journal_details
42
    drop_table :journals
43

  
44
    create_table "issue_histories", :force => true do |t|
45
      t.column "issue_id", :integer, :default => 0, :null => false
46
      t.column "status_id", :integer, :default => 0, :null => false
47
      t.column "author_id", :integer, :default => 0, :null => false
48
      t.column "notes", :text, :default => ""
49
      t.column "created_on", :timestamp
50
    end
51

  
52
    add_index "issue_histories", ["issue_id"], :name => "issue_histories_issue_id"
53

  
54
    Permission.find(:first, :conditions => ["controller=? and action=?", 'issues', 'history']).destroy
55
  end
56
end
.svn/pristine/01/01346eb099170b569ce9589ce5f15a834ff1b1a7.svn-base
1
# Various mathematical calculations extracted from the PDF::Writer for Ruby gem.
2
# - http://rubyforge.org/projects/ruby-pdf
3
# - Copyright 2003 - 2005 Austin Ziegler.
4
# - Licensed under a MIT-style licence.
5
#
6

  
7
module RFPDF::Math
8
  PI2   = ::Math::PI * 2.0
9

  
10
  # One degree of arc measured in terms of radians.
11
  DR  = PI2 / 360.0
12
  # One radian of arc, measured in terms of degrees.
13
  RD  = 360 / PI2
14
  # One degree of arc, measured in terms of gradians.
15
  DG  = 400 / 360.0
16
  # One gradian of arc, measured in terms of degrees.
17
  GD  = 360 / 400.0
18
  # One radian of arc, measured in terms of gradians.
19
  RG  = 400 / PI2
20
  # One gradian of arc, measured in terms of radians.
21
  GR  = PI2 / 400.0
22

  
23
  # Truncate the remainder.
24
  def remt(num, den)
25
    num - den * (num / den.to_f).to_i
26
  end
27

  
28
  # Wrap radian values within the range of radians (0..PI2).
29
  def rad2rad(rad)
30
    remt(rad, PI2)
31
  end
32

  
33
  # Wrap degree values within the range of degrees (0..360).
34
  def deg2deg(deg)
35
    remt(deg, 360)
36
  end
37

  
38
  # Wrap gradian values within the range of gradians (0..400).
39
  def grad2grad(grad)
40
    remt(grad, 400)
41
  end
42

  
43
  # Convert degrees to radians. The value will be constrained to the
44
  # range of radians (0..PI2) unless +wrap+ is false.
45
  def deg2rad(deg, wrap = true)
46
    rad = DR * deg
47
    rad = rad2rad(rad) if wrap
48
    rad
49
  end
50

  
51
  # Convert degrees to gradians. The value will be constrained to the
52
  # range of gradians (0..400) unless +wrap+ is false.
53
  def deg2grad(deg, wrap = true)
54
    grad = DG * deg
55
    grad = grad2grad(grad) if wrap
56
    grad
57
  end
58

  
59
  # Convert radians to degrees. The value will be constrained to the
60
  # range of degrees (0..360) unless +wrap+ is false.
61
  def rad2deg(rad, wrap = true)
62
    deg = RD * rad
63
    deg = deg2deg(deg) if wrap
64
    deg
65
  end
66

  
67
  # Convert radians to gradians. The value will be constrained to the
68
  # range of gradians (0..400) unless +wrap+ is false.
69
  def rad2grad(rad, wrap = true)
70
    grad = RG * rad
71
    grad = grad2grad(grad) if wrap
72
    grad
73
  end
74

  
75
  # Convert gradians to degrees. The value will be constrained to the
76
  # range of degrees (0..360) unless +wrap+ is false.
77
  def grad2deg(grad, wrap = true)
78
    deg = GD * grad
79
    deg = deg2deg(deg) if wrap
80
    deg
81
  end
82

  
83
  # Convert gradians to radians. The value will be constrained to the
84
  # range of radians (0..PI2) unless +wrap+ is false.
85
  def grad2rad(grad, wrap = true)
86
    rad = GR * grad
87
    rad = rad2rad(rad) if wrap
88
    rad
89
  end
90
end
.svn/pristine/01/016b47aef50027cc7a73f1b3fdde3506ed5b4072.svn-base
1
class IssueCategory < ActiveRecord::Base
2
  generator_for :name, :start => 'Category 0001'
3

  
4
end
.svn/pristine/01/0171e251406a6b1885f3fa9813dc6f97a4ee7ea8.svn-base
1
require File.dirname(__FILE__) + '/test_helper'
2

  
3
class NormalizeTest < Test::Unit::TestCase
4
  include OpenIdAuthentication
5

  
6
  NORMALIZATIONS = {
7
    "openid.aol.com/nextangler"             => "http://openid.aol.com/nextangler",
8
    "http://openid.aol.com/nextangler"      => "http://openid.aol.com/nextangler",
9
    "https://openid.aol.com/nextangler"     => "https://openid.aol.com/nextangler",
10
    "HTTP://OPENID.AOL.COM/NEXTANGLER"      => "http://openid.aol.com/NEXTANGLER",
11
    "HTTPS://OPENID.AOL.COM/NEXTANGLER"     => "https://openid.aol.com/NEXTANGLER",
12
    "loudthinking.com"                      => "http://loudthinking.com/",
13
    "http://loudthinking.com"               => "http://loudthinking.com/",
14
    "http://loudthinking.com:80"            => "http://loudthinking.com/",
15
    "https://loudthinking.com:443"          => "https://loudthinking.com/",
16
    "http://loudthinking.com:8080"          => "http://loudthinking.com:8080/",
17
    "techno-weenie.net"                     => "http://techno-weenie.net/",
18
    "http://techno-weenie.net"              => "http://techno-weenie.net/",
19
    "http://techno-weenie.net  "            => "http://techno-weenie.net/",
20
    "=name"                                 => "=name"
21
  }
22

  
23
  def test_normalizations
24
    NORMALIZATIONS.each do |from, to|
25
      assert_equal to, normalize_identifier(from)
26
    end
27
  end
28

  
29
  def test_broken_open_id
30
    assert_raises(InvalidOpenId) { normalize_identifier(nil) }
31
  end
32
end
.svn/pristine/01/01c72fb7f3d1eed2891447f585aaa09ce5f33082.svn-base
1
jsToolBar.strings = {};
2
jsToolBar.strings['Strong'] = 'پررنگ';
3
jsToolBar.strings['Italic'] = 'کج';
4
jsToolBar.strings['Underline'] = 'زیرخط';
5
jsToolBar.strings['Deleted'] = 'برداشته شده';
6
jsToolBar.strings['Code'] = 'کد درون خطی';
7
jsToolBar.strings['Heading 1'] = 'سربرگ ۱';
8
jsToolBar.strings['Heading 2'] = 'سربرگ ۲';
9
jsToolBar.strings['Heading 3'] = 'سربرگ ۳';
10
jsToolBar.strings['Unordered list'] = 'فهرست بدون شماره';
11
jsToolBar.strings['Ordered list'] = 'فهرست با شماره';
12
jsToolBar.strings['Quote'] = 'تو بردن';
13
jsToolBar.strings['Unquote'] = 'بیرون آوردن';
14
jsToolBar.strings['Preformatted text'] = 'نوشته قالب بندی شده';
15
jsToolBar.strings['Wiki link'] = 'پیوند به برگ ویکی';
16
jsToolBar.strings['Image'] = 'عکس';
.svn/pristine/01/01d08f5b37dfa46aae097b270dbf10baa02d7e48.svn-base
1
class ExportPdf < ActiveRecord::Migration
2
  # model removed
3
  class Permission < ActiveRecord::Base; end
4

  
5
  def self.up
6
    Permission.create :controller => "projects", :action => "export_issues_pdf", :description => "label_export_pdf", :sort => 1002, :is_public => true, :mail_option => 0, :mail_enabled => 0
7
    Permission.create :controller => "issues", :action => "export_pdf", :description => "label_export_pdf", :sort => 1015, :is_public => true, :mail_option => 0, :mail_enabled => 0
8
  end
9

  
10
  def self.down
11
    Permission.find(:first, :conditions => ["controller=? and action=?", 'projects', 'export_issues_pdf']).destroy
12
    Permission.find(:first, :conditions => ["controller=? and action=?", 'issues', 'export_pdf']).destroy
13
  end
14
end
.svn/pristine/01/01fd40d061a2be270b23a0152d0699de1966efc7.svn-base
1
--- 
2
roles_001: 
3
  name: Manager
4
  id: 1
5
  builtin: 0
6
  issues_visibility: all
7
  permissions: |
8
    --- 
9
    - :add_project
10
    - :edit_project
11
    - :select_project_modules
12
    - :manage_members
13
    - :manage_versions
14
    - :manage_categories
15
    - :view_issues
16
    - :add_issues
17
    - :edit_issues
18
    - :manage_issue_relations
19
    - :manage_subtasks
20
    - :add_issue_notes
21
    - :move_issues
22
    - :delete_issues
23
    - :view_issue_watchers
24
    - :add_issue_watchers
25
    - :set_issues_private
26
    - :delete_issue_watchers
27
    - :manage_public_queries
28
    - :save_queries
29
    - :view_gantt
30
    - :view_calendar
31
    - :log_time
32
    - :view_time_entries
33
    - :edit_time_entries
34
    - :delete_time_entries
35
    - :manage_news
36
    - :comment_news
37
    - :view_documents
38
    - :manage_documents
39
    - :view_wiki_pages
40
    - :export_wiki_pages
41
    - :view_wiki_edits
42
    - :edit_wiki_pages
43
    - :delete_wiki_pages_attachments
44
    - :protect_wiki_pages
45
    - :delete_wiki_pages
46
    - :rename_wiki_pages
47
    - :add_messages
48
    - :edit_messages
49
    - :delete_messages
50
    - :manage_boards
51
    - :view_files
52
    - :manage_files
53
    - :browse_repository
54
    - :manage_repository
55
    - :view_changesets
56
    - :manage_project_activities
57

  
58
  position: 1
59
roles_002: 
60
  name: Developer
61
  id: 2
62
  builtin: 0
63
  issues_visibility: default
64
  permissions: |
65
    --- 
66
    - :edit_project
67
    - :manage_members
68
    - :manage_versions
69
    - :manage_categories
70
    - :view_issues
71
    - :add_issues
72
    - :edit_issues
73
    - :manage_issue_relations
74
    - :manage_subtasks
75
    - :add_issue_notes
76
    - :move_issues
77
    - :delete_issues
78
    - :view_issue_watchers
79
    - :save_queries
80
    - :view_gantt
81
    - :view_calendar
82
    - :log_time
83
    - :view_time_entries
84
    - :edit_own_time_entries
85
    - :manage_news
86
    - :comment_news
87
    - :view_documents
88
    - :manage_documents
89
    - :view_wiki_pages
90
    - :view_wiki_edits
91
    - :edit_wiki_pages
92
    - :protect_wiki_pages
93
    - :delete_wiki_pages
94
    - :add_messages
95
    - :edit_own_messages
96
    - :delete_own_messages
97
    - :manage_boards
98
    - :view_files
99
    - :manage_files
100
    - :browse_repository
101
    - :view_changesets
102

  
103
  position: 2
104
roles_003: 
105
  name: Reporter
106
  id: 3
107
  builtin: 0
108
  issues_visibility: default
109
  permissions: |
110
    --- 
111
    - :edit_project
112
    - :manage_members
113
    - :manage_versions
114
    - :manage_categories
115
    - :view_issues
116
    - :add_issues
117
    - :edit_issues
118
    - :manage_issue_relations
119
    - :add_issue_notes
120
    - :move_issues
121
    - :view_issue_watchers
122
    - :save_queries
123
    - :view_gantt
124
    - :view_calendar
125
    - :log_time
126
    - :view_time_entries
127
    - :manage_news
128
    - :comment_news
129
    - :view_documents
130
    - :manage_documents
131
    - :view_wiki_pages
132
    - :view_wiki_edits
133
    - :edit_wiki_pages
134
    - :delete_wiki_pages
135
    - :add_messages
136
    - :manage_boards
137
    - :view_files
138
    - :manage_files
139
    - :browse_repository
140
    - :view_changesets
141

  
142
  position: 3
143
roles_004: 
144
  name: Non member
145
  id: 4
146
  builtin: 1
147
  issues_visibility: default
148
  permissions: |
149
    --- 
150
    - :view_issues
151
    - :add_issues
152
    - :edit_issues
153
    - :manage_issue_relations
154
    - :add_issue_notes
155
    - :move_issues
156
    - :save_queries
157
    - :view_gantt
158
    - :view_calendar
159
    - :log_time
160
    - :view_time_entries
161
    - :comment_news
162
    - :view_documents
163
    - :manage_documents
164
    - :view_wiki_pages
165
    - :view_wiki_edits
166
    - :edit_wiki_pages
167
    - :add_messages
168
    - :view_files
169
    - :manage_files
170
    - :browse_repository
171
    - :view_changesets
172

  
173
  position: 4
174
roles_005: 
175
  name: Anonymous
176
  id: 5
177
  builtin: 2
178
  issues_visibility: default
179
  permissions: |
180
    --- 
181
    - :view_issues
182
    - :add_issue_notes
183
    - :view_gantt
184
    - :view_calendar
185
    - :view_time_entries
186
    - :view_documents
187
    - :view_wiki_pages
188
    - :view_wiki_edits
189
    - :view_files
190
    - :browse_repository
191
    - :view_changesets
192

  
193
  position: 5
194

  

Also available in: Unified diff