diff --git a/community-resources/src/idea/IdeaApplicationInfo.xml b/community-resources/src/idea/IdeaApplicationInfo.xml index 762ac1d64d37..9356fe90f2f9 100644 --- a/community-resources/src/idea/IdeaApplicationInfo.xml +++ b/community-resources/src/idea/IdeaApplicationInfo.xml @@ -2,7 +2,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jetbrains.org/intellij/schema/application-info http://jetbrains.org/intellij/schema/ApplicationInfo.xsd"> - + diff --git a/platform/core-api/src/com/intellij/openapi/application/IdeUrlTrackingParametersProvider.java b/platform/core-api/src/com/intellij/openapi/application/IdeUrlTrackingParametersProvider.java new file mode 100644 index 000000000000..05a02ed6fe43 --- /dev/null +++ b/platform/core-api/src/com/intellij/openapi/application/IdeUrlTrackingParametersProvider.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. + */ +package com.intellij.openapi.application; + +import com.intellij.openapi.components.ServiceManager; +import org.jetbrains.annotations.NotNull; + +/** + * Allows IDEs to add tracking parameters to URLs which are opened from IDE and lead to company sites (e.g. download/update links, product documentation). + * Override this service in your IDE to append tracking parameters to these URLs if you need to collect statistics on your site. + *
+ * This service isn't supposed to be overridden in regular plugins. + */ +public class IdeUrlTrackingParametersProvider { + public static IdeUrlTrackingParametersProvider getInstance() { + return ServiceManager.getService(IdeUrlTrackingParametersProvider.class); + } + + /** + * @return {@code originalUrl} with appended parameters + */ + @NotNull + public String augmentUrl(@NotNull String originalUrl) { + return originalUrl; + } +} diff --git a/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java b/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java index d1d5dcfbd0ad..a744d0fafbb8 100644 --- a/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java @@ -18,6 +18,7 @@ package com.intellij.openapi.application.impl; import com.google.common.annotations.VisibleForTesting; import com.intellij.ide.plugins.PluginManagerCore; import com.intellij.openapi.application.ApplicationNamesInfo; +import com.intellij.openapi.application.IdeUrlTrackingParametersProvider; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.application.ex.ApplicationInfoEx; import com.intellij.openapi.util.BuildNumber; @@ -28,7 +29,6 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.JBColor; import com.intellij.util.ArrayUtil; -import com.intellij.util.ObjectUtils; import com.intellij.util.PlatformUtils; import com.intellij.util.SystemProperties; import com.intellij.util.containers.ContainerUtil; @@ -331,7 +331,7 @@ public class ApplicationInfoImpl extends ApplicationInfoEx { @Override public String getCompanyURL() { - return myCompanyUrl; + return IdeUrlTrackingParametersProvider.getInstance().augmentUrl(myCompanyUrl); } @Nullable diff --git a/platform/platform-api/src/com/intellij/ide/customization/UtmIdeUrlTrackingParametersProvider.java b/platform/platform-api/src/com/intellij/ide/customization/UtmIdeUrlTrackingParametersProvider.java new file mode 100644 index 000000000000..96d34e5746c4 --- /dev/null +++ b/platform/platform-api/src/com/intellij/ide/customization/UtmIdeUrlTrackingParametersProvider.java @@ -0,0 +1,37 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. + */ +package com.intellij.ide.customization; + +import com.intellij.openapi.application.ApplicationInfo; +import com.intellij.openapi.application.IdeUrlTrackingParametersProvider; +import com.intellij.openapi.diagnostic.Logger; +import org.apache.http.client.utils.URIBuilder; +import org.jetbrains.annotations.NotNull; + +import java.net.URISyntaxException; + +/** + * @author nik + */ +public class UtmIdeUrlTrackingParametersProvider extends IdeUrlTrackingParametersProvider { + private static final Logger LOG = Logger.getInstance(UtmIdeUrlTrackingParametersProvider.class); + + @NotNull + @Override + public String augmentUrl(@NotNull String originalUrl) { + try { + ApplicationInfo info = ApplicationInfo.getInstance(); + String productVersion = info.getMajorVersion() + "." + info.getMinorVersionMainPart(); + return new URIBuilder(originalUrl).addParameter("utm_source", "product") + .addParameter("utm_medium", "link") + .addParameter("utm_campaign", info.getBuild().getProductCode()) + .addParameter("utm_content", productVersion) + .build().toString(); + } + catch (URISyntaxException e) { + LOG.warn(originalUrl, e); + return originalUrl; + } + } +} diff --git a/platform/platform-impl/src/com/intellij/help/impl/HelpManagerImpl.java b/platform/platform-impl/src/com/intellij/help/impl/HelpManagerImpl.java index be72ac021384..7a68ec1304b1 100644 --- a/platform/platform-impl/src/com/intellij/help/impl/HelpManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/help/impl/HelpManagerImpl.java @@ -23,6 +23,7 @@ import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.PluginManagerCore; import com.intellij.internal.statistic.UsageTrigger; import com.intellij.openapi.application.ApplicationInfo; +import com.intellij.openapi.application.IdeUrlTrackingParametersProvider; import com.intellij.openapi.application.ex.ApplicationInfoEx; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.ExtensionPointName; @@ -31,7 +32,6 @@ import com.intellij.openapi.help.WebHelpProvider; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.text.StringUtil; import com.intellij.reference.SoftReference; -import com.intellij.util.PlatformUtils; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; @@ -86,14 +86,7 @@ public class HelpManagerImpl extends HelpManager { if (!url.endsWith("/")) url += "/"; url += productVersion + "/?" + id; - if (PlatformUtils.isJetBrainsProduct()) { - String productCode = info.getBuild().getProductCode(); - if(!StringUtil.isEmpty(productCode)) { - url += "&utm_source=from_product&utm_medium=help_link&utm_campaign=" + productCode + "&utm_content=" + productVersion; - } - } - - BrowserUtil.browse(url); + BrowserUtil.browse(IdeUrlTrackingParametersProvider.getInstance().augmentUrl(url)); return; } diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateInfoDialog.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateInfoDialog.java index 5bf61c31fa2f..1ad463dfb18c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateInfoDialog.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateInfoDialog.java @@ -8,10 +8,7 @@ import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.notification.Notification; import com.intellij.notification.NotificationListener; import com.intellij.notification.NotificationType; -import com.intellij.openapi.application.ApplicationInfo; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ApplicationNamesInfo; -import com.intellij.openapi.application.PathManager; +import com.intellij.openapi.application.*; import com.intellij.openapi.application.ex.ApplicationEx; import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.application.impl.ApplicationImpl; @@ -33,7 +30,6 @@ import com.intellij.util.SystemProperties; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.text.DateFormatUtil; import com.intellij.util.ui.JBUI; -import org.apache.http.client.utils.URIBuilder; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -43,7 +39,6 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.io.File; import java.io.IOException; -import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; @@ -338,18 +333,6 @@ class UpdateInfoDialog extends AbstractUpdateDialog { } private static String augmentUrl(String url) { - try { - ApplicationInfo info = ApplicationInfo.getInstance(); - String productVersion = info.getMajorVersion() + "." + info.getMinorVersionMainPart(); - return new URIBuilder(url).addParameter("utm_source", "product") - .addParameter("utm_medium", "link") - .addParameter("utm_campaign", info.getBuild().getProductCode()) - .addParameter("utm_content", productVersion) - .build().toString(); - } - catch (URISyntaxException e) { - Logger.getInstance(UpdateInfoDialog.class).warn(url, e); - return url; - } + return IdeUrlTrackingParametersProvider.getInstance().augmentUrl(url); } } \ No newline at end of file diff --git a/platform/platform-resources/src/META-INF/PlatformExtensions.xml b/platform/platform-resources/src/META-INF/PlatformExtensions.xml index 499cd99cd8ea..64f5bdbaed2b 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensions.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensions.xml @@ -152,6 +152,8 @@ + + - + diff --git a/python/educational-python/resources/idea/PyCharmEduApplicationInfo.xml b/python/educational-python/resources/idea/PyCharmEduApplicationInfo.xml index bb5b1da9297d..57146632e3cc 100644 --- a/python/educational-python/resources/idea/PyCharmEduApplicationInfo.xml +++ b/python/educational-python/resources/idea/PyCharmEduApplicationInfo.xml @@ -2,7 +2,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jetbrains.org/intellij/schema/application-info http://jetbrains.org/intellij/schema/ApplicationInfo.xsd"> - + + diff --git a/python/ide/src/META-INF/PyCharmCorePlugin.xml b/python/ide/src/META-INF/PyCharmCorePlugin.xml index 3e1f95d0b15b..c60c1bcb06df 100644 --- a/python/ide/src/META-INF/PyCharmCorePlugin.xml +++ b/python/ide/src/META-INF/PyCharmCorePlugin.xml @@ -13,4 +13,10 @@ + + + + diff --git a/python/python-community-ide-resources/resources/idea/PyCharmCoreApplicationInfo.xml b/python/python-community-ide-resources/resources/idea/PyCharmCoreApplicationInfo.xml index edcfd1d9c8c7..c6350af0bd84 100644 --- a/python/python-community-ide-resources/resources/idea/PyCharmCoreApplicationInfo.xml +++ b/python/python-community-ide-resources/resources/idea/PyCharmCoreApplicationInfo.xml @@ -2,7 +2,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jetbrains.org/intellij/schema/application-info http://jetbrains.org/intellij/schema/ApplicationInfo.xsd"> - + +