Skip to content

Releases: remp2020/remp

0.21.0

29 Mar 09:13
bc063a9
Compare
Choose a tag to compare

[Campaign]

  • Fixed adding of new variant to the existing campaign. remp/remp#860

[Mailer]

  • Added support for multiple mailers of the same class. Added optional code parameter to Mailer constructor to set unique code for mailer and differentiate between mailers of the same type. remp/remp#828
  • Added code option to MailgunEventsCommand to set up command for specific Mailgun mailer. remp/remp#828
  • Fixed validation of mail generator API. remp/remp#866

0.20.0

23 Mar 09:02
a08dc98
Compare
Choose a tag to compare

Project

  • BREAKING: All applications now require Node 12+. Please schedule update of Node accordingly.
  • Updated docker image of Telegraf to the currently latest 1.17.3.
  • Fixed occasional very slow initialization of grid filters causing whole grids to load slowly (tens of seconds).

[Beam]

  • Added new function remplib.tracker.setArticle to allow setting article information to REMP JS tracking script after the script was already initialized. remp/crm#1635
  • Added new optional parameter includeStorageParams for internal function addSystemUserParams to allow trackCheckout function gets stored tracking parameters. remp/crm#1617
  • [Tracker] Fixed possible overwrite of category when tracking pageview and event APIs with category key in tracked tags.
  • Added statistics and detail page for sections and tags. remp/remp#776
  • Fixed remplib initialization flow - there was a window where remplib wasn't yet initialized but public functions would be callable. These calls would cause errors. remp/remp#856

[Campaign]

  • Fixed bug for some banner templates if the saved text was too long. remp/remp#819
  • Fixed text warning in campaign form segments list. remp/remp#584
  • Added emitting of remp:showtimeReady JS event when all banners from showtime were processed. Event can be used when you want to run your implementation after the showtime asynchronous execution. remp/web#1393
  • Fixed missing click tracking in OverlayTwoButtonSignature banner preview template. remp/remp#797
  • Fixed broken control group tracking when showtime experiment (fast implementation) is used.
  • Fixed missing campaign_id in banners created by CampaignSeeder. remp/remp#838

[Mailer]

  • BREAKING: Updated underlying Nette framework to the latest version (3.1).
    • Update Composer to version 2.
    • In app/config/config.local.neon replace class keyword with factory.
    • If you implemented your own mailers:
      • Interface Nette\Mail\IMailer should be replaced in favor of Nette\Mail\Mailer.
    • If you implemented your own authenticators:
      • Interface Nette\Security\IAuthenticator should be replaced in favor of Nette\Security\Authenticator.
      • Interface Nette\Http\UserStorage should be replaced in favor of Nette\Bridges\SecurityHttp\SessionStorage.
      • Interface Nette\Security\Identity should be replaced in favor of Nette\Security\SimpleIdentity.
    • If you implemented your own API handlers:
      • API handler registration method (the one called in the config) changed from addApiHandler to addApi

      • API handler parameter definition changed. If you implement your own handlers, change the definition based on the following examples:

        [
            new InputParam(InputParam::TYPE_POST, 'name', InputParam::REQUIRED),
            new InputParam(InputParam::TYPE_GET, 'mail_type_codes', InputParam::OPTIONAL, null, true),
            new InputParam(InputParam::TYPE_POST_RAW, 'raw'),
        ];
        [
            (new PostInputParam('name'))->setRequired(),
            (new GetInputParam('mail_type_codes'))->setMulti(),
            new RawInputParam('raw'),
        ];
      • API handle handle method signature changed to handle(array $params): ResponseInterface.

    • Configuration of form control html attributes changed from setAttribute to setHtmlAttribute.
  • Added new codes parameter to GET /api/v1/mailers/templates API endpoint. Parameter is used to list email templates for given mail_template codes. remp/remp#814
  • Added click_tracking parameter to POST /api/v1/mailers/templates to define whether click tracking should be enabled/disabled/use default for created template. remp/remp#824
  • Added snippets which are independent part of emails that can be included across all templates, layouts and other snippets. remp/remp#550
  • Fixed email conversion matching and processing. Bug was introduced in 0.17.0 and caused no conversions to be matched with the emails. remp/remp#834
  • Added support for textarea in the settings page. remp/crm#1624.
  • Changed dashboard subscribers count chart readability. Instead of absolute counts the chart now displays gain/loses of subscribers compared to 30 days ago. remp/remp#701
  • Changed list detail subscribers count chart readability. Instead of absolute counts the chart now displays gain/loses of subscribers compared to 30 days ago. remp/remp#701
  • Added mail_type to snippets to define snippets with same code for different mail types. When rendering mail template that includes snippet, first it tries to match snippet with mail type of given template. If there is not specified snippet with mail type then it uses general snippet with no mail type included. remp/remp#816

