diff --git a/CHANGELOG b/CHANGELOG index aef536b2a8ef286f656528f500614186b8a4ff60..3fd908d30d68b658b76e58c21a8717675f19f961 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,5 @@ Please view this file on the master branch, on stable branches it's out of date. -v 8.10(unreleased) +v 8.10.0(unreleased) - Add notifications dropdown for groups v 8.9.0 (unreleased) diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee index 5bb9647f6c2b20b8674d5c018b92c97775c1109a..9493a57580183434dde2d1e017668c88383d78ca 100644 --- a/app/assets/javascripts/dispatcher.js.coffee +++ b/app/assets/javascripts/dispatcher.js.coffee @@ -85,6 +85,7 @@ class Dispatcher when 'groups:show' shortcut_handler = new ShortcutsNavigation() new NotificationsForm() + new NotificationsDropdown() when 'groups:group_members:index' new GroupMembers() new UsersSelect() diff --git a/app/assets/stylesheets/framework/blocks.scss b/app/assets/stylesheets/framework/blocks.scss index 38023818709d0847059797b44c68dc338cd5fe32..41e77a4ac682f5994f1daa118892c2274c4ca0bf 100644 --- a/app/assets/stylesheets/framework/blocks.scss +++ b/app/assets/stylesheets/framework/blocks.scss @@ -137,7 +137,7 @@ margin: 0; font-size: 24px; font-weight: normal; - margin-bottom: 5px; + margin-bottom: 10px; color: #4c4e54; font-size: 23px; line-height: 1.1; diff --git a/app/assets/stylesheets/pages/groups.scss b/app/assets/stylesheets/pages/groups.scss index ac7721cbe1512ad19cfc6d2178794fefe36c2835..101faf5917430cead44c9c2b3f7c76d1652fd440 100644 --- a/app/assets/stylesheets/pages/groups.scss +++ b/app/assets/stylesheets/pages/groups.scss @@ -48,11 +48,7 @@ .access-request-button { @include btn-gray; - position: absolute; - right: 16px; - bottom: 32px; - padding: 3px 10px; + margin-right: 10px; text-transform: none; - background-color: $background-color; } } diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index f65f9da3f9e66b46a6f416c56ab6c85a5c661437..a04bf7df722ae30525f7f34505fadd94674b8555 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -74,6 +74,10 @@ class GroupsController < Groups::ApplicationController def edit end + def projects + @projects = @group.projects.page(params[:page]) + end + def update if Groups::UpdateService.new(@group, current_user, group_params).execute redirect_to edit_group_path(@group), notice: "Group '#{@group.name}' was successfully updated." @@ -100,10 +104,6 @@ class GroupsController < Groups::ApplicationController @shared_projects = GroupProjectsFinder.new(group, only_shared: true).execute(current_user) end - def projects - @projects = @group.projects.page(params[:page]) - end - def authorize_create_group! unless can?(current_user, :create_group, nil) return render_404 diff --git a/app/controllers/notification_settings_controller.rb b/app/controllers/notification_settings_controller.rb index aacbefd4ab89e876898562ca2c63de10f8651b2f..8ec4bb1233f52d44befe8d620b73736be39ce013 100644 --- a/app/controllers/notification_settings_controller.rb +++ b/app/controllers/notification_settings_controller.rb @@ -2,8 +2,6 @@ class NotificationSettingsController < ApplicationController before_action :authenticate_user! def create - resource = find_resource - return render_404 unless can_read?(resource) @notification_setting = current_user.notification_settings_for(resource) @@ -21,12 +19,12 @@ class NotificationSettingsController < ApplicationController private - def find_resource - resource = - if params[:project].present? - Project.find(params[:project][:id]) - elsif params[:namespace].present? - Group.find(params[:namespace][:id]) + def resource + @resource ||= + if params[:project_id].present? + Project.find(params[:project_id]) + elsif params[:namespace_id].present? + Group.find(params[:namespace_id]) end end diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb index 77783cd764060c392a1d922a75e564274ea46c82..7e8369d0a051b2d272981f597215981f69eceedb 100644 --- a/app/helpers/notifications_helper.rb +++ b/app/helpers/notifications_helper.rb @@ -72,6 +72,6 @@ module NotificationsHelper # Create hidden field to send notification setting source to controller def hidden_setting_source_input(notification_setting) return unless notification_setting.source_type - hidden_field_tag "#{notification_setting.source_type.downcase}[id]", notification_setting.source_id + hidden_field_tag "#{notification_setting.source_type.downcase}_id", notification_setting.source_id end end diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml index 5792c5dbac556614bdb9b52640351be2de20b7bc..a0a6762edcf4a9ed150f9171949ccb8887d781dc 100644 --- a/app/views/groups/show.html.haml +++ b/app/views/groups/show.html.haml @@ -15,14 +15,17 @@ %span.visibility-icon.has-tooltip{ data: { container: 'body' }, title: visibility_icon_description(@group) } = visibility_level_icon(@group.visibility_level, fw: false) - = render 'notifications/buttons/notifications', notification_setting: @notification_setting + %span.hidden-xs + = render 'shared/notifications/button', notification_setting: @notification_setting + + - if current_user + .pull-right + = render 'shared/members/access_request_buttons', source: @group - if @group.description.present? .cover-desc.description = markdown(@group.description, pipeline: :description) - - if current_user - = render 'shared/members/access_request_buttons', source: @group %div{ class: container_class } .top-area diff --git a/doc/workflow/notifications.md b/doc/workflow/notifications.md index fe4485e148a629423eb1939c11b9f618a8036a77..b4a9c2f3d3e622a837cdc943607261656efecd64 100644 --- a/doc/workflow/notifications.md +++ b/doc/workflow/notifications.md @@ -37,12 +37,14 @@ This means that you can set a different level of notifications per group while s to have a finer level setting per project. Organization like this is suitable for users that belong to different groups but don't have the same need for being notified for every group they are member of. +These settings can be configured on group page or user profile notifications dropdown. #### Project Settings Project Settings are at the top level and any setting placed at this level will take precedence of any other setting. This is suitable for users that have different needs for notifications per project basis. +These settings can be configured on project page or user profile notifications dropdown. ## Notification events diff --git a/spec/controllers/notification_settings_controller_spec.rb b/spec/controllers/notification_settings_controller_spec.rb index ad48b9e90876af129653a67d816d22375e778783..07734a2dc192b404a1daef41fd7d109d7200ea06 100644 --- a/spec/controllers/notification_settings_controller_spec.rb +++ b/spec/controllers/notification_settings_controller_spec.rb @@ -13,7 +13,7 @@ describe NotificationSettingsController do context 'when not authorized' do it 'redirects to sign in page' do post :create, - project: { id: project.id }, + project_id: project.id, notification_setting: { level: :participating } expect(response).to redirect_to(new_user_session_path) @@ -40,7 +40,7 @@ describe NotificationSettingsController do it 'creates notification setting' do post :create, - project: { id: project.id }, + project_id: project.id, notification_setting: { level: :participating } expect(response.status).to eq 200 @@ -53,7 +53,7 @@ describe NotificationSettingsController do context 'with custom settings' do it 'creates notification setting' do post :create, - project: { id: project.id }, + project_id: project.id, notification_setting: { level: :custom }.merge(custom_events) expect(response.status).to eq 200 @@ -68,7 +68,7 @@ describe NotificationSettingsController do it 'creates notification setting' do post :create, - namespace: { id: group.id }, + namespace_id: group.id, notification_setting: { level: :watch } expect(response.status).to eq 200 @@ -81,7 +81,7 @@ describe NotificationSettingsController do context 'with custom settings' do it 'creates notification setting' do post :create, - namespace: { id: group.id }, + namespace_id: group.id, notification_setting: { level: :custom }.merge(custom_events) expect(response.status).to eq 200 @@ -98,7 +98,7 @@ describe NotificationSettingsController do it 'returns 404' do post :create, - project: { id: private_project.id }, + project_id: private_project.id, notification_setting: { level: :participating } expect(response.status).to eq(404)