115 lines
4.5 KiB
JavaScript
115 lines
4.5 KiB
JavaScript
const express = require('express');
|
|
|
|
module.exports = function (options) {
|
|
const db = options.db;
|
|
var router = express.Router();
|
|
|
|
router.route('/t/:id')
|
|
.post(function(request, response, next) {
|
|
db.TranslationEntryVersion.findByPk(request.params.id, {
|
|
}).then(async (translationEntryVersion) => {
|
|
if (translationEntryVersion) {
|
|
// fork...
|
|
const forkedTranslationEntryVersion = await db.TranslationEntryVersion.create({
|
|
name: translationEntryVersion.name,
|
|
entryVersionId: translationEntryVersion.entryVersionId,
|
|
userId: request.user.id,
|
|
dialectId: translationEntryVersion.dialectId,
|
|
forkedFromId: translationEntryVersion.id
|
|
})
|
|
if (forkedTranslationEntryVersion) {
|
|
return response.redirect(`/v/${forkedTranslationEntryVersion.entryVersionId}/translations/${forkedTranslationEntryVersion.id}`)
|
|
} else {
|
|
next()
|
|
}
|
|
} else {
|
|
next()
|
|
}
|
|
}).catch(error => {
|
|
next(error)
|
|
})
|
|
})
|
|
|
|
router.route('/e/:id')
|
|
.get(function(request, response, next) {
|
|
db.EntryVersion.findByPk(request.params.id, {
|
|
include: [
|
|
{
|
|
association: db.EntryVersion.Entry
|
|
}
|
|
]
|
|
}).then(entryVersion => {
|
|
if (entryVersion) {
|
|
response.display("fork-entry-version", {
|
|
user: request.user,
|
|
pageTitle: "Add translation - Mantra",
|
|
entryVersion: entryVersion
|
|
})
|
|
} else {
|
|
next()
|
|
}
|
|
}).catch(error => {
|
|
next(error)
|
|
})
|
|
})
|
|
.post(async function(request, response, next) {
|
|
const dialectTokens = request.body.dialect?.split(":")
|
|
if (dialectTokens?.length == 2) {
|
|
const countryId = dialectTokens[0].split("-")[0]
|
|
const languageId = dialectTokens[0].split("-")[1]
|
|
|
|
const dialect = await db.Dialect.findOne({
|
|
where: {
|
|
countryId: countryId,
|
|
languageId: languageId
|
|
}
|
|
})
|
|
|
|
if (dialect) {
|
|
const entryVersion = await db.EntryVersion.findByPk(request.params.id, {
|
|
include: [
|
|
{
|
|
association: db.EntryVersion.Entry
|
|
},
|
|
{
|
|
association: db.EntryVersion.TranslationEntryVersions,
|
|
required: false,
|
|
where: {
|
|
dialectId: dialect.id,
|
|
}
|
|
}
|
|
]
|
|
})
|
|
|
|
if (entryVersion) {
|
|
const forkedTranslationEntryVersion = await forkEntryVersion(entryVersion, dialect, request.user.id)
|
|
if (forkedTranslationEntryVersion) {
|
|
return response.redirect(`/v/${forkedTranslationEntryVersion.entryVersionId}/translations/${forkedTranslationEntryVersion.id}`)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
next()
|
|
})
|
|
|
|
const forkEntryVersion = (entryVersion, dialect, userId) => {
|
|
if (entryVersion.translationEntryVersions.length == 0) {
|
|
// create a translationEntryVersion with a new dialect...
|
|
return db.TranslationEntryVersion.create({
|
|
name: dialect.name,
|
|
entryVersionId: entryVersion.id,
|
|
dialectId: dialect.id,
|
|
userId: userId,
|
|
})
|
|
} else {
|
|
return db.TranslationEntryVersion.create({
|
|
name: entryVersion.translationEntryVersions[0].name,
|
|
entryVersionId: entryVersion.translationEntryVersions[0].entryVersionId,
|
|
userId: userId,
|
|
dialectId: entryVersion.translationEntryVersions[0].dialectId,
|
|
forkedFromId: entryVersion.translationEntryVersions[0].id
|
|
})
|
|
}
|
|
}
|
|
return router;
|
|
}; |