mirror of
https://github.com/dolphin-emu/redmine_issue_templates.git
synced 2025-02-21 10:02:21 +00:00
Merged.
This commit is contained in:
commit
5dad4be07e
5
Gemfile
5
Gemfile
@ -1,7 +1,6 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
group :test do
|
||||
gem "simplecov"
|
||||
gem "simplecov-rcov"
|
||||
gem "yard"
|
||||
gem 'simplecov-rcov', :require => false
|
||||
gem 'shoulda', groups: [:test]
|
||||
end
|
||||
|
@ -13,8 +13,15 @@ class GlobalIssueTemplatesController < ApplicationController
|
||||
#
|
||||
def index
|
||||
@trackers = Tracker.all
|
||||
@global_issue_templates = GlobalIssueTemplate.all
|
||||
render :template => 'global_issue_templates/index.html.erb', :layout => !request.xhr?
|
||||
@template_map = Hash::new
|
||||
@trackers.each do |tracker|
|
||||
templates = GlobalIssueTemplate.where('tracker_id = ?',
|
||||
tracker.id).order('position')
|
||||
if templates.any?
|
||||
@template_map[Tracker.find(tracker.id)] = templates
|
||||
end
|
||||
end
|
||||
render :layout => !request.xhr?
|
||||
end
|
||||
|
||||
def new
|
||||
@ -39,7 +46,8 @@ class GlobalIssueTemplatesController < ApplicationController
|
||||
|
||||
def edit
|
||||
@projects = Project.all
|
||||
if request.put?
|
||||
# Change from request.post to request.patch for Rails4.
|
||||
if request.patch? || request.put?
|
||||
@global_issue_template.safe_attributes = params[:global_issue_template]
|
||||
if @global_issue_template.save
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
@ -69,7 +77,13 @@ class GlobalIssueTemplatesController < ApplicationController
|
||||
render :partial => 'common/preview'
|
||||
end
|
||||
|
||||
def move
|
||||
move_order(params[:to])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Reorder templates
|
||||
def find_user
|
||||
@user = User.current
|
||||
end
|
||||
@ -80,4 +94,12 @@ class GlobalIssueTemplatesController < ApplicationController
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
def move_order(method)
|
||||
GlobalIssueTemplate.find(params[:id]).send "move_#{method}"
|
||||
respond_to do |format|
|
||||
format.html { redirect_to :action => 'index' }
|
||||
format.xml { head :ok }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -41,10 +41,9 @@ class IssueTemplatesController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
@globalIssueTemplates = GlobalIssueTemplate.find(:all,:include => [:projects],
|
||||
:conditions => ["projects.id = ?", @project.id] )
|
||||
@globalIssueTemplates = GlobalIssueTemplate.joins(:projects).where(["projects.id = ?", @project.id]).order('position')
|
||||
|
||||
render :template => 'issue_templates/index.html.erb', :layout => !request.xhr?
|
||||
render :layout => !request.xhr?
|
||||
end
|
||||
|
||||
def show
|
||||
@ -52,10 +51,8 @@ class IssueTemplatesController < ApplicationController
|
||||
|
||||
def new
|
||||
# create empty instance
|
||||
@issue_template = IssueTemplate.new(:author => @user, :project => @project,
|
||||
:tracker => @tracker)
|
||||
@issue_template ||= IssueTemplate.new(:author => @user, :project => @project)
|
||||
if request.post?
|
||||
# Case post, set attributes passed as parameters.
|
||||
@issue_template.safe_attributes = params[:issue_template]
|
||||
if @issue_template.save
|
||||
flash[:notice] = l(:notice_successful_create)
|
||||
@ -66,7 +63,8 @@ class IssueTemplatesController < ApplicationController
|
||||
end
|
||||
|
||||
def edit
|
||||
if request.put?
|
||||
# Change from request.post to request.patch for Rails4.
|
||||
if request.patch? || request.put?
|
||||
@issue_template.safe_attributes = params[:issue_template]
|
||||
if @issue_template.save
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
@ -92,7 +90,7 @@ class IssueTemplatesController < ApplicationController
|
||||
else
|
||||
@issue_template = IssueTemplate.find(params[:issue_template])
|
||||
end
|
||||
render :text => @issue_template.to_json
|
||||
render :text => @issue_template.to_json(:root => true)
|
||||
end
|
||||
|
||||
# update pulldown
|
||||
@ -141,8 +139,10 @@ class IssueTemplatesController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
@globalIssueTemplates = GlobalIssueTemplate.find(:all,:include => [:projects],
|
||||
:conditions => [" tracker_id = ? AND projects.id = ?", @tracker.id, @project.id] )
|
||||
@globalIssueTemplates = GlobalIssueTemplate.joins(:projects).where(["tracker_id = ? AND projects.id = ?",
|
||||
@tracker.id, @project.id]).order('position')
|
||||
|
||||
|
||||
if @globalIssueTemplates.any?
|
||||
@globalIssueTemplates.each do |x|
|
||||
group.push([x.title, x.id, {:class => "global"}])
|
||||
@ -165,7 +165,7 @@ class IssueTemplatesController < ApplicationController
|
||||
@issue_template = IssueTemplate.find(params[:id]) if params[:id]
|
||||
render :partial => 'common/preview'
|
||||
end
|
||||
|
||||
|
||||
# Reorder templates
|
||||
def move
|
||||
move_order(params[:to])
|
||||
|
@ -17,7 +17,10 @@ class GlobalIssueTemplate < ActiveRecord::Base
|
||||
'note',
|
||||
'enabled',
|
||||
'issue_title',
|
||||
'project_ids'
|
||||
'project_ids',
|
||||
'position'
|
||||
attr_accessible :title, :tracker_id, :issue_title, :description, :note,
|
||||
:enabled, :project_ids, :position, :author
|
||||
|
||||
def enabled?
|
||||
self.enabled == true
|
||||
|
@ -13,7 +13,9 @@ class IssueTemplate < ActiveRecord::Base
|
||||
|
||||
# author and project should be stable.
|
||||
safe_attributes 'title', 'description', 'tracker_id', 'note', 'enabled', 'issue_title','is_default',
|
||||
'enabled_sharing','visible_children'
|
||||
'enabled_sharing','visible_children', 'position'
|
||||
attr_accessible :title, :tracker_id, :issue_title, :description, :note,
|
||||
:is_default, :enabled, :enabled_sharing, :author, :project, :position
|
||||
def enabled?
|
||||
self.enabled == true
|
||||
end
|
||||
@ -27,8 +29,11 @@ class IssueTemplate < ActiveRecord::Base
|
||||
#
|
||||
def check_default
|
||||
if is_default? && is_default_changed?
|
||||
IssueTemplate.update_all({:is_default => false},
|
||||
['project_id = ? AND tracker_id = ?', project_id, tracker_id])
|
||||
|
||||
# for Rails4
|
||||
IssueTemplate.where(['project_id = ? AND tracker_id = ?', project_id, tracker_id]).update_all(is_default: false)
|
||||
# IssueTemplate.update_all({:is_default => false},
|
||||
# ['project_id = ? AND tracker_id = ?', project_id, tracker_id])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -7,10 +7,12 @@ class IssueTemplateSetting < ActiveRecord::Base
|
||||
validates_presence_of :project_id
|
||||
|
||||
safe_attributes 'help_message', 'enabled', 'inherit_templates', 'should_replaced'
|
||||
|
||||
attr_accessible :help_message, :enabled, :inherit_templates, :should_replaced
|
||||
|
||||
|
||||
def self.find_or_create(project_id)
|
||||
setting = IssueTemplateSetting.find(:first, :conditions => ['project_id = ?', project_id])
|
||||
unless setting
|
||||
setting = IssueTemplateSetting.where(['project_id = ?', project_id]).first()
|
||||
unless setting.present?
|
||||
setting = IssueTemplateSetting.new
|
||||
setting.project_id = project_id
|
||||
setting.save!
|
||||
|
@ -9,14 +9,16 @@
|
||||
{:controller => 'global_issue_templates', :action => 'new'},
|
||||
:class => 'icon icon-add') %>
|
||||
</div>
|
||||
<div style="clear:both;"></div>
|
||||
|
||||
<% if @global_issue_templates.blank? %>
|
||||
<% if @template_map.blank? %>
|
||||
<div class="template_box">
|
||||
<%= l(:no_issue_templates_for_this_redmine) %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<div class="template_box">
|
||||
<% @template_map.each_key do |tracker| %>
|
||||
<div class="template_box">
|
||||
<h3 class="template_tracker"><%= tracker.name %></h3>
|
||||
|
||||
<table class="list issues">
|
||||
<thead>
|
||||
@ -27,13 +29,11 @@
|
||||
<th><%= l(:field_author) %></th>
|
||||
<th><%= l(:field_updated_on) %></th>
|
||||
<th><%= l(:label_enabled) %></th>
|
||||
<% if authorize_for("global_issue_templates", "edit") %>
|
||||
<th><%=l(:button_sort)%></th>
|
||||
<% end %>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% @global_issue_templates.each do |issue_template| %>
|
||||
<% @template_map[tracker].each do |issue_template| %>
|
||||
<tr class="<%= cycle("odd", "even") %> issue_template issue">
|
||||
<td><%= link_to h(issue_template.id), {:controller => 'global_issue_templates',
|
||||
:id => issue_template.id, :action => 'show'},
|
||||
@ -48,7 +48,6 @@
|
||||
<td><%= format_time(issue_template.updated_on)%> </td>
|
||||
<td class="center"><%= checked_image issue_template.enabled? %></td>
|
||||
|
||||
<% if authorize_for("issue_templates", "edit") %>
|
||||
<td>
|
||||
<%= issue_template.first? ? '':
|
||||
link_to(image_tag('2uparrow.png', :alt => l(:label_sort_highest)),
|
||||
@ -67,7 +66,6 @@
|
||||
{:action => :move, :id => issue_template, :to => :to_bottom},
|
||||
{:title => l(:label_sort_lowest)}) %>
|
||||
</td>
|
||||
<% end %>
|
||||
</tr>
|
||||
<tr class="<%= current_cycle %>" style="display: none;" id="global_template_description-<%= issue_template.id %>">
|
||||
<td class="description" colspan="8">
|
||||
@ -76,5 +74,6 @@
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% end %>
|
@ -9,6 +9,7 @@
|
||||
{:controller => 'issue_templates', :action => 'new', :project_id => @project},
|
||||
:class => 'icon icon-add') %>
|
||||
</div>
|
||||
<div style="clear:both;"></div>
|
||||
|
||||
<% if @notice -%>
|
||||
<div class="flash notice"><%= @notice -%></div>
|
||||
|
@ -1,11 +1,13 @@
|
||||
Rails.application.routes.draw do
|
||||
match 'projects/:project_id/issue_templates/:action', :to => 'issue_templates'
|
||||
match 'projects/:project_id/issue_templates/:action/:id', :to => 'issue_templates#edit'
|
||||
match 'projects/:project_id/issue_templates/move/:id', :to => 'issue_templates#move_to'
|
||||
match 'projects/:project_id/issue_templates_settings/:action', :to => 'issue_templates_settings'
|
||||
Rails.application.routes.draw do
|
||||
get 'projects/:project_id/issue_templates', :to => 'issue_templates#index'
|
||||
match 'projects/:project_id/issue_templates/:action', :to => 'issue_templates', :via => [:get, :post, :patch, :put]
|
||||
match 'projects/:project_id/issue_templates/:action/:id', :to => 'issue_templates#edit' ,:via => [:patch, :put, :post, :get]
|
||||
match 'projects/:project_id/issue_templates/move/:id', :to => 'issue_templates#move_to', :via => [:get, :post, :patch, :put]
|
||||
match 'projects/:project_id/issue_templates_settings/:action', :to => 'issue_templates_settings', :via => [:get, :post, :patch, :put]
|
||||
match 'issue_templates/preview', :to => 'issue_templates#preview', :via => [:get, :post]
|
||||
match 'projects/:project_id/issue_templates_settings/preview', :to => 'issue_templates_settings#preview', :via => [:get, :post]
|
||||
match 'global_issue_templates/:action', :to => 'global_issue_templates'
|
||||
match 'global_issue_templates/:action/:id', :to => 'global_issue_templates#edit'
|
||||
get 'global_issue_templates', :to => 'global_issue_templates#index'
|
||||
match 'global_issue_templates/:action', :to => 'global_issue_templates', :via => [:get, :post]
|
||||
match 'global_issue_templates/:action/:id', :to => 'global_issue_templates#edit' ,:via => [:patch, :put, :post, :get]
|
||||
match 'global_issue_templates/preview', :to => 'global_issue_templates#preview', :via => [:get, :post]
|
||||
end
|
@ -3,7 +3,7 @@ class AddIssueTitleToIssueTemplates < ActiveRecord::Migration
|
||||
add_column :issue_templates, :issue_title, :string
|
||||
|
||||
IssueTemplate.reset_column_information
|
||||
issue_templates = IssueTemplate.find(:all)
|
||||
issue_templates = IssueTemplate.all
|
||||
issue_templates.each do |t|
|
||||
t.issue_title = t.title
|
||||
t.save
|
||||
|
@ -3,7 +3,7 @@ class AddPositionToIssueTemplates < ActiveRecord::Migration
|
||||
add_column :issue_templates, :position, :integer, :default => 1
|
||||
|
||||
IssueTemplate.reset_column_information
|
||||
issue_templates = IssueTemplate.find(:all)
|
||||
issue_templates = IssueTemplate.all
|
||||
issue_templates.each_with_index {|t, i| t.update_attribute(:position, i+1)}
|
||||
end
|
||||
|
||||
|
4
init.rb
4
init.rb
@ -26,9 +26,9 @@ Redmine::Plugin.register :redmine_issue_templates do
|
||||
name 'Redmine Issue Templates plugin'
|
||||
author 'Akiko Takano'
|
||||
description 'Plugin to generate and use issue templates for each project to assist issue creation.'
|
||||
version '0.0.9'
|
||||
version '0.1.0-dev'
|
||||
author_url 'http://twitter.com/akiko_pusu'
|
||||
requires_redmine :version_or_higher => '2.1.0'
|
||||
requires_redmine :version_or_higher => '2.6'
|
||||
url 'https://bitbucket.org/akiko_pusu/redmine_issue_templates'
|
||||
|
||||
menu :admin_menu, :redmine_issue_templates, { :controller => 'global_issue_templates', :action => 'index' },
|
||||
|
34
test/fixtures/global_issue_templates.yml
vendored
34
test/fixtures/global_issue_templates.yml
vendored
@ -49,3 +49,37 @@ three:
|
||||
enabled: true
|
||||
|
||||
position: 1
|
||||
|
||||
four:
|
||||
id: 4
|
||||
|
||||
tracker_id: 1
|
||||
|
||||
author_id: 1
|
||||
|
||||
title: titel4
|
||||
|
||||
description: "global description4"
|
||||
|
||||
note: note4
|
||||
|
||||
enabled: true
|
||||
|
||||
position: 2
|
||||
|
||||
five:
|
||||
id: 5
|
||||
|
||||
tracker_id: 1
|
||||
|
||||
author_id: 1
|
||||
|
||||
title: titel5
|
||||
|
||||
description: "global description5"
|
||||
|
||||
note: note5
|
||||
|
||||
enabled: true
|
||||
|
||||
position: 3
|
||||
|
@ -24,11 +24,11 @@ class GlobalIssueTemplatesControllerTest < ActionController::TestCase
|
||||
setup do
|
||||
end
|
||||
|
||||
should "should get index" do
|
||||
should "get index" do
|
||||
get :index
|
||||
assert_response :success
|
||||
assert_template 'index'
|
||||
assert_not_nil assigns(:global_issue_templates)
|
||||
assert_not_nil assigns(:template_map)
|
||||
end
|
||||
end
|
||||
|
||||
@ -53,7 +53,15 @@ class GlobalIssueTemplatesControllerTest < ActionController::TestCase
|
||||
:action => "index"
|
||||
assert_raise(ActiveRecord::RecordNotFound) {GlobalIssueTemplate.find(2)}
|
||||
end
|
||||
end
|
||||
|
||||
should "move to bottom and top" do
|
||||
global_issue_template = GlobalIssueTemplate.find(1)
|
||||
get :move, :tracler_id => 1, :id => 1, :to => :to_bottom
|
||||
assert_equal 3, global_issue_template.reload.position
|
||||
get :move, :tracler_id => 1, :id => 1, :to => :to_top
|
||||
assert_equal 1, global_issue_template.reload.position
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "#new" do
|
||||
@ -62,7 +70,7 @@ class GlobalIssueTemplatesControllerTest < ActionController::TestCase
|
||||
end
|
||||
|
||||
should "return new global template instance when request is get" do
|
||||
get :new, :author_id => 1
|
||||
get :new
|
||||
assert_response :success
|
||||
|
||||
template = assigns(:global_issue_template)
|
||||
@ -76,16 +84,16 @@ class GlobalIssueTemplatesControllerTest < ActionController::TestCase
|
||||
|
||||
# do post
|
||||
should "insert new global template record when request is post" do
|
||||
count = GlobalIssueTemplate.find(:all).length
|
||||
num = GlobalIssueTemplate.count
|
||||
post :new, :global_issue_template => {:title => "Global Template newtitle for creation test", :note => "Global note for creation test",
|
||||
:description => "Global Template description for creation test",
|
||||
:tracker_id => 1, :enabled => 1, :author_id => 1
|
||||
}
|
||||
|
||||
template = GlobalIssueTemplate.first(:order => 'id DESC')
|
||||
template = GlobalIssueTemplate.order('id DESC').first
|
||||
assert_response :redirect # show
|
||||
|
||||
assert_equal(count + 1, GlobalIssueTemplate.find(:all).length)
|
||||
assert_equal(num + 1, GlobalIssueTemplate.count)
|
||||
|
||||
assert_not_nil template
|
||||
assert_equal("Global Template newtitle for creation test", template.title)
|
||||
@ -97,7 +105,7 @@ class GlobalIssueTemplatesControllerTest < ActionController::TestCase
|
||||
|
||||
# fail check
|
||||
should "not be able to save if title is empty" do
|
||||
count = GlobalIssueTemplate.find(:all).length
|
||||
num = GlobalIssueTemplate.count
|
||||
|
||||
# when title blank, validation bloks to save.
|
||||
post :new, :global_issue_template => {:title => "", :note => "note",
|
||||
@ -105,7 +113,7 @@ class GlobalIssueTemplatesControllerTest < ActionController::TestCase
|
||||
:author_id => 1 }
|
||||
|
||||
assert_response :success
|
||||
assert_equal(count, GlobalIssueTemplate.find(:all).length)
|
||||
assert_equal(num, GlobalIssueTemplate.count)
|
||||
end
|
||||
|
||||
should "preview template" do
|
||||
|
@ -104,15 +104,15 @@ class IssueTemplatesControllerTest < ActionController::TestCase
|
||||
|
||||
# do post
|
||||
should "insert new template record when request is post" do
|
||||
count = IssueTemplate.find(:all).length
|
||||
num = IssueTemplate.count
|
||||
post :new, :issue_template => {:title => "newtitle", :note => "note",
|
||||
:description => "description", :tracker_id => 1, :enabled => 1, :author_id => 3
|
||||
}, :project_id => 1
|
||||
|
||||
template = IssueTemplate.first(:order => 'id DESC')
|
||||
template = assigns(:issue_template)
|
||||
assert_response :redirect # show
|
||||
|
||||
assert_equal(count + 1, IssueTemplate.find(:all).length)
|
||||
assert_equal(num + 1, IssueTemplate.count)
|
||||
|
||||
assert_not_nil template
|
||||
assert_equal("newtitle", template.title)
|
||||
@ -125,7 +125,7 @@ class IssueTemplatesControllerTest < ActionController::TestCase
|
||||
|
||||
# fail check
|
||||
should "not be able to save if title is empty" do
|
||||
count = IssueTemplate.find(:all).length
|
||||
num = IssueTemplate.count
|
||||
|
||||
# when title blank, validation bloks to save.
|
||||
post :new, :issue_template => {:title => "", :note => "note",
|
||||
@ -133,7 +133,7 @@ class IssueTemplatesControllerTest < ActionController::TestCase
|
||||
:author_id => 1 }, :project_id => 1
|
||||
|
||||
assert_response :success
|
||||
assert_equal(count, IssueTemplate.find(:all).length)
|
||||
assert_equal(num, IssueTemplate.count)
|
||||
end
|
||||
|
||||
should "preview template" do
|
||||
|
@ -37,7 +37,7 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
enabled_module.project_id = 1
|
||||
enabled_module.name = 'issue_templates'
|
||||
enabled_module.save
|
||||
roles = Role.find(:all)
|
||||
roles = Role.all
|
||||
roles.each {|role|
|
||||
role.permissions << :show_issue_templates
|
||||
role.remove_permission! :edit_issue_templates
|
||||
|
@ -1,6 +1,6 @@
|
||||
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
||||
|
||||
class LayoutTest < ActionController::IntegrationTest
|
||||
class LayoutTest < Redmine::IntegrationTest
|
||||
fixtures :projects, :trackers, :issue_statuses, :issues,
|
||||
:enumerations, :users,
|
||||
:projects_trackers,
|
||||
|
Loading…
x
Reference in New Issue
Block a user