OSDN Git Service

* code and views cleaning
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 17 Dec 2006 14:22:09 +0000 (14:22 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 17 Dec 2006 14:22:09 +0000 (14:22 +0000)
* javascript added on custom field form to show/hide fields according to the format of custom field

git-svn-id: http://redmine.rubyforge.org/svn/trunk@100 e93f8b46-1217-0410-a6f0-8f06a7374b81

17 files changed:
app/controllers/projects_controller.rb
app/helpers/application_helper.rb
app/helpers/custom_fields_helper.rb
app/models/custom_field.rb
app/views/account/show.rhtml
app/views/custom_fields/_form.rhtml
app/views/custom_fields/edit.rhtml
app/views/custom_fields/list.rhtml
app/views/custom_fields/new.rhtml
app/views/issues/show.rhtml
app/views/my/blocks/_documents.rhtml
app/views/my/blocks/_latest_news.rhtml
app/views/projects/changelog.rhtml
app/views/projects/list_files.rhtml
app/views/projects/move_issues.rhtml
app/views/projects/show.rhtml
doc/CHANGELOG

index 4151e73..b0b00be 100644 (file)
@@ -293,8 +293,11 @@ class ProjectsController < ApplicationController
       new_project = Project.find(params[:new_project_id])\r
       new_tracker = Tracker.find(params[:new_tracker_id])\r
       @issues.each { |i|\r
-        # category is project dependent\r
-        i.category = nil unless i.project_id == new_project.id\r
+        # project dependent properties\r
+        unless i.project_id == new_project.id\r
+          i.category = nil \r
+          i.fixed_version = nil\r
+        end\r
         # move the issue\r
         i.project = new_project\r
         i.tracker = new_tracker\r
index 196d91f..0ca2568 100644 (file)
@@ -161,6 +161,7 @@ class TabularFormBuilder < ActionView::Helpers::FormBuilder
   (field_helpers - %w(radio_button hidden_field) + %w(date_select)).each do |selector|\r
     src = <<-END_SRC\r
     def #{selector}(field, options = {}) \r
+      return super if options.delete :no_label\r
       label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")\r
       label = @template.content_tag("label", label_text, \r
                     :class => (@object.errors[field] ? "error" : nil), \r
@@ -171,7 +172,7 @@ class TabularFormBuilder < ActionView::Helpers::FormBuilder
     class_eval src, __FILE__, __LINE__\r
   end\r
   \r
-  def select(field, choices, options = {}) \r
+  def select(field, choices, options = {}, html_options = {}\r
     label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")\r
     label = @template.content_tag("label", label_text, \r
                   :class => (@object.errors[field] ? "error" : nil), \r
index 9df5c50..75b8a45 100644 (file)
@@ -72,6 +72,6 @@ module CustomFieldsHelper
 \r
   # Return an array of custom field formats which can be used in select_tag\r
   def custom_field_formats_for_select\r
-    CustomField::FIELD_FORMATS.keys.collect { |k| [ l(CustomField::FIELD_FORMATS[k]), k ] }\r
+    CustomField::FIELD_FORMATS.sort {|a,b| a[1][:order]<=>b[1][:order]}.collect { |k| [ l(k[1][:name]), k[0] ] }\r
   end
 end
index 2f5f274..7dab233 100644 (file)
 class CustomField < ActiveRecord::Base\r
   has_many :custom_values, :dependent => true\r
 \r
-  FIELD_FORMATS = { "list" => :label_list,                    \r
-                               "date" => :label_date,\r
-                               "bool" => :label_boolean,\r
-                               "int" => :label_integer,\r
-                               "string" => :label_string,\r
-                               "text" => :label_text\r
+  FIELD_FORMATS = { "string" => { :name => :label_string, :order => 1 },\r
+                    "text" => { :name => :label_text, :order => 2 },\r
+                    "int" => { :name => :label_integer, :order => 3 },\r
+                    "list" => { :name => :label_list, :order => 4 },\r
+                               "date" => { :name => :label_date, :order => 5 },\r
+                               "bool" => { :name => :label_boolean, :order => 6 }\r
   }.freeze\r
 \r
   validates_presence_of :name, :field_format\r
index 9852389..c686b70 100644 (file)
@@ -6,7 +6,7 @@
     <li><%=l(:label_registered_on)%>: <%= format_date(@user.created_on) %></li>\r
 <% for custom_value in @custom_values %>\r
 <% if !custom_value.value.empty? %>\r
-    <li><%= custom_value.custom_field.name%>: <%= show_value(custom_value) %></li>\r
+    <li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>\r
 <% end %>\r
 <% end %>\r
 </ul>\r
index f7f968e..cf658fb 100644 (file)
@@ -1,52 +1,70 @@
 <%= error_messages_for 'custom_field' %>
 
+<script>
+function toggle_custom_field_format() {
+  format = $("custom_field_field_format");
+  p_length = $("custom_field_min_length");
+  p_regexp = $("custom_field_regexp");
+  p_values = $("custom_field_possible_values");
+  switch (format.value) {
+    case "list":
+      Element.hide(p_length.parentNode);
+      Element.hide(p_regexp.parentNode);
+      Element.show(p_values.parentNode);
+      break;
+    case "int":
+    case "string":
+    case "text":
+      Element.show(p_length.parentNode);
+      Element.show(p_regexp.parentNode);
+      Element.hide(p_values.parentNode);
+      break;
+    case "date":
+    case "bool":
+      Element.hide(p_length.parentNode);
+      Element.hide(p_regexp.parentNode);
+      Element.hide(p_values.parentNode);
+      break;
+    default:
+      Element.show(p_length.parentNode);
+      Element.show(p_regexp.parentNode);
+      Element.show(p_values.parentNode);
+      break;
+  }
+}
+</script>
+
 <!--[form:custom_field]-->
 <div class="box">
-<p><label for="custom_field_name"><%=l(:field_name)%><span class="required"> *</span></label>
-<%= text_field 'custom_field', 'name' %></p>
-\r
-<p><label for="custom_field_field_format"><%=l(:field_field_format)%></label>
-<%= select("custom_field", "field_format", custom_field_formats_for_select) %></p>\r
-\r
+<p><%= f.text_field :name, :required => true %></p>
+<p><%= f.select :field_format, custom_field_formats_for_select, {}, :onchange => "toggle_custom_field_format();" %></p>\r
 <p><label for="custom_field_min_length"><%=l(:label_min_max_length)%></label>
-<%= text_field 'custom_field', 'min_length', :size => 5 %> -
-<%= text_field 'custom_field', 'max_length', :size => 5 %><br>(<%=l(:text_min_max_length_info)%>)</p>\r
-\r
-<p><label for="custom_field_regexp"><%=l(:field_regexp)%></label>
-<%= text_field 'custom_field', 'regexp', :size => 50 %><br>(<%=l(:text_regexp_info)%>)</p>\r
-\r
-<p><label for="custom_field_possible_values"><%=l(:field_possible_values)%></label>
-<%= text_area 'custom_field', 'possible_values', :rows => 5, :cols => 60  %><br>(<%=l(:text_possible_values_info)%>)</p>
+   <%= f.text_field :min_length, :size => 5, :no_label => true %> - 
+   <%= f.text_field :max_length, :size => 5, :no_label => true %><br>(<%=l(:text_min_max_length_info)%>)</p>
+<p><%= f.text_field :regexp, :size => 50 %><br>(<%=l(:text_regexp_info)%>)</p>\r
+<p><%= f.text_area :possible_values, :rows => 5, :cols => 60 %><br>(<%=l(:text_possible_values_info)%>)</p>
 </div>\r
+<%= javascript_tag "toggle_custom_field_format();" %>
 <!--[eoform:custom_field]-->
 
 <div class="box">
-<% case type.to_s
-     when "IssueCustomField" %>\r
-     \r
-<fieldset><legend><%=l(:label_tracker_plural)%></legend>\r
-<% for tracker in @trackers %>\r
-       <input type="checkbox"  \r
-       name="tracker_ids[]"\r
-       value="<%= tracker.id %>"\r
-       <%if @custom_field.trackers.include? tracker%>checked="checked"<%end%>\r
-       > <%= tracker.name %>   \r
-<% end %></fieldset>\r
-&nbsp;
-
-<p><label for="custom_field_is_required"><%=l(:field_is_required)%></label>
-<%= check_box 'custom_field', 'is_required' %></p>
-
-<p><label for="custom_field_is_for_all"><%=l(:field_is_for_all)%></label>
-<%= check_box 'custom_field', 'is_for_all' %></p>
-
-<%   when "UserCustomField" %>
-<p><label for="custom_field_is_required"><%=l(:field_is_required)%></label>
-<%= check_box 'custom_field', 'is_required' %></p>
+<% case @custom_field.type.to_s
+when "IssueCustomField" %>\r
+    \r
+    <fieldset><legend><%=l(:label_tracker_plural)%></legend>\r
+    <% for tracker in @trackers %>
+        <%= check_box_tag "tracker_ids[]", tracker.id, (@custom_field.trackers.include? tracker) %> <%= tracker.name %>\r
+    <% end %>
+    </fieldset>\r
+    &nbsp;
+    <p><%= f.check_box :is_required %></p>
+    <p><%= f.check_box :is_for_all %></p>
+    
+<% when "UserCustomField" %>
+    <p><%= f.check_box :is_required %></p>
 
-<%   when "ProjectCustomField" %>
-<p><label for="custom_field_is_required"><%=l(:field_is_required)%></label>
-<%= check_box 'custom_field', 'is_required' %></p>
+<% when "ProjectCustomField" %>
+    <p><%= f.check_box :is_required %></p>
 
 <% end %>
 </div>
index 201047a..ef056fa 100644 (file)
@@ -1,6 +1,6 @@
 <h2><%=l(:label_custom_field)%> (<%=l(@custom_field.type_name)%>)</h2>
 
-<%= start_form_tag({:action => 'edit', :id => @custom_field}, :class => "tabular") %>
-  <%= render :partial => 'form', :locals => { :type => @custom_field.type } %>
-  <%= submit_tag l(:button_save) %>
-<%= end_form_tag %>
+<% labelled_tabular_form_for :custom_field, @custom_field, :url => { :action => "edit", :id => @custom_field } do |f| %>
+<%= render :partial => 'form', :locals => { :f => f } %>
+<%= submit_tag l(:button_save) %>
+<% end %>
index 858590c..8e4573a 100644 (file)
@@ -14,7 +14,7 @@
   <tr class="<%= cycle("odd", "even") %>">\r
        <td><%= link_to custom_field.name, :action => 'edit', :id => custom_field %></td>\r
        <td align="center"><%= l(custom_field.type_name) %></td>
-       <td align="center"><%= l(CustomField::FIELD_FORMATS[custom_field.field_format]) %></td>\r
+       <td align="center"><%= l(CustomField::FIELD_FORMATS[custom_field.field_format][:name]) %></td>\r
        <td align="center"><%= image_tag 'true' if custom_field.is_required? %></td>\r
        <td align="center"><%= image_tag 'true' if custom_field.is_for_all? %></td>\r
        <td align="center"><%= custom_field.projects.count.to_s + ' ' + lwr(:label_project, custom_field.projects.count) if custom_field.is_a? IssueCustomField and !custom_field.is_for_all? %></td>
index 3b215dc..2e8aa27 100644 (file)
@@ -1,8 +1,7 @@
 <h2><%=l(:label_custom_field_new)%> (<%=l(@custom_field.type_name)%>)</h2>
 
-<%= start_form_tag({:action => 'new'}, :class => "tabular") %>
-  <%= render :partial => 'form', :locals => { :type => @custom_field.type } %>
-  <%= hidden_field_tag 'type', @custom_field.type %>
-  <%= submit_tag l(:button_save) %>
-<%= end_form_tag %>
-
+<% labelled_tabular_form_for :custom_field, @custom_field, :url => { :action => "new" } do |f| %>
+<%= render :partial => 'form', :locals => { :f => f } %>
+<%= hidden_field_tag 'type', @custom_field.type %>
+<%= submit_tag l(:button_save) %>
+<% end %>
index 93b8cd0..8390f82 100644 (file)
@@ -60,7 +60,7 @@ end %>
   <%= submit_tag l(:button_change) %>\r
   <%= end_form_tag %>\r
 <% end %>\r
-\r
+&nbsp;\r
 </div>\r
 \r
 <div id="history" class="box">\r
index 8e7f6bc..eb8c16a 100644 (file)
@@ -3,5 +3,6 @@
 <%= render(:partial => 'documents/document',\r
            :collection => Document.find(:all,\r
                          :limit => 10,\r
+                         :order => 'documents.created_on DESC',\r
                          :conditions => "documents.project_id in (#{@user.projects.collect{|m| m.id}.join(',')})",\r
                          :include => [:project])) unless @user.projects.empty? %>
\ No newline at end of file
index 625603a..4bad9a5 100644 (file)
@@ -3,5 +3,6 @@
 <%= render (:partial => 'news/news', \r
             :collection => News.find(:all,\r
                                      :limit => 10,\r
+                                     :order => 'news.created_on DESC',\r
                                      :conditions => "news.project_id in (#{@user.projects.collect{|m| m.id}.join(',')})",\r
                                      :include => [:project, :author])) unless @user.projects.empty? %>
\ No newline at end of file
index e59df05..250957a 100644 (file)
    @fixed_issues.each do |issue| %>   \r
     <% unless ver_id == issue.fixed_version_id %>\r
     <% if ver_id %></ul><% end %>\r
-    <h3><%= l(:label_version) %>: <%= issue.fixed_version.name %></h3>\r
+    <h3><%= issue.fixed_version.name %></h3>\r
     <p><%= format_date(issue.fixed_version.effective_date) %><br />\r
     <%=h issue.fixed_version.description %></p>\r
     <ul>\r
     <% ver_id = issue.fixed_version_id\r
     end %>\r
-    <li><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %> [<%= issue.tracker.name %>]: <%=h issue.subject %></li>\r
+    <li><%= link_to "#{issue.tracker.name} #{issue.id}", :controller => 'issues', :action => 'show', :id => issue %>: <%=h issue.subject %></li>\r
 <% end %>\r
 </div>
\ No newline at end of file
index 881829a..61c6d2c 100644 (file)
@@ -31,7 +31,7 @@
     <% if delete_allowed %>\r
     <td align="center">\r
         <div class="contextual">\r
-        <%= link_to_if_authorized l(:button_delete), {:controller => 'versions', :action => 'destroy_file', :id => version, :attachment_id => file}, :confirm => l(:text_are_you_sure), :post => true, :class => 'pic picDelete' %>\r
+        <%= link_to_if_authorized '', {:controller => 'versions', :action => 'destroy_file', :id => version, :attachment_id => file}, :confirm => l(:text_are_you_sure), :post => true, :class => 'pic picDelete' %>\r
         </div>\r
     </td>\r
     <% end %>
index 380d47f..772cdeb 100644 (file)
@@ -6,7 +6,7 @@
 <div class="box">
 <p><label><%= l(:label_issue_plural) %>:</label>
 <% for issue in @issues %>
-    <b><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %></b> - <%= issue.subject %>
+    <b><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %></b> - <%=h issue.subject %>
     <%= hidden_field_tag "issue_ids[]", issue.id %><br />
 <% end %>
 <i>(<%= @issues.length%> <%= lwr(:label_issue, @issues.length)%>)</i></p>
index 46f17d9..d5da126 100644 (file)
@@ -1,7 +1,7 @@
 <h2><%=l(:label_overview)%></h2> \r
        \r
 <div class="splitcontentleft">\r
-       <%= simple_format(auto_link(h @project.description)) %> \r
+       <%= simple_format(auto_link(h(@project.description))) %>        \r
        <ul>\r
        <% unless @project.homepage.empty? %><li><%=l(:field_homepage)%>: <%= auto_link @project.homepage %></li><% end %>\r
        <li><%=l(:field_created_on)%>: <%= format_date(@project.created_on) %></li>\r
index ce9d933..4c4ba17 100644 (file)
@@ -9,6 +9,7 @@ http://redmine.org/
 \r
 * comments can now be added on news\r
 * "my page" is now customizable \r
+* more powerfull and savable filters for issues lists\r
 * improved issues change history\r
 * new functionality: move an issue to another project or tracker\r
 * new functionality: add a note to an issue\r
@@ -29,8 +30,10 @@ http://redmine.org/
 * csv output encoded to ISO-8859-1\r
 * user custom field displayed on account/show\r
 * default configuration improved (default roles, trackers, status, permissions and workflows)\r
+* javascript added on custom field form to show/hide fields according to the format of custom field\r
 * fixed: custom fields not in csv exports\r
 * fixed: project settings now displayed according to user's permissions\r
+* fixed: application error when no version is selected on projects/add_file\r
 \r
 == 10/08/2006 v0.3.0\r
 \r