Compare commits

...

7 Commits
8.2.3 ... 8.2.4

Author SHA1 Message Date
Yuri Kuznetsov
94881de082 8.2.4 2024-05-08 11:32:01 +03:00
Yuri Kuznetsov
cbec1cbbe5 fix parser 2024-05-04 23:00:46 +03:00
Yuri Kuznetsov
71dd872618 calendar duplicate event fix 2024-04-30 14:15:39 +03:00
Yuri Kuznetsov
bfed154feb language load off 2024-04-26 11:01:54 +03:00
Yuri Kuznetsov
5a19b90b13 fix role empty stream level on ui 2024-04-22 12:38:33 +03:00
Yuri Kuznetsov
33b0ca8824 fix add dashlet 2024-04-20 11:32:41 +03:00
Yuri Kuznetsov
540c58a564 fix add dashlet quick seach 2024-04-20 08:35:16 +03:00
8 changed files with 37 additions and 8 deletions

View File

@@ -861,7 +861,7 @@ class Parser
$offset = -1;
while (true) {
$index = strrpos($expression, $operator, $offset);
$index = strrpos($modifiedExpression, $operator, $offset);
if ($index === false) {
break;
@@ -882,7 +882,7 @@ class Parser
if (strlen($operator) === 1) {
if ($index < strlen($expression) - 1) {
$possibleRightOperator = trim($operator . $expression[$index + 1]);
$possibleRightOperator = trim($operator . $modifiedExpression[$index + 1]);
}
}
@@ -898,7 +898,7 @@ class Parser
if (strlen($operator) === 1) {
if ($index > 0) {
$possibleLeftOperator = trim($expression[$index - 1] . $operator);
$possibleLeftOperator = trim($modifiedExpression[$index - 1] . $operator);
}
}

View File

@@ -1197,7 +1197,8 @@ class CalendarView extends View {
const event = this.convertToFcEvent(attributes);
this.calendar.addEvent(event);
// true passed to prevent duplicates after re-fetch.
this.calendar.addEvent(event, true);
}
updateModel(model) {

View File

@@ -204,6 +204,8 @@ class Language {
* @returns {Promise}
*/
load(callback, disableCache, loadDefault) {
this.off('sync');
if (callback) {
this.once('sync', callback);
}

View File

@@ -97,6 +97,10 @@ class AddDashletModalView extends ModalView {
return true;
});
this.dashletList.forEach(item => {
this.translations[item] = this.translate(item, 'dashlets');
});
}
afterRender() {
@@ -125,6 +129,10 @@ class AddDashletModalView extends ModalView {
const lowerCaseText = text.toLowerCase();
this.dashletList.forEach(item => {
if (!(item in this.translations)) {
return;
}
const label = this.translations[item].toLowerCase();
for (const word of label.split(' ')) {

View File

@@ -193,12 +193,18 @@ class RoleRecordTableView extends View {
let level = null;
const levelList = this.getLevelList(scope, action);
if (scope in aclData) {
if (access === 'enabled') {
if (aclData[scope] !== true) {
if (action in aclData[scope]) {
level = aclData[scope][action];
}
if (level === null) {
level = levelList[levelList.length - 1];
}
}
} else {
level = 'no';
@@ -209,7 +215,7 @@ class RoleRecordTableView extends View {
level: level,
name: scope + '-' + action,
action: action,
levelList: this.getLevelList(scope, action),
levelList: levelList,
});
});
}

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "espocrm",
"version": "8.2.3",
"version": "8.2.4",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "espocrm",
"version": "8.2.3",
"version": "8.2.4",
"hasInstallScript": true,
"license": "AGPL-3.0-or-later",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "espocrm",
"version": "8.2.3",
"version": "8.2.4",
"description": "Open-source CRM.",
"repository": {
"type": "git",

View File

@@ -1380,4 +1380,16 @@ class EvaluatorTest extends \PHPUnit\Framework\TestCase
$this->assertEquals(2, $vars->j);;
}
public function testStringsWithOperator(): void
{
$expression = "\$a = '='";
$vars = (object) [];
/** @noinspection PhpUnhandledExceptionInspection */
$this->evaluator->process($expression, null, $vars);
$this->assertEquals("=", $vars->a);
}
}