Skip to content

Commit f605d71

Browse files
committed
Merge branch 'master' into next
2 parents d017ad1 + aac08bb commit f605d71

21 files changed

Lines changed: 136 additions & 66 deletions

File tree

CHANGELOG.md

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,38 @@
1-
## Version 25.03.X
1+
## Version 25.03.36
2+
Enterprise fixes:
3+
- [journey] Workflow fixes
4+
- [users] UI events table fixes
5+
6+
## Version 25.03.35
7+
Fixes:
8+
- [core] Fixes for search bar in standart table component
9+
10+
Enterprise fixes:
11+
- [journeys] Fixes for journey data updates on incoming data.
12+
- [surveys] Return error message if invalid widget_id passed on template loading
13+
- [users] Show content and journey events in user profile
14+
- [users] Display profile group name in table column
15+
- [users] When exporting user profiles, replace user name with device id if user name does not exist
16+
- [users] Use user profile endpoint for exporting data instead of the generic export endpoint
17+
18+
## Version 25.03.34
219
Fixes:
320
- [core] Fix period calculation
21+
- [dashboards] Update dialog button color when deleting dashboard/widget
22+
- [star-rating] Fix rating number when exporting data
23+
24+
Enterprise Fixes:
25+
- [content] Uniform journey and content block actions
26+
- [content] Fix overflow and missing translations in content blocks
27+
- [content] Fix button management when creating fullscreen content blocks
28+
- [crash_symbolication] Use countlyfs for JavaScript symbolication
29+
- [funnels] Fix funnel name tooltip content
30+
- [surveys] Allow surveys to resize and reposition when user rotates devices or adjust browser window
31+
- [nps] Allow nps to resize and reposition when user rotates devices or adjust browser window
32+
- [groups] Dealing with invalid values for group permission
33+
- [geo] Update table row cursor to indicate that it's clickable
34+
- [users] Change table column min-width to width so it can be resized even smaller
35+
- [users] Display filtered user count instead of all user count in the table summary
436

537
## Version 25.03.33
638
Fixes:

api/parts/data/exports.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,9 @@ function transformValuesInObject(doc, mapper) {
285285
}
286286
return doc;
287287
}
288+
289+
exports.transformValuesInObject = transformValuesInObject;
290+
288291
/**
289292
* function to collect calues in order based on current order.
290293
* @param {array} values - arary to collect values

api/utils/common.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3258,7 +3258,9 @@ class DataTable {
32583258
*/
32593259
_getSearchField() {
32603260
if (this.searchStrategy === "regex") {
3261-
return {$regex: this.searchTerm, $options: 'i'};
3261+
const term = String(this.searchTerm);
3262+
const escaped = term.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
3263+
return ({$regex: escaped, $options: 'i'});
32623264
}
32633265
return this.searchTerm;
32643266
}

