This commit is contained in:
Akiko Takano 2015-03-01 06:29:35 +09:00
commit 5dad4be07e
18 changed files with 136 additions and 60 deletions

View File

@ -3,3 +3,4 @@
^doc$
.yardoc$
syntax: glob
Gemfile.lock

View File

@ -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

View File

@ -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

View File

@ -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])

View File

@ -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

View File

@ -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

View File

@ -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!

View File

@ -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 %>

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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' },

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,