@@ -91,18 +91,18 @@ MyCollab requires a running Java Runtime Environment (8 or greater), Java comman
## Installation
1. Download MyCollab binary - https://www.mycollab.com/self-hosted/
-2. Follow installation guideline at https://community.mycollab.com/docs/hosting-mycollab-on-your-own-server/installing-mycollab/
+2. Follow installation guideline at https://docs.mycollab.com/getting-started/installation/
-If you need to understand the more MyCollab advanced configuration settings, please visit the link https://community.mycollab.com/docs/hosting-mycollab-on-your-own-server/advanced-configuration/. You will finish reading and understanding in a matter of minutes.
+If you need to understand the more MyCollab advanced configuration settings, please visit the link https://docs.mycollab.com/getting-started/configuration/. You will finish reading and understanding in a matter of minutes.
If you want to customize MyCollab, following links are useful to you:
-* Setup MyCollab projects with IntelliJ https://community.mycollab.com/docs/developing-mycollab/setup-mycollab-projects-with-intellij-ide/
-* How to customize MyCollab https://community.mycollab.com/docs/developing-mycollab/customize-mycollab/
+* Setup MyCollab projects with IntelliJ https://docs.mycollab.com/development/setup-mycollab-projects-with-intellij-ide/
+* How to customize MyCollab https://docs.mycollab.com/development/customize-mycollab/
## Support
Contact the MyCollab team at:
-* Our growing FAQ https://community.mycollab.com/faq/
-* Our help page [http://support.mycollab.com/](http://support.mycollab.com/)
+* Our growing FAQ https://docs.mycollab.com/faq/
+* Our help page [http://support.mycollab.com/](https://mycollab.userecho.com/en/)
* Our web form [https://www.mycollab.com/contact/](https://www.mycollab.com/contact/)
## License & Author
diff --git a/mycollab-app-community/src/main/config/application.properties.ftl b/mycollab-app-community/src/main/config/application.properties.ftl
index f3a9df992b..8b870bc77e 100644
--- a/mycollab-app-community/src/main/config/application.properties.ftl
+++ b/mycollab-app-community/src/main/config/application.properties.ftl
@@ -1,5 +1,5 @@
#=====================================================
-# You can visit link https://community.mycollab.com/docs/hosting-mycollab-on-your-own-server/advanced-configuration/
+# You can visit link https://docs.mycollab.com/getting-started/configuration/
# to get all configuration fieldBuilder and their meanings
#=====================================================
@@ -10,6 +10,9 @@ app.siteName=${sitename}
app.notifyEmail=${mailNotify}
server.address=${serveraddress}
+server.port=8080
+
+# You do not change the rest server information if you are not sure what you are doing
server.apiUrl=https://api.mycollab.com/
server.storageSystem=file
server.siteUrl=http://%s:%d/
diff --git a/mycollab-config/src/main/java/com/mycollab/configuration/ApplicationConfiguration.kt b/mycollab-config/src/main/java/com/mycollab/configuration/ApplicationConfiguration.kt
index 32f39275bf..7f08122af1 100644
--- a/mycollab-config/src/main/java/com/mycollab/configuration/ApplicationConfiguration.kt
+++ b/mycollab-config/src/main/java/com/mycollab/configuration/ApplicationConfiguration.kt
@@ -25,11 +25,10 @@ import org.springframework.stereotype.Component
*/
@Component
@ConfigurationProperties(prefix = "app")
-class ApplicationConfiguration(var siteName: String = "MyCollab", var description: String? = "", var facebookUrl: String? = "",
- var twitterUrl: String? = "", var googleUrl: String? = "",
- var linkedinUrl: String? = "", var notifyEmail: String) {
-
- constructor() : this("", "", "", "", "", "", "")
+class ApplicationConfiguration(var siteName: String = "MyCollab", var description: String = "",
+ var facebookUrl: String = "", var twitterUrl: String = "",
+ var googleUrl: String = "", var linkedinUrl: String = "",
+ var notifyEmail: String = "noreply@mycollab.com") {
fun defaultUrls() =
mutableMapOf("facebook_url" to (facebookUrl ?: ""),
diff --git a/mycollab-config/src/main/java/com/mycollab/configuration/ServerConfiguration.kt b/mycollab-config/src/main/java/com/mycollab/configuration/ServerConfiguration.kt
index 2cab9c5953..9a1c771001 100644
--- a/mycollab-config/src/main/java/com/mycollab/configuration/ServerConfiguration.kt
+++ b/mycollab-config/src/main/java/com/mycollab/configuration/ServerConfiguration.kt
@@ -25,12 +25,11 @@ import org.springframework.stereotype.Component
*/
@Component
@ConfigurationProperties(prefix = "server")
-class ServerConfiguration(var storageSystem: String = STORAGE_FILE, var port: Int,
- var address: String?,
- var apiUrl: String, var pullMethod: String?, var siteUrl: String,
- var resourceDownloadUrl: String, var cdnUrl: String) {
-
- constructor() : this("", 8080, "", "", "", "", "", "")
+class ServerConfiguration(var storageSystem: String = STORAGE_FILE, var port: Int = 8080,
+ var address: String = "",
+ var apiUrl: String = "", var pullMethod: String = "", var siteUrl: String = "",
+ var resourceDownloadUrl: String = "", var cdnUrl: String = "",
+ var dataDir: String = "") {
fun getApiUrl(path: String) = "$apiUrl$path"
diff --git a/mycollab-config/src/main/resources/logback-spring.xml b/mycollab-config/src/main/resources/logback-spring.xml
index 7d2b50e738..a963f9e0dc 100644
--- a/mycollab-config/src/main/resources/logback-spring.xml
+++ b/mycollab-config/src/main/resources/logback-spring.xml
@@ -33,7 +33,7 @@
-
+
diff --git a/mycollab-esb/src/main/java/com/mycollab/module/user/esb/SendUserInvitationCommand.kt b/mycollab-esb/src/main/java/com/mycollab/module/user/esb/SendUserInvitationCommand.kt
index 6e13d2348d..d6a25ce87c 100644
--- a/mycollab-esb/src/main/java/com/mycollab/module/user/esb/SendUserInvitationCommand.kt
+++ b/mycollab-esb/src/main/java/com/mycollab/module/user/esb/SendUserInvitationCommand.kt
@@ -53,6 +53,8 @@ class SendUserInvitationCommand(private val userService: UserService,
@Subscribe
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
fun execute(event: SendUserInvitationEvent) {
+ // Trick to make sure the saving user successfully to database
+ Thread.sleep(5000)
val inviteeUser = userService.findUserInAccount(event.invitee, event.sAccountId)
if (inviteeUser != null) {
contentGenerator.putVariable("siteUrl", deploymentMode.getSiteUrl(inviteeUser.subDomain))
diff --git a/mycollab-localization/src/main/resources/common-shell_bg-BG.properties b/mycollab-localization/src/main/resources/common-shell_bg-BG.properties
index d62f03b046..5f8fb63543 100644
--- a/mycollab-localization/src/main/resources/common-shell_bg-BG.properties
+++ b/mycollab-localization/src/main/resources/common-shell_bg-BG.properties
@@ -20,7 +20,7 @@ OPT_LOGIN_PAGE=Входяща страница
OPT_NO_NOTIFICATION=Няма съобщения
OPT_REQUEST_UPLOAD_AVATAR=Нека хората да ви разпознаят
OPT_HAVING_NEW_VERSION=Това е моят нов в имидж MyCollab {0}
-OPT_SUPPORTED_LANGUAGES_INTRO=Езиците който използвате в MyCollab са:
Английски(100%)
Немски (Код на държавата: de_DE) (50% - сътрудник: Марко Гантенбеин, Lotnot)
Френски (Код на държавата: fr_FR) (18% - сътрудник: BonnetYB, Cpichard, CreationsUnivers)
Китайски(Код на държавата: zh_CN) (93% -сътрудник: Ying_Yuan)
Португалски (Бразилия) Код на държавата: pt_BR) (27% -сътрудник: Eduardoflt, Denis Martins)
Русия (Код на държавата: ru_RU) (3% - Evkin)
Датски (Код на държавата: da_DA) (10% - сътрудник: KrestenB)
Индонезийски (Код на държавата: id_ID) (20% - сътрудник: Farizichwan)
Испански (Код на държавата: es) (99% - сътрудник: Massaki)
Може да ни помогнете да преведем MyCollab на вашия език като посетите тази страница guideline
+OPT_SUPPORTED_LANGUAGES_INTRO=Езиците който използвате в MyCollab са:
Английски(100%)
Немски (Код на държавата: de_DE) (50% - сътрудник: Марко Гантенбеин, Lotnot)
Френски (Код на държавата: fr_FR) (18% - сътрудник: BonnetYB, Cpichard, CreationsUnivers)
Китайски(Код на държавата: zh_CN) (93% -сътрудник: Ying_Yuan)
Португалски (Бразилия) Код на държавата: pt_BR) (27% -сътрудник: Eduardoflt, Denis Martins)
Русия (Код на държавата: ru_RU) (3% - Evkin)
Датски (Код на държавата: da_DA) (10% - сътрудник: KrestenB)
Индонезийски (Код на държавата: id_ID) (20% - сътрудник: Farizichwan)
Испански (Код на държавата: es) (99% - сътрудник: Massaki)
Може да ни помогнете да преведем MyCollab на вашия език като посетите тази страница guideline
OPT_PREVIEW_EDIT_IMAGE=Редактирай и прегледай изображението
OPT_IMAGE_EDIT_INSTRUCTION=
Отдолу е показано как щеизглежда изображението.
За да я регулирате, може да я дръпнете и да оразмерите чрез квадратчетоза за избиране отдолу . КОгато снимката ви е готова натиснете Приемам Бутон.
OPT_NEW_UPGRADE_IS_READY=Нова актуализация е готова за инсталиране
diff --git a/mycollab-localization/src/main/resources/common-shell_en-US.properties b/mycollab-localization/src/main/resources/common-shell_en-US.properties
index bae319ffb8..e748d2a8f1 100644
--- a/mycollab-localization/src/main/resources/common-shell_en-US.properties
+++ b/mycollab-localization/src/main/resources/common-shell_en-US.properties
@@ -23,14 +23,14 @@ OPT_NO_NOTIFICATION=There is no notification right now
OPT_REQUEST_UPLOAD_AVATAR=Let people recognize you
OPT_HAVING_NEW_VERSION=There is the new MyCollab version {0}
OPT_SUPPORTED_LANGUAGES_INTRO=You can use MyCollab with the following languages:
English (100%)\
-
German (Country code: de_DE) (50% - Contributor: Marco Gantenbein, Lotnot)
You \
+ can help us translate MyCollab to your language by following this guideline
OPT_PREVIEW_EDIT_IMAGE=Edit and preview image
OPT_IMAGE_EDIT_INSTRUCTION=
To the below is what your image will look like\
.
To make adjustment, you can drag around and resize the selection square \
diff --git a/mycollab-localization/src/main/resources/common-shell_es-ES.properties b/mycollab-localization/src/main/resources/common-shell_es-ES.properties
index 0b95642acf..ad785d3a85 100644
--- a/mycollab-localization/src/main/resources/common-shell_es-ES.properties
+++ b/mycollab-localization/src/main/resources/common-shell_es-ES.properties
@@ -20,7 +20,7 @@ OPT_LOGIN_PAGE=Página de inicio de sesión
OPT_NO_NOTIFICATION=No hay notificaciones en este momento
OPT_REQUEST_UPLOAD_AVATAR=Dejar que la gente me reconozca
OPT_HAVING_NEW_VERSION=Hay una versión más nueva de MyCollab: {0}
-OPT_SUPPORTED_LANGUAGES_INTRO=Puedes usar MyCollab con los siguientes lenguajes:
Inglés (100%)
Alemán (Código de idioma: de_DE) (50% - Autor: Marco Gantenbein, Lotnot)
Francés (Código de idioma: fr_FR) (18% - Autor: BonnetYB, Cpichard, CreationsUnivers)
Chino (Código de idioma: zh_CN) (93% - Autor: Ying_Yuan)
Danés (Código de idioma: da_DA) (10% - Autor: KrestenB)
Indonesia (Código de idioma: id_ID) (20% - Autor: Farizichwan)
Español (Código de idioma: es) (99% - Autor: Massaki)
Puedes ayudarnos a traducir MyCollab a tu idioma siguiendo esta guía
OPT_PREVIEW_EDIT_IMAGE=Editar y previsualizar imágen
OPT_IMAGE_EDIT_INSTRUCTION=
A continuación es como se verá su imágen.
Para realizar ajustes, puede arrastrar alrededor y cambiar el tamaño del cuadro de selección. Cuando esté conforme con su foto, haga click en el botón Aceptar.
OPT_NEW_UPGRADE_IS_READY=Una nueva actualización está lista para instalar
diff --git a/mycollab-localization/src/main/resources/common-shell_zh-CN.properties b/mycollab-localization/src/main/resources/common-shell_zh-CN.properties
index 9bb8e81d79..0c6d385306 100644
--- a/mycollab-localization/src/main/resources/common-shell_zh-CN.properties
+++ b/mycollab-localization/src/main/resources/common-shell_zh-CN.properties
@@ -20,7 +20,7 @@ OPT_LOGIN_PAGE=登录页
OPT_NO_NOTIFICATION=目前没有通知消息
OPT_REQUEST_UPLOAD_AVATAR=让大家认识你
OPT_HAVING_NEW_VERSION=有新版本 {0} 可用
-OPT_SUPPORTED_LANGUAGES_INTRO= MyCollab支持以下各种语言:
MyCollab is well tested on various platforms include Windows, Linux and MacOS. We have been
spending countless hours to do the installation testing on
as many machines as possible. If you can not install MyCollab successfully, please raise your case in
- our Support
+ our Support
page
@@ -52,7 +52,7 @@ label {
-
You can get this info from your web host. It could be an IP address or server name. You must not include the server port in this value. If you want to change the server port, please use this way
+
You can get this info from your web host. It could be an IP address or server name. You must not include the server port in this value. If you want to change the server port, please use this way
diff --git a/mycollab-services/src/main/java/com/mycollab/module/mail/DefaultMailer.kt b/mycollab-services/src/main/java/com/mycollab/module/mail/DefaultMailer.kt
index 612842e7e3..02ab254a72 100644
--- a/mycollab-services/src/main/java/com/mycollab/module/mail/DefaultMailer.kt
+++ b/mycollab-services/src/main/java/com/mycollab/module/mail/DefaultMailer.kt
@@ -96,8 +96,8 @@ class DefaultMailer(private val emailConf: EmailConfiguration) : IMailer {
}
override fun sendHTMLMail(fromEmail: String, fromName: String, toEmails: List,
- ccEmails: List?, bccEmails: List?,
- subject: String, html: String, attachments: List?) {
+ ccEmails: List?, bccEmails: List?,
+ subject: String, html: String, attachments: List?) {
try {
when (attachments) {
null -> sendHTMLMail(fromEmail, fromName, toEmails, ccEmails, bccEmails, subject, html)
diff --git a/mycollab-services/src/main/resources/validation.xml b/mycollab-services/src/main/resources/validation.xml
index 7094cc02ef..fd08c50556 100644
--- a/mycollab-services/src/main/resources/validation.xml
+++ b/mycollab-services/src/main/resources/validation.xml
@@ -1,3 +1,4 @@
+
- Short name must be less than 3 characters, contains only characters and numberics
+ must be less than 3 characters, contains only characters and numberics
diff --git a/mycollab-web-community/src/main/java/com/mycollab/community/shell/view/MainViewImpl.java b/mycollab-web-community/src/main/java/com/mycollab/community/shell/view/MainViewImpl.java
index 5a0b5a220d..5d9e2539f9 100644
--- a/mycollab-web-community/src/main/java/com/mycollab/community/shell/view/MainViewImpl.java
+++ b/mycollab-web-community/src/main/java/com/mycollab/community/shell/view/MainViewImpl.java
@@ -121,19 +121,19 @@ protected MHorizontalLayout buildAccountMenuLayout() {
accountPopupContent.addSeparator();
MButton helpBtn = new MButton(UserUIContext.getMessage(GenericI18Enum.ACTION_HELP)).withIcon(VaadinIcons.ACADEMY_CAP);
- ExternalResource helpRes = new ExternalResource("https://community.mycollab.com/meet-mycollab/");
+ ExternalResource helpRes = new ExternalResource("https://docs.mycollab.com/user-guide/");
BrowserWindowOpener helpOpener = new BrowserWindowOpener(helpRes);
helpOpener.extend(helpBtn);
accountPopupContent.addOption(helpBtn);
MButton supportBtn = new MButton(UserUIContext.getMessage(GenericI18Enum.BUTTON_SUPPORT)).withIcon(VaadinIcons.ACADEMY_CAP);
- ExternalResource supportRes = new ExternalResource("http://support.mycollab.com/");
+ ExternalResource supportRes = new ExternalResource("https://mycollab.userecho.com/en/");
BrowserWindowOpener supportOpener = new BrowserWindowOpener(supportRes);
supportOpener.extend(supportBtn);
accountPopupContent.addOption(supportBtn);
MButton translateBtn = new MButton(UserUIContext.getMessage(GenericI18Enum.ACTION_TRANSLATE)).withIcon(VaadinIcons.PENCIL);
- ExternalResource translateRes = new ExternalResource("https://community.mycollab.com/docs/developing-mycollab/translating/");
+ ExternalResource translateRes = new ExternalResource("https://docs.mycollab.com/development/translating/");
BrowserWindowOpener translateOpener = new BrowserWindowOpener(translateRes);
translateOpener.extend(translateBtn);
accountPopupContent.addOption(translateBtn);
@@ -147,7 +147,7 @@ protected MHorizontalLayout buildAccountMenuLayout() {
accountPopupContent.addOption(aboutBtn);
Button releaseNotesBtn = new Button(UserUIContext.getMessage(ShellI18nEnum.OPT_RELEASE_NOTES));
- ExternalResource releaseNotesRes = new ExternalResource("https://community.mycollab.com/docs/hosting-mycollab-on-your-own-server/releases/");
+ ExternalResource releaseNotesRes = new ExternalResource("https://docs.mycollab.com/releases/");
BrowserWindowOpener releaseNotesOpener = new BrowserWindowOpener(releaseNotesRes);
releaseNotesOpener.extend(releaseNotesBtn);
diff --git a/mycollab-web-community/src/main/java/com/mycollab/community/shell/view/components/AdRequestWindow.java b/mycollab-web-community/src/main/java/com/mycollab/community/shell/view/components/AdRequestWindow.java
index 89e43af460..c8949e7b82 100644
--- a/mycollab-web-community/src/main/java/com/mycollab/community/shell/view/components/AdRequestWindow.java
+++ b/mycollab-web-community/src/main/java/com/mycollab/community/shell/view/components/AdRequestWindow.java
@@ -66,7 +66,7 @@ public AdRequestWindow(final SimpleUser user) {
Label testimonialAd = ELabel.html("A chance to get a free license of the premium MyCollab software for 10 users" +
". If you execute one of the following:");
Label rateSourceforge = ELabel.html(new Div().appendChild(new Text(" " + VaadinIcons.FLAG_CHECKERED.getHtml()),
- DivLessFormatter.EMPTY_SPACE, new A("https://community.mycollab.com/docs/developing-mycollab/translating/", "_blank")
+ DivLessFormatter.EMPTY_SPACE, new A("https://docs.mycollab.com/docs/development/translating/", "_blank")
.appendText("Localize MyCollab to your language at least 20% of the phrases")).setStyle
("color:#006dac").write());
MButton testimonialBtn = new MButton("Write a testimonial which is selected to post on our website",
diff --git a/mycollab-web/src/main/java/com/mycollab/module/project/view/bug/ToggleBugSummaryField.java b/mycollab-web/src/main/java/com/mycollab/module/project/view/bug/ToggleBugSummaryField.java
index 5f7fdc3e60..4e7af03a1a 100644
--- a/mycollab-web/src/main/java/com/mycollab/module/project/view/bug/ToggleBugSummaryField.java
+++ b/mycollab-web/src/main/java/com/mycollab/module/project/view/bug/ToggleBugSummaryField.java
@@ -37,6 +37,8 @@
import com.mycollab.vaadin.ui.ELabel;
import com.mycollab.vaadin.web.ui.AbstractToggleSummaryField;
import com.mycollab.vaadin.web.ui.WebThemes;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.event.ShortcutListener;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.TextField;
import com.vaadin.ui.themes.ValoTheme;
@@ -74,7 +76,12 @@ class ToggleBugSummaryField extends AbstractToggleSummaryField {
editField.focus();
ToggleBugSummaryField.this.addComponent(editField);
ToggleBugSummaryField.this.removeStyleName("editable-field");
- editField.addValueChangeListener(valueChangeEvent -> updateFieldValue(editField));
+ editField.addShortcutListener(new ShortcutListener("enter", ShortcutAction.KeyCode.ENTER, (int[]) null) {
+ @Override
+ public void handleAction(Object sender, Object target) {
+ updateFieldValue(editField);
+ }
+ });
editField.addBlurListener(blurEvent -> updateFieldValue(editField));
isRead = !isRead;
}
diff --git a/mycollab-web/src/main/java/com/mycollab/module/project/view/milestone/ToggleMilestoneSummaryField.java b/mycollab-web/src/main/java/com/mycollab/module/project/view/milestone/ToggleMilestoneSummaryField.java
index 50057d8531..1300881945 100644
--- a/mycollab-web/src/main/java/com/mycollab/module/project/view/milestone/ToggleMilestoneSummaryField.java
+++ b/mycollab-web/src/main/java/com/mycollab/module/project/view/milestone/ToggleMilestoneSummaryField.java
@@ -47,6 +47,8 @@
import com.mycollab.vaadin.web.ui.AbstractToggleSummaryField;
import com.mycollab.vaadin.web.ui.ConfirmDialogExt;
import com.mycollab.vaadin.web.ui.WebThemes;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.event.ShortcutListener;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.shared.ui.MarginInfo;
import com.vaadin.ui.CheckBox;
@@ -129,7 +131,12 @@ class ToggleMilestoneSummaryField extends AbstractToggleSummaryField {
editField.focus();
ToggleMilestoneSummaryField.this.addComponent(editField);
ToggleMilestoneSummaryField.this.removeStyleName("editable-field");
- editField.addValueChangeListener(valueChangeEvent -> updateFieldValue(editField));
+ editField.addShortcutListener(new ShortcutListener("enter", ShortcutAction.KeyCode.ENTER, (int[]) null) {
+ @Override
+ public void handleAction(Object sender, Object target) {
+ updateFieldValue(editField);
+ }
+ });
editField.addBlurListener(blurEvent -> updateFieldValue(editField));
isRead = !isRead;
}
diff --git a/mycollab-web/src/main/java/com/mycollab/module/project/view/task/TaskPreviewForm.java b/mycollab-web/src/main/java/com/mycollab/module/project/view/task/TaskPreviewForm.java
index b7d807fc1d..84a71564d5 100644
--- a/mycollab-web/src/main/java/com/mycollab/module/project/view/task/TaskPreviewForm.java
+++ b/mycollab-web/src/main/java/com/mycollab/module/project/view/task/TaskPreviewForm.java
@@ -45,10 +45,7 @@
import com.mycollab.vaadin.EventBusFactory;
import com.mycollab.vaadin.UserUIContext;
import com.mycollab.vaadin.ui.*;
-import com.mycollab.vaadin.ui.field.DefaultViewField;
-import com.mycollab.vaadin.ui.field.I18nFormViewField;
-import com.mycollab.vaadin.ui.field.RichTextViewField;
-import com.mycollab.vaadin.ui.field.StyleViewField;
+import com.mycollab.vaadin.ui.field.*;
import com.mycollab.vaadin.web.ui.*;
import com.vaadin.data.HasValue;
import com.vaadin.icons.VaadinIcons;
@@ -103,8 +100,7 @@ protected HasValue> onCreateField(final Object propertyId) {
return field;
}
} else if (Task.Field.isestimated.equalTo(propertyId)) {
- return new DefaultViewField(Boolean.TRUE.equals(beanItem.getIsestimated()) ?
- UserUIContext.getMessage(GenericI18Enum.ACTION_YES) : UserUIContext.getMessage(GenericI18Enum.ACTION_NO));
+ return new BooleanViewField();
} else if (Task.Field.description.equalTo(propertyId)) {
return new RichTextViewField();
} else if ("section-subTasks".equals(propertyId)) {
diff --git a/mycollab-web/src/main/java/com/mycollab/module/project/view/task/ToggleTaskSummaryField.java b/mycollab-web/src/main/java/com/mycollab/module/project/view/task/ToggleTaskSummaryField.java
index 949433ae84..9d0a1b55ca 100644
--- a/mycollab-web/src/main/java/com/mycollab/module/project/view/task/ToggleTaskSummaryField.java
+++ b/mycollab-web/src/main/java/com/mycollab/module/project/view/task/ToggleTaskSummaryField.java
@@ -44,6 +44,8 @@
import com.mycollab.vaadin.web.ui.AbstractToggleSummaryField;
import com.mycollab.vaadin.web.ui.ConfirmDialogExt;
import com.mycollab.vaadin.web.ui.WebThemes;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.event.ShortcutListener;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.shared.ui.MarginInfo;
import com.vaadin.ui.CheckBox;
@@ -126,7 +128,12 @@ class ToggleTaskSummaryField extends AbstractToggleSummaryField {
editField.focus();
ToggleTaskSummaryField.this.addComponent(editField);
ToggleTaskSummaryField.this.removeStyleName("editable-field");
- editField.addValueChangeListener(valueChangeEvent -> updateFieldValue(editField));
+ editField.addShortcutListener(new ShortcutListener("enter", ShortcutAction.KeyCode.ENTER, (int[]) null) {
+ @Override
+ public void handleAction(Object sender, Object target) {
+ updateFieldValue(editField);
+ }
+ });
editField.addBlurListener(blurEvent -> updateFieldValue(editField));
isRead = !isRead;
}
diff --git a/mycollab-web/src/main/java/com/mycollab/module/project/view/ticket/ToggleTicketSummaryField.java b/mycollab-web/src/main/java/com/mycollab/module/project/view/ticket/ToggleTicketSummaryField.java
index cd0da83d6b..1d5d3b633c 100644
--- a/mycollab-web/src/main/java/com/mycollab/module/project/view/ticket/ToggleTicketSummaryField.java
+++ b/mycollab-web/src/main/java/com/mycollab/module/project/view/ticket/ToggleTicketSummaryField.java
@@ -46,6 +46,8 @@
import com.mycollab.vaadin.web.ui.AbstractToggleSummaryField;
import com.mycollab.vaadin.web.ui.ConfirmDialogExt;
import com.mycollab.vaadin.web.ui.WebThemes;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.event.ShortcutListener;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.TextField;
@@ -81,18 +83,23 @@ public ToggleTicketSummaryField(ProjectTicket ticket) {
if (isRead) {
removeComponent(titleLinkLbl);
removeComponent(buttonControls);
- final TextField editField = new TextField();
+ TextField editField = new TextField();
editField.setValue(ticket.getName());
editField.setWidth("100%");
editField.focus();
addComponent(editField);
removeStyleName("editable-field");
- editField.addValueChangeListener(valueChangeEvent -> updateFieldValue(editField));
+ editField.addShortcutListener(new ShortcutListener("enter", ShortcutAction.KeyCode.ENTER, (int[]) null) {
+ @Override
+ public void handleAction(Object sender, Object target) {
+ updateFieldValue(editField);
+ }
+ });
editField.addBlurListener(blurEvent -> updateFieldValue(editField));
isRead = !isRead;
}
- }).withIcon(VaadinIcons.EDIT).withStyleName(ValoTheme.BUTTON_ICON_ALIGN_TOP);
- instantEditBtn.setDescription(UserUIContext.getMessage(GenericI18Enum.ACTION_CLICK_TO_EDIT));
+ }).withIcon(VaadinIcons.EDIT).withStyleName(ValoTheme.BUTTON_ICON_ALIGN_TOP)
+ .withDescription(UserUIContext.getMessage(GenericI18Enum.ACTION_CLICK_TO_EDIT));
buttonControls.with(instantEditBtn);
if ((ticket.isRisk() && CurrentProjectVariables.canAccess(ProjectRolePermissionCollections.RISKS))
diff --git a/mycollab-web/src/main/java/com/mycollab/module/user/accountsettings/view/AccountModuleImpl.java b/mycollab-web/src/main/java/com/mycollab/module/user/accountsettings/view/AccountModuleImpl.java
index a4c2af2db9..79d2ba8871 100644
--- a/mycollab-web/src/main/java/com/mycollab/module/user/accountsettings/view/AccountModuleImpl.java
+++ b/mycollab-web/src/main/java/com/mycollab/module/user/accountsettings/view/AccountModuleImpl.java
@@ -79,7 +79,7 @@ public AccountModuleImpl() {
MButton helpBtn = new MButton(UserUIContext.getMessage(GenericI18Enum.ACTION_HELP))
.withIcon(VaadinIcons.ACADEMY_CAP).withStyleName(WebThemes.BUTTON_LINK);
- ExternalResource helpRes = new ExternalResource("https://community.mycollab.com/docs/account-management/");
+ ExternalResource helpRes = new ExternalResource("https://docs.mycollab.com/user-guide/account-management/");
BrowserWindowOpener helpOpener = new BrowserWindowOpener(helpRes);
helpOpener.extend(helpBtn);
diff --git a/mycollab-web/src/main/java/com/mycollab/vaadin/ui/AbstractBeanFieldGroupFieldFactory.java b/mycollab-web/src/main/java/com/mycollab/vaadin/ui/AbstractBeanFieldGroupFieldFactory.java
index 63b875bc26..3b1a1aedb3 100644
--- a/mycollab-web/src/main/java/com/mycollab/vaadin/ui/AbstractBeanFieldGroupFieldFactory.java
+++ b/mycollab-web/src/main/java/com/mycollab/vaadin/ui/AbstractBeanFieldGroupFieldFactory.java
@@ -168,7 +168,6 @@ public boolean commit() {
Set> violations = validator.validate(attachForm.getBean());
if (violations.size() > 0) {
- StringBuilder errorMsg = new StringBuilder();
Ul ul = new Ul();
for (ConstraintViolation violation : violations) {
Path propertyPath = violation.getPropertyPath();
diff --git a/mycollab-web/src/main/java/com/mycollab/vaadin/ui/field/BooleanViewField.kt b/mycollab-web/src/main/java/com/mycollab/vaadin/ui/field/BooleanViewField.kt
new file mode 100644
index 0000000000..56b20b86a9
--- /dev/null
+++ b/mycollab-web/src/main/java/com/mycollab/vaadin/ui/field/BooleanViewField.kt
@@ -0,0 +1,24 @@
+package com.mycollab.vaadin.ui.field
+
+import com.mycollab.common.i18n.GenericI18Enum
+import com.mycollab.vaadin.UserUIContext
+import com.mycollab.vaadin.ui.ELabel
+import com.vaadin.ui.Component
+import com.vaadin.ui.CustomField
+
+/**
+ * @author MyCollab Ltd
+ * @since 7.0.0
+ */
+class BooleanViewField : CustomField() {
+
+ private val label = ELabel()
+
+ override fun initContent(): Component? = label
+
+ override fun doSetValue(value: Boolean?) {
+ label.value = if (value == true) UserUIContext.getMessage(GenericI18Enum.ACTION_YES) else UserUIContext.getMessage(GenericI18Enum.ACTION_NO)
+ }
+
+ override fun getValue(): Boolean? = null
+}
diff --git a/mycollab-web/src/main/java/com/mycollab/vaadin/web/ui/AbstractNotificationComponent.kt b/mycollab-web/src/main/java/com/mycollab/vaadin/web/ui/AbstractNotificationComponent.kt
index 015761f8b0..64f283941d 100644
--- a/mycollab-web/src/main/java/com/mycollab/vaadin/web/ui/AbstractNotificationComponent.kt
+++ b/mycollab-web/src/main/java/com/mycollab/vaadin/web/ui/AbstractNotificationComponent.kt
@@ -75,7 +75,7 @@ abstract class AbstractNotificationComponent : PopupButton(), PopupButton.PopupV
if (notificationItems.isNotEmpty()) {
notificationItems.forEach { addNotificationEntry(it) }
} else {
- val noItemLbl = Label(UserUIContext.getMessage(ShellI18nEnum.OPT_NO_NOTIFICATION))
+ val noItemLbl = ELabel(UserUIContext.getMessage(ShellI18nEnum.OPT_NO_NOTIFICATION)).withFullWidth()
notificationContainer.with(noItemLbl).withAlign(noItemLbl, Alignment.MIDDLE_CENTER)
}
}
@@ -168,15 +168,15 @@ abstract class AbstractNotificationComponent : PopupButton(), PopupButton.PopupV
this@AbstractNotificationComponent.isPopupVisible = false
}.withStyleName(WebThemes.BLOCK)
return MHorizontalLayout(avatarUploadLbl, uploadAvatarBtn).expand(avatarUploadLbl).withDefaultComponentAlignment(Alignment.TOP_LEFT)
+ .withFullWidth()
}
is SmtpSetupNotification -> {
val smtpBtn = MButton(UserUIContext.getMessage(GenericI18Enum.ACTION_SETUP)) { _ ->
EventBusFactory.getInstance().post(ShellEvent.GotoUserAccountModule(this, arrayOf("setup")))
this@AbstractNotificationComponent.isPopupVisible = false
}.withStyleName(WebThemes.BLOCK)
- val lbl = ELabel.html("${VaadinIcons.EXCLAMATION_CIRCLE.html} ${UserUIContext.getMessage(ShellI18nEnum.ERROR_NO_SMTP_SETTING)}")
- val lblWrapper = MCssLayout(lbl)
- return MHorizontalLayout(lblWrapper, smtpBtn).expand(lblWrapper).withDefaultComponentAlignment(Alignment.TOP_LEFT)
+ val lbl = ELabel.html("${VaadinIcons.EXCLAMATION_CIRCLE.html} ${UserUIContext.getMessage(ShellI18nEnum.ERROR_NO_SMTP_SETTING)}").withFullWidth()
+ return MHorizontalLayout(lbl, smtpBtn).expand(lbl).withDefaultComponentAlignment(Alignment.TOP_LEFT)
}
else -> return buildComponentFromNotificationExclusive(item)
}
diff --git a/mycollab-web/src/main/java/com/mycollab/vaadin/web/ui/UpgradeConfirmWindow.java b/mycollab-web/src/main/java/com/mycollab/vaadin/web/ui/UpgradeConfirmWindow.java
index 172ac50341..5e606047c0 100644
--- a/mycollab-web/src/main/java/com/mycollab/vaadin/web/ui/UpgradeConfirmWindow.java
+++ b/mycollab-web/src/main/java/com/mycollab/vaadin/web/ui/UpgradeConfirmWindow.java
@@ -66,11 +66,11 @@ public UpgradeConfirmWindow(final String version, String manualDownloadLink, fin
content.with(ELabel.html(manualInstallLink.write()));
Div manualUpgradeHowtoLink = new Div().appendText(" " + UserUIContext.getMessage(ShellI18nEnum.OPT_MANUAL_UPGRADE) + ": ")
- .appendChild(new A("https://community.mycollab.com/docs/hosting-mycollab-on-your-own-server/upgrade-mycollab-automatically/", "_blank").appendText("Link"));
+ .appendChild(new A("https://docs.mycollab.com/administration/upgrade-mycollab-automatically/", "_blank").appendText("Link"));
content.with(ELabel.html(manualUpgradeHowtoLink.write()));
Div releaseNoteLink = new Div().appendText(" " + UserUIContext.getMessage(ShellI18nEnum.OPT_RELEASE_NOTES) + ": ")
- .appendChild(new A("https://community.mycollab.com/docs/hosting-mycollab-on-your-own-server/releases/", "_blank").appendText("Link"));
+ .appendChild(new A("https://docs.mycollab.com/administration/hosting-mycollab-on-your-own-server/releases/", "_blank").appendText("Link"));
content.with(ELabel.html(releaseNoteLink.write()));
MButton skipBtn = new MButton(UserUIContext.getMessage(GenericI18Enum.ACTION_SKIP), clickEvent -> close())
diff --git a/mycollab-web/src/main/resources/VAADIN/themes/mycollab_20181214/styles.css b/mycollab-web/src/main/resources/VAADIN/themes/mycollab_20181214/styles.css
index 1166c90356..5451e7c597 100644
--- a/mycollab-web/src/main/resources/VAADIN/themes/mycollab_20181214/styles.css
+++ b/mycollab-web/src/main/resources/VAADIN/themes/mycollab_20181214/styles.css
@@ -2205,13 +2205,13 @@ div.v-window .v-panel {
}
.wizard .wizard-progress-bar {
- padding: 5px 0px;
+ padding: 6px 0px;
border-bottom: 1px solid #e5e5e5;
}
.wizard .wizard-progress-bar .v-progressbar-indicator {
background: none;
- background-color: #fdde86;
+ background-color: #46be8a;
}
.wizard .v-panel {
@@ -17045,13 +17045,13 @@ div.v-window .v-panel {
}
.wizard .wizard-progress-bar {
- padding: 5px 0px;
+ padding: 6px 0px;
border-bottom: 1px solid #e5e5e5;
}
.wizard .wizard-progress-bar .v-progressbar-indicator {
background: none;
- background-color: #fdde86;
+ background-color: #46be8a;
}
.wizard .v-panel {
@@ -19021,16 +19021,20 @@ div.v-csslayout.main-body {
margin: 0px;
}
+.v-Notification {
+ text-align: left;
+}
+
.v-Notification.v-Notification-humanized h1, .v-Notification.v-Notification-error h1, .v-Notification.v-Notification-warning h1, .v-Notification.v-Notification-tray h1 {
display: inline;
background: none;
border: none;
font-size: 18px;
- padding: 7px 10px;
+ padding: 6px 0px;
}
.v-Notification p {
- padding: 5px 10px;
+ padding: 6px 12px;
display: block;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
@@ -19043,6 +19047,10 @@ div.v-csslayout.main-body {
border: 1px solid #e5e5e5;
}
+.v-Notification.warning {
+ background-color: #ffcc00;
+}
+
.v-Notification.humanized {
background: none;
background-color: darkslategray;