diff --git a/app/views/issues/index.api.rsb b/app/views/issues/index.api.rsb index 6cc72af..5eeb0bb 100644 --- a/app/views/issues/index.api.rsb +++ b/app/views/issues/index.api.rsb @@ -4,7 +4,7 @@ api.array :issues, api_meta(:total_count => @issue_count, :offset => @offset, :l api.id issue.id api.project(:id => issue.project_id, :name => issue.project.name) unless issue.project.nil? api.tracker(:id => issue.tracker_id, :name => issue.tracker.name) unless issue.tracker.nil? - api.status(:id => issue.status_id, :name => issue.status.name) unless issue.status.nil? || issue.hidden_attribute?('status') + api.status(:id => issue.status_id, :name => issue.status.name, :is_closed => issue.status.is_closed) unless issue.status.nil? || issue.hidden_attribute?('status') api.priority(:id => issue.priority_id, :name => issue.priority.name) unless issue.priority.nil? || issue.hidden_attribute?('priority_id') api.author(:id => issue.author_id, :name => issue.author.name) unless issue.author.nil? api.assigned_to(:id => issue.assigned_to_id, :name => issue.assigned_to.name) unless issue.assigned_to.nil? || issue.disabled_core_fields.include?('assigned_to_id') || issue.hidden_attribute?('assigned_to_id') @@ -19,6 +19,10 @@ api.array :issues, api_meta(:total_count => @issue_count, :offset => @offset, :l api.done_ratio issue.done_ratio unless issue.disabled_core_fields.include?('done_ratio') || issue.hidden_attribute?('done_ratio') api.is_private issue.is_private api.estimated_hours issue.estimated_hours unless issue.disabled_core_fields.include?('estimated_hours') || issue.hidden_attribute?('estimated_hours') + if User.current.allowed_to?(:view_time_entries, issue.project) + api.spent_hours(issue.spent_hours) + api.total_spent_hours(issue.total_spent_hours) + end render_api_custom_values issue.visible_custom_field_values, api diff --git a/app/views/issues/show.api.rsb b/app/views/issues/show.api.rsb index 0d4615a..83d6801 100644 --- a/app/views/issues/show.api.rsb +++ b/app/views/issues/show.api.rsb @@ -2,7 +2,7 @@ api.issue do api.id @issue.id api.project(:id => @issue.project_id, :name => @issue.project.name) unless @issue.project.nil? api.tracker(:id => @issue.tracker_id, :name => @issue.tracker.name) unless @issue.tracker.nil? - api.status(:id => @issue.status_id, :name => @issue.status.name) unless @issue.status.nil? || @issue.hidden_attribute?('status') + api.status(:id => @issue.status_id, :name => @issue.status.name, :is_closed => @issue.status.is_closed) unless @issue.status.nil? || @issue.hidden_attribute?('status') api.priority(:id => @issue.priority_id, :name => @issue.priority.name) unless @issue.priority.nil? || @issue.hidden_attribute?('priority_id') api.author(:id => @issue.author_id, :name => @issue.author.name) unless @issue.author.nil? api.assigned_to(:id => @issue.assigned_to_id, :name => @issue.assigned_to.name) unless @issue.assigned_to.nil? || @issue.disabled_core_fields.include?('assigned_to_id') || @issue.hidden_attribute?('assigned_to_id') @@ -12,11 +12,11 @@ api.issue do api.subject @issue.subject api.description @issue.description - api.start_date @issue.start_date unless @issue.disabled_core_fields.include?('start_date') || @issue.hidden_attribute?('start_date') - api.due_date @issue.due_date unless @issue.disabled_core_fields.include?('due_date') || @issue.hidden_attribute?('due_date') - api.done_ratio @issue.done_ratio unless @issue.disabled_core_fields.include?('done_ratio') || @issue.hidden_attribute?('done_ratio') + api.start_date @issue.start_date unless @issue.hidden_attribute?('start_date') + api.due_date @issue.due_date unless @issue.hidden_attribute?('due_date') + api.done_ratio @issue.done_ratio unless @issue.hidden_attribute?('done_ratio') api.is_private @issue.is_private - api.estimated_hours @issue.estimated_hours unless @issue.disabled_core_fields.include?('estimated_hours') || @issue.hidden_attribute?('estimated_hours') + api.estimated_hours @issue.estimated_hours unless @issue.hidden_attribute?('estimated_hours') api.total_estimated_hours @issue.total_estimated_hours unless @issue.hidden_attribute?('total_estimated_hours') if User.current.allowed_to?(:view_time_entries, @project) api.spent_hours(@issue.spent_hours) @@ -59,7 +59,7 @@ api.issue do api.user(:id => journal.user_id, :name => journal.user.name) unless journal.user.nil? api.notes journal.notes api.created_on journal.created_on - api.private_notes journal.private_notes + api.private_notes journal.private_notes api.array :details do journal.visible_details.each do |detail| api.detail :property => detail.property, :name => detail.prop_key do @@ -77,4 +77,10 @@ api.issue do api.user :id => user.id, :name => user.name end end if include_in_api_response?('watchers') && User.current.allowed_to?(:view_issue_watchers, @issue.project) + + api.array :allowed_statuses do + @allowed_statuses.each do |status| + api.status :id => status.id, :name => status.name, :is_closed => status.is_closed + end + end if include_in_api_response?('allowed_statuses') end diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index a84836b..0dc3dca 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -62,9 +62,9 @@ end unless @issue.disabled_core_fields.include?('assigned_to_id') || @issue.hidden_attribute?('assigned_to_id') if i % 2 == 0 - rows.left l(:field_assigned_to), (@issue.assigned_to ? link_to_user(@issue.assigned_to) : "-"), :class => 'assigned-to' + rows.left l(:field_assigned_to), (@issue.assigned_to ? link_to_principal(@issue.assigned_to) : "-"), :class => 'assigned-to' else - rows.right l(:field_assigned_to), (@issue.assigned_to ? link_to_user(@issue.assigned_to) : "-"), :class => 'assigned-to' + rows.right l(:field_assigned_to), (@issue.assigned_to ? link_to_principal(@issue.assigned_to) : "-"), :class => 'assigned-to' end i += 1 end @@ -96,9 +96,9 @@ end unless @issue.disabled_core_fields.include?('due_date') || @issue.hidden_attribute?('due_date') if i % 2 == 0 - rows.left l(:field_due_date), format_date(@issue.due_date), :class => 'due-date' + rows.left l(:field_due_date), issue_due_date_details(@issue), :class => 'due-date' else - rows.right l(:field_due_date), format_date(@issue.due_date), :class => 'due-date' + rows.right l(:field_due_date), issue_due_date_details(@issue), :class => 'due-date' end i += 1 end @@ -119,13 +119,11 @@ i += 1 end if User.current.allowed_to?(:view_time_entries, @project) && @issue.total_spent_hours > 0 - if @issue.total_spent_hours > 0 - if i % 2 == 0 + if i % 2 == 0 rows.left l(:label_spent_time), issue_spent_hours_details(@issue), :class => 'spent-time' else rows.right l(:label_spent_time), issue_spent_hours_details(@issue), :class => 'spent-time' end - end end end %> <%= render_half_width_custom_fields_rows(@issue) %> @@ -158,16 +156,7 @@ end %> <% if !@issue.leaf? || User.current.allowed_to?(:manage_subtasks, @project) %>
-
- <%= link_to_new_subtask(@issue) if User.current.allowed_to?(:manage_subtasks, @project) %> -
-

- <%=l(:label_subtask_plural)%> - <%= render_descendants_stats(@issue) unless @issue.leaf? %> -

-<%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do %> -<%= render_descendants_tree(@issue) unless @issue.leaf? %> -<% end %> +<%= render :partial => 'subtasks' %>
<% end %> @@ -189,7 +178,7 @@ end %> <%= render partial: 'action_menu_edit' unless User.current.wants_comments_in_reverse_order? %> <% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> + <%= f.link_to 'Atom', :url => {:key => User.current.atom_key} %> <%= f.link_to 'PDF' %> <% end %> @@ -207,7 +196,7 @@ end %> <% end %> <% content_for :header_tags do %> - <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@issue.project} - #{@issue.tracker} ##{@issue.id}: #{@issue.subject}") %> + <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.atom_key}, :title => "#{@issue.project} - #{@issue.tracker} ##{@issue.id}: #{@issue.subject}") %> <% end %> <%= context_menu %> diff --git a/app/views/queries/_form.html.erb b/app/views/queries/_form.html.erb index f56ae2f..8b55996 100644 --- a/app/views/queries/_form.html.erb +++ b/app/views/queries/_form.html.erb @@ -3,49 +3,67 @@
<%= hidden_field_tag 'gantt', '1' if params[:gantt] %> +<%= hidden_field_tag 'calendar', '1' if params[:calendar] %>

<%= text_field 'query', 'name', :size => 80 %>

-<% if User.current.admin? || User.current.allowed_to?(:manage_public_queries, @query.project) %> +<% if User.current.admin? || + User.current.allowed_to?(:manage_public_queries, @query.project) %>

- - <% Role.givable.sorted.each do |role| %> - + <% unless @query.type == 'ProjectQuery' %> + + <% Role.givable.sorted.each do |role| %> + + <% end %> + <%= hidden_field_tag 'query[role_ids][]', '' %> <% end %> - <%= hidden_field_tag 'query[role_ids][]', '' %>

<% end %> -

-<%= check_box_tag 'query_is_for_all', 1, @query.project.nil?, :class => (User.current.admin? ? '' : 'disable-unless-private') %>

+<% unless @query.type == 'ProjectQuery' %> +

+ <%= check_box_tag 'query_is_for_all', 1, @query.project.nil?, :class => (User.current.admin? ? '' : 'disable-unless-private') %>

+<% end %> -<% unless params[:gantt] %> -
<%= l(:label_options) %> -

-<%= check_box_tag 'default_columns', 1, @query.has_default_columns?, :id => 'query_default_columns', - :data => {:disables => "#columns, .block_columns input"} %>

+<% unless params[:calendar] %> +
<%= l(:label_options) %> + <% if @query.available_display_types.size > 1 %> +

+ <%= available_display_types_tags(@query) %> +

+ <% end %> -

-<%= select 'query', 'group_by', @query.groupable_columns.collect {|c| [c.caption, c.name.to_s]}, :include_blank => true %>

+

+ <%= check_box_tag 'default_columns', 1, @query.has_default_columns?, :id => 'query_default_columns', + :data => {:disables => "#columns, .block_columns input"} %>

-

-<%= available_block_columns_tags(@query) %>

+ <% unless params[:gantt] %> +

+ <%= select 'query', 'group_by', @query.groupable_columns.collect {|c| [c.caption, c.name.to_s]}, :include_blank => true %>

-

-<%= available_totalable_columns_tags(@query) %>

-
-<% else %> -
<%= l(:label_options) %> -

- <%= hidden_field_tag 'query[draw_relations]', '0' %> - <%= hidden_field_tag 'query[draw_progress_line]', '0' %> - - -

-
+ <% unless @query.available_block_columns.empty? %> +

+ <%= available_block_columns_tags(@query) %>

+ <% end %> + + <% unless @query.available_totalable_columns.empty? %> +

+ <%= available_totalable_columns_tags(@query) %>

+ <% end %> + <% else %> +

+ <%= hidden_field_tag 'query[draw_relations]', '0' %> + <%= hidden_field_tag 'query[draw_progress_line]', '0' %> + <%= hidden_field_tag 'query[draw_selected_columns]', '0' %> + + + +

+ <% end %> +
<% end %>
@@ -53,8 +71,8 @@ <%= render :partial => 'queries/filters', :locals => {:query => query}%> -<% unless params[:gantt] %> -
<%= l(:label_sort) %> +<% if params[:calendar].nil? && params[:gantt].nil? %> +
<%= l(:label_sort) %> <% 3.times do |i| %> <%= content_tag(:span, "#{i+1}:", :class => 'query_sort_criteria_count')%> <%= label_tag "query_sort_criteria_attribute_" + i.to_s, @@ -72,11 +90,11 @@
<% end %> -<% unless params[:gantt] %> -<%= content_tag 'fieldset', :id => 'columns' do %> -<%= l(:field_column_names) %> -<%= render_query_columns_selection(query) %> -<% end %> +<% unless params[:calendar] %> + <%= content_tag 'fieldset', :id => 'columns' do %> + <%= l(:field_column_names) %> + <%= render_query_columns_selection(query) %> + <% end %> <% end %>
@@ -91,4 +109,15 @@ $(document).ready(function(){ $("input.disable-unless-private").attr('disabled', !private_checked); }).trigger('change'); }); + +$(function ($) { + $('input[name=display_type]').change(function () { + var option = $('input[name=display_type]:checked').val(); + if (option == 'board') { + $('fieldset#columns, fieldset#sort, p#default_columns, p#group_by').hide(); + } else { + $('fieldset#columns, fieldset#sort, p#default_columns, p#group_by').show(); + } + }).change(); +}); <% end %> diff --git a/init.rb b/init.rb index 0a60980..bdfe509 100644 --- a/init.rb +++ b/init.rb @@ -1,27 +1,31 @@ -require 'redmine' - -Rails.configuration.to_prepare do -#ActiveSupport::Reloader.to_prepare do - require_dependency 'issue' - Issue.send(:prepend, RedmineWorkflowHiddenFields::IssuePatch) - require_dependency 'issue_query' - IssueQuery.send(:prepend, RedmineWorkflowHiddenFields::IssueQueryPatch) - require_dependency 'issues_helper' - IssuesHelper.send(:prepend, RedmineWorkflowHiddenFields::IssuesHelperPatch) - require_dependency 'journal' - Journal.send(:prepend, RedmineWorkflowHiddenFields::JournalPatch) - require_dependency 'project' - Project.send(:prepend, RedmineWorkflowHiddenFields::ProjectPatch) - require_dependency 'query' - Query.send(:prepend, RedmineWorkflowHiddenFields::QueryPatch) - QueryColumn.send(:prepend, RedmineWorkflowHiddenFields::QueryColumnPatch) - QueryCustomFieldColumn.send(:prepend, RedmineWorkflowHiddenFields::QueryCustomFieldColumnPatch) - require_dependency 'workflow_permission' - WorkflowPermission.send(:include, RedmineWorkflowHiddenFields::WorkflowPermissionPatch) - require_dependency 'workflows_helper' - WorkflowsHelper.send(:prepend, RedmineWorkflowHiddenFields::WorkflowsHelperPatch) - require_dependency 'redmine/export/pdf/issues_pdf_helper' - Redmine::Export::PDF::IssuesPdfHelper.send(:prepend, RedmineWorkflowHiddenFields::IssuesPdfHelperPatch) +if Rails.version > '6.0' && Rails.autoloaders.zeitwerk_enabled? + Rails.application.config.after_initialize do + RedmineWorkflowHiddenFields.setup + end +else + require 'redmine' + Rails.configuration.to_prepare do + require 'issue' + Issue.send(:prepend, RedmineWorkflowHiddenFields::IssuePatch) + require_dependency 'issue_query' + IssueQuery.send(:prepend, RedmineWorkflowHiddenFields::IssueQueryPatch) + require 'issues_helper' + IssuesHelper.send(:prepend, RedmineWorkflowHiddenFields::IssuesHelperPatch) + require 'journal' + Journal.send(:prepend, RedmineWorkflowHiddenFields::JournalPatch) + require 'project' + Project.send(:prepend, RedmineWorkflowHiddenFields::ProjectPatch) + require 'query' + Query.send(:prepend, RedmineWorkflowHiddenFields::QueryPatch) + QueryColumn.send(:prepend, RedmineWorkflowHiddenFields::QueryColumnPatch) + QueryCustomFieldColumn.send(:prepend, RedmineWorkflowHiddenFields::QueryCustomFieldColumnPatch) + require 'workflow_permission' + WorkflowPermission.send(:include, RedmineWorkflowHiddenFields::WorkflowPermissionPatch) + require 'workflows_helper' + WorkflowsHelper.send(:prepend, RedmineWorkflowHiddenFields::WorkflowsHelperPatch) + require 'redmine/export/pdf/issues_pdf_helper' + Redmine::Export::PDF::IssuesPdfHelper.send(:prepend, RedmineWorkflowHiddenFields::IssuesPdfHelperPatch) + end end Redmine::Plugin.register :redmine_workflow_hidden_fields do @@ -30,7 +34,7 @@ name 'Redmine Workflow Hidden Fields plugin' author 'Alexander Wais, David Robinson, et al.' description "Provides a 'hidden' issue field permission for workflows" - version '0.5.0' + version '0.5.1' url 'https://github.com/alexwais/redmine_workflow_hidden_fields' author_url 'http://www.redmine.org/issues/12005' end diff --git a/lib/redmine_workflow_hidden_fields.rb b/lib/redmine_workflow_hidden_fields.rb new file mode 100644 index 0000000..c9e88f7 --- /dev/null +++ b/lib/redmine_workflow_hidden_fields.rb @@ -0,0 +1,15 @@ +module RedmineWorkflowHiddenFields + def self.setup + Issue.send(:prepend, RedmineWorkflowHiddenFields::IssuePatch) + IssueQuery.send(:prepend, RedmineWorkflowHiddenFields::IssueQueryPatch) + IssuesHelper.send(:prepend, RedmineWorkflowHiddenFields::IssuesHelperPatch) + Journal.send(:prepend, RedmineWorkflowHiddenFields::JournalPatch) + Project.send(:prepend, RedmineWorkflowHiddenFields::ProjectPatch) + Query.send(:prepend, RedmineWorkflowHiddenFields::QueryPatch) + QueryColumn.send(:prepend, RedmineWorkflowHiddenFields::QueryColumnPatch) + QueryCustomFieldColumn.send(:prepend, RedmineWorkflowHiddenFields::QueryCustomFieldColumnPatch) + WorkflowPermission.send(:include, RedmineWorkflowHiddenFields::WorkflowPermissionPatch) + WorkflowsHelper.send(:prepend, RedmineWorkflowHiddenFields::WorkflowsHelperPatch) + Redmine::Export::PDF::IssuesPdfHelper.send(:prepend, RedmineWorkflowHiddenFields::IssuesPdfHelperPatch) + end +end diff --git a/lib/redmine_workflow_hidden_fields/issues_helper_patch.rb b/lib/redmine_workflow_hidden_fields/issues_helper_patch.rb index d692928..11958cf 100644 --- a/lib/redmine_workflow_hidden_fields/issues_helper_patch.rb +++ b/lib/redmine_workflow_hidden_fields/issues_helper_patch.rb @@ -22,6 +22,8 @@ def email_issue_attributes(issue, user, html) items end + MultipleValuesDetail = Struct.new(:property, :prop_key, :custom_field, :old_value, :value) + def details_to_strings(details, no_html=false, options={}) options[:only_path] = (options[:only_path] == false ? false : true) strings = [] @@ -46,6 +48,7 @@ def details_to_strings(details, no_html=false, options={}) end if values_by_field.present? values_by_field.each do |field, changes| + # [Nomadia-changes] Added condition for hiding hidden fields, compared to the original function unless details.first.journal.issue.hidden_attribute?(field.id.to_s, options[:user]) if changes[:added].any? detail = MultipleValuesDetail.new('cf', field.id.to_s, field)