From 46db590de66d29ead4016b8b1caf9cf3d89639f3 Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Mon, 15 May 2017 18:39:54 +0300 Subject: [PATCH] Added marketing parameters to campaign page url. --- map/local_ads_manager.cpp | 25 +++++++++++++++++++++++++ map/mwm_url.cpp | 25 +++++++++++++------------ platform/marketing_service.cpp | 6 ++++++ platform/marketing_service.hpp | 7 +++++++ platform/settings.hpp | 3 +-- platform/string_storage_base.hpp | 11 ++++++----- 6 files changed, 58 insertions(+), 19 deletions(-) diff --git a/map/local_ads_manager.cpp b/map/local_ads_manager.cpp index b32c2240b6..cc5ac12d08 100644 --- a/map/local_ads_manager.cpp +++ b/map/local_ads_manager.cpp @@ -12,7 +12,9 @@ #include "indexer/scales.hpp" #include "platform/http_client.hpp" +#include "platform/marketing_service.hpp" #include "platform/platform.hpp" +#include "platform/settings.hpp" #include "coding/file_name_utils.hpp" #include "coding/url_encode.hpp" @@ -22,6 +24,7 @@ #include "private.h" +#include #include #include @@ -31,6 +34,8 @@ namespace { +std::array const kMarketingParameters = {marketing::kFrom, marketing::kType, marketing::kName, + marketing::kContent, marketing::kKeyword}; std::string const kServerUrl = LOCAL_ADS_SERVER_URL; std::string const kCampaignPageUrl = LOCAL_ADS_COMPANY_PAGE_URL; @@ -143,6 +148,26 @@ std::string MakeCampaignPageURL(FeatureID const & featureId) std::ostringstream ss; ss << kCampaignPageUrl << "/" << featureId.m_mwmId.GetInfo()->GetVersion() << "/" << UrlEncode(featureId.m_mwmId.GetInfo()->GetCountryName()) << "/" << featureId.m_index; + + bool isFirstParam = true; + for (auto const & key : kMarketingParameters) + { + string value; + if (!marketing::Settings::Get(key, value)) + continue; + + if (isFirstParam) + { + ss << "?"; + isFirstParam = false; + } + else + { + ss << "&"; + } + ss << key << "=" << value; + } + return ss.str(); } } // namespace diff --git a/map/mwm_url.cpp b/map/mwm_url.cpp index 04b280de7e..23a5d830a5 100644 --- a/map/mwm_url.cpp +++ b/map/mwm_url.cpp @@ -8,6 +8,7 @@ #include "drape_frontend/visual_params.hpp" +#include "platform/marketing_service.hpp" #include "platform/settings.hpp" #include "coding/uri.hpp" @@ -24,25 +25,19 @@ namespace url_scheme { namespace lead { -char const * kFrom = "utm_source"; -char const * kType = "utm_medium"; -char const * kName = "utm_campaign"; -char const * kContent = "utm_content"; -char const * kKeyword = "utm_term"; +char const * kFrom = marketing::kFrom; +char const * kType = marketing::kType; +char const * kName = marketing::kName; +char const * kContent = marketing::kContent; +char const * kKeyword = marketing::kKeyword; struct CampaignDescription { - string m_from; - string m_type; - string m_name; - string m_content; - string m_keyword; - void Write() const { if (!IsValid()) { - LOG(LERROR, ("Invalid campaign description!")); + LOG(LERROR, ("Invalid campaign description")); return; } @@ -58,6 +53,12 @@ struct CampaignDescription } bool IsValid() const { return !m_from.empty() && !m_type.empty() && !m_name.empty(); } + + string m_from; + string m_type; + string m_name; + string m_content; + string m_keyword; }; } // namespace lead diff --git a/platform/marketing_service.cpp b/platform/marketing_service.cpp index 7693080079..d7d5f1337a 100644 --- a/platform/marketing_service.cpp +++ b/platform/marketing_service.cpp @@ -30,6 +30,12 @@ char const * const kPlacepageHotelBook = "Placepage_Hotel_book"; char const * const kEditorAddStart = "EditorAdd_start"; char const * const kEditorEditStart = "EditorEdit_start"; +// Settings. +char const * const kFrom = "utm_source"; +char const * const kType = "utm_medium"; +char const * const kName = "utm_campaign"; +char const * const kContent = "utm_content"; +char const * const kKeyword = "utm_term"; } // marketing void MarketingService::ProcessFirstLaunch() diff --git a/platform/marketing_service.hpp b/platform/marketing_service.hpp index de011f908c..26db60aa97 100644 --- a/platform/marketing_service.hpp +++ b/platform/marketing_service.hpp @@ -34,6 +34,13 @@ extern char const * const kBookmarksBookmarkAction; extern char const * const kPlacepageHotelBook; extern char const * const kEditorAddStart; extern char const * const kEditorEditStart; + +// Settings. +extern char const * const kFrom; +extern char const * const kType; +extern char const * const kName; +extern char const * const kContent; +extern char const * const kKeyword; } // marketing class MarketingService diff --git a/platform/settings.hpp b/platform/settings.hpp index adb924861b..e6d42945da 100644 --- a/platform/settings.hpp +++ b/platform/settings.hpp @@ -5,8 +5,6 @@ #include "base/macros.hpp" #include "std/string.hpp" -#include "std/map.hpp" -#include "std/mutex.hpp" namespace settings { @@ -24,6 +22,7 @@ class StringStorage : public platform::StringStorageBase { public: static StringStorage & Instance(); + private: StringStorage(); }; diff --git a/platform/string_storage_base.hpp b/platform/string_storage_base.hpp index 11948632b0..ddb7de9831 100644 --- a/platform/string_storage_base.hpp +++ b/platform/string_storage_base.hpp @@ -8,11 +8,6 @@ namespace platform { class StringStorageBase { - using Container = std::map; - Container m_values; - mutable std::mutex m_mutex; - std::string const m_path; - public: StringStorageBase(std::string const & path); void Save() const; @@ -20,5 +15,11 @@ public: bool GetValue(std::string const & key, std::string & outValue) const; void SetValue(std::string const & key, std::string && value); void DeleteKeyAndValue(std::string const & key); + +private: + using Container = std::map; + Container m_values; + mutable std::mutex m_mutex; + std::string const m_path; }; } // namespace platform