|
|
|
const Model = require('objection').Model
|
|
|
|
|
|
|
|
/* global WIKI */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Locales model
|
|
|
|
*/
|
|
|
|
module.exports = class Locale extends Model {
|
|
|
|
static get tableName() { return 'locales' }
|
|
|
|
static get idColumn() { return 'code' }
|
|
|
|
|
|
|
|
static get jsonSchema () {
|
|
|
|
return {
|
|
|
|
type: 'object',
|
|
|
|
required: ['code', 'name'],
|
|
|
|
|
|
|
|
properties: {
|
|
|
|
code: {type: 'string'},
|
|
|
|
isRTL: {type: 'boolean', default: false},
|
|
|
|
name: {type: 'string'},
|
|
|
|
nativeName: {type: 'string'},
|
|
|
|
createdAt: {type: 'string'},
|
|
|
|
updatedAt: {type: 'string'},
|
|
|
|
availability: {type: 'integer'}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static get jsonAttributes() {
|
|
|
|
return ['strings']
|
|
|
|
}
|
|
|
|
|
|
|
|
$beforeUpdate() {
|
|
|
|
this.updatedAt = new Date().toISOString()
|
|
|
|
}
|
|
|
|
$beforeInsert() {
|
|
|
|
this.createdAt = new Date().toISOString()
|
|
|
|
this.updatedAt = new Date().toISOString()
|
|
|
|
}
|
|
|
|
|
|
|
|
static async getNavLocales({ cache = false } = {}) {
|
|
|
|
if (!WIKI.config.lang.namespacing) {
|
|
|
|
return []
|
|
|
|
}
|
|
|
|
|
|
|
|
if (cache) {
|
|
|
|
const navLocalesCached = await WIKI.cache.get('nav:locales')
|
|
|
|
if (navLocalesCached) {
|
|
|
|
return navLocalesCached
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const navLocales = await WIKI.models.locales.query().select('code', 'nativeName AS name').whereIn('code', WIKI.config.lang.namespaces).orderBy('code')
|
|
|
|
if (navLocales) {
|
|
|
|
if (cache) {
|
|
|
|
await WIKI.cache.set('nav:locales', navLocales, 300)
|
|
|
|
}
|
|
|
|
return navLocales
|
|
|
|
} else {
|
|
|
|
WIKI.logger.warn('Site Locales for navigation are missing or corrupted.')
|
|
|
|
return []
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|