mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-27 17:46:05 -05:00
FIX: newly created categories were not showing up
This commit is contained in:
parent
7e97724341
commit
ff12b5bf57
6 changed files with 50 additions and 3 deletions
|
@ -286,6 +286,10 @@ Category.reopenClass({
|
||||||
return Discourse.ajax(`/c/${id}/show.json`);
|
return Discourse.ajax(`/c/${id}/show.json`);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
reloadBySlug(slug, parentSlug) {
|
||||||
|
return parentSlug ? Discourse.ajax(`/c/${parentSlug}/${slug}/find_by_slug.json`) : Discourse.ajax(`/c/${slug}/find_by_slug.json`);
|
||||||
|
},
|
||||||
|
|
||||||
search(term, opts) {
|
search(term, opts) {
|
||||||
var limit = 5;
|
var limit = 5;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@ import { filterQueryParams, findTopicList } from 'discourse/routes/build-topic-r
|
||||||
import { queryParams } from 'discourse/controllers/discovery-sortable';
|
import { queryParams } from 'discourse/controllers/discovery-sortable';
|
||||||
import TopicList from 'discourse/models/topic-list';
|
import TopicList from 'discourse/models/topic-list';
|
||||||
import PermissionType from 'discourse/models/permission-type';
|
import PermissionType from 'discourse/models/permission-type';
|
||||||
|
import CategoryList from 'discourse/models/category-list';
|
||||||
|
import Category from 'discourse/models/category';
|
||||||
|
|
||||||
// A helper function to create a category route with parameters
|
// A helper function to create a category route with parameters
|
||||||
export default (filter, params) => {
|
export default (filter, params) => {
|
||||||
|
@ -9,7 +11,19 @@ export default (filter, params) => {
|
||||||
queryParams,
|
queryParams,
|
||||||
|
|
||||||
model(modelParams) {
|
model(modelParams) {
|
||||||
return { category: Discourse.Category.findBySlug(modelParams.slug, modelParams.parentSlug) };
|
const category = Category.findBySlug(modelParams.slug, modelParams.parentSlug);
|
||||||
|
if (!category) {
|
||||||
|
return Category.reloadBySlug(modelParams.slug, modelParams.parentSlug).then((atts) => {
|
||||||
|
if (modelParams.parentSlug) {
|
||||||
|
atts.category.parentCategory = Category.findBySlug(modelParams.parentSlug);
|
||||||
|
}
|
||||||
|
const record = this.store.createRecord('category', atts.category);
|
||||||
|
record.setupGroupsAndPermissions();
|
||||||
|
this.site.updateCategory(record);
|
||||||
|
return { category: Category.findBySlug(modelParams.slug, modelParams.parentSlug) };
|
||||||
|
})
|
||||||
|
};
|
||||||
|
return { category };
|
||||||
},
|
},
|
||||||
|
|
||||||
afterModel(model, transition) {
|
afterModel(model, transition) {
|
||||||
|
@ -38,7 +52,6 @@ export default (filter, params) => {
|
||||||
_createSubcategoryList(category) {
|
_createSubcategoryList(category) {
|
||||||
this._categoryList = null;
|
this._categoryList = null;
|
||||||
if (Em.isNone(category.get('parentCategory')) && Discourse.SiteSettings.show_subcategory_list) {
|
if (Em.isNone(category.get('parentCategory')) && Discourse.SiteSettings.show_subcategory_list) {
|
||||||
const CategoryList = require('discourse/models/category-list').default;
|
|
||||||
return CategoryList.listForParent(this.store, category).then(list => this._categoryList = list);
|
return CategoryList.listForParent(this.store, category).then(list => this._categoryList = list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ require_dependency 'category_serializer'
|
||||||
|
|
||||||
class CategoriesController < ApplicationController
|
class CategoriesController < ApplicationController
|
||||||
|
|
||||||
before_filter :ensure_logged_in, except: [:index, :show, :redirect]
|
before_filter :ensure_logged_in, except: [:index, :show, :redirect, :find_by_slug]
|
||||||
before_filter :fetch_category, only: [:show, :update, :destroy]
|
before_filter :fetch_category, only: [:show, :update, :destroy]
|
||||||
before_filter :initialize_staff_action_logger, only: [:create, :update, :destroy]
|
before_filter :initialize_staff_action_logger, only: [:create, :update, :destroy]
|
||||||
skip_before_filter :check_xhr, only: [:index, :redirect]
|
skip_before_filter :check_xhr, only: [:index, :redirect]
|
||||||
|
@ -153,6 +153,15 @@ class CategoriesController < ApplicationController
|
||||||
render json: success_json
|
render json: success_json
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def find_by_slug
|
||||||
|
params.require(:category_slug)
|
||||||
|
@category = Category.find_by_slug(params[:category_slug], params[:parent_category_slug])
|
||||||
|
guardian.ensure_can_see!(@category)
|
||||||
|
|
||||||
|
@category.permission = CategoryGroup.permission_types[:full] if Category.topic_create_allowed(guardian).where(id: @category.id).exists?
|
||||||
|
render_serialized(@category, CategorySerializer)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def required_param_keys
|
def required_param_keys
|
||||||
|
|
|
@ -450,6 +450,15 @@ SQL
|
||||||
def publish_discourse_stylesheet
|
def publish_discourse_stylesheet
|
||||||
DiscourseStylesheets.cache.clear
|
DiscourseStylesheets.cache.clear
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.find_by_slug(category_slug, parent_category_slug=nil)
|
||||||
|
if parent_category_slug
|
||||||
|
parent_category_id = self.where(slug: parent_category_slug, parent_category_id: nil).pluck(:id).first
|
||||||
|
self.where(slug: category_slug, parent_category_id: parent_category_id).first
|
||||||
|
else
|
||||||
|
self.where(slug: category_slug, parent_category_id: nil).first
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# == Schema Information
|
# == Schema Information
|
||||||
|
|
|
@ -430,6 +430,8 @@ Discourse::Application.routes.draw do
|
||||||
put "category/:category_id/slug" => "categories#update_slug"
|
put "category/:category_id/slug" => "categories#update_slug"
|
||||||
|
|
||||||
get "c/:id/show" => "categories#show"
|
get "c/:id/show" => "categories#show"
|
||||||
|
get "c/:category_slug/find_by_slug" => "categories#find_by_slug"
|
||||||
|
get "c/:parent_category_slug/:category_slug/find_by_slug" => "categories#find_by_slug"
|
||||||
get "c/:category.rss" => "list#category_feed", format: :rss
|
get "c/:category.rss" => "list#category_feed", format: :rss
|
||||||
get "c/:parent_category/:category.rss" => "list#category_feed", format: :rss
|
get "c/:parent_category/:category.rss" => "list#category_feed", format: :rss
|
||||||
get "c/:category" => "list#category_latest"
|
get "c/:category" => "list#category_latest"
|
||||||
|
|
|
@ -583,4 +583,14 @@ describe Category do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "find_by_slug" do
|
||||||
|
it "finds with category and sub category" do
|
||||||
|
category = Fabricate(:category, slug: 'awesome-category')
|
||||||
|
sub_category = Fabricate(:category, parent_category_id: category.id, slug: 'awesome-sub-category')
|
||||||
|
|
||||||
|
expect(Category.find_by_slug('awesome-category')).to eq(category)
|
||||||
|
expect(Category.find_by_slug('awesome-sub-category', 'awesome-category')).to eq(sub_category)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue