mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-15 03:12:54 +03:00
af6137248d
fixes #1765 fixes #1811 issue #1833 New UrlFor functions - moved body of url helper to config.path.urlFor, which can generate a URL for various scenarios - urlFor can take a string (name) or object (relativeUrl: '/') as the first argument - this is the first step towards issue #1833 - also added config.path.urlForPost which is async and handles getting permalink setting - frontend controller, ghost_head helper, cache invalidation all now use urlFor or urlForPost all urls should be correct and consistent URL Consistency Improvements - refactored invalidateCache into cacheInvalidationHeader which returns a promise so that url can be generated properly by urlForPost - moved isPost from models to schema, and refactored schema to have a tables object - deleted posts now return the whole object, not just id and slug, ensuring cache invalidation header can be set on delete - frontend controller rss and archive page redirects work properly with subdirectory - removes {{url}} helper from admin and client, and replaced with adminUrl helper which also uses urlFor - in res.locals ghostRoot becomes relativeUrl, and path is removed
129 lines
7.0 KiB
JavaScript
129 lines
7.0 KiB
JavaScript
var db = {
|
|
posts: {
|
|
id: {type: 'increments', nullable: false, primary: true},
|
|
uuid: {type: 'string', maxlength: 36, nullable: false},
|
|
title: {type: 'string', maxlength: 150, nullable: false},
|
|
slug: {type: 'string', maxlength: 150, nullable: false, unique: true},
|
|
markdown: {type: 'text', maxlength: 16777215, nullable: true},
|
|
html: {type: 'text', maxlength: 16777215, nullable: true},
|
|
image: {type: 'text', maxlength: 2000, nullable: true},
|
|
featured: {type: 'bool', nullable: false, defaultTo: false},
|
|
page: {type: 'bool', nullable: false, defaultTo: false},
|
|
status: {type: 'string', maxlength: 150, nullable: false, defaultTo: 'draft'},
|
|
language: {type: 'string', maxlength: 6, nullable: false, defaultTo: 'en_US'},
|
|
meta_title: {type: 'string', maxlength: 150, nullable: true},
|
|
meta_description: {type: 'string', maxlength: 200, nullable: true},
|
|
author_id: {type: 'integer', nullable: false},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'integer', nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'integer', nullable: true},
|
|
published_at: {type: 'dateTime', nullable: true},
|
|
published_by: {type: 'integer', nullable: true}
|
|
},
|
|
users: {
|
|
id: {type: 'increments', nullable: false, primary: true},
|
|
uuid: {type: 'string', maxlength: 36, nullable: false},
|
|
name: {type: 'string', maxlength: 150, nullable: false, unique: true},
|
|
slug: {type: 'string', maxlength: 150, nullable: false},
|
|
password: {type: 'string', maxlength: 60, nullable: false},
|
|
email: {type: 'string', maxlength: 254, nullable: false, unique: true},
|
|
image: {type: 'text', maxlength: 2000, nullable: true},
|
|
cover: {type: 'text', maxlength: 2000, nullable: true},
|
|
bio: {type: 'string', maxlength: 200, nullable: true},
|
|
website: {type: 'text', maxlength: 2000, nullable: true},
|
|
location: {type: 'text', maxlength: 65535, nullable: true},
|
|
accessibility: {type: 'text', maxlength: 65535, nullable: true},
|
|
status: {type: 'string', maxlength: 150, nullable: false, defaultTo: 'active'},
|
|
language: {type: 'string', maxlength: 6, nullable: false, defaultTo: 'en_US'},
|
|
meta_title: {type: 'string', maxlength: 150, nullable: true},
|
|
meta_description: {type: 'string', maxlength: 200, nullable: true},
|
|
last_login: {type: 'dateTime', nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'integer', nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'integer', nullable: true}
|
|
},
|
|
roles: {
|
|
id: {type: 'increments', nullable: false, primary: true},
|
|
uuid: {type: 'string', maxlength: 36, nullable: false},
|
|
name: {type: 'string', maxlength: 150, nullable: false},
|
|
description: {type: 'string', maxlength: 200, nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'integer', nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'integer', nullable: true}
|
|
},
|
|
roles_users: {
|
|
id: {type: 'increments', nullable: false, primary: true},
|
|
role_id: {type: 'integer', nullable: false},
|
|
user_id: {type: 'integer', nullable: false}
|
|
},
|
|
permissions: {
|
|
id: {type: 'increments', nullable: false, primary: true},
|
|
uuid: {type: 'string', maxlength: 36, nullable: false},
|
|
name: {type: 'string', maxlength: 150, nullable: false},
|
|
object_type: {type: 'string', maxlength: 150, nullable: false},
|
|
action_type: {type: 'string', maxlength: 150, nullable: false},
|
|
object_id: {type: 'integer', nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'integer', nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'integer', nullable: true}
|
|
},
|
|
permissions_users: {
|
|
id: {type: 'increments', nullable: false, primary: true},
|
|
user_id: {type: 'integer', nullable: false},
|
|
permission_id: {type: 'integer', nullable: false}
|
|
},
|
|
permissions_roles: {
|
|
id: {type: 'increments', nullable: false, primary: true},
|
|
role_id: {type: 'integer', nullable: false},
|
|
permission_id: {type: 'integer', nullable: false}
|
|
},
|
|
sessions: {
|
|
id: {type: 'string', nullable: false, primary: true},
|
|
expires: {type: 'bigInteger', nullable: false},
|
|
sess: {type: 'string', maxlength: 4096, nullable: false}
|
|
},
|
|
settings: {
|
|
id: {type: 'increments', nullable: false, primary: true},
|
|
uuid: {type: 'string', maxlength: 36, nullable: false},
|
|
key: {type: 'string', maxlength: 150, nullable: false, unique: true},
|
|
value: {type: 'text', maxlength: 65535, nullable: true},
|
|
type: {type: 'string', maxlength: 150, nullable: false, defaultTo: 'core'},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'integer', nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'integer', nullable: true}
|
|
},
|
|
tags: {
|
|
id: {type: 'increments', nullable: false, primary: true},
|
|
uuid: {type: 'string', maxlength: 36, nullable: false},
|
|
name: {type: 'string', maxlength: 150, nullable: false},
|
|
slug: {type: 'string', maxlength: 150, nullable: false, unique: true},
|
|
description: {type: 'string', maxlength: 200, nullable: true},
|
|
parent_id: {type: 'integer', nullable: true},
|
|
meta_title: {type: 'string', maxlength: 150, nullable: true},
|
|
meta_description: {type: 'string', maxlength: 200, nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'integer', nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'integer', nullable: true}
|
|
},
|
|
posts_tags: {
|
|
id: {type: 'increments', nullable: false, primary: true},
|
|
post_id: {type: 'integer', nullable: false, unsigned: true, references: 'id', inTable: 'posts'},
|
|
tag_id: {type: 'integer', nullable: false, unsigned: true, references: 'id', inTable: 'tags'}
|
|
}
|
|
};
|
|
|
|
function isPost(jsonData) {
|
|
return jsonData.hasOwnProperty('html') && jsonData.hasOwnProperty('markdown')
|
|
&& jsonData.hasOwnProperty('title') && jsonData.hasOwnProperty('slug');
|
|
}
|
|
|
|
module.exports.tables = db;
|
|
module.exports.checks = {
|
|
isPost: isPost
|
|
}; |