]> source.dussan.org Git - redmine.git/commitdiff
custom field tags
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 31 Jul 2006 19:52:08 +0000 (19:52 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 31 Jul 2006 19:52:08 +0000 (19:52 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@20 e93f8b46-1217-0410-a6f0-8f06a7374b81

redmine/app/controllers/projects_controller.rb
redmine/app/helpers/application_helper.rb
redmine/app/helpers/custom_fields_helper.rb
redmine/app/models/custom_value.rb
redmine/app/views/account/register.rhtml
redmine/app/views/issues/edit.rhtml
redmine/app/views/projects/_form.rhtml
redmine/app/views/projects/add_issue.rhtml
redmine/app/views/users/_form.rhtml

index 2bfb841d660c829951fb431942ca77ab71be033d..80257305425116d8d18e2bcd540de96b38a0cc01 100644 (file)
@@ -80,7 +80,7 @@ class ProjectsController < ApplicationController
     @member ||= @project.members.new\r
     @roles = Role.find_all\r
     @users = User.find_all - @project.members.find(:all, :include => :user).collect{|m| m.user }\r
-    @custom_values = ProjectCustomField.find(:all).collect { |x| @project.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x) }\r
+    @custom_values ||= ProjectCustomField.find(:all).collect { |x| @project.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x) }\r
   end\r
   \r
   # Edit @project\r
index 7f3f975324150dd59aa6edf7ed65ec89fae190fe..d45cf9b97fc7b6984044e614e8fa5e95bc542872 100644 (file)
 \r
 module ApplicationHelper\r
 \r
-  # return current logged in user or nil\r
+  # Return current logged in user or nil\r
   def loggedin?\r
     @logged_in_user\r
   end\r
   \r
-  # return true if user is loggend in and is admin, otherwise false\r
+  # Return true if user is logged in and is admin, otherwise false\r
   def admin_loggedin?\r
     @logged_in_user and @logged_in_user.admin?\r
   end\r
 \r
+  # Return true if user is authorized for controller/action, otherwise false\r
   def authorize_for(controller, action)  \r
     # check if action is allowed on public projects\r
     if @project.is_public? and Permission.allowed_to_public "%s/%s" % [ controller, action ]\r
@@ -76,12 +77,21 @@ module ApplicationHelper
         if attr == "base"\r
           full_messages << l(msg)\r
         else\r
-          full_messages << "&#171; " + (l_has_string?("field_" + attr) ? l("field_" + attr) : object.class.human_attribute_name(attr)) + " &#187; " + l(msg)\r
+          full_messages << "&#171; " + (l_has_string?("field_" + attr) ? l("field_" + attr) : object.class.human_attribute_name(attr)) + " &#187; " + l(msg) unless attr == "custom_values"\r
         end\r
