Add projects to the system

This commit is contained in:
2021-12-27 18:48:38 +02:00
parent d8bf6dcafb
commit d590ae0179
9 changed files with 389 additions and 2 deletions

View File

@@ -25,6 +25,7 @@ module.exports = function (options) {
var translateRouter = require('./translate/')(options);
var versionsRouter = require('./versions')(options);
var forkRouter = require('./fork')(options);
var projectsRouter = require('./projects')(options);
router.use('/library', libraryRouter);
router.use('/pledges', pledgesRouter);
@@ -34,6 +35,7 @@ module.exports = function (options) {
router.use('/translate', translateRouter);
router.use('/v', versionsRouter);
router.use('/fork', forkRouter);
router.use('/projects', projectsRouter);
return router;
};

View File

@@ -0,0 +1,278 @@
const express = require('express')
module.exports = function (options) {
const db = options.db;
var router = express.Router();
router.route('/')
.get(function(request, response, next) {
db.Project.findAll()
.then(projects => {
response.display("projects", {
user: request.user,
pageTitle: "Projects - Mantra",
projects: projects
})
})
})
router.route('/:id')
.get(function(request, response, next) {
db.Project.findByPk(request.params.id, {
include: [
{
association: db.Project.ProjectEntryVersions,
include: [
{
association: db.ProjectEntryVersion.EntryVersion,
include: [
{
association: db.EntryVersion.Entry
}
]
}
]
},
{
association: db.Project.ProjectTranslationEntryVersions,
include: [
{
association: db.ProjectTranslationEntryVersion.TranslationEntryVersion,
include: [
{
association: db.TranslationEntryVersion.EntryVersion,
include: [
{
association: db.EntryVersion.Entry
}
]
}
]
}
]
}
]
}).then(project => {
if (project) {
response.display("project", {
user: request.user,
pageTitle: "Projects - Mantra",
project: project
})
} else {
next()
}
}).catch(error => {
next(error)
})
})
router.route('/create')
.get(function(request, response, next) {
response.display("project-form", {
user: request.user,
pageTitle: "Projects - Mantra",
project: {
}
})
})
.post(function(request, response, next) {
db.Project.create({
name: request.body.name,
description: request.body.description
}).then(project => {
if (project) {
response.redirect(`/projects/${project.id}`)
} else {
next()
}
}).catch(error => {
next(error)
})
})
router.route('/:id/add-entry')
.get(function(request, response, next) {
db.Project.findByPk(request.params.id, {
include: [
{
association: db.Project.ProjectEntryVersions
},
{
association: db.Project.ProjectTranslationEntryVersions
}
]
}).then(async (project) => {
if (project) {
const entries = await db.Entry.findAll({
// Narrow it down to entries this user has admin ownership off...,
include: [
{
association: db.Entry.EntryVersions,
limit: 1,
required: true
// TODO: Order by version...
}
]
})
response.display("project-add-entry", {
user: request.user,
pageTitle: "Projects - Mantra",
project: project,
entries: entries
})
} else {
next()
}
}).catch(error => {
next(error)
})
})
.post(function(request, response, next) {
db.Project.findByPk(request.params.id, {
include: [
{
association: db.Project.ProjectEntryVersions,
include: [
{
association: db.ProjectEntryVersion.EntryVersion,
include: [
{
association: db.EntryVersion.Entry
}
]
}
]
},
{
association: db.Project.ProjectTranslationEntryVersions,
include: [
{
association: db.ProjectTranslationEntryVersion.TranslationEntryVersion,
include: [
{
association: db.TranslationEntryVersion.EntryVersion,
include: [
{
association: db.EntryVersion.Entry
}
]
}
]
}
]
}
]
}).then(async (project) => {
if (project) {
// TODO: Fi
const entryVersion = await db.EntryVersion.findByPk(request.body.entryVersionId, {
// Narrow it down to entries this user has admin ownership off...,
})
if (entryVersion) {
const projectEntryVersion = db.ProjectEntryVersion.create({
projectId: project.id,
entryVersionId: entryVersion.id
})
response.redirect(`/projects/${project.id}`)
} else {
response.redirect(`/projects/${project.id}/add-entry`)
}
} else {
next()
}
}).catch(error => {
next(error)
})
})
router.route('/:id/add-translation')
.get(function(request, response, next) {
db.Project.findByPk(request.params.id, {
include: [
{
association: db.Project.ProjectEntryVersions
},
{
association: db.Project.ProjectTranslationEntryVersions
}
]
}).then(async (project) => {
if (project) {
const translationEntryVersions = await db.TranslationEntryVersion.findAll({
// Narrow it down to entries this user has admin ownership off...,
include: [
{
association: db.TranslationEntryVersion.EntryVersion,
required: true,
// TODO: Order by version...
include: [
{
association: db.EntryVersion.Entry
}
]
}
]
})
response.display("project-add-translation", {
user: request.user,
pageTitle: "Projects - Mantra",
project: project,
translationEntryVersions: translationEntryVersions
})
} else {
next()
}
}).catch(error => {
next(error)
})
})
.post(function(request, response, next) {
db.Project.findByPk(request.params.id, {
include: [
{
association: db.Project.ProjectEntryVersions
},
{
association: db.Project.ProjectTranslationEntryVersions
}
]
}).then(async (project) => {
if (project) {
// TODO: Fi
const translationEntryVersion = await db.TranslationEntryVersion.findByPk(request.body.translationEntryVersionId, {
// Narrow it down to entries this user has admin ownership off...,
include: [
{
association: db.TranslationEntryVersion.EntryVersion,
required: true
// TODO: Order by version...
}
]
})
if (translationEntryVersion) {
const projectTranslationEntryVersion = db.ProjectTranslationEntryVersion.create({
projectId: project.id,
translationEntryVersionId: translationEntryVersion.id
})
response.redirect(`/projects/${project.id}`)
} else {
response.redirect(`/projects/${project.id}/add-translation`)
}
} else {
next()
}
}).catch(error => {
next(error)
})
})
return router;
};

View File

@@ -11,6 +11,9 @@ block content
.col.s12.input-field
input#name(type="text", name="name", value=campaign.name)
label(for="name") Campaign Name
if project
.col.s12
span project...
each translationEntryVersion in translationEntryVersions
input(type="hidden", name="translationEntryVersions", value=translationEntryVersion.id)
.col.s12.input-field

View File

@@ -0,0 +1,22 @@
extend templates/layout.pug
block content
.container
.center
h1 Add Entry to Project
table
thead
tr
th Name
th Version
th
tbody
each entry in entries
tr
td= entry.name
td= entry.entryVersions[0].tag
td
form(action=`/projects/${project.id}/add-entry`, method="post")
input(type="hidden", name="entryVersionId", value=entry.entryVersions[0].id)
button.btn.black(type="submit") add to project

View File

@@ -0,0 +1,22 @@
extend templates/layout.pug
block content
.container
.center
h1 Add Translation to #{project.name}
table
thead
tr
th Name
th Version
th
tbody
each translationEntryVersion in translationEntryVersions
tr
td #{translationEntryVersion.entryVersion.entry.name} - #{translationEntryVersion.name}
td= translationEntryVersion.entryVersion.tag
td
form(action=`/projects/${project.id}/add-translation`, method="post")
input(type="hidden", name="translationEntryVersionId", value=translationEntryVersion.id)
button.btn.black(type="submit") add to project

View File

@@ -0,0 +1,18 @@
extend templates/layout.pug
block content
.container
.center
h1 Create Project
.row
.col.s12
form.row(action=`/projects/create`, method="post")
.col.s12.input-field
input#name(type="text", name="name", value=project.name)
label(for="name") Project Name
.col.s12.input-field
input#description(type="text", name="description", value=project.description)
label(for="description") Description
.col.s12
button.btn.black(type="submit") create project

25
server/views/project.pug Normal file
View File

@@ -0,0 +1,25 @@
extend templates/layout.pug
block content
.container
.center
h1= project.name
p.flow-text= project.description
.divider
h2 Entries
each projectEntryVersion in project.projectEntryVersions
p.flow-text= projectEntryVersion.entryVersion.entry.name
.row
.col.s12
a.btn.black(href=`/projects/${project.id}/add-entry`) add from library
.divider
h2 Translation
each projectTranslationEntryVersion in project.projectTranslationEntryVersions
p.flow-text #{projectTranslationEntryVersion.translationEntryVersion.name} - #{projectTranslationEntryVersion.translationEntryVersion.entryVersion.entry.name}
.row
.col.s12
a.btn.black(href=`/projects/${project.id}/add-translation`) add translation
//- TODO: Show project translation entry versions
//- TODO: Show project entry versions

14
server/views/projects.pug Normal file
View File

@@ -0,0 +1,14 @@
extend templates/layout.pug
block content
.container
.center
h1 Projects
a.btn.black(href=`/projects/create`) add project
row
each project in projects
.col.s12
p.flow-text
a(href=`projects/${project.id}`)= project.name

View File

@@ -39,11 +39,14 @@ html(lang="en" dir="ltr")
a(href="/library")
i.material-icons.black-text person
span library
li
a(href="/projects")
i.material-icons.black-text person
span Projects
li
a(href="/campaigns")
i.material-icons.black-text person
span campaigns
span campaigns
li
a(href="/pledges")
i.material-icons.black-text person