Browse Source

feat: content license notice option

NGPixel 5 years ago
parent
commit
f7c0daec9a

+ 1 - 1
client/components/admin.vue

@@ -7,7 +7,7 @@
         v-spacer
     v-navigation-drawer.pb-0.admin-sidebar(v-model='adminDrawerShown', app, fixed, clipped, :right='$vuetify.rtl', permanent, width='300')
       vue-scroll(:ops='scrollStyle')
-        v-list(dense, nav)
+        v-list.radius-0(dense, nav)
           v-list-item(to='/dashboard', color='primary')
             v-list-item-avatar(size='24', tile): v-icon mdi-view-dashboard-variant
             v-list-item-title {{ $t('admin:dashboard.title') }}

+ 113 - 5
client/components/admin/admin-general.vue

@@ -73,6 +73,16 @@
                       persistent-hint
                       :hint='$t(`admin:general.companyNameHint`)'
                       )
+                    v-select.mt-3(
+                      outlined
+                      :label='$t(`admin:general.contentLicense`)'
+                      :items='contentLicenses'
+                      v-model='config.contentLicense'
+                      prepend-icon='mdi-creative-commons'
+                      :return-object='false'
+                      :hint='$t(`admin:general.contentLicenseHint`)'
+                      persistent-hint
+                      )
                   v-divider
                   .overline.grey--text.pa-4 SEO
                   .px-3.pb-3
@@ -251,8 +261,7 @@
 <script>
 import _ from 'lodash'
 import { get, sync } from 'vuex-pathify'
-import siteConfigQuery from 'gql/admin/site/site-query-config.gql'
-import siteUpdateConfigMutation from 'gql/admin/site/site-mutation-save-config.gql'
+import gql from 'graphql-tag'
 
 import editorStore from '../../store/editor'
 