-      end   \r
+      end\r
+      # retrieve custom values error messages\r
+      if object.errors[:custom_values]\r
+        object.custom_values.each do |v| \r
+          v.errors.each do |attr, msg|\r
+            next if msg.nil?\r
+            full_messages << "&#171; " + v.custom_field.name + " &#187; " + l(msg)\r
+          end\r
+        end\r
+      end      \r
       content_tag("div",\r
         content_tag(\r
-          options[:header_tag] || "h2", lwr(:gui_validation_error, object.errors.count) + " :"\r
+          options[:header_tag] || "h2", lwr(:gui_validation_error, full_messages.length) + " :"\r
         ) +\r
         content_tag("ul", full_messages.collect { |msg| content_tag("li", msg) }),\r
         "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"\r
index 2af21edbb2e2529e3fdb8444ec14d5ef72df67a0..bc5a15e9a714e8f5529e3b02bb2f2572e3366ee5 100644 (file)
@@ -17,6 +17,7 @@
 \r
 module CustomFieldsHelper\r
 \r
+  # Return custom field html tag corresponding to its format\r
   def custom_field_tag(custom_value)   \r
     custom_field = custom_value.custom_field\r
     field_name = "custom_fields[#{custom_field.id}]"\r
@@ -24,34 +25,35 @@ module CustomFieldsHelper
     \r
     case custom_field.field_format\r
     when "string", "int", "date"\r
-      text_field_tag field_name, custom_value.value, :id => field_id\r
+      text_field 'custom_value', 'value', :name => field_name, :id => field_id\r
     when "text"\r
-      text_area_tag field_name, custom_value.value, :id => field_id, :cols => 60, :rows => 3\r
+      text_area 'custom_value', 'value', :name => field_name, :id => field_id, :cols => 60, :rows => 3\r
     when "bool"\r
-      check_box_tag(field_name, "1", custom_value.value == "1", :id => field_id) + \r
-      hidden_field_tag(field_name, "0")\r
+      check_box 'custom_value', 'value', :name => field_name, :id => field_id\r
     when "list"\r
-      select_tag field_name, \r
-                  "<option></option>" + options_for_select(custom_field.possible_values.split('|'),\r
-                  custom_value.value), :id => field_id\r
+      select 'custom_value', 'value', custom_field.possible_values.split('|'), { :include_blank => true }, :name => field_name, :id => field_id\r
     end\r
   end\r
   \r
+  # Return custom field label tag\r
   def custom_field_label_tag(custom_value)\r
     content_tag "label", custom_value.custom_field.name +\r
        (custom_value.custom_field.is_required? ? " <span class=\"required\">*</span>" : ""),\r
        :for => "custom_fields_#{custom_value.custom_field.id}"\r
   end\r
   \r
+  # Return custom field tag with its label tag\r
   def custom_field_tag_with_label(custom_value)\r
     case custom_value.custom_field.field_format\r
     when "bool"\r
+      # label is displayed inline after the checkbox\r
       custom_field_tag(custom_value) + " " + custom_field_label_tag(custom_value)\r
     else\r
       custom_field_label_tag(custom_value) + "<br />" + custom_field_tag(custom_value)\r
     end          \r
   end\r
 \r
+  # Return a string used to display a custom value\r
   def show_value(custom_value)\r
     case custom_value.custom_field.field_format\r
     when "bool"\r
@@ -61,6 +63,7 @@ module CustomFieldsHelper
     end        \r
   end\r
 \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
   end
index ac72e5abad7612620343822ddee0fbbb69279b4b..6c1dd3aeae1436ea4934113ce5771dd95855351b 100644 (file)
@@ -21,22 +21,17 @@ class CustomValue < ActiveRecord::Base
 \r
 protected\r
   def validate\r
-    # errors are added to customized object unless it's nil\r
-    object = customized || self\r
-    \r
-    object.errors.add(custom_field.name, :activerecord_error_blank) if custom_field.is_required? and value.empty?\r
-    object.errors.add(custom_field.name, :activerecord_error_invalid) unless custom_field.regexp.empty? or value =~ Regexp.new(custom_field.regexp)\r
-\r
-    object.errors.add(custom_field.name, :activerecord_error_too_short) if custom_field.min_length > 0 and value.length < custom_field.min_length and value.length > 0\r
-    object.errors.add(custom_field.name, :activerecord_error_too_long) if custom_field.max_length > 0 and value.length > custom_field.max_length\r
-\r
+    errors.add(:value, :activerecord_error_blank) and return if custom_field.is_required? and value.empty?    \r
+    errors.add(:value, :activerecord_error_invalid) unless custom_field.regexp.empty? or value =~ Regexp.new(custom_field.regexp)\r
+    errors.add(:value, :activerecord_error_too_short) if custom_field.min_length > 0 and value.length < custom_field.min_length and value.length > 0\r
+    errors.add(:value, :activerecord_error_too_long) if custom_field.max_length > 0 and value.length > custom_field.max_length\r
     case custom_field.field_format\r
     when "int"\r
-      object.errors.add(custom_field.name, :activerecord_error_not_a_number) unless value =~ /^[0-9]*$/        \r
+      errors.add(:value, :activerecord_error_not_a_number) unless value =~ /^[0-9]*$/  \r
     when "date"\r
-      object.errors.add(custom_field.name, :activerecord_error_invalid) unless value =~ /^(\d+)\/(\d+)\/(\d+)$/ or value.empty?\r
+      errors.add(:value, :activerecord_error_invalid) unless value =~ /^(\d+)\/(\d+)\/(\d+)$/ or value.empty?\r
     when "list"\r
-      object.errors.add(custom_field.name, :activerecord_error_inclusion) unless custom_field.possible_values.split('|').include? value or value.empty?\r
+      errors.add(:value, :activerecord_error_inclusion) unless custom_field.possible_values.split('|').include? value or value.empty?\r
     end\r
   end
 end\r
index 3a953a2546d695897c0a576c533ccec6310583ed..74a5c74c05282de6c2df19e37e06d40286668f0d 100644 (file)
@@ -26,8 +26,8 @@
 <p><label for="user_language"><%=l(:field_language)%></label><br/>
 <%= select("user", "language", lang_options_for_select) %></p>\r
 \r
-<% for custom_value in @custom_values %>
-       <p><%= custom_field_tag_with_label custom_value %></p>
+<% for @custom_value in @custom_values %>
+       <p><%= custom_field_tag_with_label @custom_value %></p>
 <% end %>\r
 \r
 <p><%= check_box 'user', 'mail_notification' %> <label for="user_mail_notification"><%=l(:field_mail_notification)%></label></p>\r
index b8fc6ad4c3ffbb30e72f0d89f9933ee3b28d8742..0386173ef259e923e9669853477f7325ff020b80 100644 (file)
@@ -39,8 +39,8 @@
 <p><label for="issue_due_date"><%=l(:field_due_date)%></label><br />
 <%= date_select 'issue', 'due_date', :start_year => Date.today.year, :include_blank => true %></p>
 \r
-<% for custom_value in @custom_values %>
-       <p><%= custom_field_tag_with_label custom_value %></p>
+<% for @custom_value in @custom_values %>
+       <p><%= custom_field_tag_with_label @custom_value %></p>
 <% end %>\r
 \r
 <p><label for="issue_fixed_version"><%=l(:field_fixed_version)%></label><br/>
index 06fdc46fb8adb6ca34c04d0c79aece181aaeb8ab..18b703cbd5434266ec98766169598702cebc4fb7 100644 (file)
@@ -22,8 +22,8 @@
 <p><%= check_box 'project', 'is_public' %>\r
 <label for="project_is_public"><%=l(:field_is_public)%></label></p>
 \r
-<% for custom_value in @custom_values %>
-       <p><%= custom_field_tag_with_label custom_value %></p>
+<% for @custom_value in @custom_values %>
+       <p><%= custom_field_tag_with_label @custom_value %></p>
 <% end %>\r
 \r
 <fieldset><legend><%=l(:label_custom_field_plural)%></legend>\r
index 48d296feaa96f13524dfd485e29ba89dcf1927a9..123513371b3c19f2d7bb6d3793443462bf977c86 100644 (file)
@@ -39,8 +39,8 @@
 <p><label for="issue_due_date"><%=l(:field_due_date)%></label><br />
 <%= date_select 'issue', 'due_date', :start_year => Date.today.year, :include_blank => true %></p>
 \r
-<% for custom_value in @custom_values %>
-       <p><%= custom_field_tag_with_label custom_value %></p>
+<% for @custom_value in @custom_values %>
+       <p><%= custom_field_tag_with_label @custom_value %></p>
 <% end %>\r
 \r
 <p><label for="attachment_file"><%=l(:label_attachment)%></label><br />
index db5639f06770e87afb3d8331686d770a240f5d51..08bce06c0ba586b6f484f4bb8f628c6ea0f2b281 100644 (file)
@@ -23,8 +23,8 @@
 <p><label for="user_language"><%=l(:field_language)%></label><br/>
 <%= select("user", "language", lang_options_for_select) %></p>\r
 \r
-<% for custom_value in @custom_values %>
-       <p><%= custom_field_tag_with_label custom_value %></p>
+<% for @custom_value in @custom_values %>
+       <p><%= custom_field_tag_with_label @custom_value %></p>
 <% end %>\r
 \r
 <div style="clear: both;"></div>\r