Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/issue.js4
-rw-r--r--app/controllers/projects/issues_controller.rb1
-rw-r--r--app/controllers/projects_controller.rb13
-rw-r--r--app/models/label.rb4
-rw-r--r--app/policies/project_policy.rb2
-rw-r--r--app/services/issuable_base_service.rb20
-rw-r--r--app/services/labels/available_labels_service.rb60
-rw-r--r--app/views/projects/issues/show.html.haml5
-rw-r--r--app/views/projects/merge_requests/conflicts/_submit_form.html.haml2
9 files changed, 93 insertions, 18 deletions
diff --git a/app/assets/javascripts/issue.js b/app/assets/javascripts/issue.js
index 94b78907d9a..b3508f36cf9 100644
--- a/app/assets/javascripts/issue.js
+++ b/app/assets/javascripts/issue.js
@@ -16,7 +16,9 @@ export default class Issue {
Issue.createMrDropdownWrap = document.querySelector('.create-mr-dropdown-wrap');
Issue.initMergeRequests();
- Issue.initRelatedBranches();
+ if (document.querySelector('#related-branches')) {
+ Issue.initRelatedBranches();
+ }
this.closeButtons = $('a.btn-close');
this.reopenButtons = $('a.btn-reopen');
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index f45cac86f5a..80ba613054c 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -38,6 +38,7 @@ class Projects::IssuesController < Projects::ApplicationController
before_action :authorize_create_merge_request_from!, only: [:create_merge_request]
before_action :authorize_import_issues!, only: [:import_csv]
+ before_action :authorize_download_code!, only: [:related_branches]
before_action :set_suggested_issues_feature_flags, only: [:new]
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 878816475b2..1183dd136d0 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -46,7 +46,7 @@ class ProjectsController < Projects::ApplicationController
end
def create
- @project = ::Projects::CreateService.new(current_user, project_params).execute
+ @project = ::Projects::CreateService.new(current_user, project_params(attributes: project_params_create_attributes)).execute
if @project.saved?
cookies[:issue_board_welcome_hidden] = { path: project_path(@project), value: nil, expires: Time.at(0) }
@@ -327,9 +327,9 @@ class ProjectsController < Projects::ApplicationController
end
# rubocop: enable CodeReuse/ActiveRecord
- def project_params
+ def project_params(attributes: [])
params.require(:project)
- .permit(project_params_attributes)
+ .permit(project_params_attributes + attributes)
end
def project_params_attributes
@@ -348,11 +348,10 @@ class ProjectsController < Projects::ApplicationController
:last_activity_at,
:lfs_enabled,
:name,
- :namespace_id,
:only_allow_merge_if_all_discussions_are_resolved,
:only_allow_merge_if_pipeline_succeeds,
- :printing_merge_request_link_enabled,
:path,
+ :printing_merge_request_link_enabled,
:public_builds,
:request_access_enabled,
:runners_token,
@@ -374,6 +373,10 @@ class ProjectsController < Projects::ApplicationController
]
end
+ def project_params_create_attributes
+ [:namespace_id]
+ end
+
def custom_import_params
{}
end
diff --git a/app/models/label.rb b/app/models/label.rb
index 5d2d1afd1d9..7176acd661b 100644
--- a/app/models/label.rb
+++ b/app/models/label.rb
@@ -126,6 +126,10 @@ class Label < ActiveRecord::Base
fuzzy_search(query, [:title, :description])
end
+ def self.by_ids(ids)
+ where(id: ids)
+ end
+
def open_issues_count(user = nil)
issues_count(user, state: 'opened')
end
diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb
index 85143c5d339..504c1ec5c3a 100644
--- a/app/policies/project_policy.rb
+++ b/app/policies/project_policy.rb
@@ -178,7 +178,6 @@ class ProjectPolicy < BasePolicy
enable :read_cycle_analytics
enable :award_emoji
enable :read_pages_content
- enable :read_release
end
# These abilities are not allowed to admins that are not members of the project,
@@ -204,6 +203,7 @@ class ProjectPolicy < BasePolicy
enable :read_deployment
enable :read_merge_request
enable :read_sentry_issue
+ enable :read_release
end
# We define `:public_user_access` separately because there are cases in gitlab-ee
diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb
index 9fae5790edb..cdcde88e70c 100644
--- a/app/services/issuable_base_service.rb
+++ b/app/services/issuable_base_service.rb
@@ -70,10 +70,14 @@ class IssuableBaseService < BaseService
end
def filter_labels
- filter_labels_in_param(:add_label_ids)
- filter_labels_in_param(:remove_label_ids)
- filter_labels_in_param(:label_ids)
- find_or_create_label_ids
+ params[:add_label_ids] = labels_service.filter_labels_ids_in_param(:add_label_ids) if params[:add_label_ids]
+ params[:remove_label_ids] = labels_service.filter_labels_ids_in_param(:remove_label_ids) if params[:remove_label_ids]
+
+ if params[:label_ids]
+ params[:label_ids] = labels_service.filter_labels_ids_in_param(:label_ids)
+ elsif params[:labels]
+ params[:label_ids] = labels_service.find_or_create_by_titles.map(&:id)
+ end
end
# rubocop: disable CodeReuse/ActiveRecord
@@ -101,6 +105,10 @@ class IssuableBaseService < BaseService
end.compact
end
+ def labels_service
+ @labels_service ||= ::Labels::AvailableLabelsService.new(current_user, parent, params)
+ end
+
def process_label_ids(attributes, existing_label_ids: nil)
label_ids = attributes.delete(:label_ids)
add_label_ids = attributes.delete(:add_label_ids)
@@ -118,10 +126,6 @@ class IssuableBaseService < BaseService
new_label_ids
end
- def available_labels
- @available_labels ||= LabelsFinder.new(current_user, project_id: @project.id, include_ancestor_groups: true).execute
- end
-
def handle_quick_actions_on_create(issuable)
merge_quick_actions_into_params!(issuable)
end
diff --git a/app/services/labels/available_labels_service.rb b/app/services/labels/available_labels_service.rb
new file mode 100644
index 00000000000..fe477d96970
--- /dev/null
+++ b/app/services/labels/available_labels_service.rb
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+module Labels
+ class AvailableLabelsService
+ attr_reader :current_user, :parent, :params
+
+ def initialize(current_user, parent, params)
+ @current_user = current_user
+ @parent = parent
+ @params = params
+ end
+
+ def find_or_create_by_titles
+ labels = params.delete(:labels)
+
+ return [] unless labels
+
+ labels = labels.split(',') if labels.is_a?(String)
+
+ labels.map do |label_name|
+ label = Labels::FindOrCreateService.new(
+ current_user,
+ parent,
+ include_ancestor_groups: true,
+ title: label_name.strip,
+ available_labels: available_labels
+ ).execute
+
+ label
+ end.compact
+ end
+
+ def filter_labels_ids_in_param(key)
+ return [] if params[key].to_a.empty?
+
+ # rubocop:disable CodeReuse/ActiveRecord
+ available_labels.by_ids(params[key]).pluck(:id)
+ # rubocop:enable CodeReuse/ActiveRecord
+ end
+
+ private
+
+ def available_labels
+ @available_labels ||= LabelsFinder.new(current_user, finder_params).execute
+ end
+
+ def finder_params
+ params = { include_ancestor_groups: true }
+
+ case parent
+ when Group
+ params[:group_id] = parent.id
+ params[:only_group_labels] = true
+ when Project
+ params[:project_id] = parent.id
+ end
+
+ params
+ end
+ end
+end
diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml
index f048fb91304..277a28c8fe5 100644
--- a/app/views/projects/issues/show.html.haml
+++ b/app/views/projects/issues/show.html.haml
@@ -74,8 +74,9 @@
#merge-requests{ data: { url: referenced_merge_requests_project_issue_path(@project, @issue) } }
// This element is filled in using JavaScript.
- #related-branches{ data: { url: related_branches_project_issue_path(@project, @issue) } }
- // This element is filled in using JavaScript.
+ - if can?(current_user, :download_code, @project)
+ #related-branches{ data: { url: related_branches_project_issue_path(@project, @issue) } }
+ // This element is filled in using JavaScript.
.content-block.emoji-block.emoji-block-sticky
.row
diff --git a/app/views/projects/merge_requests/conflicts/_submit_form.html.haml b/app/views/projects/merge_requests/conflicts/_submit_form.html.haml
index 8181267184a..55c89f137c5 100644
--- a/app/views/projects/merge_requests/conflicts/_submit_form.html.haml
+++ b/app/views/projects/merge_requests/conflicts/_submit_form.html.haml
@@ -6,7 +6,7 @@
.form-group.row
.col-md-4
%h4= _('Resolve conflicts on source branch')
- .resolve-info
+ .resolve-info{ "v-pre": true }
= translation.html_safe
.col-md-8
%label.label-bold{ "for" => "commit-message" }