summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-02-28 17:08:58 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-02-28 17:08:58 +0200
commitafed5cb614fcb1a37c8481dc928b10f2e611c4ca (patch)
tree41ba8089e2ba4f4d2a0c615c6292cc1b03358ef2 /app
parentd452ffc2d08d82c4eab32fa8e65839cf13f85c4c (diff)
parente1f77b9be071fac9f57e85b2f3853d2f333aeaab (diff)
downloadgitlab-ce-afed5cb614fcb1a37c8481dc928b10f2e611c4ca.tar.gz
Merge branch 'Undev-link-to-issue-tracker'
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/projects.js.coffee15
-rw-r--r--app/controllers/application_controller.rb5
-rw-r--r--app/helpers/issues_helper.rb35
-rw-r--r--app/models/project.rb25
-rw-r--r--app/views/admin/projects/_form.html.haml9
-rw-r--r--app/views/layouts/_head.html.haml1
-rw-r--r--app/views/layouts/project_resource.html.haml7
-rw-r--r--app/views/projects/_form.html.haml9
8 files changed, 101 insertions, 5 deletions
diff --git a/app/assets/javascripts/projects.js.coffee b/app/assets/javascripts/projects.js.coffee
index d03a487c453..24106c61b75 100644
--- a/app/assets/javascripts/projects.js.coffee
+++ b/app/assets/javascripts/projects.js.coffee
@@ -18,3 +18,18 @@ $ ->
# Ref switcher
$('.project-refs-select').on 'change', ->
$(@).parents('form').submit()
+
+ $('#project_issues_enabled').change ->
+ if ($(this).is(':checked') == true)
+ $('#project_issues_tracker').removeAttr('disabled')
+ else
+ $('#project_issues_tracker').attr('disabled', 'disabled')
+
+ $('#project_issues_tracker').change()
+
+ $('#project_issues_tracker').change ->
+ if ($(this).val() == gon.default_issues_tracker || $(this).is(':disabled'))
+ $('#project_issues_tracker_id').attr('disabled', 'disabled')
+ else
+ $('#project_issues_tracker_id').removeAttr('disabled')
+
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 1f211bac9c2..5b886227bc9 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -5,6 +5,7 @@ class ApplicationController < ActionController::Base
before_filter :add_abilities
before_filter :dev_tools if Rails.env == 'development'
before_filter :default_headers
+ before_filter :add_gon_variables
protect_from_forgery
@@ -148,4 +149,8 @@ class ApplicationController < ActionController::Base
headers['X-Frame-Options'] = 'DENY'
headers['X-XSS-Protection'] = '1; mode=block'
end
+
+ def add_gon_variables
+ gon.default_issues_tracker = Project.issues_tracker.default_value
+ end
end
diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb
index ed7e3e869c0..83215180492 100644
--- a/app/helpers/issues_helper.rb
+++ b/app/helpers/issues_helper.rb
@@ -40,4 +40,39 @@ module IssuesHelper
def issues_active_milestones
@project.milestones.active.order("id desc").all
end
+
+ def url_for_project_issues
+ return "" if @project.nil?
+
+ if @project.used_default_issues_tracker?
+ project_issues_filter_path(@project)
+ else
+ url = Settings[:issues_tracker][@project.issues_tracker]["project_url"]
+ url.gsub(':project_id', @project.id.to_s)
+ .gsub(':issues_tracker_id', @project.issues_tracker_id.to_s)
+ end
+ end
+
+ def url_for_issue(issue_id)
+ return "" if @project.nil?
+
+ if @project.used_default_issues_tracker?
+ url = project_issue_url project_id: @project, id: issue_id
+ else
+ url = Settings[:issues_tracker][@project.issues_tracker]["issues_url"]
+ url.gsub(':id', issue_id.to_s)
+ .gsub(':project_id', @project.id.to_s)
+ .gsub(':issues_tracker_id', @project.issues_tracker_id.to_s)
+ end
+ end
+
+ def title_for_issue(issue_id)
+ return "" if @project.nil?
+
+ if @project.used_default_issues_tracker? && issue = @project.issues.where(id: issue_id).first
+ issue.title
+ else
+ ""
+ end
+ end
end
diff --git a/app/models/project.rb b/app/models/project.rb
index 6ff2a3698df..12f7e45496b 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -11,6 +11,7 @@
# creator_id :integer
# default_branch :string(255)
# issues_enabled :boolean default(TRUE), not null
+# issues_tracker :string not null
# wall_enabled :boolean default(TRUE), not null
# merge_requests_enabled :boolean default(TRUE), not null
# wiki_enabled :boolean default(TRUE), not null
@@ -22,11 +23,12 @@ require "grit"
class Project < ActiveRecord::Base
include Gitolited
+ extend Enumerize
class TransferError < StandardError; end
- attr_accessible :name, :path, :description, :default_branch,
- :issues_enabled, :wall_enabled, :merge_requests_enabled,
+ attr_accessible :name, :path, :description, :default_branch, :issues_tracker,
+ :issues_enabled, :wall_enabled, :merge_requests_enabled, :issues_tracker_id,
:wiki_enabled, :public, :import_url, as: [:default, :admin]
attr_accessible :namespace_id, :creator_id, as: :admin
@@ -72,6 +74,7 @@ class Project < ActiveRecord::Base
message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
validates :issues_enabled, :wall_enabled, :merge_requests_enabled,
:wiki_enabled, inclusion: { in: [true, false] }
+ validates :issues_tracker_id, length: { within: 0..255 }
validates_uniqueness_of :name, scope: :namespace_id
validates_uniqueness_of :path, scope: :namespace_id
@@ -93,6 +96,8 @@ class Project < ActiveRecord::Base
scope :joined, ->(user) { where("namespace_id != ?", user.namespace_id) }
scope :public_only, -> { where(public: true) }
+ enumerize :issues_tracker, :in => (Gitlab.config.issues_tracker.keys).append(:gitlab), :default => :gitlab
+
class << self
def abandoned
project_ids = Event.select('max(created_at) as latest_date, project_id').
@@ -201,6 +206,22 @@ class Project < ActiveRecord::Base
issues.tag_counts_on(:labels)
end
+ def issue_exists?(issue_id)
+ if used_default_issues_tracker?
+ self.issues.where(id: issue_id).first.present?
+ else
+ true
+ end
+ end
+
+ def used_default_issues_tracker?
+ self.issues_tracker == Project.issues_tracker.default_value
+ end
+
+ def can_have_issues_tracker_id?
+ self.issues_enabled && !self.used_default_issues_tracker?
+ end
+
def services
[gitlab_ci_service].compact
end
diff --git a/app/views/admin/projects/_form.html.haml b/app/views/admin/projects/_form.html.haml
index ebf69924a25..29b90bdd4cb 100644
--- a/app/views/admin/projects/_form.html.haml
+++ b/app/views/admin/projects/_form.html.haml
@@ -31,6 +31,15 @@
= f.label :issues_enabled, "Issues"
.input= f.check_box :issues_enabled
+ - if Project.issues_tracker.values.count > 1
+ .clearfix
+ = f.label :issues_tracker, "Issues tracker", class: 'control-label'
+ .input= f.select(:issues_tracker, Project.issues_tracker.values, {}, { disabled: !@project.issues_enabled })
+
+ .clearfix
+ = f.label :issues_tracker_id, "Project name or id in issues tracker", class: 'control-label'
+ .input= f.text_field :issues_tracker_id, class: "xxlarge", disabled: !@project.can_have_issues_tracker_id?
+
.clearfix
= f.label :merge_requests_enabled, "Merge Requests"
.input= f.check_box :merge_requests_enabled
diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml
index 4b4f5da3324..eb83fd2fd45 100644
--- a/app/views/layouts/_head.html.haml
+++ b/app/views/layouts/_head.html.haml
@@ -7,6 +7,7 @@
= stylesheet_link_tag "application"
= javascript_include_tag "application"
= csrf_meta_tags
+ = include_gon
-# Atom feed
- if current_user
diff --git a/app/views/layouts/project_resource.html.haml b/app/views/layouts/project_resource.html.haml
index 3b689215870..37d0f16fa20 100644
--- a/app/views/layouts/project_resource.html.haml
+++ b/app/views/layouts/project_resource.html.haml
@@ -22,11 +22,12 @@
= nav_link(controller: %w(graph)) do
= link_to "Network", project_graph_path(@project, @ref || @repository.root_ref)
- - if @project.issues_enabled
+ - if @project.issues_enabled
= nav_link(controller: %w(issues milestones labels)) do
- = link_to project_issues_filter_path(@project) do
+ = link_to url_for_project_issues do
Issues
- %span.count.issue_counter= @project.issues.opened.count
+ - if @project.used_default_issues_tracker?
+ %span.count.issue_counter= @project.issues.opened.count
- if @project.repo_exists? && @project.merge_requests_enabled
= nav_link(controller: :merge_requests) do
diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml
index 0336654dc69..b78c70be18a 100644
--- a/app/views/projects/_form.html.haml
+++ b/app/views/projects/_form.html.haml
@@ -24,6 +24,15 @@
= f.check_box :issues_enabled
%span.descr Lightweight issue tracking system for this project
+ - if Project.issues_tracker.values.count > 1
+ .control-group
+ = f.label :issues_tracker, "Issues tracker", class: 'control-label'
+ .input= f.select(:issues_tracker, Project.issues_tracker.values, {}, { disabled: !@project.issues_enabled })
+
+ .clearfix
+ = f.label :issues_tracker_id, "Project name or id in issues tracker", class: 'control-label'
+ .input= f.text_field :issues_tracker_id, class: "xxlarge", disabled: !@project.can_have_issues_tracker_id?
+
.control-group
= f.label :merge_requests_enabled, "Merge Requests", class: 'control-label'
.controls