0.19.0

16 Feb 11:44
c8fe967
Compare
Choose a tag to compare

Important

We have identified possibly incorrectly stored values in timestamp columns of Beam/Campaign/SSO applications.

This issue could have occurred if your database time_zone was not set to the UTC and used any other local timezone. All features worked correctly, but the underlying date was not stored correctly and issues could have emerged later.

If you're not sure if your database is in UTC, follow these steps to verify and fix the issue. Otherwise you could see incorrect dates in the app after the update to this version.

  1. Check whether your database is configured in UTC. Please run following query in Beam:

    select published_at, convert_tz(published_at, '+00:00', @@session.time_zone) from articles order by published_at desc limit 1;

    The result will look like this:

    +---------------------+---------------------------------------------------------+
    | published_at        | convert_tz(published_at, '+00:00', @@session.time_zone) |
    +---------------------+---------------------------------------------------------+
    | 2021-01-25 14:01:04 | 2021-01-25 15:01:04                                     |
    
  2. If the two dates are the same, your DB uses UTC and you're fine. Otherwise, proceed to this tutorial: https://gist.github.com/rootpd/c5e04612e47c80a10635a0477a4afa8e.

[Beam]

  • Added option to filter top articles and top tags by author. remp/remp#803
  • [Segments]: Improved live caching of segments, avoiding queries that are not necessary to execute.
  • [Segments]: Explicitly closing open Elastic scrolls once we don't need them anymore, since they're expensive to maintain for Elastic.
  • Added explicit DB connection time zone to enforce UTC communication between application and database. remp/remp#809
  • Added command for processing of conversion sources that runs in batch mode or for specific conversion (php artisan conversions:process-sources [--conversion_id]). remp/remp#464
    • Added new conversion_sources table. remp/remp#464
    • Processing of conversion sources is also invoked in conversion upsert endpoint right after aggregation of conversion events. remp/remp#464
  • Calling of conversion events aggregation has been moved into separate job class. Another job class has been created for conversion sources command as well. remp/remp#464
  • Added new columns in articles.show view into referer stats section - first conversion source count and last conversion source count. remp/remp#464
  • [Segments]: Added new referer-based fields to the API responses (see Swagger for additional information):
    • derived_referer_host_with_path
    • derived_referer_medium
    • derived_referer_source

[Campaign]

  • Fixed possible issue with campaign stats A/B test evaluation if variant had 100% conversion rate.
  • Added explicit DB connection time zone to enforce UTC communication between application and database. remp/remp#809

[Mailer]

  • BREAKING: Service hermesRestart was renamed to hermesShutdown to correctly indicate its behavior.
    • If you used it in your configuration, please replace the usage of hermesRestart to hermesShutdown.
    • Replace the use of Tomaj\Hermes\Restart\RedisRestart to Tomaj\Hermes\Shutdown\RedisShutdown.
    • Replace the use of Tomaj\Hermes\Restart\SharedFileRestart to Tomaj\Hermes\Shutdown\SharedFileShutdown.
  • Added support for custom Message-ID headers in Mailer in Mailgun implementation. Mailgun reused same Message-ID for all emails within one batch which could cause unexpected behavior. remp/remp#801
  • Fixed type-related issue with Mailgun event daemon processor which caused synchronization not to work.
  • Added support for Hermes message priorities. See app/config/config.local.neon.example for example use of registering multiple priority queues for Hermes.
  • Fixed injection of UNSUBSCRIBE_URL environment variable into the email parameters. Sender was injecting only name of the newsletter list instead of the whole UNSUBSCRIBE_URL with %type% replaced with the actual newsletter list code. #87
  • Added option to configure which mailer to use for each mail type (list) separately. remp/remp#793

[Sso]

  • Models from \App namespace moved to App\Models (compatibility with current Laravel conventions).
  • Added explicit DB connection time zone to enforce UTC communication between application and database. remp/remp#809

