diff --git a/app/assets/javascripts/discourse/components/image-uploader.js.es6 b/app/assets/javascripts/discourse/components/image-uploader.js.es6
index 095bf6cabe8..52b1112ee42 100644
--- a/app/assets/javascripts/discourse/components/image-uploader.js.es6
+++ b/app/assets/javascripts/discourse/components/image-uploader.js.es6
@@ -13,10 +13,7 @@ export default Em.Component.extend(UploadMixin, {
this.set('imageUrl', data.result.url);
},
- actions: {
- trash: function() {
- this.set('imageUrl', null);
- this.sendAction('clear');
- }
+ deleteDone: function() {
+ this.set('imageUrl', null);
}
});
diff --git a/app/assets/javascripts/discourse/controllers/preferences.js.es6 b/app/assets/javascripts/discourse/controllers/preferences.js.es6
index cde0cadc501..680f4cf4394 100644
--- a/app/assets/javascripts/discourse/controllers/preferences.js.es6
+++ b/app/assets/javascripts/discourse/controllers/preferences.js.es6
@@ -70,10 +70,6 @@ export default Discourse.ObjectController.extend({
actions: {
- clearProfileBackground: function() {
- this.get('model').clearProfileBackground();
- },
-
save: function() {
var self = this;
this.setProperties({ saving: true, saved: false });
diff --git a/app/assets/javascripts/discourse/controllers/upload-selector.js.es6 b/app/assets/javascripts/discourse/controllers/upload-selector.js.es6
index 232e5531378..e9ab1d32ee4 100644
--- a/app/assets/javascripts/discourse/controllers/upload-selector.js.es6
+++ b/app/assets/javascripts/discourse/controllers/upload-selector.js.es6
@@ -12,17 +12,15 @@ export default Discourse.Controller.extend(Discourse.ModalFunctionality, {
local: false,
showMore: false,
- init: function() {
- this._super();
+ _initialize: function() {
this.setProperties({
local: this.get("allowLocal"),
showMore: false
});
- },
+ }.on('init'),
- allowLocal: function() {
- return Discourse.SiteSettings.max_attachment_size_kb > 0;
- }.property(),
+ maxSize: Discourse.computed.setting('max_attachment_size_kb'),
+ allowLocal: Em.computed.gt('maxSize', 0),
actions: {
useLocal: function() { this.setProperties({ local: true, showMore: false}); },
diff --git a/app/assets/javascripts/discourse/mixins/upload.js.es6 b/app/assets/javascripts/discourse/mixins/upload.js.es6
index 58b864801b8..9560c4ff757 100644
--- a/app/assets/javascripts/discourse/mixins/upload.js.es6
+++ b/app/assets/javascripts/discourse/mixins/upload.js.es6
@@ -6,6 +6,10 @@ export default Em.Mixin.create({
Em.warn("You should implement `uploadDone`");
},
+ deleteDone: function() {
+ Em.warn("You should implement `deleteDone`");
+ },
+
_initializeUploader: function() {
var $upload = this.$('input[type=file]'), // note: we can't cache this as fileupload replaces the input after upload
self = this;
@@ -49,6 +53,18 @@ export default Em.Mixin.create({
actions: {
selectFile: function() {
this.$('input[type=file]').click();
+ },
+
+ trash: function() {
+ var self = this;
+ Discourse.ajax(this.get('uploadUrl'), {
+ type: 'DELETE',
+ data: { image_type: this.get('type') }
+ }).then(function() {
+ self.deleteDone();
+ }).catch(function() {
+ bootbox.alert(I18n.t('generic_error'));
+ });
}
}
});
diff --git a/app/assets/javascripts/discourse/models/user.js b/app/assets/javascripts/discourse/models/user.js
index 23c19acdb16..1e99660aa1a 100644
--- a/app/assets/javascripts/discourse/models/user.js
+++ b/app/assets/javascripts/discourse/models/user.js
@@ -343,19 +343,6 @@ Discourse.User = Discourse.Model.extend({
});
},
- /*
- Clear profile background
-
- @method clearProfileBackground
- @returns {Promise} the result of the clear profile background request
- */
- clearProfileBackground: function() {
- return Discourse.ajax("/users/" + this.get("username_lower") + "/preferences/profile_background/clear", {
- type: 'PUT',
- data: { }
- });
- },
-
/**
Determines whether the current user is allowed to upload a file.
diff --git a/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars b/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars
index 87122f1ff94..ff2d172c4dc 100644
--- a/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars
@@ -94,8 +94,7 @@
{{image-uploader uploadUrl=imageUploadUrl
imageUrl=profile_background
- type="profile_background"
- clear="clearProfileBackground"}}
+ type="profile_background"}}
{{/if}}
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 42030745434..d1faece9b03 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -7,7 +7,7 @@ class UsersController < ApplicationController
skip_before_filter :authorize_mini_profiler, only: [:avatar]
skip_before_filter :check_xhr, only: [:show, :password_reset, :update, :activate_account, :authorize_email, :user_preferences_redirect, :avatar, :my_redirect]
- before_filter :ensure_logged_in, only: [:username, :update, :change_email, :user_preferences_redirect, :upload_user_image, :pick_avatar, :clear_profile_background, :destroy]
+ before_filter :ensure_logged_in, only: [:username, :update, :change_email, :user_preferences_redirect, :upload_user_image, :pick_avatar, :destroy_user_image, :destroy]
before_filter :respond_to_suspicious_request, only: [:create]
# we need to allow account creation with bad CSRF tokens, if people are caching, the CSRF token on the
@@ -380,11 +380,16 @@ class UsersController < ApplicationController
render nothing: true
end
- def clear_profile_background
+ def destroy_user_image
user = fetch_user_from_params
guardian.ensure_can_edit!(user)
- user.user_profile.clear_profile_background
+ image_type = params.require(:image_type)
+ if image_type == 'profile_background'
+ user.user_profile.clear_profile_background
+ else
+ raise Discourse::InvalidParameters.new(:image_type)
+ end
render nothing: true
end
diff --git a/config/routes.rb b/config/routes.rb
index e3278f4e4d7..333cfb922b1 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -203,8 +203,8 @@ Discourse::Application.routes.draw do
get "users/:username/avatar(/:size)" => "users#avatar", constraints: {username: USERNAME_ROUTE_FORMAT} # LEGACY ROUTE
post "users/:username/preferences/avatar" => "users#upload_avatar", constraints: {username: USERNAME_ROUTE_FORMAT} # LEGACY ROUTE
post "users/:username/preferences/user_image" => "users#upload_user_image", constraints: {username: USERNAME_ROUTE_FORMAT}
+ delete "users/:username/preferences/user_image" => "users#destroy_user_image", constraints: {username: USERNAME_ROUTE_FORMAT}
put "users/:username/preferences/avatar/pick" => "users#pick_avatar", constraints: {username: USERNAME_ROUTE_FORMAT}
- put "users/:username/preferences/profile_background/clear" => "users#clear_profile_background", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/invited" => "users#invited", constraints: {username: USERNAME_ROUTE_FORMAT}
post "users/:username/send_activation_email" => "users#send_activation_email", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/activity" => "users#show", constraints: {username: USERNAME_ROUTE_FORMAT}
diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb
index 9018b8148bc..3e73192c10f 100644
--- a/spec/controllers/users_controller_spec.rb
+++ b/spec/controllers/users_controller_spec.rb
@@ -1269,10 +1269,10 @@ describe UsersController do
end
- describe '.clear_profile_background' do
+ describe '.destroy_user_image' do
it 'raises an error when not logged in' do
- lambda { xhr :put, :clear_profile_background, username: 'asdf' }.should raise_error(Discourse::NotLoggedIn)
+ lambda { xhr :put, :destroy_user_image, type: 'profile_background', username: 'asdf' }.should raise_error(Discourse::NotLoggedIn)
end
context 'while logged in' do
@@ -1281,12 +1281,20 @@ describe UsersController do
it 'raises an error when you don\'t have permission to clear the profile background' do
Guardian.any_instance.expects(:can_edit?).with(user).returns(false)
- xhr :put, :clear_profile_background, username: user.username
+ xhr :put, :destroy_user_image, username: user.username, image_type: 'profile_background'
response.should be_forbidden
end
- it 'it successful' do
- xhr :put, :clear_profile_background, username: user.username
+ it "requires the `image_type` param" do
+ -> { xhr :put, :destroy_user_image, username: user.username }.should raise_error(ActionController::ParameterMissing)
+ end
+
+ it "only allows certain `image_types`" do
+ -> { xhr :put, :destroy_user_image, username: user.username, image_type: 'wat' }.should raise_error(Discourse::InvalidParameters)
+ end
+
+ it 'can clear the profile background' do
+ xhr :put, :destroy_user_image, image_type: 'profile_background', username: user.username
user.reload.user_profile.profile_background.should == ""
response.should be_success
end