bin/commands/countly.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ countly_upgrade (){
121121
fi
122122

123123
(cd "$DIR/../.." ;
124+
echo "Installing plugins...";
125+
node "$DIR/../scripts/install_plugins.js" --skip-production;
124126
echo "Preparing production files...";
125127
countly task dist-all;
126128
echo "Restarting Countly...";

bin/config/nginx.server.block.conf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ server {
7171
# /at/*
7272
# /campaign/*
7373
# /dashboards/images/screenshots/screenshot_*.png
74+
# /_external/content/ --> for content blocks
75+
# /_external/content/asset/ --> for content block images
7476

7577
location ~ (/pixel.png|/images/pre-login/countly-logo-dark.svg|/images/pre-login/countly-logo.svg|/images/dashboard/countly_logo.svg|/sdk/web/countly.min.js|/views/heatmap.js|/views/javascripts/simpleheat.js|/views/stylesheets/heatmap.css|/stylesheets/font-awesome/css/*|/stylesheets/font-awesome/fonts/*|/fonts/*|/surveys/*|/stylesheets/ionicons/*|/feedback|/feedback/*|/star-rating/stylesheets/countly-feedback-web.css|/star-rating/stylesheets/countly-feedback.css|/star-rating/javascripts/tippy.all.min.js|/star-rating/images/star-rating/*|/javascripts/dom/jquery/*|/stylesheets/font-awesome/css/*|/stylesheets/font-awesome/fonts/*|/fonts/*|/stylesheets/ionicons/*|/at/*|/campaign/*|/images/dashboard/logo.png|/appimages/*.png|/dashboards/images/screenshots/screenshot_*.png) {
7678
if ($http_content_type = "text/ping") {

frontend/express/libs/members.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,10 @@ membersUtility.reset = function(req, callback) {
761761
var secret = membersUtility.countlyConfig.passwordSecret || "";
762762
argon2Hash(req.body.password + secret).then(password => {
763763
membersUtility.db.collection('password_reset').findOne({ prid: req.body.prid }, function(err, passwordReset) {
764+
if (err || !passwordReset || !passwordReset.user_id) {
765+
callback(false, undefined);
766+
return;
767+
}
764768
membersUtility.db.collection('members').findAndModify({ _id: passwordReset.user_id }, {}, { '$set': { "password": password } }, function(err2, member) {
765769
member = member && member.ok ? member.value : null;
766770
killOtherSessionsForUser(passwordReset.user_id + "", null, null, membersUtility.db);

frontend/express/public/javascripts/countly/countly.common.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3239,10 +3239,11 @@
32393239
* @memberof countlyCommon
32403240
* @param {number} second number
32413241
* @param {number} [trimTo=5] number [1,5]
3242+
* @param {number} [digitsAfterComma=1] number of digits after comma for seconds, default is 1, if seconds is less than 0.1 it will be shown as 0
32423243
* @returns {string} return format "Xh Xm Xs", if trimTo is specified the length of the result is trimmed
32433244
* @example trimTo = 2, "Xh Xm Xs" result will be trimmed to "Xh Xm"
32443245
*/
3245-
countlyCommon.formatSecond = function(second, trimTo = 5) {
3246+
countlyCommon.formatSecond = function(second, trimTo = 5, digitsAfterComma = 1) {
32463247
var timeLeft = parseFloat(second);
32473248
var dict = [
32483249
{k: 'year', v: 31536000},
@@ -3251,16 +3252,15 @@
32513252
{k: 'minute', v: 60},
32523253
{k: 'second', v: 1}
32533254
];
3255+
if (digitsAfterComma < 0 || digitsAfterComma > 10) {
3256+
digitsAfterComma = 0;
3257+
}
32543258
var result = {year: 0, day: 0, hour: 0, minute: 0, second: 0};
32553259
var resultStrings = [];
32563260
for (var i = 0; i < dict.length && resultStrings.length < 3; i++) {
32573261
if (dict[i].k === "second") {
3258-
if (timeLeft < 0.1) {
3259-
result.second = 0;
3260-
}
3261-
else {
3262-
result.second = Math.round(timeLeft * 10) / 10;
3263-
}
3262+
3263+
result.second = parseFloat(timeLeft.toFixed(digitsAfterComma));
32643264
}
32653265
else {
32663266
result[dict[i].k] = Math.floor(timeLeft / dict[i].v);

package-lock.json

Lines changed: 16 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
"moment-timezone": "0.6.0",
8989
"mongodb": "6.20.0",
9090
"nginx-conf": "2.1.0",
91-
"nodemailer": "7.0.12",
91+
"nodemailer": "7.0.13",
9292
"object-hash": "3.0.0",
9393
"properties-parser": "0.6.0",
9494
"puppeteer": "^24.6.1",

plugins/dashboards/api/api.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2088,11 +2088,11 @@ plugins.setConfigs("dashboards", {
20882088
});
20892089

20902090
plugins.register("/import", async function({params, importData}) {
2091-
if (importData.name === 'dashboards') {
2091+
if (importData && importData.name === 'dashboards') {
20922092
await importDashboard(params, importData);
20932093
return true;
20942094
}
2095-
else if (importData.name === 'dashboard.widgets') {
2095+
else if (importData && importData.name === 'dashboard.widgets') {
20962096
await importWidgets(params, importData);
20972097
return true;
20982098
}

0 commit comments

Comments
 (0)