Compare commits

...

1037 Commits
7.0.2 ... 7.1.2

Author SHA1 Message Date
Yuri Kuznetsov
896d42df43 v 2022-04-25 11:44:48 +03:00
Yuri Kuznetsov
1905be823d upgrade change 2022-04-25 11:40:05 +03:00
Yuri Kuznetsov
6347992b6e before upgrade fix 2022-04-23 22:53:19 +03:00
Yuri Kuznetsov
b695d7c148 upgrade fix 2022-04-23 22:17:04 +03:00
Yuri Kuznetsov
9b75cdc2ac lang updates 2022-04-22 15:51:30 +03:00
Yuri Kuznetsov
da80ed0130 formula parser only comment fix 2022-04-21 18:42:00 +03:00
Yuri Kuznetsov
e8a23de848 refactoring 2022-04-21 18:02:02 +03:00
Yuri Kuznetsov
cb431a03df fix diff 2022-04-21 12:29:01 +03:00
Yuri Kuznetsov
4979fb7326 fix workflow 2022-04-21 12:27:59 +03:00
Yuri Kuznetsov
aaae51bb37 version tag empty 2022-04-21 12:20:29 +03:00
Yuri Kuznetsov
4d860e3764 v 2022-04-21 12:14:34 +03:00
Yuri Kuznetsov
e73ba5c734 email fetch bc fix 2022-04-21 12:14:07 +03:00
Yuri Kuznetsov
cca561f2c3 fix ldap portal user creation 2022-04-20 12:06:44 +03:00
Yuri Kuznetsov
87c5089a8e autocomplete fixes 2022-04-19 23:08:26 +03:00
Yuri Kuznetsov
a0819e8cdc autocomplete fixes 2022-04-19 22:51:10 +03:00
Yuri Kuznetsov
ac505d9875 fix db regexp 2022-04-19 20:20:48 +03:00
Yuri Kuznetsov
750f7ceb53 autocomplete fix 2022-04-19 19:28:45 +03:00
Yuri Kuznetsov
5be2a73801 install default preferences values 2022-04-19 13:47:36 +03:00
Yuri Kuznetsov
5976fd5738 fix 2022-04-19 13:42:15 +03:00
Yuri Kuznetsov
e6f09ed32a fix install date format 2022-04-19 13:35:16 +03:00
Yuri Kuznetsov
e2efb62a6a install theme selection 2022-04-19 13:17:21 +03:00
Yuri Kuznetsov
8ecfc75fac install buttons wide 2022-04-19 10:59:30 +03:00
Yuri Kuznetsov
2c16a5bff7 install back button to the left 2022-04-19 10:55:28 +03:00
Yuri Kuznetsov
47d049ab93 fix installer create database 2022-04-19 10:49:57 +03:00
Yuri Kuznetsov
51ce0780fd install css fix 2022-04-19 10:24:53 +03:00
Yuri Kuznetsov
a01e394a56 cs fix 2022-04-18 21:42:20 +03:00
Yuri Kuznetsov
752b683494 config fill missing default parameters on rebuild 2022-04-18 19:11:40 +03:00
Yuri Kuznetsov
2281d982f2 fix config: null not treated as set 2022-04-18 19:06:58 +03:00
Yuri Kuznetsov
ad03cf92fc css fix 2022-04-18 15:49:52 +03:00
Yuri Kuznetsov
16ccf59d3f dark heading blue color 2022-04-18 15:46:52 +03:00
dependabot[bot]
9e09f89927 Bump async from 2.6.2 to 2.6.4 (#2280)
Bumps [async](https://github.com/caolan/async) from 2.6.2 to 2.6.4.
- [Release notes](https://github.com/caolan/async/releases)
- [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md)
- [Commits](https://github.com/caolan/async/compare/v2.6.2...v2.6.4)

---
updated-dependencies:
- dependency-name: async
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-18 13:44:33 +03:00
Yuri Kuznetsov
53886ec684 promise usage 2022-04-18 13:10:22 +03:00
Yuri Kuznetsov
fbc3e2cea9 autocomplete item padding 2022-04-18 13:08:14 +03:00
Yuri Kuznetsov
2a7a4714ed doNotFillAssignedUserIfNotRequired true 2022-04-18 12:41:24 +03:00
Yuri Kuznetsov
19749aeca2 autoselect first autocomplete 2022-04-18 12:33:11 +03:00
Yuri Kuznetsov
ee1dd28bc7 assigned user autocomplete own 2022-04-18 12:29:41 +03:00
Yuri Kuznetsov
c1b0a3849d link autocomplete flicker fix 2022-04-18 11:01:46 +03:00
Yuri Kuznetsov
d721036226 update autocomplete lib 2022-04-18 10:28:57 +03:00
Yuri Kuznetsov
9cce13af65 link autocimplete select text on focus, no search on focus 2022-04-18 10:18:27 +03:00
Yuri Kuznetsov
176abf90ad cs fix 2022-04-18 09:23:32 +03:00
Yuri Kuznetsov
0bdeec10b6 fix color 2022-04-15 15:35:02 +03:00
Yuri Kuznetsov
29bd26a096 chart grid label x 1 line 2022-04-15 15:11:43 +03:00
Yuri Kuznetsov
758e831cd5 css chart overflow hidden 2022-04-15 14:06:06 +03:00
Yuri Kuznetsov
95eea88a89 color fix 2022-04-15 13:49:50 +03:00
Yuri Kuznetsov
4c435b4d4b fix css 2022-04-15 12:51:22 +03:00
Yuri Kuznetsov
120f9fd07e q append asterisk 2022-04-14 16:08:40 +03:00
Yuri Kuznetsov
7ca7a1ad18 discard nofulltexdtsearch 2022-04-14 15:46:32 +03:00
Yuri Kuznetsov
f8dcd40905 fix test 2022-04-14 14:54:06 +03:00
Yuri Kuznetsov
039c67c6ca ref 2022-04-14 14:52:34 +03:00
Yuri Kuznetsov
908d0ad3c4 refactoring 2022-04-14 14:47:30 +03:00
Yuri Kuznetsov
1a70fdfd41 ft filter fix 2022-04-14 13:26:15 +03:00
Yuri Kuznetsov
dc5c572a9f full text datacomposer interface 2022-04-14 12:31:18 +03:00
Yuri Kuznetsov
96be15c33b fulltextsearch namespace 2022-04-14 11:45:49 +03:00
Yuri Kuznetsov
79793ebff6 email search fix 2022-04-14 11:14:19 +03:00
Yuri Kuznetsov
d38c79c4ba ft changes 2022-04-14 10:49:34 +03:00
Yuri Kuznetsov
ba02164d0b ft changes 2022-04-13 20:00:15 +03:00
Yuri Kuznetsov
0cdbe89f5c refactoring 2022-04-13 19:20:52 +03:00
Yuri Kuznetsov
46d8ec757f fix orm order empty 2022-04-13 13:45:54 +03:00
Yuri Kuznetsov
f4930b0a1f type fix 2022-04-13 13:24:51 +03:00
Yuri Kuznetsov
e03dc3b738 refactoring 2022-04-13 13:18:32 +03:00
Yuri Kuznetsov
bfb7d88b79 refactoring 2022-04-13 11:18:12 +03:00
Yuri Kuznetsov
2f3f2a0247 use fulltext search in automplete 2022-04-12 16:38:47 +03:00
Yuri Kuznetsov
08f64eb209 autocompete no order 2022-04-12 16:38:12 +03:00
Yuri Kuznetsov
15371a6a0f no total param 2022-04-12 14:21:36 +03:00
Yuri Kuznetsov
68ea55144d fix 2022-04-12 14:21:12 +03:00
Yuri Kuznetsov
ec7e35e654 fix link parent reset 2022-04-12 14:15:17 +03:00
Yuri Kuznetsov
7e5a7546f2 fulltext search in email address lookup 2022-04-12 12:49:51 +03:00
Yuri Kuznetsov
86f67bd315 email address lookup no cache 2022-04-12 12:43:41 +03:00
Yuri Kuznetsov
ca8cdd6008 currency compare 2022-04-12 11:05:16 +03:00
Yuri Kuznetsov
5a60c5941a add composer suggest 2022-04-12 10:44:40 +03:00
Yuri Kuznetsov
5487bd7598 records per page select 2022-04-11 13:59:58 +03:00
Yuri Kuznetsov
ea8c4d348d type fix 2022-04-11 13:22:26 +03:00
Yuri Kuznetsov
a56a6b01f4 orderer apply id 2022-04-11 13:21:48 +03:00
dependabot[bot]
bfe91a37e8 Bump moment from 2.24.0 to 2.29.2 (#2276)
Bumps [moment](https://github.com/moment/moment) from 2.24.0 to 2.29.2.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.24.0...2.29.2)

---
updated-dependencies:
- dependency-name: moment
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-11 13:03:34 +03:00
Yuri Kuznetsov
ecd61eb4e9 dark theme fix 2022-04-11 13:02:21 +03:00
Yuri Kuznetsov
ffd05882f2 select orderer, passing user to order converter 2022-04-11 12:57:24 +03:00
Yuri Kuznetsov
f8eb7679fd fix link multiple order 2022-04-10 14:27:38 +03:00
Yuri Kuznetsov
68fa506f32 currency bcmath 2022-04-10 13:13:23 +03:00
Yuri Kuznetsov
c1e4ca4850 link multiple order in select 2022-04-09 19:39:52 +03:00
Taras Machyshyn
31a507cd4a Autoload fixes 2022-04-08 16:28:12 +03:00
Yuri Kuznetsov
58a89146c9 cleanup 2022-04-08 14:04:08 +03:00
Yuri Kuznetsov
d70461db9f email task status icon 2022-04-08 13:57:26 +03:00
Yuri Kuznetsov
bddd310ac7 refactoring 2022-04-08 13:16:42 +03:00
Yuri Kuznetsov
f46bc47bba select user own first 2022-04-08 12:55:11 +03:00
Yuri Kuznetsov
579e134303 cs fix 2022-04-08 12:20:32 +03:00
Yuri Kuznetsov
b92fd15ece accentuate own user in list 2022-04-07 17:47:50 +03:00
Yuri Kuznetsov
4ef307e8e7 email to case, carry over lead 2022-04-07 17:20:46 +03:00
Yuri Kuznetsov
58fca25b3e dark theme color fixes 2022-04-07 17:15:51 +03:00
Yuri Kuznetsov
efaf1fab79 calendar create enum fix 2022-04-07 12:44:53 +03:00
Yuri Kuznetsov
e6beedbffd cs fix 2022-04-07 12:15:22 +03:00
Yuri Kuznetsov
d718151dbe field validate refactoring and fix 2022-04-07 12:02:05 +03:00
Yuri Kuznetsov
cb79354078 cs fix 2022-04-07 11:54:19 +03:00
Yuri Kuznetsov
94d2873669 color fix 2022-04-06 16:31:02 +03:00
Yuri Kuznetsov
46b269fa0e set access info checkbox not setting 2022-04-06 13:37:18 +03:00
Yuri Kuznetsov
43a233a4ba stream drag enable posting mode 2022-04-06 12:09:12 +03:00
Yuri Kuznetsov
7cc33bd684 email task relationship 2022-04-05 18:39:43 +03:00
Yuri Kuznetsov
0937c83746 fix array list css 2022-04-05 14:44:38 +03:00
Yuri Kuznetsov
0ae81328b4 image fix 2022-04-05 14:39:09 +03:00
Yuri Kuznetsov
68a7130e85 image preview left-right keys 2022-04-05 11:57:15 +03:00
Yuri Kuznetsov
da41370c29 cs fix 2022-04-05 11:30:31 +03:00
Yuri Kuznetsov
836ffff49f contact opp relation fix 2022-04-04 14:22:02 +03:00
Yuri Kuznetsov
350819033d email send from detail view and edit mode promise 2022-04-04 13:21:48 +03:00
Yuri Kuznetsov
5c47b6c653 fix 2022-04-03 10:51:29 +03:00
Yuri Kuznetsov
f37fd5e013 ref 2022-04-01 14:46:21 +03:00
Yuri Kuznetsov
100b44791d refactoring 2022-04-01 14:39:21 +03:00
Yuri Kuznetsov
cf7f8260c9 refactoring 2022-04-01 13:33:23 +03:00
Yuri Kuznetsov
bc06e39f90 refactoring 2022-04-01 12:13:02 +03:00
Yuri Kuznetsov
42a8f8b438 base currency usage 2022-04-01 11:48:48 +03:00
Yuri Kuznetsov
6b04536c3a currency rates base 2022-04-01 11:47:02 +03:00
Yuri Kuznetsov
4ff8514925 refactoring 2022-04-01 11:30:59 +03:00
Yuri Kuznetsov
30b4b8d501 refactoring 2022-04-01 11:12:21 +03:00
Yuri Kuznetsov
23d78e1e46 utf8 passwords 2022-03-31 18:57:15 +03:00
Yuri Kuznetsov
65ca47b878 Merge branch 'fix' 2022-03-31 18:03:33 +03:00
Yuri Kuznetsov
a2ac9c2d4c login base64 error catching 2022-03-31 18:03:21 +03:00
Yuri Kuznetsov
87048ce9af set config params script 2022-03-30 16:04:42 +03:00
dependabot[bot]
846c8040a3 Bump guzzlehttp/psr7 from 1.6.1 to 1.8.4 (#2265)
Bumps [guzzlehttp/psr7](https://github.com/guzzle/psr7) from 1.6.1 to 1.8.4.
- [Release notes](https://github.com/guzzle/psr7/releases)
- [Changelog](https://github.com/guzzle/psr7/blob/1.8.4/CHANGELOG.md)
- [Commits](https://github.com/guzzle/psr7/compare/1.6.1...1.8.4)

---
updated-dependencies:
- dependency-name: guzzlehttp/psr7
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-30 13:02:20 +03:00
Yuri Kuznetsov
f993d676fc fix 2022-03-30 13:00:56 +03:00
Yuri Kuznetsov
00d04e0157 translatable error messages 2022-03-30 12:59:13 +03:00
Yuri Kuznetsov
461034f9cc roles exportable importable 2022-03-29 17:44:24 +03:00
Yuri Kuznetsov
16b61d9484 Merge branch 'fix' 2022-03-29 16:14:50 +03:00
Eymen Elkum
afbd3919b7 fix typo (#2260)
Co-authored-by: Eymen Elkum <eymen@eblasoft.com.tr>
2022-03-29 15:38:06 +03:00
Yuri Kuznetsov
ec1887e726 closable error usage 2022-03-29 13:36:50 +03:00
Yuri Kuznetsov
b9fc41d5cd Merge branch 'fix' 2022-03-29 13:18:36 +03:00
Yuri Kuznetsov
216e1061d2 v 2022-03-29 12:54:57 +03:00
Yuri Kuznetsov
934b7a9369 npm ci 2022-03-29 12:48:42 +03:00
Yuri Kuznetsov
6b62841fba fix websocket 2022-03-29 12:47:29 +03:00
Yuri Kuznetsov
644f653bdd fix websocket 2022-03-29 12:41:40 +03:00
Yuri Kuznetsov
bdfe6b5e23 forbidden exception with body 2022-03-28 14:38:03 +03:00
Yuri Kuznetsov
01e0d51c0a error alert improvements 2022-03-28 14:37:36 +03:00
Yuri Kuznetsov
6acd18b4c6 fix error 2022-03-28 14:26:40 +03:00
Yuri Kuznetsov
9ac36cd5da error alerts with close button 2022-03-28 13:44:12 +03:00
Yuri Kuznetsov
cbc581ad9f cs fix 2022-03-26 17:34:09 +02:00
Yuri Kuznetsov
9845ed2db3 formula tpl change 2022-03-25 20:19:29 +02:00
Yuri Kuznetsov
87e95dc791 Update README.md 2022-03-25 17:39:43 +02:00
Yuri Kuznetsov
51ca68531a Update README.md 2022-03-25 17:09:37 +02:00
Yuri Kuznetsov
eb78b921a7 Update README.md 2022-03-25 17:07:46 +02:00
Yuri Kuznetsov
1d6bedcfad Update README.md 2022-03-25 17:07:21 +02:00
Yuri Kuznetsov
36ca2daee0 Update README.md 2022-03-25 17:06:27 +02:00
Yuri Kuznetsov
f000fb6f29 Update README.md 2022-03-25 16:58:49 +02:00
Yuri Kuznetsov
170ff67ea8 Update README.md 2022-03-25 16:58:11 +02:00
Yuri Kuznetsov
d196347b22 Update README.md 2022-03-25 16:52:59 +02:00
Yuri Kuznetsov
b2d7cfa187 fix diff 2022-03-25 11:32:50 +02:00
Yuri Kuznetsov
2c3f6baaac rename array index 2022-03-24 21:47:23 +02:00
Yuri Kuznetsov
0060f70586 array functions metadata 2022-03-24 20:45:58 +02:00
Yuri Kuznetsov
22fd7cb6b3 array functions 2022-03-24 20:22:47 +02:00
Yuri Kuznetsov
9d7246832d build changes 2022-03-24 16:29:02 +02:00
Taras Machyshyn
03eb8db555 package.json 2022-03-24 15:05:52 +02:00
Yuri Kuznetsov
3f2364cd8d phpstan level 8 2022-03-24 12:35:02 +02:00
Yuri Kuznetsov
f1c0ccf97d type fixes 2022-03-24 12:34:40 +02:00
Yuri Kuznetsov
ceddfd8486 type fixes 2022-03-24 12:21:14 +02:00
Yuri Kuznetsov
eaed64fe6a type fixes 2022-03-24 10:54:51 +02:00
Yuri Kuznetsov
69d88f9b76 fix email address varchar 2022-03-24 10:53:22 +02:00
Yuri Kuznetsov
1e51f1b97c fix 2022-03-23 19:46:40 +02:00
Yuri Kuznetsov
ef7e620b8b bc fix 2022-03-23 19:41:28 +02:00
Yuri Kuznetsov
99c2f30394 fix 2022-03-23 15:44:20 +02:00
Yuri Kuznetsov
ccc231a06e fixes 2022-03-23 15:33:22 +02:00
Yuri Kuznetsov
b4aa1392d5 type fixes 2022-03-23 15:14:44 +02:00
Yuri Kuznetsov
4aec7251a6 type fixes 2022-03-23 15:04:26 +02:00
Yuri Kuznetsov
5ff9e42887 type fixes 2022-03-23 14:46:06 +02:00
Yuri Kuznetsov
a9d4046337 type fixes 2022-03-23 14:31:31 +02:00
Yuri Kuznetsov
b1e8266d89 type fixes 2022-03-23 14:22:05 +02:00
Yuri Kuznetsov
1a4b891b05 type fixes 2022-03-23 14:14:08 +02:00
Yuri Kuznetsov
0191188eba type fixes 2022-03-23 14:10:34 +02:00
Yuri Kuznetsov
833cd4f5ee type fixes 2022-03-23 13:51:59 +02:00
Yuri Kuznetsov
bea8f4d4bd type fixes 2022-03-23 13:38:57 +02:00
Yuri Kuznetsov
d59874801d type fixes 2022-03-23 13:17:04 +02:00
Yuri Kuznetsov
2ffae46291 type fixes 2022-03-23 12:55:04 +02:00
Yuri Kuznetsov
48b79dfdb1 update minimist 2022-03-23 09:57:14 +02:00
Yuri Kuznetsov
52bdfc128c type fixes 2022-03-22 22:50:05 +02:00
Yuri Kuznetsov
c9adeecd1b type fixes 2022-03-22 22:22:16 +02:00
Yuri Kuznetsov
4bfdbcc207 cleanup 2022-03-22 18:28:04 +02:00
Yuri Kuznetsov
0a4b261529 record service refactoring 2022-03-22 18:27:41 +02:00
Yuri Kuznetsov
dc6a7f241e comment 2022-03-22 15:12:16 +02:00
Yuri Kuznetsov
da39015a7c type fixes 2022-03-22 15:08:57 +02:00
Yuri Kuznetsov
8ba1907b45 type fixes 2022-03-22 14:51:22 +02:00
Yuri Kuznetsov
eea3efeb95 type fixes 2022-03-22 14:06:21 +02:00
Yuri Kuznetsov
991e3f8cc3 type fixes 2022-03-22 13:37:38 +02:00
Yuri Kuznetsov
25a09f5ec3 type fixes 2022-03-22 13:16:04 +02:00
Yuri Kuznetsov
86413517e6 type fixes 2022-03-22 13:12:35 +02:00
Yuri Kuznetsov
747d581f9a type fixes 2022-03-22 12:37:27 +02:00
Yuri Kuznetsov
1d4030b29e type fixes 2022-03-22 12:22:29 +02:00
Yuri Kuznetsov
80fa7407d4 type fixes 2022-03-22 12:05:32 +02:00
Yuri Kuznetsov
495e700373 type fixes 2022-03-22 11:55:23 +02:00
Yuri Kuznetsov
5c583a697d type fixes 2022-03-22 11:34:39 +02:00
Yuri Kuznetsov
24b935c789 type fixes 2022-03-22 11:29:33 +02:00
Yuri Kuznetsov
df0da5e51b type fixes 2022-03-22 11:23:02 +02:00
Yuri Kuznetsov
485dfd32fd collapsed modal changes and fixes 2022-03-22 11:11:47 +02:00
Yuri Kuznetsov
51a6b304f2 modal css fix 2022-03-22 10:53:36 +02:00
Yuri Kuznetsov
93e467af79 fix typo 2022-03-22 10:45:40 +02:00
Yuri Kuznetsov
c5eb6c560b type fixes 2022-03-21 15:52:30 +02:00
Yuri Kuznetsov
dd1a74b4c0 type fixes 2022-03-21 15:38:22 +02:00
Yuri Kuznetsov
5fa73b2581 type fixes 2022-03-21 14:19:04 +02:00
Yuri Kuznetsov
f70e1bd38e type fixes 2022-03-21 13:51:54 +02:00
Yuri Kuznetsov
5dd845327e email phone group value object new method 2022-03-21 13:41:49 +02:00
Yuri Kuznetsov
bc84a9be51 type fixes 2022-03-21 13:36:02 +02:00
Yuri Kuznetsov
39442377a3 type fixes 2022-03-21 13:23:12 +02:00
Yuri Kuznetsov
b9126d2c0f type fixes 2022-03-21 13:08:52 +02:00
Yuri Kuznetsov
1f982031ca type fixes 2022-03-21 12:43:12 +02:00
Yuri Kuznetsov
3961dcaad4 type fixes 2022-03-21 12:28:54 +02:00
Yuri Kuznetsov
a91c63c6a9 date time convert throwing exception 2022-03-21 12:26:56 +02:00
Yuri Kuznetsov
7f328927ba cs fixes 2022-03-21 12:26:42 +02:00
Yuri Kuznetsov
8491a54248 type fixes 2022-03-21 12:24:12 +02:00
Yuri Kuznetsov
79bc6a9aea add msg 2022-03-21 12:02:12 +02:00
Yuri Kuznetsov
d899e8d3df fix 2022-03-21 12:01:27 +02:00
Yuri Kuznetsov
3ef6de205f get id exception 2022-03-21 11:34:48 +02:00
Yuri Kuznetsov
fa02291a1a fixes 2022-03-20 19:35:28 +02:00
Yuri Kuznetsov
5096870635 update laminas ldap 2022-03-19 17:34:43 +02:00
Yuri Kuznetsov
7cb086d5c9 fix typo 2022-03-19 17:17:20 +02:00
Yuri Kuznetsov
9e9a72af91 fix 2022-03-19 11:18:01 +02:00
Yuri Kuznetsov
62f2c9658a phpstan level 7 2022-03-19 11:12:34 +02:00
Yuri Kuznetsov
4015e2f254 type fixes 2022-03-19 11:11:58 +02:00
Yuri Kuznetsov
aa51a58da5 type fixes 2022-03-19 11:03:43 +02:00
Yuri Kuznetsov
a12ee989f6 type fixes 2022-03-19 10:56:20 +02:00
Yuri Kuznetsov
ab137263dc type fixes 2022-03-19 10:16:36 +02:00
Yuri Kuznetsov
77e02fd66f type fixes 2022-03-18 20:17:37 +02:00
Yuri Kuznetsov
0d1466afac type fixes 2022-03-18 20:14:41 +02:00
Yuri Kuznetsov
4f4db967f8 type fixes 2022-03-18 19:53:20 +02:00
Yuri Kuznetsov
6beaa730ea type fixes 2022-03-18 19:39:58 +02:00
Yuri Kuznetsov
31a84a6e53 type fixes 2022-03-18 18:04:03 +02:00
Yuri Kuznetsov
761e7b7b72 type fixes 2022-03-18 18:01:44 +02:00
Yuri Kuznetsov
b0547325ca type fixes 2022-03-18 17:05:28 +02:00
Yuri Kuznetsov
914f90214a type fixes 2022-03-18 15:01:59 +02:00
Yuri Kuznetsov
be2d936be9 type fixes 2022-03-18 14:46:07 +02:00
Yuri Kuznetsov
1f48e3d005 type fixes 2022-03-18 14:30:23 +02:00
Yuri Kuznetsov
50f7165963 type fixes 2022-03-18 14:24:38 +02:00
Yuri Kuznetsov
55453b95ab type fixes 2022-03-18 14:14:23 +02:00
Yuri Kuznetsov
27d7e6e522 type fixes 2022-03-18 14:05:16 +02:00
Yuri Kuznetsov
abca847e5a type fixes 2022-03-18 13:37:53 +02:00
Yuri Kuznetsov
6d28fab610 type fixes 2022-03-18 13:05:02 +02:00
Yuri Kuznetsov
a8b315b35d type fix 2022-03-17 21:09:52 +02:00
Yuri Kuznetsov
206e3e787e type fixes 2022-03-17 20:44:34 +02:00
Yuri Kuznetsov
26ab145380 type fixes 2022-03-17 20:32:28 +02:00
Yuri Kuznetsov
5518d71bbe type fixes 2022-03-17 18:09:37 +02:00
Yuri Kuznetsov
4fbfd1e123 type fixes 2022-03-17 18:01:07 +02:00
Yuri Kuznetsov
099e0745f5 type fixes 2022-03-17 17:18:49 +02:00
Yuri Kuznetsov
ef0c9e86a9 type fixes 2022-03-17 16:53:39 +02:00
Yuri Kuznetsov
ca39deb818 type fixes 2022-03-17 16:48:47 +02:00
Yuri Kuznetsov
0cc88a395f type fixes 2022-03-17 16:37:37 +02:00
Yuri Kuznetsov
706cb66021 type fixes 2022-03-17 15:14:41 +02:00
Yuri Kuznetsov
a33d49b151 refactoring and type fixes 2022-03-17 14:57:08 +02:00
Yuri Kuznetsov
71bb9d7d18 type fixes 2022-03-17 14:26:36 +02:00
Yuri Kuznetsov
0ef26a7929 type fixes 2022-03-17 14:20:06 +02:00
Yuri Kuznetsov
d77e56ec5d type fixes 2022-03-17 14:07:47 +02:00
Yuri Kuznetsov
45f9e2af59 type fixes 2022-03-17 14:02:36 +02:00
Yuri Kuznetsov
cc89b69f18 type fixes 2022-03-17 13:42:20 +02:00
Yuri Kuznetsov
d39376398a type fixes 2022-03-17 13:15:58 +02:00
Yuri Kuznetsov
1016b61835 type fixes 2022-03-17 12:52:32 +02:00
Yuri Kuznetsov
5a2c027f17 refactoring 2022-03-17 12:23:53 +02:00
Yuri Kuznetsov
c030f375bf type fixes 2022-03-17 11:53:56 +02:00
Yuri Kuznetsov
8d7d5527a1 type fixes 2022-03-16 16:42:41 +02:00
Yuri Kuznetsov
91915ccf44 fix 2022-03-16 14:18:55 +02:00
Yuri Kuznetsov
d92bf08160 type fixes 2022-03-16 14:16:32 +02:00
Yuri Kuznetsov
46f3846d36 type fixes 2022-03-16 13:57:33 +02:00
Yuri Kuznetsov
841b0f4ebf fix 2022-03-16 13:20:39 +02:00
Yuri Kuznetsov
5c4e4613e7 fix 2022-03-16 13:03:22 +02:00
Yuri Kuznetsov
8b800d7757 fixes 2022-03-16 12:58:20 +02:00
Yuri Kuznetsov
670df99eda type fixes 2022-03-16 12:04:44 +02:00
Yuri Kuznetsov
e3b42ab084 type fixes 2022-03-16 11:34:07 +02:00
Yuri Kuznetsov
dcd0f6f56b type fixes 2022-03-15 21:29:18 +02:00
Yuri Kuznetsov
f7cab7d42d file get contents refactoring 2022-03-15 19:06:14 +02:00
Yuri Kuznetsov
3778e2640e type fixes 2022-03-15 15:10:01 +02:00
Yuri Kuznetsov
b399a8dd78 cleanup 2022-03-15 14:29:21 +02:00
Yuri Kuznetsov
6a45db8e1c api getQueryParam return string 2022-03-15 14:15:41 +02:00
Yuri Kuznetsov
6c89147b2c fix type 2022-03-15 13:12:41 +02:00
Yuri Kuznetsov
dff3321540 fix test 2022-03-15 12:50:48 +02:00
Yuri Kuznetsov
9592e68c30 type fixes 2022-03-15 12:44:30 +02:00
Yuri Kuznetsov
5ebd680d64 type fixes 2022-03-15 12:31:02 +02:00
Yuri Kuznetsov
603ac2b985 type fixes 2022-03-15 11:49:25 +02:00
Yuri Kuznetsov
6efff8e9d0 version param internal 2022-03-15 11:21:38 +02:00
Yuri Kuznetsov
a8a46976de type fixes 2022-03-14 14:46:42 +02:00
Yuri Kuznetsov
cd3a2bbc80 type fixes 2022-03-14 14:06:22 +02:00
Yuri Kuznetsov
bb2259232e type fixes 2022-03-14 13:20:13 +02:00
Yuri Kuznetsov
fdc9a98c1d fix 2022-03-14 12:49:05 +02:00
Yuri Kuznetsov
761df3c562 type fixes 2022-03-14 12:41:21 +02:00
Yuri Kuznetsov
11bd9c7d8f update dbal 2022-03-14 11:46:31 +02:00
Yuri Kuznetsov
bf24bfda43 Merge branch 'fix' 2022-03-14 11:26:35 +02:00
Yuri Kuznetsov
389dda2866 fix email folder mandatory filter 2022-03-14 11:22:38 +02:00
Yuri Kuznetsov
86026f8f7e css fixes 2022-03-14 11:16:44 +02:00
Yuri Kuznetsov
c0e82c6c00 type fixes 2022-03-13 16:50:10 +02:00
Yuri Kuznetsov
57e733754a type fixes 2022-03-13 15:20:47 +02:00
Yuri Kuznetsov
ceb67c5b95 type fixes 2022-03-13 14:36:14 +02:00
Yuri Kuznetsov
a164c33829 type fixes 2022-03-13 14:19:38 +02:00
Yuri Kuznetsov
120d090215 cs fix 2022-03-13 14:05:27 +02:00
Yuri Kuznetsov
a5139255f2 fixes 2022-03-12 20:12:38 +02:00
Yuri Kuznetsov
f5d5c4e75e fix 2022-03-12 20:02:36 +02:00
Yuri Kuznetsov
fca55da02f acl generics 2022-03-12 19:59:55 +02:00
Yuri Kuznetsov
0a5a82fb38 phpstan 6 level 2022-03-12 19:45:56 +02:00
Yuri Kuznetsov
b53378a1d3 type fixes 2022-03-12 19:44:25 +02:00
Yuri Kuznetsov
ceb436971d type fixes 2022-03-12 19:20:57 +02:00
Yuri Kuznetsov
9522446955 fixes 2022-03-12 15:15:28 +02:00
Yuri Kuznetsov
3eedeef605 type fixes 2022-03-12 15:02:07 +02:00
Yuri Kuznetsov
07f49c56ff type fixes 2022-03-12 14:49:28 +02:00
Yuri Kuznetsov
5031b17e8a type fixes 2022-03-12 12:38:14 +02:00
Yuri Kuznetsov
42642de0e6 type fixes 2022-03-12 10:59:30 +02:00
Yuri Kuznetsov
b4c5596b54 type fixes 2022-03-12 10:29:24 +02:00
Yuri Kuznetsov
cbb5aaa6dd type fixes 2022-03-11 21:31:06 +02:00
Yuri Kuznetsov
2383194f07 type fixes 2022-03-11 18:53:21 +02:00
Yuri Kuznetsov
21cbf390fd fix 2022-03-11 16:58:24 +02:00
Yuri Kuznetsov
db2c7f2c7b type fixes 2022-03-11 16:51:18 +02:00
Yuri Kuznetsov
e7994caf72 type fixes 2022-03-11 16:36:31 +02:00
Yuri Kuznetsov
f775f0467b type fixes 2022-03-11 14:44:38 +02:00
Yuri Kuznetsov
fd5c7763bc type fixes 2022-03-11 14:29:15 +02:00
Yuri Kuznetsov
d34c8d1918 type fixes 2022-03-11 14:09:17 +02:00
Yuri Kuznetsov
40d62c4213 type fixes 2022-03-11 13:40:35 +02:00
Yuri Kuznetsov
a12031f7bc type fixes 2022-03-11 13:26:25 +02:00
Yuri Kuznetsov
15b04590af fix 2022-03-11 13:18:42 +02:00
Yuri Kuznetsov
2e75c2815e fix 2022-03-11 13:09:33 +02:00
Yuri Kuznetsov
8677229785 type fixes 2022-03-11 13:07:31 +02:00
Yuri Kuznetsov
71193a9071 type fix 2022-03-11 12:52:11 +02:00
Yuri Kuznetsov
cefc0e9bdf type fixes 2022-03-11 12:42:03 +02:00
Yuri Kuznetsov
cf41312a01 type fixes 2022-03-11 12:24:17 +02:00
Yuri Kuznetsov
457b79f0a0 fix 2022-03-10 19:53:47 +02:00
Yuri Kuznetsov
d3f4131353 type fixes 2022-03-10 19:41:27 +02:00
Yuri Kuznetsov
b07ef24eea type fixes 2022-03-10 19:13:59 +02:00
Yuri Kuznetsov
8fd430b784 type fixes 2022-03-10 19:01:27 +02:00
Yuri Kuznetsov
593bf44b29 type fixes 2022-03-10 18:29:14 +02:00
Yuri Kuznetsov
1578ed8d8f fix 2022-03-10 17:23:13 +02:00
Yuri Kuznetsov
ef17859145 type fixes 2022-03-10 17:05:30 +02:00
Yuri Kuznetsov
3e8d2f8037 type fixes 2022-03-10 16:59:37 +02:00
Yuri Kuznetsov
9077c00386 type fixes 2022-03-10 14:22:12 +02:00
Yuri Kuznetsov
7212e0ed20 test fix 2022-03-10 13:36:26 +02:00
Yuri Kuznetsov
db92247b65 fix 2022-03-10 13:30:34 +02:00
Yuri Kuznetsov
daf86f89da type fixes 2022-03-10 13:25:56 +02:00
Yuri Kuznetsov
4ffe89bb4a type fixes 2022-03-10 13:21:33 +02:00
Yuri Kuznetsov
19e769d107 type fixes 2022-03-10 13:03:27 +02:00
Yuri Kuznetsov
8cc4ffdd80 type fixes 2022-03-10 12:49:44 +02:00
Yuri Kuznetsov
8f6b418f03 type fixes 2022-03-10 12:39:04 +02:00
Yuri Kuznetsov
00e6b710f3 type fixes 2022-03-10 12:34:07 +02:00
Yuri Kuznetsov
d5ee58cbbc type fixes 2022-03-10 12:17:04 +02:00
Yuri Kuznetsov
3ffebd2d8d type fixes 2022-03-10 11:55:25 +02:00
Yuri Kuznetsov
1fd96cc423 css fix 2022-03-09 13:49:51 +02:00
Yuri Kuznetsov
bcadb93f66 type fixes 2022-03-09 13:44:17 +02:00
Yuri Kuznetsov
ba28639f11 fix 2022-03-09 13:29:06 +02:00
Yuri Kuznetsov
60bca1635e type fixes 2022-03-09 13:25:19 +02:00
Yuri Kuznetsov
908caa7009 type fixes 2022-03-09 12:34:24 +02:00
Yuri Kuznetsov
896e1f7119 type fixes 2022-03-09 12:28:21 +02:00
Yuri Kuznetsov
07b42b48a3 update phpstan 2022-03-09 12:06:33 +02:00
Yuri Kuznetsov
196488f92d fixes 2022-03-09 12:06:26 +02:00
Yuri Kuznetsov
5c811b1861 type fixes 2022-03-09 11:44:42 +02:00
Yuri Kuznetsov
7300bec9c7 fix 2022-03-08 21:35:54 +02:00
Yuri Kuznetsov
ffbfe1ca5a type fixes 2022-03-08 21:34:09 +02:00
Yuri Kuznetsov
7150f49634 type fixes 2022-03-08 21:28:17 +02:00
Yuri Kuznetsov
316ca559bd cs fix 2022-03-08 21:28:07 +02:00
Yuri Kuznetsov
17c2204dd3 type fixes 2022-03-08 21:17:23 +02:00
Yuri Kuznetsov
17728b76f1 type fixes 2022-03-08 20:02:20 +02:00
Yuri Kuznetsov
b0920bf63f fix 2022-03-08 16:28:40 +02:00
Yuri Kuznetsov
2731e6cb8e type fixes 2022-03-08 16:23:06 +02:00
Yuri Kuznetsov
bbc3e9c196 type fixes 2022-03-08 14:53:30 +02:00
Yuri Kuznetsov
4e4186ebf2 type fixes 2022-03-08 14:52:06 +02:00
Yuri Kuznetsov
1e9648256f type fixes 2022-03-08 14:44:55 +02:00
Yuri Kuznetsov
3166bc92b9 type fixes 2022-03-08 14:25:59 +02:00
Yuri Kuznetsov
52c8b3c312 type fixes 2022-03-08 14:06:43 +02:00
Yuri Kuznetsov
08c381cc90 Merge branch 'fix' 2022-03-08 13:37:49 +02:00
Yuri Kuznetsov
919242910d fix bool filter any 2022-03-08 13:37:36 +02:00
Yuri Kuznetsov
03d68032bf fix bool filter any 2022-03-08 13:36:32 +02:00
Yuri Kuznetsov
5e4c076b87 type fixes 2022-03-08 12:51:53 +02:00
Yuri Kuznetsov
b150d84932 type fixes 2022-03-08 12:51:31 +02:00
Yuri Kuznetsov
f5a709fd56 type fixes 2022-03-08 12:14:42 +02:00
Yuri Kuznetsov
b1cab62b95 type fixes 2022-03-08 12:09:16 +02:00
Yuri Kuznetsov
b5bef88a8d category disable children link 2022-03-08 09:27:30 +02:00
Yuri Kuznetsov
0e8b9e950b fix 2022-03-08 09:19:36 +02:00
Yuri Kuznetsov
3e021cd3aa type fixes 2022-03-07 13:50:53 +02:00
Yuri Kuznetsov
98022fdb79 type fixes 2022-03-07 13:27:04 +02:00
Yuri Kuznetsov
687187c69c type fixes 2022-03-07 13:25:00 +02:00
Yuri Kuznetsov
17ca4fa69e type fixes 2022-03-07 13:15:29 +02:00
Yuri Kuznetsov
3546ade6ab type fixes 2022-03-07 13:11:07 +02:00
Yuri Kuznetsov
78c5ec8a0c type fixes 2022-03-07 12:11:33 +02:00
Yuri Kuznetsov
d9e2acbf92 type fixes 2022-03-06 19:29:44 +02:00
Yuri Kuznetsov
fb5034b276 type fixes 2022-03-06 18:27:41 +02:00
Yuri Kuznetsov
1898ccbd6b type fixes 2022-03-06 17:58:44 +02:00
Yuri Kuznetsov
a635bc246a type fixes 2022-03-06 17:55:39 +02:00
Yuri Kuznetsov
642b63d68e type fix 2022-03-06 16:03:10 +02:00
Yuri Kuznetsov
d7ed77396c type fixes 2022-03-06 16:02:04 +02:00
Yuri Kuznetsov
205ad80e51 type fixes 2022-03-06 15:48:57 +02:00
Yuri Kuznetsov
8592a411ee type fixes 2022-03-06 15:46:23 +02:00
Yuri Kuznetsov
61d78e8f76 typo fix 2022-03-06 14:58:35 +02:00
Yuri Kuznetsov
bad19eea2e fix 2022-03-06 14:55:57 +02:00
Yuri Kuznetsov
16ffca9590 type fixes 2022-03-06 14:53:16 +02:00
Yuri Kuznetsov
846e3eb01a type fixes 2022-03-06 14:33:11 +02:00
Yuri Kuznetsov
feeda48844 type fixes 2022-03-06 14:29:41 +02:00
Yuri Kuznetsov
9e4c555ab1 type fixes 2022-03-06 14:21:55 +02:00
Yuri Kuznetsov
dbf20bfff6 type fixes 2022-03-06 13:04:41 +02:00
Yuri Kuznetsov
9449d8364b type fixes 2022-03-06 10:34:46 +02:00
Yuri Kuznetsov
03131507bc type fixes 2022-03-06 10:31:54 +02:00
Yuri Kuznetsov
0b0a1943d0 type fixes 2022-03-06 10:23:45 +02:00
Yuri Kuznetsov
4d5899ef55 type fixes 2022-03-06 10:19:45 +02:00
Yuri Kuznetsov
93ddee9eee type fixes 2022-03-06 10:14:03 +02:00
Yuri Kuznetsov
90e435f495 type fixes 2022-03-06 10:03:59 +02:00
Yuri Kuznetsov
7da39f4228 type fixes 2022-03-05 21:42:53 +02:00
Yuri Kuznetsov
b7025bf834 type fixes 2022-03-05 18:01:43 +02:00
Yuri Kuznetsov
bc4dbacafb type fixes 2022-03-05 17:25:36 +02:00
Yuri Kuznetsov
80c2a69d39 type fixes 2022-03-05 17:08:24 +02:00
Yuri Kuznetsov
36e59d3d61 type fix 2022-03-05 15:59:32 +02:00
Yuri Kuznetsov
37f8247bbf type fixes 2022-03-05 14:41:49 +02:00
Yuri Kuznetsov
ead8f77267 fix test 2022-03-05 12:47:32 +02:00
Yuri Kuznetsov
b465d88531 fix 2022-03-05 12:30:00 +02:00
Yuri Kuznetsov
a2e37e05a6 type fixes 2022-03-05 12:10:52 +02:00
Yuri Kuznetsov
518e57e316 css fix 2022-03-04 13:15:21 +02:00
Yuri Kuznetsov
258d2f03f2 fix css 2022-03-04 13:07:44 +02:00
Yuri Kuznetsov
1b212b27d7 css fix 2022-03-04 13:06:33 +02:00
Yuri Kuznetsov
2e927fd4dc css fix 2022-03-04 12:55:58 +02:00
Yuri Kuznetsov
cbc58e2ebf css fix 2022-03-04 12:32:45 +02:00
Yuri Kuznetsov
a2fd0dc985 css fix 2022-03-04 12:29:05 +02:00
OSAMA BASHIR
a89a399b87 Update select-icon.js (#2242) 2022-03-03 19:58:17 +02:00
Yuri Kuznetsov
bb018f6a0f css fix 2022-03-03 13:32:14 +02:00
Yuri Kuznetsov
6e01ac50c8 fix css 2022-03-03 13:23:38 +02:00
Yuri Kuznetsov
50c5f5974d fix css 2022-03-03 12:49:52 +02:00
Yuri Kuznetsov
fce940a291 email filter refactoring and fix 2022-03-02 13:56:40 +02:00
Yuri Kuznetsov
e08459d1c6 Merge branch 'fix' 2022-03-01 21:21:47 +02:00
Yuri Kuznetsov
5b6889d554 fix kanban scroll 2022-03-01 21:21:18 +02:00
Yuri Kuznetsov
80babbca13 css fixes 2022-03-01 20:40:50 +02:00
Yuri Kuznetsov
7208966e1d update flotr 2022-02-23 16:52:43 +02:00
Yuri Kuznetsov
48c1a5d6d3 type fixes 2022-02-22 17:32:41 +02:00
Yuri Kuznetsov
930f45b93a disable hooks for extensions 2022-02-22 13:46:39 +02:00
Yuri Kuznetsov
992fad8102 css fix 2022-02-22 13:02:48 +02:00
Yuri Kuznetsov
420662132c fix css 2022-02-22 12:39:23 +02:00
Yuri Kuznetsov
d54e77a63f type fixes 2022-02-22 12:29:11 +02:00
Yuri Kuznetsov
0b60fbbb59 getEntityType final 2022-02-22 12:00:44 +02:00
Yuri Kuznetsov
0f94a7b65e fix link multiple duplicator 2022-02-21 17:23:59 +02:00
Yuri Kuznetsov
f8bbc0918c type fixes 2022-02-21 17:08:26 +02:00
Yuri Kuznetsov
6e5b4b1483 type fixes 2022-02-21 16:10:08 +02:00
Yuri Kuznetsov
15130fbe28 type fixes 2022-02-21 15:31:39 +02:00
Yuri Kuznetsov
27f0d9fb86 type fixes 2022-02-21 14:18:24 +02:00
Yuri Kuznetsov
ecf7dc54e0 type fixes 2022-02-21 13:34:19 +02:00
Yuri Kuznetsov
0598e82196 type fixes 2022-02-21 13:27:00 +02:00
Yuri Kuznetsov
32abc4b554 type fixes 2022-02-21 12:45:42 +02:00
Yuri Kuznetsov
d499719c08 typo fix 2022-02-21 12:17:01 +02:00
Yuri Kuznetsov
c105af939f dark iframe fallback 2022-02-21 11:26:04 +02:00
Yuri Kuznetsov
444245d2e1 acl support portal user check from non-portal app 2022-02-18 15:31:00 +02:00
Yuri Kuznetsov
63aaa2fbb0 select maanger factory use acl provider 2022-02-18 13:38:11 +02:00
Yuri Kuznetsov
3da9c3da8d css fix 2022-02-18 12:02:15 +02:00
Yuri Kuznetsov
381524203b calendar no shade transparent 2022-02-18 11:47:49 +02:00
Yuri Kuznetsov
347a8aa660 fix colors 2022-02-18 11:44:03 +02:00
Yuri Kuznetsov
4a83eb125d fix css 2022-02-18 11:36:22 +02:00
Yuri Kuznetsov
bfddc4ba90 fix 2022-02-17 18:24:45 +02:00
Yuri Kuznetsov
932e5ce461 style fix 2022-02-17 17:55:46 +02:00
Yuri Kuznetsov
fb45af1048 css fix 2022-02-17 17:34:43 +02:00
Yuri Kuznetsov
5aa154459d type fix 2022-02-17 17:14:31 +02:00
Yuri Kuznetsov
41139f52c8 type fix 2022-02-17 17:11:10 +02:00
Yuri Kuznetsov
e5a0774e3e type fix 2022-02-17 16:53:09 +02:00
Yuri Kuznetsov
0f020bb3ba type fix 2022-02-17 13:59:49 +02:00
Yuri Kuznetsov
c3d1c773e0 type fixes 2022-02-17 13:25:25 +02:00
Yuri Kuznetsov
38dd599b1e fix 2022-02-17 12:00:59 +02:00
Yuri Kuznetsov
701cc2a6d7 Merge branch 'fix' 2022-02-17 11:34:58 +02:00
Yuri Kuznetsov
fc9e06d7aa fix 2022-02-17 11:34:52 +02:00
Yuri Kuznetsov
ba10c9278f css fix 2022-02-17 11:31:46 +02:00
Yuri Kuznetsov
2a0b645a2d css fix 2022-02-17 11:25:41 +02:00
Yuri Kuznetsov
c324b63917 dark theme fixes 2022-02-17 11:21:43 +02:00
Yuri Kuznetsov
da425df98f fix css 2022-02-16 10:54:15 +02:00
Yuri Kuznetsov
005356d6c3 dark theme fixes 2022-02-16 10:52:48 +02:00
Yuri Kuznetsov
0d1cc3dac9 dark theme changes 2022-02-16 10:43:36 +02:00
Yuri Kuznetsov
19ae21d6b3 fix package 2022-02-16 09:58:48 +02:00
Yuri Kuznetsov
4d1a2ae4df css fix 2022-02-15 15:58:29 +02:00
Yuri Kuznetsov
a7d8d9b0e0 css fix 2022-02-15 15:54:25 +02:00
Yuri Kuznetsov
98922f0b84 varchar email address field 2022-02-15 13:21:35 +02:00
Yuri Kuznetsov
5784c79f9f cs fix 2022-02-15 12:48:54 +02:00
Yuri Kuznetsov
b027b36b54 ref 2022-02-15 12:41:57 +02:00
Yuri Kuznetsov
91100974c3 ref 2022-02-15 11:55:34 +02:00
Taras Machyshyn
1f6300e3a4 Installation: Fix displaying day of week 2022-02-11 17:17:14 +02:00
Yuri Kuznetsov
94b15991ac object function changes 2022-02-11 17:11:52 +02:00
Taras Machyshyn
3b976b6d26 Display upgrade statuses 2022-02-11 16:35:51 +02:00
Yuri Kuznetsov
90a18de806 object clear 2022-02-11 13:51:14 +02:00
Yuri Kuznetsov
0e5ff9f64a object functions 2022-02-11 13:44:56 +02:00
Yuri Kuznetsov
3fed1a5ae8 fix 2022-02-11 13:01:55 +02:00
Yuri Kuznetsov
3b414d1077 use npm ci 2022-02-11 12:28:16 +02:00
Yuri Kuznetsov
4cb67cd4df dark theme fix 2022-02-10 17:30:56 +02:00
Yuri Kuznetsov
be632b485d activities dashlet rerender fix 2022-02-10 17:25:43 +02:00
Yuri Kuznetsov
7edf109743 cs fix 2022-02-10 17:24:29 +02:00
Yuri Kuznetsov
ad8ee0e8ed don't re-render record list dashlet if collection not changed 2022-02-10 17:16:08 +02:00
Yuri Kuznetsov
9b9f1e84d5 cs fix 2022-02-10 16:53:21 +02:00
Yuri Kuznetsov
fba89354b2 type fix 2022-02-10 13:51:58 +02:00
Yuri Kuznetsov
45b3ec5cde fix 2022-02-10 13:45:15 +02:00
Taras Machyshyn
095f82df1c 2022 year 2022-02-10 12:12:23 +02:00
Yuri Kuznetsov
008a37701f address field empty null 2022-02-09 17:43:15 +02:00
Yuri Kuznetsov
f563194445 fix calendar dark theme 2022-02-09 17:21:17 +02:00
Yuri Kuznetsov
38360e7e78 formula field insert function position after opening bracket 2022-02-09 16:41:10 +02:00
Yuri Kuznetsov
c30b907aa0 npm version restriction 2022-02-09 14:28:48 +02:00
Yuri Kuznetsov
7ec559ea42 fix integration test workflow 2022-02-09 14:23:11 +02:00
Yuri Kuznetsov
91aeacbf35 formula null coalescing 2022-02-09 12:59:14 +02:00
Yuri Kuznetsov
223304bc63 formula parse int parse float 2022-02-09 11:53:27 +02:00
Yuri Kuznetsov
a4910e5a84 Merge branch 'fix' 2022-02-09 11:37:14 +02:00
Arkadiy
34f5d9d5b1 fix process setup handlers (#2228) 2022-02-09 09:37:06 +02:00
Yuri Kuznetsov
be62327509 string split function 2022-02-08 17:18:14 +02:00
Yuri Kuznetsov
9832bb54f9 update to npm 8 and update minimist 2022-02-08 15:53:29 +02:00
Yuri Kuznetsov
09b0d68786 cleanup 2022-02-08 14:15:05 +02:00
Yuri Kuznetsov
99da14b29b remove grunt-chmod 2022-02-08 13:58:56 +02:00
Yuri Kuznetsov
e4102aa1f7 package update 2022-02-08 13:21:41 +02:00
Yuri Kuznetsov
00f63b87a3 update npm packages 2022-02-08 12:40:56 +02:00
Yuri Kuznetsov
692940047e Merge branch 'fix' 2022-02-08 11:57:27 +02:00
Yuri Kuznetsov
cdf8a43b28 fix forward email 2022-02-08 11:55:57 +02:00
Yuri Kuznetsov
d24ad99f26 Merge branch 'fix' 2022-02-08 11:51:57 +02:00
Taras Machyshyn
b9b62e9f85 Test fixes 2022-02-08 11:49:09 +02:00
Yuri Kuznetsov
e3d53056d1 fix followed 2022-02-08 11:48:53 +02:00
Yuri Kuznetsov
75e8cf538a fix kanbanStatusIgnoreList 2022-02-08 11:48:28 +02:00
Yuri Kuznetsov
80c2944f0e v 2022-02-07 14:29:42 +02:00
Yuri Kuznetsov
b3f58b8002 time part ignore bad formatted value 2022-02-07 14:28:17 +02:00
Yuri Kuznetsov
83634706c2 label fix 2022-02-04 17:48:39 +02:00
Yuri Kuznetsov
44b96270a3 float field: decimal places 2022-02-04 17:44:14 +02:00
Yuri Kuznetsov
ecffd310b7 fix 2022-02-04 17:33:12 +02:00
Yuri Kuznetsov
8d2238e04a meeting/call duplicate from modal view 2022-02-04 14:49:49 +02:00
Yuri Kuznetsov
d6f0bc063e cleanup 2022-02-04 14:36:00 +02:00
Yuri Kuznetsov
4bec0b4795 delete entity from config params 2022-02-04 14:15:08 +02:00
Yuri Kuznetsov
a90182a7b1 fix css kanban 2022-02-04 12:06:48 +02:00
Yuri Kuznetsov
cf44d4f154 update package 2022-02-04 11:59:52 +02:00
Yuri Kuznetsov
231720a9a0 update package 2022-02-04 11:54:47 +02:00
Yuri Kuznetsov
26ab4abdec update packages 2022-02-04 11:46:21 +02:00
Yuri Kuznetsov
daab13b78a package updates 2022-02-04 11:41:16 +02:00
Yuri Kuznetsov
27946bcbac foreing field skip disabled link 2022-02-03 18:18:39 +02:00
Yuri Kuznetsov
ee636131f5 delete foreign field on link removal 2022-02-03 18:14:23 +02:00
Yuri Kuznetsov
71f5205c28 kanbanMinColumnWidth 2022-02-03 17:40:26 +02:00
Yuri Kuznetsov
f9b46b3b95 conversionDisabled 2022-02-03 17:02:44 +02:00
Yuri Kuznetsov
5d6e1319c0 fix draft email acl 2022-02-03 14:25:21 +02:00
Yuri Kuznetsov
cdbf680788 fix email access checker 2022-02-03 14:12:58 +02:00
Yuri Kuznetsov
8118e27bd8 fix error msg 2022-02-03 14:00:48 +02:00
Yuri Kuznetsov
5006e2e4fa fix email account 2022-02-03 13:51:48 +02:00
Yuri Kuznetsov
6b85fb95a2 fix modal 2022-02-03 13:47:22 +02:00
Yuri Kuznetsov
395fda2c5a zend bridge 2022-02-03 13:30:30 +02:00
Yuri Kuznetsov
9408a1637d modal collapse 2022-02-03 12:17:56 +02:00
Yuri Kuznetsov
09de0e3664 cs fix 2022-02-02 12:19:17 +02:00
Yuri Kuznetsov
e8b3582040 css fix 2022-02-01 17:13:31 +02:00
Yuri Kuznetsov
3bff5e3fb7 cleanup 2022-02-01 17:07:53 +02:00
Yuri Kuznetsov
e886293495 css fix 2022-02-01 17:07:20 +02:00
Yuri Kuznetsov
56d57c3fee color fix 2022-02-01 16:47:52 +02:00
Yuri Kuznetsov
03ade6eabc dark theme changes 2022-02-01 16:35:04 +02:00
Yuri Kuznetsov
732ed8924d fix is read 2022-02-01 14:15:04 +02:00
Yuri Kuznetsov
87051573d8 update npm packages 2022-02-01 13:42:01 +02:00
Yuri Kuznetsov
bd66449507 fix npm dep 2022-02-01 13:38:57 +02:00
Yuri Kuznetsov
e899a82840 fix npm deps 2022-02-01 13:37:05 +02:00
Yuri Kuznetsov
aba0c21f71 update grunt-replace 2022-02-01 12:52:03 +02:00
Yuri Kuznetsov
03838cfae8 npm update fixes 2022-02-01 12:48:48 +02:00
Yuri Kuznetsov
61772b8e40 fix workflow 2022-02-01 12:40:34 +02:00
Yuri Kuznetsov
b445de322c compose email full form 2022-02-01 12:37:07 +02:00
Yuri Kuznetsov
db2b8b63be cs fix 2022-02-01 12:04:11 +02:00
Yuri Kuznetsov
d355db6bb1 email fixes 2022-02-01 11:45:31 +02:00
Yuri Kuznetsov
a529edc4b2 email edit button send 2022-02-01 11:39:04 +02:00
Yuri Kuznetsov
d1effdae81 email draft improvements 2022-01-31 17:24:07 +02:00
Yuri Kuznetsov
a7b959a1d9 email send button left 2022-01-31 16:59:05 +02:00
Yuri Kuznetsov
951f026f8f cs fix 2022-01-31 16:02:17 +02:00
Yuri Kuznetsov
1c8506eee4 email draft without to address 2022-01-31 15:44:58 +02:00
Yuri Kuznetsov
22f309e02a php parse bump 2022-01-31 14:05:40 +02:00
Yuri Kuznetsov
4d9d9e4569 lock change 2022-01-31 14:00:51 +02:00
dependabot[bot]
9e1cbc5fc0 Bump path-parse from 1.0.6 to 1.0.7 (#2216)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-31 13:49:37 +02:00
Yuri Kuznetsov
6ba2733492 fuix 2022-01-31 13:44:14 +02:00
Yuri Kuznetsov
35d0ebe974 fix branch 2022-01-31 13:43:52 +02:00
Yuri Kuznetsov
5e8efcd269 integration test on fix 2022-01-31 13:41:54 +02:00
Yuri Kuznetsov
2440eb5e95 Merge branch 'hotfix/7.0.10' 2022-01-31 13:22:03 +02:00
Yuri Kuznetsov
b8d2f9de30 action renderer 2022-01-28 16:54:19 +02:00
Yuri Kuznetsov
7a2ff40776 cleanup password change requests 2022-01-28 16:31:11 +02:00
Yuri Kuznetsov
56fff07662 keywords 2022-01-28 16:26:40 +02:00
Yuri Kuznetsov
434b4f880f fix phpstan ext 2022-01-28 16:22:20 +02:00
Yuri Kuznetsov
f596d12e02 send access info formula 2022-01-28 16:12:37 +02:00
Yuri Kuznetsov
c4be84af32 password change link 2022-01-28 13:39:28 +02:00
Yuri Kuznetsov
a2b2118f9f change scheduling 2022-01-27 18:15:52 +02:00
Yuri Kuznetsov
7fee372f3d fix link multiple factory for php 8.1 2022-01-27 18:15:22 +02:00
Yuri Kuznetsov
e3fe496321 move 2022-01-27 12:52:40 +02:00
Yuri Kuznetsov
5c890d3e0e fix workflow 2022-01-27 12:31:51 +02:00
Yuri Kuznetsov
496d132c23 fix edit disabled 2022-01-27 12:29:17 +02:00
Yuri Kuznetsov
68fb2d45e1 Update README.md 2022-01-26 22:11:00 +02:00
Yuri Kuznetsov
e44b0d2c22 fix 2022-01-26 18:07:19 +02:00
Yuri Kuznetsov
5e87a410c8 integration testing workflow 2022-01-26 18:05:26 +02:00
Yuri Kuznetsov
6f34b040cf fix modal backdrop 2022-01-26 14:57:13 +02:00
Yuri Kuznetsov
0d0ad8b581 fix confirm leaveout backdrop click 2022-01-26 14:29:41 +02:00
Yuri Kuznetsov
a3eac057fc modal dialog backdrop 2022-01-26 13:10:08 +02:00
Yuri Kuznetsov
489b3a7629 formula sandbox save entity 2022-01-26 12:27:57 +02:00
Yuri Kuznetsov
45aff4a7b7 detail layout fields incompatibility 2022-01-26 12:19:09 +02:00
Yuri Kuznetsov
4653caef47 array functions accept null 2022-01-25 17:00:08 +02:00
Yuri Kuznetsov
1d9b988206 integration test env config 2022-01-25 16:35:11 +02:00
Yuri Kuznetsov
ebedd6d722 fix 2022-01-25 15:45:44 +02:00
Yuri Kuznetsov
b0311d1610 type fix 2022-01-25 14:24:14 +02:00
Yuri Kuznetsov
158573f63e type fixes 2022-01-25 14:20:02 +02:00
Yuri Kuznetsov
93172f42b7 updates 2022-01-25 13:53:55 +02:00
Yuri Kuznetsov
b3476fe3dd update laminas 2022-01-25 13:49:11 +02:00
Yuri Kuznetsov
1f85781c68 test 8.1 2022-01-25 13:34:19 +02:00
Yuri Kuznetsov
595548acf0 cleanup 2022-01-25 13:30:10 +02:00
Yuri Kuznetsov
a32fffb36d ci 2022-01-25 13:29:42 +02:00
Taras Machyshyn
3de5961c86 Test fixes 2022-01-24 15:44:58 +02:00
Yuri Kuznetsov
1b4727917b Merge branch 'hotfix/7.0.10' 2022-01-24 12:14:52 +02:00
Yuri Kuznetsov
499cf36edf fix followed 2022-01-24 12:13:57 +02:00
Yuri Kuznetsov
bb1856a47e Merge branch 'hotfix/7.0.10' 2022-01-21 16:53:41 +02:00
Yuri Kuznetsov
0226a6a4f7 fix kanbanStatusIgnoreList 2022-01-21 16:53:25 +02:00
Yuri Kuznetsov
6c9a542b9c entity manager edit page 2022-01-21 16:43:50 +02:00
Yuri Kuznetsov
59ae933886 Merge branch 'stable' 2022-01-21 12:43:52 +02:00
Yuri Kuznetsov
b22464c02f v 2022-01-21 10:58:42 +02:00
Yuri Kuznetsov
4615781af8 style fix 2022-01-20 14:30:27 +02:00
Yuri Kuznetsov
ce0efea447 fix admin labels 2022-01-20 14:10:51 +02:00
Yuri Kuznetsov
378a2c6902 fix 2022-01-20 13:43:54 +02:00
Yuri Kuznetsov
ab3fc73a18 dev 2022-01-20 13:30:37 +02:00
Yuri Kuznetsov
b3c56acd15 dev 2022-01-20 12:43:08 +02:00
Yuri Kuznetsov
2c9b60dbec dev 2022-01-19 17:28:02 +02:00
Yuri Kuznetsov
620a18cd72 dev 2022-01-19 17:09:48 +02:00
Yuri Kuznetsov
ba832b8ad9 dev 2022-01-19 17:03:40 +02:00
Yuri Kuznetsov
bcfffd3527 target list customizable 2022-01-19 12:41:21 +02:00
Yuri Kuznetsov
022da56bf4 change 2022-01-19 12:13:21 +02:00
Yuri Kuznetsov
12549e2587 type fix 2022-01-18 17:43:26 +02:00
Yuri Kuznetsov
57ab075d2f type fixes 2022-01-18 17:39:27 +02:00
Yuri Kuznetsov
1510322708 refactoring 2022-01-18 16:27:22 +02:00
Yuri Kuznetsov
22c06c88dd fix 2022-01-18 14:00:03 +02:00
Yuri Kuznetsov
7a4b20269d cs fix 2022-01-18 13:52:28 +02:00
Yuri Kuznetsov
79d76d8147 cleanup 2022-01-18 13:52:06 +02:00
Yuri Kuznetsov
2bf2e4ef3d update marked 2022-01-18 13:40:42 +02:00
Yuri Kuznetsov
61ec16ae12 fix 2022-01-18 13:05:18 +02:00
Yuri Kuznetsov
8415307221 cs fix 2022-01-18 12:58:43 +02:00
Yuri Kuznetsov
6da466f9c4 import admin link 2022-01-18 12:24:12 +02:00
Yuri Kuznetsov
210ac2ef2a fix 2022-01-18 12:06:51 +02:00
Yuri Kuznetsov
988f8090f2 fix 2022-01-18 12:02:36 +02:00
Yuri Kuznetsov
e2db825fc2 cs fix 2022-01-17 17:34:17 +02:00
Yuri Kuznetsov
cc9ed3f365 admin links 2022-01-17 17:24:09 +02:00
Yuri Kuznetsov
0763b71396 admin link 2022-01-17 16:27:44 +02:00
Yuri Kuznetsov
af2158f647 fix 2022-01-17 16:06:36 +02:00
Yuri Kuznetsov
4ad636a767 fix 2022-01-17 14:52:20 +02:00
Yuri Kuznetsov
dffb484fff formula fetch null 2022-01-17 13:51:05 +02:00
Yuri Kuznetsov
6582917daf formula sandbox 2022-01-17 12:58:16 +02:00
Yuri Kuznetsov
7bd109eca6 cs fix 2022-01-14 13:07:11 +02:00
Yuri Kuznetsov
c0d85864ce fix 2022-01-14 11:49:03 +02:00
Yuri Kuznetsov
7007d58609 fix 2022-01-13 17:57:20 +02:00
Yuri Kuznetsov
23a54a0fa4 formula strict syntax 2022-01-13 17:56:19 +02:00
Yuri Kuznetsov
491a66ac4c formula strict syntax 2022-01-13 17:49:36 +02:00
Yuri Kuznetsov
e5c3bfb528 formula more strict syntax 2022-01-13 17:36:05 +02:00
Yuri Kuznetsov
f807bdee42 fix 2022-01-13 16:57:29 +02:00
Yuri Kuznetsov
67b3462361 fix 2022-01-13 16:53:00 +02:00
Yuri Kuznetsov
cd1eccd998 fix 2022-01-13 16:19:44 +02:00
Yuri Kuznetsov
63b108b18b cs fix 2022-01-13 16:17:59 +02:00
Yuri Kuznetsov
3907e2d84a fix 2022-01-13 14:45:53 +02:00
Yuri Kuznetsov
4deeac9513 formula check syntax 2022-01-13 14:33:08 +02:00
Yuri Kuznetsov
4c11bf663b fix 2022-01-13 13:55:12 +02:00
Yuri Kuznetsov
d8649cb305 type fix 2022-01-13 13:19:58 +02:00
Yuri Kuznetsov
eff2a022bf attachment preview non dragable 2022-01-13 12:57:39 +02:00
Yuri Kuznetsov
ad61b457d8 cs fix 2022-01-13 12:53:32 +02:00
Yuri Kuznetsov
22c3c92792 entity manager formula ui improvement 2022-01-13 12:36:34 +02:00
Yuri Kuznetsov
5919016aad fix update note 2022-01-12 17:45:00 +02:00
Yuri Kuznetsov
14c12a2528 cs fix 2022-01-12 17:16:27 +02:00
Yuri Kuznetsov
bca1f08f05 color fix 2022-01-12 16:28:03 +02:00
Yuri Kuznetsov
2ce656731d fix label 2022-01-12 14:32:30 +02:00
Yuri Kuznetsov
6d7fb4939d fix export 2022-01-12 14:27:22 +02:00
Yuri Kuznetsov
3cb8deab2c export in idle 2022-01-12 14:07:38 +02:00
Yuri Kuznetsov
b501007d44 cleanup 2022-01-11 18:27:03 +02:00
Yuri Kuznetsov
70f7312f20 fix 2022-01-11 18:26:38 +02:00
Yuri Kuznetsov
b7b5b1b3cb fix 2022-01-11 16:43:32 +02:00
Yuri Kuznetsov
44001d9764 Merge branch 'hotfix/7.0.9' 2022-01-11 13:04:09 +02:00
Yuri Kuznetsov
5dcfbf00d2 fix email address 2022-01-11 13:03:48 +02:00
Yuri Kuznetsov
8ca52259cd Merge branch 'hotfix/7.0.9' 2022-01-11 12:25:05 +02:00
Yuri Kuznetsov
f4753f773f modal backdrop fix 2022-01-11 12:22:51 +02:00
Yuri Kuznetsov
0f3f9a827b mail flags fix 2022-01-11 11:41:30 +02:00
Yuri Kuznetsov
a90745aded test 2022-01-11 11:20:35 +02:00
Yuri Kuznetsov
96a1ab6ad6 cleanup 2022-01-10 18:07:17 +02:00
Yuri Kuznetsov
f49b6a072c refactoring 2022-01-10 18:03:48 +02:00
Yuri Kuznetsov
146ca6ae2a fix 2022-01-10 17:44:10 +02:00
Yuri Kuznetsov
b775e16c1f refactoring 2022-01-10 17:39:58 +02:00
Yuri Kuznetsov
043df4bc73 select folder style fix 2022-01-10 16:39:19 +02:00
Yuri Kuznetsov
7d660f5127 fix 2022-01-10 16:23:31 +02:00
Yuri Kuznetsov
71064cd6ee cleanup 2022-01-10 14:13:27 +02:00
Yuri Kuznetsov
93f2f962e2 email refacctoring 2022-01-10 14:02:47 +02:00
Yuri Kuznetsov
8eb7f932fc refactoring 2022-01-10 12:39:14 +02:00
Yuri Kuznetsov
d2fb6edde1 refactoring 2022-01-10 11:24:10 +02:00
Yuri Kuznetsov
ed59886897 refactoring 2022-01-10 11:14:31 +02:00
Yuri Kuznetsov
07b6c64640 fix 2022-01-08 20:04:01 +02:00
Yuri Kuznetsov
420e5fa3a5 fix 2022-01-08 19:52:33 +02:00
Yuri Kuznetsov
3e12428e54 fix 2022-01-08 19:42:20 +02:00
Yuri Kuznetsov
4d2a2e9b20 cs fix 2022-01-08 19:34:15 +02:00
Yuri Kuznetsov
5650a00ab1 mail refactoring 2022-01-08 19:15:57 +02:00
Yuri Kuznetsov
2eb42a3313 fix 2022-01-06 14:57:12 +02:00
Yuri Kuznetsov
84d4d4f11b email notify fix 2022-01-06 14:36:00 +02:00
Yuri Kuznetsov
b6a9182838 Merge branch 'hotfix/7.0.9' 2022-01-06 14:26:36 +02:00
Yuri Kuznetsov
a6593f574e fix 2022-01-06 14:26:26 +02:00
Yuri Kuznetsov
d277df1e49 cleanup 2022-01-06 14:26:08 +02:00
Yuri Kuznetsov
5721f6d737 email account refactoring 2022-01-06 14:15:48 +02:00
Yuri Kuznetsov
a07b7530df Merge branch 'hotfix/7.0.9' 2022-01-06 14:15:21 +02:00
Yuri Kuznetsov
bff4e859cd fix notice 2022-01-06 14:07:57 +02:00
Yuri Kuznetsov
0944d47c47 Merge branch 'hotfix/7.0.9' 2022-01-05 17:14:33 +02:00
Yuri Kuznetsov
d725cce8a7 fix email to case attachments copy 2022-01-05 17:14:21 +02:00
Yuri Kuznetsov
a730f47ceb sms status update 2022-01-05 11:19:33 +02:00
Yuri Kuznetsov
8e3d743023 cs fix 2022-01-03 16:23:54 +02:00
Yuri Kuznetsov
cdb2b8a8a8 cs fix and text resize fix 2022-01-03 16:20:58 +02:00
Yuri Kuznetsov
a453be93be type fixes 2022-01-03 16:04:23 +02:00
Yuri Kuznetsov
3cef36da3e type fixes 2022-01-03 15:58:05 +02:00
Yuri Kuznetsov
691343c9b2 type fixes 2022-01-03 15:52:15 +02:00
Yuri Kuznetsov
2453fe9ea5 textarea resize vertical 2022-01-03 12:55:19 +02:00
Yuri Kuznetsov
c0594b80e9 css fixes 2022-01-03 12:47:43 +02:00
Yuri Kuznetsov
5239df2b95 fixes 2022-01-03 12:37:13 +02:00
Yuri Kuznetsov
0f1ac3af10 fixes 2022-01-03 12:31:11 +02:00
Yuri Kuznetsov
d5f42a46b3 array, multi-enum: don't re-render if same option list is set 2022-01-03 12:11:58 +02:00
Yuri Kuznetsov
0ae6fdbac2 cs fix 2022-01-03 12:05:43 +02:00
Yuri Kuznetsov
f214aaba2a cs fix 2022-01-03 11:50:34 +02:00
Yuri Kuznetsov
67a4208b3b dark theme fixes 2022-01-03 11:29:13 +02:00
Yuri Kuznetsov
5991bb948b drop php 7.3 2022-01-03 11:04:01 +02:00
Yuri Kuznetsov
50bfa1ae99 update doctrine 2022-01-03 10:50:55 +02:00
Yuri Kuznetsov
409f19bb29 fix acceptance status modal 2021-12-31 17:23:30 +02:00
Yuri Kuznetsov
c631dd7a0f css fix 2021-12-31 17:20:56 +02:00
Yuri Kuznetsov
db74afcfb4 css changes 2021-12-31 17:17:45 +02:00
Yuri Kuznetsov
ac6bdcc30a css fix 2021-12-30 16:39:35 +02:00
Yuri Kuznetsov
2556f89637 style fixes 2021-12-30 16:11:14 +02:00
Yuri Kuznetsov
3ec25d5a97 cs fix- 2021-12-30 16:07:01 +02:00
Yuri Kuznetsov
c9bdd8231b style fix 2021-12-30 15:54:26 +02:00
Yuri Kuznetsov
9d372155fb style fix 2021-12-30 15:49:09 +02:00
Yuri Kuznetsov
4ebdcf3637 Merge branch 'hotfix/7.0.9' 2021-12-30 15:40:33 +02:00
Eymen Elkum
150e41a26d fix folder name (#2180)
* fix folder name

* remove trim folder name on inbound
2021-12-30 15:39:28 +02:00
Yuri Kuznetsov
79c4a8351d body plain fix 2021-12-30 15:33:12 +02:00
Yuri Kuznetsov
0f6c340793 textarea disable resize 2021-12-30 14:10:20 +02:00
Yuri Kuznetsov
c7fe7ac014 wysiwyg supporting image paste 2021-12-30 13:35:29 +02:00
Yuri Kuznetsov
a0939c714c fix css 2021-12-30 13:12:46 +02:00
Yuri Kuznetsov
d57098dd50 wysiwyg duplicate and email body forward duplicate 2021-12-30 13:06:14 +02:00
Yuri Kuznetsov
4b521d1481 X-Duplicate-Source-Id 2021-12-30 12:22:03 +02:00
Yuri Kuznetsov
919cea0703 passing x-duplicate-source-id 2021-12-30 12:01:49 +02:00
Yuri Kuznetsov
6aa372c955 entity duplicator framework 2021-12-30 11:22:15 +02:00
Yuri Kuznetsov
0e873fea52 mass action notify 2021-12-29 15:53:45 +02:00
Yuri Kuznetsov
44003e8130 test 2021-12-29 15:25:29 +02:00
Yuri Kuznetsov
2a4bd851ab fixes 2021-12-29 13:23:00 +02:00
Yuri Kuznetsov
cb5fdfba85 cleanup 2021-12-29 12:51:27 +02:00
Yuri Kuznetsov
8973959910 type fix 2021-12-29 12:51:21 +02:00
Yuri Kuznetsov
383f411739 mass action testand fix 2021-12-29 12:39:08 +02:00
Taras Machyshyn
c500b30484 Notification fix 2021-12-29 12:15:39 +02:00
Yuri Kuznetsov
91fec4ff95 Merge branch 'hotfix/7.0.9' 2021-12-28 18:36:18 +02:00
Yuri Kuznetsov
5266e8eeba email address fix 2021-12-28 18:31:05 +02:00
Yuri Kuznetsov
d96bf13526 fix 2021-12-28 18:01:18 +02:00
Yuri Kuznetsov
bf017ccc8a mass action cleanup 2021-12-28 17:55:03 +02:00
Yuri Kuznetsov
c1ca41942f mass action idle 2021-12-28 17:28:52 +02:00
Yuri Kuznetsov
8c8e44b6f5 post button ux improvement 2021-12-27 11:07:46 +02:00
Yuri Kuznetsov
f95824404a css fix 2021-12-27 10:44:43 +02:00
Yuri Kuznetsov
4eecc5462b phone type change 2021-12-26 11:08:43 +02:00
Yuri Kuznetsov
3a96cbae9b chevron-righr instead of right quote 2021-12-26 11:04:54 +02:00
Yuri Kuznetsov
77f3d81f27 css fix 2021-12-25 18:19:06 +02:00
Yuri Kuznetsov
7343e08abb css fixes 2021-12-25 18:04:40 +02:00
Yuri Kuznetsov
3b7b6e9ed7 cleanup 2021-12-25 17:37:40 +02:00
Yuri Kuznetsov
70a9fd95a2 css fix 2021-12-25 17:36:43 +02:00
Yuri Kuznetsov
c0e64583e5 modal fixes 2021-12-25 16:17:53 +02:00
Yuri Kuznetsov
211f6bdc42 css fix 2021-12-24 17:55:59 +02:00
Yuri Kuznetsov
f07440f9ef css fix 2021-12-24 17:50:27 +02:00
Yuri Kuznetsov
7f37cd40eb css fix 2021-12-24 17:47:30 +02:00
Yuri Kuznetsov
b0d7b33dbc fix 2021-12-24 17:43:07 +02:00
Yuri Kuznetsov
35905aad1b fix 2021-12-24 17:38:29 +02:00
Yuri Kuznetsov
62b27475fb style changes 2021-12-24 17:35:29 +02:00
Yuri Kuznetsov
0985df234f css fix 2021-12-24 16:48:09 +02:00
Yuri Kuznetsov
a05650a41a modal fixes 2021-12-24 16:20:08 +02:00
Yuri Kuznetsov
0c0744714e modal fixes 2021-12-24 16:07:33 +02:00
Yuri Kuznetsov
cd60933525 summernote css fix 2021-12-24 15:50:07 +02:00
Yuri Kuznetsov
2d3deafcc6 ace theme tomorrows night 2021-12-24 15:36:20 +02:00
Yuri Kuznetsov
25508b932e ace dark mode 2021-12-24 15:29:26 +02:00
Yuri Kuznetsov
05d3610f5f requirePromise 2021-12-24 15:27:31 +02:00
Yuri Kuznetsov
5b0ef914c2 css fix 2021-12-24 13:44:13 +02:00
Yuri Kuznetsov
35f2ccecf5 calendar colors 2021-12-24 13:37:08 +02:00
Yuri Kuznetsov
122d759687 remove theme name translations 2021-12-24 13:03:57 +02:00
Yuri Kuznetsov
a2c94c692a dark horizontal 2021-12-24 12:59:18 +02:00
Yuri Kuznetsov
e197c6e491 css scroll 2021-12-24 12:41:52 +02:00
Yuri Kuznetsov
62ff80c1bf mass action btn fix 2021-12-24 12:10:30 +02:00
Yuri Kuznetsov
3a7cccbda2 cs fix 2021-12-24 12:01:05 +02:00
Yuri Kuznetsov
3bab92239a cs fix 2021-12-24 11:58:08 +02:00
Yuri Kuznetsov
cc0b12097d cs fix 2021-12-24 11:50:36 +02:00
Yuri Kuznetsov
fe09d91bf0 css fix list expanded dd 2021-12-24 11:35:51 +02:00
Yuri Kuznetsov
593ed7c5e0 Merge branch 'hotfix/7.0.9' 2021-12-24 11:32:25 +02:00
Yuri Kuznetsov
e161b0da19 fix list expanded dd 2021-12-24 11:29:23 +02:00
Yuri Kuznetsov
31a2ef63ec cs fix 2021-12-24 11:19:33 +02:00
Yuri Kuznetsov
facc26a795 fix css 2021-12-23 17:47:41 +02:00
Yuri Kuznetsov
fb4a4f2340 css cleanup 2021-12-23 17:38:58 +02:00
Yuri Kuznetsov
42cab04edd css fix 2021-12-23 17:25:16 +02:00
Yuri Kuznetsov
247521ba37 dark theme 2021-12-23 17:17:23 +02:00
Yuri Kuznetsov
9f932462a8 fix image 2021-12-22 16:23:17 +02:00
Yuri Kuznetsov
3f7c42a05e theme changes 2021-12-21 11:45:42 +02:00
Yuri Kuznetsov
3ca502ba6e css changes 2021-12-20 16:59:30 +02:00
Yuri Kuznetsov
8afe22f637 theme colors 2021-12-20 15:47:34 +02:00
Yuri Kuznetsov
a615eed985 Merge branch 'master' into hotfix/7.0.9 2021-12-20 15:38:14 +02:00
Yuri Kuznetsov
df56679c4e rename themes 2021-12-20 15:37:30 +02:00
Yuri Kuznetsov
23b2e87127 fix 2021-12-19 09:42:59 +02:00
Yuri Kuznetsov
9391c68ad0 fix plural link name 2021-12-19 09:10:52 +02:00
Taras Machyshyn
8a15278af2 Installation fix 2021-12-14 16:12:22 +02:00
Yuri Kuznetsov
8f2c12cba7 remove css 2021-12-13 15:49:04 +02:00
Yuri Kuznetsov
842c028fb5 css changes 2021-12-13 15:37:16 +02:00
Yuri Kuznetsov
27aae16634 cleanup 2021-12-13 15:21:39 +02:00
Yuri Kuznetsov
0206da6d4f css fix 2021-12-13 13:09:42 +02:00
Yuri Kuznetsov
687f308b40 merge 2021-12-13 12:54:11 +02:00
Eymen Elkum
20eced4373 personal & group email account: ignore internal fields from being duplicated (#2178)
Co-authored-by: Eymen Elkum <eymen@eblasoft.com.tr>
2021-12-13 12:45:03 +02:00
Yuri Kuznetsov
7d0c793e47 kanban improvements 2021-12-13 12:36:06 +02:00
Yuri Kuznetsov
ead21ea2ee kanban improvements 2021-12-13 12:11:43 +02:00
Yuri Kuznetsov
45ef1a4de5 kanban changes 2021-12-12 13:09:35 +02:00
Yuri Kuznetsov
28b866830e kanban changes 2021-12-10 17:08:51 +02:00
Yuri Kuznetsov
4d68e35f3b fix 2021-12-09 16:50:47 +02:00
Yuri Kuznetsov
12a2069fcf kanban scroll 2021-12-09 16:34:01 +02:00
Yuri Kuznetsov
b87d2459cc kanban create 2021-12-09 14:06:08 +02:00
Yuri Kuznetsov
7c1c25577c save event 2021-12-09 12:38:58 +02:00
Yuri Kuznetsov
9d6e0ba54b cs fix 2021-12-09 12:38:58 +02:00
Yuri Kuznetsov
bd3c6867b5 cs fix 2021-12-09 12:38:58 +02:00
Taras Machyshyn
28c4b8ea05 Fix typo 2021-12-09 12:18:26 +02:00
Yuri Kuznetsov
7a90e30243 fix 2021-12-09 11:37:32 +02:00
Yuri Kuznetsov
f482c41e6c custom global bool filterse 2021-12-08 16:35:58 +02:00
Yuri Kuznetsov
06ffafba10 send invitations from modal 2021-12-08 15:50:38 +02:00
Yuri Kuznetsov
2a07124d52 cs fix 2021-12-08 15:35:28 +02:00
Yuri Kuznetsov
65247b1c69 cs fix 2021-12-08 11:59:03 +02:00
Yuri Kuznetsov
10e4b7e5b6 cs fix 2021-12-08 11:52:46 +02:00
Yuri Kuznetsov
ff3e6c34ba cs fix 2021-12-08 11:50:50 +02:00
Yuri Kuznetsov
19700cfa00 cs fix 2021-12-08 11:50:32 +02:00
Yuri Kuznetsov
d0de9e5bb9 Merge branch 'hotfix/7.0.9' 2021-12-06 10:54:11 +02:00
Yuri Kuznetsov
9861653378 types 2021-12-02 18:14:46 +02:00
Yuri Kuznetsov
0a4525b75e fix 2021-12-02 16:30:22 +02:00
Yuri Kuznetsov
1c45cadcf8 fix htmlizer order related 2021-12-02 15:33:50 +02:00
Yuri Kuznetsov
83ced0d58f orm defs: no type exception 2021-12-02 12:54:17 +02:00
Yuri Kuznetsov
6ee224ffbc fix 2021-12-01 17:23:20 +02:00
Yuri Kuznetsov
a060f0732b attachment container fix 2021-12-01 15:15:06 +02:00
Yuri Kuznetsov
4e2a824b1d fix 2021-12-01 11:24:26 +02:00
Yuri Kuznetsov
85c4848614 cleanup 2021-12-01 11:16:40 +02:00
Yuri Kuznetsov
a5ca838b7a fix typo 2021-12-01 11:12:34 +02:00
Yuri Kuznetsov
1127f4b28c languageIsGlobal param 2021-11-30 16:04:20 +02:00
Yuri Kuznetsov
e68ff3c391 fix smarty for php8.1 2021-11-29 13:46:03 +02:00
Yuri Kuznetsov
c257da0e70 accept bool 1 value, fix for php 8.1 2021-11-29 13:43:07 +02:00
Yuri Kuznetsov
7669ac90ae edit fix 2021-11-26 16:14:12 +02:00
Yuri Kuznetsov
5e7ddcad1c try check usage 2021-11-26 10:48:51 +02:00
Yuri Kuznetsov
1cf773216d cs fix 2021-11-26 10:44:35 +02:00
Yuri Kuznetsov
da3283f2ba fix link one saver 2021-11-25 17:12:04 +02:00
Yuri Kuznetsov
18d6a6767b notification message support markdown 2021-11-25 13:19:58 +02:00
Yuri Kuznetsov
f8fd222e25 multiple bool filters fix 2021-11-24 12:21:55 +02:00
Yuri Kuznetsov
fd7819f76a cs fix 2021-11-24 09:09:29 +02:00
Yuri Kuznetsov
48cfedb777 fix parent 2021-11-24 09:07:51 +02:00
Yuri Kuznetsov
9220ad8baa email to case account 2021-11-23 15:16:52 +02:00
Yuri Kuznetsov
6207c8f547 attachment take into account field level 2021-11-22 11:22:56 +02:00
Yuri Kuznetsov
b9e1660f92 comment 2021-11-22 10:58:05 +02:00
Yuri Kuznetsov
8863e7da9b Merge branch 'hotfix/7.0.9' 2021-11-19 12:41:24 +02:00
Yuri Kuznetsov
3b1462ac1a complex expression field view 2021-11-19 12:40:37 +02:00
Yuri Kuznetsov
937503ab8b formula hide entity functions if no target entity type 2021-11-18 12:53:51 +02:00
Yuri Kuznetsov
b3edfba0da fix 2021-11-17 12:19:47 +02:00
Yuri Kuznetsov
01a1d26a52 cs fix 2021-11-17 12:18:27 +02:00
Yuri Kuznetsov
4662fc47e9 xlsx export: fix link one 2021-11-16 12:15:11 +02:00
Yuri Kuznetsov
5b543d778d fix 2021-11-16 12:11:21 +02:00
Yuri Kuznetsov
798f56650d person name support fix 2021-11-13 10:34:30 +02:00
Yuri Kuznetsov
864c96fe56 fixes 2021-11-13 10:29:47 +02:00
Yuri Kuznetsov
4d5eecd680 Merge branch 'hotfix/7.0.9' 2021-11-12 12:44:19 +02:00
Taras Machyshyn
db2216adb7 Fixed PDO parameters for Dbal connection 2021-11-11 15:31:11 +02:00
Yuri Kuznetsov
ae056f4a22 type 2021-11-11 12:49:20 +02:00
Yuri Kuznetsov
5178c2fbd0 orm pdo refactoring 2021-11-11 12:47:43 +02:00
Yuri Kuznetsov
4bedaef9a8 fixes 2021-11-11 12:17:21 +02:00
Yuri Kuznetsov
42d4de77ae cs fix 2021-11-11 12:17:05 +02:00
Yuri Kuznetsov
3e0a8f0af1 fix 2021-11-11 11:40:11 +02:00
Yuri Kuznetsov
33e29e20a2 type fixes 2021-11-10 16:53:15 +02:00
Yuri Kuznetsov
d2a1e8f771 fixes 2021-11-10 16:40:33 +02:00
Yuri Kuznetsov
3a68ebcbf4 type fixes 2021-11-10 16:04:31 +02:00
Yuri Kuznetsov
f496f386ee type fixes 2021-11-10 15:44:09 +02:00
Yuri Kuznetsov
9e641e65ed type fixes 2021-11-10 15:34:24 +02:00
Yuri Kuznetsov
d34bc6d7d2 type fixes 2021-11-10 15:10:58 +02:00
Yuri Kuznetsov
7581169f87 update jquery-ui 2021-11-10 12:58:11 +02:00
Yuri Kuznetsov
7c53701df5 npm update packages 2021-11-10 12:31:57 +02:00
Yuri Kuznetsov
d273523c46 fix link multiple remove btn 2021-11-10 12:20:39 +02:00
Yuri Kuznetsov
df6745ff79 cs fix 2021-11-10 12:19:37 +02:00
Yuri Kuznetsov
9327b418bf fix 2021-11-10 11:38:04 +02:00
Yuri Kuznetsov
5430fed1d1 fix 2021-11-10 11:28:29 +02:00
Yuri Kuznetsov
10285cf3d3 phpstan level 5 2021-11-09 17:47:18 +02:00
Yuri Kuznetsov
c8bed9af32 fixes 2021-11-09 17:46:54 +02:00
Yuri Kuznetsov
7499703d77 fix tests 2021-11-09 17:20:24 +02:00
Yuri Kuznetsov
4e1f421dc1 fixes and cleanup 2021-11-09 17:13:25 +02:00
Yuri Kuznetsov
4ab2a0749c fixes 2021-11-09 16:43:27 +02:00
Yuri Kuznetsov
530ac9da18 type fixes 2021-11-09 16:38:00 +02:00
Yuri Kuznetsov
4069d38978 type fixes 2021-11-09 16:14:07 +02:00
Yuri Kuznetsov
4070b38190 update phpstan 2021-11-09 15:58:36 +02:00
Yuri Kuznetsov
718f3ddc9f type fixes 2021-11-09 15:15:40 +02:00
Yuri Kuznetsov
e4be18ac51 type fixes 2021-11-09 15:08:44 +02:00
Yuri Kuznetsov
fa63270530 type fixes 2021-11-09 13:48:04 +02:00
Yuri Kuznetsov
54286984e9 type fixes 2021-11-09 13:07:37 +02:00
Yuri Kuznetsov
523e4d2900 type fixes 2021-11-09 12:48:57 +02:00
Yuri Kuznetsov
79af0d2cc7 type fixes 2021-11-09 12:26:42 +02:00
Yuri Kuznetsov
4152ee10ea type fixes 2021-11-09 12:01:22 +02:00
Yuri Kuznetsov
c41b92d15a module fix order and test 2021-11-09 11:54:48 +02:00
Yuri Kuznetsov
5af9679751 fix user service 2021-11-09 11:24:07 +02:00
Yuri Kuznetsov
c51fcf0cb6 fix 2021-11-08 17:24:54 +02:00
Yuri Kuznetsov
41d4735502 type fixes 2021-11-08 17:14:08 +02:00
Yuri Kuznetsov
7c3964c6f5 type fixes 2021-11-08 17:09:29 +02:00
Yuri Kuznetsov
df744ba263 export fix 2021-11-08 16:40:23 +02:00
Yuri Kuznetsov
380b3dde0a return type const 2021-11-08 16:31:54 +02:00
Yuri Kuznetsov
4c696c8b21 type fixes 2021-11-08 16:05:53 +02:00
Yuri Kuznetsov
95f9206880 type fixes 2021-11-08 15:48:16 +02:00
Yuri Kuznetsov
e00557885f type fixes 2021-11-08 15:28:12 +02:00
Yuri Kuznetsov
9aaab7d726 phpstan dynamic return type 2021-11-08 15:23:34 +02:00
Yuri Kuznetsov
ab9f78d33f type fixes 2021-11-08 15:22:49 +02:00
Yuri Kuznetsov
ac57f6a39a fix types 2021-11-08 15:16:39 +02:00
Yuri Kuznetsov
49077225c6 type fixes 2021-11-08 13:47:48 +02:00
Yuri Kuznetsov
f3a13739c0 type fixes 2021-11-08 13:31:15 +02:00
Yuri Kuznetsov
ae4d37498a csv export fix 2021-11-08 12:35:03 +02:00
Yuri Kuznetsov
25a607952c fix before action methods 2021-11-08 11:03:54 +02:00
Yuri Kuznetsov
51cfbb0779 fixes 2021-11-05 13:40:32 +02:00
Yuri Kuznetsov
15c97e5d12 fixes 2021-11-05 13:26:05 +02:00
Yuri Kuznetsov
4847bc019a phpstan level 4 2021-11-05 12:54:35 +02:00
Yuri Kuznetsov
094f6e2f50 fixes 2021-11-05 12:53:54 +02:00
Yuri Kuznetsov
6cc19a52f1 fixes 2021-11-05 12:33:36 +02:00
Yuri Kuznetsov
f0237005c0 fixes 2021-11-05 12:14:56 +02:00
Yuri Kuznetsov
3aa31a830c type fixes 2021-11-05 12:12:39 +02:00
Yuri Kuznetsov
c61513cf84 fixes 2021-11-05 12:02:06 +02:00
Yuri Kuznetsov
d10b6dd9b3 fixes 2021-11-05 11:49:04 +02:00
Yuri Kuznetsov
b466f91f8a fixes 2021-11-05 11:32:03 +02:00
Yuri Kuznetsov
7081440121 type fixes 2021-11-05 11:22:59 +02:00
Yuri Kuznetsov
5042f58e30 fixes 2021-11-05 11:04:49 +02:00
Yuri Kuznetsov
beb51081d3 type fixes 2021-11-05 10:55:41 +02:00
Yuri Kuznetsov
1997da4343 fixes 2021-11-04 17:22:56 +02:00
Yuri Kuznetsov
0b3f3e67dd fixes 2021-11-04 17:14:41 +02:00
Yuri Kuznetsov
e9d7b92a6e phpstan level 3 2021-11-04 16:20:29 +02:00
Yuri Kuznetsov
334d5609b0 types 2021-11-04 16:19:43 +02:00
Yuri Kuznetsov
6e31c591bd types 2021-11-04 16:16:22 +02:00
Yuri Kuznetsov
d125d8f067 types 2021-11-04 15:54:48 +02:00
Yuri Kuznetsov
49b55236d0 types 2021-11-04 15:09:36 +02:00
Yuri Kuznetsov
093001bf95 fixes 2021-11-04 13:50:10 +02:00
Yuri Kuznetsov
3445f87e0c fix 2021-11-04 13:34:43 +02:00
Yuri Kuznetsov
8d3ba52501 injectable factory type hint 2021-11-04 13:33:16 +02:00
Yuri Kuznetsov
82a7590a2a type fixes 2021-11-04 13:19:53 +02:00
Yuri Kuznetsov
773df7aedd type fixes 2021-11-04 13:00:40 +02:00
Yuri Kuznetsov
424ca82b15 type fixes 2021-11-04 12:50:56 +02:00
Yuri Kuznetsov
e5df6ad7bf type fixes 2021-11-04 12:48:31 +02:00
Yuri Kuznetsov
d81f8f7bed type fixes 2021-11-04 12:35:39 +02:00
Yuri Kuznetsov
7203b652fa type fixes 2021-11-04 12:17:37 +02:00
Yuri Kuznetsov
5d5268c2c7 type fixes 2021-11-04 11:55:57 +02:00
Yuri Kuznetsov
b568e96407 type fixes 2021-11-04 11:36:52 +02:00
Yuri Kuznetsov
1dda881422 type fixes 2021-11-04 11:14:25 +02:00
Yuri Kuznetsov
17d2791d40 type fixes 2021-11-04 10:59:48 +02:00
Yuri Kuznetsov
9469b66c61 fix 2021-11-04 08:19:52 +02:00
Yuri Kuznetsov
bbc16b942e type fixes 2021-11-03 21:16:03 +02:00
Yuri Kuznetsov
2cb235f49c type fixes 2021-11-03 21:07:10 +02:00
Yuri Kuznetsov
e2a7a439d2 type fixes 2021-11-03 18:38:20 +02:00
Yuri Kuznetsov
2c19ebf570 fix types 2021-11-03 17:57:50 +02:00
Yuri Kuznetsov
19d799ac5e type fixes 2021-11-03 17:38:27 +02:00
Yuri Kuznetsov
e89a0955ea fix types 2021-11-03 17:30:42 +02:00
Yuri Kuznetsov
fc6dfd1994 fix orm types 2021-11-03 17:01:17 +02:00
Yuri Kuznetsov
3fa33b6706 type fixes 2021-11-03 16:47:27 +02:00
Yuri Kuznetsov
939daa616b type fixes 2021-11-03 16:43:44 +02:00
Yuri Kuznetsov
fd22f50de2 type fixes 2021-11-03 16:34:18 +02:00
Yuri Kuznetsov
48ca9259af type fixes 2021-11-03 16:02:45 +02:00
Yuri Kuznetsov
c49d3d4c30 type fixes 2021-11-03 15:52:54 +02:00
Yuri Kuznetsov
246b0c2a37 type fixes 2021-11-03 15:39:45 +02:00
Yuri Kuznetsov
33f446401b di setters fixes 2021-11-03 15:29:54 +02:00
Yuri Kuznetsov
9c677463f2 type fixes 2021-11-03 15:27:08 +02:00
Yuri Kuznetsov
786e267e93 type fixes 2021-11-03 15:17:28 +02:00
Yuri Kuznetsov
c782743a24 fix test 2021-11-03 13:19:29 +02:00
Yuri Kuznetsov
b2c4c76fba type fixes 2021-11-03 13:14:22 +02:00
Yuri Kuznetsov
5a6660b60d type fixes 2021-11-03 12:56:57 +02:00
Yuri Kuznetsov
f5d324eb48 type fixes 2021-11-03 11:39:41 +02:00
Yuri Kuznetsov
901e0967fc type fixes 2021-11-03 11:17:47 +02:00
Yuri Kuznetsov
1cfacc3813 fix regression websocket 2021-11-03 11:11:03 +02:00
Yuri Kuznetsov
8f1c7d5d54 fix attachment allowed types 2021-11-03 10:59:30 +02:00
Yuri Kuznetsov
3427c1b0bd type fixes 2021-11-02 21:15:15 +02:00
Yuri Kuznetsov
4a12d44971 type fixes 2021-11-02 19:56:48 +02:00
Yuri Kuznetsov
d833d43a8b fixes 2021-11-02 19:40:15 +02:00
Yuri Kuznetsov
64a3b851b6 type fixes 2021-11-02 18:24:37 +02:00
Yuri Kuznetsov
2a0ceceb2f type fixes 2021-11-02 18:16:42 +02:00
Yuri Kuznetsov
7250e0e5c4 type fixes 2021-11-02 17:08:01 +02:00
Yuri Kuznetsov
40161fdc3c type fixes 2021-11-02 16:37:39 +02:00
Yuri Kuznetsov
cb815d7dea type fixes 2021-11-02 16:25:25 +02:00
Yuri Kuznetsov
fffe4aacc1 fixes 2021-11-02 16:20:55 +02:00
Yuri Kuznetsov
985c12c918 type fixes 2021-11-02 16:15:31 +02:00
Yuri Kuznetsov
87bbf61c66 type fixes 2021-11-02 15:58:40 +02:00
Yuri Kuznetsov
8f204de057 fix injectable factory types 2021-11-02 15:38:59 +02:00
Yuri Kuznetsov
419b08070a fix 2021-11-02 15:30:57 +02:00
Yuri Kuznetsov
ba1d4d7b72 fixes 2021-11-02 13:45:16 +02:00
Yuri Kuznetsov
a48b5df28e type fixes 2021-11-02 13:34:32 +02:00
Yuri Kuznetsov
07bbc42df5 fix exceptions 2021-11-02 13:20:29 +02:00
Yuri Kuznetsov
14e77571c0 type fixes 2021-11-02 12:40:50 +02:00
Yuri Kuznetsov
71a35878c1 type fixes 2021-11-02 12:24:56 +02:00
Yuri Kuznetsov
7dc74f0767 phpstan config 2021-11-02 12:24:42 +02:00
Yuri Kuznetsov
784d12f3ca fix container 2021-11-02 11:32:30 +02:00
Yuri Kuznetsov
cdf9700ff0 fix loader interface 2021-11-02 11:10:43 +02:00
Yuri Kuznetsov
05f926b33b fix bool any filter 2021-11-02 11:07:55 +02:00
Yuri Kuznetsov
b05f2acc34 type fix 2021-11-01 17:34:15 +02:00
Yuri Kuznetsov
67b52d1f42 fixes 2021-11-01 17:19:42 +02:00
Yuri Kuznetsov
6391c3ca08 fixes 2021-11-01 17:17:44 +02:00
Yuri Kuznetsov
fc59a1efa1 type fixes 2021-11-01 17:00:07 +02:00
Yuri Kuznetsov
e215e39e5d type fixes 2021-11-01 16:46:41 +02:00
Yuri Kuznetsov
33e1f48717 fix import 2021-11-01 11:49:28 +02:00
Yuri Kuznetsov
94f61e5aff fix 2021-11-01 11:43:59 +02:00
Yuri Kuznetsov
41b25a43ba tcpdf fix 2021-11-01 11:27:20 +02:00
Yuri Kuznetsov
09e617ee78 fixes 2021-10-29 21:56:31 +03:00
Yuri Kuznetsov
f5f8b2f66a fix 2021-10-29 21:39:38 +03:00
Yuri Kuznetsov
45b9b41557 type fixes 2021-10-29 17:32:31 +03:00
Yuri Kuznetsov
e0a1b983e3 Merge branch 'hotfix/7.0.9' of github.com:espocrm/espocrm into hotfix/7.0.9 2021-10-29 17:12:48 +03:00
Yuri Kuznetsov
4d2b339112 fixes 2021-10-29 17:12:40 +03:00
Yuri Kuznetsov
b1a66e4a20 fix exceptions 2021-10-29 17:11:05 +03:00
Yuri Kuznetsov
1e44f82b38 fixes 2021-10-29 17:07:32 +03:00
Eymen Elkum
487f428c7f add missing returns (#2132) 2021-10-29 17:03:03 +03:00
Yuri Kuznetsov
f5fa51854d fixes 2021-10-29 16:12:24 +03:00
Yuri Kuznetsov
3f15295293 fixes 2021-10-29 15:53:31 +03:00
Yuri Kuznetsov
de72c2b055 fixes 2021-10-29 15:33:25 +03:00
Yuri Kuznetsov
8f93507fec fixes 2021-10-29 15:14:37 +03:00
Yuri Kuznetsov
2afaf8b446 fix 2021-10-29 14:05:59 +03:00
Yuri Kuznetsov
33e0a1b228 phpstan 2021-10-29 13:56:55 +03:00
Yuri Kuznetsov
4b7dd1fd22 fixes 2021-10-29 13:55:58 +03:00
Yuri Kuznetsov
6f7ef14482 fixes 2021-10-29 13:48:03 +03:00
Yuri Kuznetsov
097a115595 fixes 2021-10-29 13:42:43 +03:00
Yuri Kuznetsov
cd78458d19 fix select 2021-10-29 13:24:21 +03:00
Yuri Kuznetsov
b69d706cc4 fix where 2021-10-29 13:16:47 +03:00
Yuri Kuznetsov
8286d7b621 fixes 2021-10-29 12:46:57 +03:00
Yuri Kuznetsov
d899c55f4f pagination fixes 2021-10-28 16:54:55 +03:00
Yuri Kuznetsov
0a954e171d pagination fixes 2021-10-28 13:59:45 +03:00
Yuri Kuznetsov
89d2c38257 refactoring 2021-10-28 13:50:32 +03:00
Yuri Kuznetsov
d7829e7801 v 2021-10-26 12:07:42 +03:00
Yuri Kuznetsov
3d4f6055e4 merge fixes 2021-10-26 12:07:15 +03:00
Yuri Kuznetsov
383ae3fe3e entity inteface add methods 2021-10-26 11:45:10 +03:00
Yuri Kuznetsov
47cbd18c88 ldap user save fix 2021-10-26 11:43:18 +03:00
Yuri Kuznetsov
d5779878c7 fix link multiple loading on list 2021-10-25 15:30:16 +03:00
Shefqet Avdullau
c65cabffd5 Fixed typo in Tasks default filter Completed (#2126)
Fixes #2125
2021-10-25 15:04:42 +03:00
Yuri Kuznetsov
fe90a62239 autocomplete new password 2021-10-25 13:24:21 +03:00
Yuri Kuznetsov
13ae33266f dummy file 2021-10-25 13:14:19 +03:00
Yuri Kuznetsov
399b689bcd fix personal email account assigned user 2021-10-25 12:01:38 +03:00
Yuri Kuznetsov
1219e7be12 fix category tree order 2021-10-25 11:02:23 +03:00
Yuri Kuznetsov
10f67ab360 mass update opp stage 2021-10-21 13:21:01 +03:00
Yuri Kuznetsov
ce1f755612 action data cloning 2021-10-21 13:20:36 +03:00
Yuri Kuznetsov
fa943d1166 mass action data cloning 2021-10-21 13:18:51 +03:00
Yuri Kuznetsov
dc09f91e35 refactoring 2021-10-21 12:56:47 +03:00
Yuri Kuznetsov
34b8fa2728 acceptanceStatus customization fields disabled 2021-10-20 16:04:33 +03:00
Yuri Kuznetsov
02f7bebf67 outbound email address autocomplete 2021-10-19 16:01:19 +03:00
Yuri Kuznetsov
4ffc384764 formatting fix 2021-10-19 15:27:19 +03:00
Yuri Kuznetsov
e1ef2b34ea orphan email address filter fix 2021-10-19 15:14:32 +03:00
Yuri Kuznetsov
d5a83a8819 fix 2021-10-19 12:43:30 +03:00
Yuri Kuznetsov
661f499f67 orm custom functions 2021-10-19 12:40:07 +03:00
Yuri Kuznetsov
a073beeea7 lastAccess export disable 2021-10-18 17:35:07 +03:00
Yuri Kuznetsov
07f6bf7a7a signature with insert email fix 2021-10-18 13:56:42 +03:00
Yuri Kuznetsov
0cfbb269f2 fix ldap 2021-10-18 13:15:23 +03:00
Yuri Kuznetsov
f3791e5fb4 fix ldap create user 2021-10-18 13:03:06 +03:00
Yuri Kuznetsov
37d8b0d3bd cleanup 2021-10-15 15:47:17 +03:00
Arkadiy
4ae383033a fix missing class imports, exceptions and undefined properties (#2112)
* fix exception

* fix missing imports

* fix access to an undefined property
2021-10-15 15:46:45 +03:00
Yuri Kuznetsov
ea71675701 fix typo 2021-10-15 10:56:48 +03:00
Arkadiy
1178d01baa fix for SelectingBuilderTrait (#2110)
* fix undefined type

* fix exception
2021-10-14 15:13:55 +03:00
Yuri Kuznetsov
ace53f9494 v 2021-10-14 13:01:32 +03:00
Yuri Kuznetsov
3c17ff2da9 layout set fix 2021-10-14 10:35:08 +03:00
Yuri Kuznetsov
163991a36b fix 2021-10-14 10:07:09 +03:00
Yuri Kuznetsov
291721c1d0 fix checkboxes 2021-10-13 16:30:36 +03:00
Yuri Kuznetsov
d96301d544 7.0.6 2021-10-13 15:56:19 +03:00
Yuri Kuznetsov
54d9674055 fix emails folderId 2021-10-13 10:35:47 +03:00
Yuri Kuznetsov
4a5a07649a cs fix 2021-10-13 10:32:39 +03:00
Yuri Kuznetsov
cfdb65fad8 fix missing checkboxes 2021-10-13 10:12:44 +03:00
Yuri Kuznetsov
16544a4a70 fix email address parsing 2021-10-12 15:52:59 +03:00
Yuri Kuznetsov
02939d0840 v 2021-10-12 13:06:02 +03:00
Yuri Kuznetsov
bf331c7020 cs fix 2021-10-12 12:05:58 +03:00
Yuri Kuznetsov
e80b55572b fix lead filter 2021-10-12 11:32:10 +03:00
Yuri Kuznetsov
51c29f0a6e fix link & link multiple search empty 2021-10-12 11:30:20 +03:00
Yuri Kuznetsov
056191db82 fix pdf filename 2021-10-11 13:01:59 +03:00
Yuri Kuznetsov
9ace150efa v 2021-10-11 11:31:48 +03:00
Yuri Kuznetsov
79ae89d172 fix duration 2021-10-10 11:38:15 +03:00
Yuri Kuznetsov
bb703e2060 fix export not existing fields 2021-10-10 11:22:58 +03:00
Yuri Kuznetsov
972d9019e1 fix log 2021-10-10 11:19:38 +03:00
Yuri Kuznetsov
c99566410a note acl refactoring and period change 2021-10-08 15:35:05 +03:00
Yuri Kuznetsov
9c56a14fb0 file manager allow create file w/ wrong ownership 2021-10-08 11:45:56 +03:00
Yuri Kuznetsov
b95e58317b fix msg 2021-10-08 11:27:09 +03:00
Yuri Kuznetsov
6fd9d6e15c upgrade fix 2021-10-07 17:42:31 +03:00
Yuri Kuznetsov
518b9fa2ba unlink file in checkCreateFile 2021-10-07 17:17:22 +03:00
Yuri Kuznetsov
c113b7bd88 throw exception in auth 2021-10-07 15:00:11 +03:00
Yuri Kuznetsov
fb0a302f62 v 2021-10-06 18:27:50 +03:00
Yuri Kuznetsov
43127379cd fix settings 2021-10-06 18:27:07 +03:00
3290 changed files with 56277 additions and 32259 deletions

64
.github/workflows/test-integration.yml vendored Normal file
View File

@@ -0,0 +1,64 @@
name: Test Integration
on:
schedule:
- cron: '0 10 * * *'
jobs:
test:
name: Test on PHP ${{ matrix.php-versions }}
runs-on: ubuntu-20.04
env:
TEST_DATABASE_HOST: '127.0.0.1'
TEST_DATABASE_PORT: '8888'
TEST_DATABASE_NAME: integration_test
TEST_DATABASE_USER: root
TEST_DATABASE_PASSWORD: password
services:
mysql:
image: mysql:8.0
env:
MYSQL_ALLOW_EMPTY_PASSWORD: false
MYSQ_USER: root
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: integration_test
ports:
- '8888:3306'
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
strategy:
fail-fast: false
matrix:
php-versions: ['7.4', '8.1']
branches: ['master']
steps:
- uses: actions/checkout@v2
with:
ref: ${{ matrix.branches }}
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: 16.x
- name: Setup PHP with Composer
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
tools: composer:v2
ini-values: memory_limit=1024M
- name: Start MySQL service
run: sudo systemctl start mysql
- name: Create DB table
run: mysql -h 127.0.0.1 --port 8888 -u root -ppassword -e 'CREATE DATABASE IF NOT EXISTS integration_test;'
- name: NPM install
run: npm install
- name: Build
run: grunt test
- name: Integration testing
run: vendor/bin/phpunit tests/integration

48
.github/workflows/test.yml vendored Normal file
View File

@@ -0,0 +1,48 @@
name: Test
on:
push:
branches:
- 'master'
- 'fix'
paths:
- '**.php'
- '**.json'
- '**.yml'
- 'composer.lock'
- 'phpstan.neon'
pull_request:
paths:
- '**.php'
- '**.json'
- '**.yml'
- 'composer.lock'
- 'phpstan.neon'
jobs:
test:
name: Test on PHP ${{ matrix.php-versions }}
runs-on: ubuntu-20.04
strategy:
matrix:
php-versions: ['7.4', '8.0', '8.1']
steps:
- uses: actions/checkout@v2
- name: Setup PHP with Composer
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
tools: composer:v2
ini-values: memory_limit=1024M
- name: Composer install
run: composer install
- name: Static analysis
run: vendor/bin/phpstan
- name: Unit testing
run: vendor/bin/phpunit tests/unit

4
.gitignore vendored
View File

@@ -23,3 +23,7 @@
!/custom/Espo/Custom/.htaccess
!/custom/Espo/Modules/.htaccess
/install/config.php
client/css/espo/*
client/lib/*
client/modules/crm/lib/*

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
tag-version-prefix = ""

View File

@@ -2,7 +2,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -20,12 +20,13 @@
************************************************************************/
/**
* * `grunt` - full build
* * `grunt dev` - build only items needed for development (takes less time)
* * `grunt offline` - build but skip *composer install*
* * `grant release` - full build plus upgrade packages`
* * `grant test` - build for tests running
* * `grant run-tests` - build and run unit and integration tests
* * `grunt` - full build;
* * `grunt dev` - build only items needed for development (takes less time);
* * `grunt offline` - build but skip *composer install*;
* * `grunt internal` - build only libs and css;
* * `grunt release` - full build plus upgrade packages`;
* * `grunt test` - build for tests running;
* * `grunt run-tests` - build and run unit and integration tests.
*/
const fs = require('fs');
@@ -95,7 +96,12 @@ module.exports = grunt => {
},
clean: {
start: ['build/EspoCRM-*'],
start: [
'build/EspoCRM-*',
'client/lib/*',
'client/modules/crm/lib/*',
'client/css/espo/*',
],
final: ['build/tmp'],
release: ['build/EspoCRM-' + pkg.version],
beforeFinal: {
@@ -110,6 +116,7 @@ module.exports = grunt => {
'build/tmp/client/custom/*',
'!build/tmp/client/custom/modules',
'build/tmp/client/custom/modules/*',
'!build/tmp/client/custom/modules/dummy.txt',
]
}
},
@@ -135,7 +142,7 @@ module.exports = grunt => {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
},
files: {
'build/tmp/client/espo.min.js': jsFilesToBundle,
'client/lib/espo.min.js': jsFilesToBundle,
},
},
lib: {
@@ -147,7 +154,7 @@ module.exports = grunt => {
options: {
mode: true,
},
frontendFolders: {
frontend: {
expand: true,
cwd: 'client',
src: [
@@ -160,19 +167,13 @@ module.exports = grunt => {
'css/**',
'sounds/**',
'custom/**',
'lib/**',
],
dest: 'build/tmp/client',
},
frontendLib: {
files: jsFilesToCopy,
},
frontendCommitedLib: {
expand: true,
dot: true,
cwd: 'client/lib',
src: '**',
dest: 'build/tmp/client/lib/',
},
backend: {
expand: true,
dot: true,
@@ -211,60 +212,6 @@ module.exports = grunt => {
},
},
chmod: {
php: {
options: {
mode: '644'
},
src: [
'build/EspoCRM-<%= pkg.version %>/**/*.php',
'build/EspoCRM-<%= pkg.version %>/**/*.json',
'build/EspoCRM-<%= pkg.version %>/**/*.config',
'build/EspoCRM-<%= pkg.version %>/**/.htaccess',
'build/EspoCRM-<%= pkg.version %>/client/**/*.js',
'build/EspoCRM-<%= pkg.version %>/client/**/*.css',
'build/EspoCRM-<%= pkg.version %>/client/**/*.tpl',
'build/EspoCRM-<%= pkg.version %>/**/*.html',
'build/EspoCRM-<%= pkg.version %>/**/*.txt',
],
},
folders: {
options: {
mode: '755'
},
src: [
'build/EspoCRM-<%= pkg.version %>/public/install',
'build/EspoCRM-<%= pkg.version %>/public/portal',
'build/EspoCRM-<%= pkg.version %>/public/api',
'build/EspoCRM-<%= pkg.version %>/public/api/v1',
'build/EspoCRM-<%= pkg.version %>/public/api/v1/portal-access',
'build/EspoCRM-<%= pkg.version %>',
],
},
foldersWritable: {
options: {
mode: '775'
},
src: [
'build/EspoCRM-<%= pkg.version %>/data',
'build/EspoCRM-<%= pkg.version %>/custom',
'build/EspoCRM-<%= pkg.version %>/custom/Espo',
'build/EspoCRM-<%= pkg.version %>/custom/Espo/Custom',
'build/EspoCRM-<%= pkg.version %>/client/custom',
'build/EspoCRM-<%= pkg.version %>/client/modules',
'build/EspoCRM-<%= pkg.version %>/application/Espo/Modules',
]
},
executable: {
options: {
mode: '754'
},
src: [
'build/EspoCRM-<%= pkg.version %>/bin/*',
],
},
},
replace: {
version: {
options: {
@@ -304,14 +251,106 @@ module.exports = grunt => {
grunt.registerTask('chmod-folders', () => {
cp.execSync(
"find . -type d -exec chmod 755 {} + ",
"find . -type d -exec chmod 755 {} +",
{
stdio: 'ignore',
cwd: 'build/EspoCRM-' + pkg.version,
}
);
});
grunt.registerTask('chmod-multiple', () => {
let dirPath = 'build/EspoCRM-' + pkg.version;
let fileList = [
{
name: '*.php',
},
{
name: '*.json',
},
{
name: '*.config',
},
{
name: '.htaccess',
},
{
name: '*.html',
},
{
name: '*.txt',
},
{
name: '*.js',
folder: 'client',
},
{
name: '*.css',
folder: 'client',
},
{
name: '*.tpl',
folder: 'client',
},
];
let dirReadableList = [
'public/install',
'public/portal',
'public/api',
'public/api/v1',
'public/api/v1/portal-access',
'.',
];
let dirWritableList = [
'data',
'custom',
'custom/Espo',
'custom/Espo/Custom',
'client/custom',
'client/modules',
'application/Espo/Modules',
];
fileList.forEach(item => {
let path = item.folder || '.';
let name = item.name;
cp.execSync(
`find ${path} -type f -iname "${name}" -exec chmod 644 {} +`,
{
cwd: dirPath,
}
);
});
dirReadableList.forEach(item => {
cp.execSync(
`chmod 755 ${item}`,
{
cwd: dirPath,
}
);
});
dirWritableList.forEach(item => {
cp.execSync(
`chmod 775 ${item}`,
{
cwd: dirPath,
}
);
});
cp.execSync(
`find bin -type f -exec chmod 754 {} +`,
{
cwd: dirPath,
}
);
});
grunt.registerTask('composer-install', () => {
cp.execSync("composer install --no-dev", {stdio: 'ignore'});
});
@@ -332,6 +371,10 @@ module.exports = grunt => {
cp.execSync("vendor/bin/phpunit ./tests/integration", {stdio: 'inherit'});
});
grunt.registerTask('set-config-params', () => {
cp.execSync("composer run-script setConfigParams", {stdio: 'ignore'});
});
grunt.registerTask('zip', () => {
const archiver = require('archiver');
@@ -366,43 +409,43 @@ module.exports = grunt => {
});
grunt.registerTask('npm-install', () => {
cp.execSync("npm install", {stdio: 'ignore'});
cp.execSync("npm ci", {stdio: 'ignore'});
});
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-mkdir');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-uglify-es');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-replace');
grunt.loadNpmTasks('grunt-chmod');
grunt.registerTask('internal', [
'less',
'cssmin',
'uglify:bundle',
'copy:frontendLib',
'uglify:lib',
]);
grunt.registerTask('offline', [
'clean:start',
'mkdir:tmp',
'less',
'cssmin',
'uglify:bundle',
'copy:frontendFolders',
'copy:frontendLib',
'copy:frontendCommitedLib',
'internal',
'copy:frontend',
'copy:backend',
'uglify:lib',
'replace',
'clean:beforeFinal',
'copy:final',
'chmod-folders',
'chmod:php',
'chmod:folders',
'chmod:foldersWritable',
'chmod:executable',
'chmod-multiple',
'clean:final',
]);
grunt.registerTask('build', [
'composer-install',
'npm-install',
'set-config-params',
'offline',
]);
@@ -486,10 +529,10 @@ function getCopyLibDataList() {
let minify = item.minify;
if (item.files) {
item.files.forEach(item => {
item.files.forEach(item => {
list.push({
src: item.src,
dest: 'build/tmp/' + (item.dest || 'client/lib/' + item.src.split('/').pop()),
dest: item.dest || 'client/lib/' + item.src.split('/').pop(),
minify: minify,
});
});
@@ -503,7 +546,7 @@ function getCopyLibDataList() {
list.push({
src: item.src,
dest: 'build/tmp/' + (item.dest || 'client/lib/' + item.src.split('/').pop()),
dest: item.dest || 'client/lib/' + item.src.split('/').pop(),
minify: minify,
});
});

View File

@@ -1,6 +1,8 @@
## EspoCRM
[EspoCRM is an Open Source CRM](https://www.espocrm.com) (Customer Relationship Management) software that allows you to see, enter and evaluate all your company relationships regardless of the type. People, companies or opportunities - all in an easy and intuitive interface.
[![PHPStan level 8](https://img.shields.io/badge/PHPStan-level%208-brightgreen)](#espocrm)
[EspoCRM is an Open Source CRM](https://www.espocrm.com) (Customer Relationship Management) software that allows you to see, enter and evaluate all your company relationships regardless of the type. People, companies or opportunities all in an easy and intuitive interface.
It's a web application with a frontend designed as a single page application and REST API backend written in PHP.
@@ -8,22 +10,22 @@ It's a web application with a frontend designed as a single page application and
### Requirements
* PHP 7.3 and later (with pdo, json, gd, openssl, zip, imap, mbstring, curl extensions);
* PHP 7.4 and later (with pdo, json, gd, openssl, zip, imap, mbstring, curl extensions);
* MySQL 5.7 (and later), or MariaDB 10.1 (and later).
For more information about server configuration see [this article](https://docs.espocrm.com/administration/server-configuration/).
### Documentation
Documentation for administrators, users and developers is available [here](https://docs.espocrm.com).
The documentation for administrators, users and developers is available [here](https://docs.espocrm.com).
### How to report a bug
### Bug reporting
Create an issue [here](https://github.com/espocrm/espocrm/issues) or post on our [forum](http://forum.espocrm.com/forum/bug-reports).
### How to install a stable version
### Installing the stable version
[Download](https://www.espocrm.com/download/) the latest version. See the [instructions](https://docs.espocrm.com/administration/installation/) about installation.
See the [instructions](https://docs.espocrm.com/administration/installation/) about installation.
### Development
@@ -31,13 +33,13 @@ Create an issue [here](https://github.com/espocrm/espocrm/issues) or post on our
* [Running tests](https://docs.espocrm.com/development/tests)
* [Making translation](https://docs.espocrm.com/development/translation)
### How to contribute
### Contributing
Before we can merge your pull request you need to accept our CLA [here](https://github.com/espocrm/cla). It's very simple to do.
Branches:
* *hotfix/** upcoming maintenance release; fixes should be pushed to this branch;
* *fix* upcoming maintenance release; fixes should be pushed to this branch;
* *master* develop branch; new features should be pushed to this branch;
* *stable* last stable release.

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\ActionHistoryRecord>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -32,6 +32,7 @@ namespace Espo\Classes\Acl\Attachment;
use Espo\Entities\{
User,
Note,
Attachment,
};
use Espo\ORM\Entity;
@@ -45,6 +46,9 @@ use Espo\Core\{
Acl\Traits\DefaultAccessCheckerDependency,
};
/**
* @implements AccessEntityCREDChecker<Attachment>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
@@ -65,26 +69,29 @@ class AccessChecker implements AccessEntityCREDChecker
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
/** @var Attachment $entity */
if ($entity->get('parentType') === 'Settings') {
// Allow the logo.
return true;
}
$parent = null;
$hasParent = false;
$parentType = $entity->get('parentType');
$parentId = $entity->get('parentId');
if ($entity->get('parentId') && $entity->get('parentType')) {
$hasParent = true;
$relatedType = $entity->get('relatedType');
$relatedId = $entity->get('relatedId');
$parent = $this->entityManager->getEntity($entity->get('parentType'), $entity->get('parentId'));
if ($parentId && $parentType) {
$parent = $this->entityManager->getEntityById($parentType, $parentId);
}
else if ($entity->get('relatedId') && $entity->get('relatedType')) {
$hasParent = true;
$parent = $this->entityManager->getEntity($entity->get('relatedType'), $entity->get('relatedId'));
else if ($relatedId && $relatedType) {
$parent = $this->entityManager->getEntityById($relatedType, $relatedId);
}
if (!$parent || !$hasParent) {
if (!$parent) {
if ($this->defaultAccessChecker->checkEntityRead($user, $entity, $data)) {
return true;
}
@@ -93,6 +100,7 @@ class AccessChecker implements AccessEntityCREDChecker
}
if ($parent->getEntityType() === 'Note') {
/** @var Note $parent */
$result = $this->checkEntityReadNoteParent($user, $parent);
if ($result !== null) {
@@ -100,6 +108,16 @@ class AccessChecker implements AccessEntityCREDChecker
}
}
else if ($this->aclManager->checkEntity($user, $parent)) {
if (
$entity->getTargetField() &&
in_array(
$entity->getTargetField(),
$this->aclManager->getScopeForbiddenFieldList($user, $parent->getEntityType())
)
) {
return false;
}
return true;
}
@@ -114,8 +132,8 @@ class AccessChecker implements AccessEntityCREDChecker
{
if ($note->getTargetType() === Note::TARGET_TEAMS) {
$intersect = array_intersect(
$note->getLinkMultipleIdList('teams'),
$user->getLinkMultipleIdList('teams')
$note->getLinkMultipleIdList('teams') ?? [],
$user->getLinkMultipleIdList('teams') ?? []
);
if (count($intersect)) {

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Attachment>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
private const ATTR_CREATED_BY_ID = 'createdById';

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -38,6 +38,9 @@ use Espo\Core\{
Acl\Traits\DefaultAccessCheckerDependency,
};
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\AuthToken>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,6 +30,7 @@
namespace Espo\Classes\Acl\Email;
use Espo\Entities\User;
use Espo\Entities\Email;
use Espo\ORM\Entity;
@@ -41,6 +42,9 @@ use Espo\Core\{
Acl\Traits\DefaultAccessCheckerDependency,
};
/**
* @implements AccessEntityCREDSChecker<\Espo\Entities\Email>
*/
class AccessChecker implements AccessEntityCREDSChecker
{
use DefaultAccessCheckerDependency;
@@ -52,6 +56,8 @@ class AccessChecker implements AccessEntityCREDSChecker
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
/** @var Email $entity */
if ($this->defaultAccessChecker->checkEntityRead($user, $entity, $data)) {
return true;
}
@@ -79,6 +85,8 @@ class AccessChecker implements AccessEntityCREDSChecker
public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool
{
/** @var Email $entity */
if ($user->isAdmin()) {
return true;
}
@@ -96,6 +104,7 @@ class AccessChecker implements AccessEntityCREDSChecker
return true;
}
/** @var string[] */
$assignedUserIdList = $entity->getLinkMultipleIdList('assignedUsers');
if (
@@ -126,4 +135,37 @@ class AccessChecker implements AccessEntityCREDSChecker
return false;
}
public function checkEntityEdit(User $user, Entity $entity, ScopeData $data): bool
{
/** @var Email $entity */
if (
$entity->getStatus() === Email::STATUS_DRAFT &&
$entity->getCreatedBy() &&
$entity->getCreatedBy()->getId() === $user->getId()
) {
return true;
}
return $this->defaultAccessChecker->checkEntityEdit($user, $entity, $data);
}
public function checkEdit(User $user, ScopeData $data): bool
{
if ($data->getCreate() === Table::LEVEL_YES) {
return true;
}
return $this->defaultAccessChecker->checkEdit($user, $data);
}
public function checkDelete(User $user, ScopeData $data): bool
{
if ($data->getCreate() === Table::LEVEL_YES) {
return true;
}
return $this->defaultAccessChecker->checkDelete($user, $data);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,6 +30,7 @@
namespace Espo\Classes\Acl\Email;
use Espo\Entities\User;
use Espo\Entities\Email;
use Espo\ORM\Entity;
@@ -39,6 +40,10 @@ use Espo\Core\{
Acl\OwnershipTeamChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Email>
* @implements OwnershipTeamChecker<\Espo\Entities\Email>
*/
class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{
private $defaultOwnershipChecker;
@@ -50,6 +55,8 @@ class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
public function checkOwn(User $user, Entity $entity): bool
{
/** @var Email $entity */
if ($user->getId() === $entity->get('assignedUserId')) {
return true;
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -38,6 +38,9 @@ use Espo\Core\{
ORM\EntityManager,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\EmailFilter>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
private $entityManager;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -39,6 +39,10 @@ use Espo\Core\{
Acl\AccessEntityDeleteChecker,
};
/**
* @implements AccessEntityReadChecker<\Espo\Entities\Import>
* @implements AccessEntityDeleteChecker<\Espo\Entities\Import>
*/
class AccessChecker implements AccessEntityReadChecker, AccessEntityDeleteChecker
{
public function check(User $user, ScopeData $data): bool

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -46,6 +46,9 @@ use Espo\Core\{
use DateTime;
use Exception;
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\Note>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -37,11 +37,13 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Note>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool
{
if ($entity->get('type') === 'Post' && $user->getId() === $entity->get('createdById')) {
return true;
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Notification>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -40,6 +40,9 @@ use Espo\Core\{
AclManager,
};
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\Portal>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -40,6 +40,9 @@ use Espo\Core\{
Acl\Traits\DefaultAccessCheckerDependency,
};
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\ScheduledJob>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -37,10 +37,14 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Team>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool
{
/** @var string[] */
$userTeamIdList = $user->getLinkMultipleIdList('teams');
return in_array($entity->getId(), $userTeamIdList);

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -42,6 +42,9 @@ use Espo\Core\{
AclManager,
};
/**
* @implements AccessEntityCREDSChecker<User>
*/
class AccessChecker implements AccessEntityCREDSChecker
{
use DefaultAccessCheckerDependency;
@@ -62,6 +65,8 @@ class AccessChecker implements AccessEntityCREDSChecker
return false;
}
/** @var User $entity */
if ($entity->isSuperAdmin() && !$user->isSuperAdmin()) {
return false;
}
@@ -71,6 +76,8 @@ class AccessChecker implements AccessEntityCREDSChecker
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
/** @var User $entity */
if ($entity->isPortal()) {
if ($this->aclManager->getPermissionLevel($user, 'portal') === Table::LEVEL_YES) {
return true;
@@ -88,6 +95,8 @@ class AccessChecker implements AccessEntityCREDSChecker
public function checkEntityEdit(User $user, Entity $entity, ScopeData $data): bool
{
/** @var User $entity */
if ($entity->isSystem()) {
return false;
}
@@ -107,6 +116,8 @@ class AccessChecker implements AccessEntityCREDSChecker
public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool
{
/** @var User $entity */
if (!$user->isAdmin()) {
return false;
}
@@ -124,6 +135,8 @@ class AccessChecker implements AccessEntityCREDSChecker
public function checkEntityStream(User $user, Entity $entity, ScopeData $data): bool
{
/** @var User $entity */
return $this->aclManager->checkUserPermission($user, $entity, 'user');
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,14 +30,18 @@
namespace Espo\Classes\Acl\User;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\ORM\Entity as CoreEntity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
Acl\OwnershipTeamChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\User>
* @implements OwnershipTeamChecker<\Espo\Entities\User>
*/
class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{
public function checkOwn(User $user, Entity $entity): bool
@@ -47,9 +51,11 @@ class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
public function checkTeam(User $user, Entity $entity): bool
{
assert($entity instanceof CoreEntity);
$intersect = array_intersect(
$user->getLinkMultipleIdList('teams'),
$entity->getLinkMultipleIdList('teams')
$user->getLinkMultipleIdList('teams') ?? [],
$entity->getLinkMultipleIdList('teams') ?? []
);
if (count($intersect)) {

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -40,6 +40,9 @@ use Espo\Core\{
Acl\Traits\DefaultAccessCheckerDependency,
};
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\Webhook>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,13 +30,13 @@
namespace Espo\Classes\Acl\Webhook;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
use Espo\Core\Acl\OwnershipOwnChecker;
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Webhook>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -32,6 +32,7 @@ namespace Espo\Classes\AclPortal\Attachment;
use Espo\Entities\{
User,
Note,
Attachment,
};
use Espo\ORM\Entity;
@@ -45,6 +46,9 @@ use Espo\Core\{
Portal\Acl\Traits\DefaultAccessCheckerDependency,
};
/**
* @implements AccessEntityCREDChecker<Attachment>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
@@ -67,25 +71,29 @@ class AccessChecker implements AccessEntityCREDChecker
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
/** @var Attachment $entity */
if ($entity->get('parentType') === 'Settings') {
// Allow the logo.
return true;
}
$parent = null;
$hasParent = false;
if ($entity->get('parentId') && $entity->get('parentType')) {
$hasParent = true;
$parentType = $entity->get('parentType');
$parentId = $entity->get('parentId');
$parent = $this->entityManager->getEntity($entity->get('parentType'), $entity->get('parentId'));
$relatedType = $entity->get('relatedType');
$relatedId = $entity->get('relatedId');
if ($parentId && $parentType) {
$parent = $this->entityManager->getEntityById($parentType, $parentId);
}
else if ($entity->get('relatedId') && $entity->get('relatedType')) {
$hasParent = true;
$parent = $this->entityManager->getEntity($entity->get('relatedType'), $entity->get('relatedId'));
else if ($relatedId && $relatedType) {
$parent = $this->entityManager->getEntityById($relatedType, $relatedId);
}
if (!$hasParent) {
if (!$parent) {
if ($entity->get('createdById') === $user->getId()) {
return true;
}
@@ -94,6 +102,7 @@ class AccessChecker implements AccessEntityCREDChecker
}
if ($parent->getEntityType() === 'Note') {
/** @var Note $parent */
$result = $this->checkEntityReadNoteParent($user, $parent);
if ($result !== null) {
@@ -101,6 +110,16 @@ class AccessChecker implements AccessEntityCREDChecker
}
}
else if ($this->aclManager->checkEntity($user, $parent)) {
if (
$entity->getTargetField() &&
in_array(
$entity->getTargetField(),
$this->aclManager->getScopeForbiddenFieldList($user, $parent->getEntityType())
)
) {
return false;
}
return true;
}
@@ -119,8 +138,8 @@ class AccessChecker implements AccessEntityCREDChecker
if ($note->getTargetType() === Note::TARGET_PORTALS) {
$intersect = array_intersect(
$note->getLinkMultipleIdList('portals'),
$user->getLinkMultipleIdList('portals')
$note->getLinkMultipleIdList('portals') ?? [],
$user->getLinkMultipleIdList('portals') ?? []
);
if (count($intersect)) {

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Attachment>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
private const ATTR_CREATED_BY_ID = 'createdById';

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -33,8 +33,9 @@ use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\ORM\Entity as CoreEntity;
use Espo\Core\{
Portal\AclManager,
Acl\Table,
Acl\ScopeData,
Acl\AccessEntityCREDSChecker,
@@ -42,20 +43,19 @@ use Espo\Core\{
Portal\Acl\Traits\DefaultAccessCheckerDependency,
};
/**
* @implements AccessEntityCREDSChecker<\Espo\Entities\Email>
*/
class AccessChecker implements AccessEntityCREDSChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
private $aclManager;
public function __construct(
DefaultAccessChecker $defaultAccessChecker,
AclManager $aclManager
DefaultAccessChecker $defaultAccessChecker
) {
$this->defaultAccessChecker = $defaultAccessChecker;
$this->aclManager = $aclManager;
}
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
@@ -72,6 +72,8 @@ class AccessChecker implements AccessEntityCREDSChecker
return false;
}
assert($entity instanceof CoreEntity);
$userIdList = $entity->getLinkMultipleIdLIst('users');
if (is_array($userIdList) && in_array($user->getId(), $userIdList)) {

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Email>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -46,6 +46,9 @@ use Espo\Core\{
use DateTime;
use Exception;
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\Note>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Note>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Notification>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\User>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -69,7 +69,7 @@ class Binding
$keyList = $data->getContextKeyList($context);
foreach ($keyList as $key) {
$result .= $this->printItem($key, $data->getContext($context, $key), true);
$result .= $this->printItem($key, $data->getContext($context, $key));
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -63,10 +63,11 @@ class Container
'user',
];
/** @var string[] */
$fileList = scandir('application/Espo/Core/Loaders');
if (file_exists('custom/Espo/Custom/Core/Loaders')) {
$fileList = array_merge($fileList, scandir('custom/Espo/Custom/Core/Loaders'));
$fileList = array_merge($fileList, scandir('custom/Espo/Custom/Core/Loaders') ?: []);
}
foreach ($fileList as $file) {

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -40,9 +40,11 @@ use Espo\Core\{
*/
class TemplateEntityTypeList
{
protected $acl;
protected $selectBuilderFactory;
protected $entityManager;
private $acl;
private $selectBuilderFactory;
private $entityManager;
public function __construct(Acl $acl, SelectBuilderFactory $selectBuilderFactory, EntityManager $entityManager)
{
@@ -51,7 +53,10 @@ class TemplateEntityTypeList
$this->entityManager = $entityManager;
}
public function get() : array
/**
* @return string[]
*/
public function get(): array
{
if (!$this->acl->checkScope('Template')) {
return [];
@@ -69,7 +74,7 @@ class TemplateEntityTypeList
->build();
$templateCollection = $this->entityManager
->getRepository('Template')
->getRDBRepository('Template')
->clone($query)
->find();

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -35,7 +35,7 @@ use Espo\Services\Stream as StreamService;
use Espo\Core\Notification\AssignmentNotificator;
use Espo\Core\Notification\AssignmentNotificator\Params;
use Espo\Core\Notification\UserEnabledChecker;
use Espo\Core\ServiceFactory;
use Espo\Core\InjectableFactory;
use Espo\Core\AclManager;
use Espo\ORM\EntityManager;
@@ -43,6 +43,10 @@ use Espo\ORM\Entity;
use Espo\Entities\User;
use Espo\Entities\Notification;
use Espo\Entities\Email as EmailEntity;
use Espo\Repositories\Email as EmailRepository;
use Espo\Repositories\EmailAddress as EmailAddressRepository;
use DateTime;
use Exception;
@@ -51,13 +55,13 @@ class Email implements AssignmentNotificator
{
private const DAYS_THRESHOLD = 2;
private $streamService = null;
private ?StreamService $streamService = null;
private $user;
private $entityManager;
private $serviceFactory;
private $injectableFactory;
private $aclManager;
@@ -67,19 +71,30 @@ class Email implements AssignmentNotificator
User $user,
EntityManager $entityManager,
UserEnabledChecker $userChecker,
ServiceFactory $serviceFactory,
InjectableFactory $injectableFactory,
AclManager $aclManager
) {
$this->user = $user;
$this->entityManager = $entityManager;
$this->userChecker = $userChecker;
$this->serviceFactory = $serviceFactory;
$this->injectableFactory = $injectableFactory;
$this->aclManager = $aclManager;
}
public function process(Entity $entity, Params $params): void
{
if (!in_array($entity->get('status'), ['Archived', 'Sent', 'Being Imported'])) {
/** @var EmailEntity $entity */
if (
!in_array(
$entity->get('status'),
[
EmailEntity::STATUS_ARCHIVED,
EmailEntity::STATUS_SENT,
EmailEntity::STATUS_BEING_IMPORTED,
]
)
) {
return;
}
@@ -107,10 +122,6 @@ class Email implements AssignmentNotificator
return;
}
if (!$dt) {
return;
}
if ($dt->diff(new DateTime())->days > self::DAYS_THRESHOLD) {
return;
}
@@ -138,12 +149,17 @@ class Email implements AssignmentNotificator
'emailName' => $entity->get('name'),
];
/** @var EmailRepository $emailRepository */
$emailRepository = $this->entityManager->getRepository('Email');
/** @var EmailAddressRepository $emailAddressRepository */
$emailAddressRepository = $this->entityManager->getRepository('EmailAddress');
if (!$entity->has('from')) {
$this->entityManager->getRepository('Email')->loadFromField($entity);
$emailRepository->loadFromField($entity);
}
if (!$entity->has('to')) {
$this->entityManager->getRepository('Email')->loadToField($entity);
$emailRepository->loadToField($entity);
}
$person = null;
@@ -151,9 +167,7 @@ class Email implements AssignmentNotificator
$from = $entity->get('from');
if ($from) {
$person = $this->entityManager
->getRepository('EmailAddress')
->getEntityByAddress($from, null, ['User', 'Contact', 'Lead']);
$person = $emailAddressRepository->getEntityByAddress($from, null, ['User', 'Contact', 'Lead']);
if ($person) {
$data['personEntityType'] = $person->getEntityType();
@@ -165,7 +179,7 @@ class Email implements AssignmentNotificator
$userIdFrom = null;
if ($person && $person->getEntityType() === 'User') {
$userIdFrom = $person->id;
$userIdFrom = $person->getId();
}
if (empty($data['personEntityId'])) {
@@ -178,14 +192,19 @@ class Email implements AssignmentNotificator
$parent = null;
if ($entity->get('parentId') && $entity->get('parentType')) {
$parent = $this->entityManager->getEntity($entity->get('parentType'), $entity->get('parentId'));
$parentId = $entity->get('parentId');
$parentType = $entity->get('parentType');
if ($parentType && $parentId) {
$parent = $this->entityManager->getEntityById($parentType, $parentId);
}
$account = null;
if ($entity->get('accountId')) {
$account = $this->entityManager->getEntity('Account', $entity->get('accountId'));
$accountId = $entity->get('accountId');
if ($accountId) {
$account = $this->entityManager->getEntityById('Account', $accountId);
}
foreach ($userIdList as $userId) {
@@ -214,7 +233,7 @@ class Email implements AssignmentNotificator
if ($folderId) {
if (
$this->entityManager
->getRepository('EmailFolder')
->getRDBRepository('EmailFolder')
->where([
'id' => $folderId,
'skipNotifications' => true,
@@ -226,6 +245,7 @@ class Email implements AssignmentNotificator
}
}
/** @var User|null $user */
$user = $this->entityManager->getEntity('User', $userId);
if (!$user) {
@@ -241,7 +261,7 @@ class Email implements AssignmentNotificator
}
$isArchivedOrBeingImported =
$entity->get('status') === 'Archived' ||
$entity->get('status') === EmailEntity::STATUS_ARCHIVED ||
$params->getOption('isBeingImported');
if (
@@ -261,7 +281,7 @@ class Email implements AssignmentNotificator
}
$existing = $this->entityManager
->getRepository(Notification::ENTITY_TYPE)
->getRDBRepository(Notification::ENTITY_TYPE)
->where([
'type' => Notification::TYPE_EMAIL_RECEIVED,
'userId' => $userId,
@@ -288,7 +308,7 @@ class Email implements AssignmentNotificator
private function getStreamService(): StreamService
{
if (empty($this->streamService)) {
$this->streamService = $this->serviceFactory->create('Stream');
$this->streamService = $this->injectableFactory->create(StreamService::class);
}
return $this->streamService;

View File

@@ -0,0 +1,73 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Classes\Cleanup;
use Espo\Core\Cleanup\Cleanup;
use Espo\Core\Utils\Config;
use Espo\ORM\EntityManager;
use Espo\Core\Field\DateTime;
use Espo\Entities\Export;
class Exports implements Cleanup
{
private $config;
private $entityManager;
private string $cleanupPeriod = '2 days';
public function __construct(Config $config, EntityManager $entityManager)
{
$this->config = $config;
$this->entityManager = $entityManager;
}
public function process(): void
{
$period = '-' . $this->config->get('cleanupExportsPeriod', $this->cleanupPeriod);
$before = DateTime::createNow()
->modify($period)
->getString();
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from(Export::ENTITY_TYPE)
->where([
'createdAt<' => $before,
])
->build();
$this->entityManager->getQueryExecutor()->execute($delete);
}
}

View File

@@ -0,0 +1,71 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Classes\Cleanup;
use Espo\Core\Cleanup\Cleanup;
use Espo\Core\Utils\Config;
use Espo\ORM\EntityManager;
use Espo\Core\Field\DateTime;
class MassActions implements Cleanup
{
private $config;
private $entityManager;
private string $cleanupPeriod = '14 days';
public function __construct(Config $config, EntityManager $entityManager)
{
$this->config = $config;
$this->entityManager = $entityManager;
}
public function process(): void
{
$period = '-' . $this->config->get('cleanupMassActionsPeriod', $this->cleanupPeriod);
$before = DateTime::createNow()
->modify($period)
->getString();
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from('MassAction')
->where([
'createdAt<' => $before,
])
->build();
$this->entityManager->getQueryExecutor()->execute($delete);
}
}

View File

@@ -0,0 +1,73 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Classes\Cleanup;
use Espo\Core\Cleanup\Cleanup;
use Espo\Core\Utils\Config;
use Espo\Core\Field\DateTime;
use Espo\ORM\EntityManager;
use Espo\Entities\PasswordChangeRequest;
class PasswordChangeRequests implements Cleanup
{
private Config $config;
private EntityManager $entityManager;
private string $cleanupPeriod = '30 days';
public function __construct(Config $config, EntityManager $entityManager)
{
$this->config = $config;
$this->entityManager = $entityManager;
}
public function process(): void
{
$period = '-' . $this->config->get('cleanupPasswordChangeRequestsPeriod', $this->cleanupPeriod);
$before = DateTime::createNow()
->modify($period)
->getString();
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from(PasswordChangeRequest::ENTITY_TYPE)
->where([
'createdAt<' => $before,
])
->build();
$this->entityManager->getQueryExecutor()->execute($delete);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -41,7 +41,7 @@ class Reminders implements Cleanup
private $entityManager;
private $cleanupRemindersPeriod = '15 days';
private string $cleanupRemindersPeriod = '15 days';
public function __construct(Config $config, EntityManager $entityManager)
{

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -37,7 +37,7 @@ use DateTime;
class WebhookQueue implements Cleanup
{
private $cleanupWebhookQueuePeriod = '10 days';
private string $cleanupWebhookQueuePeriod = '10 days';
private $config;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,6 +31,8 @@ namespace Espo\Classes\ConsoleCommands;
use Espo\Tools\Import\Service;
use Espo\Core\Utils\File\Manager as FileManager;
use Espo\Core\{
Console\Command,
Console\Command\Params,
@@ -41,11 +43,14 @@ use Throwable;
class Import implements Command
{
private $service;
private Service $service;
public function __construct(Service $service)
private FileManager $fileManager;
public function __construct(Service $service, FileManager $fileManager)
{
$this->service = $service;
$this->fileManager = $fileManager;
}
public function run(Params $params, IO $io) : void
@@ -64,13 +69,13 @@ class Import implements Command
return;
}
if (!file_exists($filePath)) {
if (!$this->fileManager->isFile($filePath)) {
$io->writeLine("File not found.");
return;
}
$contents = file_get_contents($filePath);
$contents = $this->fileManager->getContents($filePath);
try {
$result = $this->service->importContentsWithParamsId($contents, $paramsId);

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -33,32 +33,32 @@ use Espo\Core\Utils\Metadata;
class DefaultSidePanelType
{
protected $metadata;
private $metadata;
public function __construct(Metadata $metadata)
{
$this->metadata = $metadata;
}
/**
* @return \stdClass[]
*/
public function get(string $scope): array
{
$list = [];
if (
$this->metadata->get(['entityDefs', $scope, 'fields', 'assignedUser', 'type']) === 'link'
&&
$this->metadata->get(['entityDefs', $scope, 'fields', 'assignedUser', 'type']) === 'link' &&
$this->metadata->get(['entityDefs', $scope, 'links', 'assignedUser', 'entity']) === 'User'
||
$this->metadata->get(['entityDefs', $scope, 'fields', 'assignedUsers', 'type']) === 'linkMultiple'
&&
$this->metadata->get(['entityDefs', $scope, 'fields', 'assignedUsers', 'type']) === 'linkMultiple' &&
$this->metadata->get(['entityDefs', $scope, 'links', 'assignedUsers', 'entity']) === 'User'
) {
$list[] = (object) ['name' => ':assignedUser'];
}
if (
$this->metadata->get(['entityDefs', $scope, 'fields', 'teams', 'type']) === 'linkMultiple'
&&
$this->metadata->get(['entityDefs', $scope, 'fields', 'teams', 'type']) === 'linkMultiple' &&
$this->metadata->get(['entityDefs', $scope, 'links', 'teams', 'entity']) === 'Team'
) {
$list[] = (object) ['name' => 'teams'];

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,6 +30,8 @@
namespace Espo\Classes\DuplicateWhereBuilders;
use Espo\Core\Duplicate\WhereBuilder;
use Espo\Core\Field\EmailAddressGroup;
use Espo\Core\ORM\Entity as CoreEntity;
use Espo\ORM\{
Query\Part\Condition as Cond,
@@ -38,10 +40,15 @@ use Espo\ORM\{
Entity,
};
/**
* @implements WhereBuilder<CoreEntity>
*/
class Company implements WhereBuilder
{
public function build(Entity $entity): ?WhereItem
{
assert($entity instanceof CoreEntity);
$orBuilder = OrGroup::createBuilder();
$toCheck = false;
@@ -84,10 +91,13 @@ class Company implements WhereBuilder
return $orBuilder->build();
}
private function getEmailAddressList(Entity $entity): array
/**
* @return string[]
*/
private function getEmailAddressList(CoreEntity $entity): array
{
if ($entity->get('emailAddressData')) {
/* @var $eaGroup EmailAddressGroup */
/** @var EmailAddressGroup $eaGroup */
$eaGroup = $entity->getValueObject('emailAddress');
return $eaGroup->getAddressList();

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,6 +29,8 @@
namespace Espo\Classes\DuplicateWhereBuilders;
use Espo\Core\ORM\Entity as CoreEntity;
use Espo\Core\{
Duplicate\WhereBuilder,
Field\EmailAddressGroup,
@@ -41,10 +43,15 @@ use Espo\ORM\{
Entity,
};
/**
* @implements WhereBuilder<CoreEntity>
*/
class Person implements WhereBuilder
{
public function build(Entity $entity): ?WhereItem
{
assert($entity instanceof CoreEntity);
$orBuilder = OrGroup::createBuilder();
$toCheck = false;
@@ -93,10 +100,13 @@ class Person implements WhereBuilder
return $orBuilder->build();
}
private function getEmailAddressList(Entity $entity): array
/**
* @return string[]
*/
private function getEmailAddressList(CoreEntity $entity): array
{
if ($entity->get('emailAddressData')) {
/* @var $eaGroup EmailAddressGroup */
/** @var EmailAddressGroup $eaGroup */
$eaGroup = $entity->getValueObject('emailAddress');
return $eaGroup->getAddressList();

View File

@@ -0,0 +1,90 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Classes\FieldDuplicators;
use Espo\Core\Record\Duplicator\FieldDuplicator;
use Espo\ORM\Entity;
use Espo\ORM\EntityManager;
use Espo\Repositories\Attachment as AttachmentRepository;
use Espo\Entities\Attachment;
use stdClass;
class AttachmentMultiple implements FieldDuplicator
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function duplicate(Entity $entity, string $field): stdClass
{
$valueMap = (object) [];
/** @var \Espo\ORM\Collection<Attachment> $attachmentList */
$attachmentList = $this->entityManager
->getRDBRepository($entity->getEntityType())
->getRelation($entity, $field)
->find();
if (is_countable($attachmentList) && !count($attachmentList)) {
return $valueMap;
}
$idList = [];
$nameHash = (object) [];
$typeHash = (object) [];
/** @var AttachmentRepository $attachmentRepository */
$attachmentRepository = $this->entityManager->getRepository(Attachment::ENTITY_TYPE);
foreach ($attachmentList as $attachment) {
$copiedAttachment = $attachmentRepository->getCopiedAttachment($attachment);
$copiedAttachment->set('field', $field);
$this->entityManager->saveEntity($copiedAttachment);
$idList[] = $copiedAttachment->getId();
$nameHash->{$copiedAttachment->getId()} = $copiedAttachment->getName();
$typeHash->{$copiedAttachment->getId()} = $copiedAttachment->getType();
}
$valueMap->{$field . 'Ids'} = $idList;
$valueMap->{$field . 'Names'} = $nameHash;
$valueMap->{$field . 'Types'} = $typeHash;
return $valueMap;
}
}

View File

@@ -0,0 +1,75 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Classes\FieldDuplicators;
use Espo\Core\Record\Duplicator\FieldDuplicator;
use Espo\ORM\Entity;
use Espo\ORM\EntityManager;
use Espo\Repositories\Attachment as AttachmentRepository;
use Espo\Entities\Attachment;
use stdClass;
class File implements FieldDuplicator
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function duplicate(Entity $entity, string $field): stdClass
{
$valueMap = (object) [];
/** @var Attachment|null $attachment */
$attachment = $this->entityManager
->getRDBRepository($entity->getEntityType())
->getRelation($entity, $field)
->findOne();
if (!$attachment) {
return $valueMap;
}
/** @var AttachmentRepository $attachmentRepository */
$attachmentRepository = $this->entityManager->getRepository(Attachment::ENTITY_TYPE);
$copiedAttachment = $attachmentRepository->getCopiedAttachment($attachment);
$idAttribute = $field . 'Id';
$valueMap->$idAttribute = $copiedAttachment->getId();
return $valueMap;
}
}

View File

@@ -0,0 +1,82 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Classes\FieldDuplicators;
use Espo\Core\Record\Duplicator\FieldDuplicator;
use Espo\ORM\Entity;
use Espo\ORM\EntityManager;
use stdClass;
class LinkMultiple implements FieldDuplicator
{
private EntityManager $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function duplicate(Entity $entity, string $field): stdClass
{
$valueMap = (object) [];
$entityDefs = $this->entityManager
->getDefs()
->getEntity($entity->getEntityType());
if (!$entity->hasRelation($field)) {
return $valueMap;
}
$relationDefs = $entityDefs->getRelation($field);
if (
!$relationDefs->hasForeignEntityType() ||
!$relationDefs->hasForeignRelationName()
) {
return $valueMap;
}
$foreignRelationType = $this->entityManager
->getDefs()
->getEntity($relationDefs->getForeignEntityType())
->getRelation($relationDefs->getForeignRelationName())
->getType();
if ($foreignRelationType !== Entity::HAS_MANY) {
$valueMap->{$field . 'Ids'} = [];
$valueMap->{$field . 'Names'} = (object) [];
$valueMap->{$field . 'Columns'} = (object) [];
}
return $valueMap;
}
}

View File

@@ -0,0 +1,117 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Classes\FieldDuplicators;
use Espo\Core\Record\Duplicator\FieldDuplicator;
use Espo\ORM\Entity;
use Espo\ORM\EntityManager;
use Espo\Repositories\Attachment as AttachmentRepository;
use Espo\Entities\Attachment;
use stdClass;
class Wysiwyg implements FieldDuplicator
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function duplicate(Entity $entity, string $field): stdClass
{
$valueMap = (object) [];
$contents = $entity->get($field);
if (!$contents) {
return $valueMap;
}
$matches = [];
$matchResult = preg_match_all("/\?entryPoint=attachment&amp;id=([^&=\"']+)/", $contents, $matches);
if (
!$matchResult ||
empty($matches[1]) ||
!is_array($matches[1])
) {
return $valueMap;
}
$attachmentIdList = $matches[1];
/** @var Attachment[] $attachmentList */
$attachmentList = [];
foreach ($attachmentIdList as $id) {
/** @var Attachment|null $attachment */
$attachment = $this->entityManager->getEntity(Attachment::ENTITY_TYPE, $id);
if (!$attachment) {
continue;
}
$attachmentList[] = $attachment;
}
if (!count($attachmentList)) {
return $valueMap;
}
/** @var AttachmentRepository $attachmentRepository */
$attachmentRepository = $this->entityManager->getRepository(Attachment::ENTITY_TYPE);
foreach ($attachmentList as $attachment) {
$copiedAttachment = $attachmentRepository->getCopiedAttachment($attachment);
$copiedAttachment->set([
'relatedId' => null,
'relatedType' => $entity->getEntityType(),
'field' => $field,
]);
$this->entityManager->saveEntity($copiedAttachment);
$contents = str_replace(
'?entryPoint=attachment&amp;id=' . $attachment->getId(),
'?entryPoint=attachment&amp;id=' . $copiedAttachment->getId(),
$contents
);
}
$valueMap->$field = $contents;
return $valueMap;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -39,6 +39,9 @@ use Espo\Core\{
use Espo\Repositories\Email as EmailRepository;
/**
* @implements Loader<\Espo\Entities\Email>
*/
class AddressDataLoader implements Loader
{
private $entityManager;
@@ -50,7 +53,7 @@ class AddressDataLoader implements Loader
public function process(Entity $entity, Params $params): void
{
/* @var $repository EmailRepository */
/** @var EmailRepository $repository */
$repository = $this->entityManager->getRepository('Email');
$repository->loadFromField($entity);

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -47,13 +47,20 @@ use ICal\ICal;
use ICal\Event;
use Throwable;
use stdClass;
/**
* @implements Loader<\Espo\Entities\Email>
*/
class IcsDataLoader implements Loader
{
private $entityManager;
private $log;
/**
* @var array<string,string>
*/
private $entityTypeLinkMap = [
'User' => 'users',
'Contact' => 'contacts',
@@ -114,7 +121,7 @@ class IcsDataLoader implements Loader
return;
}
/* @var $emailAddressRepository EmailAddressRepository */
/** @var EmailAddressRepository $emailAddressRepository */
$emailAddressRepository = $this->entityManager->getRepository(EmailAddress::ENTITY_TYPE);
$attendeeEmailAddressList = $espoEvent->getAttendeeEmailAddressList();
@@ -168,7 +175,7 @@ class IcsDataLoader implements Loader
}
}
private function loadCreatedEvent(Entity $entity, EspoEvent $espoEvent, object $eventData): void
private function loadCreatedEvent(Entity $entity, EspoEvent $espoEvent, stdClass $eventData): void
{
$emailSameEvent = $this->entityManager
->getRDBRepository(Email::ENTITY_TYPE)

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,6 +31,8 @@ namespace Espo\Classes\FieldProcessing\Email;
use Espo\ORM\Entity;
use Espo\Repositories\EmailAddress as EmailAddressRepository;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
@@ -40,12 +42,18 @@ use Espo\Core\{
use Espo\Entities\Email;
use Espo\Entities\User;
/**
* @implements Loader<\Espo\Entities\Email>
*/
class StringDataLoader implements Loader
{
private $entityManager;
private $user;
/**
* @var array<string,string>
*/
private $fromEmailAddressNameCache = [];
public function __construct(EntityManager $entityManager, User $user)
@@ -56,6 +64,8 @@ class StringDataLoader implements Loader
public function process(Entity $entity, Params $params): void
{
/** @var Email $entity */
$userEmailAdddressIdList = [];
$emailAddressCollection = $this->entityManager
@@ -84,9 +94,7 @@ class StringDataLoader implements Loader
$list = [];
foreach ($idList as $emailAddressId) {
$person = $this->entityManager
->getRepository('EmailAddress')
->getEntityByAddressId($emailAddressId, null, true);
$person = $this->getEmailAddressRepository()->getEntityByAddressId($emailAddressId, null, true);
$list[] = $person ? $person->get('name') : $names->$emailAddressId;
}
@@ -96,6 +104,7 @@ class StringDataLoader implements Loader
return;
}
/** @var ?string */
$fromEmailAddressId = $entity->get('fromEmailAddressId');
if (!$fromEmailAddressId) {
@@ -103,9 +112,7 @@ class StringDataLoader implements Loader
}
if (!array_key_exists($fromEmailAddressId, $this->fromEmailAddressNameCache)) {
$person = $this->entityManager
->getRepository('EmailAddress')
->getEntityByAddressId($fromEmailAddressId, null, true);
$person = $this->getEmailAddressRepository()->getEntityByAddressId($fromEmailAddressId, null, true);
$fromName = $person ? $person->get('name') : null;
@@ -119,4 +126,10 @@ class StringDataLoader implements Loader
$entity->set('personStringData', $fromName);
}
private function getEmailAddressRepository(): EmailAddressRepository
{
/** @var EmailAddressRepository */
return $this->entityManager->getRepository('EmailAddress');
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -39,6 +39,9 @@ use Espo\Core\{
use Espo\Entities\User;
/**
* @implements Loader<\Espo\Entities\Email>
*/
class UserColumnsLoader implements Loader
{
private $entityManager;
@@ -54,7 +57,7 @@ class UserColumnsLoader implements Loader
public function process(Entity $entity, Params $params): void
{
$emailUser = $this->entityManager
->getRepository('EmailUser')
->getRDBRepository('EmailUser')
->select(['isRead', 'isImportant', 'inTrash'])
->where([
'deleted' => false,

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -39,6 +39,9 @@ use Espo\Core\{
use Espo\Repositories\Import as ImportRepository;
/**
* @implements Loader<\Espo\Entities\Import>
*/
class CountsLoader implements Loader
{
private $entityManager;
@@ -50,7 +53,7 @@ class CountsLoader implements Loader
public function process(Entity $entity, Params $params): void
{
/* @var $repository ImportRepository */
/** @var ImportRepository $repository */
$repository = $this->entityManager->getRepository('Import');
$importedCount = $repository->countResultRecords($entity, 'imported');

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -38,11 +38,14 @@ use Espo\Core\{
use Espo\Entities\Note;
/**
* @implements Loader<\Espo\Entities\Note>
*/
class AttachmentsLoader implements Loader
{
public function process(Entity $entity, Params $params): void
{
/* @var $entity Note */
/** @var Note $entity */
$entity->loadAttachments();
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,12 +31,18 @@ namespace Espo\Classes\FieldProcessing\Portal;
use Espo\ORM\Entity;
use Espo\Repositories\Portal as PortalRepository;
use Espo\Entities\Portal;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
ORM\EntityManager,
};
/**
* @implements Loader<\Espo\Entities\Portal>
*/
class UrlLoader implements Loader
{
private $entityManager;
@@ -48,8 +54,14 @@ class UrlLoader implements Loader
public function process(Entity $entity, Params $params): void
{
$this->entityManager
->getRepository('Portal')
->loadUrlField($entity);
/** @var Portal $entity */
$this->getPortalRepository()->loadUrlField($entity);
}
private function getPortalRepository(): PortalRepository
{
/** @var PortalRepository */
return $this->entityManager->getRepository('Portal');
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -42,6 +42,9 @@ use Espo\Core\{
use DateTime;
use Exception;
/**
* @implements Loader<\Espo\Entities\User>
*/
class LastAccessLoader implements Loader
{
private $entityManager;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -0,0 +1,49 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Classes\FieldValidators\Email;
use Espo\ORM\Entity;
class EmailAddresses
{
public function checkRequired(Entity $entity, string $field): bool
{
if ($entity->get('status') === 'Draft') {
return true;
}
return $this->isNotEmpty($entity, $field);
}
private function isNotEmpty(Entity $entity, string $field): bool
{
return $entity->has($field) && $entity->get($field) !== '' && $entity->get($field) !== null;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -38,6 +38,9 @@ class IntType
return $this->isNotEmpty($entity, $field);
}
/**
* @param mixed $validationValue
*/
public function checkMax(Entity $entity, string $field, $validationValue): bool
{
if (!$this->isNotEmpty($entity, $field)) {
@@ -51,6 +54,9 @@ class IntType
return true;
}
/**
* @param mixed $validationValue
*/
public function checkMin(Entity $entity, string $field, $validationValue): bool
{
if (!$this->isNotEmpty($entity, $field)) {

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,11 +30,19 @@
namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
use Espo\Core\ORM\Entity as CoreEntity;
class LinkMultipleType
{
public function checkRequired(Entity $entity, string $field): bool
{
return count($entity->getLinkMultipleIdList($field)) > 0;
if (!$entity instanceof CoreEntity) {
return false;
}
/** @var string[] */
$idList = $entity->getLinkMultipleIdList($field);
return count($idList) > 0;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -93,7 +93,7 @@ class CheckEmailAccounts implements Preparator
continue;
}
$jobEntity = $this->entityManager->getEntity(JobEntity::ENTITY_TYPE);
$jobEntity = $this->entityManager->getNewEntity(JobEntity::ENTITY_TYPE);
$jobEntity->set([
'name' => $data->getName(),

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -91,7 +91,7 @@ class CheckInboundEmails implements Preparator
continue;
}
$jobEntity = $this->entityManager->getEntity(JobEntity::ENTITY_TYPE);
$jobEntity = $this->entityManager->getNewEntity(JobEntity::ENTITY_TYPE);
$jobEntity->set([
'name' => $data->getName(),

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -83,7 +83,7 @@ class AuthTokenControl implements JobDataLess
}
$tokenList = $this->entityManager
->getRepository('AuthToken')
->getRDBRepository('AuthToken')
->where($whereClause)
->limit(0, 500)
->find();

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,13 +31,9 @@ namespace Espo\Classes\Jobs;
use Espo\Core\Exceptions\Error;
use Espo\Services\EmailAccount as Service;
use Espo\Core\{
Job\Job,
Job\Job\Data,
ORM\EntityManager,
};
use Espo\Core\Mail\Account\PersonalAccount\Service;
use Espo\Core\Job\Job;
use Espo\Core\Job\Job\Data;
use Throwable;
@@ -45,12 +41,9 @@ class CheckEmailAccounts implements Job
{
private $service;
private $entityManager;
public function __construct(Service $service, EntityManager $entityManager)
public function __construct(Service $service)
{
$this->service = $service;
$this->entityManager = $entityManager;
}
public function run(Data $data): void
@@ -61,22 +54,12 @@ class CheckEmailAccounts implements Job
throw new Error("No target.");
}
$entity = $this->entityManager->getEntity('EmailAccount', $targetId);
if (!$entity) {
throw new Error("Job CheckEmailAccounts '{$targetId}': EmailAccount does not exist.", -1);
}
if ($entity->get('status') !== 'Active') {
throw new Error("Job CheckEmailAccounts '{$targetId}': EmailAccount is not active.", -1);
}
try {
$this->service->fetchFromMailServer($entity);
$this->service->fetch($targetId);
}
catch (Throwable $e) {
throw new Error(
'Job CheckEmailAccounts ' . $entity->getId() . ': [' . $e->getCode() . '] ' .$e->getMessage()
'Job CheckEmailAccounts ' . $targetId . ': [' . $e->getCode() . '] ' .$e->getMessage()
);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,14 +30,9 @@
namespace Espo\Classes\Jobs;
use Espo\Core\Exceptions\Error;
use Espo\Services\InboundEmail as Service;
use Espo\Core\{
Job\Job,
Job\Job\Data,
ORM\EntityManager,
};
use Espo\Core\Mail\Account\GroupAccount\Service;
use Espo\Core\Job\Job;
use Espo\Core\Job\Job\Data;
use Throwable;
@@ -45,12 +40,9 @@ class CheckInboundEmails implements Job
{
private $service;
private $entityManager;
public function __construct(Service $service, EntityManager $entityManager)
public function __construct(Service $service)
{
$this->service = $service;
$this->entityManager = $entityManager;
}
public function run(Data $data): void
@@ -61,22 +53,12 @@ class CheckInboundEmails implements Job
throw new Error("No target.");
}
$entity = $this->entityManager->getEntity('InboundEmail', $targetId);
if (!$entity) {
throw new Error("Job CheckInboundEmails '{$targetId}': InboundEmail does not exist.", -1);
}
if ($entity->get('status') !== 'Active') {
throw new Error("Job CheckInboundEmails '{$targetId}': InboundEmail is not active.", -1);
}
try {
$this->service->fetchFromMailServer($entity);
$this->service->fetch($targetId);
}
catch (Throwable $e) {
throw new Error(
'Job CheckInboundEmails ' . $entity->getId() . ': [' . $e->getCode() . '] ' .$e->getMessage()
'Job CheckInboundEmails ' . $targetId . ': [' . $e->getCode() . '] ' .$e->getMessage()
);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -40,7 +40,8 @@ class CheckNewExtensionVersion extends CheckNewVersion
return;
}
$job = $this->entityManager->getEntity('Job');
$job = $this->entityManager->getNewEntity('Job');
$job->set([
'name' => 'Check for new versions of installed extensions (job)',
'serviceName' => 'AdminNotifications',

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -40,8 +40,14 @@ use DateTimeZone;
class CheckNewVersion implements JobDataLess
{
/**
* @var Config
*/
protected $config;
/**
* @var EntityManager
*/
protected $entityManager;
public function __construct(Config $config, EntityManager $entityManager)
@@ -56,7 +62,7 @@ class CheckNewVersion implements JobDataLess
return;
}
$job = $this->entityManager->getEntity('Job');
$job = $this->entityManager->getNewEntity('Job');
$job->set([
'name' => 'Check for New Version (job)',
@@ -70,7 +76,7 @@ class CheckNewVersion implements JobDataLess
return;
}
protected function getRunTime()
protected function getRunTime(): string
{
$hour = rand(0, 4);
$minute = rand(0, 59);
@@ -93,7 +99,7 @@ class CheckNewVersion implements JobDataLess
* For backward compatibility.
* @deprecated
*/
protected function getEntityManager()
protected function getEntityManager() /** @phpstan-ignore-line */
{
return $this->entityManager;
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,6 +30,8 @@
namespace Espo\Classes\Jobs;
use Espo\Core\Record\ServiceContainer;
use Espo\ORM\Repository\RDBRepository;
use Espo\Core\ORM\Entity as CoreEntity;
use Espo\Core\{
Utils\Config,
@@ -51,23 +53,23 @@ use Throwable;
class Cleanup implements JobDataLess
{
private $cleanupJobPeriod = '10 days';
private string $cleanupJobPeriod = '10 days';
private $cleanupActionHistoryPeriod = '15 days';
private string $cleanupActionHistoryPeriod = '15 days';
private $cleanupAuthTokenPeriod = '1 month';
private string $cleanupAuthTokenPeriod = '1 month';
private $cleanupAuthLogPeriod = '2 months';
private string $cleanupAuthLogPeriod = '2 months';
private $cleanupNotificationsPeriod = '2 months';
private string $cleanupNotificationsPeriod = '2 months';
private $cleanupAttachmentsPeriod = '15 days';
private string $cleanupAttachmentsPeriod = '15 days';
private $cleanupAttachmentsFromPeriod = '3 months';
private string $cleanupAttachmentsFromPeriod = '3 months';
private $cleanupBackupPeriod = '2 month';
private string $cleanupBackupPeriod = '2 month';
private $cleanupDeletedRecordsPeriod = '3 months';
private string $cleanupDeletedRecordsPeriod = '3 months';
private $config;
@@ -132,9 +134,12 @@ class Cleanup implements JobDataLess
foreach ($items as $name => $item) {
try {
/** @var class-string<\Espo\Core\Cleanup\Cleanup> */
$className = $item['className'];
$injectableFactory->create($className)->process();
$obj = $injectableFactory->create($className);
$obj->process();
}
catch (Throwable $e) {
$this->log->error("Cleanup: {$name}: " . $e->getMessage());
@@ -183,14 +188,16 @@ class Cleanup implements JobDataLess
private function cleanupScheduledJobLog(): void
{
$scheduledJobList = $this->entityManager->getRepository('ScheduledJob')
$scheduledJobList = $this->entityManager
->getRDBRepository('ScheduledJob')
->select(['id'])
->find();
foreach ($scheduledJobList as $scheduledJob) {
$scheduledJobId = $scheduledJob->get('id');
$ignoreLogRecordList = $this->entityManager->getRepository('ScheduledJobLogRecord')
$ignoreLogRecordList = $this->entityManager
->getRDBRepository('ScheduledJobLogRecord')
->select(['id'])
->where([
'scheduledJobId' => $scheduledJobId,
@@ -199,11 +206,16 @@ class Cleanup implements JobDataLess
->limit(0, 10)
->find();
if (!is_countable($ignoreLogRecordList)) {
continue;
}
if (!count($ignoreLogRecordList)) {
continue;
}
$ignoreIdList = [];
foreach ($ignoreLogRecordList as $logRecord) {
$ignoreIdList[] = $logRecord->get('id');
}
@@ -300,7 +312,7 @@ class Cleanup implements JobDataLess
$datetime->modify($period);
$collection = $this->entityManager
->getRepository('Attachment')
->getRDBRepository('Attachment')
->where([
'OR' => [
[
@@ -329,7 +341,7 @@ class Cleanup implements JobDataLess
]);
$collection = $this->entityManager
->getRepository('Attachment')
->getRDBRepository('Attachment')
->clone($orphanQueryBuilder->build())
->limit(0, 5000)
->find();
@@ -345,6 +357,7 @@ class Cleanup implements JobDataLess
$datetimeFrom->modify($fromPeriod);
/** @var string[] */
$scopeList = array_keys($this->metadata->get(['scopes']));
foreach ($scopeList as $scope) {
@@ -398,7 +411,8 @@ class Cleanup implements JobDataLess
continue;
}
$query = $this->entityManager->getQueryBuilder()
$query = $this->entityManager
->getQueryBuilder()
->select()
->from($scope)
->withDeleted()
@@ -415,16 +429,16 @@ class Cleanup implements JobDataLess
foreach ($deletedEntityList as $deletedEntity) {
$attachmentToRemoveList = $this->entityManager
->getRepository('Attachment')
->getRDBRepository('Attachment')
->where([
'OR' => [
[
'relatedType' => $scope,
'relatedId' => $deletedEntity->id,
'relatedId' => $deletedEntity->getId(),
],
[
'parentType' => $scope,
'parentId' => $deletedEntity->id,
'parentId' => $deletedEntity->getId(),
]
]
])
@@ -436,7 +450,9 @@ class Cleanup implements JobDataLess
}
}
$delete = $this->entityManager->getQueryBuilder()->delete()
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from('Attachment')
->where([
'deleted' => true,
@@ -451,14 +467,15 @@ class Cleanup implements JobDataLess
{
$dateBefore = date('Y-m-d H:i:s', time() - 3600 * 24 * 20);
$query = $this->entityManager->getQueryBuilder()
$query = $this->entityManager
->getQueryBuilder()
->select()
->from('Email')
->withDeleted()
->build();
$emailList = $this->entityManager
->getRepository('Email')
->getRDBRepository('Email')
->clone($query)
->select(['id'])
->where([
@@ -471,7 +488,7 @@ class Cleanup implements JobDataLess
$id = $email->get('id');
$attachments = $this->entityManager
->getRepository('Attachment')
->getRDBRepository('Attachment')
->where([
'parentId' => $id,
'parentType' => 'Email'
@@ -482,7 +499,9 @@ class Cleanup implements JobDataLess
$this->entityManager->removeEntity($attachment);
}
$delete = $this->entityManager->getQueryBuilder()->delete()
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from('Email')
->where([
'deleted' => true,
@@ -492,7 +511,9 @@ class Cleanup implements JobDataLess
$this->entityManager->getQueryExecutor()->execute($delete);
$delete = $this->entityManager->getQueryBuilder()->delete()
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from('EmailUser')
->where([
'emailId' => $id,
@@ -510,14 +531,17 @@ class Cleanup implements JobDataLess
$datetime = new DateTime();
$datetime->modify($period);
$notificationList = $this->entityManager->getRepository('Notification')
$notificationList = $this->entityManager
->getRDBRepository('Notification')
->where([
'DATE:createdAt<' => $datetime->format('Y-m-d'),
])
->find();
foreach ($notificationList as $notification) {
$this->entityManager->getRepository('Notification')->deleteFromDb($notification->get('id'));
$this->entityManager
->getRDBRepository('Notification')
->deleteFromDb($notification->get('id'));
}
}
@@ -527,8 +551,10 @@ class Cleanup implements JobDataLess
$datetime = new DateTime('-' . $this->cleanupBackupPeriod);
if (file_exists($path)) {
$fileManager = $this->fileManager;
$fileManager = $this->fileManager;
if ($fileManager->exists($path)) {
/** @var string[] */
$fileList = $fileManager->getFileList($path, false, '', false);
foreach ($fileList as $dirName) {
@@ -553,7 +579,15 @@ class Cleanup implements JobDataLess
$repository = $this->entityManager->getRepository($scope);
$repository->deleteFromDb($entity->id);
if (!$repository instanceof RDBRepository) {
return;
}
if (!$entity instanceof CoreEntity) {
return;
}
$repository->deleteFromDb($entity->getId());
$query = $this->entityManager->getQueryComposer();
@@ -576,7 +610,7 @@ class Cleanup implements JobDataLess
}
$where = [
$midKey => $entity->id,
$midKey => $entity->getId(),
];
$conditions = $entity->getRelationParam($relation, 'conditions') ?? [];
@@ -585,17 +619,15 @@ class Cleanup implements JobDataLess
$where[$key] = $value;
}
if (empty($where)) {
continue;
}
$relationEntityType = ucfirst($relationName);
if (!$this->entityManager->hasRepository($relationEntityType)) {
continue;
}
$delete = $this->entityManager->getQueryBuilder()->delete()
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from($relationEntityType)
->where($where)
->build();
@@ -607,24 +639,25 @@ class Cleanup implements JobDataLess
}
}
$query = $this->entityManager->getQueryBuilder()
$query = $this->entityManager
->getQueryBuilder()
->select()
->from('Note')
->withDeleted()
->build();
$noteList = $this->entityManager
->getRepository('Note')
->getRDBRepository('Note')
->clone($query)
->where([
'OR' => [
[
'relatedType' => $scope,
'relatedId' => $entity->id,
'relatedId' => $entity->getId(),
],
[
'parentType' => $scope,
'parentId' => $entity->id,
'parentId' => $entity->getId(),
]
]
])
@@ -640,29 +673,33 @@ class Cleanup implements JobDataLess
if ($scope === 'Note') {
$attachmentList = $this->entityManager
->getRepository('Attachment')
->getRDBRepository('Attachment')
->where([
'parentId' => $entity->id,
'parentId' => $entity->getId(),
'parentType' => 'Note',
])
->find();
foreach ($attachmentList as $attachment) {
$this->entityManager->removeEntity($attachment);
$this->entityManager->getRepository('Attachment')->deleteFromDb($attachment->id);
$this->entityManager
->getRDBRepository('Attachment')
->deleteFromDb($attachment->getId());
}
}
$arrayValueList = $this->entityManager
->getRepository('ArrayValue')
->getRDBRepository('ArrayValue')
->where([
'entityType' => $entity->getEntityType(),
'entityId' => $entity->id,
'entityId' => $entity->getId(),
])
->find();
foreach ($arrayValueList as $arrayValue) {
$this->entityManager->getRepository('ArrayValue')->deleteFromDb($arrayValue->id);
$this->entityManager
->getRDBRepository('ArrayValue')
->deleteFromDb($arrayValue->getId());
}
}
@@ -676,6 +713,7 @@ class Cleanup implements JobDataLess
$datetime = new DateTime($period);
/** @var string[] */
$scopeList = array_keys($this->metadata->get(['scopes']));
foreach ($scopeList as $scope) {
@@ -693,24 +731,12 @@ class Cleanup implements JobDataLess
$repository = $this->entityManager->getRepository($scope);
if (!$repository) {
if (!$repository instanceof RDBRepository) {
continue;
}
if (!method_exists($repository, 'find')) continue;
if (!method_exists($repository, 'clone')) continue;
if (!method_exists($repository, 'where')) continue;
if (!method_exists($repository, 'select')) continue;
if (!method_exists($repository, 'deleteFromDb')) continue;
$hasCleanupMethod = false;
$service = $this->recordServiceContainer->get($scope);
if (method_exists($service, 'cleanup')) {
$hasCleanupMethod = true;
}
$whereClause = [
'deleted' => 1,
];
@@ -722,7 +748,8 @@ class Cleanup implements JobDataLess
$whereClause['createdAt<'] = $datetime->format('Y-m-d H:i:s');
}
$query = $this->entityManager->getQueryBuilder()
$query = $this->entityManager
->getQueryBuilder()
->select()
->from($scope)
->withDeleted()
@@ -735,9 +762,9 @@ class Cleanup implements JobDataLess
->find();
foreach ($deletedEntityList as $entity) {
if ($hasCleanupMethod) {
if (method_exists($service, 'cleanup')) {
try {
$service->cleanup($entity->id);
$service->cleanup($entity->getId());
}
catch (Throwable $e) {
$this->log->error("Cleanup job: Cleanup scope {$scope}: " . $e->getMessage());

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -48,15 +48,15 @@ use Espo\{
class MassDelete implements MassAction
{
protected $massDeleteOriginal;
private $massDeleteOriginal;
protected $queryBuilder;
private $queryBuilder;
protected $entityManager;
private $entityManager;
protected $acl;
private $acl;
protected $user;
private $user;
public function __construct(
MassDeleteOriginal $massDeleteOriginal,
@@ -87,14 +87,14 @@ class MassDelete implements MassAction
$query = $this->queryBuilder->build($params);
$collection = $this->entityManager
->getRepository('User')
->getRDBRepository('User')
->clone($query)
->sth()
->select(['id'])
->find();
foreach ($collection as $entity) {
$this->checkEntity($entity, $data);
$this->checkEntity($entity);
}
return $this->massDeleteOriginal->process($params, $data);
@@ -102,11 +102,11 @@ class MassDelete implements MassAction
protected function checkEntity(Entity $entity): void
{
if ($entity->id === 'system') {
if ($entity->getId() === 'system') {
throw new Forbidden("Can't delete 'system' user.");
}
if ($entity->id === $this->user->id) {
if ($entity->getId() === $this->user->getId()) {
throw new Forbidden("Can't delete own user.");
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -50,19 +50,19 @@ use Espo\{
class MassUpdate implements MassAction
{
protected $massUpdateOriginal;
private $massUpdateOriginal;
protected $queryBuilder;
private $queryBuilder;
protected $entityManager;
private $entityManager;
protected $acl;
private $acl;
protected $user;
private $user;
protected $fileManager;
private $fileManager;
protected $dataManager;
private $dataManager;
public function __construct(
MassUpdateOriginal $massUpdateOriginal,
@@ -108,7 +108,7 @@ class MassUpdate implements MassAction
$query = $this->queryBuilder->build($params);
$collection = $this->entityManager
->getRepository('User')
->getRDBRepository('User')
->clone($query)
->sth()
->select(['id'])
@@ -127,11 +127,11 @@ class MassUpdate implements MassAction
protected function checkEntity(Entity $entity, Data $data): void
{
if ($entity->id === 'system') {
if ($entity->getId() === 'system') {
throw new Forbidden("Can't update 'system' user.");
}
if ($entity->id === $this->user->id) {
if ($entity->getId() === $this->user->getId()) {
if ($data->has('isActive')) {
throw new Forbidden("Can't change 'isActive' field for own user.");
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -36,6 +36,9 @@ use Espo\ORM\Entity;
use Espo\Entities\User;
/**
* @implements LinkHook<\Espo\Entities\Team>
*/
class BeforeLinkUserCheck implements LinkHook
{
public function process(Entity $entity, string $link, Entity $foreignEntity): void
@@ -44,6 +47,8 @@ class BeforeLinkUserCheck implements LinkHook
return;
}
assert($foreignEntity instanceof User);
$this->processUserCheck($foreignEntity);
}

Some files were not shown because too many files have changed in this diff Show More