@@ -0,0 +1,8 | |||||
|
1 | class ChangeProjectsDescriptionToText < ActiveRecord::Migration | |||
|
2 | def self.up | |||
|
3 | change_column :projects, :description, :text, :default => '' | |||
|
4 | end | |||
|
5 | ||||
|
6 | def self.down | |||
|
7 | end | |||
|
8 | end |
@@ -52,12 +52,11 class Project < ActiveRecord::Base | |||||
52 |
|
52 | |||
53 | attr_protected :status, :enabled_module_names |
|
53 | attr_protected :status, :enabled_module_names | |
54 |
|
54 | |||
55 |
validates_presence_of :name, |
|
55 | validates_presence_of :name, :identifier | |
56 | validates_uniqueness_of :name, :identifier |
|
56 | validates_uniqueness_of :name, :identifier | |
57 | validates_associated :custom_values, :on => :update |
|
57 | validates_associated :custom_values, :on => :update | |
58 | validates_associated :repository, :wiki |
|
58 | validates_associated :repository, :wiki | |
59 | validates_length_of :name, :maximum => 30 |
|
59 | validates_length_of :name, :maximum => 30 | |
60 | validates_length_of :description, :maximum => 255 |
|
|||
61 | validates_length_of :homepage, :maximum => 60 |
|
60 | validates_length_of :homepage, :maximum => 60 | |
62 | validates_length_of :identifier, :in => 3..20 |
|
61 | validates_length_of :identifier, :in => 3..20 | |
63 | validates_format_of :identifier, :with => /^[a-z0-9\-]*$/ |
|
62 | validates_format_of :identifier, :with => /^[a-z0-9\-]*$/ | |
@@ -184,6 +183,15 class Project < ActiveRecord::Base | |||||
184 | name.downcase <=> project.name.downcase |
|
183 | name.downcase <=> project.name.downcase | |
185 | end |
|
184 | end | |
186 |
|
185 | |||
|
186 | def to_s | |||
|
187 | name | |||
|
188 | end | |||
|
189 | ||||
|
190 | # Returns a short description of the projects (first lines) | |||
|
191 | def short_description(length = 255) | |||
|
192 | description.gsub(/^(.{#{length}}[^\n]*).*$/m, '\1').strip if description | |||
|
193 | end | |||
|
194 | ||||
187 | def allows_to?(action) |
|
195 | def allows_to?(action) | |
188 | if action.is_a? Hash |
|
196 | if action.is_a? Hash | |
189 | allowed_actions.include? "#{action[:controller]}/#{action[:action]}" |
|
197 | allowed_actions.include? "#{action[:controller]}/#{action[:action]}" |
@@ -27,7 +27,7 | |||||
27 | <% for project in @projects %> |
|
27 | <% for project in @projects %> | |
28 | <tr class="<%= cycle("odd", "even") %>"> |
|
28 | <tr class="<%= cycle("odd", "even") %>"> | |
29 | <td><%= project.active? ? link_to(h(project.name), :controller => 'projects', :action => 'settings', :id => project) : h(project.name) %> |
|
29 | <td><%= project.active? ? link_to(h(project.name), :controller => 'projects', :action => 'settings', :id => project) : h(project.name) %> | |
30 | <td><%= textilizable project.description, :project => project %> |
|
30 | <td><%= textilizable project.short_description, :project => project %> | |
31 | <td align="center"><%= image_tag 'true.png' if project.is_public? %> |
|
31 | <td align="center"><%= image_tag 'true.png' if project.is_public? %> | |
32 | <td align="center"><%= project.children.size %> |
|
32 | <td align="center"><%= project.children.size %> | |
33 | <td align="center"><%= format_date(project.created_on) %> |
|
33 | <td align="center"><%= format_date(project.created_on) %> |
@@ -8,8 +8,11 | |||||
8 | <p><%= f.select :parent_id, (@root_projects.collect {|p| [p.name, p.id]}), { :include_blank => true } %></p> |
|
8 | <p><%= f.select :parent_id, (@root_projects.collect {|p| [p.name, p.id]}), { :include_blank => true } %></p> | |
9 | <% end %> |
|
9 | <% end %> | |
10 |
|
10 | |||
11 | <p><%= f.text_area :description, :required => true, :cols => 60, :rows => 5 %><em><%= l(:text_caracters_maximum, 255) %></em></p> |
|
11 | <p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p> | |
12 | <p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen? %><br /><em><%= l(:text_length_between, 3, 20) %> <%= l(:text_project_identifier_info) unless @project.identifier_frozen? %></em></p> |
|
12 | <p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen? %> | |
|
13 | <% unless @project.identifier_frozen? %> | |||
|
14 | <br /><em><%= l(:text_length_between, 3, 20) %> <%= l(:text_project_identifier_info) %></em> | |||
|
15 | <% end %></p> | |||
13 | <p><%= f.text_field :homepage, :size => 40 %></p> |
|
16 | <p><%= f.text_field :homepage, :size => 40 %></p> | |
14 | <p><%= f.check_box :is_public %></p> |
|
17 | <p><%= f.check_box :is_public %></p> | |
15 | <%= wikitoolbar_for 'project_description' %> |
|
18 | <%= wikitoolbar_for 'project_description' %> |
@@ -2,7 +2,7 | |||||
2 |
|
2 | |||
3 | <% @project_tree.keys.sort.each do |project| %> |
|
3 | <% @project_tree.keys.sort.each do |project| %> | |
4 | <h3><%= link_to h(project.name), {:action => 'show', :id => project}, :class => (User.current.member_of?(project) ? "icon icon-fav" : "") %></h3> |
|
4 | <h3><%= link_to h(project.name), {:action => 'show', :id => project}, :class => (User.current.member_of?(project) ? "icon icon-fav" : "") %></h3> | |
5 | <%= textilizable(project.description, :project => project) %> |
|
5 | <%= textilizable(project.short_description, :project => project) %> | |
6 |
|
6 | |||
7 | <% if @project_tree[project].any? %> |
|
7 | <% if @project_tree[project].any? %> | |
8 | <p><%= l(:label_subproject_plural) %>: |
|
8 | <p><%= l(:label_subproject_plural) %>: |
@@ -18,7 +18,7 | |||||
18 | <% for project in @projects %> |
|
18 | <% for project in @projects %> | |
19 | <li> |
|
19 | <li> | |
20 | <%= link_to project.name, :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>) |
|
20 | <%= link_to project.name, :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>) | |
21 | <%= textilizable project.description, :project => project %> |
|
21 | <%= textilizable project.short_description, :project => project %> | |
22 | </li> |
|
22 | </li> | |
23 | <% end %> |
|
23 | <% end %> | |
24 | </ul> |
|
24 | </ul> |
General Comments 0
You need to be logged in to leave comments.
Login now