diff --git a/server/helpers/error.js b/server/helpers/error.js index 551207fd..a5918e0e 100644 --- a/server/helpers/error.js +++ b/server/helpers/error.js @@ -117,6 +117,14 @@ module.exports = { message: 'Mail template failed to load.', code: 3003 }), + PageGenericError: CustomError('PageGenericError', { + message: 'An unexpected error occured during a page operation.', + code: 6001 + }), + PageDuplicateCreate: CustomError('PageDuplicateCreate', { + message: 'Cannot create this page because an entry already exists at the same path.', + code: 6002 + }), SearchActivationFailed: CustomError('SearchActivationFailed', { message: 'Search Engine activation failed.', code: 4002 diff --git a/server/models/pages.js b/server/models/pages.js index f1ce213a..9411bbd0 100644 --- a/server/models/pages.js +++ b/server/models/pages.js @@ -177,6 +177,11 @@ module.exports = class Page extends Model { } static async createPage(opts) { + const dupCheck = await WIKI.models.pages.query().select('id').where('localeCode', opts.locale).where('path', opts.path).first() + if (dupCheck) { + throw new WIKI.Error.PageDuplicateCreate() + } + await WIKI.models.pages.query().insert({ authorId: opts.authorId, content: opts.content, diff --git a/server/modules/analytics/matomo/code.yml b/server/modules/analytics/matomo/code.yml new file mode 100644 index 00000000..10c753b1 --- /dev/null +++ b/server/modules/analytics/matomo/code.yml @@ -0,0 +1,17 @@ +head: | + + + + diff --git a/server/modules/analytics/matomo/definition.yml b/server/modules/analytics/matomo/definition.yml new file mode 100644 index 00000000..5d99ace1 --- /dev/null +++ b/server/modules/analytics/matomo/definition.yml @@ -0,0 +1,26 @@ +key: matomo +title: Matomo +description: Take back control with Matomo Analytics – a powerful web analytics platform that gives you and your business 100% data ownership and user privacy protection. +author: requarks.io +logo: https://static.requarks.io/logo/matomo.svg +website: https://matomo.org/ +isAvailable: true +props: + siteId: + type: String + title: Site ID + hint: The number index representing your site ID + default: 1 + order: 1 + serverHost: + type: String + title: Server Host + hint: Including https:// and optionally the port. Without trailing slash. (e.g. https://example.matomo.cloud) + default: https://example.matomo.cloud + order: 2 + scriptUrl: + type: String + title: Tracking Script URL + hint: The full URL of the Matomo tracking script. + default: //cdn.matomo.cloud/EXAMPLE.matomo.cloud/matomo.js + order: 3 diff --git a/server/modules/analytics/newrelic/code.yml b/server/modules/analytics/newrelic/code.yml new file mode 100644 index 00000000..366e4b19 --- /dev/null +++ b/server/modules/analytics/newrelic/code.yml @@ -0,0 +1,5 @@ +head: | + diff --git a/server/modules/analytics/newrelic/definition.yml b/server/modules/analytics/newrelic/definition.yml new file mode 100644 index 00000000..e8dd2d45 --- /dev/null +++ b/server/modules/analytics/newrelic/definition.yml @@ -0,0 +1,18 @@ +key: newrelic +title: New Relic Browser +description: New Relic Browser provides deep visibility and insight into how your users are interacting with your application or website. +author: requarks.io +logo: https://static.requarks.io/logo/newrelic.svg +website: https://newrelic.com/products/browser-monitoring +isAvailable: true +props: + licenseKey: + type: String + title: License Key + hint: Found at the very end of the code snippet provided by New Relic Browser + order: 1 + appId: + type: String + title: Application ID + hint: Found at the very end of the code snippet provided by New Relic Browser + order: 2 diff --git a/server/modules/analytics/statcounter/code.yml b/server/modules/analytics/statcounter/code.yml new file mode 100644 index 00000000..51bd6996 --- /dev/null +++ b/server/modules/analytics/statcounter/code.yml @@ -0,0 +1,12 @@ +head: | + + + + + diff --git a/server/modules/analytics/statcounter/definition.yml b/server/modules/analytics/statcounter/definition.yml new file mode 100644 index 00000000..9747f0c8 --- /dev/null +++ b/server/modules/analytics/statcounter/definition.yml @@ -0,0 +1,18 @@ +key: statcounter +title: StatCounter +description: See how Statcounter's easy-to-use features give you everything you need to understand your visitors and increase your website traffic. +author: requarks.io +logo: https://static.requarks.io/logo/statcountr.svg +website: https://statcounter.com/ +isAvailable: true +props: + projectId: + type: String + title: Project ID + hint: Unique Project ID, found in the code snippet provided by StatCounter + order: 1 + securityToken: + type: String + title: Security Token + hint: Security token, found in the code snippet provided by StatCounter + order: 2 diff --git a/server/modules/analytics/yandex/code.yml b/server/modules/analytics/yandex/code.yml new file mode 100644 index 00000000..9f6ae1fc --- /dev/null +++ b/server/modules/analytics/yandex/code.yml @@ -0,0 +1,16 @@ +head: | + + + + diff --git a/server/modules/analytics/yandex/definition.yml b/server/modules/analytics/yandex/definition.yml new file mode 100644 index 00000000..e0e26445 --- /dev/null +++ b/server/modules/analytics/yandex/definition.yml @@ -0,0 +1,13 @@ +key: yandex +title: Yandex Metrica +description: From traffic trends to mouse movements – get a comprehensive understanding of your online audience and drive business growth. +author: requarks.io +logo: https://static.requarks.io/logo/yandex.svg +website: https://metrica.yandex.com +isAvailable: true +props: + tagNumber: + type: String + title: Tag Number + hint: When creating the tag, select "CMS and website builders" and copy the provided Tag Number + order: 1