@@ -281,6 +290,7 @@ export default {
         analyticsService: '',
         analyticsId: '',
         company: '',
+        contentLicense: '',
         logoUrl: '',
         featureAnalytics: false,
         featurePageRatings: false,
@@ -317,13 +327,82 @@ export default {
     siteTitle: sync('site/title'),
     logoUrl: sync('site/logoUrl'),
     company: sync('site/company'),
-    activeModal: sync('editor/activeModal')
+    contentLicense: sync('site/contentLicense'),
+    activeModal: sync('editor/activeModal'),
+    contentLicenses () {
+      return [
+        { value: '', text: this.$t('common:license.none') },
+        { value: 'alr', text: this.$t('common:license.alr') },
+        { value: 'cc0', text: this.$t('common:license.cc0') },
+        { value: 'ccby', text: this.$t('common:license.ccby') },
+        { value: 'ccbysa', text: this.$t('common:license.ccbysa') },
+        { value: 'ccbynd', text: this.$t('common:license.ccbynd') },
+        { value: 'ccbync', text: this.$t('common:license.ccbync') },
+        { value: 'ccbyncsa', text: this.$t('common:license.ccbyncsa') },
+        { value: 'ccbyncnd', text: this.$t('common:license.ccbyncnd') }
+      ]
+    }
   },
   methods: {
     async save () {
       try {
         await this.$apollo.mutate({
-          mutation: siteUpdateConfigMutation,
+          mutation: gql`
+            mutation (
+              $host: String!
+              $title: String!
+              $description: String!
+              $robots: [String]!
+              $analyticsService: String!
+              $analyticsId: String!
+              $company: String!
+              $contentLicense: String!
+              $logoUrl: String!
+              $featurePageRatings: Boolean!
+              $featurePageComments: Boolean!
+              $featurePersonalWikis: Boolean!
+              $securityIframe: Boolean!
+              $securityReferrerPolicy: Boolean!
+              $securityTrustProxy: Boolean!
+              $securitySRI: Boolean!
+              $securityHSTS: Boolean!
+              $securityHSTSDuration: Int!
+              $securityCSP: Boolean!
+              $securityCSPDirectives: String!
+            ) {
+              site {
+                updateConfig(
+                  host: $host,
+                  title: $title,
+                  description: $description,
+                  robots: $robots,
+                  analyticsService: $analyticsService,
+                  analyticsId: $analyticsId,
+                  company: $company,
+                  contentLicense: $contentLicense,
+                  logoUrl: $logoUrl,
+                  featurePageRatings: $featurePageRatings,
+                  featurePageComments: $featurePageComments,
+                  featurePersonalWikis: $featurePersonalWikis,
+                  securityIframe: $securityIframe,
+                  securityReferrerPolicy: $securityReferrerPolicy,
+                  securityTrustProxy: $securityTrustProxy,
+                  securitySRI: $securitySRI,
+                  securityHSTS: $securityHSTS,
+                  securityHSTSDuration: $securityHSTSDuration,
+                  securityCSP: $securityCSP,
+                  securityCSPDirectives: $securityCSPDirectives
+                ) {
+                  responseResult {
+                    succeeded
+                    errorCode
+                    slug
+                    message
+                  }
+                }
+              }
+            }
+          `,
           variables: {
             host: _.get(this.config, 'host', ''),
             title: _.get(this.config, 'title', ''),
@@ -332,6 +411,7 @@ export default {
             analyticsService: _.get(this.config, 'analyticsService', ''),
             analyticsId: _.get(this.config, 'analyticsId', ''),
             company: _.get(this.config, 'company', ''),
+            contentLicense: _.get(this.config, 'contentLicense', ''),
             logoUrl: _.get(this.config, 'logoUrl', ''),
             featurePageRatings: _.get(this.config, 'featurePageRatings', false),
             featurePageComments: _.get(this.config, 'featurePageComments', false),
@@ -356,6 +436,7 @@ export default {
         })
         this.siteTitle = this.config.title
         this.company = this.config.company
+        this.contentLicense = this.config.contentLicense
         this.logoUrl = this.config.logoUrl
       } catch (err) {
         this.$store.commit('pushGraphError', err)
@@ -379,7 +460,34 @@ export default {
   },
   apollo: {
     config: {
-      query: siteConfigQuery,
+      query: gql`
+        {
+          site {
+            config {
+              host
+              title
+              description
+              robots
+              analyticsService
+              analyticsId
+              company
+              contentLicense
+              logoUrl
+              featurePageRatings
+              featurePageComments
+              featurePersonalWikis
+              securityIframe
+              securityReferrerPolicy
+              securityTrustProxy
+              securitySRI
+              securityHSTS
+              securityHSTSDuration
+              securityCSP
+              securityCSPDirectives
+            }
+          }
+        }
+      `,
       fetchPolicy: 'network-only',
       update: (data) => _.cloneDeep(data.site.config),
       watchLoading (isLoading) {

+ 0 - 52
client/graph/admin/site/site-mutation-save-config.gql

@@ -1,52 +0,0 @@
-mutation (
-  $host: String!
-  $title: String!
-  $description: String!
-  $robots: [String]!
-  $analyticsService: String!
-  $analyticsId: String!
-  $company: String!
-  $logoUrl: String!
-  $featurePageRatings: Boolean!
-  $featurePageComments: Boolean!
-  $featurePersonalWikis: Boolean!
-  $securityIframe: Boolean!
-  $securityReferrerPolicy: Boolean!
-  $securityTrustProxy: Boolean!
-  $securitySRI: Boolean!
-  $securityHSTS: Boolean!
-  $securityHSTSDuration: Int!
-  $securityCSP: Boolean!
-  $securityCSPDirectives: String!
-) {
-  site {
-    updateConfig(
-      host: $host,
-      title: $title,
-      description: $description,
-      robots: $robots,
-      analyticsService: $analyticsService,
-      analyticsId: $analyticsId,
-      company: $company,
-      logoUrl: $logoUrl,
-      featurePageRatings: $featurePageRatings,
-      featurePageComments: $featurePageComments,
-      featurePersonalWikis: $featurePersonalWikis,
-      securityIframe: $securityIframe,
-      securityReferrerPolicy: $securityReferrerPolicy,
-      securityTrustProxy: $securityTrustProxy,
-      securitySRI: $securitySRI,
-      securityHSTS: $securityHSTS,
-      securityHSTSDuration: $securityHSTSDuration,
-      securityCSP: $securityCSP,
-      securityCSPDirectives: $securityCSPDirectives
-    ) {
-      responseResult {
-        succeeded
-        errorCode
-        slug
-        message
-      }
-    }
-  }
-}

+ 0 - 25
client/graph/admin/site/site-query-config.gql

@@ -1,25 +0,0 @@
-{
-  site {
-    config {
-      host
-      title
-      description
-      robots
-      analyticsService
-      analyticsId
-      company
-      logoUrl
-      featurePageRatings
-      featurePageComments
-      featurePersonalWikis
-      securityIframe
-      securityReferrerPolicy
-      securityTrustProxy
-      securitySRI
-      securityHSTS
-      securityHSTSDuration
-      securityCSP
-      securityCSPDirectives
-    }
-  }
-}

+ 1 - 0
client/store/site.js

@@ -4,6 +4,7 @@ import { make } from 'vuex-pathify'
 
 const state = {
   company: siteConfig.company,
+  contentLicense: siteConfig.contentLicense,
   dark: siteConfig.darkMode,
   mascot: true,
   title: siteConfig.title,

+ 4 - 1
client/themes/default/components/nav-footer.vue

@@ -1,7 +1,9 @@
 <template lang="pug">
   v-footer.justify-center(:color='bgColor', inset)
     .caption.grey--text.text--darken-1
-      span(v-if='company && company.length > 0') {{ $t('common:footer.copyright', { company: company, year: currentYear, interpolation: { escapeValue: false } }) }} |&nbsp;
+      template(v-if='company && company.length > 0 && contentLicense !== ``')
+        span(v-if='contentLicense === `alr`') {{ $t('common:footer.copyright', { company: company, year: currentYear, interpolation: { escapeValue: false } }) }} |&nbsp;
+        span(v-else) {{ $t('common:footer.license', { company: company, license: $t('common:license.' + contentLicense), interpolation: { escapeValue: false } }) }} |&nbsp;
       span {{ $t('common:footer.poweredBy') }} #[a(href='https://wiki.js.org', ref='nofollow') Wiki.js]
 </template>
 
@@ -26,6 +28,7 @@ export default {
   },
   computed: {
     company: get('site/company'),
+    contentLicense: get('site/contentLicense'),
     darkMode: get('site/dark'),
     bgColor() {
       if (!this.darkMode) {

+ 2 - 0
server/app/data.yml

@@ -42,6 +42,8 @@ defaults:
       clientId: ''
       isEnabled: false
     title: Wiki.js
+    company: ''
+    contentLicense: ''
     logoUrl: https://static.requarks.io/logo/wikijs-butterfly.svg
     theming:
       theme: 'default'

+ 3 - 1
server/graph/resolvers/site.js

@@ -15,6 +15,7 @@ module.exports = {
         host: WIKI.config.host,
         title: WIKI.config.title,
         company: WIKI.config.company,
+        contentLicense: WIKI.config.contentLicense,
         logoUrl: WIKI.config.logoUrl,
         ...WIKI.config.seo,
         ...WIKI.config.features,
@@ -28,6 +29,7 @@ module.exports = {
         WIKI.config.host = args.host
         WIKI.config.title = args.title
         WIKI.config.company = args.company
+        WIKI.config.contentLicense = args.contentLicense
         WIKI.config.seo = {
           description: args.description,
           robots: args.robots,
@@ -50,7 +52,7 @@ module.exports = {
           securityCSP: args.securityCSP,
           securityCSPDirectives: args.securityCSPDirectives
         }
-        await WIKI.configSvc.saveToDb(['host', 'title', 'company', 'seo', 'logoUrl', 'features', 'security'])
+        await WIKI.configSvc.saveToDb(['host', 'title', 'company', 'contentLicense', 'seo', 'logoUrl', 'features', 'security'])
 
         if (WIKI.config.security.securityTrustProxy) {
           WIKI.app.enable('trust proxy')

+ 2 - 0
server/graph/schemas/site.graphql

@@ -31,6 +31,7 @@ type SiteMutation {
     analyticsService: String!
     analyticsId: String!
     company: String!
+    contentLicense: String!
     logoUrl: String!
     featurePageRatings: Boolean!
     featurePageComments: Boolean!
@@ -58,6 +59,7 @@ type SiteConfig {
   analyticsService: String!
   analyticsId: String!
   company: String!
+  contentLicense: String!
   logoUrl: String!
   featurePageRatings: Boolean!
   featurePageComments: Boolean!

+ 1 - 0
server/master.js

@@ -145,6 +145,7 @@ module.exports = async () => {
       lang: WIKI.config.lang.code,
       rtl: WIKI.config.lang.rtl,
       company: WIKI.config.company,
+      contentLicense: WIKI.config.contentLicense,
       logoUrl: WIKI.config.logoUrl
     }
     res.locals.langs = await WIKI.models.locales.getNavLocales({ cache: true })