0.17.1

14 Jan 13:23
Compare
Choose a tag to compare

[Beam]

  • Added caching of colors order in dashboard (order is first assigned according to predefined order and number of traffic per each referer medium). remp/remp#719
  • Added missing IE11 polyfill to support Promise in IE11. remp/remp#795
  • Added support to track IDs of user's subscriptions granting access to content. remp/analytika#11
  • Added optional env variable COMMANDS_OVERLAPPING_EXPIRES_AT which controls overlaping expiration and changed default commands without overlaping expiration to 15 minutes instead of 24 hours. remp/remp#768

[Campaign]

  • Added Newsletter rectangle banner type to allow subscription to newsletter directly from within the banner. Further configuration and backend proxy is necessary to use the feature. Refer to README and .env.example for additional info. remp/remp#618
  • Added missing IE11 polyfill to support Promise in IE11. remp/remp#795
  • Added optional env variable COMMANDS_OVERLAPPING_EXPIRES_AT which controls overlaping expiration and changed default commands without overlaping expiration to 15 minutes instead of 24 hours. remp/remp#768
  • Moved caching of SegmentAggregator (required in showtime.php) to HTTP middleware and CampaignsRefreshCache command. Done to avoid caching when running composer install and its hooks (such as artisan package:discover). remp/remp#798

[Sso]

  • Added optional env variable COMMANDS_OVERLAPPING_EXPIRES_AT which controls overlaping expiration and changed default commands without overlaping expiration to 15 minutes instead of 24 hours. remp/remp#768

[Mailer]

  • Fixed issue with Twitter embeds caused by the external library. remp/remp#796

[Mailer]

  • Added option to show mail template by code in TemplatePresenter->showByCode method. remp/crm#1626

0.17.0

21 Dec 12:52
24474be
Compare
Choose a tag to compare

