From 9371c6b90136547e3622622510af9894fc27aeb0 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Tue, 20 Jan 2015 16:46:27 -0800 Subject: Add issue tracker services. --- .../project_services/issue_tracker_service.rb | 14 +++++ app/models/project_services/jira_service.rb | 59 ++++++++++++++++++++++ app/models/project_services/redmine_service.rb | 51 +++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 app/models/project_services/issue_tracker_service.rb create mode 100644 app/models/project_services/jira_service.rb create mode 100644 app/models/project_services/redmine_service.rb (limited to 'app') diff --git a/app/models/project_services/issue_tracker_service.rb b/app/models/project_services/issue_tracker_service.rb new file mode 100644 index 00000000000..4ba2f5a9ca2 --- /dev/null +++ b/app/models/project_services/issue_tracker_service.rb @@ -0,0 +1,14 @@ +class IssueTrackerService < Service + + def project_url + # implement inside child + end + + def issues_url + # implement inside child + end + + def new_issue_url + # implement inside child + end +end diff --git a/app/models/project_services/jira_service.rb b/app/models/project_services/jira_service.rb new file mode 100644 index 00000000000..f83f01c55b4 --- /dev/null +++ b/app/models/project_services/jira_service.rb @@ -0,0 +1,59 @@ +class JiraService < IssueTrackerService + + prop_accessor :title, :description, :project_url, :issues_url, :new_issue_url + + def title + if self.properties && self.properties['title'].present? + self.properties['title'] + else + 'JIRA' + end + end + + def description + if self.properties && self.properties['description'].present? + self.properties['description'] + else + 'Jira issue tracker' + end + end + + def to_param + 'jira' + end + + def fields + [ + { type: 'text', name: 'title', placeholder: title }, + { type: 'text', name: 'description', placeholder: description }, + { type: 'text', name: 'project_url', placeholder: 'Project url' }, + { type: 'text', name: 'issues_url', placeholder: 'Issue url'}, + { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url'} + ] + end + + def initialize_properties + if properties.nil? + if enabled_in_gitlab_config + self.properties = { + title: issues_tracker['title'], + project_url: issues_tracker['project_url'], + issues_url: issues_tracker['issues_url'], + new_issue_url: issues_tracker['new_issue_url'] + } + end + end + end + + private + + def enabled_in_gitlab_config + Gitlab.config.issues_tracker && + Gitlab.config.issues_tracker.values.any? && + issues_tracker + end + + def issues_tracker + Gitlab.config.issues_tracker['jira'] + end +end diff --git a/app/models/project_services/redmine_service.rb b/app/models/project_services/redmine_service.rb new file mode 100644 index 00000000000..8052fb22461 --- /dev/null +++ b/app/models/project_services/redmine_service.rb @@ -0,0 +1,51 @@ +class RedmineService < IssueTrackerService + + prop_accessor :title, :description, :project_url, :issues_url, :new_issue_url + + def title + 'Redmine' + end + + def description + 'Redmine issue tracker' + end + + def to_param + 'redmine' + end + + def fields + [ + { type: 'text', name: 'title', placeholder: title }, + { type: 'text', name: 'description', placeholder: description }, + { type: 'text', name: 'project_url', placeholder: 'Project url' }, + { type: 'text', name: 'issues_url', placeholder: 'Issue url'}, + { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url'} + ] + end + + def initialize_properties + if properties.nil? + if enabled_in_gitlab_config + self.properties = { + title: issues_tracker['title'], + project_url: issues_tracker['project_url'], + issues_url: issues_tracker['issues_url'], + new_issue_url: issues_tracker['new_issue_url'] + } + end + end + end + + private + + def enabled_in_gitlab_config + Gitlab.config.issues_tracker && + Gitlab.config.issues_tracker.values.any? && + issues_tracker + end + + def issues_tracker + Gitlab.config.issues_tracker['redmine'] + end +end -- cgit v1.2.1 From 62c00661c43334f8e2bbed508d9517529dbee7e0 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Tue, 20 Jan 2015 16:47:29 -0800 Subject: Allow creation of the jira and redmine services. --- app/controllers/projects/services_controller.rb | 6 ++++-- app/models/project.rb | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/controllers/projects/services_controller.rb b/app/controllers/projects/services_controller.rb index b2ce99aeb45..15f47ed9c9f 100644 --- a/app/controllers/projects/services_controller.rb +++ b/app/controllers/projects/services_controller.rb @@ -17,7 +17,8 @@ class Projects::ServicesController < Projects::ApplicationController def update if @service.update_attributes(service_params) - redirect_to edit_project_service_path(@project, @service.to_param) + redirect_to edit_project_service_path(@project, @service.to_param), + notice: 'Successfully updated.' else render 'edit' end @@ -41,7 +42,8 @@ class Projects::ServicesController < Projects::ApplicationController :title, :token, :type, :active, :api_key, :subdomain, :room, :recipients, :project_url, :webhook, :user_key, :device, :priority, :sound, :bamboo_url, :username, :password, - :build_key, :server, :teamcity_url, :build_type + :build_key, :server, :teamcity_url, :build_type, + :description, :issues_url, :new_issue_url ) end end diff --git a/app/models/project.rb b/app/models/project.rb index a22f852de6b..a90081ce735 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -68,6 +68,9 @@ class Project < ActiveRecord::Base has_one :bamboo_service, dependent: :destroy has_one :teamcity_service, dependent: :destroy has_one :pushover_service, dependent: :destroy + has_one :jira_service, dependent: :destroy + has_one :redmine_service, dependent: :destroy + has_one :forked_project_link, dependent: :destroy, foreign_key: "forked_to_project_id" has_one :forked_from_project, through: :forked_project_link # Merge Requests for target project should be removed with it @@ -321,7 +324,7 @@ class Project < ActiveRecord::Base def available_services_names %w(gitlab_ci campfire hipchat pivotaltracker flowdock assembla - emails_on_push gemnasium slack pushover buildbox bamboo teamcity) + emails_on_push gemnasium slack pushover buildbox bamboo teamcity jira redmine) end def gitlab_ci? -- cgit v1.2.1 From 09de0bfc37c54b84d5a49dbce8c11cfd2f3cfb80 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Tue, 20 Jan 2015 16:55:12 -0800 Subject: Redmine doesn't require title and description change --- app/models/project_services/redmine_service.rb | 2 -- 1 file changed, 2 deletions(-) (limited to 'app') diff --git a/app/models/project_services/redmine_service.rb b/app/models/project_services/redmine_service.rb index 8052fb22461..55841b50055 100644 --- a/app/models/project_services/redmine_service.rb +++ b/app/models/project_services/redmine_service.rb @@ -16,8 +16,6 @@ class RedmineService < IssueTrackerService def fields [ - { type: 'text', name: 'title', placeholder: title }, - { type: 'text', name: 'description', placeholder: description }, { type: 'text', name: 'project_url', placeholder: 'Project url' }, { type: 'text', name: 'issues_url', placeholder: 'Issue url'}, { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url'} -- cgit v1.2.1 From e9d6d1e51afa9f46f19748977739f7d2c078b84f Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Tue, 20 Jan 2015 16:55:35 -0800 Subject: Custom issue tracker service. --- app/models/project.rb | 3 +- .../custom_issue_tracker_service.rb | 38 ++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 app/models/project_services/custom_issue_tracker_service.rb (limited to 'app') diff --git a/app/models/project.rb b/app/models/project.rb index a90081ce735..e501ccb59f7 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -70,6 +70,7 @@ class Project < ActiveRecord::Base has_one :pushover_service, dependent: :destroy has_one :jira_service, dependent: :destroy has_one :redmine_service, dependent: :destroy + has_one :custom_issue_tracker_service, dependent: :destroy has_one :forked_project_link, dependent: :destroy, foreign_key: "forked_to_project_id" has_one :forked_from_project, through: :forked_project_link @@ -324,7 +325,7 @@ class Project < ActiveRecord::Base def available_services_names %w(gitlab_ci campfire hipchat pivotaltracker flowdock assembla - emails_on_push gemnasium slack pushover buildbox bamboo teamcity jira redmine) + emails_on_push gemnasium slack pushover buildbox bamboo teamcity jira redmine custom_issue_tracker) end def gitlab_ci? diff --git a/app/models/project_services/custom_issue_tracker_service.rb b/app/models/project_services/custom_issue_tracker_service.rb new file mode 100644 index 00000000000..69e1b204bac --- /dev/null +++ b/app/models/project_services/custom_issue_tracker_service.rb @@ -0,0 +1,38 @@ +class CustomIssueTrackerService < IssueTrackerService + + prop_accessor :title, :description, :project_url, :issues_url, :new_issue_url + + def title + if self.properties && self.properties['title'].present? + self.properties['title'] + else + 'Custom Issue Tracker' + end + end + + def description + if self.properties && self.properties['description'].present? + self.properties['description'] + else + 'Custom issue tracker' + end + end + + def to_param + title.parameterize + end + + def fields + [ + { type: 'text', name: 'title', placeholder: title }, + { type: 'text', name: 'description', placeholder: description }, + { type: 'text', name: 'project_url', placeholder: 'Project url' }, + { type: 'text', name: 'issues_url', placeholder: 'Issue url'}, + { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url'} + ] + end + + def initialize_properties + self.properties = {} if properties.nil? + end +end -- cgit v1.2.1 From 737f6516e697ec5876fcdeb55acedfeefd24c9cc Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Fri, 23 Jan 2015 09:14:45 -0800 Subject: Update new services with initialization based on existing data. --- app/models/project_services/custom_issue_tracker_service.rb | 2 +- app/models/project_services/jira_service.rb | 12 +++++++++++- app/models/project_services/redmine_service.rb | 11 ++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/models/project_services/custom_issue_tracker_service.rb b/app/models/project_services/custom_issue_tracker_service.rb index 69e1b204bac..2476b62da89 100644 --- a/app/models/project_services/custom_issue_tracker_service.rb +++ b/app/models/project_services/custom_issue_tracker_service.rb @@ -19,7 +19,7 @@ class CustomIssueTrackerService < IssueTrackerService end def to_param - title.parameterize + 'custom_issue_tracker' end def fields diff --git a/app/models/project_services/jira_service.rb b/app/models/project_services/jira_service.rb index f83f01c55b4..f8b04ddeea7 100644 --- a/app/models/project_services/jira_service.rb +++ b/app/models/project_services/jira_service.rb @@ -37,7 +37,7 @@ class JiraService < IssueTrackerService if enabled_in_gitlab_config self.properties = { title: issues_tracker['title'], - project_url: issues_tracker['project_url'], + project_url: set_project_url, issues_url: issues_tracker['issues_url'], new_issue_url: issues_tracker['new_issue_url'] } @@ -56,4 +56,14 @@ class JiraService < IssueTrackerService def issues_tracker Gitlab.config.issues_tracker['jira'] end + + def set_project_url + id = self.project.issues_tracker_id + + if id + issues_tracker['project_url'].gsub(":issues_tracker_id", id) + else + issues_tracker['project_url'] + end + end end diff --git a/app/models/project_services/redmine_service.rb b/app/models/project_services/redmine_service.rb index 55841b50055..03f7115d84e 100644 --- a/app/models/project_services/redmine_service.rb +++ b/app/models/project_services/redmine_service.rb @@ -27,7 +27,7 @@ class RedmineService < IssueTrackerService if enabled_in_gitlab_config self.properties = { title: issues_tracker['title'], - project_url: issues_tracker['project_url'], + project_url: set_project_url, issues_url: issues_tracker['issues_url'], new_issue_url: issues_tracker['new_issue_url'] } @@ -46,4 +46,13 @@ class RedmineService < IssueTrackerService def issues_tracker Gitlab.config.issues_tracker['redmine'] end + + def set_project_url + id = self.project.issue_tracker_id + if id + issues_tracker['project_url'].gsub(":issue_tracker_id", id) + else + issues_tracker['project_url'] + end + end end -- cgit v1.2.1 From 103a1bb06d00c0b3ee1f0148ee8fc809f4f276f8 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Fri, 23 Jan 2015 10:28:38 -0800 Subject: Use service settings instead of config file settings to present issues. --- app/helpers/issues_helper.rb | 11 +++-------- app/models/project.rb | 12 ++++++++++++ app/models/project_services/issue_tracker_service.rb | 4 ++++ app/models/project_services/redmine_service.rb | 4 ++-- 4 files changed, 21 insertions(+), 10 deletions(-) (limited to 'app') diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index bcf108c5c48..b6ca2a057f7 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -16,7 +16,7 @@ module IssuesHelper def url_for_project_issues(project = @project) return '' if project.nil? - if project.used_default_issues_tracker? || !external_issues_tracker_enabled? + if project.used_default_issues_tracker? || !project.external_issues_tracker_enabled? project_issues_path(project) else url = Gitlab.config.issues_tracker[project.issues_tracker]['project_url'] @@ -28,7 +28,7 @@ module IssuesHelper def url_for_new_issue(project = @project) return '' if project.nil? - if project.used_default_issues_tracker? || !external_issues_tracker_enabled? + if project.used_default_issues_tracker? || !project.external_issues_tracker_enabled? url = new_project_issue_path project_id: project else issues_tracker = Gitlab.config.issues_tracker[project.issues_tracker] @@ -41,7 +41,7 @@ module IssuesHelper def url_for_issue(issue_iid, project = @project) return '' if project.nil? - if project.used_default_issues_tracker? || !external_issues_tracker_enabled? + if project.used_default_issues_tracker? || !project.external_issues_tracker_enabled? url = project_issue_url project_id: project, id: issue_iid else url = Gitlab.config.issues_tracker[project.issues_tracker]['issues_url'] @@ -77,11 +77,6 @@ module IssuesHelper ts.html_safe end - # Checks if issues_tracker setting exists in gitlab.yml - def external_issues_tracker_enabled? - Gitlab.config.issues_tracker && Gitlab.config.issues_tracker.values.any? - end - def bulk_update_milestone_options options_for_select(['None (backlog)']) + options_from_collection_for_select(project_active_milestones, 'id', diff --git a/app/models/project.rb b/app/models/project.rb index e501ccb59f7..0fff5149970 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -309,6 +309,18 @@ class Project < ActiveRecord::Base self.issues_tracker == Project.issues_tracker.default_value end + def external_issues_tracker_enabled? + external_issues_trackers.any? + end + + def external_issues_trackers + services.select { |service| service.category == :issue_tracker } + end + + def external_issue_tracker + @external_issues_tracker ||= external_issues_trackers.select(&:activated?).first + end + def can_have_issues_tracker_id? self.issues_enabled && !self.used_default_issues_tracker? end diff --git a/app/models/project_services/issue_tracker_service.rb b/app/models/project_services/issue_tracker_service.rb index 4ba2f5a9ca2..664b55a5951 100644 --- a/app/models/project_services/issue_tracker_service.rb +++ b/app/models/project_services/issue_tracker_service.rb @@ -1,5 +1,9 @@ class IssueTrackerService < Service + def category + :issue_tracker + end + def project_url # implement inside child end diff --git a/app/models/project_services/redmine_service.rb b/app/models/project_services/redmine_service.rb index 03f7115d84e..71286d74b58 100644 --- a/app/models/project_services/redmine_service.rb +++ b/app/models/project_services/redmine_service.rb @@ -48,9 +48,9 @@ class RedmineService < IssueTrackerService end def set_project_url - id = self.project.issue_tracker_id + id = self.project.issues_tracker_id if id - issues_tracker['project_url'].gsub(":issue_tracker_id", id) + issues_tracker['project_url'].gsub(":issues_tracker_id", id) else issues_tracker['project_url'] end -- cgit v1.2.1 From 7c701acf573f95cce7f8b1b7756de5d73404f09b Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Fri, 23 Jan 2015 11:01:09 -0800 Subject: Do a check which issue tracker is used inside the project. --- app/helpers/issues_helper.rb | 8 ++++---- app/models/project.rb | 10 +++++++--- app/views/layouts/nav/_project.html.haml | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) (limited to 'app') diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index b6ca2a057f7..d3bb1d39203 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -16,7 +16,7 @@ module IssuesHelper def url_for_project_issues(project = @project) return '' if project.nil? - if project.used_default_issues_tracker? || !project.external_issues_tracker_enabled? + if project.using_issue_tracker? project_issues_path(project) else url = Gitlab.config.issues_tracker[project.issues_tracker]['project_url'] @@ -28,7 +28,7 @@ module IssuesHelper def url_for_new_issue(project = @project) return '' if project.nil? - if project.used_default_issues_tracker? || !project.external_issues_tracker_enabled? + if project.using_issue_tracker? url = new_project_issue_path project_id: project else issues_tracker = Gitlab.config.issues_tracker[project.issues_tracker] @@ -41,7 +41,7 @@ module IssuesHelper def url_for_issue(issue_iid, project = @project) return '' if project.nil? - if project.used_default_issues_tracker? || !project.external_issues_tracker_enabled? + if project.using_issue_tracker? url = project_issue_url project_id: project, id: issue_iid else url = Gitlab.config.issues_tracker[project.issues_tracker]['issues_url'] @@ -54,7 +54,7 @@ module IssuesHelper def title_for_issue(issue_iid, project = @project) return '' if project.nil? - if project.used_default_issues_tracker? + if project.default_issues_tracker? issue = project.issues.where(iid: issue_iid).first return issue.title if issue end diff --git a/app/models/project.rb b/app/models/project.rb index 0fff5149970..a79e74105b2 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -298,14 +298,14 @@ class Project < ActiveRecord::Base end def issue_exists?(issue_id) - if used_default_issues_tracker? + if default_issues_tracker? self.issues.where(iid: issue_id).first.present? else true end end - def used_default_issues_tracker? + def default_issues_tracker? self.issues_tracker == Project.issues_tracker.default_value end @@ -321,8 +321,12 @@ class Project < ActiveRecord::Base @external_issues_tracker ||= external_issues_trackers.select(&:activated?).first end + def using_issue_tracker? + default_issues_tracker? || !external_issues_tracker_enabled? + end + def can_have_issues_tracker_id? - self.issues_enabled && !self.used_default_issues_tracker? + self.issues_enabled && !self.default_issues_tracker? end def build_missing_services diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml index 94cee0bd50f..07ac4be2046 100644 --- a/app/views/layouts/nav/_project.html.haml +++ b/app/views/layouts/nav/_project.html.haml @@ -39,7 +39,7 @@ %i.fa.fa-exclamation-circle %span Issues - - if @project.used_default_issues_tracker? + - if @project.default_issues_tracker? %span.count.issue_counter= @project.issues.opened.count - if project_nav_tab? :merge_requests -- cgit v1.2.1 From 041bad0fe17a31eb7becde3a656a1d0e50dc85bf Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Fri, 23 Jan 2015 11:10:06 -0800 Subject: Manipulate external tracker issues urls generated from services. --- app/helpers/issues_helper.rb | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'app') diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index d3bb1d39203..cfbbed842cd 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -19,9 +19,7 @@ module IssuesHelper if project.using_issue_tracker? project_issues_path(project) else - url = Gitlab.config.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) + project.external_issue_tracker.project_url end end @@ -31,10 +29,7 @@ module IssuesHelper if project.using_issue_tracker? url = new_project_issue_path project_id: project else - issues_tracker = Gitlab.config.issues_tracker[project.issues_tracker] - url = issues_tracker['new_issue_url'] - url.gsub(':project_id', project.id.to_s). - gsub(':issues_tracker_id', project.issues_tracker_id.to_s) + project.external_issue_tracker.new_issue_url end end @@ -44,10 +39,8 @@ module IssuesHelper if project.using_issue_tracker? url = project_issue_url project_id: project, id: issue_iid else - url = Gitlab.config.issues_tracker[project.issues_tracker]['issues_url'] - url.gsub(':id', issue_iid.to_s). - gsub(':project_id', project.id.to_s). - gsub(':issues_tracker_id', project.issues_tracker_id.to_s) + url = project.external_issue_tracker.issues_url + url.gsub(':id', issue_iid.to_s) end end -- cgit v1.2.1 From a720dde67c2b488117ed57f7f07ab55f8150c352 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Fri, 23 Jan 2015 11:55:41 -0800 Subject: Remove configuration option from project settings page for external issue trackers. --- app/helpers/projects_helper.rb | 12 ------------ app/models/project.rb | 2 +- app/models/service.rb | 8 ++++++++ app/views/projects/edit.html.haml | 9 --------- 4 files changed, 9 insertions(+), 22 deletions(-) (limited to 'app') diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 9a31d485188..fea78c6e387 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -72,18 +72,6 @@ module ProjectsHelper @project.milestones.active.order("due_date, title ASC") end - def project_issues_trackers(current_tracker = nil) - values = Project.issues_tracker.values.map do |tracker_key| - if tracker_key.to_sym == :gitlab - ['GitLab', tracker_key] - else - [Gitlab.config.issues_tracker[tracker_key]['title'] || tracker_key, tracker_key] - end - end - - options_for_select(values, current_tracker) - end - def link_to_toggle_star(title, starred, signed_in) cls = 'star-btn' cls += ' disabled' unless signed_in diff --git a/app/models/project.rb b/app/models/project.rb index a79e74105b2..4bf36255a56 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -137,7 +137,7 @@ class Project < ActiveRecord::Base scope :public_and_internal_only, -> { where(visibility_level: Project.public_and_internal_levels) } scope :non_archived, -> { where(archived: false) } - enumerize :issues_tracker, in: (Gitlab.config.issues_tracker.keys).append(:gitlab), default: :gitlab + enumerize :issues_tracker, in: (Service.issue_tracker_service_list).append(:gitlab), default: :gitlab state_machine :import_status, initial: :none do event :import_start do diff --git a/app/models/service.rb b/app/models/service.rb index 71c8aa39e45..42419475349 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -86,4 +86,12 @@ class Service < ActiveRecord::Base def async_execute(data) Sidekiq::Client.enqueue(ProjectServiceWorker, id, data) end + + def issue_tracker? + self.category == :issue_tracker + end + + def self.issue_tracker_service_list + Service.select(&:issue_tracker?).map{ |s| s.to_param } + end end diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index f2bb56b5664..fb4d8270731 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -50,15 +50,6 @@ = f.check_box :issues_enabled %span.descr Lightweight issue tracking system for this project - - if Project.issues_tracker.values.count > 1 - .form-group - = f.label :issues_tracker, "Issues tracker", class: 'control-label' - .col-sm-10= f.select(:issues_tracker, project_issues_trackers(@project.issues_tracker), {}, { disabled: !@project.issues_enabled }) - - .form-group - = f.label :issues_tracker_id, "Project name or id in issues tracker", class: 'control-label' - .col-sm-10= f.text_field :issues_tracker_id, disabled: !@project.can_have_issues_tracker_id?, class: 'form-control' - .form-group = f.label :merge_requests_enabled, "Merge Requests", class: 'control-label' .col-sm-10 -- cgit v1.2.1 From 65e700472b471242475eb9d9e3a340c6ce24615a Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 26 Jan 2015 11:39:32 -0800 Subject: Update the issue tracker attribute on issue tracker change. --- app/controllers/projects/services_controller.rb | 3 +++ app/helpers/issues_helper.rb | 6 +++--- app/models/project.rb | 17 ++++++++--------- 3 files changed, 14 insertions(+), 12 deletions(-) (limited to 'app') diff --git a/app/controllers/projects/services_controller.rb b/app/controllers/projects/services_controller.rb index 15f47ed9c9f..a2cb4ae1ae9 100644 --- a/app/controllers/projects/services_controller.rb +++ b/app/controllers/projects/services_controller.rb @@ -17,6 +17,9 @@ class Projects::ServicesController < Projects::ApplicationController def update if @service.update_attributes(service_params) + if @service.activated? && @service.category == :issue_tracker + @project.update_attributes(issues_tracker: @service.to_param) + end redirect_to edit_project_service_path(@project, @service.to_param), notice: 'Successfully updated.' else diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index cfbbed842cd..2bf430f9142 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -16,7 +16,7 @@ module IssuesHelper def url_for_project_issues(project = @project) return '' if project.nil? - if project.using_issue_tracker? + if project.default_issues_tracker? project_issues_path(project) else project.external_issue_tracker.project_url @@ -26,7 +26,7 @@ module IssuesHelper def url_for_new_issue(project = @project) return '' if project.nil? - if project.using_issue_tracker? + if project.default_issues_tracker? url = new_project_issue_path project_id: project else project.external_issue_tracker.new_issue_url @@ -36,7 +36,7 @@ module IssuesHelper def url_for_issue(issue_iid, project = @project) return '' if project.nil? - if project.using_issue_tracker? + if project.default_issues_tracker? url = project_issue_url project_id: project, id: issue_iid else url = project.external_issue_tracker.issues_url diff --git a/app/models/project.rb b/app/models/project.rb index 20b9a5a34dc..de31f14b98e 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -308,11 +308,14 @@ class Project < ActiveRecord::Base end def default_issues_tracker? - self.issues_tracker == Project.issues_tracker.default_value - end - - def external_issues_tracker_enabled? - external_issues_trackers.any? + if external_issue_tracker + false + else + unless self.issues_tracker == Project.issues_tracker.default_value + self.update_attributes(issues_tracker: Project.issues_tracker.default_value) + end + true + end end def external_issues_trackers @@ -323,10 +326,6 @@ class Project < ActiveRecord::Base @external_issues_tracker ||= external_issues_trackers.select(&:activated?).first end - def using_issue_tracker? - default_issues_tracker? || !external_issues_tracker_enabled? - end - def can_have_issues_tracker_id? self.issues_enabled && !self.default_issues_tracker? end -- cgit v1.2.1 From 4641514cbfdcc56a0cbc5ad3444a92284df9a665 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 26 Jan 2015 15:59:40 -0800 Subject: Update rspec tests to the new external issue logic. --- app/assets/javascripts/dispatcher.js.coffee | 1 - app/assets/javascripts/project_new.js.coffee | 14 -------------- 2 files changed, 15 deletions(-) (limited to 'app') diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee index ef86c2781c9..9457f88817f 100644 --- a/app/assets/javascripts/dispatcher.js.coffee +++ b/app/assets/javascripts/dispatcher.js.coffee @@ -99,7 +99,6 @@ class Dispatcher switch path[1] when 'edit' shortcut_handler = new ShortcutsNavigation() - new ProjectNew() when 'new' new ProjectNew() when 'show' diff --git a/app/assets/javascripts/project_new.js.coffee b/app/assets/javascripts/project_new.js.coffee index f4a2ca813d2..836269c44f9 100644 --- a/app/assets/javascripts/project_new.js.coffee +++ b/app/assets/javascripts/project_new.js.coffee @@ -9,17 +9,3 @@ class @ProjectNew initEvents: -> disableButtonIfEmptyField '#project_name', '.project-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') -- cgit v1.2.1 From 00a0d5aeeaf19ea4d72fd1890afac099026f1706 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 26 Jan 2015 16:24:11 -0800 Subject: Move repetition to the parent. --- .../project_services/issue_tracker_service.rb | 44 ++++++++++++++++++ app/models/project_services/jira_service.rb | 45 ------------------ app/models/project_services/redmine_service.rb | 54 ++++------------------ 3 files changed, 54 insertions(+), 89 deletions(-) (limited to 'app') diff --git a/app/models/project_services/issue_tracker_service.rb b/app/models/project_services/issue_tracker_service.rb index 664b55a5951..7ff6e0f284d 100644 --- a/app/models/project_services/issue_tracker_service.rb +++ b/app/models/project_services/issue_tracker_service.rb @@ -15,4 +15,48 @@ class IssueTrackerService < Service def new_issue_url # implement inside child end + + def fields + [ + { type: 'text', name: 'description', placeholder: description }, + { type: 'text', name: 'project_url', placeholder: 'Project url' }, + { type: 'text', name: 'issues_url', placeholder: 'Issue url'}, + { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url'} + ] + end + + def initialize_properties + if properties.nil? + if enabled_in_gitlab_config + self.properties = { + title: issues_tracker['title'], + project_url: set_project_url, + issues_url: issues_tracker['issues_url'], + new_issue_url: issues_tracker['new_issue_url'] + } + end + end + end + + private + + def enabled_in_gitlab_config + Gitlab.config.issues_tracker && + Gitlab.config.issues_tracker.values.any? && + issues_tracker + end + + def issues_tracker + Gitlab.config.issues_tracker[to_param] + end + + def set_project_url + id = self.project.issues_tracker_id + + if id + issues_tracker['project_url'].gsub(":issues_tracker_id", id) + else + issues_tracker['project_url'] + end + end end diff --git a/app/models/project_services/jira_service.rb b/app/models/project_services/jira_service.rb index f8b04ddeea7..b0d668948d0 100644 --- a/app/models/project_services/jira_service.rb +++ b/app/models/project_services/jira_service.rb @@ -21,49 +21,4 @@ class JiraService < IssueTrackerService def to_param 'jira' end - - def fields - [ - { type: 'text', name: 'title', placeholder: title }, - { type: 'text', name: 'description', placeholder: description }, - { type: 'text', name: 'project_url', placeholder: 'Project url' }, - { type: 'text', name: 'issues_url', placeholder: 'Issue url'}, - { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url'} - ] - end - - def initialize_properties - if properties.nil? - if enabled_in_gitlab_config - self.properties = { - title: issues_tracker['title'], - project_url: set_project_url, - issues_url: issues_tracker['issues_url'], - new_issue_url: issues_tracker['new_issue_url'] - } - end - end - end - - private - - def enabled_in_gitlab_config - Gitlab.config.issues_tracker && - Gitlab.config.issues_tracker.values.any? && - issues_tracker - end - - def issues_tracker - Gitlab.config.issues_tracker['jira'] - end - - def set_project_url - id = self.project.issues_tracker_id - - if id - issues_tracker['project_url'].gsub(":issues_tracker_id", id) - else - issues_tracker['project_url'] - end - end end diff --git a/app/models/project_services/redmine_service.rb b/app/models/project_services/redmine_service.rb index 71286d74b58..11cce3e0561 100644 --- a/app/models/project_services/redmine_service.rb +++ b/app/models/project_services/redmine_service.rb @@ -3,56 +3,22 @@ class RedmineService < IssueTrackerService prop_accessor :title, :description, :project_url, :issues_url, :new_issue_url def title - 'Redmine' + if self.properties && self.properties['title'].present? + self.properties['title'] + else + 'Redmine' + end end def description - 'Redmine issue tracker' + if self.properties && self.properties['description'].present? + self.properties['description'] + else + 'Redmine issue tracker' + end end def to_param 'redmine' end - - def fields - [ - { type: 'text', name: 'project_url', placeholder: 'Project url' }, - { type: 'text', name: 'issues_url', placeholder: 'Issue url'}, - { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url'} - ] - end - - def initialize_properties - if properties.nil? - if enabled_in_gitlab_config - self.properties = { - title: issues_tracker['title'], - project_url: set_project_url, - issues_url: issues_tracker['issues_url'], - new_issue_url: issues_tracker['new_issue_url'] - } - end - end - end - - private - - def enabled_in_gitlab_config - Gitlab.config.issues_tracker && - Gitlab.config.issues_tracker.values.any? && - issues_tracker - end - - def issues_tracker - Gitlab.config.issues_tracker['redmine'] - end - - def set_project_url - id = self.project.issues_tracker_id - if id - issues_tracker['project_url'].gsub(":issues_tracker_id", id) - else - issues_tracker['project_url'] - end - end end -- cgit v1.2.1 From 33913f9b8fef1f8df45dc26239faf8fa4cffc982 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 26 Jan 2015 22:08:27 -0800 Subject: Make issue tracker service fields required. --- app/models/project.rb | 2 +- app/models/project_services/issue_tracker_service.rb | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/models/project.rb b/app/models/project.rb index de31f14b98e..43b61897a3c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -319,7 +319,7 @@ class Project < ActiveRecord::Base end def external_issues_trackers - services.select { |service| service.category == :issue_tracker } + services.select { |service| service.issue_tracker? } end def external_issue_tracker diff --git a/app/models/project_services/issue_tracker_service.rb b/app/models/project_services/issue_tracker_service.rb index 7ff6e0f284d..fc7b2fe5acd 100644 --- a/app/models/project_services/issue_tracker_service.rb +++ b/app/models/project_services/issue_tracker_service.rb @@ -1,5 +1,7 @@ class IssueTrackerService < Service + validates :project_url, :issues_url, :new_issue_url, presence: true, if: :activated? + def category :issue_tracker end @@ -34,6 +36,8 @@ class IssueTrackerService < Service issues_url: issues_tracker['issues_url'], new_issue_url: issues_tracker['new_issue_url'] } + else + self.properties = {} end end end -- cgit v1.2.1 From ededa98995208591c5792c0ece1a5ec0ef302127 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 26 Jan 2015 22:46:54 -0800 Subject: Shorter check in services controller. --- app/controllers/projects/services_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/controllers/projects/services_controller.rb b/app/controllers/projects/services_controller.rb index c7cc38b9c67..09bccb4bf8f 100644 --- a/app/controllers/projects/services_controller.rb +++ b/app/controllers/projects/services_controller.rb @@ -17,7 +17,7 @@ class Projects::ServicesController < Projects::ApplicationController def update if @service.update_attributes(service_params) - if @service.activated? && @service.category == :issue_tracker + if @service.activated? && @service.issue_tracker? @project.update_attributes(issues_tracker: @service.to_param) end redirect_to edit_project_service_path(@project, @service.to_param), -- cgit v1.2.1 From 95db00c3e9b7658b1a2a38f62006371988eabe5c Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Tue, 27 Jan 2015 12:19:32 -0800 Subject: Still need the javascript on the project edit page. --- app/assets/javascripts/dispatcher.js.coffee | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee index acce4ad5096..1643ca941ff 100644 --- a/app/assets/javascripts/dispatcher.js.coffee +++ b/app/assets/javascripts/dispatcher.js.coffee @@ -100,6 +100,7 @@ class Dispatcher switch path[1] when 'edit' shortcut_handler = new ShortcutsNavigation() + new ProjectNew() when 'new' new ProjectNew() when 'show' -- cgit v1.2.1