Skip to content
Snippets Groups Projects
Commit 6b4ddf2c authored by Marin Jankovski's avatar Marin Jankovski
Browse files

Add admin services templates.

parent 09d3d351
No related branches found
No related tags found
No related merge requests found
class Admin::ServicesController < Admin::ApplicationController
before_filter :service, only: [:edit, :update]
def index
@services = services_templates
end
def edit
unless service.present?
redirect_to admin_application_settings_services_path,
alert: "Service is unknown or it doesn't exist"
end
end
def update
if service.update_attributes(application_services_params[:service])
redirect_to admin_application_settings_services_path,
notice: 'Application settings saved successfully'
else
render :edit
end
end
private
def services_templates
templates = []
allowed_templates.each do |service|
service_template = service.constantize
templates << service_template.where(template: true).first_or_create
end
templates
end
def allowed_templates
%w( JiraService RedmineService CustomIssueTrackerService )
end
def service
@service ||= Service.where(id: params[:id], template: true).first
end
def application_services_params
params.permit(:id,
service: [
:title, :project_url, :description, :issues_url, :new_issue_url
])
end
end
Loading
@@ -353,15 +353,30 @@ class Project < ActiveRecord::Base
Loading
@@ -353,15 +353,30 @@ class Project < ActiveRecord::Base
end end
   
def build_missing_services def build_missing_services
services_templates = Service.where(template: true)
available_services_names.each do |service_name| available_services_names.each do |service_name|
service = services.find { |service| service.to_param == service_name } service = find_service(services, service_name)
   
# If service is available but missing in db # If service is available but missing in db
# we should create an instance. Ex `create_gitlab_ci_service` if service.nil?
service = self.send :"create_#{service_name}_service" if service.nil? # We should check if template for the service exists
template = find_service(services_templates, service_name)
if template.nil?
# If no template, we should create an instance. Ex `create_gitlab_ci_service`
service = self.send :"create_#{service_name}_service"
else
Service.create_from_template(self.id, template)
end
end
end end
end end
   
def find_service(list, name)
list.find { |service| service.to_param == name }
end
def available_services_names def available_services_names
%w(gitlab_ci campfire hipchat pivotaltracker flowdock assembla asana %w(gitlab_ci campfire hipchat pivotaltracker flowdock assembla asana
emails_on_push gemnasium slack pushover buildbox bamboo teamcity jira redmine custom_issue_tracker) emails_on_push gemnasium slack pushover buildbox bamboo teamcity jira redmine custom_issue_tracker)
Loading
Loading
Loading
@@ -77,12 +77,14 @@ class IssueTrackerService < Service
Loading
@@ -77,12 +77,14 @@ class IssueTrackerService < Service
end end
   
def set_project_url def set_project_url
id = self.project.issues_tracker_id if self.project
id = self.project.issues_tracker_id
   
if id if id
issues_tracker['project_url'].gsub(":issues_tracker_id", id) issues_tracker['project_url'].gsub(":issues_tracker_id", id)
else end
issues_tracker['project_url']
end end
issues_tracker['project_url']
end end
end end
Loading
@@ -25,7 +25,7 @@ class Service < ActiveRecord::Base
Loading
@@ -25,7 +25,7 @@ class Service < ActiveRecord::Base
belongs_to :project belongs_to :project
has_one :service_hook has_one :service_hook
   
validates :project_id, presence: true validates :project_id, presence: true, unless: Proc.new { |service| service.template? }
   
scope :visible, -> { where.not(type: 'GitlabIssueTrackerService') } scope :visible, -> { where.not(type: 'GitlabIssueTrackerService') }
   
Loading
@@ -33,6 +33,10 @@ class Service < ActiveRecord::Base
Loading
@@ -33,6 +33,10 @@ class Service < ActiveRecord::Base
active active
end end
   
def template?
template
end
def category def category
:common :common
end end
Loading
@@ -94,7 +98,10 @@ class Service < ActiveRecord::Base
Loading
@@ -94,7 +98,10 @@ class Service < ActiveRecord::Base
self.category == :issue_tracker self.category == :issue_tracker
end end
   
def self.issue_tracker_service_list def self.create_from_template(project_id, template)
Service.select(&:issue_tracker?).map{ |s| s.to_param } service = template.dup
service.template = false
service.project_id = project_id
service if service.save
end end
end end
- service.fields.each do |field|
TOPD
/ - name = field[:name]
/ - value = "V"#@service.send(name) unless field[:type] == 'password'
/ - type = field[:type]
/ - placeholder = field[:placeholder]
/ - choices = field[:choices]
/ - default_choice = field[:default_choice]
/ .form-group
/ = f.label name, class: "control-label"
/ .col-sm-10
/ - if type == 'text'
/ = f.text_field name, class: "form-control", placeholder: placeholder
/ - elsif type == 'textarea'
/ = f.text_area name, rows: 5, class: "form-control", placeholder: placeholder
/ - elsif type == 'checkbox'
/ = f.check_box name
/ - elsif type == 'select'
/ = f.select name, options_for_select(choices, value ? value : default_choice), {}, { class: "form-control" }
/ - elsif type == 'password'
/ = f.password_field name, class: 'form-control'
%h3.page-title
= @service.title
= boolean_to_icon @service.activated?
%p #{@service.description} template
= form_for :service, url: admin_application_settings_service_path, method: :put, html: { class: 'form-horizontal fieldset-form' } do |f|
- if @service.errors.any?
#error_explanation
.alert.alert-danger
- @service.errors.full_messages.each do |msg|
%p= msg
- @service.fields.each do |field|
- name = field[:name]
- type = field[:type]
- placeholder = field[:placeholder]
.form-group
= f.label name, class: "control-label"
.col-sm-10
= f.text_field name, class: "form-control", placeholder: placeholder
.form-actions
= f.submit 'Save', class: 'btn btn-save'
= render 'form'
%h3.page-title Service templates
%p.light Service template allows you to set default values for project services
%table.table
%thead
%tr
%th
%th Service
%th Desription
%th Last edit
- @services.sort_by(&:title).each do |service|
%tr
%td
= icon("copy", class: 'clgray')
%td
= link_to edit_admin_application_settings_service_path(service.id) do
%strong= service.title
%td
= service.description
%td.light
= time_ago_in_words service.updated_at
ago
Loading
@@ -51,7 +51,7 @@ Gitlab::Application.routes.draw do
Loading
@@ -51,7 +51,7 @@ Gitlab::Application.routes.draw do
end end
get '/s/:username' => 'snippets#user_index', as: :user_snippets, constraints: { username: /.*/ } get '/s/:username' => 'snippets#user_index', as: :user_snippets, constraints: { username: /.*/ }
   
# #
# Import # Import
# #
Loading
@@ -68,8 +68,8 @@ Gitlab::Application.routes.draw do
Loading
@@ -68,8 +68,8 @@ Gitlab::Application.routes.draw do
get :jobs get :jobs
end end
end end
   
# #
# Explore area # Explore area
Loading
@@ -131,7 +131,9 @@ Gitlab::Application.routes.draw do
Loading
@@ -131,7 +131,9 @@ Gitlab::Application.routes.draw do
end end
end end
   
resource :application_settings, only: [:show, :update] resource :application_settings, only: [:show, :update] do
resources :services
end
   
root to: 'dashboard#index' root to: 'dashboard#index'
end end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment