Merge branch 'dz-profile-organization' into 'master'
Add organization field to the user profile ## What does this MR do? Add organization field to the user profile ## Are there points in the code the reviewer needs to double check? no ## Why was this MR needed? So we can let users fill organization information separately ## Screenshots (if relevant) ![Screen_Shot_2016-09-26_at_7.32.27_PM](/uploads/d11a9a86aa22227f9c9915d195106c5f/Screen_Shot_2016-09-26_at_7.32.27_PM.png) ## Does this MR meet the acceptance criteria? - [x] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added - [x] ~~[Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md)~~ - [x] API support added - Tests - [x] Added for this feature/bug - [x] All builds are passing - [x] Conform by the [merge request performance guides](http://docs.gitlab.com/ce/development/merge_request_performance_guidelines.html) - [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides) - [x] Branch has no merge conflicts with `master` (if you do - rebase it please) - [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) ## What are the relevant issue numbers? https://gitlab.com/gitlab-org/gitlab-ce/issues/21903 See merge request !6526
This commit is contained in:
commit
b0af83f9ff
11 changed files with 49 additions and 7 deletions
|
@ -4,6 +4,7 @@ v 8.13.0 (unreleased)
|
|||
- Speed-up group milestones show page
|
||||
- Fix robots.txt disallowing access to groups starting with "s" (Matt Harrison)
|
||||
- Revoke button in Applications Settings underlines on hover.
|
||||
- Add organization field to user profile
|
||||
|
||||
v 8.12.2 (unreleased)
|
||||
- Fix Import/Export not recognising correctly the imported services.
|
||||
|
|
|
@ -73,7 +73,8 @@ class ProfilesController < Profiles::ApplicationController
|
|||
:skype,
|
||||
:twitter,
|
||||
:username,
|
||||
:website_url
|
||||
:website_url,
|
||||
:organization
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -86,6 +86,9 @@
|
|||
.form-group
|
||||
= f.label :location, 'Location', class: "label-light"
|
||||
= f.text_field :location, class: "form-control"
|
||||
.form-group
|
||||
= f.label :organization, 'Organization', class: "label-light"
|
||||
= f.text_field :organization, class: "form-control"
|
||||
.form-group
|
||||
= f.label :bio, class: "label-light"
|
||||
= f.text_area :bio, rows: 4, class: "form-control", maxlength: 250
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
.avatar-holder
|
||||
= link_to avatar_icon(@user, 400), target: '_blank' do
|
||||
= image_tag avatar_icon(@user, 90), class: "avatar s90", alt: ''
|
||||
|
||||
|
||||
.user-info
|
||||
.cover-title
|
||||
= @user.name
|
||||
|
@ -70,6 +70,10 @@
|
|||
.profile-link-holder.middle-dot-divider
|
||||
= icon('map-marker')
|
||||
= @user.location
|
||||
- unless @user.organization.blank?
|
||||
.profile-link-holder.middle-dot-divider
|
||||
= icon('building')
|
||||
= @user.organization
|
||||
|
||||
- if @user.bio.present?
|
||||
.cover-desc
|
||||
|
|
12
db/migrate/20160926145521_add_organization_to_user.rb
Normal file
12
db/migrate/20160926145521_add_organization_to_user.rb
Normal file
|
@ -0,0 +1,12 @@
|
|||
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
|
||||
# for more information on how to write migrations for GitLab.
|
||||
|
||||
class AddOrganizationToUser < ActiveRecord::Migration
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
|
||||
def change
|
||||
add_column :users, :organization, :string
|
||||
end
|
||||
end
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20160920160832) do
|
||||
ActiveRecord::Schema.define(version: 20160926145521) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -1132,6 +1132,7 @@ ActiveRecord::Schema.define(version: 20160920160832) do
|
|||
t.datetime "otp_grace_period_started_at"
|
||||
t.boolean "ldap_email", default: false, null: false
|
||||
t.boolean "external", default: false
|
||||
t.string "organization"
|
||||
end
|
||||
|
||||
add_index "users", ["admin"], name: "index_users_on_admin", using: :btree
|
||||
|
|
|
@ -57,6 +57,7 @@ GET /users
|
|||
"linkedin": "",
|
||||
"twitter": "",
|
||||
"website_url": "",
|
||||
"organization": "",
|
||||
"last_sign_in_at": "2012-06-01T11:41:01Z",
|
||||
"confirmed_at": "2012-05-23T09:05:22Z",
|
||||
"theme_id": 1,
|
||||
|
@ -89,6 +90,7 @@ GET /users
|
|||
"linkedin": "",
|
||||
"twitter": "",
|
||||
"website_url": "",
|
||||
"organization": "",
|
||||
"last_sign_in_at": null,
|
||||
"confirmed_at": "2012-05-30T16:53:06.148Z",
|
||||
"theme_id": 1,
|
||||
|
@ -147,7 +149,8 @@ Parameters:
|
|||
"skype": "",
|
||||
"linkedin": "",
|
||||
"twitter": "",
|
||||
"website_url": ""
|
||||
"website_url": "",
|
||||
"organization": ""
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -178,6 +181,7 @@ Parameters:
|
|||
"linkedin": "",
|
||||
"twitter": "",
|
||||
"website_url": "",
|
||||
"organization": "",
|
||||
"last_sign_in_at": "2012-06-01T11:41:01Z",
|
||||
"confirmed_at": "2012-05-23T09:05:22Z",
|
||||
"theme_id": 1,
|
||||
|
@ -214,6 +218,7 @@ Parameters:
|
|||
- `linkedin` (optional) - LinkedIn
|
||||
- `twitter` (optional) - Twitter account
|
||||
- `website_url` (optional) - Website URL
|
||||
- `organization` (optional) - Organization name
|
||||
- `projects_limit` (optional) - Number of projects user can create
|
||||
- `extern_uid` (optional) - External UID
|
||||
- `provider` (optional) - External provider name
|
||||
|
@ -242,6 +247,7 @@ Parameters:
|
|||
- `linkedin` - LinkedIn
|
||||
- `twitter` - Twitter account
|
||||
- `website_url` - Website URL
|
||||
- `organization` - Organization name
|
||||
- `projects_limit` - Limit projects each user can create
|
||||
- `extern_uid` - External UID
|
||||
- `provider` - External provider name
|
||||
|
@ -296,6 +302,7 @@ GET /user
|
|||
"linkedin": "",
|
||||
"twitter": "",
|
||||
"website_url": "",
|
||||
"organization": "",
|
||||
"last_sign_in_at": "2012-06-01T11:41:01Z",
|
||||
"confirmed_at": "2012-05-23T09:05:22Z",
|
||||
"theme_id": 1,
|
||||
|
|
|
@ -13,6 +13,7 @@ class Spinach::Features::Profile < Spinach::FeatureSteps
|
|||
fill_in 'user_website_url', with: 'testurl'
|
||||
fill_in 'user_location', with: 'Ukraine'
|
||||
fill_in 'user_bio', with: 'I <3 GitLab'
|
||||
fill_in 'user_organization', with: 'GitLab'
|
||||
click_button 'Update profile settings'
|
||||
@user.reload
|
||||
end
|
||||
|
@ -23,6 +24,7 @@ class Spinach::Features::Profile < Spinach::FeatureSteps
|
|||
expect(@user.twitter).to eq 'testtwitter'
|
||||
expect(@user.website_url).to eq 'testurl'
|
||||
expect(@user.bio).to eq 'I <3 GitLab'
|
||||
expect(@user.organization).to eq 'GitLab'
|
||||
expect(find('#user_location').value).to eq 'Ukraine'
|
||||
end
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ module API
|
|||
class User < UserBasic
|
||||
expose :created_at
|
||||
expose :is_admin?, as: :is_admin
|
||||
expose :bio, :location, :skype, :linkedin, :twitter, :website_url
|
||||
expose :bio, :location, :skype, :linkedin, :twitter, :website_url, :organization
|
||||
end
|
||||
|
||||
class Identity < Grape::Entity
|
||||
|
|
|
@ -60,6 +60,7 @@ module API
|
|||
# linkedin - Linkedin
|
||||
# twitter - Twitter account
|
||||
# website_url - Website url
|
||||
# organization - Organization
|
||||
# projects_limit - Number of projects user can create
|
||||
# extern_uid - External authentication provider UID
|
||||
# provider - External provider
|
||||
|
@ -74,7 +75,7 @@ module API
|
|||
post do
|
||||
authenticated_as_admin!
|
||||
required_attributes! [:email, :password, :name, :username]
|
||||
attrs = attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :projects_limit, :username, :bio, :location, :can_create_group, :admin, :confirm, :external]
|
||||
attrs = attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :projects_limit, :username, :bio, :location, :can_create_group, :admin, :confirm, :external, :organization]
|
||||
admin = attrs.delete(:admin)
|
||||
confirm = !(attrs.delete(:confirm) =~ /(false|f|no|0)$/i)
|
||||
user = User.build_user(attrs)
|
||||
|
@ -111,6 +112,7 @@ module API
|
|||
# linkedin - Linkedin
|
||||
# twitter - Twitter account
|
||||
# website_url - Website url
|
||||
# organization - Organization
|
||||
# projects_limit - Limit projects each user can create
|
||||
# bio - Bio
|
||||
# location - Location of the user
|
||||
|
@ -122,7 +124,7 @@ module API
|
|||
put ":id" do
|
||||
authenticated_as_admin!
|
||||
|
||||
attrs = attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :website_url, :projects_limit, :username, :bio, :location, :can_create_group, :admin, :external]
|
||||
attrs = attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :website_url, :projects_limit, :username, :bio, :location, :can_create_group, :admin, :external, :organization]
|
||||
user = User.find(params[:id])
|
||||
not_found!('User') unless user
|
||||
|
||||
|
|
|
@ -62,6 +62,7 @@ describe API::API, api: true do
|
|||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.first.keys).to include 'email'
|
||||
expect(json_response.first.keys).to include 'organization'
|
||||
expect(json_response.first.keys).to include 'identities'
|
||||
expect(json_response.first.keys).to include 'can_create_project'
|
||||
expect(json_response.first.keys).to include 'two_factor_enabled'
|
||||
|
@ -265,6 +266,14 @@ describe API::API, api: true do
|
|||
expect(user.reload.bio).to eq('new test bio')
|
||||
end
|
||||
|
||||
it "updates user with organization" do
|
||||
put api("/users/#{user.id}", admin), { organization: 'GitLab' }
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response['organization']).to eq('GitLab')
|
||||
expect(user.reload.organization).to eq('GitLab')
|
||||
end
|
||||
|
||||
it 'updates user with his own email' do
|
||||
put api("/users/#{user.id}", admin), email: user.email
|
||||
expect(response).to have_http_status(200)
|
||||
|
|
Loading…
Reference in a new issue