Important

  • BREAKING: All REMP applications now primarily use rtm parameters (our replacement for utm parameters, to avoid conflicts with other tracking software).
    When deploying this release, you have to deploy the Segments/Journal app first and the Tracker app second. Everything else (Beam, Campaign, Mailer, SSO) has to be deployed afterwards (the order doesn't matter). This is due to the internal change in how Tracker stores rtm parameters in underlying Elasticsearch storage.
  • BREAKING: Segments/Journal app aggregations using utm parameters (namely utm_campaign, utm_content, utm_medium, utm_source and banner_variant) has to be rewritten to use rtm parameters (rtm_campaign, rtm_content, rtm_medium, rtm_source and rtm_variant). If one wants to aggregate old data (with utm_ parameters) together with new data, it has to be done in two separate calls to Segments API (one with utm_ and another one with rtm_ aggregation parameters).

Project

  • Fixed PHP 7.4 docker image build dependencies.

[Mailer]

  • Fixed issues with settings page caused by internal config names renaming. remp/crm#1616
  • Fixed main search issue due to the internal changes in the past release. remp/remp#786
  • Improved search speed of the main search bar. remp/remp#786
  • Fixed bug on job edit form causing error when loading the form.
  • Fixed conversion stats processing if there are no templates/batches to process.
  • Fixed rendering issues of 4xx pages when invalid page was requested.
  • Fixed conversion stats processing type-related issues.
  • Fixed mail_layout_id type-related issues in /api/v1/mailers/templates API.

[Beam]

  • BREAKING: API endpoints to get "top" tags or authors now utilize their external_id to filter the data. Please make sure you already use /api/v2/articles/upsert to populate article information.
  • Fixed scenario in JS library when fallback cookie value expiration was not updated with the main local_storage expiration.
  • [Tracker]: Added new parameter commerce_session_id to track/commerce endpoint of API tracker. remp/crm#1559
  • Added new identifier commerce_session_id into remplib.js to identify unique commerce process. remp/crm#1559
  • [Segments]: UTM to RTM parameters transition. remp/remp#779
  • [Tracker]: UTM to RTM parameters transition. remp/remp#779
  • Removed statically set memory_limit configuration within some memory-extensive commands. remp/remp#788
  • Added support for configurable memory limit for each command via COMMANDS_MEMORY_LIMITS environment variable. See .env.example for more information. remp/remp#788
  • Improved dashboard graph - snapshots of concurrent data are mapped to fixed time points to avoid displaying glitches in graph. remp/remp#763
  • Changed scheduled aggregation and snapshotting command calls to be non-blocking (so they don't wait for each other to be executed). remp/remp#763
  • Command composer install now works without DB connection (removed check for migrations table)

[Campaign]

  • Command composer install now works without DB connection (removed check for migrations table)

0.16.0

07 Dec 08:14
941d132
Compare
Choose a tag to compare

Project

  • Removed --no-bin-links switch from `Docker/php/remp.sh installation script. Bin symlinks are required after the latest changes in Yarn package commands.
  • Added PHP 7.4 syntax check to .gitlab-ci.yml.

[Beam]

  • Added caching to Tracker preflight requests to limit number of OPTIONS calls. Cache is now set to 1 hour (3600 seconds) and it effectively adds Access-Control-Max-Age: 3600 header to preflight responses.
  • Fixed issue with slow pageview processing queries due to string/int type conflict in the query parameters. remp/remp#766
  • [Segments]: Fixed search.max_buckets Elastic issue when aggregating too big chunk of pageviews data. Changed internal implementation of Segments API, aggregation is now using Elastic composite aggregation and pagination. remp/remp#662
  • [Segments]: Fixed return type of count histogram items. Float was changed to int as count can always return integers anyway. remp/remp#622
  • [Segments]: Removed offset parameter for histograms. Beam APIs haven't used it and composite index (new Elastic-7-friendly implementation) doesn't support it yet. remp/remp#622
  • Added filter by content type to conversion, article pageviews, article conversions and author detail listing. remp/remp#769
  • Added ability to compute section stats segments using ComputeSectionSegments command + added configuration category and items for this feature + added test configuration screen which uses command to generate results and sends them to specified email address. remp/remp#424
  • Added run ComputeSectionSegments command to laravel console Kernel. remp/remp#424

[Campaign]

  • Allowed search and paging in dashboard schedules table. remp/remp#755
  • Fixed possibility of banner close buttons being overlayed by Safari scrollbar. remp/remp#764
  • Extended banner close button area for easier manipulation on touch-based devices. remp/remp#764
  • Fixed initialization of REMP JS library (may have caused a bug when banner aimed to anonymous users was shown to a logged-in user). remp/crm#651
  • Fixed invalid logger access in Showtime request causing fatal errors if user's adblock information was missing. remp/remp#774

[Mailer]

  • BREAKING: Some portion of classes was not PSR-0/PSR-4 compliant and were moved to their correct folders/namespaces. Please update your config.local.neon based on the updated example file.
  • BREAKING: Updated league/event from version 2 to 3 - there is config change - please change League\Event\Emitter to League\Event\EventDispatcher
  • BREAKING: Removed Remp\MailerModule\Console\Application and keep only native Symfony Application. Change in config -> use add instead of register
  • BREAKING: Updated Twig library to version 3. Also introduced IEngine for templates rendering. More detail here
  • BREAKING: Replaced Remp\MailerModule\Replace\ReplaceInterface with Remp\MailerModule\ContentGenerator\GeneratorInput\IReplace. Please see the example implementations and update your implementation accordingly.
  • BREAKING: Added php types into most missing places (interfaces change). Please run make phpstan after update to check your custom changes.
  • BREAKING: Unified usage of ActiveRow, IRow and DateTime (interfaces change). Please run make phpstan after update to check your custom changes.
  • Added declare(strict_types=1); to all php files.
  • Fixed possible issue with asset location on Mac when Valet is used for development.
  • Upgraded vlucas/phpdotenv from version 2 to 5 and removed usage of getenv() function.
  • Removed obsolete deploy script.
  • Fixed Hermes worker RedisDriver not restarting if there are no new tasks to handle. remp/crm#1561
  • Refactored bootstrap file to follow new Nette skeleton structure.
  • Added missing user_id index to mail_user_subscriptions table.
  • Updated monolog/monolog from version 1 to 2
  • Updated mailgun/mailgun-php from version 2 to 3
  • Updated robmorgan/phinx to 0.12.
  • Updated phpunit/phpunit from version 7 to 9.
  • Fixed incorrect unsubscribed stats for emails sent directly to users (not via jobs). remp/remp#771
  • Fixed crash in mail:process-job command when article meta fetch fails. remp/remp#773
  • Added graph of unsubscribed users in time to mail type detail. remp/remp#631

0.15.0

15 Oct 12:36
bf5a33d
Compare
Choose a tag to compare

Project

  • BREAKING: Bumping minimal version of PHP to 7.3. Version is enforced by Composer and any older version is not allowed anymore. Please upgrade PHP accordingly.
  • Docker image now uses PHP 7.3.
  • Go images now use 1.15.

[Beam]

  • Updated major portion of dependencies. Laravel was not updated yet.
  • Added parameter article_id to AggregatePageviewLoadJob and AggregatePageviewTimespentJob commands.
  • Fixed broken functionality of the segments flag is_article (available in pageview category). remp/remp#716
  • Added health check (http://beam.remp.press/health) for database, Redis, storage and logging. remp/remp#735
  • Added "Content Type" to article detail information.
  • Fixed reseting paid_at column in conversions table on each row update. remp/remp#738

[Campaign]

[Mailer]

  • BREAKING: Changed hermes restart implementation (handles restarts of hermes worker and mail worker). Please update your deploy process to set the deploy time to Redis or fallback to previous file-based restart (see config.local.neon.example for reference). remp/remp#736
    • Updated tomaj/hermes to version 3.0.0 which introduced RedisRestart implementation.
    • Switched default Fermes restart setting from file restart to redis restart.
    • File restart moved to config.local.neon.example as example configuration.
  • Added parameter with_mail_types for GET /api/v1/mailers/templates endpoint, allowing to add details about mail_types assigned to templates. Documentation for the endpoint added. remp/crm#1450
  • Added method to use Redis ping() command within MailCache. remp/remp#735
  • Added health check (http://mailer.remp.press/health) for database, Redis, storage and logging. remp/remp#735
  • Added graceful shutdown to MailWorkerCommand (worker:mail) via Tomaj\Hermes\Restart\RestartInterface. remp/remp#736

[Sso]

  • Updated major portion of dependencies. Laravel was not updated yet.
  • Added health check (http://sso.remp.press/health) for database, Redis, storage and logging. remp/remp#735

0.14.0

29 Sep 05:10
596675c
Compare
Choose a tag to compare

Project

  • PHP CodeSniffer scripts (phpcbf, phpcs) updated to version 3.5.6 (now supporting PHP 7.3+).
  • Added Gitlab CI test stage dependency on redis:3.2 version (tests now use real Redis instance).

Docker

  • Fixed Elasticsearch index initialization for new installations.

[Beam]

  • Added prevention of overlapping run of SnapshotArticlesViews command, which may have caused incorrect numbers in Beam dashboard concurrents graph.
  • Added browser_id to Commerce model to expose it in commerce-related responses of Segments API.

[Campaign]

  • Fixed change of missing campaign statistics caused by invalid pairing of data with labels due to inconsistent timezone use.
  • Fixed possibility of zero campaign stats. Bug appeared if campaign included banner with an already removed variant with some stats tracked. remp/remp#628
  • Fixed "how often to display" campaign rules, previously broken due to expiration of counter data in local storage. remp/remp#715
  • Fixed possibility of zero campaign stats. Bug appeared if campaign included banner with an already removed variant with some stats tracked. remp/remp#628
  • Removed redundant Tracker contract and related implementations. It was never used and necessary. Campaign should only consume Journal data, not produce them from backend.
  • Increased campaigns backend stats fetch timeout to 5 seconds.

[Mailer]

  • Fixed README.md typos, incorrectly linked classes, wording changes, small grammar fixes. remp/remp!390
  • Upgraded nette/application to 2.4.16.
  • Added support for click tracking configuration on mail template level. dn-mofa#50

[Sso]

  • Added initial support for multiple providers. No real providers were actually added yet. #87

0.13.0

03 Sep 10:56
194074a
Compare
Choose a tag to compare

Important

Elasticsearch upgrade notice. In this version we are raising raising Elasticsearch compatibility to 7.. Up until now, Segments API supported Elasticsearch 6.. Please schedule the upgrade of database before proceeding to this version.

Release of newly build Tracker API and Segments API is required for application to work correctly.

We recommend two upgrade scenarios:

  • When new release is ready, you can upgrade your existing cluster based on the documentation available at https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-upgrade.html.
  • If you clear your Elastic data recurrently and archive stored events to CSV, you can spin up new v7 cluster and configure Telegraf to push data to both v6 and v7 of Elastic. Once you're satisfied with the amount of data in v7 (~1 month tends to be sufficient), wait for the next release and change Elastic address in Segments API to v7 cluster. If there are no issues, you can stop pushing new events to v6 cluster in Telegraf and stop the cluster completely.

[Beam]

  • BREAKING: Application now requires Elasticsearch 7. remp/remp#616
    Please follow the upgrade steps:
    • Rebuild or download new Tracker and Segments binaries (binaries available at https://github.com/remp2020/remp/releases).
    • Omit type_name from Telegraf configuration (see Docker/telegraf/telegraf.conf docker configuration file for more details).
    • If you use default docker appliance to run REMP, please run:
      docker-compose stop beam_tracker beam_segments elasticsearch
      docker-compose build beam_tracker beam_segments elasticsearch
      docker-compose up -d beam_tracker beam_segments elasticsearch
  • Go dep dependencies management system replaced with go modules. remp/remp#616
  • Added ability to optionally specify (Elasticsearch) indexes prefix in .env for Tracker and Segments apps. remp/remp#616
  • Added support for Elasticsearch authentication (auth parameter) in ElasticDataRetention and ElasticWriteAliasRollover commands. remp/remp#616
  • Added content_type column to articles table. remp/remp#695
  • Added optional parameter content_type in /api/v2/articles/upsert API endpoint. remp/remp#695
  • Added optional parameter content_type in /api/articles/top API endpoint to filter articles by content_type. remp/remp#695
  • Added optional parameter content_type in /api/authors/top API endpoint to filter articles by content_type. remp/remp#695
  • Added optional parameter content_type in /api/tags/top API endpoint to filter articles by content_type. remp/remp#695

[Campaign]

  • Fixed store pageview counts for campaign separately instead of globally. remp/remp#609
  • Refactor campaign form pageview rules to use only every rule. remp/remp#609
  • Added display N times and then stop rule to campaign form banner rules. remp/remp#609
  • BREAKING Added migration to convert old campaign pageview rules to new format. May pause campaigns with not convertable rules. remp/remp#609
  • Added new banner type – Overlay with Two Buttons and Signature. remp/remp#650

0.12.0

11 Aug 07:52
c1b1fb1
Compare
Choose a tag to compare

Important

Timespent data bug notice. There was a bug in aggregation of timespent data from Elastic to Beam's MySQL. If you have your timestamp data still online in Elastic, please run following command to reaggregate everything so you have correct data persisted:

# Alter the initial hour (2320) based on the amount of data you have in Elastic
# Calculate it as number of hours of stored data; or as HOURS(NOW() - EARLIEST_ELASTIC_DATA)

for i in {2320..0}; do sudo -u app-remp-beam php /data/web/remp2020.com/app/Beam/current/artisan pageviews:aggregate-timespent --now="-$i hours" --debug; done

If you don't have an online data and you don't have any other backup, consider the aggregated timespent data (in MySQL) aggregated before deploying this release as unreliable.

Please update the Segments API to fix the issue.

Sorry for an inconvenience.

Docker

  • Added tzdata installation for remp_segments docker (required by golang).

Beam

  • BREAKING: Changed way of specifying sections parameter in /api/articles/top API endpoint. Now sections can be filtered either using name or external_id parameters (before, name parameter was used implicitely). remp/remp#691
  • Added ability to specify sections parameter in /api/authors/top and /api/tags/top/ API endpoints via name or external_id parameters (in the same fashion as in case of /api/articles/top). remp/remp#691
  • Pageviews data for articles are now refreshed every minute instead of every hour. remp/remp#663
  • Fixed ignored explicit browserId parameter in JS configuration. remp/remp#690
  • Commands pageviews:aggregate-load and pageviews:aggregate-timespent do not show progress unless --debug parameter is specified.
  • [Segments]: Fixed possibility of missing aggregations if Elastic was not able to resolve values for a sub aggregation because there were no records within the sub-aggregation branch.
  • Fixed remplib.js generating undefined cookies when JS is run on a page with no query parameters. #81

Mailer

  • Added handling for UserNotFoundException when confirming user in CRM. remp/remp#685
  • Added notification on the settings screen about settings overridden by local config file. remp/remp#519