2
0
Эх сурвалжийг харах

- Custom Product Name in Admin Panel / Layout. In Progress, setting does not affect change UI yet. Thanks to xet7 !
- Fix LDAP User Search Scope. Thanks to Vnimos and Akuket ! Related #119
- Fix Save Admin Panel STMP password. Thanks to saurabharch and xet7 ! Closes #1856

Lauri Ojansivu 6 жил өмнө
parent
commit
4cb25a5bcf

+ 15 - 1
client/components/settings/settingBody.jade

@@ -16,6 +16,8 @@ template(name="setting")
               a.js-setting-menu(data-id="account-setting") {{_ 'accounts'}}
             li
               a.js-setting-menu(data-id="announcement-setting") {{_ 'admin-announcement'}}
+            li
+              a.js-setting-menu(data-id="layout-setting") {{_ 'layout'}}
         .main-body
           if loading.get
             +spinner
@@ -27,6 +29,8 @@ template(name="setting")
             +accountSettings
           else if announcementSetting.get
             +announcementSettings
+          else if layoutSetting.get
+            +layoutSettings
 
 template(name="general")
   ul#registration-setting.setting-detail
@@ -72,7 +76,7 @@ template(name='email')
     li.smtp-form
       .title {{_ 'smtp-password'}}
       .form-group
-        input.form-control#mail-server-password(type="text", placeholder="{{_ 'password'}}" value="")
+        input.form-control#mail-server-password(type="password", placeholder="{{_ 'password'}}" value="{{currentSetting.mailServer.password}}")
     li.smtp-form
       .title {{_ 'smtp-tls'}}
       .form-group
@@ -127,3 +131,13 @@ template(name='announcementSettings')
             textarea#admin-announcement.form-control= currentSetting.body
           li
             button.js-announcement-save.primary {{_ 'save'}}
+
+template(name='layoutSettings')
+  ul#layout-setting.setting-detail
+    li.layout-form
+      .title {{_ 'custom-product-name'}}
+      .form-group
+        input.form-control#product-name(type="text", placeholder="Wekan" value="{{currentSetting.productName}}")
+
+    li
+      button.js-save-layout.primary {{_ 'save'}}

+ 22 - 0
client/components/settings/settingBody.js

