diff --git a/app/assets/javascripts/discourse/components/category-logo-link.js.es6 b/app/assets/javascripts/discourse/components/category-logo-link.js.es6 deleted file mode 100644 index d9f9ca235ae..00000000000 --- a/app/assets/javascripts/discourse/components/category-logo-link.js.es6 +++ /dev/null @@ -1,12 +0,0 @@ -export default Em.Component.extend({ - tagName: 'a', - attributeBindings: ['href'], - href: function() { - return Discourse.getURL('/c/') + Discourse.Category.slugFor(this.get('category')); - }.property(), - - render(buffer) { - const categoryLogo = this.get('category.logo_url'); - buffer.push(``); - } -}); \ No newline at end of file diff --git a/app/assets/javascripts/discourse/components/category-title-link.js.es6 b/app/assets/javascripts/discourse/components/category-title-link.js.es6 index bc30157ca6e..5339579de9b 100644 --- a/app/assets/javascripts/discourse/components/category-title-link.js.es6 +++ b/app/assets/javascripts/discourse/components/category-title-link.js.es6 @@ -1,17 +1,10 @@ -import { iconHTML } from 'discourse/helpers/fa-icon'; +import computed from 'ember-addons/ember-computed-decorators'; export default Em.Component.extend({ tagName: 'h3', - render(buffer) { - const category = this.get('category'); - const categoryUrl = Discourse.getURL('/c/') + Discourse.Category.slugFor(category); - const categoryName = Handlebars.Utils.escapeExpression(category.get('name')); - - if (category.get('read_restricted')) { buffer.push(iconHTML('lock')); } - - buffer.push(``); - buffer.push(`${categoryName}`); - buffer.push(``); + @computed("category.name") + categoryName(name) { + return Handlebars.Utils.escapeExpression(name); } }); diff --git a/app/assets/javascripts/discourse/templates/components/categories_only.hbs b/app/assets/javascripts/discourse/templates/components/categories_only.hbs index cc3f7db4ca4..f8fafb5d154 100644 --- a/app/assets/javascripts/discourse/templates/components/categories_only.hbs +++ b/app/assets/javascripts/discourse/templates/components/categories_only.hbs @@ -15,9 +15,6 @@
{{category-title-link category=c}} - {{#if c.logo_url}} - {{category-logo-link category=c}} - {{/if}}
{{{c.description_excerpt}}}
diff --git a/app/assets/javascripts/discourse/templates/components/category-title-link.hbs b/app/assets/javascripts/discourse/templates/components/category-title-link.hbs new file mode 100644 index 00000000000..3034bdd9d5f --- /dev/null +++ b/app/assets/javascripts/discourse/templates/components/category-title-link.hbs @@ -0,0 +1,11 @@ + + {{#if category.read_restricted}} + {{fa-icon 'lock'}} + {{/if}} + + {{categoryName}} + + {{#if category.logo_url}} +
{{cdn-img src=category.logo_url class="category-logo"}}
+ {{/if}} +
diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index dc5945f3686..8b59196ef0b 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -132,7 +132,7 @@ class CategoriesController < ApplicationController render_serialized(@category, CategorySerializer) else - render_json_error(@category) unless @category.save + return render_json_error(@category) unless @category.save end end @@ -151,10 +151,6 @@ class CategoriesController < ApplicationController old_permissions = cat.permissions_params - # remove asset host & cdn from both logo_url and background_url (never trust the client) - category_params[:logo_url] = fix_upload_url(category_params[:logo_url]) - category_params[:background_url] = fix_upload_url(category_params[:background_url]) - if result = cat.update_attributes(category_params) Scheduler::Defer.later "Log staff action change category settings" do @staff_action_logger.log_category_settings_change(@category, category_params, old_permissions) @@ -262,24 +258,4 @@ class CategoriesController < ApplicationController params[:include_topics] || SiteSetting.desktop_category_page_style == "categories_with_featured_topics".freeze end - - def fix_upload_url(url) - return if url.blank? - - if Discourse.asset_host.present? - asset_host = UrlHelper.schemaless(Discourse.asset_host) - url.sub!(/^(https?:)?#{Regexp.escape(asset_host)}/, "") - end - - if SiteSetting.enable_s3_uploads? && SiteSetting.s3_cdn_url.present? - s3_cdn_url = UrlHelper.schemaless(SiteSetting.s3_cdn_url) - url.sub!(/^(https?:)?#{Regexp.escape(s3_cdn_url)}/, Discourse.store.absolute_base_url) - end - - base_url = UrlHelper.schemaless(Discourse.base_url_no_prefix) - url.sub!(/^(https?:)?#{Regexp.escape(base_url)}/, "") - - url - end - end diff --git a/app/serializers/basic_category_serializer.rb b/app/serializers/basic_category_serializer.rb index 51fcf7fe4bd..cd5c6c71699 100644 --- a/app/serializers/basic_category_serializer.rb +++ b/app/serializers/basic_category_serializer.rb @@ -40,14 +40,4 @@ class BasicCategorySerializer < ApplicationSerializer def notification_level object.notification_level end - - def logo_url - url = object.logo_url - url.present? && UrlHelper.is_local(url) ? UrlHelper.schemaless(UrlHelper.absolute(url)) : url - end - - def background_url - url = object.background_url - url.present? && UrlHelper.is_local(url) ? UrlHelper.schemaless(UrlHelper.absolute(url)) : url - end end diff --git a/lib/validators/upload_url_validator.rb b/lib/validators/upload_url_validator.rb index da9c27d1fd9..527ad2d4e97 100644 --- a/lib/validators/upload_url_validator.rb +++ b/lib/validators/upload_url_validator.rb @@ -3,7 +3,7 @@ class UploadUrlValidator < ActiveModel::EachValidator if value.present? uri = URI.parse(value) rescue nil - unless uri && Discourse.store.has_been_uploaded?(value) + unless uri && Upload.exists?(url: value) record.errors[attribute] << (options[:message] || I18n.t('errors.messages.invalid')) end end diff --git a/spec/controllers/categories_controller_spec.rb b/spec/controllers/categories_controller_spec.rb index 2f2e6f7f782..4850d5f36ac 100644 --- a/spec/controllers/categories_controller_spec.rb +++ b/spec/controllers/categories_controller_spec.rb @@ -230,26 +230,6 @@ describe CategoriesController do expect(UserHistory.count).to eq(5) # 2 + 3 (bootstrap mode) end - - it "fix both logo and background urls" do - Discourse.stubs(:asset_host).returns("http://foo.bar") - Discourse.stubs(:base_url_no_prefix).returns("http://bar.foo") - - upload = build(:upload) - - xhr :put, :update, id: @category.id, - name: @category.name, - color: @category.color, - text_color: @category.text_color, - slug: @category.slug, - logo_url: UrlHelper.schemaless(UrlHelper.absolute(upload.url)), - background_url: UrlHelper.absolute_without_cdn(upload.url) - - @category.reload - expect(@category.logo_url).to eq(upload.url) - expect(@category.background_url).to eq(upload.url) - end - end end diff --git a/spec/models/category_spec.rb b/spec/models/category_spec.rb index ac5689578a7..d603077ebf9 100644 --- a/spec/models/category_spec.rb +++ b/spec/models/category_spec.rb @@ -14,20 +14,19 @@ describe Category do context "url validation" do let(:user) { Fabricate(:user) } + let(:upload) { Fabricate(:upload) } it "ensures logo_url is valid" do expect(Fabricate.build(:category, user: user, logo_url: "---%")).not_to be_valid expect(Fabricate.build(:category, user: user, logo_url: "http://example.com/made-up.jpg")).not_to be_valid expect(Fabricate.build(:category, user: user, logo_url: upload.url)).to be_valid - expect(Fabricate.build(:category, user: user, logo_url: UrlHelper.schemaless(UrlHelper.absolute(upload.url)))).to be_valid end it "ensures background_url is valid" do expect(Fabricate.build(:category, user: user, background_url: ";test")).not_to be_valid expect(Fabricate.build(:category, user: user, background_url: "http://example.com/no.jpg")).not_to be_valid expect(Fabricate.build(:category, user: user, background_url: upload.url)).to be_valid - expect(Fabricate.build(:category, user: user, background_url: UrlHelper.schemaless(UrlHelper.absolute(upload.url)))).to be_valid end end