diff --git a/api/awtis/models/awtis.js b/api/awtis/models/awtis.js deleted file mode 100644 index 0d91bcf..0000000 --- a/api/awtis/models/awtis.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -/** - * Read the documentation (https://strapi.io/documentation/v3.x/concepts/models.html#lifecycle-hooks) - * to customize this model - */ - -const slugify = require('slugify') - -const jwennTeksEpiId = async data => { - const teks = await strapi.query('teks').find({id_in: data}) - return teks -} - -const jwennAwtisEpiId = async id => { - const awtis = await strapi.query('awtis').find({id}) - return awtis -} - -module.exports = { - lifecycles: { - beforeUpdate: async (params, data) => { - if (!data.slug) { - data.slug = slugify(data.alias, {lower: true, remove: /[*#+~.()'"!:@]/g}) - } - }, - beforeCreate: async data => { - data.slug = slugify(data.alias, {lower: true, remove: /[*#+~.()'"!:@]/g}) - }, - afterUpdate: async (params, data) => { - const {id} = data - const awtis = await jwennAwtisEpiId(id) - - if (awtis.teks && awtis.teks.length >= 1) { - const teks = await jwennTeksEpiId(awtis.teks) - Promise.all(teks.map(async t => { - const {id, tit, slug, awtis} = t - const alias = awtis.map(a => a.alias).join('-') - const slugUpdated = slugify(`${alias}-${tit}`, {lower: true, remove: /[*#+~.()'"!:@]/g}) - if (slug !== slugUpdated) { - await strapi.query('teks').update( - {id}, - {slug: slugUpdated} - ) - } - })) - } - } - } -} diff --git a/api/komante/models/komante.js b/api/komante/models/komante.js deleted file mode 100644 index e4f3329..0000000 --- a/api/komante/models/komante.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -const jwennTeksEpiId = async teksId => { - const teks = await strapi.query('teks').findOne({id: teksId}) - return teks -} - -const jwennUserEpiId = async userId => { - const user = await strapi.query('user', 'users-permissions').findOne({id: userId}) - return user -} - -module.exports = { - lifecycles: { - beforeCreate: async data => { - if (data.kontni && data.teks && data.user) { - const teks = await jwennTeksEpiId(data.teks) - const user = await jwennUserEpiId(data.user) - - if(!teks || !user) { - throw strapi.errors.badRequest('Not found') - } - - } else { - throw strapi.errors.badRequest('Missing fields') - } - }, - afterCreate: async data => { - if (data.user) { - strapi.services.email.send( - process.env.SMTP_FROM, - process.env.SMTP_SEND_TO, - `Nouveau commentaire de ${data.user.username}`, - data.kontni - ) - } - } - } -}; diff --git a/api/teks/models/teks.js b/api/teks/models/teks.js deleted file mode 100644 index 088f4fe..0000000 --- a/api/teks/models/teks.js +++ /dev/null @@ -1,130 +0,0 @@ -'use strict'; - -const slugify = require('slugify') -const axios = require('axios') - -const TELEGRAM_API_URL = 'https://api.telegram.org' -const TELEGRAM_CHAN_ID = process.env.TELEGRAM_CHAN_ID || null -const TELEGRAM_API_TOKEN = process.env.TELEGRAM_API_TOKEN || null -const MESSAGE_URL = `${TELEGRAM_API_URL}/bot${TELEGRAM_API_TOKEN}/sendMessage?chat_id=${TELEGRAM_CHAN_ID}&parse_mode=html` - -const jwennAwtisEpiId = async data => { - const awtis = await strapi.query('awtis').find({id: data}) - return awtis.map(a => a.alias).join('-') -} - -const jwennUserEpiId = async userId => { - if (!userId) { - return null - } - - const user = await strapi.query('user', 'users-permissions').findOne({id: userId}) - return user -} - -const jwennUserAdminEpiId = async userAdminId => { - if (!userAdminId) { - return null - } - - const user = await strapi.query('user', 'admin').findOne({id: userAdminId, 'roles.code_nin': 'strapi-super-admin'}) - return user -} - -const translateTeks = async teksFR => { - const english = await strapi.services.translator.translate('FR', 'EN', teksFR) - const espagnol = await strapi.services.translator.translate('FR', 'ES', teksFR) - const deutsch = await strapi.services.translator.translate('FR', 'DE', teksFR) - const italiano = await strapi.services.translator.translate('FR', 'IT', teksFR) - - return { - francais: teksFR, - english: english + '\n\n (Translated by DeepL)', - espagnol: espagnol + '\n\n (Traducido por DeepL)', - deutsch: deutsch + '\n\n (Übersetzt von DeepL)', - italiano: italiano + '\n\n (Tradotto da DeepL)' - } -} - -module.exports = { - lifecycles: { - beforeCreate: async data => { - const user = await jwennUserEpiId(data?.user?.id) - const userAdmin = await jwennUserAdminEpiId(data?.created_by) - - if (userAdmin) { - data.userAdmin = userAdmin.username - } - - if (data.tit && !data.forceSlug) { - const awtis = await jwennAwtisEpiId(data.awtis) - data.slug = slugify(`${awtis}-${data.tit}`, {lower: true, remove: /[*#+~.()'"!:@]/g}) - } - - if (user && user.canAutoTranslate && data.tradiksyonOtomatik && data.tradiksyon.francais && (!data.tradiksyon.english || !data.tradiksyon.espagnol || !data.tradiksyon.deutsch || !data.tradiksyon.italiano)) { - const traslate = await translateTeks(data.tradiksyon.francais) - data.tradiksyon = traslate - } - - }, - beforeUpdate: async (params, data) => { - if (data.tit && !data.forceSlug) { - const awtis = await jwennAwtisEpiId(data.awtis) - data.slug = slugify(`${awtis}-${data.tit}`, {lower: true, remove: /[*#+~.()'"!:@]/g}) - } - if (data.published_at != null) { - const {id} = params - const previousData = await strapi.query('teks').findOne({id}) - - const previousPublishedAt = previousData.published_at - const currentPublished_at = data.published_at - if (currentPublished_at != previousPublishedAt) { - const message = `Nouvelle publication \xF0\x9F\x8E\xB6 \xF0\x9F\x94\xA5 -\n${process.env.WEBSITE_URL}/paroles/${previousData.slug}` - if (previousData.user) { - strapi.services.email.send( - process.env.SMTP_FROM, - previousData.user.email, - `Publication de "${previousData.tit}"`, - `Le titre que vous avez soumis, "${previousData.tit}" a été publié sur le site. Vous pouvez le trouver à l'adresse ${process.env.WEBSITE_URL}/paroles/${previousData.slug}` - ) - } - - const user = await jwennUserAdminEpiId(previousData?.created_by?.id) - - if (user) { - strapi.services.email.send( - process.env.SMTP_FROM, - user.email, - `Publication de "${previousData.tit}"`, - `Le titre que vous avez soumis, "${previousData.tit}" a été publié sur le site. Vous pouvez le trouver à l'adresse ${process.env.WEBSITE_URL}/paroles/${previousData.slug}` - ) - } - - await axios.post(`${MESSAGE_URL}&text=${message}`) - } - } - }, - afterCreate: async data => { - if (data.user) { - strapi.services.email.send( - process.env.SMTP_FROM, - process.env.SMTP_SEND_TO, - `Nouveau texte de ${data.user.username} : "${data.tit}" (site)`, - `Le titre "${data.tit}" a été soumis depuis le site.` - ) - } - - const user = await jwennUserAdminEpiId(data?.created_by?.id) - - if (user) { - strapi.services.email.send( - process.env.SMTP_FROM, - process.env.SMTP_SEND_TO, - `Nouveau texte de ${user.username} : "${data.tit}" (dashboard)`, - `Le titre "${data.tit}" a été soumis depuis le dashboard.` - ) - } - } - } -} diff --git a/src/api/awti/content-types/lifecycle.js b/src/api/awti/content-types/lifecycle.js new file mode 100644 index 0000000..edf9d78 --- /dev/null +++ b/src/api/awti/content-types/lifecycle.js @@ -0,0 +1,53 @@ +'use strict'; + +/** + * Read the documentation (https://strapi.io/documentation/v3.x/concepts/models.html#lifecycle-hooks) + * to customize this model + */ + +const slugify = require('slugify') + +const jwennTeksEpiId = async data => { + const teks = await strapi.query('teks').find({id_in: data}) + return teks +} + +const jwennAwtisEpiId = async id => { + const awtis = await strapi.query('awtis').find({id}) + return awtis +} + +module.exports = { + beforeUpdate: async event => { + let {data} = event + + if (!data.slug) { + data.slug = slugify(data.alias, {lower: true, remove: /[*#+~.()'"!:@]/g}) + } + }, + beforeCreate: async event => { + let {data} = event + + data.slug = slugify(data.alias, {lower: true, remove: /[*#+~.()'"!:@]/g}) + }, + afterUpdate: async event => { + let {data} = event + const {id} = data + const awtis = await jwennAwtisEpiId(id) + + if (awtis.teks && awtis.teks.length >= 1) { + const teks = await jwennTeksEpiId(awtis.teks) + Promise.all(teks.map(async t => { + const {id, tit, slug, awtis} = t + const alias = awtis.map(a => a.alias).join('-') + const slugUpdated = slugify(`${alias}-${tit}`, {lower: true, remove: /[*#+~.()'"!:@]/g}) + if (slug !== slugUpdated) { + await strapi.query('teks').update( + {id}, + {slug: slugUpdated} + ) + } + })) + } + } +} diff --git a/api/awtis/models/awtis.settings.json b/src/api/awti/content-types/schema.json similarity index 81% rename from api/awtis/models/awtis.settings.json rename to src/api/awti/content-types/schema.json index 7add56c..eccb7ba 100644 --- a/api/awtis/models/awtis.settings.json +++ b/src/api/awti/content-types/schema.json @@ -2,6 +2,9 @@ "kind": "collectionType", "collectionName": "awtis", "info": { + "singularName": "awti", + "pluralName": "awtis", + "displayName": "Awtis", "name": "awtis", "description": "" }, @@ -39,8 +42,10 @@ "pluginOptions": {} }, "teks": { - "via": "awtis", - "collection": "teks" + "type": "relation", + "relation": "manyToMany", + "target": "api::tek.tek", + "inversedBy": "teks" }, "user": { "plugin": "users-permissions", diff --git a/src/api/komant/content-types/lifecycle.js b/src/api/komant/content-types/lifecycle.js new file mode 100644 index 0000000..ac2faa1 --- /dev/null +++ b/src/api/komant/content-types/lifecycle.js @@ -0,0 +1,39 @@ +'use strict'; + +const jwennTeksEpiId = async teksId => { + const teks = await strapi.query('teks').findOne({id: teksId}) + return teks +} + +const jwennUserEpiId = async userId => { + const user = await strapi.query('user', 'users-permissions').findOne({id: userId}) + return user +} + +module.exports = { + beforeCreate: async event => { + let {data} = event + + if (data.kontni && data.teks && data.user) { + const teks = await jwennTeksEpiId(data.teks) + const user = await jwennUserEpiId(data.user) + + if(!teks || !user) { + throw strapi.errors.badRequest('Not found') + } + + } else { + throw strapi.errors.badRequest('Missing fields') + } + }, + afterCreate: async data => { + if (data.user) { + strapi.services.email.send( + process.env.SMTP_FROM, + process.env.SMTP_SEND_TO, + `Nouveau commentaire de ${data.user.username}`, + data.kontni + ) + } + } +}; diff --git a/api/komante/models/komante.settings.json b/src/api/komant/content-types/schema.json similarity index 76% rename from api/komante/models/komante.settings.json rename to src/api/komant/content-types/schema.json index fb9f77a..d7b1f87 100644 --- a/api/komante/models/komante.settings.json +++ b/src/api/komant/content-types/schema.json @@ -2,6 +2,9 @@ "kind": "collectionType", "collectionName": "komante", "info": { + "singularName": "komant", + "pluralName": "komante", + "displayName": "Komante", "name": "komante", "description": "" }, @@ -24,8 +27,9 @@ "model": "user" }, "teks": { - "via": "komante", - "model": "teks" + "type": "relation", + "relation": "oneToOne", + "target": "api::tek.tek" }, "sentAt": { "type": "datetime", diff --git a/src/api/tek/content-types/lifecycle.js b/src/api/tek/content-types/lifecycle.js new file mode 100644 index 0000000..930cb04 --- /dev/null +++ b/src/api/tek/content-types/lifecycle.js @@ -0,0 +1,133 @@ +'use strict'; + +const slugify = require('slugify') +const axios = require('axios') + +const TELEGRAM_API_URL = 'https://api.telegram.org' +const TELEGRAM_CHAN_ID = process.env.TELEGRAM_CHAN_ID || null +const TELEGRAM_API_TOKEN = process.env.TELEGRAM_API_TOKEN || null +const MESSAGE_URL = `${TELEGRAM_API_URL}/bot${TELEGRAM_API_TOKEN}/sendMessage?chat_id=${TELEGRAM_CHAN_ID}&parse_mode=html` + +const jwennAwtisEpiId = async data => { + const awtis = await strapi.query('awtis').find({id: data}) + return awtis.map(a => a.alias).join('-') +} + +const jwennUserEpiId = async userId => { + if (!userId) { + return null + } + + const user = await strapi.query('user', 'users-permissions').findOne({id: userId}) + return user +} + +const jwennUserAdminEpiId = async userAdminId => { + if (!userAdminId) { + return null + } + + const user = await strapi.query('user', 'admin').findOne({id: userAdminId, 'roles.code_nin': 'strapi-super-admin'}) + return user +} + +const translateTeks = async teksFR => { + const english = await strapi.services.translator.translate('FR', 'EN', teksFR) + const espagnol = await strapi.services.translator.translate('FR', 'ES', teksFR) + const deutsch = await strapi.services.translator.translate('FR', 'DE', teksFR) + const italiano = await strapi.services.translator.translate('FR', 'IT', teksFR) + + return { + francais: teksFR, + english: english + '\n\n (Translated by DeepL)', + espagnol: espagnol + '\n\n (Traducido por DeepL)', + deutsch: deutsch + '\n\n (Übersetzt von DeepL)', + italiano: italiano + '\n\n (Tradotto da DeepL)' + } +} + +module.exports = { + beforeCreate: async event => { + let {data} = event + const user = await jwennUserEpiId(data?.user?.id) + const userAdmin = await jwennUserAdminEpiId(data?.created_by) + + if (userAdmin) { + data.userAdmin = userAdmin.username + } + + if (data.tit && !data.forceSlug) { + const awtis = await jwennAwtisEpiId(data.awtis) + data.slug = slugify(`${awtis}-${data.tit}`, {lower: true, remove: /[*#+~.()'"!:@]/g}) + } + + if (user && user.canAutoTranslate && data.tradiksyonOtomatik && data.tradiksyon.francais && (!data.tradiksyon.english || !data.tradiksyon.espagnol || !data.tradiksyon.deutsch || !data.tradiksyon.italiano)) { + const traslate = await translateTeks(data.tradiksyon.francais) + data.tradiksyon = traslate + } + + }, + beforeUpdate: async event => { + let {data} = event + + if (data.tit && !data.forceSlug) { + const awtis = await jwennAwtisEpiId(data.awtis) + data.slug = slugify(`${awtis}-${data.tit}`, {lower: true, remove: /[*#+~.()'"!:@]/g}) + } + if (data.published_at != null) { + const {id} = params + const previousData = await strapi.query('teks').findOne({id}) + + const previousPublishedAt = previousData.published_at + const currentPublished_at = data.published_at + if (currentPublished_at != previousPublishedAt) { + const message = `Nouvelle publication \xF0\x9F\x8E\xB6 \xF0\x9F\x94\xA5 +\n${process.env.WEBSITE_URL}/paroles/${previousData.slug}` + if (previousData.user) { + strapi.services.email.send( + process.env.SMTP_FROM, + previousData.user.email, + `Publication de "${previousData.tit}"`, + `Le titre que vous avez soumis, "${previousData.tit}" a été publié sur le site. Vous pouvez le trouver à l'adresse ${process.env.WEBSITE_URL}/paroles/${previousData.slug}` + ) + } + + const user = await jwennUserAdminEpiId(previousData?.created_by?.id) + + if (user) { + strapi.services.email.send( + process.env.SMTP_FROM, + user.email, + `Publication de "${previousData.tit}"`, + `Le titre que vous avez soumis, "${previousData.tit}" a été publié sur le site. Vous pouvez le trouver à l'adresse ${process.env.WEBSITE_URL}/paroles/${previousData.slug}` + ) + } + + await axios.post(`${MESSAGE_URL}&text=${message}`) + } + } + }, + afterCreate: async event => { + let {data} = event + + if (data.user) { + strapi.services.email.send( + process.env.SMTP_FROM, + process.env.SMTP_SEND_TO, + `Nouveau texte de ${data.user.username} : "${data.tit}" (site)`, + `Le titre "${data.tit}" a été soumis depuis le site.` + ) + } + + const user = await jwennUserAdminEpiId(data?.created_by?.id) + + if (user) { + strapi.services.email.send( + process.env.SMTP_FROM, + process.env.SMTP_SEND_TO, + `Nouveau texte de ${user.username} : "${data.tit}" (dashboard)`, + `Le titre "${data.tit}" a été soumis depuis le dashboard.` + ) + } + } +} diff --git a/api/teks/models/teks.settings.json b/src/api/tek/content-types/schema.json similarity index 82% rename from api/teks/models/teks.settings.json rename to src/api/tek/content-types/schema.json index a3707df..3d8f976 100644 --- a/api/teks/models/teks.settings.json +++ b/src/api/tek/content-types/schema.json @@ -2,6 +2,9 @@ "kind": "collectionType", "collectionName": "teks", "info": { + "singularName": "tek", + "pluralName": "teks", + "displayName": "Teks", "name": "Teks", "description": "" }, @@ -33,9 +36,10 @@ "component": "url.liens" }, "awtis": { - "via": "teks", - "collection": "awtis", - "dominant": true + "type": "relation", + "relation": "manyToMany", + "target": "api::awti.awti", + "mappedBy": "tek" }, "kouteyAchtey": { "type": "component", @@ -66,8 +70,9 @@ "type": "boolean" }, "komante": { - "via": "teks", - "collection": "komante" + "type": "relation", + "relation": "oneToOne", + "target": "api::komant.komant" }, "forceSlug": { "type": "boolean"