@@ -6,6 +6,7 @@ BlazeComponent.extendComponent({
     this.emailSetting = new ReactiveVar(false);
     this.accountSetting = new ReactiveVar(false);
     this.announcementSetting = new ReactiveVar(false);
+    this.layoutSetting = new ReactiveVar(false);
 
     Meteor.subscribe('setting');
     Meteor.subscribe('mailServer');
@@ -68,6 +69,7 @@ BlazeComponent.extendComponent({
       this.emailSetting.set('email-setting' === targetID);
       this.accountSetting.set('account-setting' === targetID);
       this.announcementSetting.set('announcement-setting' === targetID);
+      this.layoutSetting.set('layout-setting' === targetID);
     }
   },
 
@@ -129,6 +131,25 @@ BlazeComponent.extendComponent({
 
   },
 
+  saveLayout() {
+    this.setLoading(true);
+    $('li').removeClass('has-error');
+
+    try {
+      const productName = $('#product-name').val().trim();
+      Settings.update(Settings.findOne()._id, {
+        $set: {
+          'productName': productName,
+        },
+      });
+    } catch (e) {
+      return;
+    } finally {
+      this.setLoading(false);
+    }
+
+  },
+
   sendSMTPTestEmail() {
     Meteor.call('sendSMTPTestEmail', (err, ret) => {
       if (!err && ret) { /* eslint-disable no-console */
@@ -154,6 +175,7 @@ BlazeComponent.extendComponent({
       'click button.js-email-invite': this.inviteThroughEmail,
       'click button.js-save': this.saveMailServerInfo,
       'click button.js-send-smtp-test-email': this.sendSMTPTestEmail,
+      'click button.js-save-layout': this.saveLayout,
     }];
   },
 }).register('setting');

+ 2 - 1
client/components/settings/settingBody.styl

@@ -66,7 +66,8 @@
               padding: 0 0.5rem
 
           .admin-announcement,
-          .invite-people
+          .invite-people,
+          .layout
             padding-left 20px;
             li
               min-width: 500px;

+ 18 - 18
docker-compose-build.yml

@@ -44,7 +44,7 @@ services:
       # If you disable Wekan API with 'false', Export Board does not work.
       - WITH_API=true
       # Optional: Integration with Matomo https://matomo.org that is installed to your server
-      # The address of the server where Matomo is hosted. 
+      # The address of the server where Matomo is hosted.
       # example: - MATOMO_ADDRESS=https://example.com/matomo
       - MATOMO_ADDRESS=''
       # The value of the site ID given in Matomo server for Wekan
@@ -132,10 +132,10 @@ services:
       # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
       # example : LDAP_BACKGROUND_SYNC_INTERVAL=12345
       - LDAP_BACKGROUND_SYNC_INTERVAL=100
-      # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED : 
+      # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED :
       # example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
       - LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
-      # LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS : 
+      # LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS :
       # example : LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true
       - LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false
       # LDAP_ENCRYPTION : If using LDAPS
@@ -150,7 +150,7 @@ services:
       # LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
       # example : LDAP_USER_SEARCH_FILTER=
       - LDAP_USER_SEARCH_FILTER=''
-      # LDAP_USER_SEARCH_SCOPE : Base (search only in the provided DN), one (search only in the provided DN and one level deep), or subtree (search the whole subtree)
+      # LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree).
       # example : LDAP_USER_SEARCH_SCOPE=one
       - LDAP_USER_SEARCH_SCOPE=''
       # LDAP_USER_SEARCH_FIELD : Which field is used to find the user
@@ -168,17 +168,17 @@ services:
       # LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering
       # example : LDAP_GROUP_FILTER_OBJECTCLASS=group
       - LDAP_GROUP_FILTER_OBJECTCLASS=''
-      # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE : 
-      # example : 
+      # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE :
+      # example :
       - LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=''
-      # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE : 
-      # example : 
+      # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE :
+      # example :
       - LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE=''
-      # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT : 
-      # example : 
+      # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT :
+      # example :
       - LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=''
-      # LDAP_GROUP_FILTER_GROUP_NAME : 
-      # example : 
+      # LDAP_GROUP_FILTER_GROUP_NAME :
+      # example :
       - LDAP_GROUP_FILTER_GROUP_NAME=''
       # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier)
       # example : LDAP_UNIQUE_IDENTIFIER_FIELD=guid
@@ -189,20 +189,20 @@ services:
       # LDAP_USERNAME_FIELD : Which field contains the ldap username
       # example : LDAP_USERNAME_FIELD=username
       - LDAP_USERNAME_FIELD=''
-      # LDAP_MERGE_EXISTING_USERS : 
+      # LDAP_MERGE_EXISTING_USERS :
       # example : LDAP_MERGE_EXISTING_USERS=true
       - LDAP_MERGE_EXISTING_USERS=false
-      # LDAP_SYNC_USER_DATA : 
+      # LDAP_SYNC_USER_DATA :
       # example : LDAP_SYNC_USER_DATA=true
       - LDAP_SYNC_USER_DATA=false
-      # LDAP_SYNC_USER_DATA_FIELDMAP : 
+      # LDAP_SYNC_USER_DATA_FIELDMAP :
       # example : LDAP_SYNC_USER_DATA_FIELDMAP={\"cn\":\"name\", \"mail\":\"email\"}
       - LDAP_SYNC_USER_DATA_FIELDMAP=''
-      # LDAP_SYNC_GROUP_ROLES : 
-      # example : 
+      # LDAP_SYNC_GROUP_ROLES :
+      # example :
       - LDAP_SYNC_GROUP_ROLES=''
       # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
-      # example : 
+      # example :
       - LDAP_DEFAULT_DOMAIN=''
 
     depends_on:

+ 18 - 18
docker-compose.yml

@@ -31,7 +31,7 @@ services:
       # If you disable Wekan API with 'false', Export Board does not work.
       - WITH_API=true
       # Optional: Integration with Matomo https://matomo.org that is installed to your server
-      # The address of the server where Matomo is hosted. 
+      # The address of the server where Matomo is hosted.
       # example: - MATOMO_ADDRESS=https://example.com/matomo
       - MATOMO_ADDRESS=''
       # The value of the site ID given in Matomo server for Wekan
@@ -119,10 +119,10 @@ services:
       # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
       # example : LDAP_BACKGROUND_SYNC_INTERVAL=12345
       - LDAP_BACKGROUND_SYNC_INTERVAL=100
-      # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED : 
+      # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED :
       # example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
       - LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
-      # LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS : 
+      # LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS :
       # example : LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true
       - LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false
       # LDAP_ENCRYPTION : If using LDAPS
@@ -137,7 +137,7 @@ services:
       # LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
       # example : LDAP_USER_SEARCH_FILTER=
       - LDAP_USER_SEARCH_FILTER=''
-      # LDAP_USER_SEARCH_SCOPE : Base (search only in the provided DN), one (search only in the provided DN and one level deep), or subtree (search the whole subtree)
+      # LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree)
       # example : LDAP_USER_SEARCH_SCOPE=one
       - LDAP_USER_SEARCH_SCOPE=''
       # LDAP_USER_SEARCH_FIELD : Which field is used to find the user
@@ -155,17 +155,17 @@ services:
       # LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering
       # example : LDAP_GROUP_FILTER_OBJECTCLASS=group
       - LDAP_GROUP_FILTER_OBJECTCLASS=''
-      # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE : 
-      # example : 
+      # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE :
+      # example :
       - LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=''
-      # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE : 
-      # example : 
+      # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE :
+      # example :
       - LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE=''
-      # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT : 
-      # example : 
+      # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT :
+      # example :
       - LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=''
-      # LDAP_GROUP_FILTER_GROUP_NAME : 
-      # example : 
+      # LDAP_GROUP_FILTER_GROUP_NAME :
+      # example :
       - LDAP_GROUP_FILTER_GROUP_NAME=''
       # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier)
       # example : LDAP_UNIQUE_IDENTIFIER_FIELD=guid
@@ -176,20 +176,20 @@ services:
       # LDAP_USERNAME_FIELD : Which field contains the ldap username
       # example : LDAP_USERNAME_FIELD=username
       - LDAP_USERNAME_FIELD=''
-      # LDAP_MERGE_EXISTING_USERS : 
+      # LDAP_MERGE_EXISTING_USERS :
       # example : LDAP_MERGE_EXISTING_USERS=true
       - LDAP_MERGE_EXISTING_USERS=false
-      # LDAP_SYNC_USER_DATA : 
+      # LDAP_SYNC_USER_DATA :
       # example : LDAP_SYNC_USER_DATA=true
       - LDAP_SYNC_USER_DATA=false
-      # LDAP_SYNC_USER_DATA_FIELDMAP : 
+      # LDAP_SYNC_USER_DATA_FIELDMAP :
       # example : LDAP_SYNC_USER_DATA_FIELDMAP={\"cn\":\"name\", \"mail\":\"email\"}
       - LDAP_SYNC_USER_DATA_FIELDMAP=''
-      # LDAP_SYNC_GROUP_ROLES : 
-      # example : 
+      # LDAP_SYNC_GROUP_ROLES :
+      # example :
       - LDAP_SYNC_GROUP_ROLES=''
       # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
-      # example : 
+      # example :
       - LDAP_DEFAULT_DOMAIN=''
 
     depends_on:

+ 3 - 1
i18n/en.i18n.json

@@ -612,5 +612,7 @@
     "oauth2": "OAuth2",
     "cas": "CAS",
     "authentication-method": "Authentication method",
-    "authentication-type": "Authentication type"
+    "authentication-type": "Authentication type",
+    "custom-product-name": "Custom Product Name",
+    "layout": "Layout"
 }

+ 4 - 0
models/settings.js

@@ -28,6 +28,10 @@ Settings.attachSchema(new SimpleSchema({
     type: String,
     optional: true,
   },
+  productName: {
+    type: String,
+    optional: true,
+  },
   createdAt: {
     type: Date,
     denyUpdate: true,

+ 12 - 0
server/migrations.js

@@ -350,3 +350,15 @@ Migrations.add('remove-customFields-references-broken', () => {
     },
     }, noValidateMulti);
 });
+
+Migrations.add('add-product-name', () => {
+  Settings.update({
+    productName: {
+      $exists: false,
+    },
+  }, {
+    $set: {
+      productName:'',
+    },
+  }, noValidateMulti);
+});

+ 1 - 1
server/publications/settings.js

@@ -1,5 +1,5 @@
 Meteor.publish('setting', () => {
-  return Settings.find({}, {fields:{disableRegistration: 1}});
+  return Settings.find({}, {fields:{disableRegistration: 1, productName: 1}});
 });
 
 Meteor.publish('mailServer', function () {

+ 2 - 2
snap-src/bin/config

@@ -176,7 +176,7 @@ KEY_LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED="ldap-background-sync-keep-
 
 DESCRIPTION_LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=""
 DEFAULT_LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS="false"
-KEY_LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS="ldap-background-sync-import-new-users" 
+KEY_LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS="ldap-background-sync-import-new-users"
 
 DESCRIPTION_LDAP_ENCRYPTION="If using LDAPS"
 DEFAULT_LDAP_ENCRYPTION="false"
@@ -194,7 +194,7 @@ DESCRIPTION_LDAP_USER_SEARCH_FILTER="Optional extra LDAP filters. Don't forget t
 DEFAULT_LDAP_USER_SEARCH_FILTER=""
 KEY_LDAP_USER_SEARCH_FILTER="ldap-user-search-filter"
 
-DESCRIPTION_LDAP_USER_SEARCH_SCOPE="Base (search only in the provided DN), one (search only in the provided DN and one level deep), or subtree (search the whole subtree)."
+DESCRIPTION_LDAP_USER_SEARCH_SCOPE="base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree). Example: one"
 DEFAULT_LDAP_USER_SEARCH_SCOPE=""
 KEY_LDAP_USER_SEARCH_SCOPE="ldap-user-search-scope"
 

+ 1 - 1
snap-src/bin/wekan-help

@@ -180,7 +180,7 @@ echo -e "Optional extra LDAP filters. Don't forget the outmost enclosing parenth
 echo -e "\t$ snap set $SNAP_NAME LDAP_USER_SEARCH_FILTER=''"
 echo -e "\n"
 echo -e "Ldap User Search Scope."
-echo -e "Base (search only in the provided DN), one (search only in the provided DN and one level deep), or subtree (search the whole subtree):"
+echo -e "base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree). Example: one"
 echo -e "\t$ snap set $SNAP_NAME LDAP_USER_SEARCH_SCOPE=one"
 echo -e "\n"
 echo -e "Ldap User Search Field."