diff --git a/README.md b/README.md index 4a17d7c358..e5ea41d6b8 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Free, open source Project Management software [![License](http://img.shields.io/badge/License-AGPLv3-orange.svg)](https://www.gnu.org/licenses/agpl-3.0.en.html) [![Project Stats](https://www.openhub.net/p/mycollab/widgets/project_thin_badge.gif)](https://www.openhub.net/p/mycollab) [![Build](https://travis-ci.org/MyCollab/mycollab.svg)](https://travis-ci.org/MyCollab/mycollab) -[![Version](https://img.shields.io/badge/Version-7.0.0-brightgreen.svg)](https://community.mycollab.com/) +[![Version](https://img.shields.io/badge/Version-7.0.0-brightgreen.svg)](https://docs.mycollab.com/) [![Github](https://img.shields.io/github/downloads/MyCollab/mycollab/total.svg)](https://github.com/MyCollab/mycollab/releases) @@ -11,48 +11,48 @@ MyCollab is the free and open source project management software. Intuitive UI,
- - Project Dashboard + + Project Dashboard
Project Dashboard
- - Bug Dashboard + + Ticket Dashboard
- Bug Dashboard + Ticket Dashboard
- - Task Dashboard + + Kanban Board
- Task Dashboard + Kanban Board
- - Kanban Board + + Task View
- Kanban Board + Task View
- - Roadmap + + Members
- Roadmap + Members
- - Project Members + + Settings
- Project Members + Settings
@@ -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)
  • French (Country \ - code: fr_FR) (18% - Contributor: BonnetYB, Cpichard, CreationsUnivers)
  • Chinese (Country code: zh_CN) (99% - \ - Contributor: Ying_Yuan)
  • Portuguese (Brazil) (Country code: pt_BR) (27% - Contributor: Eduardoflt, Denis \ - Martins)
  • Russian (Country code: ru_RU) (3% - Evkin)
  • \ -
  • Danish (Contry code: da_DA) (10% - Contributor: KrestenB)
  • Indonesia (Contry code: id_ID) (20% - \ - Contributor: Farizichwan)
  • Spanish (Contry code: es) (99% - Contributor: Massaki)
You \ - can help us translate MyCollab to your language by following this guideline +
  • German (Country code: de_DE) (55% - Contributor: Marco Gantenbein, Lotnot)
  • French (Country \ + code: fr_FR) (19% - Contributor: BonnetYB, Cpichard, CreationsUnivers)
  • Chinese (Country code: zh_CN) (88% - \ + Contributor: Ying_Yuan)
  • Portuguese (Brazil) (Country code: pt_BR) (31% - Contributor: Eduardoflt, Denis \ + Martins)
  • Russian (Country code: ru_RU) (43% - Evkin)
  • \ +
  • Danish (Contry code: da_DA) (12% - Contributor: KrestenB)
  • Indonesia (Contry code: id_ID) (25% - \ + Contributor: Farizichwan)
  • Spanish (Contry code: es) (88% - Contributor: Massaki)
  • 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)
    • Portugués (Brasil) (Código de idioma: pt_BR) (27% - Autor: Eduardoflt, Denis Martins)
    • Ruso (Código de idioma: ru_RU) (3% - Evkin)
    • 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_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)
    • Portugués (Brasil) (Código de idioma: pt_BR) (27% - Autor: Eduardoflt, Denis Martins)
    • Ruso (Código de idioma: ru_RU) (3% - Evkin)
    • 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支持以下各种语言:
      \n
    • 英语 (100%)
    • \n
    • 德语 (国家代码: de_DE) (68% - 贡献者: Marco Gantenbein)
    • \n
    • 法语 (Country code: fr_FR) (17% - 贡献者: BonnetYB, Cpichard)
    • \n
    • 中文 (国家代码: zh_CN) (14% - 贡献者: Dawnchen, Wilkance)
    • \n
    • 葡萄牙语 (Brazil) (国家代码: pt_BR) (35% - 贡献者: Eduardoflt, Denis Martins)
    • \n
    • 丹麦语 (国家代码: da_DA) (13% - 贡献者: KrestenB)
    \n 你可以通过以下链接帮助 MyCollab 翻译成你自己的语言 参考 +OPT_SUPPORTED_LANGUAGES_INTRO= MyCollab支持以下各种语言:
      \n
    • 英语 (100%)
    • \n
    • 德语 (国家代码: de_DE) (68% - 贡献者: Marco Gantenbein)
    • \n
    • 法语 (Country code: fr_FR) (17% - 贡献者: BonnetYB, Cpichard)
    • \n
    • 中文 (国家代码: zh_CN) (14% - 贡献者: Dawnchen, Wilkance)
    • \n
    • 葡萄牙语 (Brazil) (国家代码: pt_BR) (35% - 贡献者: Eduardoflt, Denis Martins)
    • \n
    • 丹麦语 (国家代码: da_DA) (13% - 贡献者: KrestenB)
    \n 你可以通过以下链接帮助 MyCollab 翻译成你自己的语言 参考 OPT_PREVIEW_EDIT_IMAGE=编辑和预览图像 OPT_IMAGE_EDIT_INSTRUCTION=

    以下就是你图像展示的效果.

    你可以通过拖动和重置尺寸的方式来来适当调整你的图 如果你满意图片效果的话,直接点击 同意 按钮.

    OPT_NEW_UPGRADE_IS_READY=有新的更新准备安装 diff --git a/mycollab-server-runner/src/main/resources/pageSetupFresh.ftl b/mycollab-server-runner/src/main/resources/pageSetupFresh.ftl index 759a200e7e..0dbe4c10ff 100644 --- a/mycollab-server-runner/src/main/resources/pageSetupFresh.ftl +++ b/mycollab-server-runner/src/main/resources/pageSetupFresh.ftl @@ -28,7 +28,7 @@ label {

    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;