Compare commits

...

1670 Commits

Author SHA1 Message Date
Yuri Kuznetsov
c5bc7136c7 fix activities 2021-10-06 13:34:35 +03:00
Yuri Kuznetsov
18ba671417 tryCheck usage 2021-10-06 12:00:33 +03:00
Yuri Kuznetsov
6141bfd1fb printTrace in default config 2021-10-06 11:28:41 +03:00
Yuri Kuznetsov
4e4b51c4f1 metadata tryCheck usage 2021-10-06 11:06:10 +03:00
Yuri Kuznetsov
83ac300aa3 fix logo upload 2021-10-05 20:31:24 +03:00
Yuri Kuznetsov
f641a3c9c6 fix 2021-10-05 18:15:55 +03:00
Yuri Kuznetsov
18a4782bf1 v 2021-10-05 17:17:41 +03:00
Yuri Kuznetsov
f1fddb7325 fix 2021-10-05 15:07:12 +03:00
Yuri Kuznetsov
9c864af409 fix 2021-10-05 13:34:08 +03:00
Yuri Kuznetsov
7cd332228a fix getEntity user 2021-10-05 12:58:04 +03:00
Yuri Kuznetsov
54c534736f printTrace logger param 2021-10-05 12:27:49 +03:00
Yuri Kuznetsov
6f07862572 fix test 2021-10-05 12:27:20 +03:00
Yuri Kuznetsov
54863ca6a4 fix group email account keep unread 2021-10-05 11:35:33 +03:00
Yuri Kuznetsov
70499e504c upgrade fix 2021-10-04 12:44:24 +03:00
Yuri Kuznetsov
697565f95c v 2021-10-04 12:14:43 +03:00
Yuri Kuznetsov
94f1501c96 fix upgrade 2021-10-04 12:03:01 +03:00
Yuri Kuznetsov
145b0e2c7b upgrade opcache check 2021-10-04 11:44:59 +03:00
Yuri Kuznetsov
7057b3ba82 config writer fix 2021-10-04 11:38:09 +03:00
Yuri Kuznetsov
f6eecce135 upgrade fixes 2021-10-04 10:25:05 +03:00
Yuri Kuznetsov
1f0d105685 fix upgrade warning 2021-10-04 10:00:15 +03:00
Yuri Kuznetsov
7caf841edd fix htmlizer data 2021-10-04 09:56:08 +03:00
Yuri Kuznetsov
7cd82b1e03 warning fix 2021-10-02 11:12:58 +03:00
Yuri Kuznetsov
2c8a21fc04 cs fix 2021-10-02 11:07:31 +03:00
Yuri Kuznetsov
102ec389b9 fix record dashlet 2021-10-02 11:06:20 +03:00
Yuri Kuznetsov
f07895eeb0 fix settings restriction 2021-10-01 18:41:44 +03:00
Yuri Kuznetsov
a1570c7666 upgrade cli check 2021-10-01 16:47:18 +03:00
Yuri Kuznetsov
ef260784ac cleanup 2021-10-01 15:24:24 +03:00
Yuri Kuznetsov
bc7be925e2 fix 2021-10-01 15:18:02 +03:00
Yuri Kuznetsov
9091e49650 fix test 2021-10-01 12:54:52 +03:00
Yuri Kuznetsov
5a8dd95565 orm fix 2021-10-01 12:19:13 +03:00
Yuri Kuznetsov
23df87a8c3 v 2021-10-01 11:36:00 +03:00
Yuri Kuznetsov
3781d10cb6 Merge branch 'stable' 2021-10-01 11:32:08 +03:00
Yuri Kuznetsov
f1d505330c v 2021-10-01 10:59:45 +03:00
Yuri Kuznetsov
fc9fbd25fe fix invitation from address 2021-09-30 17:15:31 +03:00
Yuri Kuznetsov
b3e5003e0c ref 2021-09-30 16:47:53 +03:00
Yuri Kuznetsov
be9fd29023 cleanup 2021-09-30 15:18:32 +03:00
Yuri Kuznetsov
22bb9cfe09 Merge branch 'hotfix/6.1.10' 2021-09-30 11:35:45 +03:00
Yuri Kuznetsov
02238b4000 fix test 2021-09-30 11:35:19 +03:00
Yuri Kuznetsov
2f9bf085fa fix test 2021-09-30 11:34:14 +03:00
Yuri Kuznetsov
11010f274f order converter change 2021-09-30 11:32:14 +03:00
Taras Machyshyn
9f2c57c3f1 Upgrade script 2021-09-30 10:59:04 +03:00
Yuri Kuznetsov
41d815103c fix notifications 2021-09-29 16:26:32 +03:00
Yuri Kuznetsov
967c48f6d7 fix 2021-09-29 14:27:05 +03:00
Yuri Kuznetsov
c4d0d0fba7 Merge branch 'hotfix/6.1.10' 2021-09-29 14:07:26 +03:00
Yuri Kuznetsov
9a720e9c82 fix fiscal quarter 2021-09-29 14:06:53 +03:00
Yuri Kuznetsov
c41522ab67 fix fiscal quarter 2021-09-29 14:03:37 +03:00
Yuri Kuznetsov
501a4b3415 chmod upgrade 2021-09-28 13:15:30 +03:00
Yuri Kuznetsov
7af59ac7ec Merge branch 'hotfix/6.1.10' 2021-09-28 12:05:51 +03:00
Yuri Kuznetsov
c16a4707b5 fix daemon 2021-09-28 12:05:02 +03:00
Yuri Kuznetsov
0a86ea65ed fix daemon long running jobs blocking 2021-09-28 12:03:16 +03:00
Yuri Kuznetsov
273ab1fe54 list expanded re render on edit 2021-09-27 13:16:42 +03:00
Yuri Kuznetsov
1b9622e6dd cs fix 2021-09-27 13:10:00 +03:00
Yuri Kuznetsov
7209184636 cs fix 2021-09-27 13:00:39 +03:00
Yuri Kuznetsov
b4c0b264b9 rename 2021-09-24 20:26:39 +03:00
Yuri Kuznetsov
2e13e758b8 lang fixes 2021-09-24 16:27:19 +03:00
Yuri Kuznetsov
5359eb85e1 lang fix 2021-09-24 16:23:33 +03:00
Yuri Kuznetsov
e42e758150 lang fixes 2021-09-24 16:21:39 +03:00
Yuri Kuznetsov
340fd9a324 swedish lang 2021-09-24 16:20:04 +03:00
Yuri Kuznetsov
1e277e5681 fix 2021-09-24 15:59:32 +03:00
Yuri Kuznetsov
2534176b8d renaming 2021-09-24 15:51:16 +03:00
Yuri Kuznetsov
4f1c547f77 renaming 2021-09-24 15:47:04 +03:00
Yuri Kuznetsov
4698b2a0e7 renaming 2021-09-24 15:10:47 +03:00
Yuri Kuznetsov
cb76c9762c login renaming 2021-09-24 12:01:43 +03:00
Yuri Kuznetsov
496890357a renaming 2021-09-24 11:37:33 +03:00
Yuri Kuznetsov
fc7dba6c91 all of filter 2021-09-23 17:03:20 +03:00
Yuri Kuznetsov
67efbdc6e9 fix array filter 2021-09-23 16:43:54 +03:00
Yuri Kuznetsov
d660137e7e refactoring 2021-09-23 15:29:54 +03:00
Yuri Kuznetsov
15ae14d4a1 fix test 2021-09-23 13:11:13 +03:00
Yuri Kuznetsov
111524b6c6 job refactoring 2021-09-23 12:56:57 +03:00
Yuri Kuznetsov
ce806c5aa8 renaming 2021-09-23 11:40:09 +03:00
Yuri Kuznetsov
b244f613ee ref 2021-09-22 22:33:37 +03:00
Yuri Kuznetsov
ad5cb35260 cleanup 2021-09-22 21:50:01 +03:00
Yuri Kuznetsov
c0ca2174b6 ref 2021-09-22 21:48:20 +03:00
Yuri Kuznetsov
c3c1398a2d renaming 5 2021-09-22 21:45:16 +03:00
Yuri Kuznetsov
1fbdd2edf4 job preparator 2021-09-22 16:55:16 +03:00
Yuri Kuznetsov
a64a66912f renaming 4 2021-09-22 15:38:20 +03:00
Yuri Kuznetsov
61bbb23e7a renaming 3 2021-09-22 13:23:41 +03:00
Yuri Kuznetsov
e8d62ecc22 renaming 2 2021-09-22 13:07:12 +03:00
Yuri Kuznetsov
7db64e9375 renaming 1 2021-09-22 12:59:48 +03:00
Yuri Kuznetsov
0a320cb3b3 templete helper interface 2021-09-22 11:58:02 +03:00
Yuri Kuznetsov
50d38d127c Merge branch 'hotfix/6.1.10' 2021-09-20 15:51:46 +03:00
Yuri Kuznetsov
1ad42423bf google map pdf fix 2021-09-20 15:51:25 +03:00
Yuri Kuznetsov
273c9b2f18 fix google map pdf 2021-09-20 15:45:36 +03:00
Yuri Kuznetsov
90260bbed5 acl tryCheck 2021-09-20 13:38:47 +03:00
Yuri Kuznetsov
833804c7b4 fix test 2021-09-20 13:36:18 +03:00
Yuri Kuznetsov
206f4bc2bb entity setters and getters 2021-09-20 12:38:36 +03:00
Yuri Kuznetsov
5280bdab86 htmlizer fixes 2021-09-20 11:54:33 +03:00
Yuri Kuznetsov
ce0113cd6c cleanup 2021-09-19 20:11:07 +03:00
Yuri Kuznetsov
24885853fd fix 2021-09-19 18:51:07 +03:00
Yuri Kuznetsov
1f4ce20c8b template renderer 2021-09-19 18:47:15 +03:00
Yuri Kuznetsov
5629682a9a cleanup 2021-09-19 14:29:50 +03:00
Yuri Kuznetsov
826e335611 comment 2021-09-19 13:42:13 +03:00
Yuri Kuznetsov
06c0a425cd select text filter ref 2021-09-19 13:40:47 +03:00
Yuri Kuznetsov
dc9b4bbb20 amend 2021-09-19 10:29:29 +03:00
Yuri Kuznetsov
4e951bcb98 refactoring 2021-09-19 10:27:59 +03:00
Yuri Kuznetsov
428cafeb7d import result fetch limit 2021-09-18 19:15:32 +03:00
Yuri Kuznetsov
e145e461fa cs fix 2021-09-18 13:15:35 +03:00
Yuri Kuznetsov
7bfd268793 cs fix 2021-09-18 13:12:52 +03:00
Yuri Kuznetsov
2bc2d4ed26 fix import 2021-09-18 11:06:09 +03:00
Yuri Kuznetsov
185d006a61 fix css 2021-09-17 13:38:28 +03:00
Yuri Kuznetsov
42068c8a95 updateDuplicateCheck param 2021-09-17 12:50:55 +03:00
Yuri Kuznetsov
cb4e86886a ref 2021-09-17 12:37:20 +03:00
Yuri Kuznetsov
02f6b1850c sms provider fix 2021-09-17 12:30:34 +03:00
Yuri Kuznetsov
a667380d7a fix 2021-09-17 12:30:27 +03:00
Yuri Kuznetsov
21be67f025 parent reserved word 2021-09-17 11:24:24 +03:00
Yuri Kuznetsov
7d3fbcc7d0 mail sender attachment hint 2021-09-17 11:24:24 +03:00
Yuri Kuznetsov
cbbfc2227c fix 2021-09-16 18:00:20 +03:00
Yuri Kuznetsov
9add3fa538 sms 2021-09-16 17:35:32 +03:00
Yuri Kuznetsov
ef13bffcb9 fix 2021-09-16 13:48:53 +03:00
Yuri Kuznetsov
a40c9d2b11 fix 2021-09-16 13:25:20 +03:00
Yuri Kuznetsov
ddaa4c056d fix 2021-09-16 13:10:50 +03:00
Yuri Kuznetsov
8f0b34c2de settings improvement 2021-09-16 13:04:19 +03:00
Yuri Kuznetsov
5ff145ff12 dashboard 12 columns 2021-09-14 16:18:40 +03:00
Yuri Kuznetsov
6e8a3fa05d cs 2021-09-14 16:12:27 +03:00
Yuri Kuznetsov
2d3816e3ae cs fix 2021-09-14 15:25:44 +03:00
Yuri Kuznetsov
4c9441a690 email load addresses 2021-09-14 11:09:30 +03:00
Yuri Kuznetsov
035523b426 c 2021-09-14 10:50:12 +03:00
Yuri Kuznetsov
93179a21b2 refactoring 2021-09-14 10:46:03 +03:00
Yuri Kuznetsov
53534cf3d5 ref 2021-09-14 10:34:42 +03:00
Yuri Kuznetsov
8bb6c4012a ref 2021-09-14 10:30:53 +03:00
Yuri Kuznetsov
57960111f7 job fixes 2021-09-14 10:03:35 +03:00
Yuri Kuznetsov
165e6322fc comment fix 2021-09-13 19:29:45 +03:00
Yuri Kuznetsov
2afc157c24 email getFromAddress 2021-09-13 16:32:43 +03:00
Yuri Kuznetsov
9822bb94a1 fix 2021-09-13 15:44:08 +03:00
Yuri Kuznetsov
bf72c8a4cc 2fa-email 2021-09-13 13:09:09 +03:00
Yuri Kuznetsov
f6c8281c9e remove hook 2021-09-11 16:52:42 +03:00
Yuri Kuznetsov
dcc2b2cb31 onFailSecondStep hook 2021-09-11 11:45:39 +03:00
Yuri Kuznetsov
e9d3127932 rename 2021-09-11 09:19:30 +03:00
Yuri Kuznetsov
c5d6b7d053 rename 2021-09-11 08:57:34 +03:00
Yuri Kuznetsov
9bb0950c12 email factory 2021-09-10 21:55:00 +03:00
Yuri Kuznetsov
b2d6bd58e6 email methods 2021-09-10 21:50:19 +03:00
Yuri Kuznetsov
4fdcdec802 email methods 2021-09-10 21:24:57 +03:00
Yuri Kuznetsov
0873b17894 comments 2021-09-10 21:13:22 +03:00
Yuri Kuznetsov
48957d33b6 datetime fields impr 2021-09-10 21:09:05 +03:00
Yuri Kuznetsov
48675f1875 fix 2021-09-10 17:05:51 +03:00
Yuri Kuznetsov
ef4377c77b naming fix 2021-09-10 12:57:52 +03:00
Yuri Kuznetsov
4394e0fca1 refactoring 2021-09-10 12:40:54 +03:00
Yuri Kuznetsov
fc7b15042c 2fa refactoring 2021-09-10 12:25:43 +03:00
Yuri Kuznetsov
bbaa119617 fix 2021-09-09 22:30:40 +03:00
Yuri Kuznetsov
88f4797f0b formula word wrap 2021-09-09 17:11:23 +03:00
Yuri Kuznetsov
fa35e32578 refactoring 2021-09-09 14:57:01 +03:00
Yuri Kuznetsov
c40cbc6cc2 fix 2021-09-09 12:45:57 +03:00
Yuri Kuznetsov
8fcd6c2ff9 fixes and refactoring 2021-09-09 11:51:11 +03:00
Yuri Kuznetsov
30c6a713d6 change 2021-09-08 15:55:01 +03:00
Yuri Kuznetsov
029a18ff1a fixes 2021-09-08 13:53:22 +03:00
Yuri Kuznetsov
45049ae176 cs fix 2021-09-08 13:38:44 +03:00
Yuri Kuznetsov
01f59521af email fix 2021-09-08 13:13:25 +03:00
Yuri Kuznetsov
0f3cd9dd24 cs fix 2021-09-08 13:02:33 +03:00
Yuri Kuznetsov
ba4619df21 fixes 2021-09-08 12:58:11 +03:00
Yuri Kuznetsov
f7aa5aaf0b refactoring 2021-09-08 11:53:01 +03:00
Yuri Kuznetsov
d3f0553c65 fix 2021-09-08 10:59:18 +03:00
Yuri Kuznetsov
601d7729bc refactoring 2021-09-07 18:53:46 +03:00
Yuri Kuznetsov
ac464b4036 refactoring 2021-09-07 18:41:33 +03:00
Yuri Kuznetsov
5f220bc364 comment 2021-09-07 16:17:30 +03:00
Yuri Kuznetsov
962ea50c44 fix 2021-09-07 16:16:29 +03:00
Yuri Kuznetsov
742fda24c6 bc fix 2021-09-07 16:04:55 +03:00
Yuri Kuznetsov
e0c10f3564 fix 2021-09-07 15:45:27 +03:00
Yuri Kuznetsov
5a94143fd7 fix 2021-09-07 15:39:58 +03:00
Yuri Kuznetsov
c5ba226fa0 fix 2021-09-06 15:57:17 +03:00
Yuri Kuznetsov
be8dff3de7 fix 2021-09-06 15:57:10 +03:00
Yuri Kuznetsov
0582fd680d rebuild actionClassNameList 2021-09-06 14:04:47 +03:00
Yuri Kuznetsov
c93a5e5299 fix 2021-09-06 12:16:28 +03:00
Yuri Kuznetsov
c5229f1100 fix 2021-09-06 11:53:21 +03:00
Yuri Kuznetsov
d78023f388 refactoring 2021-09-06 11:31:22 +03:00
Yuri Kuznetsov
f15b63fd66 cleanup 2021-09-06 11:18:32 +03:00
Yuri Kuznetsov
0ff236edbc refactoring 2021-09-06 11:13:16 +03:00
Yuri Kuznetsov
9d23f3bdd0 refactoring 2021-09-05 18:11:53 +03:00
Yuri Kuznetsov
dd74aac117 fix clone 2021-09-05 18:11:37 +03:00
Yuri Kuznetsov
d49b713ccd fixes 2021-09-05 17:05:39 +03:00
Yuri Kuznetsov
d6431cbcc4 fix 2021-09-05 16:56:24 +03:00
Yuri Kuznetsov
392748db57 refactoring 2021-09-05 16:54:24 +03:00
Yuri Kuznetsov
70cc8fb9e3 ref 2021-09-05 12:37:42 +03:00
Yuri Kuznetsov
bbabe672d8 refactoring 2021-09-05 12:14:39 +03:00
Yuri Kuznetsov
447732bf9c fix import 2021-09-05 12:14:25 +03:00
Yuri Kuznetsov
29f60b5199 rename 2021-09-05 09:57:33 +03:00
Yuri Kuznetsov
94fa7b17ff rename 2021-09-04 20:37:36 +03:00
Yuri Kuznetsov
b5ec93e571 fix 2021-09-04 19:15:06 +03:00
Yuri Kuznetsov
132e762c7e refactoring 2021-09-04 18:37:52 +03:00
Yuri Kuznetsov
8ef94890a9 fix 2021-09-04 18:34:22 +03:00
Yuri Kuznetsov
b6c9ef990f refactoring 2021-09-04 17:48:55 +03:00
Yuri Kuznetsov
b19ce60e74 notification refactoring 2021-09-04 16:59:24 +03:00
Yuri Kuznetsov
632e1ecb5c stream refactoring 2021-09-04 12:27:11 +03:00
Yuri Kuznetsov
fa3ec522ca cs fixes and cleanup 2021-09-03 20:20:42 +03:00
Yuri Kuznetsov
4615cea8a6 more auth hooks 2021-09-03 15:35:47 +03:00
Yuri Kuznetsov
3c5dc1672a auth hooks 2021-09-03 14:25:13 +03:00
Yuri Kuznetsov
768c68df49 cleanup 2021-09-01 20:27:37 +03:00
Yuri Kuznetsov
c44731bd97 fix test 2021-09-01 20:27:13 +03:00
Yuri Kuznetsov
9450cf9447 response change 2021-09-01 20:23:52 +03:00
Yuri Kuznetsov
1cfb60d65b fix 2021-09-01 19:48:55 +03:00
Yuri Kuznetsov
64519d6310 docs 2021-09-01 19:48:30 +03:00
Yuri Kuznetsov
3d9b5852f8 cs fix 2021-09-01 19:43:32 +03:00
Yuri Kuznetsov
dc6109c530 fix broadcast channel 2021-09-01 19:41:49 +03:00
Yuri Kuznetsov
7fe1e27667 fix 2021-09-01 19:40:23 +03:00
Yuri Kuznetsov
e24209438c get header as array 2021-09-01 16:13:15 +03:00
Yuri Kuznetsov
ee2a3c9bea fix x-skip-duplicate-check header 2021-09-01 15:51:46 +03:00
Yuri Kuznetsov
5861aa11c1 Merge branch 'master' of github.com:espocrm/espocrm 2021-09-01 12:08:18 +03:00
Yuri Kuznetsov
0041c11aae fix show hide panel 2021-09-01 11:11:23 +03:00
Yuri Kuznetsov
ed8def4ece ref 2021-09-01 10:57:57 +03:00
Yuri Kuznetsov
7f08cc9cf0 cs fix 2021-09-01 10:36:22 +03:00
Yuri Kuznetsov
981e477bd0 ref 2021-09-01 10:23:05 +03:00
Yuri Kuznetsov
01bf39764a ref 2021-09-01 09:58:03 +03:00
Yuri Kuznetsov
b4a2ad646b cs fix 2021-09-01 09:52:05 +03:00
dependabot[bot]
79d557542b Bump tar from 6.1.2 to 6.1.9 (#2064)
Bumps [tar](https://github.com/npm/node-tar) from 6.1.2 to 6.1.9.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v6.1.2...v6.1.9)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: direct:development
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-31 20:07:56 +03:00
Yuri Kuznetsov
26d411c94d array field fix 2021-08-31 11:24:40 +03:00
Yuri Kuznetsov
8d3ae2ef00 refactoring 2021-08-30 13:55:01 +03:00
Yuri Kuznetsov
f28854b7f2 fix css 2021-08-30 12:58:47 +03:00
Yuri Kuznetsov
5a24771d3c fix tests 2021-08-30 12:13:30 +03:00
Yuri Kuznetsov
84830d6aef refactoring 2021-08-30 12:00:51 +03:00
Yuri Kuznetsov
134cd53f45 Merge branch 'hotfix/6.1.9' 2021-08-30 10:58:36 +03:00
Yuri Kuznetsov
717b9db4af v 2021-08-30 10:49:36 +03:00
Yuri Kuznetsov
87c313c933 update markdown 2021-08-30 10:46:57 +03:00
Yuri Kuznetsov
928320c1bd refactoring 2021-08-29 16:22:55 +03:00
Yuri Kuznetsov
bba4ad55da refactoring 2021-08-29 16:13:35 +03:00
Yuri Kuznetsov
23604fba25 refactoring 2021-08-29 14:37:51 +03:00
Yuri Kuznetsov
112c51d6e3 refactoring 2021-08-29 11:00:54 +03:00
Yuri Kuznetsov
9339a15d18 route refactoring 2021-08-28 22:34:30 +03:00
Yuri Kuznetsov
a4b65ba0c7 comment fix 2021-08-28 14:11:54 +03:00
Yuri Kuznetsov
00dfe2599e refactoring 2021-08-28 13:47:55 +03:00
Yuri Kuznetsov
dcf6ec5612 cs fix 2021-08-28 13:45:40 +03:00
Yuri Kuznetsov
0acd47fba0 email notification handler interface 2021-08-28 13:42:26 +03:00
Yuri Kuznetsov
4e718ff879 update markdown 2021-08-28 13:37:40 +03:00
Yuri Kuznetsov
1205462620 notificationDefs 2021-08-28 09:03:17 +03:00
Yuri Kuznetsov
75344a4ed2 refactoring 2021-08-27 23:00:34 +03:00
Yuri Kuznetsov
6dae15155a runner parameterized 2021-08-27 22:22:59 +03:00
Yuri Kuznetsov
338922099d cleanup interface 2021-08-27 17:05:33 +03:00
Yuri Kuznetsov
0c840de187 css fix 2021-08-27 17:05:26 +03:00
Yuri Kuznetsov
16755831bc css color fix 2021-08-27 13:19:01 +03:00
Yuri Kuznetsov
4c64b7e456 refactoring 2021-08-27 13:03:39 +03:00
Yuri Kuznetsov
28a56c0bd7 folder color 2021-08-27 10:50:03 +03:00
Yuri Kuznetsov
894f99aa66 fix ics import 2021-08-26 19:15:44 +03:00
Yuri Kuznetsov
450d785a58 email fix 2021-08-26 18:59:37 +03:00
Yuri Kuznetsov
a26be8e7f0 pdfDefs hide 2021-08-26 18:31:40 +03:00
Yuri Kuznetsov
d2f982fccb pdf data loader params 2021-08-26 17:35:53 +03:00
Yuri Kuznetsov
4b38f81384 fix 2021-08-26 16:13:07 +03:00
Yuri Kuznetsov
20bc336036 htmlizer fix data 2021-08-26 14:03:49 +03:00
Yuri Kuznetsov
cec4585538 rename 2021-08-26 13:34:12 +03:00
Yuri Kuznetsov
8b4635ffaa fix 2021-08-26 13:26:43 +03:00
Yuri Kuznetsov
3dc53c5436 sp v change 2021-08-26 13:07:14 +03:00
Yuri Kuznetsov
7265b3c4b6 fix 2021-08-26 13:04:36 +03:00
Yuri Kuznetsov
49033dec1a cleanup 2021-08-26 13:03:24 +03:00
Yuri Kuznetsov
9b632f582f pdf data loader framework 2021-08-26 13:02:31 +03:00
Yuri Kuznetsov
a989c8a6d1 upgrade sp version change 2021-08-26 10:41:20 +03:00
Yuri Kuznetsov
e5c0427e68 select applier change 2021-08-25 18:26:52 +03:00
Yuri Kuznetsov
c5811749cb fix order 2021-08-25 16:35:04 +03:00
Yuri Kuznetsov
5e925865a7 fix 2021-08-25 15:56:03 +03:00
Yuri Kuznetsov
175f837f3d fix inbox dashlet 2021-08-25 15:33:40 +03:00
Yuri Kuznetsov
b28d3816c0 kanban fix 2021-08-25 13:31:40 +03:00
Yuri Kuznetsov
3ad66acb20 cs fix 2021-08-25 11:47:43 +03:00
Yuri Kuznetsov
958b44af15 cs fix 2021-08-25 11:43:34 +03:00
Yuri Kuznetsov
99b20f6724 fix kanban 2021-08-25 11:39:11 +03:00
Yuri Kuznetsov
4eec64e811 cs fix 2021-08-25 11:24:44 +03:00
Yuri Kuznetsov
052548fda7 fix 2021-08-25 09:59:25 +03:00
Yuri Kuznetsov
98e7218cf5 fix 2021-08-25 09:58:35 +03:00
Yuri Kuznetsov
374c3786df fix findByEmailAddress function 2021-08-24 18:09:54 +03:00
Yuri Kuznetsov
a9a3f4381a extension list 2021-08-24 17:46:06 +03:00
Yuri Kuznetsov
b845ad6d3c refactoring 2021-08-24 17:34:22 +03:00
Yuri Kuznetsov
7c8d3caba6 fix 2021-08-24 12:43:28 +03:00
Yuri Kuznetsov
fcddc472e1 run job changes 2021-08-24 12:25:20 +03:00
Yuri Kuznetsov
1c18348475 app-info jobs 2021-08-24 12:18:11 +03:00
Yuri Kuznetsov
c6c74bd7b9 refactoring 2021-08-24 11:56:12 +03:00
Yuri Kuznetsov
0775edd29e fix email notifications on duplicate 2021-08-24 11:50:43 +03:00
Yuri Kuznetsov
52017e5281 refactoring 2021-08-24 11:42:57 +03:00
Yuri Kuznetsov
af3aecc3f8 manual merge 2021-08-23 13:10:13 +03:00
Eymen Elkum
eaf6b511d0 fix meeting send invitation (#2058) 2021-08-23 09:52:18 +03:00
Yuri Kuznetsov
e13d0248ae css fix logo 2021-08-21 11:11:35 +03:00
Yuri Kuznetsov
e3d563a556 command refactoring 2021-08-21 10:31:07 +03:00
Yuri Kuznetsov
e2078bba84 help command fix 2021-08-21 09:54:39 +03:00
M3sca
017af8a383 edit: Fix label in Account.json for italian translate (#2057) 2021-08-20 18:26:06 +03:00
Yuri Kuznetsov
0739e9f655 preload fix 2021-08-20 12:14:11 +03:00
Yuri Kuznetsov
6f2904eb9a command help 2021-08-17 13:03:45 +03:00
Yuri Kuznetsov
4003977ce3 fix 2021-08-16 17:49:41 +03:00
Yuri Kuznetsov
d058bb7c3b cs fix 2021-08-16 15:59:25 +03:00
Yuri Kuznetsov
139dfc5b81 permissions 2021-08-16 11:34:19 +03:00
Yuri Kuznetsov
152a5b5a7b bin command 2021-08-14 15:47:52 +03:00
Yuri Kuznetsov
ad54fa2ace fix 2021-08-13 19:30:54 +03:00
Yuri Kuznetsov
d2e15f52c3 fix test 2021-08-13 15:59:05 +03:00
Yuri Kuznetsov
f670f382cd refresh entity 2021-08-13 15:56:42 +03:00
Yuri Kuznetsov
1ebedaf791 auth result data 2021-08-13 11:32:23 +03:00
Yuri Kuznetsov
2879f426e0 cs fix 2021-08-13 11:32:14 +03:00
Yuri Kuznetsov
d7c2cd8d2a fix 2021-08-13 11:19:27 +03:00
Yuri Kuznetsov
78814dedd3 fix modal 2021-08-12 16:52:15 +03:00
Yuri Kuznetsov
4865cf2202 upgrade mailchimp check 2021-08-12 15:24:48 +03:00
Yuri Kuznetsov
239c533137 fix 2021-08-12 13:33:19 +03:00
Yuri Kuznetsov
55bf893228 cs fix and ref 2021-08-12 12:45:55 +03:00
Yuri Kuznetsov
349cb32c5f cleanup 2021-08-12 12:19:57 +03:00
Yuri Kuznetsov
1545305d43 merge 2021-08-12 12:19:50 +03:00
Yuri Kuznetsov
0f84c6eaaa upgrade outlook version check 2021-08-12 12:14:28 +03:00
Yuri Kuznetsov
df94b38019 job backward compatibility 2021-08-12 11:28:02 +03:00
Yuri Kuznetsov
e8451f9648 wysiwig link insert scroll fix 2021-08-11 16:29:58 +03:00
Yuri Kuznetsov
b42ed51c5e real estate version check 2021-08-11 15:48:31 +03:00
Yuri Kuznetsov
9ed9ccbe4a fix typo 2021-08-11 11:26:44 +03:00
Yuri Kuznetsov
b4d0343992 fix record tree 2021-08-11 11:26:44 +03:00
dependabot[bot]
4b0604a183 Bump path-parse from 1.0.6 to 1.0.7 (#2054)
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>
2021-08-11 08:50:18 +03:00
Yuri Kuznetsov
8d50ae1f46 fix orm 2021-08-10 16:45:59 +03:00
Yuri Kuznetsov
6ed4b60ebb ics create event 2021-08-10 14:08:44 +03:00
Yuri Kuznetsov
86e0c502ae email reply fix 2021-08-10 14:08:31 +03:00
Yuri Kuznetsov
c1936cf46b ics fixes 2021-08-10 12:52:42 +03:00
Yuri Kuznetsov
973910b837 fix pdf 2021-08-10 12:52:02 +03:00
Yuri Kuznetsov
590918ac6d fix upgrade 2021-08-10 11:54:02 +03:00
Yuri Kuznetsov
b9e1efbe00 email replied id in references 2021-08-09 16:38:52 +03:00
Yuri Kuznetsov
2ca6870c6a fix 2021-08-09 12:21:53 +03:00
Yuri Kuznetsov
ca3bedeeb4 fix xlsx 2021-08-09 11:34:19 +03:00
Yuri Kuznetsov
f85d56ac4d xlsx refactoring 2021-08-07 16:39:31 +03:00
Yuri Kuznetsov
9a522f7922 pdf contents stream 2021-08-07 14:57:05 +03:00
Yuri Kuznetsov
f453077796 refactoring 2021-08-07 14:39:47 +03:00
Yuri Kuznetsov
387029c5a6 pdf title name-placeholder 2021-08-07 09:39:57 +03:00
dependabot[bot]
f3b74696c0 Bump tar from 6.0.5 to 6.1.2 (#2049)
Bumps [tar](https://github.com/npm/node-tar) from 6.0.5 to 6.1.2.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v6.0.5...v6.1.2)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: direct:development
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-06 18:48:54 +03:00
Yuri Kuznetsov
f946adb6d1 fix metadata module list 2021-08-06 17:15:27 +03:00
Yuri Kuznetsov
dc3174747b lang 2021-08-06 14:38:34 +03:00
Yuri Kuznetsov
837ad89502 module clear cache 2021-08-06 13:36:38 +03:00
Yuri Kuznetsov
58ffd93961 fix webhooks 2021-08-06 11:17:46 +03:00
Yuri Kuznetsov
579c392a09 fix css 2021-08-05 16:36:44 +03:00
Yuri Kuznetsov
81fd1f522f upgrade script 2021-08-05 16:35:52 +03:00
Yuri Kuznetsov
e30dcac465 v 2021-08-05 16:14:51 +03:00
Yuri Kuznetsov
ee54cf2ebb collection maxMaxSize 2021-08-05 15:56:52 +03:00
Yuri Kuznetsov
f47ead51ca cs fix 2021-08-05 15:14:00 +03:00
Yuri Kuznetsov
ab425e0492 cs fix 2021-08-05 15:05:35 +03:00
Yuri Kuznetsov
95134b9ab8 cs fix 2021-08-05 14:15:08 +03:00
Yuri Kuznetsov
7ccac9aa79 fix ldap 2021-08-05 12:35:30 +03:00
Yuri Kuznetsov
69f221a424 config tests and refactoring 2021-08-05 11:01:31 +03:00
Yuri Kuznetsov
3c6eabaef8 install config fix 2021-08-04 20:57:11 +03:00
Yuri Kuznetsov
76361d1ca9 fix 2021-08-04 20:00:14 +03:00
Yuri Kuznetsov
de69cf7ceb installer fix 2021-08-04 19:37:13 +03:00
Yuri Kuznetsov
3fd894df50 refactoring config access 2021-08-04 17:35:20 +03:00
Yuri Kuznetsov
ddbed22a6f config internal 2021-08-04 16:41:18 +03:00
Yuri Kuznetsov
f51140f361 fix comment 2021-08-04 13:37:28 +03:00
Yuri Kuznetsov
1876667db1 config refactoring 2021-08-04 12:54:42 +03:00
Yuri Kuznetsov
2587c2e372 websocket binding factory usage 2021-08-03 12:03:10 +03:00
Yuri Kuznetsov
4f6dfe3132 binding factory 2021-08-03 12:02:56 +03:00
Yuri Kuznetsov
58dbd7868a websocket refactoring 2021-08-02 16:59:43 +03:00
Yuri Kuznetsov
3d1245bee6 cs fix 2021-08-02 16:31:23 +03:00
Yuri Kuznetsov
2df012fb97 fix cache api catch error 2021-08-02 16:06:17 +03:00
Yuri Kuznetsov
83d5f74e19 fix 2021-08-02 14:32:21 +03:00
Yuri Kuznetsov
4dfac05fcb cs fix 2021-08-02 12:36:29 +03:00
Yuri Kuznetsov
3548e3e8cd fix modal button click 2021-08-02 12:36:17 +03:00
Yuri Kuznetsov
862ebe7d48 cs fix 2021-07-31 14:47:54 +03:00
Yuri Kuznetsov
a56acf553c pdf title 2021-07-30 17:19:47 +03:00
Yuri Kuznetsov
0658f5b7fa ics fix 2021-07-30 16:59:39 +03:00
Yuri Kuznetsov
972e154a75 link manager quick search 2021-07-30 13:26:07 +03:00
Yuri Kuznetsov
70b0bedf9b link manager improvements 2021-07-30 13:11:07 +03:00
Yuri Kuznetsov
d843f719c8 field manager quick search 2021-07-30 12:49:52 +03:00
Yuri Kuznetsov
edf8d8a463 entity manager quick search 2021-07-29 18:10:51 +03:00
Yuri Kuznetsov
8c3e61c6a0 field manager ui improvements 2021-07-29 17:03:27 +03:00
Yuri Kuznetsov
6de1d45246 index.php change 2021-07-29 15:38:25 +03:00
Yuri Kuznetsov
5488870267 css fix 2021-07-29 13:49:00 +03:00
Yuri Kuznetsov
a3845187b3 index change 2021-07-29 13:47:21 +03:00
Yuri Kuznetsov
2955a61a5c fix 2021-07-29 13:44:44 +03:00
Yuri Kuznetsov
0f11730181 change index 2021-07-29 13:11:06 +03:00
Yuri Kuznetsov
75255d80cd cleanup 2021-07-28 16:32:40 +03:00
Yuri Kuznetsov
2d88f5966c inline edit & dynamlic logic interop 2021-07-28 16:18:13 +03:00
Yuri Kuznetsov
2984b755d5 increase max select attribute length 2021-07-28 13:41:48 +03:00
Yuri Kuznetsov
7362db833b query builders create method 2021-07-28 13:29:34 +03:00
Yuri Kuznetsov
7b9bbd5be4 refactoring 2021-07-28 13:25:42 +03:00
Yuri Kuznetsov
11d4687794 test fix 2021-07-28 13:14:36 +03:00
Yuri Kuznetsov
ef7c94f4e0 repository inteface 2021-07-28 13:04:14 +03:00
Yuri Kuznetsov
676e516f73 css prevent menu item drag 2021-07-27 17:07:06 +03:00
Yuri Kuznetsov
d83d3982cd refactoring 2021-07-27 17:01:48 +03:00
Yuri Kuznetsov
a24bf2d1d7 cleanup 2021-07-27 16:39:05 +03:00
Yuri Kuznetsov
db46faef29 orm gr protected 2021-07-27 16:36:48 +03:00
Yuri Kuznetsov
64e7c1081b select usage 2021-07-27 16:08:50 +03:00
Yuri Kuznetsov
56bfd6a069 select usage 2021-07-27 15:44:10 +03:00
Yuri Kuznetsov
18ac071c5d orm pdo provider 2021-07-27 12:41:12 +03:00
Yuri Kuznetsov
b44790c15f refactoring 2021-07-27 11:58:28 +03:00
Yuri Kuznetsov
e04f0eb98b sf 2021-07-27 11:33:14 +03:00
Yuri Kuznetsov
2278a1217b orm refactoring and comments 2021-07-27 11:26:18 +03:00
Yuri Kuznetsov
183205b8d4 rename 2021-07-27 11:07:31 +03:00
Yuri Kuznetsov
435bb7b65b rename 2021-07-27 11:06:04 +03:00
Yuri Kuznetsov
52159093dd applicationDescription param 2021-07-26 16:12:46 +03:00
Yuri Kuznetsov
c7056efe69 websocket DSN params 2021-07-26 15:37:36 +03:00
Yuri Kuznetsov
1b69ffe9e0 select where item builder 2021-07-26 14:15:18 +03:00
Yuri Kuznetsov
04203312bf orm groupBy => group 2021-07-26 13:40:17 +03:00
Yuri Kuznetsov
57bb2a3978 remove 2021-07-26 13:03:43 +03:00
Yuri Kuznetsov
c32cea8f8a orm fix 2021-07-26 13:03:35 +03:00
Yuri Kuznetsov
6ba62abd88 move tests 2021-07-26 12:42:33 +03:00
Yuri Kuznetsov
a31bf4e48e gr order by int usage 2021-07-26 12:12:53 +03:00
Yuri Kuznetsov
fab113db25 orm order refactoring 2021-07-25 18:30:50 +03:00
Yuri Kuznetsov
2858fd4fa8 orm refactoring join class 2021-07-25 12:37:23 +03:00
Yuri Kuznetsov
49f12ac82f orm refactoring 2021-07-25 10:15:00 +03:00
Yuri Kuznetsov
bf943cc706 orm order 2021-07-24 17:09:54 +03:00
Yuri Kuznetsov
09d8c550b5 orm order expression class 2021-07-24 15:39:28 +03:00
Yuri Kuznetsov
dadcee8fe2 orm refactoring 2021-07-24 15:16:57 +03:00
Yuri Kuznetsov
9dacaf7ddf test fix 2021-07-24 11:08:12 +03:00
Yuri Kuznetsov
622cf46858 orm order expression fix 2021-07-24 11:01:55 +03:00
Yuri Kuznetsov
0c6f8bb52d orm: select item 2021-07-23 16:37:32 +03:00
Yuri Kuznetsov
cccf05db39 rename boolean => bool 2021-07-23 15:17:24 +03:00
Yuri Kuznetsov
f4ca5290ce orm test 2021-07-23 15:04:34 +03:00
Yuri Kuznetsov
2380b6aa76 test rename 2021-07-23 15:02:04 +03:00
Yuri Kuznetsov
215ccb70bc fix categories 2021-07-23 14:53:36 +03:00
Yuri Kuznetsov
3d5376889f fix categories 2021-07-23 14:14:55 +03:00
Yuri Kuznetsov
6053e3be64 select usage 2021-07-23 14:05:10 +03:00
Yuri Kuznetsov
51f6d27edf orm relation filter in clone 2021-07-23 14:04:53 +03:00
Yuri Kuznetsov
e46a2089dd select usage 2021-07-23 12:13:33 +03:00
Yuri Kuznetsov
d5dd918fde select usage and refactoring 2021-07-22 16:10:25 +03:00
Yuri Kuznetsov
bf855c8b4c select usage and refactoring 2021-07-22 14:07:38 +03:00
Yuri Kuznetsov
4d273b34f7 avatar save refresh fix 2021-07-21 16:04:31 +03:00
Yuri Kuznetsov
eb82a8afda refactoring 2021-07-21 15:59:08 +03:00
Yuri Kuznetsov
73c4204ee9 cs fixes 2021-07-21 15:51:59 +03:00
Yuri Kuznetsov
8fbbd0e714 stream attachment type storing 2021-07-21 13:59:48 +03:00
Yuri Kuznetsov
438daf82b4 image refactoring and svg support 2021-07-21 13:50:19 +03:00
Yuri Kuznetsov
7066098957 email folder field entity 2021-07-21 12:40:17 +03:00
Yuri Kuznetsov
4e2b1cf4ce upgrade script 2021-07-21 12:36:47 +03:00
Yuri Kuznetsov
8e36b55e40 upgrade version change 2021-07-21 12:24:37 +03:00
Yuri Kuznetsov
e8df572503 cron info style fix 2021-07-21 12:18:54 +03:00
Yuri Kuznetsov
3e9556e1ef ics event changes 2021-07-21 12:11:15 +03:00
Yuri Kuznetsov
ceef3e690d merge 2021-07-21 11:13:37 +03:00
Yuri Kuznetsov
3e6bc02256 v 2021-07-20 15:17:28 +03:00
Yuri Kuznetsov
6cc1d7f721 fix test 2021-07-19 15:27:21 +03:00
Yuri Kuznetsov
53dba06764 typo fix 2021-07-19 15:26:04 +03:00
Yuri Kuznetsov
e514a34e60 email to meeting 2021-07-19 15:14:22 +03:00
Yuri Kuznetsov
3efe76dc71 fix doc 2021-07-16 11:13:31 +03:00
Yuri Kuznetsov
571e7e3333 doc 2021-07-16 11:06:12 +03:00
Yuri Kuznetsov
6b4d955d7c orm: ssl verify disabled param 2021-07-15 17:05:06 +03:00
Yuri Kuznetsov
da0b4ca25d css fix 2021-07-15 15:48:32 +03:00
Yuri Kuznetsov
3b093f5da3 task service 2021-07-15 12:14:41 +03:00
Yuri Kuznetsov
570c02ae55 fix mass action 2021-07-14 12:07:57 +03:00
Yuri Kuznetsov
81ff4f2c8a fix module 2021-07-13 15:16:21 +03:00
Yuri Kuznetsov
34b0402bc1 bc fixes 2021-07-13 12:54:38 +03:00
Yuri Kuznetsov
469b75624d fix 2021-07-13 12:02:10 +03:00
Yuri Kuznetsov
59e239118c fix 2021-07-13 12:02:04 +03:00
Yuri Kuznetsov
10957b5fdf fix tree 2021-07-12 16:29:55 +03:00
Yuri Kuznetsov
bc9f66008d bc fix 2021-07-12 15:59:51 +03:00
Yuri Kuznetsov
76b798d6e2 install fix 2021-07-12 15:52:02 +03:00
Yuri Kuznetsov
7717a15fc2 trailing nl 2021-07-12 13:54:37 +03:00
Yuri Kuznetsov
e0ef0a38a5 fix 2021-07-12 12:11:13 +03:00
Yuri Kuznetsov
b21eea1568 fix installer 2021-07-12 12:06:43 +03:00
Yuri Kuznetsov
ac73f8d6b6 htaccess dev replace 2021-07-12 11:59:30 +03:00
Yuri Kuznetsov
7d95969f03 searchParams in json 2021-07-10 13:17:41 +03:00
Yuri Kuznetsov
f67b06be88 cleanup 2021-07-10 13:00:55 +03:00
Yuri Kuznetsov
fa5effe1a9 refactoring 2021-07-10 12:55:37 +03:00
Yuri Kuznetsov
1f4dcb5a38 cs fix 2021-07-09 10:59:18 +03:00
Yuri Kuznetsov
949149ea4d cleanup and cs fixes 2021-07-09 10:57:16 +03:00
Yuri Kuznetsov
8ff262456b record id generator 2021-07-09 10:48:05 +03:00
HungNguyenPTN
03cf443b14 Fix issue #2009 (#2035)
* ISSUE #2009:
-Fix loadAdditionalFields does not work for email templates
-Similar to PDF template

* Update EmailTemplate.php
2021-07-09 09:08:04 +03:00
Yuri Kuznetsov
2681fdabec binding container builder 2021-07-08 17:34:24 +03:00
Yuri Kuznetsov
678c9779ce cs fix 2021-07-08 17:09:06 +03:00
Yuri Kuznetsov
1728f5d9f0 cs fix 2021-07-08 16:00:00 +03:00
Yuri Kuznetsov
b71312b8eb url allow any protocol 2021-07-06 17:01:25 +03:00
Yuri Kuznetsov
ebe27c499e cs fix 2021-07-06 16:44:40 +03:00
Yuri Kuznetsov
fbc164df8c entity inteface getValueMap 2021-07-06 16:42:06 +03:00
Yuri Kuznetsov
d419da1cac calendar sharedViewModeList 2021-07-06 16:35:38 +03:00
Yuri Kuznetsov
67e6e29994 cs fix 2021-07-06 16:31:10 +03:00
Yuri Kuznetsov
3059e60096 cs fix 2021-07-06 16:30:01 +03:00
Yuri Kuznetsov
8a4a0f6bdc fix 2021-07-06 16:14:19 +03:00
Yuri Kuznetsov
a1ea97950e cleanup 2021-07-06 15:14:07 +03:00
Yuri Kuznetsov
2d58361620 cs fix 2021-07-06 15:12:00 +03:00
Yuri Kuznetsov
a98262338a fix 2021-07-06 15:07:16 +03:00
Yuri Kuznetsov
47cd8b71f7 bundle fix 2021-07-06 15:06:25 +03:00
Yuri Kuznetsov
36d6a72317 public folder 2021-07-06 13:46:49 +03:00
Yuri Kuznetsov
1da5f7e223 fix portal attachment acl 2021-07-06 09:47:49 +03:00
Yuri Kuznetsov
29398de678 custom modules support 2021-07-02 12:11:33 +03:00
Yuri Kuznetsov
d95d562843 cs fix 2021-07-02 11:55:07 +03:00
Yuri Kuznetsov
cb51839eb9 module path refactoring 2021-07-01 17:16:57 +03:00
Yuri Kuznetsov
ec31075fae bypass filter resolver 2021-07-01 15:37:49 +03:00
Yuri Kuznetsov
b30a845a65 update summernote 2021-07-01 13:45:13 +03:00
Yuri Kuznetsov
9667c2fc5a fix category tree 2021-07-01 13:11:17 +03:00
Yuri Kuznetsov
7df4084d45 category tree show panel 2021-07-01 12:59:13 +03:00
Yuri Kuznetsov
d91c9f45c3 fix 2021-07-01 11:43:29 +03:00
Yuri Kuznetsov
840b3940cd fix categore tree 2021-07-01 10:56:51 +03:00
Yuri Kuznetsov
8a1e875020 add broadcast-channel to bundle 2021-06-30 14:02:16 +03:00
Yuri Kuznetsov
8c43d3f378 admin changes update current and other tabs 2021-06-30 12:55:07 +03:00
Yuri Kuznetsov
d67ebbe683 fix 2021-06-30 12:53:31 +03:00
Yuri Kuznetsov
16d9845027 cs fix 2021-06-30 12:36:43 +03:00
Yuri Kuznetsov
5591b49c8d cs fix 2021-06-30 12:17:48 +03:00
Yuri Kuznetsov
e67d140af0 cs fix 2021-06-30 11:53:22 +03:00
Yuri Kuznetsov
d8252fc769 cs fix 2021-06-30 10:22:28 +03:00
Yuri Kuznetsov
dfb50ab7ee remove loadLib 2021-06-30 10:04:19 +03:00
Yuri Kuznetsov
fcc2271e83 move 2021-06-29 18:12:06 +03:00
Yuri Kuznetsov
ae25a48d4e move 2021-06-29 18:11:07 +03:00
Yuri Kuznetsov
b703c6a0ae Update config.yml 2021-06-29 17:54:08 +03:00
Yuri Kuznetsov
c8ae67aba8 Update bug_report.md 2021-06-29 17:53:53 +03:00
Yuri Kuznetsov
9e68c32f96 Update bug_report.md 2021-06-29 17:52:50 +03:00
Yuri Kuznetsov
5887480b29 Update config.yml 2021-06-29 17:52:11 +03:00
Yuri Kuznetsov
edabd603b3 Update config.yml 2021-06-29 17:48:29 +03:00
Yuri Kuznetsov
1131af8283 Create config.yml 2021-06-29 17:46:18 +03:00
Yuri Kuznetsov
59e69ac1cc cs fix 2021-06-29 17:38:00 +03:00
Yuri Kuznetsov
25281d0c6f stream update note access control 2021-06-29 17:27:12 +03:00
Yuri Kuznetsov
0ab3da1512 comment 2021-06-29 16:12:33 +03:00
Yuri Kuznetsov
80d4799073 cs fix 2021-06-29 13:50:26 +03:00
Yuri Kuznetsov
71353042c3 cs fix 2021-06-29 13:13:45 +03:00
Yuri Kuznetsov
b5c3fb16cb wider buttons 2021-06-29 12:55:39 +03:00
Yuri Kuznetsov
3e3159f03b fix 2021-06-29 12:25:26 +03:00
Yuri Kuznetsov
97a2044f5e cs fix 2021-06-29 11:56:11 +03:00
Yuri Kuznetsov
fd1093180f cs fix 2021-06-29 11:48:06 +03:00
dependabot[bot]
68f3d6c056 Bump league/flysystem from 2.0.4 to 2.1.1 (#2029)
Bumps [league/flysystem](https://github.com/thephpleague/flysystem) from 2.0.4 to 2.1.1.
- [Release notes](https://github.com/thephpleague/flysystem/releases)
- [Changelog](https://github.com/thephpleague/flysystem/blob/2.x/CHANGELOG.md)
- [Commits](https://github.com/thephpleague/flysystem/compare/2.0.4...2.1.1)

---
updated-dependencies:
- dependency-name: league/flysystem
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-06-29 11:46:49 +03:00
Yuri Kuznetsov
6002e73a59 Update issue templates 2021-06-29 11:45:13 +03:00
Yuri Kuznetsov
1e0fd60d4e Update issue templates 2021-06-29 11:41:32 +03:00
Yuri Kuznetsov
f0d5cda1c5 fix 2021-06-28 16:12:00 +03:00
Yuri Kuznetsov
04f8630d96 tpl fixes 2021-06-28 16:01:25 +03:00
Yuri Kuznetsov
440db9ba7e composer changes 2021-06-27 12:07:23 +03:00
Yuri Kuznetsov
44fca49e3f fix 2021-06-26 19:21:08 +03:00
Yuri Kuznetsov
061220263c namespace loader log 2021-06-26 19:20:45 +03:00
Yuri Kuznetsov
428f8a68bf diff: indlude composer changes 2021-06-26 19:13:54 +03:00
Yuri Kuznetsov
03f3e4595e psr4 usage 2021-06-26 18:58:32 +03:00
Yuri Kuznetsov
21fe26d042 npm-install ignore output 2021-06-26 18:51:35 +03:00
Yuri Kuznetsov
38f79e9244 refactoring 2021-06-26 18:40:30 +03:00
Yuri Kuznetsov
2ff4ec81ac module service 2021-06-26 15:09:20 +03:00
Yuri Kuznetsov
3d24f63fd7 refactoring 2021-06-26 11:26:18 +03:00
Yuri Kuznetsov
e8c66db876 refactoring 2021-06-26 11:07:04 +03:00
Yuri Kuznetsov
f38811ae9d fix 2021-06-26 10:51:02 +03:00
Yuri Kuznetsov
74693c5f6e hooks refactoring 2021-06-26 10:48:19 +03:00
Yuri Kuznetsov
3f2560655e cleanup 2021-06-25 16:20:48 +03:00
Yuri Kuznetsov
bac596ff5b module refactoring 2021-06-25 16:11:28 +03:00
Yuri Kuznetsov
b7561b6cfc fix 2021-06-25 16:03:41 +03:00
Yuri Kuznetsov
afb41ebc05 fix 2021-06-25 15:56:07 +03:00
Yuri Kuznetsov
4961f4859e cleanup 2021-06-25 14:21:26 +03:00
Yuri Kuznetsov
0b18e1ae88 route refactoring 2021-06-25 14:18:47 +03:00
Yuri Kuznetsov
217fcaaddc refactoring 2021-06-25 13:01:22 +03:00
Yuri Kuznetsov
f77c23f781 fix naming 2021-06-25 11:45:43 +03:00
Yuri Kuznetsov
639c7bb876 fix comment 2021-06-25 11:43:28 +03:00
Yuri Kuznetsov
b9a5498279 refactoring 2021-06-25 11:43:28 +03:00
Taras Machyshyn
3a8e98bb82 Merge branch 'hotfix/6.1.8' 2021-06-24 18:28:40 +03:00
Yuri Kuznetsov
f2e5e66383 template file manager use file reader 2021-06-24 17:55:54 +03:00
Taras Machyshyn
2a52d3c52e NamespaceLoader bug fixes 2021-06-24 17:47:57 +03:00
Yuri Kuznetsov
7332d0aa37 layout use file reader 2021-06-24 16:06:19 +03:00
Yuri Kuznetsov
1e7f248d28 rename QueryParams => Query 2021-06-24 12:30:24 +03:00
Yuri Kuznetsov
a381eb3d5a orm parts => part 2021-06-24 11:50:29 +03:00
Yuri Kuznetsov
70f2d82963 fix grunt 2021-06-24 11:49:48 +03:00
Yuri Kuznetsov
2dc0a6bc95 installer libs 2021-06-24 11:34:13 +03:00
Yuri Kuznetsov
b37a458a1d cleanup 2021-06-24 11:22:40 +03:00
Yuri Kuznetsov
e2257c5046 cs fix 2021-06-24 10:57:26 +03:00
Yuri Kuznetsov
e3ee433b49 change html 2021-06-24 10:50:55 +03:00
Yuri Kuznetsov
16e4b2ae40 fixes 2021-06-24 10:37:21 +03:00
Yuri Kuznetsov
0a513fe088 change 2021-06-23 16:24:21 +03:00
Yuri Kuznetsov
f0cd18e711 fix 2021-06-23 16:02:51 +03:00
Yuri Kuznetsov
9559e9fff3 libs config 2021-06-23 15:45:51 +03:00
Yuri Kuznetsov
e6c869a438 fix 2021-06-23 13:57:37 +03:00
Yuri Kuznetsov
f701a142c8 grunt changes 2021-06-23 13:06:26 +03:00
Yuri Kuznetsov
f02cfc5a1a lib minify 2021-06-23 12:58:25 +03:00
Yuri Kuznetsov
14e5446696 dif fix 2021-06-23 11:03:52 +03:00
Yuri Kuznetsov
61dc029867 diff changes 2021-06-23 10:43:06 +03:00
Yuri Kuznetsov
9f00055454 refactoring 2021-06-23 10:27:04 +03:00
Yuri Kuznetsov
bf4a01971d refactoring 2021-06-22 22:24:23 +03:00
Yuri Kuznetsov
5b1d060e5a deprecated comments 2021-06-22 20:35:13 +03:00
Yuri Kuznetsov
8582f74e3e diff dev 2021-06-22 17:31:31 +03:00
Yuri Kuznetsov
fcfeacdd82 fix 2021-06-22 16:17:02 +03:00
Yuri Kuznetsov
78902caf30 refactoring 2021-06-22 16:15:52 +03:00
Yuri Kuznetsov
03d5a8357a fix install lib 2021-06-22 15:46:07 +03:00
Yuri Kuznetsov
c8f6f1b4f2 fix 2021-06-22 15:26:53 +03:00
Yuri Kuznetsov
519df8c33b cs fix 2021-06-22 13:58:00 +03:00
Yuri Kuznetsov
14205b4145 fix modal 2021-06-22 13:34:11 +03:00
Yuri Kuznetsov
cf6eadcc8c selectize in bundle 2021-06-22 13:14:20 +03:00
Yuri Kuznetsov
ab5e9c8344 libs dev 2021-06-22 12:51:38 +03:00
Yuri Kuznetsov
c1f9a86dd3 libs 2021-06-22 12:34:29 +03:00
Yuri Kuznetsov
5204a34031 libs 2021-06-22 12:25:54 +03:00
Yuri Kuznetsov
4c980e64ac libs 2021-06-22 11:48:25 +03:00
Yuri Kuznetsov
ad772b7706 cleanup 2021-06-22 08:46:35 +03:00
Yuri Kuznetsov
471299bd21 fix installer 2021-06-22 08:46:29 +03:00
Yuri Kuznetsov
fc945fbab9 libs 2021-06-21 21:00:06 +03:00
Yuri Kuznetsov
defc97dc35 cleanup 2021-06-21 18:52:17 +03:00
Yuri Kuznetsov
e239cb551d flotr lib 2021-06-21 18:40:22 +03:00
Yuri Kuznetsov
bceecbf377 lib 2021-06-21 17:23:22 +03:00
Yuri Kuznetsov
6bdbfe4aa0 lib 2021-06-21 17:09:53 +03:00
Yuri Kuznetsov
243fab3a05 libs 2021-06-21 16:46:38 +03:00
Yuri Kuznetsov
24470ffe11 cleanup 2021-06-21 14:29:53 +03:00
Yuri Kuznetsov
cb04731319 libs 2021-06-21 14:22:31 +03:00
Yuri Kuznetsov
16db12231a lib usage 2021-06-21 14:14:06 +03:00
Yuri Kuznetsov
9e6385c00a tpl fix 2021-06-21 13:18:57 +03:00
Yuri Kuznetsov
5d79dfa6be tpl fixes 2021-06-21 13:13:10 +03:00
Yuri Kuznetsov
6ccc65a85a libs 2021-06-21 11:48:53 +03:00
Yuri Kuznetsov
58d2a2460b lib building 2021-06-21 11:08:05 +03:00
Yuri Kuznetsov
df887cba61 lib devPath 2021-06-19 19:35:22 +03:00
Yuri Kuznetsov
e68ad67070 fix 2021-06-19 18:54:21 +03:00
Yuri Kuznetsov
8c9a4f9d3b grunt run npm install 2021-06-19 18:48:42 +03:00
Yuri Kuznetsov
d853f0e7f9 lib updates 2021-06-19 18:29:27 +03:00
Yuri Kuznetsov
5e60f65711 fix 2021-06-19 17:41:46 +03:00
Yuri Kuznetsov
ad72465a04 lib upgrades 2021-06-19 17:27:23 +03:00
Yuri Kuznetsov
df75bc04f8 libs 2021-06-19 15:04:47 +03:00
Yuri Kuznetsov
442c5870c4 lib updates 2021-06-19 14:34:55 +03:00
Yuri Kuznetsov
08495a3cb2 fix 2021-06-19 14:34:14 +03:00
Yuri Kuznetsov
06de76ed58 fix datetime 2021-06-19 14:02:52 +03:00
Yuri Kuznetsov
23f3ca2c5c cs fix 2021-06-19 13:55:23 +03:00
Yuri Kuznetsov
4939c281aa cs fix 2021-06-19 13:43:14 +03:00
Yuri Kuznetsov
02d15211fa npm usage for client libs 2021-06-19 13:39:08 +03:00
Yuri Kuznetsov
be6f7671c8 footer link changes 2021-06-18 20:57:37 +03:00
Yuri Kuznetsov
76cd1b9cad fix 2021-06-18 15:37:58 +03:00
Yuri Kuznetsov
57cfa6f5a0 refactoring 2021-06-18 15:33:28 +03:00
Yuri Kuznetsov
aa5bcf97d2 resource finder 2021-06-18 15:17:21 +03:00
Yuri Kuznetsov
fbf05d5263 refactoring 2021-06-18 13:03:08 +03:00
Yuri Kuznetsov
f54a8002a7 naming fix 2021-06-18 12:03:51 +03:00
Yuri Kuznetsov
c25b10bb78 refactoring 2021-06-18 12:01:38 +03:00
Yuri Kuznetsov
703279a2f8 refactoring 2021-06-18 11:44:33 +03:00
Yuri Kuznetsov
beae99c71b cs fix 2021-06-17 23:33:37 +03:00
Yuri Kuznetsov
7478a323ab rename 2021-06-17 18:40:18 +03:00
Yuri Kuznetsov
31a273446b fix 2021-06-17 18:07:38 +03:00
Yuri Kuznetsov
e1e51eb124 deprecate getPDO 2021-06-17 18:05:03 +03:00
Yuri Kuznetsov
95327fd3a3 gr getPDO usage 2021-06-17 18:02:03 +03:00
Yuri Kuznetsov
533eed11f0 button larger 2021-06-17 14:17:31 +03:00
Yuri Kuznetsov
eb68a43544 config not extending model offline 2021-06-17 14:13:38 +03:00
Yuri Kuznetsov
7bd1156cda requirements page fixes 2021-06-17 13:50:37 +03:00
Yuri Kuznetsov
0c7e33b2f1 Merge branch 'hotfix/6.1.8' 2021-06-17 13:28:45 +03:00
Yuri Kuznetsov
a9623ff698 hotfix cache clear on login 2021-06-17 13:19:59 +03:00
Yuri Kuznetsov
44d97b64b9 cache issue fix 2021-06-17 13:10:07 +03:00
Yuri Kuznetsov
e4778dea36 fix 2021-06-17 12:56:53 +03:00
Yuri Kuznetsov
c3421b42c7 refactoring 2021-06-17 11:55:42 +03:00
Yuri Kuznetsov
10bbe516d7 cleanup 2021-06-17 10:54:36 +03:00
Yuri Kuznetsov
771e33109d fix 2021-06-16 13:35:05 +03:00
Yuri Kuznetsov
ec81d5a964 fix 2021-06-16 13:30:38 +03:00
Yuri Kuznetsov
ee1628dbdf scheduled job populating change 2021-06-16 13:13:59 +03:00
Yuri Kuznetsov
a1c2c9efbd job group length 2021-06-16 12:54:13 +03:00
Yuri Kuznetsov
f2070332e9 test job scheduler 2021-06-16 12:50:59 +03:00
Yuri Kuznetsov
5079ece2dc job scheduler change 2021-06-16 12:46:04 +03:00
Yuri Kuznetsov
6a791713ea job group processing 2021-06-16 12:43:26 +03:00
Yuri Kuznetsov
41c9568d80 job target group running check 2021-06-16 11:40:43 +03:00
Yuri Kuznetsov
698f3d2821 update laminas service manager 2021-06-16 11:13:29 +03:00
Yuri Kuznetsov
a86ea5d12f fix filters enum 2021-06-16 10:15:22 +03:00
Yuri Kuznetsov
fea9837f30 select item converter any, none filters 2021-06-16 10:15:05 +03:00
Yuri Kuznetsov
72a11e51a2 layout change 2021-06-16 09:42:01 +03:00
Yuri Kuznetsov
b9e1406f5b fix 2021-06-16 09:41:00 +03:00
Yuri Kuznetsov
564b425b8f job changes 2021-06-15 22:55:27 +03:00
Yuri Kuznetsov
532dd78aa8 fix naming 2021-06-15 21:04:46 +03:00
Yuri Kuznetsov
5f969c703f fix 2021-06-15 20:01:49 +03:00
Yuri Kuznetsov
675b0a39fc fix 2021-06-15 18:51:41 +03:00
Yuri Kuznetsov
0a62472840 fix comment 2021-06-15 18:51:00 +03:00
Yuri Kuznetsov
faa8545fcf fixes and tests 2021-06-15 18:48:42 +03:00
Yuri Kuznetsov
7d98a01e9a comment fix 2021-06-15 18:07:01 +03:00
Yuri Kuznetsov
d74d3b282d job scheduler 2021-06-15 18:06:02 +03:00
Yuri Kuznetsov
747e9438c9 renaming 2021-06-15 16:27:09 +03:00
Yuri Kuznetsov
b6ae809b56 job ui fix 2021-06-15 16:06:16 +03:00
Yuri Kuznetsov
c999ae9da4 job groups 2021-06-15 16:01:10 +03:00
Yuri Kuznetsov
61eff01008 refactoring 2021-06-15 12:34:33 +03:00
Yuri Kuznetsov
f2ee9afa88 refactoring 2021-06-15 11:59:47 +03:00
Yuri Kuznetsov
dc5ac7b3a3 refactoring 2021-06-15 11:51:34 +03:00
Yuri Kuznetsov
612fbf8f38 refactoring 2021-06-15 11:37:10 +03:00
Yuri Kuznetsov
f97a8728fd fix comment 2021-06-14 15:52:29 +03:00
Yuri Kuznetsov
1c1ddaf3d0 refactoring 2021-06-14 15:40:32 +03:00
Yuri Kuznetsov
30316222f3 job with class name 2021-06-14 15:36:07 +03:00
Yuri Kuznetsov
d53e6b767c test 2021-06-14 15:11:21 +03:00
Yuri Kuznetsov
661a1b5839 fix 2021-06-14 15:07:47 +03:00
Yuri Kuznetsov
cb2485ae3d job refactoring 2021-06-14 14:25:07 +03:00
Yuri Kuznetsov
fa70bf3ff8 refactoring 2021-06-14 12:05:14 +03:00
Yuri Kuznetsov
a32419d07d refactoring 2021-06-14 11:21:26 +03:00
Yuri Kuznetsov
c2e806e318 cleanup 2021-06-13 16:41:17 +03:00
Yuri Kuznetsov
ba8bbc462d refactoring 2021-06-13 16:40:46 +03:00
Yuri Kuznetsov
c4a04d3dca cs fix 2021-06-13 11:48:40 +03:00
Yuri Kuznetsov
1135458d60 cs fix 2021-06-13 10:51:25 +03:00
Yuri Kuznetsov
3d2aa17cf2 cs fix 2021-06-12 21:20:10 +03:00
Yuri Kuznetsov
3baf1f17bf orm refactoring 2021-06-12 14:50:13 +03:00
Yuri Kuznetsov
f8ecbb7806 refactor loader 2021-06-12 12:13:19 +03:00
Yuri Kuznetsov
8f3f2a20c1 cs fix 2021-06-12 11:37:09 +03:00
Yuri Kuznetsov
7935644115 cs fix 2021-06-12 11:13:21 +03:00
Yuri Kuznetsov
dde3eca10e cs fix 2021-06-12 10:28:49 +03:00
Yuri Kuznetsov
ae60a08baa cs fix 2021-06-11 21:29:27 +03:00
Yuri Kuznetsov
676e4a2cd4 webhook test 2021-06-11 16:12:30 +03:00
Yuri Kuznetsov
7f66d4690e webhook test 2021-06-11 16:01:55 +03:00
Yuri Kuznetsov
40fccc57ed webhook refactoring and test 2021-06-11 15:44:21 +03:00
Yuri Kuznetsov
df44cc0779 webhook test 2021-06-11 13:20:02 +03:00
Yuri Kuznetsov
d29e2f3994 cs fix 2021-06-11 13:04:08 +03:00
Yuri Kuznetsov
3c6b485321 renaming 2021-06-11 11:00:57 +03:00
Yuri Kuznetsov
4e08c0f3cf cs fix 2021-06-11 10:55:49 +03:00
Yuri Kuznetsov
c9c45ec8d1 cs fix 2021-06-11 10:48:42 +03:00
Yuri Kuznetsov
af4d1e650c cs fix 2021-06-10 17:01:54 +03:00
Yuri Kuznetsov
3412cb6e45 grid usage 2021-06-10 16:19:00 +03:00
Yuri Kuznetsov
9cbf9f3942 email image detecting 2021-06-10 15:53:24 +03:00
Yuri Kuznetsov
837e5764b8 cs fix 2021-06-10 15:22:36 +03:00
Yuri Kuznetsov
491c27cd74 disable kanban order in portal 2021-06-10 15:15:43 +03:00
Yuri Kuznetsov
bddb517583 fix assignment checker 2021-06-10 15:12:56 +03:00
Yuri Kuznetsov
843cc89547 fix 2021-06-10 15:02:33 +03:00
Yuri Kuznetsov
4324b8dfc5 pdf apply default order for relations 2021-06-10 12:23:40 +03:00
Yuri Kuznetsov
078a65a8bf cleanup 2021-06-10 11:19:41 +03:00
Yuri Kuznetsov
17aa37f17b hook tests 2021-06-10 11:18:25 +03:00
Yuri Kuznetsov
d30d951494 update npm dep 2021-06-10 09:30:50 +03:00
Yuri Kuznetsov
7bc76bdee4 uglify harmony usage 2021-06-10 09:22:50 +03:00
Yuri Kuznetsov
4fc1a87ead fix 2021-06-10 09:20:53 +03:00
Yuri Kuznetsov
4b8e157098 fix grunt 2021-06-10 09:20:22 +03:00
Yuri Kuznetsov
8fef756172 fix 2fa password 2021-06-09 21:52:33 +03:00
Yuri Kuznetsov
7aab27a60f fix tests 2021-06-09 16:13:21 +03:00
Yuri Kuznetsov
2ebcc52358 fix 2021-06-09 16:13:17 +03:00
Yuri Kuznetsov
7e83bad920 fix link multiple factory 2021-06-09 16:07:46 +03:00
Yuri Kuznetsov
052ea72e87 fix comment 2021-06-09 16:07:26 +03:00
Yuri Kuznetsov
37dd04746b uglify es 2021-06-09 15:37:26 +03:00
Yuri Kuznetsov
c0a815f36e record hook 2021-06-09 15:34:36 +03:00
Yuri Kuznetsov
8fa1e3dd79 cs fix 2021-06-09 15:26:42 +03:00
Yuri Kuznetsov
61c9bdea92 fix composer 2021-06-09 15:23:26 +03:00
Yuri Kuznetsov
d804ca40f4 fix composer temp 2021-06-09 14:21:15 +03:00
Yuri Kuznetsov
aa3d09a55c deprecate createCollection 2021-06-08 17:20:09 +03:00
Yuri Kuznetsov
5a65ee5254 field invalid dynamic logic 2021-06-06 19:14:16 +03:00
Yuri Kuznetsov
a50c7d34ff cs fix 2021-06-06 18:03:14 +03:00
Yuri Kuznetsov
b98ab87ae7 nl lang 2021-06-05 15:40:18 +03:00
Yuri Kuznetsov
f90f1ec7c0 update lock 2021-06-05 14:41:25 +03:00
Yuri Kuznetsov
b8edecc092 ignore ext-ldap, ext-zmq deps 2021-06-05 14:33:41 +03:00
Yuri Kuznetsov
3b73e3d49d update laminas libs 2021-06-05 14:32:23 +03:00
Yuri Kuznetsov
580afb5a21 update symfony deps 2021-06-05 14:19:20 +03:00
Yuri Kuznetsov
a673756664 update slim/psr7 2021-06-05 14:07:04 +03:00
Yuri Kuznetsov
0499639473 update fig/http-message-util 2021-06-05 14:03:58 +03:00
Yuri Kuznetsov
69dd14682c update cron expression lib 2021-06-05 14:02:22 +03:00
Yuri Kuznetsov
d9fa110156 dynamic logic improvements 2021-06-05 12:15:24 +03:00
Yuri Kuznetsov
3f9fc67ab4 entity manager check link name matches entity type 2021-06-04 16:01:38 +03:00
Yuri Kuznetsov
43c82fb028 fix 2021-06-03 19:50:07 +03:00
Yuri Kuznetsov
01c0fa9563 fix css 2021-06-03 19:45:00 +03:00
Yuri Kuznetsov
ffce78808e bind client manager 2021-06-02 16:14:59 +03:00
Yuri Kuznetsov
e4d5ffb281 fix 2021-06-01 15:59:14 +03:00
Yuri Kuznetsov
b8422e7299 dev 2021-06-01 15:56:12 +03:00
Yuri Kuznetsov
d7641455d4 view setup handlers and document drop 2021-06-01 14:49:21 +03:00
Yuri Kuznetsov
b6e56ae42c cs fix 2021-06-01 10:28:38 +03:00
Yuri Kuznetsov
52cfa061c4 entity type const usage 2021-05-31 14:08:00 +03:00
Yuri Kuznetsov
9208debb1a entity type const 2021-05-31 14:03:21 +03:00
Yuri Kuznetsov
5da4e9f4a8 attachment edit view download 2021-05-31 13:31:32 +03:00
Yuri Kuznetsov
f30bfb20ef fix 2021-05-31 12:57:51 +03:00
Yuri Kuznetsov
798eee940c import ui fix 2021-05-31 12:41:56 +03:00
Yuri Kuznetsov
9c44356d5a email account monitored folders as array 2021-05-31 12:25:51 +03:00
Yuri Kuznetsov
e241ad349a cs fix 2021-05-31 11:18:14 +03:00
Yuri Kuznetsov
25f5b82cff move 2021-05-29 15:07:49 +03:00
Yuri Kuznetsov
5776f56f7b monitoref fodler max length 2021-05-29 12:06:56 +03:00
Yuri Kuznetsov
20da15c931 refactoring 2021-05-29 12:06:47 +03:00
Yuri Kuznetsov
0b68dd0e85 refactoring 2021-05-29 11:49:12 +03:00
Yuri Kuznetsov
4e49e69c16 fix 2021-05-28 22:39:35 +03:00
Yuri Kuznetsov
8c775896b2 refactoring 2021-05-28 16:15:32 +03:00
Yuri Kuznetsov
9af1168004 refactoring 2021-05-28 16:12:39 +03:00
Yuri Kuznetsov
c1986623ed fix attachment mail import 2021-05-28 15:38:44 +03:00
Yuri Kuznetsov
700a39f4c5 formula test 2021-05-28 15:15:26 +03:00
Yuri Kuznetsov
738cae727e cleanup 2021-05-28 15:14:08 +03:00
Yuri Kuznetsov
08536f0850 cleanup 2021-05-28 15:08:18 +03:00
Yuri Kuznetsov
ddca72e8bd tests 2021-05-28 15:07:20 +03:00
Yuri Kuznetsov
3ddbf3aca7 fix entity manager 2021-05-28 13:47:05 +03:00
Yuri Kuznetsov
52ed21cae5 duplicate finder refactoring 2021-05-28 13:41:57 +03:00
Yuri Kuznetsov
f7dd5d92ac fix 2021-05-27 23:00:20 +03:00
Yuri Kuznetsov
4d3e1c713a fix 2021-05-27 13:45:18 +03:00
Yuri Kuznetsov
b54f6310f3 fromula autocomplete impr 2021-05-27 13:42:43 +03:00
Yuri Kuznetsov
008bdfdad5 more formula insert items 2021-05-27 13:12:30 +03:00
Yuri Kuznetsov
ffa6c115e1 fix css wysiwyg 2021-05-27 12:39:29 +03:00
Yuri Kuznetsov
ae3d59fc47 cleanup 2021-05-27 12:09:12 +03:00
Yuri Kuznetsov
3207aeb741 entity manager tool refactoring and fixes 2021-05-27 12:03:32 +03:00
Yuri Kuznetsov
b3949aa3cc fix 2021-05-27 11:22:58 +03:00
Yuri Kuznetsov
6e9d29937d Optimistic concurrency control 2021-05-26 14:09:45 +03:00
Yuri Kuznetsov
96dca60a2b cs fix 2021-05-26 13:39:10 +03:00
Yuri Kuznetsov
8d3a7f2526 save error handlers 2021-05-25 13:55:02 +03:00
Yuri Kuznetsov
ac9f51a0f3 fix person name select 2021-05-25 13:23:32 +03:00
Yuri Kuznetsov
8ffd06025e cleanup 2021-05-25 13:18:58 +03:00
Yuri Kuznetsov
576f424bc0 client save refactoring 2021-05-25 13:02:50 +03:00
Yuri Kuznetsov
ec5c92e369 create update params 2021-05-25 11:40:33 +03:00
Yuri Kuznetsov
6a97b3dee5 cs fix 2021-05-25 11:08:05 +03:00
Yuri Kuznetsov
70070daf1c cs fix 2021-05-24 12:42:52 +03:00
Yuri Kuznetsov
482e4097d8 manual merge 2021-05-24 12:35:51 +03:00
Yuri Kuznetsov
f774b4bbcf queue optimization 2021-05-24 12:20:40 +03:00
Yuri Kuznetsov
47938a1072 job queue optimization 2021-05-24 12:13:18 +03:00
Yuri Kuznetsov
93449c9320 fix webhook 2021-05-24 11:02:44 +03:00
Yuri Kuznetsov
e93310b9bf tcpdf relocation 2021-05-21 18:26:06 +03:00
Yuri Kuznetsov
9a26889fc7 cs fix 2021-05-21 15:39:07 +03:00
Yuri Kuznetsov
106fdc72c4 cs fix 2021-05-21 15:35:39 +03:00
Yuri Kuznetsov
6224d8fbbe fix notification 2021-05-21 15:14:37 +03:00
Yuri Kuznetsov
b1a195c67e fix preferences 2021-05-21 15:13:35 +03:00
Yuri Kuznetsov
607fbb609c fix loading notification 2021-05-21 15:09:27 +03:00
Yuri Kuznetsov
13e186576b fix 2021-05-21 15:06:35 +03:00
Yuri Kuznetsov
d30041dfe7 iframe disabled 2021-05-21 15:04:42 +03:00
Yuri Kuznetsov
dc14024dd7 cs fix 2021-05-21 14:01:44 +03:00
Yuri Kuznetsov
bd95bc12ba update ace 2021-05-21 13:54:48 +03:00
Yuri Kuznetsov
0b67883de8 formula autocomplete 2021-05-21 13:37:15 +03:00
Yuri Kuznetsov
64e1d6b27e cs fix 2021-05-21 13:27:33 +03:00
Yuri Kuznetsov
7a840f1a6e cs fix 2021-05-21 13:21:45 +03:00
Yuri Kuznetsov
35ac4e91f6 cs fix 2021-05-21 11:24:31 +03:00
Yuri Kuznetsov
9a03074283 fixes 2021-05-20 23:03:10 +03:00
Arkady
0ed68957db fix typo (#1988)
Co-authored-by: Yuri Kuznetsov <yurikuzn@users.noreply.github.com>
2021-05-20 22:51:18 +03:00
Yuri Kuznetsov
44d4e4f78f pl lang fixes 2021-05-20 22:42:57 +03:00
Yuri Kuznetsov
4506f06b01 test 2021-05-20 19:57:46 +03:00
Yuri Kuznetsov
813e3227ad email refactoring 2021-05-20 19:50:48 +03:00
Yuri Kuznetsov
3bbccf2c3c rename 2021-05-20 18:31:23 +03:00
Yuri Kuznetsov
810677014c options usage 2021-05-20 18:22:57 +03:00
Yuri Kuznetsov
f81ef16012 fix mail 2021-05-20 18:03:25 +03:00
Yuri Kuznetsov
c33a9ea975 fix 2021-05-20 17:51:25 +03:00
Yuri Kuznetsov
f672231eec cleanup 2021-05-20 14:37:24 +03:00
Yuri Kuznetsov
9876189c64 autoreply improvements 2021-05-20 14:34:20 +03:00
Yuri Kuznetsov
2f84ac6fee fix email template 2021-05-20 13:59:35 +03:00
Yuri Kuznetsov
692904dc5e fix 2021-05-20 13:38:02 +03:00
Yuri Kuznetsov
c02aceeead email import refactoring and fixes 2021-05-20 13:34:11 +03:00
Yuri Kuznetsov
ee24b58a2c job fix 2021-05-20 12:28:00 +03:00
Yuri Kuznetsov
29d1cda756 fix 2021-05-20 12:04:36 +03:00
Yuri Kuznetsov
343df3f97c auto reply changes 2021-05-19 16:08:38 +03:00
Yuri Kuznetsov
089eeb2956 Merge branch 'hotfix/6.1.8' 2021-05-19 15:55:51 +03:00
Yuri Kuznetsov
da2e2dbf20 fix typo 2021-05-19 15:55:38 +03:00
Yuri Kuznetsov
8501a0b818 Merge branch 'hotfix/6.1.8' 2021-05-19 15:44:42 +03:00
Yuri Kuznetsov
59a9f73872 auto-reply headeres 2021-05-19 15:44:19 +03:00
Yuri Kuznetsov
b3438ccc86 email in reply to header 2021-05-19 15:37:36 +03:00
Yuri Kuznetsov
72a57edaa3 save and new, save and continue editing 2021-05-19 14:34:54 +03:00
Yuri Kuznetsov
b19a63f69a base record view fix 2021-05-19 14:30:43 +03:00
Yuri Kuznetsov
71a600e308 cs fix 2021-05-19 14:10:35 +03:00
Yuri Kuznetsov
ebb9758d28 cs fix 2021-05-19 14:03:23 +03:00
Yuri Kuznetsov
e9e25f8800 cs fix 2021-05-19 13:58:37 +03:00
Yuri Kuznetsov
b42226c490 cs fix 2021-05-19 13:48:24 +03:00
Yuri Kuznetsov
15965cd1b1 fix avatar flicking 2021-05-19 13:15:40 +03:00
Yuri Kuznetsov
8fef564297 cleanup 2021-05-19 12:55:03 +03:00
Yuri Kuznetsov
81f01996db cleanup 2021-05-19 12:50:46 +03:00
Yuri Kuznetsov
00c378ad94 cs fix 2021-05-19 12:37:43 +03:00
Yuri Kuznetsov
85eefe9a54 select access filter bind acl 2021-05-19 12:17:53 +03:00
Yuri Kuznetsov
43cbc44941 header rootLinkDisabled prop 2021-05-19 11:38:03 +03:00
Yuri Kuznetsov
f7540e7e36 cs fix 2021-05-19 11:28:54 +03:00
Yuri Kuznetsov
c0a8c02c26 select usage 2021-05-19 11:21:54 +03:00
Eymen Elkum
c054712828 config param emailAutoReplaySuppressPeriod (#1998) 2021-05-19 10:14:23 +03:00
Yuri Kuznetsov
f20616e6b7 frontend acl cloning array 2021-05-19 09:44:19 +03:00
Yuri Kuznetsov
e518c146f0 orm defs relocation 2021-05-18 18:19:58 +03:00
Yuri Kuznetsov
602115266a orm select builder where no default 2021-05-18 17:59:08 +03:00
Yuri Kuznetsov
4e074af139 select usage 2021-05-18 17:52:42 +03:00
Yuri Kuznetsov
cceaf2bc02 select usage 2021-05-18 17:02:30 +03:00
Yuri Kuznetsov
acb49d2b69 fix import 2021-05-18 16:56:58 +03:00
Yuri Kuznetsov
4d84924da0 link multiple vo addition 2021-05-18 15:49:20 +03:00
Yuri Kuznetsov
cc94913e16 more functions 2021-05-18 13:39:20 +03:00
Yuri Kuznetsov
13459bd136 cleanup 2021-05-18 13:16:44 +03:00
Yuri Kuznetsov
b285b1c17f dev 2021-05-18 13:02:37 +03:00
Yuri Kuznetsov
05c18658a0 select bool filter refactoring 2021-05-14 14:16:24 +03:00
Yuri Kuznetsov
f1a52f55d9 gr select managers 2021-05-14 13:23:22 +03:00
Yuri Kuznetsov
ea05052677 last viewed fix and list layout params 2021-05-14 12:24:42 +03:00
Yuri Kuznetsov
13311c374f select access control mandatory filter 2021-05-13 22:19:10 +03:00
Yuri Kuznetsov
daa288c1cc visibility fix 2021-05-13 17:42:20 +03:00
Yuri Kuznetsov
38b613ac5f refactoring 2021-05-13 17:33:17 +03:00
Yuri Kuznetsov
7429f454eb fix test 2021-05-13 16:50:45 +03:00
Yuri Kuznetsov
3c119fe3e8 fix test 2021-05-13 16:39:51 +03:00
Yuri Kuznetsov
428525e1bd cleanup 2021-05-13 16:31:36 +03:00
Yuri Kuznetsov
e07dbf374c cleanup 2021-05-13 16:31:10 +03:00
Yuri Kuznetsov
f1306dfbee refactoring 2021-05-13 14:43:55 +03:00
Yuri Kuznetsov
db4663cbf9 mail sender params 2021-05-13 12:29:34 +03:00
Yuri Kuznetsov
3760275937 orm select builder improvement 2021-05-13 11:20:27 +03:00
Yuri Kuznetsov
b4afeac71f renaming 2021-05-13 11:08:49 +03:00
Arkady
b19c543988 fix cs (#1995)
* remove leading slashes in `use` clauses

* remove spaces inside parenthesis

* ensure one blank line after the `use` statement

* ensure cast are written in lower case

* fix whitespace around the keyword of a class

* remove spaces after function call

* remove trailing whitespace

* standardize spaces around ternary operator

* ensure php keywords are in lower case

* remove whitespace before closing semicolon

* ensure whitespace after each comma in array

* ensure `true`, `false`, and `null` are lower case
2021-05-12 23:53:11 +03:00
Yuri Kuznetsov
0a5ce00878 fix 2021-05-12 23:26:14 +03:00
Arkady
bfe256c578 remove duplicate object key (#1994) 2021-05-12 22:42:29 +03:00
Yuri Kuznetsov
af31c84982 cleanup 2021-05-12 14:37:15 +03:00
Yuri Kuznetsov
67a2ad241a comment 2021-05-12 13:42:22 +03:00
Arkady
8a9449e240 remove duplicate object key (#1993) 2021-05-12 12:26:07 +03:00
Yuri Kuznetsov
95ef59be68 export refactoring and tests 2021-05-12 12:10:51 +03:00
Yuri Kuznetsov
8463fb402e export field processing 2021-05-11 22:36:29 +03:00
Yuri Kuznetsov
0f4391bdd1 pdf refactoring and fixes 2021-05-11 18:18:41 +03:00
Yuri Kuznetsov
2738019c3f move 2021-05-11 15:59:04 +03:00
Yuri Kuznetsov
ce3e76aa3d move 2021-05-11 15:44:38 +03:00
Yuri Kuznetsov
9d76b6c5cc fix panel btn style 2021-05-11 15:34:46 +03:00
Yuri Kuznetsov
6e023222de assignment checking refactoring 2021-05-11 15:29:16 +03:00
Yuri Kuznetsov
6b62fc7963 fix tests 2021-05-11 15:28:28 +03:00
Yuri Kuznetsov
d38962868b panel style conditions 2021-05-11 12:53:58 +03:00
Yuri Kuznetsov
3a0ee7de94 fix 2021-05-11 12:53:58 +03:00
Yuri Kuznetsov
dff21145d0 cs fix 2021-05-11 12:53:58 +03:00
Yuri Kuznetsov
81bf80d8b0 css fix 2021-05-11 12:53:58 +03:00
Yuri Kuznetsov
d2e1b556ba type hint fix 2021-05-11 10:19:31 +03:00
Yuri Kuznetsov
97b263cf57 cs fix 2021-05-11 10:14:26 +03:00
Yuri Kuznetsov
fa140f09fc relation table id bigint 2021-05-10 13:07:16 +03:00
Arkady
2cb824c1e1 FileStorage\Factory small fix (#1989)
* fix use of unknown class

* fix use of unassigned variable
2021-05-09 23:11:04 +03:00
Yuri Kuznetsov
9dc5c60100 renaming 2021-05-09 15:46:07 +03:00
Yuri Kuznetsov
8212810276 Merge branch 'hotfix/6.1.8' 2021-05-09 15:24:15 +03:00
Yuri Kuznetsov
44d772a32f fix typo 2021-05-09 15:23:59 +03:00
Yuri Kuznetsov
fbe3e1b44f search params fetcher fix 2021-05-09 15:22:02 +03:00
Yuri Kuznetsov
d56fe9f9b0 cs fix 2021-05-09 15:21:51 +03:00
Yuri Kuznetsov
9d3d347fb7 fix 2021-05-09 15:08:00 +03:00
Yuri Kuznetsov
30fcab6626 typo fixes 2021-05-09 15:07:22 +03:00
Yuri Kuznetsov
44f25f7497 typo fixes and cleanup 2021-05-09 14:40:40 +03:00
Yuri Kuznetsov
53c4a74074 select refactoring 2021-05-09 10:51:46 +03:00
Yuri Kuznetsov
a126c8f06d cs fix 2021-05-09 10:12:36 +03:00
Yuri Kuznetsov
2ed81ef9be fix 2021-05-08 23:08:05 +03:00
Yuri Kuznetsov
3a844767f0 refactoring and cs fixes 2021-05-08 22:53:56 +03:00
Yuri Kuznetsov
3667b72634 fix test 2021-05-08 20:11:37 +03:00
Yuri Kuznetsov
3f8d272eee address vo changes 2021-05-08 20:09:17 +03:00
Yuri Kuznetsov
a15daa87c5 cleanup 2021-05-08 16:51:47 +03:00
Yuri Kuznetsov
d6092fc3eb categories loading flicking fix 2021-05-08 16:33:02 +03:00
Yuri Kuznetsov
4d2c7bd776 ui fixes 2021-05-08 12:33:15 +03:00
Yuri Kuznetsov
78947d51dc export fix 2021-05-08 12:16:47 +03:00
Yuri Kuznetsov
8d7e482219 fix mass action 2021-05-08 11:40:45 +03:00
Yuri Kuznetsov
14d313686c export refactoring 2021-05-08 11:33:50 +03:00
dependabot[bot]
b79bd9a30e Bump lodash from 4.17.20 to 4.17.21 (#1986)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.20 to 4.17.21.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.20...4.17.21)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-08 09:10:54 +03:00
Yuri Kuznetsov
891885fcb3 fix css 2021-05-07 20:58:18 +03:00
Yuri Kuznetsov
e1986612d5 css fix 2021-05-07 16:39:07 +03:00
Yuri Kuznetsov
4c9435594d category list changes 2021-05-07 15:54:15 +03:00
Yuri Kuznetsov
cc353f5956 Merge branch 'hotfix/6.1.8' 2021-05-07 15:53:10 +03:00
Yuri Kuznetsov
a90971b762 not held event strikethrough 2021-05-07 10:34:38 +03:00
Yuri Kuznetsov
f32edcde74 refactoring 2021-05-06 19:57:27 +03:00
Yuri Kuznetsov
177a7d3054 record service in core 2021-05-06 19:02:53 +03:00
Yuri Kuznetsov
c693146e15 gr gloabls 2021-05-06 17:11:02 +03:00
Yuri Kuznetsov
296358e473 gr globals 2021-05-06 17:02:24 +03:00
Yuri Kuznetsov
06d5628180 fix tests 2021-05-06 16:51:25 +03:00
Yuri Kuznetsov
9085bbff96 external account refactoring 2021-05-06 16:41:26 +03:00
Yuri Kuznetsov
0171ce64e4 cleanup 2021-05-06 15:33:59 +03:00
Yuri Kuznetsov
222ff4a6de gr globals 2021-05-06 15:29:51 +03:00
Yuri Kuznetsov
1c46f2436c gr globals 2021-05-06 15:27:07 +03:00
Yuri Kuznetsov
65654fdef2 gr gloabals 2021-05-06 15:18:43 +03:00
Yuri Kuznetsov
9035d68d96 refactoring 2021-05-06 15:16:32 +03:00
Yuri Kuznetsov
41b2d2bce7 gr globals 2021-05-06 15:11:52 +03:00
Yuri Kuznetsov
b67c2dc625 refactoring 2021-05-06 15:09:21 +03:00
Yuri Kuznetsov
ec0d738e9f gr global log 2021-05-06 14:58:58 +03:00
Yuri Kuznetsov
028da06b34 refactoring 2021-05-06 14:56:58 +03:00
Yuri Kuznetsov
dd5037cb07 refactoring 2021-05-06 14:04:15 +03:00
Yuri Kuznetsov
5406c0156a fix test 2021-05-06 13:45:55 +03:00
Yuri Kuznetsov
2f97583289 gr global log 2021-05-06 13:22:32 +03:00
Yuri Kuznetsov
fcde65eaee log dependency 2021-05-06 13:14:57 +03:00
Yuri Kuznetsov
8fccdae675 log dependency 2021-05-06 12:51:07 +03:00
Yuri Kuznetsov
50cb0528c6 fix tests 2021-05-06 12:22:24 +03:00
Yuri Kuznetsov
3cf0c2f804 fix find followers 2021-05-06 10:57:01 +03:00
Yuri Kuznetsov
fad9e8516e refactoring 2021-05-06 09:50:18 +03:00
Yuri Kuznetsov
7b3d4739aa fix findLinked methods 2021-05-06 09:39:24 +03:00
Yuri Kuznetsov
e9f7046a05 fix request get content type 2021-05-06 09:26:16 +03:00
Yuri Kuznetsov
9ce7239308 cs fix 2021-05-05 22:30:00 +03:00
Yuri Kuznetsov
acc5a88a27 comment 2021-05-05 22:04:41 +03:00
Yuri Kuznetsov
1cc99231ae cleanup 2021-05-05 22:02:15 +03:00
Yuri Kuznetsov
39e0784714 cs fix 2021-05-05 21:59:46 +03:00
Yuri Kuznetsov
9f0569cd0b refactoring 2021-05-05 21:53:25 +03:00
Yuri Kuznetsov
d455ef3e33 fixes 2021-05-05 15:48:25 +03:00
Yuri Kuznetsov
691918cfc8 cleanup 2021-05-05 15:44:59 +03:00
Yuri Kuznetsov
df294eee15 fix search params 2021-05-05 15:43:18 +03:00
Yuri Kuznetsov
3a94ea35f6 cs fix 2021-05-05 15:34:11 +03:00
Yuri Kuznetsov
4f711d8a34 fix test 2021-05-05 15:31:24 +03:00
Yuri Kuznetsov
c5ec653215 search params building 2021-05-05 15:17:55 +03:00
Yuri Kuznetsov
937b83d776 refactoring 2021-05-05 13:49:37 +03:00
Yuri Kuznetsov
8b585a06e7 cleanup 2021-05-05 13:25:23 +03:00
Yuri Kuznetsov
a53f88cbaf controllers refactoring 2021-05-05 13:24:59 +03:00
Yuri Kuznetsov
604a9212ca Merge branch 'stable' 2021-05-05 12:22:50 +03:00
Yuri Kuznetsov
09d7e8abde search apply button fixes 2021-05-05 11:54:24 +03:00
Yuri Kuznetsov
1ddfcff441 version 2021-05-05 11:17:35 +03:00
Yuri Kuznetsov
08eb168f06 refactoring 2021-05-04 19:01:04 +03:00
Yuri Kuznetsov
f0f6fd6887 export refactoring 2021-05-04 18:54:16 +03:00
Yuri Kuznetsov
892df7bd0c merge 2021-05-04 16:13:21 +03:00
Yuri Kuznetsov
1a672a8aa3 escaping 2021-05-04 16:08:35 +03:00
Yuri Kuznetsov
8ec9a8ae22 orm create entity default array 2021-05-04 11:16:32 +03:00
Yuri Kuznetsov
defa18724c merge test and fix 2021-05-04 11:15:30 +03:00
Yuri Kuznetsov
f56f965d06 merge action 2021-05-02 18:23:55 +03:00
Yuri Kuznetsov
1ea488024b metadata json syntax error logging 2021-05-01 18:10:02 +03:00
Yuri Kuznetsov
4f85734de5 cs fixes 2021-05-01 17:50:49 +03:00
Yuri Kuznetsov
a3b6e6f161 refactoring 2021-05-01 17:18:15 +03:00
Yuri Kuznetsov
ff1e851143 tests 2021-05-01 15:40:26 +03:00
Yuri Kuznetsov
95f19bde45 refactoring 2021-05-01 14:51:40 +03:00
Yuri Kuznetsov
457110fa62 remove setTimezone method 2021-05-01 13:26:17 +03:00
Yuri Kuznetsov
23195e03b8 date time refactoring 2021-05-01 13:23:11 +03:00
Yuri Kuznetsov
c9feaa7074 installer fixes 2021-05-01 11:33:04 +03:00
Yuri Kuznetsov
6ec5df9309 fix email sent message 2021-05-01 10:40:08 +03:00
Yuri Kuznetsov
892e5fab1f actions allowance 2021-05-01 10:28:26 +03:00
Yuri Kuznetsov
15424a2617 integration tests 2021-05-01 10:21:16 +03:00
Yuri Kuznetsov
5188c0f473 actions allowance 2021-05-01 09:45:55 +03:00
Yuri Kuznetsov
c91552339c fix layout 2021-05-01 09:36:15 +03:00
Yuri Kuznetsov
8565b74510 fix 2021-05-01 09:34:10 +03:00
Yuri Kuznetsov
7524bc3bc3 actions allowed 2021-04-30 22:36:45 +03:00
Yuri Kuznetsov
038d0e038b fix 2021-04-30 22:04:11 +03:00
Yuri Kuznetsov
077e1a697b removal 2021-04-30 16:15:57 +03:00
Yuri Kuznetsov
f5053bbc22 actions disabled and kanban disabled 2021-04-30 15:44:15 +03:00
Yuri Kuznetsov
baf61c0bdb fix 2021-04-30 15:35:09 +03:00
Yuri Kuznetsov
e3dcfb9136 refactoring 2021-04-30 15:19:35 +03:00
Yuri Kuznetsov
e4c71fb3e4 acl fix 2021-04-30 14:25:28 +03:00
Yuri Kuznetsov
44e947ac8a acl fixes 2021-04-30 13:56:11 +03:00
Yuri Kuznetsov
fc7e2400cf acl always do checkScope 2021-04-30 13:38:01 +03:00
Yuri Kuznetsov
e30e164ba3 acl fixes 2021-04-30 12:42:40 +03:00
Yuri Kuznetsov
007e013514 fix 2021-04-30 11:47:28 +03:00
Yuri Kuznetsov
10b5d2c4f7 fix 2021-04-30 11:28:40 +03:00
Yuri Kuznetsov
ef9b15d924 move record service container 2021-04-30 11:25:59 +03:00
Yuri Kuznetsov
a44bc68e81 action and mass action separate services 2021-04-30 11:15:06 +03:00
Yuri Kuznetsov
ec75d17bcf Aware setters comments and fix 2021-04-30 10:32:26 +03:00
Yuri Kuznetsov
ad5f9a3762 refactoring 2021-04-30 10:19:40 +03:00
Yuri Kuznetsov
a720065a45 fixes 2021-04-30 09:50:30 +03:00
Yuri Kuznetsov
6342e0b243 fix 2021-04-29 19:39:27 +03:00
Yuri Kuznetsov
e9814504db refactoring 2021-04-29 19:35:38 +03:00
Yuri Kuznetsov
145cf9820a fix 2021-04-29 17:21:47 +03:00
Yuri Kuznetsov
d7fae910fb refactoring 2021-04-29 17:19:39 +03:00
Yuri Kuznetsov
d15474c243 controllers refactoring 2021-04-29 17:16:11 +03:00
Yuri Kuznetsov
805f377459 controllers refactoring 2021-04-29 15:33:23 +03:00
Yuri Kuznetsov
bf320261f9 entity interface more methods 2021-04-29 12:08:11 +03:00
Yuri Kuznetsov
fb94597409 field processing fix 2021-04-29 11:47:34 +03:00
Yuri Kuznetsov
93e4bd8cd0 fixes 2021-04-29 11:23:30 +03:00
Yuri Kuznetsov
dfa839526c action disabled 2021-04-29 11:23:19 +03:00
Yuri Kuznetsov
0d1f138459 fix 2021-04-29 11:07:02 +03:00
Yuri Kuznetsov
ace47d6515 cs fix 2021-04-29 09:57:58 +03:00
Yuri Kuznetsov
87c1808b7e reminder test 2021-04-28 14:12:34 +03:00
Yuri Kuznetsov
95627f3617 reminder saver 2021-04-28 12:49:54 +03:00
Yuri Kuznetsov
9c20ac68f5 saver framework 2021-04-28 11:49:57 +03:00
Yuri Kuznetsov
ed1665d625 field processing refactoring 2021-04-28 11:17:35 +03:00
Yuri Kuznetsov
c6de70f57f cs fix 2021-04-28 10:41:39 +03:00
Yuri Kuznetsov
28dcfd714e cs fix 2021-04-28 10:33:27 +03:00
Yuri Kuznetsov
1ed6099878 cleanup 2021-04-28 10:31:03 +03:00
Yuri Kuznetsov
5e9c2fc255 cleanup 2021-04-28 10:30:39 +03:00
Yuri Kuznetsov
f9a4e3c9fc field loading usage 2021-04-28 10:27:46 +03:00
Yuri Kuznetsov
9d7582caa6 field loading usage and changes 2021-04-28 10:06:30 +03:00
Yuri Kuznetsov
f9d47de8f2 cleanup 2021-04-28 09:48:59 +03:00
Yuri Kuznetsov
e057b64055 cleanup 2021-04-28 09:47:16 +03:00
Yuri Kuznetsov
5968e3d065 field loading usage 2021-04-28 09:46:22 +03:00
Yuri Kuznetsov
b22bb295af cs fix 2021-04-28 09:33:13 +03:00
Yuri Kuznetsov
fb3ecd4cf7 field loading usage 2021-04-27 19:42:16 +03:00
Yuri Kuznetsov
65b4454f2c field loading usage 2021-04-27 19:25:08 +03:00
Yuri Kuznetsov
3e5f178c4d renaming 2021-04-27 19:11:04 +03:00
Yuri Kuznetsov
35f87f6361 cs fix 2021-04-27 18:59:17 +03:00
Yuri Kuznetsov
c2141dc034 field loading usage 2021-04-27 18:56:22 +03:00
Yuri Kuznetsov
6e460c5584 field loader usage 2021-04-27 16:50:49 +03:00
Yuri Kuznetsov
3a523a514c renaming 2021-04-27 15:45:05 +03:00
Yuri Kuznetsov
e1e654c6b7 field load processing changes 2021-04-27 13:28:59 +03:00
Yuri Kuznetsov
161009c4ac cleanup load additional fields 2021-04-27 11:52:27 +03:00
Yuri Kuznetsov
6cb2649981 cs fix 2021-04-26 15:33:15 +03:00
Yuri Kuznetsov
6089e2e267 cs fix 2021-04-26 15:27:06 +03:00
Yuri Kuznetsov
ac6bf02b2d refactoring 2021-04-26 15:21:52 +03:00
Yuri Kuznetsov
365bbaf2ad list load processing 2021-04-26 15:17:11 +03:00
Yuri Kuznetsov
f320ef4721 field loading 2021-04-26 13:47:35 +03:00
Yuri Kuznetsov
87a34f2fbb field loading 2021-04-26 12:46:58 +03:00
Yuri Kuznetsov
defdd904c8 fix 2021-04-26 12:15:02 +03:00
Yuri Kuznetsov
3f91c33eae fix comments 2021-04-26 11:45:49 +03:00
Yuri Kuznetsov
2e3642671f fix test 2021-04-26 10:59:16 +03:00
Yuri Kuznetsov
02e2f42481 refacoring 2021-04-25 12:12:52 +03:00
Yuri Kuznetsov
168f37dc8a doc fix 2021-04-25 11:25:45 +03:00
Yuri Kuznetsov
38aeda6d83 comment fixes 2021-04-24 23:55:20 +03:00
Yuri Kuznetsov
eb29b626d0 refactoring 2021-04-24 18:58:10 +03:00
Yuri Kuznetsov
e50839b7cc refactoring 2021-04-24 18:47:03 +03:00
Yuri Kuznetsov
082086ffa3 doc fix 2021-04-24 17:53:40 +03:00
Yuri Kuznetsov
7327b995e1 doc fix 2021-04-24 17:52:55 +03:00
Eymen Elkum
a6fb23302e typo fix (#1974) 2021-04-24 16:59:32 +03:00
Yuri Kuznetsov
055518da79 dev 2021-04-24 15:47:16 +03:00
Yuri Kuznetsov
6d903a526b refactoring 2021-04-24 15:17:22 +03:00
Yuri Kuznetsov
8d0c230c30 dev 2021-04-24 14:45:41 +03:00
Yuri Kuznetsov
440e71d983 refactoring 2021-04-24 14:32:58 +03:00
Yuri Kuznetsov
328cc89e39 refactoring 2021-04-24 14:28:21 +03:00
Yuri Kuznetsov
e4fd5d7293 refactoring 2021-04-24 13:51:53 +03:00
Yuri Kuznetsov
77d8fbbfc5 refactoring 2021-04-24 13:38:57 +03:00
Yuri Kuznetsov
fd4f484bab refactoring 2021-04-24 13:11:02 +03:00
Yuri Kuznetsov
e116c52ea9 refactoring 2021-04-24 12:58:51 +03:00
Yuri Kuznetsov
46fbd93d9b cleanup 2021-04-24 11:03:08 +03:00
Yuri Kuznetsov
bd1805750b refactoring 2021-04-24 10:56:40 +03:00
Yuri Kuznetsov
114663836c refactoring 2021-04-24 10:35:33 +03:00
Yuri Kuznetsov
82c5e88c4a refactoring 2021-04-24 10:11:51 +03:00
Yuri Kuznetsov
a0ec26a755 refactoring 2021-04-23 22:39:25 +03:00
Yuri Kuznetsov
a29386c7a1 refactoring 2021-04-23 16:27:29 +03:00
Yuri Kuznetsov
0ea25b46f7 fixes and refactoring 2021-04-23 15:42:51 +03:00
Yuri Kuznetsov
63b471780d next number refactoring 2021-04-23 12:19:22 +03:00
Yuri Kuznetsov
25065a66aa event select defs 2021-04-23 12:00:56 +03:00
Yuri Kuznetsov
60c64fcb6c refactoring 2021-04-22 23:35:53 +03:00
Yuri Kuznetsov
e5f8a83c7f orm refactoring 2021-04-22 19:30:25 +03:00
Yuri Kuznetsov
39811e7a2e comment 2021-04-22 18:50:43 +03:00
Yuri Kuznetsov
04cb611183 orm refactoring 2021-04-22 18:45:50 +03:00
Yuri Kuznetsov
f15a73200f typo fix 2021-04-22 17:59:20 +03:00
Yuri Kuznetsov
a6f3c879a5 orm refactoring 2021-04-22 17:58:06 +03:00
Yuri Kuznetsov
811e5479f4 refactoring 2021-04-22 16:09:03 +03:00
Yuri Kuznetsov
13af95f600 refactoring 2021-04-22 15:45:01 +03:00
Yuri Kuznetsov
b6743725e0 refactoring 2021-04-22 15:38:00 +03:00
Yuri Kuznetsov
d3579218f2 htmlizer refactoring 2021-04-22 15:31:43 +03:00
Yuri Kuznetsov
ff003d9603 orm refactoring 2021-04-22 14:21:32 +03:00
Yuri Kuznetsov
805b27074c orm refactoring 2021-04-22 13:57:54 +03:00
Yuri Kuznetsov
22e34da132 orm refactoring 2021-04-22 13:55:21 +03:00
Yuri Kuznetsov
71119b8d81 orm refactoring 2021-04-22 13:46:29 +03:00
Yuri Kuznetsov
ef2886ffc7 orm refactoring 2021-04-22 13:39:55 +03:00
Yuri Kuznetsov
770b85ebd2 orm refactoring 2021-04-22 13:33:28 +03:00
Yuri Kuznetsov
f75f992a59 orm refactoring 2021-04-22 13:14:02 +03:00
Yuri Kuznetsov
113f1fac6a cs fix 2021-04-22 13:03:30 +03:00
Yuri Kuznetsov
de58da6dab cs fix 2021-04-22 13:01:31 +03:00
Yuri Kuznetsov
256eeb863c cs fix 2021-04-22 12:46:23 +03:00
Yuri Kuznetsov
7420f2ff98 orm refactoring using injectable factory for entities 2021-04-22 12:33:45 +03:00
Yuri Kuznetsov
b2b968f915 test cleanup 2021-04-22 12:07:25 +03:00
Yuri Kuznetsov
12d89d8c4a select manager select builder usage 2021-04-22 11:44:59 +03:00
Yuri Kuznetsov
476e64c389 cs fix 2021-04-21 15:54:56 +03:00
Yuri Kuznetsov
e183f39dfd cs fix 2021-04-21 15:19:37 +03:00
Yuri Kuznetsov
f9e34ce9d5 cs fix 2021-04-21 15:02:38 +03:00
Yuri Kuznetsov
6bdd976209 cs fix 2021-04-21 14:19:47 +03:00
Yuri Kuznetsov
efd64ecded cs fix 2021-04-21 14:13:08 +03:00
Yuri Kuznetsov
50db978fa2 cs fix 2021-04-21 13:57:18 +03:00
Yuri Kuznetsov
de410bf75f injectable factory change and comment 2021-04-21 13:10:20 +03:00
Yuri Kuznetsov
2ff7825b34 repositories cleanup and cs fix 2021-04-21 13:03:53 +03:00
Yuri Kuznetsov
9b1ae75a00 field processing and database repository refactoring 2021-04-21 12:55:49 +03:00
Yuri Kuznetsov
e7f0911f8b file processing array 2021-04-21 12:33:44 +03:00
Yuri Kuznetsov
c004beab02 file field processing 2021-04-21 12:21:08 +03:00
Yuri Kuznetsov
fa758c51ee fix attachment 2021-04-21 12:14:13 +03:00
Yuri Kuznetsov
1aa2282321 cs fix 2021-04-21 12:00:20 +03:00
Yuri Kuznetsov
9094c44b07 test fix 2021-04-21 10:29:21 +03:00
Yuri Kuznetsov
c46036761c abolishment of acl non-strict mode 2021-04-21 10:25:08 +03:00
Yuri Kuznetsov
5d2f3cd2a7 acl admin mandatory 2021-04-21 09:36:56 +03:00
Yuri Kuznetsov
76f1902cae test code cs fix 2021-04-21 09:32:41 +03:00
Yuri Kuznetsov
5801c329b2 datetime refactoring 2021-04-20 19:27:12 +03:00
Yuri Kuznetsov
302833eb22 refactor database repository 2021-04-20 19:24:20 +03:00
Yuri Kuznetsov
f30b25e23f field processing tests 2021-04-20 18:23:56 +03:00
Yuri Kuznetsov
211e8c438a fix comment 2021-04-20 18:08:50 +03:00
Yuri Kuznetsov
4a33ed8fc2 cleanup 2021-04-20 18:03:21 +03:00
Yuri Kuznetsov
556ea8754c relation save processing refactoring 2021-04-20 18:02:15 +03:00
Yuri Kuznetsov
d2fdd37084 field processing fix 2021-04-20 13:20:30 +03:00
Yuri Kuznetsov
12e2f146bf fix 2021-04-20 13:13:54 +03:00
Yuri Kuznetsov
eae701012a cs fix 2021-04-20 13:08:56 +03:00
Yuri Kuznetsov
c4ae2c5c1b cs fix 2021-04-20 13:07:23 +03:00
Yuri Kuznetsov
fb52bf3984 field processing 2021-04-20 13:00:29 +03:00
Yuri Kuznetsov
6c0ae235f0 acl refactoring 2021-04-19 15:48:49 +03:00
Yuri Kuznetsov
399f867016 cs fix 2021-04-19 15:29:34 +03:00
Yuri Kuznetsov
bb947ac0a9 acl refactoring 2021-04-19 15:29:30 +03:00
Yuri Kuznetsov
30813f5efc cs fix 2021-04-19 12:19:34 +03:00
Yuri Kuznetsov
411e6720e1 cs fix 2021-04-19 11:59:32 +03:00
Yuri Kuznetsov
1255dc03b2 injectable factory test 2021-04-19 11:45:03 +03:00
Yuri Kuznetsov
61e060b8ef fix test 2021-04-19 11:42:25 +03:00
Yuri Kuznetsov
18b009f6af fix action processor 2021-04-19 11:42:14 +03:00
Yuri Kuznetsov
d4b246e37f action processor 2021-04-19 11:31:16 +03:00
Yuri Kuznetsov
4da052279e acl fix 2021-04-19 11:06:12 +03:00
Yuri Kuznetsov
12a9afe2fe cs fix 2021-04-18 22:17:16 +03:00
Yuri Kuznetsov
e2a0314742 cs fix 2021-04-18 20:32:02 +03:00
Yuri Kuznetsov
bdd4df9dd7 cs fix 2021-04-18 20:20:36 +03:00
Yuri Kuznetsov
491a28c03e cs fix 2021-04-18 20:07:12 +03:00
Yuri Kuznetsov
dc389e0f41 cs fix 2021-04-18 19:57:56 +03:00
Yuri Kuznetsov
121f9b547c fox 2021-04-18 19:56:22 +03:00
Yuri Kuznetsov
6c03a00f57 cs fix 2021-04-18 19:43:54 +03:00
Yuri Kuznetsov
58ec18f47d new acl usage 2021-04-17 15:16:32 +03:00
Yuri Kuznetsov
973a92886b new acl usage 2021-04-17 13:06:36 +03:00
Yuri Kuznetsov
4497c4be66 new acl usage 2021-04-17 12:47:48 +03:00
Yuri Kuznetsov
33ec8d0041 fix stream acl 2021-04-17 12:47:23 +03:00
Yuri Kuznetsov
215867ae21 acl portal trait 2021-04-17 11:16:40 +03:00
Yuri Kuznetsov
4711c0f785 new acl usage 2021-04-17 11:03:57 +03:00
Yuri Kuznetsov
ad1dece946 new acl usage 2021-04-17 10:33:26 +03:00
Yuri Kuznetsov
dc202f987a injectable factory test 2021-04-16 15:35:44 +03:00
Yuri Kuznetsov
12fbee8597 injectable factory cleanup 2021-04-16 14:25:58 +03:00
Yuri Kuznetsov
856621a8a7 new acl usage 2021-04-16 13:12:43 +03:00
Yuri Kuznetsov
2c4bda882f new acl usage 2021-04-16 12:28:18 +03:00
Yuri Kuznetsov
7f524153a6 injectable factory use binding for implementation resolved 2021-04-16 12:05:38 +03:00
Yuri Kuznetsov
6652f8cb65 select access all filter 2021-04-16 11:23:12 +03:00
Yuri Kuznetsov
b00dfb6135 select use binding 2021-04-15 18:13:03 +03:00
Yuri Kuznetsov
93960dd1b8 select factories refactoring and fixes 2021-04-15 16:58:33 +03:00
Yuri Kuznetsov
d105045b75 bindInstance usage 2021-04-15 14:20:50 +03:00
Yuri Kuznetsov
49d21bbba8 test change 2021-04-15 14:03:05 +03:00
Yuri Kuznetsov
b1f05c38b3 fix tests 2021-04-15 13:59:11 +03:00
Yuri Kuznetsov
9f7ed802ea binder bind instance method 2021-04-15 13:57:43 +03:00
Yuri Kuznetsov
9b7313ce95 docs fix 2021-04-15 12:42:17 +03:00
Yuri Kuznetsov
d42896a19c disable spellcheck for some fields 2021-04-15 12:37:17 +03:00
Yuri Kuznetsov
2729b8ece8 imap get size manual merge 2021-04-15 12:23:16 +03:00
Yuri Kuznetsov
85ed99a1dc email get size error fix 2021-04-15 11:40:06 +03:00
Yuri Kuznetsov
aa7959b91c acl recactoring 2021-04-15 09:18:06 +03:00
Yuri Kuznetsov
781d9dd440 fix 2021-04-14 10:36:12 +03:00
Yuri Kuznetsov
483a346faa Merge branch 'stable' 2021-04-12 12:53:46 +03:00
Yuri Kuznetsov
6e9f368a0a version 2021-04-12 10:42:26 +03:00
Yuri Kuznetsov
84a3688525 scheduler honor eventAssignedUserIsAttendeeDisabled 2021-04-12 10:40:06 +03:00
Yuri Kuznetsov
3c08986889 cs fix 2021-04-12 10:37:07 +03:00
Yuri Kuznetsov
477828beb9 fix get entity followers 2021-04-12 10:31:47 +03:00
Eymen Elkum
fadc6c46ba fix (#1969) 2021-04-12 10:31:29 +03:00
Yuri Kuznetsov
3111166f89 acl refactoring 2021-04-10 17:32:24 +03:00
Yuri Kuznetsov
f7c8b62f6c grand acl refactoring 2021-04-10 16:25:40 +03:00
Yuri Kuznetsov
e6edc6ae03 select fix 2021-04-09 15:46:21 +03:00
Yuri Kuznetsov
3bc0799091 select refactoring 2021-04-09 15:36:44 +03:00
Yuri Kuznetsov
1285955e32 cleanup 2021-04-08 10:48:30 +03:00
Yuri Kuznetsov
5fdc8cb32c injectable factory create with binding 2021-04-08 10:27:47 +03:00
Yuri Kuznetsov
8538a77db7 fix comment 2021-04-08 10:20:10 +03:00
Yuri Kuznetsov
329b84f7b5 comment fix 2021-04-08 09:52:19 +03:00
Yuri Kuznetsov
4dcb7acd58 fix 2021-04-08 09:51:27 +03:00
Yuri Kuznetsov
d91f9cf29f refactoring and cs fix 2021-04-07 15:53:10 +03:00
Yuri Kuznetsov
1a04dec97b binding refactoring 2021-04-07 15:34:42 +03:00
Yuri Kuznetsov
c6f95a9030 acl scope data no access to properties 2021-04-06 12:15:28 +03:00
Yuri Kuznetsov
62d2157fd8 fix orm sub query entity type 2021-04-06 12:07:02 +03:00
Yuri Kuznetsov
d0c61ea5fa cleanup 2021-04-05 15:49:38 +03:00
Yuri Kuznetsov
b9c7d108e5 auth token refactoring 2021-04-05 14:00:48 +03:00
Yuri Kuznetsov
20a8597b45 refactoring 2021-04-04 23:02:17 +03:00
Yuri Kuznetsov
9a1ada97ec fix acl 2021-04-04 22:44:06 +03:00
Yuri Kuznetsov
0ebe32228d acl refactoring 2021-04-04 22:40:20 +03:00
Yuri Kuznetsov
ad5da12154 acl refactoring 2021-04-04 22:26:27 +03:00
Yuri Kuznetsov
cdd2e0dd1d fix 2021-04-04 21:08:50 +03:00
Yuri Kuznetsov
3fe10212d5 cs fix 2021-04-04 20:12:18 +03:00
Yuri Kuznetsov
97e97a6cfc cs fix 2021-04-04 20:08:50 +03:00
Yuri Kuznetsov
9cb8d9d65e refactoring 2021-04-04 19:55:12 +03:00
Yuri Kuznetsov
eadf3b46e0 acl table apply highest 2021-04-04 13:35:42 +03:00
Yuri Kuznetsov
5d97a16d75 acl refactoring 2021-04-04 13:17:39 +03:00
Yuri Kuznetsov
e13ca70143 cleanup 2021-04-03 22:52:14 +03:00
Yuri Kuznetsov
732493d663 acl refactoring 2021-04-03 21:21:02 +03:00
Yuri Kuznetsov
569284ef60 comments 2021-04-03 20:05:45 +03:00
Yuri Kuznetsov
85a1891b8c fix test 2021-04-03 19:53:59 +03:00
Yuri Kuznetsov
6a67344643 acl test and fix 2021-04-03 19:52:53 +03:00
Yuri Kuznetsov
0bff0a7878 acl refactoring 2021-04-03 19:15:27 +03:00
Yuri Kuznetsov
925d26f02b cleanup 2021-04-03 19:00:04 +03:00
Yuri Kuznetsov
45539289fd acl refactoring 2021-04-03 18:39:54 +03:00
Yuri Kuznetsov
4cbcddf3c0 acl fix 2021-04-03 17:57:02 +03:00
Yuri Kuznetsov
304d63c6a2 fe cs fixes, link field selectFilterList 2021-04-03 16:25:40 +03:00
Yuri Kuznetsov
ec784b4a98 cs fixes and comments 2021-04-03 14:50:20 +03:00
Yuri Kuznetsov
1b899f2228 acl refactoring 2021-04-03 14:41:29 +03:00
Yuri Kuznetsov
a8d437720b stream fix 2021-04-03 13:04:45 +03:00
Yuri Kuznetsov
fc7c9e1c0a cs fix 2021-04-03 13:02:21 +03:00
Yuri Kuznetsov
514607a731 cs fixes 2021-04-03 12:52:54 +03:00
Yuri Kuznetsov
9344e08d7b Merge branch 'master' of https://github.com/espocrm/espocrm 2021-04-03 12:16:42 +03:00
Yuri Kuznetsov
13cec0dd31 attachment fix 2021-04-02 15:37:30 +03:00
Yuri Kuznetsov
b80e890fd6 attachment fix 2021-04-02 15:31:20 +03:00
Yuri Kuznetsov
e54c07325e scope data class 2021-04-01 19:03:14 +03:00
Yuri Kuznetsov
3107705e25 cleanup 2021-04-01 17:18:53 +03:00
Yuri Kuznetsov
62db7b8382 cleanup 2021-04-01 17:16:20 +03:00
Yuri Kuznetsov
8e8fefef36 refactoring 2021-04-01 17:03:03 +03:00
Yuri Kuznetsov
0c178ec71f refactoring 2021-04-01 16:52:23 +03:00
Yuri Kuznetsov
3c9c3cb709 email template int disable formatting 2021-04-01 14:06:34 +03:00
Yuri Kuznetsov
2ebfd108ea refactoring 2021-04-01 14:00:48 +03:00
Yuri Kuznetsov
31df3927c5 Merge branch 'hotfix/6.1.6' 2021-04-01 13:28:00 +03:00
Yuri Kuznetsov
c1b7e06308 remove noJoin 2021-04-01 13:27:42 +03:00
Yuri Kuznetsov
8368eb4541 follower management permission 2021-04-01 12:53:14 +03:00
Yuri Kuznetsov
ce995a9380 follower management for portal permission 2021-04-01 12:02:28 +03:00
Yuri Kuznetsov
110d773e3c fix orm entity 2021-04-01 11:25:57 +03:00
Yuri Kuznetsov
6965591e7b refactoring 2021-04-01 11:08:40 +03:00
Yuri Kuznetsov
4b47cfda57 refactoring 2021-03-31 23:27:03 +03:00
Yuri Kuznetsov
e7db4d6b67 refactoring 2021-03-31 22:41:08 +03:00
Yuri Kuznetsov
c8a63044af cs fix 2021-03-31 22:37:38 +03:00
Yuri Kuznetsov
622b27448f cs fixes 2021-03-31 20:04:27 +03:00
Yuri Kuznetsov
e2814141d4 fix 2021-03-31 16:29:58 +03:00
Yuri Kuznetsov
1a0f70c56b acl refactoring 2021-03-31 16:14:31 +03:00
Taras Machyshyn
e86ec32dd7 Hide permission warnings 2021-03-31 15:12:46 +03:00
Yuri Kuznetsov
4667a14080 followers fix check permission 2021-03-31 14:46:32 +03:00
Taras Machyshyn
c8bd2ec1a1 Time format fixes 2021-03-31 14:39:47 +03:00
Yuri Kuznetsov
933625011c followers admin access check 2021-03-31 13:12:08 +03:00
Yuri Kuznetsov
c032541f69 followers portal access check 2021-03-31 13:11:43 +03:00
Yuri Kuznetsov
78b9bf9823 followers check access to user 2021-03-31 13:00:04 +03:00
Taras Machyshyn
3cf94bb728 Notification fixes 2021-03-31 12:17:18 +03:00
Yuri Kuznetsov
ae1ee69d25 cs fix 2021-03-31 12:15:40 +03:00
Yuri Kuznetsov
bf6bb93829 cs fix 2021-03-31 12:00:58 +03:00
Yuri Kuznetsov
61ef7dfc75 refacoring 2021-03-31 11:48:38 +03:00
Yuri Kuznetsov
82948e56d2 entity refactoring 2021-03-31 00:05:21 +03:00
Yuri Kuznetsov
2338c5a4fa fix 2021-03-31 00:03:23 +03:00
Yuri Kuznetsov
63b60999f8 orm entity refactoring and cloning 2021-03-30 19:39:50 +03:00
Yuri Kuznetsov
5857a3aed7 comment 2021-03-30 15:44:08 +03:00
Yuri Kuznetsov
364d41737f refactoring 2021-03-30 13:05:47 +03:00
Yuri Kuznetsov
31c69477f4 fixes 2021-03-30 12:56:08 +03:00
Yuri Kuznetsov
d1e9477fb4 refactoring 2021-03-30 12:52:15 +03:00
Yuri Kuznetsov
f325b778a9 refactoring and comments 2021-03-30 12:33:45 +03:00
Yuri Kuznetsov
a7270f7510 refactoring 2021-03-30 12:02:04 +03:00
Yuri Kuznetsov
5da493713f validation test 2021-03-30 11:22:14 +03:00
Yuri Kuznetsov
ca0a7689be validation test 2021-03-30 11:18:49 +03:00
Yuri Kuznetsov
6efe19d50c fix tests 2021-03-30 11:07:40 +03:00
Yuri Kuznetsov
08ce7c9186 fix test 2021-03-30 10:51:58 +03:00
Yuri Kuznetsov
cd25f0c723 field validation refactoring 2021-03-29 16:24:53 +03:00
Yuri Kuznetsov
fd6554658b fix 2021-03-29 16:01:24 +03:00
Yuri Kuznetsov
8abc8ab0e4 filter resolver interface 2021-03-29 14:05:49 +03:00
Yuri Kuznetsov
7a16e7743e cleanup 2021-03-29 13:13:19 +03:00
Yuri Kuznetsov
aac3cf2b69 notificator refactoring 2021-03-29 13:09:26 +03:00
Yuri Kuznetsov
c30a5e437f fix 2021-03-29 11:42:15 +03:00
Yuri Kuznetsov
473c63267f refactorig 2021-03-28 23:50:38 +03:00
Yuri Kuznetsov
318d8f8ccc mail refactoring 2021-03-28 19:21:08 +03:00
Yuri Kuznetsov
ee24ab8f6e runners refactoring 2021-03-28 17:45:39 +03:00
Yuri Kuznetsov
e89ca133cd fix validator 2021-03-28 13:51:34 +03:00
Yuri Kuznetsov
c1292e5a52 remove test 2021-03-28 13:50:34 +03:00
Yuri Kuznetsov
a236b1f9da test fix 2021-03-28 13:49:47 +03:00
Yuri Kuznetsov
c9c7794e73 select refactoring 2021-03-28 13:43:16 +03:00
Yuri Kuznetsov
29c5717e79 comment 2021-03-28 13:19:03 +03:00
Yuri Kuznetsov
ccc8e704b4 fix 2021-03-28 13:17:37 +03:00
Yuri Kuznetsov
5991afc1f0 login refactoring 2021-03-28 11:55:33 +03:00
Yuri Kuznetsov
58329fd61f refactoring 2021-03-27 15:28:10 +02:00
Yuri Kuznetsov
b7ed8ec246 refactoring 2021-03-27 12:27:02 +02:00
Yuri Kuznetsov
c975ab7b05 field validation refactoring 2021-03-27 12:20:38 +02:00
Yuri Kuznetsov
fdf11d144f fix comment 2021-03-25 20:50:30 +02:00
Yuri Kuznetsov
99f1821215 supporting all week starts 2021-03-25 17:37:38 +02:00
Yuri Kuznetsov
3d14646548 enum translation support array 2021-03-25 17:26:03 +02:00
Yuri Kuznetsov
b826b1928e Merge branch 'master' of github.com:espocrm/espocrm 2021-03-25 16:15:37 +02:00
Yuri Kuznetsov
b6038285f4 merge with hotfix 2021-03-25 16:14:22 +02:00
Yuri Kuznetsov
0f8621d923 spatie async update 2021-03-25 16:11:30 +02:00
Yuri Kuznetsov
2d9e9a5e93 async downgrade 2021-03-25 15:38:50 +02:00
Yuri Kuznetsov
abeb5fc0e3 v 2021-03-25 15:14:57 +02:00
Taras Machyshyn
47e61cecdd Upgrade scripts 2021-03-25 15:14:22 +02:00
Taras Machyshyn
17aaf08717 Installation: code changes 2021-03-25 13:23:23 +02:00
Taras Machyshyn
89e849d851 Installation: bug fixes 2021-03-25 13:06:19 +02:00
Yuri Kuznetsov
42098f477a fix oauth client 2021-03-25 12:14:22 +02:00
Taras Machyshyn
e44ee9ca03 Installation: corrected languages 2021-03-25 11:10:18 +02:00
Yuri Kuznetsov
e7831ac960 comment 2021-03-24 19:47:46 +02:00
Yuri Kuznetsov
8a48b71a0f small refactoring 2021-03-24 16:14:50 +02:00
Yuri Kuznetsov
2e4d50c7b5 small refactoring 2021-03-24 16:13:41 +02:00
Yuri Kuznetsov
df501e42b9 cs fix 2021-03-24 15:31:43 +02:00
Yuri Kuznetsov
1d14d37c1d websocket refacroring 2021-03-24 14:23:34 +02:00
Yuri Kuznetsov
0d728ed4ce cs fix 2021-03-24 12:04:21 +02:00
Yuri Kuznetsov
4e2ff445e0 container and loaders refactoring 2021-03-24 11:59:21 +02:00
Yuri Kuznetsov
f3818803fd method rename 2021-03-23 21:38:20 +02:00
Yuri Kuznetsov
329668322f comment 2021-03-23 20:54:08 +02:00
Yuri Kuznetsov
0ffd0c1530 authentication refactoring 2021-03-23 20:50:29 +02:00
Yuri Kuznetsov
7b7c6fbfae runner fix 2021-03-23 20:08:49 +02:00
Yuri Kuznetsov
b946228ee2 portal api runner fix 2021-03-23 20:07:33 +02:00
Yuri Kuznetsov
61177901e8 fix duration 2021-03-23 18:08:26 +02:00
Yuri Kuznetsov
bb4f8b0d78 cs fix 2021-03-23 17:02:30 +02:00
Yuri Kuznetsov
1a4e701f98 cs fix 2021-03-23 16:30:41 +02:00
Yuri Kuznetsov
968ee917fc add url field to dynamic logic 2021-03-23 16:14:18 +02:00
Yuri Kuznetsov
bbc01c0be9 fix loader 2021-03-23 16:03:56 +02:00
Yuri Kuznetsov
3387b41841 icon fix 2021-03-23 16:02:56 +02:00
Yuri Kuznetsov
d36a578708 fix job page 2021-03-23 16:02:44 +02:00
Yuri Kuznetsov
36d42ab8ba cleanup 2021-03-23 15:45:06 +02:00
Yuri Kuznetsov
ba71f10dee cleanup 2021-03-23 15:44:00 +02:00
Yuri Kuznetsov
7bb1857d0c job settings in admin panel 2021-03-23 15:40:36 +02:00
Yuri Kuznetsov
999ce51178 job manager test 2021-03-23 15:19:43 +02:00
Yuri Kuznetsov
a2ebf69551 fix auth 2021-03-23 14:08:05 +02:00
Yuri Kuznetsov
9ef3ba9342 job refactoring 2021-03-23 13:26:15 +02:00
Eymen Elkum
88e82a511b integration fields view param (#1949) 2021-03-23 09:57:31 +02:00
Yuri Kuznetsov
495c49f277 websocket reconnect 2021-03-22 15:59:49 +02:00
Yuri Kuznetsov
0459091a52 refacroring 2021-03-22 15:10:53 +02:00
Yuri Kuznetsov
ba67529d62 job refactoring 2021-03-22 14:49:05 +02:00
Yuri Kuznetsov
9bd16c0b5c refactoring 2021-03-22 12:04:32 +02:00
Yuri Kuznetsov
a0c76052cc Merge branch 'hotfix/6.1.5' 2021-03-22 09:17:08 +02:00
Yuri Kuznetsov
c4861c5efa fix exceptions 2021-03-22 09:16:45 +02:00
Yuri Kuznetsov
6b8f46bf81 refactor email reminder sending 2021-03-21 14:38:24 +02:00
Yuri Kuznetsov
1a71f43c54 job refactoring 2021-03-21 14:22:10 +02:00
Yuri Kuznetsov
b4d732656f jobs refactoring 2021-03-21 11:25:43 +02:00
Yuri Kuznetsov
6a335269f4 jobs refactoring 2021-03-20 16:13:33 +02:00
Yuri Kuznetsov
c51f2fa401 comment 2021-03-20 11:55:47 +02:00
Yuri Kuznetsov
69072cf0ca entry point traits namespace 2021-03-20 11:52:52 +02:00
Yuri Kuznetsov
b023964aec comments 2021-03-20 09:45:52 +02:00
Yuri Kuznetsov
59321dbd56 Core EntryPoint namespace 2021-03-19 22:02:49 +02:00
Yuri Kuznetsov
f1c282451b application runner interface 2021-03-19 21:41:13 +02:00
Yuri Kuznetsov
ff0c34c0b8 fix import command 2021-03-18 21:23:13 +02:00
Taras Machyshyn
4380175c8b Upgrade scripts 2021-03-18 17:39:32 +02:00
Yuri Kuznetsov
439598d7ee cleanup 2021-03-18 16:28:39 +02:00
Yuri Kuznetsov
08fa24b095 app-info command fix 2021-03-18 16:23:42 +02:00
Yuri Kuznetsov
c836548fc7 command old interface support 2021-03-18 15:59:34 +02:00
Yuri Kuznetsov
f109146379 Merge branch 'hotfix/6.1.5' 2021-03-18 15:47:57 +02:00
Yuri Kuznetsov
8ff46bba74 diff: removing git folder in vendor 2021-03-18 15:47:40 +02:00
Yuri Kuznetsov
af7f4e3bc4 Merge branch 'hotfix/6.1.5' 2021-03-18 15:29:49 +02:00
Yuri Kuznetsov
06f1305f23 removing git folder in vendor on build 2021-03-18 15:29:21 +02:00
Yuri Kuznetsov
ddc299fa08 fix extension command 2021-03-18 15:05:51 +02:00
Yuri Kuznetsov
43df9d25f0 new command interface 2021-03-18 13:39:14 +02:00
Yuri Kuznetsov
250ac0e8ba fix 2021-03-18 13:23:06 +02:00
Yuri Kuznetsov
29d960878c cs fix 2021-03-17 13:06:25 +02:00
Yuri Kuznetsov
8e6634ff0f value object framework 2021-03-17 12:55:30 +02:00
Yuri Kuznetsov
15b5cf9750 using cache api 2021-03-16 22:23:41 +02:00
Yuri Kuznetsov
c001c4b5bd Merge branch 'hotfix/6.1.5' 2021-03-16 11:37:00 +02:00
Eymen Elkum
43723697f7 fix (#1944) 2021-03-15 14:20:42 +02:00
Yuri Kuznetsov
99d6a0ab32 local storage cache exceeded no error 2021-03-15 13:52:01 +02:00
Yuri Kuznetsov
c2809ca091 no lib cache 2021-03-15 13:44:31 +02:00
Yuri Kuznetsov
108432c268 cs fix 2021-03-15 13:43:49 +02:00
Yuri Kuznetsov
aa0db4b665 manual merge 2021-03-12 14:54:10 +02:00
Yuri Kuznetsov
cda62b8a3e duration field fixes 2021-03-11 11:51:34 +02:00
Yuri Kuznetsov
970242e860 cs fixes 2021-03-10 16:05:38 +02:00
Yuri Kuznetsov
9c741da4e8 fix image 2021-03-09 17:27:55 +02:00
Yuri Kuznetsov
2dfd43c8ba fix index defs 2021-03-09 17:25:50 +02:00
Yuri Kuznetsov
5536687d90 fix metadata provider 2021-03-08 22:17:26 +02:00
Yuri Kuznetsov
34c421733e email address phone number group factory fix 2021-03-07 15:35:55 +02:00
Yuri Kuznetsov
b0b29443a5 value objects from email address and phone number 2021-03-07 11:54:56 +02:00
Yuri Kuznetsov
a637dcd28d fix test 2021-03-06 19:56:09 +02:00
Yuri Kuznetsov
b6b3ec04be fix test 2021-03-06 19:54:15 +02:00
Yuri Kuznetsov
6586f51791 fix formula 2021-03-06 19:52:12 +02:00
Yuri Kuznetsov
dff2e344a4 fix formula modulo 2021-03-06 16:25:13 +02:00
Taras Machyshyn
92e4e81788 Test fixes 2021-03-04 13:23:11 +02:00
Yuri Kuznetsov
aa9ee7e1af attribute extractor fix 2021-03-04 13:02:38 +02:00
Taras Machyshyn
2d3f2f4b36 Fix test warning 2021-03-04 13:01:02 +02:00
Yuri Kuznetsov
73fe4d68f1 config param thumbImageCacheDisabled 2021-03-04 11:43:12 +02:00
Taras Machyshyn
d244602818 Fix test warning 2021-03-04 11:38:25 +02:00
Yuri Kuznetsov
67d9c6ed4e move crm formula functins 2021-03-04 11:26:00 +02:00
Yuri Kuznetsov
55f8932495 remove flystem from composer 2021-03-04 09:54:39 +02:00
Eymen Elkum
24617f4a41 variable name typo (#1937) 2021-03-04 09:25:31 +02:00
Taras Machyshyn
5d47009e07 Database test fixes 2021-03-03 15:55:05 +02:00
Yuri Kuznetsov
c46acc1ad4 aws s3 using temp when upload 2021-03-03 12:16:03 +02:00
Yuri Kuznetsov
20051a835b switch to async aws 2021-03-03 12:03:07 +02:00
Taras Machyshyn
2ae0f36241 LDAP bug fixes 2021-03-03 10:57:01 +02:00
Yuri Kuznetsov
873e33a04f attachment storage filter 2021-03-03 10:02:11 +02:00
Yuri Kuznetsov
e33c5d7cbc fix file storage manager and image entry point 2021-03-03 09:45:25 +02:00
Yuri Kuznetsov
b729ec1a85 s3 storage 2021-03-02 23:13:57 +02:00
Yuri Kuznetsov
9b18ecf072 cleanup 2021-03-02 23:07:13 +02:00
Yuri Kuznetsov
88c4ae5721 mass email refactoring 2021-03-02 14:11:08 +02:00
Yuri Kuznetsov
d2b94955d1 mass email refactoring 2021-03-02 13:40:45 +02:00
Yuri Kuznetsov
dbcc00fe1a cs fixes 2021-03-02 12:41:51 +02:00
Yuri Kuznetsov
b56ae68854 request interface fixes 2021-03-02 12:27:02 +02:00
Yuri Kuznetsov
312ea7d962 fix api response wrapper 2021-03-02 11:49:00 +02:00
Yuri Kuznetsov
ceb3b562e6 file storage changes 2021-03-02 11:45:25 +02:00
Yuri Kuznetsov
b211009e91 Merge branch 'hotfix/6.1.5' 2021-03-02 11:42:18 +02:00
Yuri Kuznetsov
eec372c6df fix css 2021-03-02 11:39:26 +02:00
Yuri Kuznetsov
011e83fac6 update selectize 2021-03-02 11:37:07 +02:00
Yuri Kuznetsov
70fa577e10 manual merge 2021-03-01 14:50:45 +02:00
Yuri Kuznetsov
dd8e55c2ac restpore tcpdf 2021-03-01 14:34:38 +02:00
Yuri Kuznetsov
b8f3f53d56 team position list as list 2021-03-01 14:24:24 +02:00
Yuri Kuznetsov
d5623dabb6 comment fix 2021-02-26 14:10:25 +02:00
Yuri Kuznetsov
db50687a1e Merge branch 'hotfix/6.1.5' 2021-02-26 12:33:05 +02:00
Yuri Kuznetsov
00fcd5a9b6 fix tcpdf page number 2021-02-26 12:32:48 +02:00
Yuri Kuznetsov
272fd58481 pdf changes 2021-02-26 12:23:46 +02:00
Yuri Kuznetsov
ecbde48f63 manual merge 2021-02-26 10:42:53 +02:00
Yuri Kuznetsov
3dda43c70a update tcpdf 2021-02-26 10:38:46 +02:00
Yuri Kuznetsov
39827e449b update async 2021-02-26 09:33:43 +02:00
Yuri Kuznetsov
44d0c78077 manual merge 2021-02-26 09:32:09 +02:00
Yuri Kuznetsov
34029c6f6f update composer deps 2021-02-26 09:26:40 +02:00
Yuri Kuznetsov
929b8c2d50 field and entity manager fixes 2021-02-25 20:01:52 +02:00
Yuri Kuznetsov
b71a64c214 cs fixes 2021-02-25 19:53:46 +02:00
Yuri Kuznetsov
66c5d408c6 fixes in field manager 2021-02-25 19:37:16 +02:00
Yuri Kuznetsov
ab1dbd0d5c cs fix 2021-02-25 19:24:39 +02:00
Yuri Kuznetsov
cc307e3217 cleanup 2021-02-25 16:40:42 +02:00
Yuri Kuznetsov
e3c45a5039 hide reset to default field for custom entities 2021-02-25 16:39:33 +02:00
Yuri Kuznetsov
6754efc486 fix calendar query 2021-02-25 13:44:35 +02:00
Yuri Kuznetsov
1e5d9d314b remove tests depending on db from unit 2021-02-25 13:28:31 +02:00
Yuri Kuznetsov
cea6aaf7ff fix composer dependency 2021-02-25 12:58:09 +02:00
Yuri Kuznetsov
c1f019e71c update async 2021-02-25 11:54:50 +02:00
Yuri Kuznetsov
c00b511c17 update slim 2021-02-25 11:37:12 +02:00
Yuri Kuznetsov
51c6067c17 udpdate composer phar 2021-02-25 11:33:19 +02:00
Yuri Kuznetsov
c032e74e58 drop php 7.2 2021-02-25 11:28:26 +02:00
Yuri Kuznetsov
412d40d041 Merge branch 'hotfix/6.1.5' 2021-02-25 11:16:05 +02:00
Yuri Kuznetsov
2cc69a0725 fix related list sync 2021-02-24 12:39:50 +02:00
Yuri Kuznetsov
89b3b6da61 cs fix 2021-02-24 12:20:13 +02:00
Yuri Kuznetsov
77a7fffcb2 rename field utils to fields 2021-02-24 10:58:42 +02:00
Yuri Kuznetsov
30a9c8c90e foreign type 2021-02-23 18:50:24 +02:00
Yuri Kuznetsov
abd52c7a42 orm fixes 2021-02-23 16:59:43 +02:00
Yuri Kuznetsov
9bb164246e cleanup 2021-02-23 14:24:57 +02:00
Yuri Kuznetsov
87d0e18696 move jobs 2021-02-23 14:24:13 +02:00
Yuri Kuznetsov
e8f5864dd9 job refactoring 2021-02-23 14:13:04 +02:00
Yuri Kuznetsov
51d7b3f413 case fixes 2021-02-23 13:32:58 +02:00
Yuri Kuznetsov
fb3de84aa4 layout change 2021-02-23 13:24:17 +02:00
Yuri Kuznetsov
4a2aa91b6d email notification refactoring 2021-02-23 13:13:24 +02:00
Yuri Kuznetsov
a4edac59c6 refactoring 2021-02-23 10:10:14 +02:00
suparpat
19af59b301 Add Thai Language Support (#1920)
* Add Thai Language Support
2021-02-23 09:12:23 +02:00
Yuri Kuznetsov
d1b27dfd9d tcpdf refactoring 2021-02-22 15:19:31 +02:00
Yuri Kuznetsov
274fb0f380 view followers list portal 2021-02-22 15:14:12 +02:00
Yuri Kuznetsov
8e70567688 follow entity support another user portal 2021-02-22 14:27:22 +02:00
Yuri Kuznetsov
7cbc24feb8 v 2021-02-22 10:52:07 +02:00
Yuri Kuznetsov
2bdcf3919e fix tests 2021-02-20 10:55:12 +02:00
Yuri Kuznetsov
8214f4ba20 cleanup 2021-02-19 15:31:08 +02:00
Yuri Kuznetsov
d0a5fc24b1 dev 2021-02-19 15:30:22 +02:00
Yuri Kuznetsov
c8084c670a fix tests 2021-02-19 14:53:07 +02:00
Yuri Kuznetsov
82a9779b09 renaming 2021-02-19 14:28:57 +02:00
Yuri Kuznetsov
fdb887e43a fix test 2021-02-19 14:18:32 +02:00
Yuri Kuznetsov
7761244eec update composer 2021-02-19 14:10:57 +02:00
Yuri Kuznetsov
6580334bdd Merge branch 'hotfix/6.1.4' 2021-02-19 14:02:51 +02:00
Yuri Kuznetsov
e2f7a22457 fix comment 2021-02-19 10:47:13 +02:00
Yuri Kuznetsov
494382f5cb value fix 2021-02-18 21:35:32 +02:00
Yuri Kuznetsov
2ff248a4c4 use forked lighrncandy 2021-02-18 15:35:01 +02:00
Yuri Kuznetsov
7ed15a2dbc cleanup 2021-02-18 12:21:55 +02:00
Yuri Kuznetsov
3d1725054a field utils refactoring 2021-02-18 12:17:23 +02:00
Yuri Kuznetsov
d6e37f9f13 cleanup 2021-02-18 10:56:29 +02:00
Yuri Kuznetsov
2c78bef505 fieldUtil additions 2021-02-18 10:52:03 +02:00
Yuri Kuznetsov
d60b9706b3 cs fix 2021-02-18 08:58:55 +02:00
Yuri Kuznetsov
d20996d788 Merge branch 'hotfix/6.1.4' 2021-02-18 08:55:32 +02:00
Yuri Kuznetsov
0010976803 attachment download calculating actual filesize 2021-02-18 08:54:03 +02:00
Eymen Elkum
bd422323ee fix typo (#1924) 2021-02-18 08:44:40 +02:00
Eymen Elkum
6a66d99017 add missing import (#1923) 2021-02-18 08:34:24 +02:00
Yuri Kuznetsov
f1d87da9b6 comments fix 2021-02-17 20:17:52 +02:00
Yuri Kuznetsov
ac8674a8b3 cs fixes and cleanup 2021-02-17 16:44:31 +02:00
Yuri Kuznetsov
c2af7914e3 fix 2021-02-17 16:40:27 +02:00
Yuri Kuznetsov
102db4c937 merge 2021-02-17 16:38:09 +02:00
Yuri Kuznetsov
1f7d92b209 return type fix 2021-02-17 16:36:15 +02:00
Yuri Kuznetsov
555cc74312 cs fix 2021-02-17 16:31:49 +02:00
Yuri Kuznetsov
761319c13d entity setAsNotNew and refactoring 2021-02-17 16:12:53 +02:00
Yuri Kuznetsov
828e867ac9 remove tests 2021-02-17 13:23:55 +02:00
Yuri Kuznetsov
6a7b4f107e fix syntax 2021-02-17 13:10:31 +02:00
Yuri Kuznetsov
c0df364b4f Merge branch 'hotfix/6.1.4' 2021-02-17 09:10:27 +02:00
Yuri Kuznetsov
71c72136f6 attachment proper size calculation 2021-02-17 09:09:52 +02:00
Yuri Kuznetsov
ec5f8fc4f5 fix test 2021-02-16 22:52:39 +02:00
Yuri Kuznetsov
f5e6ed914d cs fixes 2021-02-16 22:50:43 +02:00
Yuri Kuznetsov
2e7bc894f1 refactoring 2021-02-16 21:27:00 +02:00
Yuri Kuznetsov
7f57e64292 Merge branch 'hotfix/6.1.3' of github.com:espocrm/espocrm into hotfix/6.1.3 2021-02-15 10:51:31 +02:00
Yuri Kuznetsov
18537b9cdb some orm fixes 2021-02-14 21:25:40 +02:00
Yuri Kuznetsov
ed5cb715da Merge branch 'hotfix/6.1.3' 2021-02-13 19:27:47 +02:00
Yuri Kuznetsov
300a0ece75 save and continue action 2 2021-02-13 19:21:47 +02:00
Yuri Kuznetsov
3172ba213e save and continue action 2021-02-13 19:16:45 +02:00
Yuri Kuznetsov
32cf86ede5 refactoring and cs fixes 2021-02-13 18:24:31 +02:00
Yuri Kuznetsov
97f320c9a7 ceanup 2021-02-13 17:55:23 +02:00
Yuri Kuznetsov
7c6dd75a23 cleanup 2021-02-13 17:52:44 +02:00
Yuri Kuznetsov
6a59355514 refactoring 2021-02-13 17:51:18 +02:00
Yuri Kuznetsov
91c3413c57 refactoring and cleanup 2021-02-13 14:33:30 +02:00
Yuri Kuznetsov
717f5f6e2e refactoring 2021-02-13 13:45:19 +02:00
Yuri Kuznetsov
f48efae82d entity manager getDefs 2021-02-13 13:45:04 +02:00
Yuri Kuznetsov
5f372ebee3 cs fix 2021-02-13 11:14:57 +02:00
Yuri Kuznetsov
5b27fad3aa Merge branch 'hotfix/6.1.3' 2021-02-13 11:04:16 +02:00
Yuri Kuznetsov
5685ccbffd deprecated fix 2021-02-13 11:03:44 +02:00
Yuri Kuznetsov
6149a951bd cs fix 2021-02-13 10:59:22 +02:00
Yuri Kuznetsov
2529205359 orm defs usage 2021-02-13 10:54:00 +02:00
Yuri Kuznetsov
81b71a7676 orm defs fixes 2021-02-13 10:18:35 +02:00
Yuri Kuznetsov
29c80f7845 entity manager get rdb repository 2021-02-12 17:17:59 +02:00
Yuri Kuznetsov
05372fc4a4 cs fix 2021-02-12 17:11:03 +02:00
Yuri Kuznetsov
50e433aba0 cs fix 2021-02-12 16:59:28 +02:00
Yuri Kuznetsov
ac4797a943 Merge branch 'hotfix/6.1.3' 2021-02-12 16:54:08 +02:00
Yuri Kuznetsov
3e372f753d fix 2021-02-12 16:53:54 +02:00
Yuri Kuznetsov
3c7baa7237 cs fix 2021-02-12 16:53:34 +02:00
Yuri Kuznetsov
3f9d6e48b5 cs fix 2021-02-12 16:21:41 +02:00
Yuri Kuznetsov
79adfe70a4 mass update copy attachments 2021-02-12 16:18:45 +02:00
Yuri Kuznetsov
ae8b616fed cs fix 2021-02-12 15:49:15 +02:00
Yuri Kuznetsov
0b8b2db41e cs fix 2021-02-12 15:24:18 +02:00
Yuri Kuznetsov
63183b33f1 cs fix 2021-02-12 15:21:50 +02:00
Yuri Kuznetsov
de09d1dbd2 cs fix 2021-02-12 14:30:46 +02:00
Yuri Kuznetsov
b59e318444 Merge branch 'hotfix/6.1.3' 2021-02-12 14:18:52 +02:00
Yuri Kuznetsov
51ea8a5e1c fromula array join function 2021-02-12 14:11:02 +02:00
Yuri Kuznetsov
0a65da2fc4 Merge branch 'hotfix/6.1.3' 2021-02-12 12:54:19 +02:00
Yuri Kuznetsov
d3c634b89f fix lead convert 2021-02-12 12:52:35 +02:00
Yuri Kuznetsov
e46be54688 fix app 2021-02-12 11:16:11 +02:00
Yuri Kuznetsov
e4f8a51df8 front end action improvements 2021-02-12 10:59:34 +02:00
Yuri Kuznetsov
a51f48f060 cs fix 2021-02-12 09:48:54 +02:00
Yuri Kuznetsov
32df0c1730 cs fix 2021-02-12 09:43:57 +02:00
Yuri Kuznetsov
530c8818b7 cs fix 2021-02-12 09:40:10 +02:00
Yuri Kuznetsov
6c99f73596 refactoring, action framework 2021-02-11 16:49:25 +02:00
Yuri Kuznetsov
61acaaa054 cleanup 2021-02-11 15:09:37 +02:00
Yuri Kuznetsov
eca341d7ec update phpspreadsheet 2021-02-11 14:18:49 +02:00
Yuri Kuznetsov
25b695bc32 dev 2021-02-11 13:33:20 +02:00
Yuri Kuznetsov
0f41cb5ad4 grand refactoring, mass actions 2021-02-11 13:29:19 +02:00
Taras Machyshyn
454ca3b136 Merge branch 'hotfix/6.1.3' of https://github.com/espocrm/espocrm into hotfix/6.1.3 2021-02-11 13:09:38 +02:00
Taras Machyshyn
e3b8b450a4 DBAL: bug fixing 2021-02-11 13:09:20 +02:00
Taras Machyshyn
c15c486603 Fix changing default values in MariaDB 2021-02-10 12:42:46 +02:00
Yuri Kuznetsov
40e57e3a54 Merge branch 'hotfix/6.1.3' 2021-02-10 10:45:20 +02:00
Yuri Kuznetsov
c6554afaae Merge branch 'hotfix/6.1.3' of https://github.com/espocrm/espocrm into hotfix/6.1.3 2021-02-10 10:44:11 +02:00
Yuri Kuznetsov
0d6b5ce68c fix 2021-02-10 10:43:54 +02:00
Taras Machyshyn
2830400da5 DBAL: do not change collation when changing a field 2021-02-10 10:22:01 +02:00
Yuri Kuznetsov
113b05ed05 fix 2021-02-10 09:51:30 +02:00
Yuri Kuznetsov
824ce88914 mass action refactoring 2021-02-09 18:43:24 +02:00
Yuri Kuznetsov
aa8edf1ee9 v 2021-02-09 11:05:49 +02:00
Yuri Kuznetsov
f1bf439f7b wysiwyg modal backdrop 2021-02-08 15:37:17 +02:00
Yuri Kuznetsov
220992fc37 formula generate id 2021-02-08 15:18:14 +02:00
Yuri Kuznetsov
a1e243714e cs fix 2021-02-07 22:29:43 +02:00
Yuri Kuznetsov
1c0ed64f67 fix 2021-02-07 22:12:44 +02:00
Yuri Kuznetsov
1f1cd1b6d7 refactoring 2021-02-07 22:01:58 +02:00
Yuri Kuznetsov
e81725eb16 cs fix 2021-02-07 18:56:14 +02:00
Yuri Kuznetsov
ee4220e1ce cs fixes 2021-02-07 18:46:19 +02:00
Yuri Kuznetsov
a733c6c68d comment 2021-02-07 18:38:51 +02:00
Yuri Kuznetsov
d7c7619218 entry points refactoring 2021-02-07 18:31:07 +02:00
Yuri Kuznetsov
77066ba7e5 cs fix 2021-02-07 12:59:06 +02:00
Yuri Kuznetsov
35c5919c44 cs fix 2021-02-07 12:56:00 +02:00
Yuri Kuznetsov
fcdd286965 refactoring 2021-02-07 12:40:24 +02:00
Yuri Kuznetsov
e84fa1d636 Merge branch 'hotfix/6.1.3' 2021-02-07 12:29:39 +02:00
Yuri Kuznetsov
de52af79c5 cs fix 2021-02-07 12:28:36 +02:00
Yuri Kuznetsov
c555102b5f refactoring 2021-02-07 12:28:00 +02:00
Yuri Kuznetsov
4c05175dbe tracking url uid 2021-02-07 12:12:30 +02:00
Yuri Kuznetsov
de543fa2db fix typo 2021-02-07 08:50:02 +02:00
Yuri Kuznetsov
bfe9bad905 fix stream query 2021-02-05 14:34:45 +02:00
Yuri Kuznetsov
459b6bc6fe attachment storage readonly 2021-02-05 14:06:53 +02:00
Yuri Kuznetsov
332211fb13 Merge branch 'hotfix/6.1.3' 2021-02-05 13:58:13 +02:00
Yuri Kuznetsov
a0f85bd55a attachment source list improvements 2021-02-05 13:13:05 +02:00
Yuri Kuznetsov
7273caac36 cs fix 2021-02-05 12:37:57 +02:00
Yuri Kuznetsov
d8383dc38a opcache invalidate error fix 2021-02-04 16:46:33 +02:00
Yuri Kuznetsov
7824ab8dc9 fix logger handler 2021-02-04 16:32:37 +02:00
Yuri Kuznetsov
7320bf68e5 fix id attribute reading 2021-02-02 14:42:48 +02:00
Yuri Kuznetsov
e5d42cf0eb manual merge 2021-02-01 19:17:04 +02:00
Yuri Kuznetsov
d7b9492f15 login exception fix 2021-02-01 19:11:13 +02:00
Yuri Kuznetsov
6a7b782309 v 2021-02-01 11:48:33 +02:00
Yuri Kuznetsov
9d080d7dca fix kanban order 2021-01-30 17:59:08 +02:00
Yuri Kuznetsov
424df8d4fe request parsed body cloning 2021-01-30 14:06:11 +02:00
Yuri Kuznetsov
2f4422f719 auth error msg 2021-01-29 18:40:19 +02:00
Yuri Kuznetsov
831611af1e cs fix 2021-01-29 18:26:33 +02:00
Yuri Kuznetsov
c302d362a4 cs fix 2021-01-29 15:59:05 +02:00
Yuri Kuznetsov
69d4b1096f cs fix 2021-01-29 15:52:43 +02:00
Yuri Kuznetsov
2514a89286 fix diff 2021-01-29 15:44:12 +02:00
Yuri Kuznetsov
2034055148 acl refactoring 2021-01-29 15:28:25 +02:00
Yuri Kuznetsov
3a3b1007b9 Merge branch 'stable' 2021-01-29 13:38:38 +02:00
Yuri Kuznetsov
2582dfe3c4 v 2021-01-29 12:29:47 +02:00
Yuri Kuznetsov
295411a5d2 fix auth token 2021-01-29 11:31:51 +02:00
Yuri Kuznetsov
09a83b36ff cleanup 2021-01-28 23:35:16 +02:00
Yuri Kuznetsov
32cc59228d auth refactoring 2021-01-28 23:29:08 +02:00
Yuri Kuznetsov
31b2413953 icon quick search 2021-01-28 20:20:04 +02:00
Yuri Kuznetsov
c8eb643818 theme param global 2021-01-28 18:10:39 +02:00
Yuri Kuznetsov
11b251003e fix protal config 2021-01-28 18:10:19 +02:00
Yuri Kuznetsov
28bb0e99cb cs fix 2021-01-28 18:04:18 +02:00
Yuri Kuznetsov
5c9c686317 cs fix 2021-01-28 17:51:40 +02:00
Yuri Kuznetsov
098425bdbf cs fix 2021-01-28 16:04:16 +02:00
Yuri Kuznetsov
5189f6b392 cs fixes 2021-01-28 16:02:47 +02:00
Yuri Kuznetsov
f487479b1d fixes 2021-01-28 15:51:17 +02:00
Yuri Kuznetsov
03224cc4f6 fixes 2021-01-28 15:39:38 +02:00
Yuri Kuznetsov
482754eddb container prevent setting twice 2021-01-28 14:30:08 +02:00
Yuri Kuznetsov
7fcf6874e3 deprecation msg 2021-01-28 14:24:46 +02:00
Yuri Kuznetsov
a3e0eee8d4 Merge branch 'hotfix/6.1.1' 2021-01-28 14:12:24 +02:00
Yuri Kuznetsov
453589de92 fix popup notification 2021-01-28 14:06:22 +02:00
Yuri Kuznetsov
b7ffb06f9c fix auth 2021-01-28 13:51:50 +02:00
Yuri Kuznetsov
35a209bcb6 installer fix 2021-01-28 13:43:36 +02:00
Yuri Kuznetsov
c3a2a15608 fix auth 2021-01-28 13:39:40 +02:00
Yuri Kuznetsov
9acdfe5dcf config writer 2021-01-28 13:14:40 +02:00
Yuri Kuznetsov
9ec8056d89 dev 2021-01-28 12:38:52 +02:00
Yuri Kuznetsov
b9c2cc2c4f user type filter fix 2021-01-28 10:32:48 +02:00
Yuri Kuznetsov
675a2811d4 redactoring 2021-01-28 00:10:18 +02:00
Yuri Kuznetsov
b1df5f533b fix typo 2021-01-27 23:56:54 +02:00
Yuri Kuznetsov
a61cf3f889 fix 2021-01-27 13:11:27 +02:00
Yuri Kuznetsov
ace09646c6 auth refactoring 2021-01-27 13:10:47 +02:00
Yuri Kuznetsov
f42c33d77a username validation 2021-01-27 12:27:33 +02:00
Yuri Kuznetsov
d2113c4379 auth refactoring 2021-01-27 11:23:40 +02:00
Yuri Kuznetsov
0d202499bc fix 2021-01-26 20:53:35 +02:00
Yuri Kuznetsov
9e60778075 Merge branch 'hotfix/6.1.1' 2021-01-26 18:38:54 +02:00
Yuri Kuznetsov
be6896f34c fix log loader 2021-01-26 18:38:43 +02:00
Yuri Kuznetsov
4e78e4019f auth refactoring 2021-01-26 18:09:28 +02:00
Yuri Kuznetsov
823d13af34 cs fix 2021-01-26 17:38:47 +02:00
Yuri Kuznetsov
4007870bfb auth refactoring 2021-01-26 17:24:00 +02:00
Yuri Kuznetsov
5d92f98548 Merge branch 'hotfix/6.1.1' 2021-01-26 17:02:19 +02:00
Yuri Kuznetsov
e5a3a0637d fix deprecated 2021-01-26 17:02:01 +02:00
Yuri Kuznetsov
cbbff69003 auth refactoring 2021-01-26 17:00:53 +02:00
Yuri Kuznetsov
f40240d8cb Auth refacoring 2021-01-26 15:08:59 +02:00
Yuri Kuznetsov
9671599fc9 fix method trailing comma 2021-01-26 15:08:43 +02:00
Yuri Kuznetsov
e1be421410 Merge branch 'master' into version/6.2 2021-01-26 14:56:24 +02:00
Taras Machyshyn
068653ad3e Merge branch 'master' of https://github.com/espocrm/espocrm 2021-01-26 12:59:58 +02:00
Taras Machyshyn
cd2a2c2639 Upgrade fixes 2021-01-26 12:59:28 +02:00
Yuri Kuznetsov
2d37dde8b8 year 2021-01-26 12:06:35 +02:00
Yuri Kuznetsov
42613c79b6 v 2021-01-26 11:30:07 +02:00
Taras Machyshyn
f4a80ed856 2021 license 2021-01-25 16:46:11 +02:00
Taras Machyshyn
39610bce24 Merge branch 'master' of https://github.com/espocrm/espocrm into version/6.2 2021-01-25 16:41:36 +02:00
Taras Machyshyn
124cce55bd 2021 license 2021-01-25 16:37:54 +02:00
Taras Machyshyn
589aa4ae40 Merge branch 'master' of https://github.com/espocrm/espocrm 2021-01-25 15:44:36 +02:00
Yuri Kuznetsov
41ccba7955 fix deprecated 2021-01-25 15:31:36 +02:00
Taras Machyshyn
ac2613682c Merge master 2021-01-25 14:55:03 +02:00
Taras Machyshyn
8a46cfb0da Merge branch 'master' of https://github.com/espocrm/espocrm 2021-01-25 14:53:29 +02:00
Yuri Kuznetsov
9c0643b61f Merge branch 'hotfix/6.0.10' 2021-01-25 11:53:10 +02:00
Yuri Kuznetsov
d0273febf9 Rename Address class 2021-01-24 17:34:58 +02:00
Yuri Kuznetsov
5610ed6e15 Currency field utils 2021-01-24 17:13:03 +02:00
Yuri Kuznetsov
89ff894917 fix address 2021-01-24 15:39:29 +02:00
Yuri Kuznetsov
e2b6f0c70f cs fix 2021-01-23 21:22:21 +02:00
Yuri Kuznetsov
654741261b Address formatter 2021-01-23 15:11:56 +02:00
Taras Machyshyn
f2831f84df Merge branch 'master' of https://github.com/espocrm/espocrm 2021-01-21 16:17:22 +02:00
Yuri Kuznetsov
2635ed69ac cleanup 2021-01-21 11:19:25 +02:00
Yuri Kuznetsov
18e0044373 orm defs 2021-01-21 10:36:37 +02:00
Yuri Kuznetsov
a9759a20c2 Merge branch 'master' into version/6.2 2021-01-19 17:47:20 +02:00
Yuri Kuznetsov
f5b9673044 Select builder 2021-01-19 17:43:33 +02:00
Yuri Kuznetsov
9756bfbc4d Rename getRawParams method 2021-01-19 17:36:01 +02:00
Taras Machyshyn
1ae125ceb1 Merge branch 'master' of https://github.com/espocrm/espocrm 2021-01-19 12:57:13 +02:00
Milan Horák
443d010a59 Update Email.json (#1883)
Unified terminology, translated untranslated items, typos correction.
2021-01-18 15:43:35 +02:00
Yuri Kuznetsov
fcdc704cc2 Merge branch 'hotfix/6.0.10' 2021-01-18 13:58:34 +02:00
Yuri Kuznetsov
2416cf6ad5 fix popup notification service 2021-01-15 16:07:14 +02:00
Yuri Kuznetsov
9cf03fcbb0 fix orm notice 2021-01-14 14:09:50 +02:00
Yuri Kuznetsov
43c524533c global search cs fix 2021-01-13 21:12:53 +02:00
Yuri Kuznetsov
600ae5aed6 orm left function 2021-01-13 11:31:21 +02:00
Yuri Kuznetsov
a9fb352fd9 log handler fix 2021-01-12 09:16:41 +02:00
Yuri Kuznetsov
dd2434d4b4 Merge branch 'master' of github.com:espocrm/espocrm 2021-01-11 13:12:23 +02:00
Yuri Kuznetsov
3f221878e8 file manager change 2021-01-11 13:10:39 +02:00
Eymen Elkum
876dbb3ab4 link field keep name value in search mode (#1882) 2021-01-11 13:09:08 +02:00
Yuri Kuznetsov
97e7b1982f Merge branch 'hotfix/6.0.10' 2021-01-11 12:24:35 +02:00
Yuri Kuznetsov
d78df859b1 Merge branch 'hotfix/6.0.10' 2021-01-11 11:33:05 +02:00
Taras Machyshyn
aa09f8789c Merge branch 'master' of https://github.com/espocrm/espocrm 2021-01-06 12:03:50 +02:00
Yuri Kuznetsov
106ffe5df7 Config file permissins fix 2021-01-05 18:56:07 +02:00
Taras Machyshyn
9de775e0c9 Merge branch 'master' of https://github.com/espocrm/espocrm 2021-01-05 14:17:15 +02:00
Yuri Kuznetsov
90a6c85aff Merge branch 'stable' 2021-01-04 12:39:12 +02:00
Taras Machyshyn
ead92aac31 Merge branch 'master' of https://github.com/espocrm/espocrm 2021-01-04 10:51:48 +02:00
Yuri Kuznetsov
97ff03f87e Fix DBAL 2020-12-31 15:17:28 +02:00
Yuri Kuznetsov
ec40acfac1 cs fixes 2020-12-31 15:12:44 +02:00
Yuri Kuznetsov
52904999fb Merge branch 'master' of https://github.com/espocrm/espocrm 2020-12-31 10:01:44 +02:00
Yuri Kuznetsov
14d296ea38 Merge branch 'hotfix/6.0.9' 2020-12-31 10:01:25 +02:00
Taras Machyshyn
7f6843b895 Merge 2020-12-30 15:55:43 +02:00
Taras Machyshyn
74ad947ade Fixes for DBAL v3.0 2020-12-30 15:36:39 +02:00
Yuri Kuznetsov
3dc1a156d4 orm has join alias 2020-12-30 12:35:57 +02:00
Yuri Kuznetsov
b6a6cf052b add modal fixes 2020-12-29 13:29:24 +02:00
Eymen Elkum
ae3975e3dd array field modal checkboxes (#1864) 2020-12-29 13:19:02 +02:00
Yuri Kuznetsov
79b2beba8f manual merge 2020-12-29 13:15:33 +02:00
dependabot[bot]
e7345f678c Bump ini from 1.3.5 to 1.3.8 (#1873)
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-29 13:13:18 +02:00
Yuri Kuznetsov
771f8a8430 renormalize line endings 2020-12-28 18:23:21 +02:00
Yuri Kuznetsov
ddef5312fd fix gitignore 2020-12-28 18:20:44 +02:00
Yuri Kuznetsov
43a7085f7c gitattributes file 2020-12-28 18:20:20 +02:00
Taras Machyshyn
fd11c1d5bd Merge master 2020-12-28 13:13:20 +02:00
Taras Machyshyn
5cf06bce7e Upgrade DBAL v3.0 2020-12-28 12:22:10 +02:00
Yuri Kuznetsov
f5232dc5af Merge branch 'master' of github.com:espocrm/espocrm 2020-12-28 11:52:32 +02:00
Yuri Kuznetsov
d0cf57cb66 Merge branch 'hotfix/6.0.9' 2020-12-28 11:52:21 +02:00
Yuri Kuznetsov
713ecb3be7 fix orm select builder 2020-12-25 14:02:42 +02:00
Yuri Kuznetsov
e43265fe57 gruntfile fix 2020-12-23 09:33:19 +02:00
Yuri Kuznetsov
9642f9ae41 entity manager factory 2020-12-23 09:32:51 +02:00
Yuri Kuznetsov
5f95859bcd delete orm metadata service 2020-12-23 09:21:15 +02:00
Yuri Kuznetsov
6fecf61648 fix notice 2020-12-21 15:35:11 +02:00
Yuri Kuznetsov
85c199d563 cd fix 2020-12-21 14:15:10 +02:00
Yuri Kuznetsov
facb5c747d fix test 2020-12-21 13:58:47 +02:00
Yuri Kuznetsov
1b517a6eb1 cleanup 2020-12-21 13:16:12 +02:00
Yuri Kuznetsov
99dc6b1623 phpunit config 2020-12-21 13:13:30 +02:00
Yuri Kuznetsov
e569b8b9a7 fix tests 2020-12-21 13:07:14 +02:00
Yuri Kuznetsov
f0b0c55d9b Merge branch 'master' of github.com:espocrm/espocrm 2020-12-21 13:01:37 +02:00
Yuri Kuznetsov
df179212b1 orm metadata refactoring 2020-12-21 13:01:07 +02:00
Yuri Kuznetsov
19ccf09c20 Merge branch 'hotfix/6.0.9' 2020-12-21 11:50:25 +02:00
Yuri Kuznetsov
d194eac5bc laminas service manager dependency 2020-12-18 15:06:00 +02:00
Yuri Kuznetsov
5ffd03ca85 application runner refactoring 2020-12-17 18:43:57 +02:00
Yuri Kuznetsov
d6dec82610 Merge branch 'hotfix/6.0.9' 2020-12-17 16:22:07 +02:00
Yuri Kuznetsov
521a166c92 ceanup 2020-12-16 19:44:08 +02:00
Yuri Kuznetsov
2ca97d4e31 Merge branch 'master' of https://github.com/espocrm/espocrm 2020-12-15 09:46:35 +02:00
Yuri Kuznetsov
b30df2f6e2 orm select builder check has join 2020-12-15 09:46:29 +02:00
Yuri Kuznetsov
4ab0d765e3 fix notices 2020-12-14 14:52:18 +02:00
Yuri Kuznetsov
58d3929bee fix notices and cs 2020-12-14 13:59:52 +02:00
Yuri Kuznetsov
35eff68f64 fix notices 2020-12-14 13:59:25 +02:00
Yuri Kuznetsov
bb10b0a266 controller manager test 2020-12-14 13:48:32 +02:00
Yuri Kuznetsov
9dc050332e controller manager notice fix 2020-12-14 13:48:25 +02:00
Yuri Kuznetsov
c65b9d8cc2 fix merge notice 2020-12-14 13:19:50 +02:00
Yuri Kuznetsov
2d26d1a9d1 fix notice 2020-12-14 13:18:23 +02:00
Yuri Kuznetsov
a2be80501a fix query composer notices 2020-12-14 13:15:07 +02:00
Yuri Kuznetsov
e19462c045 fix query composer notice 2020-12-14 13:10:07 +02:00
Yuri Kuznetsov
8a23bba39a fix authentication param order 2020-12-14 13:01:37 +02:00
Yuri Kuznetsov
105b494710 fix binding for php 8 2020-12-14 12:49:16 +02:00
dependabot[bot]
e35ecf96ca Bump ini from 1.3.5 to 1.3.7 (#1862)
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-14 11:19:34 +02:00
Yuri Kuznetsov
df16f37912 cleanup 2020-12-09 14:25:53 +02:00
Yuri Kuznetsov
d3dcaa92e5 log handlers 2020-12-08 14:24:56 +02:00
Yuri Kuznetsov
b1e31c9999 fix tests 2020-12-08 12:53:16 +02:00
Yuri Kuznetsov
3a89b16b91 log naming change 2020-12-07 16:13:51 +02:00
Yuri Kuznetsov
06ff48515c log cleanup 2020-12-07 16:01:49 +02:00
Yuri Kuznetsov
b870025f88 cleanup 2020-12-07 13:39:57 +02:00
Yuri Kuznetsov
7041a9ca9d mysql locker fix 2020-12-07 12:13:20 +02:00
Yuri Kuznetsov
2f40830630 update mail-mime-parser 2020-12-07 12:04:09 +02:00
Yuri Kuznetsov
55b7d81922 pdf font face list 2020-12-07 11:46:56 +02:00
Yuri Kuznetsov
07d63013aa cleanup 2020-12-05 22:16:48 +02:00
Yuri Kuznetsov
70d15cbac5 pdf barcode tag 2020-12-05 15:37:14 +02:00
Yuri Kuznetsov
fad183e20a kanban order fix 2020-12-03 16:28:03 +02:00
Yuri Kuznetsov
ad2e977b7c cs fix 2020-12-03 15:52:14 +02:00
Yuri Kuznetsov
bdf5664672 Merge branch 'hotfix/6.0.8' 2020-12-01 12:15:16 +02:00
Yuri Kuznetsov
83a44c60c1 pdf tool 2020-12-01 12:14:08 +02:00
Yuri Kuznetsov
43b529ea8b Merge branch 'stable' 2020-12-01 10:23:52 +02:00
Yuri Kuznetsov
08fa801878 htmlizer injectable factory 2020-11-26 13:13:38 +02:00
Yuri Kuznetsov
426260de00 Merge branch 'master' of github.com:espocrm/espocrm 2020-11-26 13:01:44 +02:00
Yuri Kuznetsov
86ff40e408 Merge branch 'hotfix/6.0.7' 2020-11-26 13:01:29 +02:00
Yuri Kuznetsov
4272376278 tab groups 2020-11-25 13:47:48 +02:00
Yuri Kuznetsov
3d2857eec2 Update CONTRIBUTING.md 2020-11-25 13:45:48 +02:00
Yuri Kuznetsov
4c0298aed9 Update CONTRIBUTING.md 2020-11-25 13:44:27 +02:00
Yuri Kuznetsov
e9917f4fca Merge branch 'stable' 2020-11-18 13:28:49 +02:00
Yuri Kuznetsov
826ba4c97c app info improvements 2020-11-17 12:51:22 +02:00
Yuri Kuznetsov
5ef73d3c08 fix typo 2020-11-17 11:49:20 +02:00
Yuri Kuznetsov
26e1d1d81d di binding 2020-11-17 11:35:41 +02:00
Yuri Kuznetsov
a76f5498cb Merge branch 'stable' 2020-11-16 15:00:33 +02:00
Yuri Kuznetsov
66075b3d9d Merge branch 'master' of github.com:espocrm/espocrm 2020-11-16 11:26:03 +02:00
Yuri Kuznetsov
524773f855 update packages 2020-11-16 11:25:18 +02:00
Yuri Kuznetsov
2935118dab repository: calling updateFetchedValues always after save 2020-11-10 13:17:36 +02:00
Yuri Kuznetsov
989d431acf auth token manager 2020-11-10 10:51:50 +02:00
Yuri Kuznetsov
2d385c163f entity manager page 2020-11-05 14:12:57 +02:00
Yuri Kuznetsov
4e1e6bf776 search apply button 2020-11-04 14:23:11 +02:00
Yuri Kuznetsov
0d50bc9563 Merge branch 'hotfix/6.0.4' 2020-11-03 16:44:40 +02:00
Yuri Kuznetsov
35cefea3a8 cleanup and cs fix 2020-11-03 12:51:10 +02:00
Yuri Kuznetsov
4fc7700e7e Merge branch 'master' of https://github.com/espocrm/espocrm 2020-11-03 12:25:51 +02:00
Yuri Kuznetsov
3b2c776060 Merge branch 'hotfix/6.0.4' 2020-11-03 12:25:38 +02:00
Yuri Kuznetsov
103e67ab8e Merge branch 'hotfix/6.0.4' 2020-11-02 12:56:14 +02:00
Yuri Kuznetsov
72256e7f8b fix notifications 2020-11-02 12:50:31 +02:00
Yuri Kuznetsov
8cdbcdcb8c kanban order 2020-11-02 12:28:19 +02:00
Yuri Kuznetsov
218dba2c78 Merge branch 'hotfix/6.0.4' 2020-11-02 12:24:30 +02:00
Yuri Kuznetsov
68b8230b99 popup notifications grouped request 2020-11-02 12:24:03 +02:00
Yuri Kuznetsov
9d872c3fd7 cs fix 2020-11-02 11:13:06 +02:00
Yuri Kuznetsov
9f2b2de261 Merge branch 'stable' 2020-10-28 13:26:46 +02:00
Yuri Kuznetsov
8110b7ba4b Merge branch 'stable' 2020-10-27 12:45:51 +02:00
Pomazan Bogdan
95ed02f0e4 Update Admin.json (#1814) 2020-10-26 15:34:51 +02:00
Yuri Kuznetsov
87e94bc5a7 Merge branch 'master' of github.com:espocrm/espocrm 2020-10-26 14:58:18 +02:00
Yuri Kuznetsov
b757f18d53 kanban refactoring 2020-10-24 17:23:48 +03:00
4019 changed files with 190634 additions and 97916 deletions

11
.gitattributes vendored Normal file
View File

@@ -0,0 +1,11 @@
* text=auto
*.php text eol=crlf
*.js text eol=crlf
*.json text eol=crlf
*.md text eol=crlf
*.less text eol=crlf
*.css text eol=crlf
*.tpl text eol=crlf
*.html text eol=crlf
*.png binary

17
.github/CONTRIBUTING.md vendored Normal file
View File

@@ -0,0 +1,17 @@
## Pull Requests
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.
See [Code Style Guidelines](https://github.com/espocrm/espocrm/wiki/Code-Style-Guidelines).
Branches:
* *hotfix/** 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.
## Issues
When reporting a possible bug please provide detail steps so that we will be able to reproduce the issue. Please try not to use phrases like "very big bug", "huge issue", etc. No need to use exclamation marks as well.
Note that we don't provide developer help or any kind of support on Github. Please use our [forum](https://forum.espocrm.com) for this.

30
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,30 @@
---
name: Bug report
about: Create a bug report
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. ...
2. ...
3. ...
...
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**EspoCRM version**
Specify the EspoCRM version (or versions) on which the bug occurs.
**Additional context**
Add any other context about the problem here.

4
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,4 @@
contact_links:
- name: EspoCRM forum
url: https://forum.espocrm.com/
about: Please use our forum to ask questions not related to product development

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for EspoCRM
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is.
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

6
.gitignore vendored
View File

@@ -4,6 +4,7 @@
/data/preferences/*
/data/.backup/*
/data/config.php
/data/config-internal.php
/data/tmp/*
/build
/node_modules
@@ -18,4 +19,7 @@
/composer.phar
/vendor/
/custom/Espo/Custom/*
/install/config.php
/custom/Espo/Modules/*
!/custom/Espo/Custom/.htaccess
!/custom/Espo/Modules/.htaccess
/install/config.php

View File

@@ -1,24 +1,44 @@
<ifModule mod_headers.c>
Header always set Access-Control-Allow-Methods "POST, GET, PUT, PATCH, DELETE"
Header always set Access-Control-Allow-Methods "POST, GET, PUT, PATCH, DELETE"
</ifModule>
DirectoryIndex index.php index.html
DirectoryIndex index.php
Options -Indexes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteEngine On
# PROTECTED DIRECTORIES
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^/?(api|client)/ - [F]
# Forbid access. Not actual as redirect to `public` is applied.
# An extra security measure if redirect not fired.
RewriteRule ^/?data/ - [F]
RewriteRule ^/?application/ - [F]
RewriteRule ^/?custom/ - [F]
RewriteRule ^/?vendor/ - [F]
RewriteRule /?web\.config - [F]
RewriteRule ^/?data/ - [F]
RewriteRule ^/?application/ - [F]
RewriteRule ^/?custom/ - [F]
RewriteRule ^/?vendor/ - [F]
RewriteRule ^/?client/?$ - [F]
#END PROTECTED DIRECTORIES
# Forbid `public` dir.
RewriteCond %{ENV:REDIRECT_STATUS} !=200
RewriteRule ^/?public/? - [F,L]
RewriteRule .* - [E=HTTP_ESPO_CGI_AUTH:%{HTTP:Authorization}]
# Skip redirect for `client` dir.
RewriteRule ^client/ - [L]
RewriteRule /?web\.config - [F]
</IfModule>
# {#dev}
# Skip redirect for `node_modules` dir. Actual only for dev environment.
RewriteRule ^node_modules/ - [L]
# {/dev}
# Store base path.
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
# Add trailing slash.
RewriteCond %{DOCUMENT_ROOT}/%{ENV:BASE}/public/$1 -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=301,NE]
# Rewrite to `public` dir.
RewriteRule ^((?!public/).*)$ %{ENV:BASE}/public/$1 [L,NC]
RewriteRule .* - [E=HTTP_ESPO_CGI_AUTH:%{HTTP:Authorization}]
</IfModule>

View File

@@ -1,15 +0,0 @@
## Pull Requests
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.
[Code Style Guidelines](https://github.com/espocrm/espocrm/wiki/Code-Style-Guidelines).
Branches:
* *hotfix/** 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.
## Issues
We don't provide developer help or any kind of support on github. Please use our [forum](https://forum.espocrm.com) for this.

View File

@@ -2,7 +2,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -19,113 +19,67 @@
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
************************************************************************/
/**
* * `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 test running
* * `grant run-tests` - build and run unit and integratino tests
*/
/**
* * `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
*/
module.exports = function (grunt) {
const fs = require('fs');
const cp = require('child_process');
const path = require('path');
var jsFilesToMinify = [
'client/lib/jquery-2.1.4.min.js',
'client/lib/underscore-min.js',
'client/lib/es6-promise.min.js',
'client/lib/backbone-min.js',
'client/lib/handlebars.js',
'client/lib/base64.js',
'client/lib/jquery-ui.min.js',
'client/lib/jquery.ui.touch-punch.min.js',
'client/lib/moment.min.js',
'client/lib/moment-timezone.min.js',
'client/lib/moment-timezone-data.js',
'client/lib/jquery.timepicker.min.js',
'client/lib/jquery.autocomplete.js',
'client/lib/bootstrap.min.js',
'client/lib/bootstrap-datepicker.js',
'client/lib/bull.js',
'client/lib/marked.min.js',
'client/lib/autobahn.js',
'client/lib/gridstack.all.js',
module.exports = grunt => {
'client/src/namespace.js',
'client/src/exceptions.js',
'client/src/loader.js',
'client/src/utils.js',
const pkg = grunt.file.readJSON('package.json');
const bundleConfig = require('./frontend/bundle-config.json');
'client/src/acl.js',
'client/src/model.js',
'client/src/model-offline.js',
'client/src/ajax.js',
'client/src/controller.js',
let jsFilesToBundle = getBundleLibList().concat(bundleConfig.jsFiles);
let jsFilesToCopy = getCopyLibDataList();
'client/src/ui.js',
'client/src/acl-manager.js',
'client/src/cache.js',
'client/src/storage.js',
'client/src/models/settings.js',
'client/src/language.js',
'client/src/metadata.js',
'client/src/field-manager.js',
'client/src/models/user.js',
'client/src/models/preferences.js',
'client/src/model-factory.js',
'client/src/collection-factory.js',
'client/src/pre-loader.js',
'client/src/controllers/base.js',
'client/src/router.js',
'client/src/date-time.js',
'client/src/layout-manager.js',
'client/src/theme-manager.js',
'client/src/session-storage.js',
'client/src/view-helper.js',
'client/src/page-title.js',
let libFilesToMinify = jsFilesToCopy
.filter(item => item.minify)
.reduce((map, item) => (
map[item.dest] = item.dest,
map
), {});
'client/src/app.js'
];
let currentPath = path.dirname(fs.realpathSync(__filename));
function camelCaseToHyphen (string){
if (string == null) {
return string;
}
return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
}
let themeList = [];
var fs = require('fs');
var cp = require('child_process');
var path = require('path');
var currentPath = path.dirname(fs.realpathSync(__filename));
var themeList = [];
fs.readdirSync('application/Espo/Resources/metadata/themes').forEach(function (file) {
fs.readdirSync('application/Espo/Resources/metadata/themes').forEach(file => {
themeList.push(file.substr(0, file.length - 5));
});
var cssminFilesData = {};
var lessData = {};
themeList.forEach(function (theme) {
var name = camelCaseToHyphen(theme);
var files = {};
let cssminFilesData = {};
let lessData = {};
themeList.forEach(theme => {
let name = camelCaseToHyphen(theme);
let files = {};
files['client/css/espo/'+name+'.css'] = 'frontend/less/'+name+'/main.less';
files['client/css/espo/'+name+'-iframe.css'] = 'frontend/less/'+name+'/iframe/main.less';
cssminFilesData['client/css/espo/'+name+'.css'] = 'client/css/espo/'+name+'.css';
cssminFilesData['client/css/espo/'+name+'-iframe.css'] = 'client/css/espo/'+name+'-iframe.css';
var o = {
let o = {
options: {
yuicompress: true,
},
files: files
files: files,
};
lessData[theme] = o;
});
var pkg = grunt.file.readJSON('package.json');
grunt.initConfig({
pkg: pkg,
@@ -135,11 +89,11 @@ module.exports = function (grunt) {
mode: 0755,
create: [
'build/tmp',
]
},
],
}
}
},
clean: {
start: ['build/EspoCRM-*'],
final: ['build/tmp'],
@@ -147,27 +101,48 @@ module.exports = function (grunt) {
beforeFinal: {
src: [
'build/tmp/custom/Espo/Custom/*',
'build/tmp/custom/Espo/Modules/*',
'!build/tmp/custom/Espo/Custom/.htaccess',
'!build/tmp/custom/Espo/Modules/.htaccess',
'build/tmp/install/config.php',
'build/tmp/vendor/*/*/.git',
'build/tmp/custom/Espo/Custom/*',
'build/tmp/client/custom/*',
'!build/tmp/client/custom/modules',
'build/tmp/client/custom/modules/*',
]
}
},
less: lessData,
cssmin: {
themes: {
files: cssminFilesData
}
files: cssminFilesData,
},
},
uglify: {
options: {
mangle: false,
mangle: true,
sourceMap: true,
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
output: {
comments: /^!/,
},
},
bundle: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
},
files: {
'build/tmp/client/espo.min.js': jsFilesToBundle,
},
},
lib: {
files: libFilesToMinify,
},
'build/tmp/client/espo.min.js': jsFilesToMinify.map(function (item) {
return '' + item;
})
},
copy: {
options: {
mode: true,
@@ -184,11 +159,14 @@ module.exports = function (grunt) {
'img/**',
'css/**',
'sounds/**',
'custom/**'
'custom/**',
],
dest: 'build/tmp/client',
},
frontendLib: {
files: jsFilesToCopy,
},
frontendCommitedLib: {
expand: true,
dot: true,
cwd: 'client/lib',
@@ -199,14 +177,14 @@ module.exports = function (grunt) {
expand: true,
dot: true,
src: [
'api/**',
'application/**',
'custom/**',
'data/.data',
'install/**',
'portal/**',
'vendor/**',
'html/**',
'public/**',
'install/**',
'bin/**',
'bootstrap.php',
'cron.php',
'daemon.php',
@@ -217,7 +195,6 @@ module.exports = function (grunt) {
'extension.php',
'websocket.php',
'command.php',
'oauth-callback.php',
'index.php',
'LICENSE.txt',
'.htaccess',
@@ -233,6 +210,7 @@ module.exports = function (grunt) {
dest: 'build/EspoCRM-<%= pkg.version %>/',
},
},
chmod: {
php: {
options: {
@@ -248,20 +226,20 @@ module.exports = function (grunt) {
'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 %>/install',
'build/EspoCRM-<%= pkg.version %>/portal',
'build/EspoCRM-<%= pkg.version %>/api',
'build/EspoCRM-<%= pkg.version %>/api/v1',
'build/EspoCRM-<%= pkg.version %>/api/v1/portal-access',
'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: {
@@ -277,83 +255,125 @@ module.exports = function (grunt) {
'build/EspoCRM-<%= pkg.version %>/application/Espo/Modules',
]
},
executable: {
options: {
mode: '754'
},
src: [
'build/EspoCRM-<%= pkg.version %>/bin/*',
],
},
},
replace: {
version: {
options: {
patterns: [
{
match: 'version',
replacement: '<%= pkg.version %>'
replacement: '<%= pkg.version %>',
}
]
},
files: [
{
src: 'build/tmp/application/Espo/Resources/defaults/config.php',
dest: 'build/tmp/application/Espo/Resources/defaults/config.php'
dest: 'build/tmp/application/Espo/Resources/defaults/config.php',
}
]
}
],
},
dev: {
options: {
patterns: [
{
match: /\# \{\#dev\}(.*)\{\/dev\}/gs,
replacement: '',
}
]
},
files: [
{
src: 'build/tmp/.htaccess',
dest: 'build/tmp/.htaccess',
}
],
},
},
});
grunt.registerTask("chmod-folders", function() {
cp.execSync("find . -type d -exec chmod 755 {} + ", {stdio: 'ignore', cwd: 'build/EspoCRM-' + pkg.version});
grunt.registerTask('chmod-folders', () => {
cp.execSync(
"find . -type d -exec chmod 755 {} + ",
{
stdio: 'ignore',
cwd: 'build/EspoCRM-' + pkg.version,
}
);
});
grunt.registerTask("composer", function() {
cp.execSync("composer install --ignore-platform-reqs --no-dev", {stdio: 'ignore'});
grunt.registerTask('composer-install', () => {
cp.execSync("composer install --no-dev", {stdio: 'ignore'});
});
grunt.registerTask("composer-dev", function() {
cp.execSync("composer install --ignore-platform-reqs", {stdio: 'ignore'});
grunt.registerTask('composer-install-dev', () => {
cp.execSync("composer install", {stdio: 'ignore'});
});
grunt.registerTask("upgrade", function() {
grunt.registerTask('upgrade', () => {
cp.execSync("node diff --all --vendor", {stdio: 'inherit'});
});
grunt.registerTask("unit-tests-run", function() {
cp.execSync("vendor/bin/phpunit --bootstrap=./vendor/autoload.php ./tests/unit", {stdio: 'inherit'});
grunt.registerTask('unit-tests-run', () => {
cp.execSync("vendor/bin/phpunit ./tests/unit", {stdio: 'inherit'});
});
grunt.registerTask("integration-tests-run", function() {
cp.execSync("vendor/bin/phpunit --bootstrap=./vendor/autoload.php ./tests/integration", {stdio: 'inherit'});
grunt.registerTask('integration-tests-run', () => {
cp.execSync("vendor/bin/phpunit ./tests/integration", {stdio: 'inherit'});
});
grunt.registerTask("zip", function() {
var fs = require('fs');
grunt.registerTask('zip', () => {
const archiver = require('archiver');
var resolve = this.async();
let resolve = this.async();
var folder = 'EspoCRM-' + pkg.version;
let folder = 'EspoCRM-' + pkg.version;
var zipPath = 'build/' + folder +'.zip';
if (fs.existsSync(zipPath)) fs.unlinkSync(zipPath);
let zipPath = 'build/' + folder +'.zip';
var archiver = require('archiver');
var archive = archiver('zip');
if (fs.existsSync(zipPath)) {
fs.unlinkSync(zipPath);
}
archive.on('error', function (err) {
let archive = archiver('zip');
archive.on('error', err => {
grunt.fail.warn(err);
});
var zipOutput = fs.createWriteStream(zipPath);
zipOutput.on('close', function () {
let zipOutput = fs.createWriteStream(zipPath);
zipOutput.on('close', () => {
console.log("EspoCRM package has been built.");
resolve();
});
archive.directory(currentPath + '/build/' + folder, folder).pipe(zipOutput);
archive
.directory(currentPath + '/build/' + folder, folder)
.pipe(zipOutput)
.finalize();
});
archive.finalize();
grunt.registerTask('npm-install', () => {
cp.execSync("npm install", {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');
grunt.loadNpmTasks('grunt-contrib-uglify-es');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-replace');
grunt.loadNpmTasks('grunt-chmod');
@@ -363,10 +383,12 @@ module.exports = function (grunt) {
'mkdir:tmp',
'less',
'cssmin',
'uglify',
'uglify:bundle',
'copy:frontendFolders',
'copy:frontendLib',
'copy:frontendCommitedLib',
'copy:backend',
'uglify:lib',
'replace',
'clean:beforeFinal',
'copy:final',
@@ -374,16 +396,22 @@ module.exports = function (grunt) {
'chmod:php',
'chmod:folders',
'chmod:foldersWritable',
'chmod:executable',
'clean:final',
]);
grunt.registerTask('default', [
'composer',
grunt.registerTask('build', [
'composer-install',
'npm-install',
'offline',
]);
grunt.registerTask('default', [
'build',
]);
grunt.registerTask('release', [
'default',
'build',
'upgrade',
'zip',
'clean:release',
@@ -396,7 +424,7 @@ module.exports = function (grunt) {
]);
grunt.registerTask('run-unit-tests', [
'composer-dev',
'composer-install-dev',
'unit-tests-run',
]);
@@ -406,12 +434,87 @@ module.exports = function (grunt) {
]);
grunt.registerTask('dev', [
'composer-dev',
'composer-install-dev',
'less',
]);
grunt.registerTask('test', [
'composer-dev',
'composer-install-dev',
'npm-install',
'offline',
]);
};
function getBundleLibList() {
const libs = require('./frontend/libs.json');
let list = [];
libs.forEach(item => {
if (!item.bundle) {
return;
}
if (item.files) {
item.files.forEach(item => {
list.push(item.src);
});
return;
}
if (!item.src) {
throw new Error("No lib src.");
}
list.push(item.src);
});
return list;
}
function getCopyLibDataList() {
const libs = require('./frontend/libs.json');
let list = [];
libs.forEach(item => {
if (item.bundle) {
return;
}
let minify = item.minify;
if (item.files) {
item.files.forEach(item => {
list.push({
src: item.src,
dest: 'build/tmp/' + (item.dest || 'client/lib/' + item.src.split('/').pop()),
minify: minify,
});
});
return;
}
if (!item.src) {
throw new Error("No lib src.");
}
list.push({
src: item.src,
dest: 'build/tmp/' + (item.dest || 'client/lib/' + item.src.split('/').pop()),
minify: minify,
});
});
return list;
}
function camelCaseToHyphen(string){
if (string === null) {
return string;
}
return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
}

View File

@@ -8,7 +8,7 @@ It's a web application with a frontend designed as a single page application and
### Requirements
* PHP 7.2 and later (with pdo, json, gd, openssl, zip, imap, mbstring, curl extensions);
* PHP 7.3 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/).

View File

@@ -1,92 +0,0 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy 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\Acl;
use Espo\Entities\User as EntityUser;
use Espo\ORM\Entity;
class Attachment extends \Espo\Core\Acl\Acl
{
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) {
return true;
}
if ($entity->get('parentType') === 'Settings') {
return true;
}
$parent = null;
$hasParent = false;
if ($entity->get('parentId') && $entity->get('parentType')) {
$hasParent = true;
$parent = $this->getEntityManager()->getEntity($entity->get('parentType'), $entity->get('parentId'));
} else if ($entity->get('relatedId') && $entity->get('relatedType')) {
$hasParent = true;
$parent = $this->getEntityManager()->getEntity($entity->get('relatedType'), $entity->get('relatedId'));
}
if ($hasParent) {
if ($parent) {
if ($parent->getEntityType() === 'Note') {
if ($parent->get('parentId') && $parent->get('parentType')) {
$parentOfParent = $this->getEntityManager()->getEntity($parent->get('parentType'), $parent->get('parentId'));
if ($parentOfParent && $this->getAclManager()->checkEntity($user, $parentOfParent)) {
return true;
}
} else {
return true;
}
} else {
if ($this->getAclManager()->checkEntity($user, $parent)) {
return true;
}
}
}
} else {
return true;
}
if ($this->checkEntity($user, $entity, $data, 'read')) {
return true;
}
return false;
}
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($user->id === $entity->get('createdById')) {
return true;
}
return false;
}
}

View File

@@ -1,64 +0,0 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy 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\Acl;
use Espo\Entities\User as EntityUser;
use Espo\ORM\Entity;
class EmailAddress extends \Espo\Core\Acl\Acl
{
public function checkEditInEntity(EntityUser $user, Entity $entity, Entity $excludeEntity)
{
$id = $entity->id;
$isFobidden = false;
$repository = $this->getEntityManager()->getRepository('EmailAddress');
if (!$user->isAdmin()) {
$entityWithSameAddressList = $repository->getEntityListByAddressId($id, $excludeEntity);
foreach ($entityWithSameAddressList as $e) {
if (!$this->getAclManager()->check($user, $e, 'edit')) {
$isFobidden = true;
if (
$e->getEntityType() === 'User' &&
$e->isPortal() &&
$excludeEntity->getEntityType() === 'Contact' &&
$e->get('contactId') === $excludeEntity->id
) {
$isFobidden = false;
}
if ($isFobidden) break;
}
}
}
return !$isFobidden;
}
}

View File

@@ -1,119 +0,0 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy 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\Acl;
use Espo\Entities\User as EntityUser;
use Espo\ORM\Entity;
class Note extends \Espo\Core\Acl\Acl
{
protected $deleteThresholdPeriod = '1 month';
protected $editThresholdPeriod = '7 days';
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($entity->get('type') === 'Post' && $user->id === $entity->get('createdById')) {
return true;
}
return false;
}
public function checkEntityCreate(EntityUser $user, Entity $entity, $data)
{
if ($entity->get('parentId') && $entity->get('parentType')) {
$parent = $this->getEntityManager()->getEntity($entity->get('parentType'), $entity->get('parentId'));
if ($parent) {
if ($this->getAclManager()->checkEntity($user, $parent, 'stream')) {
return true;
}
}
return false;
}
return true;
}
public function checkEntityEdit(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) {
return true;
}
if ($this->checkEntity($user, $entity, $data, 'edit')) {
if ($this->checkIsOwner($user, $entity)) {
$createdAt = $entity->get('createdAt');
if ($createdAt) {
$noteEditThresholdPeriod = '-' . $this->getConfig()->get('noteEditThresholdPeriod', $this->editThresholdPeriod);
$dt = new \DateTime();
$dt->modify($noteEditThresholdPeriod);
try {
if ($dt->format('U') > (new \DateTime($createdAt))->format('U')) {
return false;
}
} catch (\Exception $e) {
return false;
}
}
}
return true;
}
return false;
}
public function checkEntityDelete(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) {
return true;
}
if ($this->checkEntity($user, $entity, $data, 'delete')) {
if ($this->checkIsOwner($user, $entity)) {
$createdAt = $entity->get('createdAt');
if ($createdAt) {
$deleteThresholdPeriod = '-' . $this->getConfig()->get('noteDeleteThresholdPeriod', $this->deleteThresholdPeriod);
$dt = new \DateTime();
$dt->modify($deleteThresholdPeriod);
try {
if ($dt->format('U') > (new \DateTime($createdAt))->format('U')) {
return false;
}
} catch (\Exception $e) {
return false;
}
}
}
return true;
}
return false;
}
}

View File

@@ -1,65 +0,0 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy 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\Acl;
use Espo\Entities\User as EntityUser;
use Espo\ORM\Entity;
class PhoneNumber extends \Espo\Core\Acl\Acl
{
public function checkEditInEntity(EntityUser $user, Entity $entity, Entity $excludeEntity)
{
$id = $entity->id;
$isFobidden = false;
$repository = $this->getEntityManager()->getRepository('PhoneNumber');
if (!$user->isAdmin()) {
$entityWithSameNumberList = $repository->getEntityListByPhoneNumberId($id, $excludeEntity);
foreach ($entityWithSameNumberList as $e) {
if (!$this->getAclManager()->check($user, $e, 'edit')) {
$isFobidden = true;
if (
$e->getEntityType() === 'User' &&
$e->isPortal() &&
$excludeEntity->getEntityType() === 'Contact' &&
$e->get('contactId') === $excludeEntity->id
) {
$isFobidden = false;
}
if ($isFobidden) break;
}
}
}
return !$isFobidden;
}
}

View File

@@ -1,73 +0,0 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy 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\Acl;
use Espo\Entities\User as EntityUser;
use Espo\ORM\Entity;
class Webhook extends \Espo\Core\Acl\Acl
{
public function checkIsOwner(EntityUser $user, Entity $entity)
{
return $user->id === $entity->get('userId') && $user->isApi();
}
public function checkEntityCreate(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) return true;
if (!$data) return false;
if ($user->isApi() && $user->id === $entity->get('userId')) return true;
return false;
}
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) return true;
if (!$data) return false;
if ($user->isApi() && $user->id === $entity->get('userId')) return true;
return false;
}
public function checkEntityDelete(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) return true;
if (!$data) return false;
if ($user->isApi() && $user->id === $entity->get('userId')) return true;
return false;
}
public function checkEntityEdit(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) return true;
if (!$data) return false;
if ($user->isApi() && $user->id === $entity->get('userId')) return true;
return false;
}
}

View File

@@ -1,93 +0,0 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy 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\AclPortal;
use \Espo\Entities\User as EntityUser;
use \Espo\ORM\Entity;
class Attachment extends \Espo\Core\AclPortal\Base
{
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) {
return true;
}
if ($entity->get('parentType') === 'Settings') {
return true;
}
$parent = null;
$hasParent = false;
if ($entity->get('parentId') && $entity->get('parentType')) {
$hasParent = true;
$parent = $this->getEntityManager()->getEntity($entity->get('parentType'), $entity->get('parentId'));
} else if ($entity->get('relatedId') && $entity->get('relatedType')) {
$hasParent = true;
$parent = $this->getEntityManager()->getEntity($entity->get('relatedType'), $entity->get('relatedId'));
}
if ($hasParent) {
if ($parent) {
if ($parent->getEntityType() === 'Note') {
if ($parent->get('parentId') && $parent->get('parentType')) {
$parentOfParent = $this->getEntityManager()->getEntity($parent->get('parentType'), $parent->get('parentId'));
if ($parentOfParent && $this->getAclManager()->checkEntity($user, $parentOfParent)) {
return true;
}
} else {
return true;
}
} else {
if ($this->getAclManager()->checkEntity($user, $parent)) {
return true;
}
}
}
} else {
return true;
}
if ($this->checkEntity($user, $entity, $data, 'read')) {
return true;
}
return false;
}
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($user->id === $entity->get('createdById')) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,46 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Acl\ActionHistoryRecord;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool
{
return $entity->get('userId') === $user->getId();
}
}

View File

@@ -0,0 +1,153 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Acl\Attachment;
use Espo\Entities\{
User,
Note,
};
use Espo\ORM\Entity;
use Espo\Core\{
ORM\EntityManager,
AclManager,
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDChecker,
Acl\Traits\DefaultAccessCheckerDependency,
};
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private $aclManager;
private $entityManager;
public function __construct(
DefaultAccessChecker $defaultAccessChecker,
AclManager $aclManager,
EntityManager $entityManager
) {
$this->defaultAccessChecker = $defaultAccessChecker;
$this->aclManager = $aclManager;
$this->entityManager = $entityManager;
}
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
if ($entity->get('parentType') === 'Settings') {
return true;
}
$parent = null;
$hasParent = false;
if ($entity->get('parentId') && $entity->get('parentType')) {
$hasParent = true;
$parent = $this->entityManager->getEntity($entity->get('parentType'), $entity->get('parentId'));
}
else if ($entity->get('relatedId') && $entity->get('relatedType')) {
$hasParent = true;
$parent = $this->entityManager->getEntity($entity->get('relatedType'), $entity->get('relatedId'));
}
if (!$parent || !$hasParent) {
if ($this->defaultAccessChecker->checkEntityRead($user, $entity, $data)) {
return true;
}
return false;
}
if ($parent->getEntityType() === 'Note') {
$result = $this->checkEntityReadNoteParent($user, $parent);
if ($result !== null) {
return $result;
}
}
else if ($this->aclManager->checkEntity($user, $parent)) {
return true;
}
if ($this->defaultAccessChecker->checkEntityRead($user, $entity, $data)) {
return true;
}
return false;
}
private function checkEntityReadNoteParent(User $user, Note $note): ?bool
{
if ($note->getTargetType() === Note::TARGET_TEAMS) {
$intersect = array_intersect(
$note->getLinkMultipleIdList('teams'),
$user->getLinkMultipleIdList('teams')
);
if (count($intersect)) {
return true;
}
return null;
}
if ($note->getTargetType() === Note::TARGET_USERS) {
$isRelated = $this->entityManager
->getRDBRepository('Note')
->getRelation($note, 'users')
->isRelated($user);
if ($isRelated) {
return true;
}
return null;
}
if (!$note->getParentId() || !$note->getParentType()) {
return null;
}
$parent = $this->entityManager->getEntity($note->getParentType(), $note->getParentId());
if ($parent && $this->aclManager->checkEntity($user, $parent)) {
return true;
}
return null;
}
}

View File

@@ -0,0 +1,52 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Acl\Attachment;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
class OwnershipChecker implements OwnershipOwnChecker
{
private const ATTR_CREATED_BY_ID = 'createdById';
public function checkOwn(User $user, Entity $entity): bool
{
if ($user->getId() === $entity->get(self::ATTR_CREATED_BY_ID)) {
return true;
}
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,26 +27,30 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Acl;
namespace Espo\Classes\Acl\AuthToken;
use Espo\Entities\User as EntityUser;
use Espo\ORM\Entity;
use Espo\Entities\User;
class Import extends \Espo\Core\Acl\Acl
use Espo\Core\{
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDChecker,
Acl\Traits\DefaultAccessCheckerDependency,
};
class AccessChecker implements AccessEntityCREDChecker
{
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) return true;
if ($user->id === $entity->get('createdById')) return true;
use DefaultAccessCheckerDependency;
return false;
private $defaultAccessChecker;
public function __construct(DefaultAccessChecker $defaultAccessChecker)
{
$this->defaultAccessChecker = $defaultAccessChecker;
}
public function checkEntityDelete(EntityUser $user, Entity $entity, $data)
public function checkCreate(User $user, ScopeData $data): bool
{
if ($user->isAdmin()) return true;
if ($user->id === $entity->get('createdById')) return true;
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,93 +27,101 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Acl;
namespace Espo\Classes\Acl\Email;
use Espo\Entities\User;
use Espo\Entities\User as EntityUser;
use Espo\ORM\Entity;
class Email extends \Espo\Core\Acl\Acl
{
protected $ownerUserIdAttribute = 'usersIds';
use Espo\Core\{
Acl\Table,
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDSChecker,
Acl\Traits\DefaultAccessCheckerDependency,
};
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
class AccessChecker implements AccessEntityCREDSChecker
{
use DefaultAccessCheckerDependency;
public function __construct(DefaultAccessChecker $defaultAccessChecker)
{
if ($this->checkEntity($user, $entity, $data, 'read')) {
$this->defaultAccessChecker = $defaultAccessChecker;
}
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
if ($this->defaultAccessChecker->checkEntityRead($user, $entity, $data)) {
return true;
}
if ($data === false) {
if ($data->isFalse()) {
return false;
}
if (is_object($data)) {
if ($data->read === false || $data->read === 'no') {
return false;
}
if ($data->getRead() === Table::LEVEL_NO) {
return false;
}
if (!$entity->has('usersIds')) {
$entity->loadLinkMultipleField('users');
}
$userIdList = $entity->get('usersIds');
if (is_array($userIdList) && in_array($user->id, $userIdList)) {
return true;
}
return false;
}
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($user->id === $entity->get('assignedUserId')) {
return true;
}
if ($user->id === $entity->get('createdById')) {
return true;
}
if ($entity->hasLinkMultipleId('assignedUsers', $user->id)) {
if (is_array($userIdList) && in_array($user->getId(), $userIdList)) {
return true;
}
return false;
}
public function checkEntityDelete(EntityUser $user, Entity $entity, $data)
public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool
{
if ($user->isAdmin()) {
return true;
}
if ($data === false) {
if ($data->isFalse()) {
return false;
}
if ($data->delete === 'own') {
if ($user->id === $entity->get('assignedUserId')) {
if ($data->getDelete() === Table::LEVEL_OWN) {
if ($user->getId() === $entity->get('assignedUserId')) {
return true;
}
if ($user->id === $entity->get('createdById')) {
if ($user->getId() === $entity->get('createdById')) {
return true;
}
$assignedUserIdList = $entity->getLinkMultipleIdList('assignedUsers');
if (count($assignedUserIdList) === 1 && $entity->hasLinkMultipleId('assignedUsers', $user->id)) {
if (
count($assignedUserIdList) === 1 &&
$entity->hasLinkMultipleId('assignedUsers', $user->getId())
) {
return true;
}
return false;
}
if ($this->checkEntity($user, $entity, $data, 'delete')) {
if ($this->defaultAccessChecker->checkEntityDelete($user, $entity, $data)) {
return true;
}
if ($data->edit !== 'no' || $data->create !== 'no') {
if ($entity->get('createdById') === $user->id) {
if ($entity->get('status') !== 'Sent' && $entity->get('status') !== 'Archived') {
return true;
}
}
if ($data->getEdit() === Table::LEVEL_NO && $data->getCreate() === Table::LEVEL_NO) {
return false;
}
if ($entity->get('createdById') !== $user->getId()) {
return false;
}
if ($entity->get('status') !== 'Sent' && $entity->get('status') !== 'Archived') {
return true;
}
return false;

View File

@@ -0,0 +1,51 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Acl\Email;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\DefaultAssignmentChecker,
};
class AssignmentChecker extends DefaultAssignmentChecker
{
protected function isPermittedAssignedUser(User $user, Entity $entity): bool
{
return true;
}
protected function isPermittedAssignedUsers(User $user, Entity $entity): bool
{
return true;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,46 +27,46 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\AclPortal;
namespace Espo\Classes\Acl\Email;
use \Espo\Entities\User as EntityUser;
use \Espo\ORM\Entity;
use Espo\Entities\User;
class Email extends \Espo\Core\AclPortal\Base
use Espo\ORM\Entity;
use Espo\Core\{
Acl\DefaultOwnershipChecker,
Acl\OwnershipOwnChecker,
Acl\OwnershipTeamChecker,
};
class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{
protected $ownerUserIdAttribute = 'usersIds';
private $defaultOwnershipChecker;
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
public function __construct(DefaultOwnershipChecker $defaultOwnershipChecker)
{
if ($this->checkEntity($user, $entity, $data, 'read')) {
$this->defaultOwnershipChecker = $defaultOwnershipChecker;
}
public function checkOwn(User $user, Entity $entity): bool
{
if ($user->getId() === $entity->get('assignedUserId')) {
return true;
}
if ($data === false) {
return false;
}
if (is_object($data)) {
if ($data->read === false || $data->read === 'no') {
return false;
}
}
if (!$entity->has('usersIds')) {
$entity->loadLinkMultipleField('users');
}
$userIdList = $entity->get('usersIds');
if (is_array($userIdList) && in_array($user->id, $userIdList)) {
if ($user->getId() === $entity->get('createdById')) {
return true;
}
if ($entity->hasLinkMultipleId('assignedUsers', $user->getId())) {
return true;
}
return false;
}
public function checkIsOwner(EntityUser $user, Entity $entity)
public function checkTeam(User $user, Entity $entity): bool
{
if ($user->id === $entity->get('createdById')) {
return true;
}
return false;
return $this->defaultOwnershipChecker->checkTeam($user, $entity);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,57 +27,53 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Core\Authentication\TwoFactor\Methods;
namespace Espo\Classes\Acl\EmailFilter;
use Espo\Entities\User;
use Espo\ORM\EntityManager;
use Espo\Core\Authentication\TwoFactor\Utils\Totp as TotpUtils;
use Espo\ORM\Entity;
use StdClass;
use Espo\Core\{
Acl\OwnershipOwnChecker,
ORM\EntityManager,
};
class Totp implements CodeVerify
class OwnershipChecker implements OwnershipOwnChecker
{
protected $entityManager;
protected $totp;
private $entityManager;
public function __construct(EntityManager $entityManager, TotpUtils $totp)
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
$this->totp = $totp;
}
public function verifyCode(User $user, string $code) : bool
public function checkOwn(User $user, Entity $entity): bool
{
$userData = $this->entityManager
->getRepository('UserData')
->getByUserId($user->id);
if (!$userData) {
if (!$entity->has('parentId') || !$entity->has('parentType')) {
return false;
}
if (!$userData->get('auth2FA')) {
$parentType = $entity->get('parentType');
$parentId = $entity->get('parentId');
if (!$parentType || !$parentId) {
return false;
}
if ($userData->get('auth2FAMethod') != 'Totp') {
$parent = $this->entityManager->getEntity($parentType, $parentId);
if (!$parent) {
return false;
}
$secret = $userData->get('auth2FATotpSecret');
if (!$secret) {
return false;
if ($parent->getEntityType() === 'User') {
return $parent->getId() === $user->getId();
}
return $this->totp->verifyCode($secret, $code);
}
if ($parent->has('assignedUserId') && $parent->get('assignedUserId') === $user->getId()) {
return true;
}
public function getLoginData(User $user) : StdClass
{
return (object) [
'message' => 'enterTotpCode',
];
return false;
}
}

View File

@@ -0,0 +1,84 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Acl\Import;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\ScopeData,
Acl\AccessEntityReadChecker,
Acl\AccessEntityDeleteChecker,
};
class AccessChecker implements AccessEntityReadChecker, AccessEntityDeleteChecker
{
public function check(User $user, ScopeData $data): bool
{
return $data->isTrue();
}
public function checkRead(User $user, ScopeData $data): bool
{
return $data->isTrue();
}
public function checkDelete(User $user, ScopeData $data): bool
{
return $data->isTrue();
}
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
if ($user->isAdmin()) {
return true;
}
if ($user->getId() === $entity->get('createdById')) {
return true;
}
return false;
}
public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool
{
if ($user->isAdmin()) {
return true;
}
if ($user->getId() === $entity->get('createdById')) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,172 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Acl\Note;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDChecker,
Acl\Traits\DefaultAccessCheckerDependency,
AclManager,
ORM\EntityManager,
Utils\Config,
};
use DateTime;
use Exception;
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private const EDIT_PERIOD = '7 days';
private const DELETE_PERIOD = '1 month';
private $defaultAccessChecker;
private $aclManager;
private $entityManager;
private $config;
public function __construct(
DefaultAccessChecker $defaultAccessChecker,
AclManager $aclManager,
EntityManager $entityManager,
Config $config
) {
$this->defaultAccessChecker = $defaultAccessChecker;
$this->aclManager = $aclManager;
$this->entityManager = $entityManager;
$this->config = $config;
}
public function checkEntityCreate(User $user, Entity $entity, ScopeData $data): bool
{
$parentId = $entity->get('parentId');
$parentType = $entity->get('parentType');
if (!$parentId || !$parentType) {
return true;
}
$parent = $this->entityManager->getEntity($parentType, $parentId);
if ($parent && $this->aclManager->checkEntityStream($user, $parent)) {
return true;
}
return false;
}
public function checkEntityEdit(User $user, Entity $entity, ScopeData $data): bool
{
if ($user->isAdmin()) {
return true;
}
if (!$this->defaultAccessChecker->checkEntityEdit($user, $entity, $data)) {
return false;
}
if (!$this->aclManager->checkOwnershipOwn($user, $entity)) {
return true;
}
$createdAt = $entity->get('createdAt');
if (!$createdAt) {
return true;
}
$noteEditThresholdPeriod =
'-' . $this->config->get('noteEditThresholdPeriod', self::EDIT_PERIOD);
$dt = new DateTime();
$dt->modify($noteEditThresholdPeriod);
try {
if ($dt->format('U') > (new DateTime($createdAt))->format('U')) {
return false;
}
}
catch (Exception $e) {
return false;
}
return true;
}
public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool
{
if ($user->isAdmin()) {
return true;
}
if (!$this->defaultAccessChecker->checkEntityDelete($user, $entity, $data)) {
return false;
}
if (!$this->aclManager->checkOwnershipOwn($user, $entity)) {
return true;
}
$createdAt = $entity->get('createdAt');
if (!$createdAt) {
return true;
}
$deleteThresholdPeriod =
'-' . $this->config->get('noteDeleteThresholdPeriod', self::DELETE_PERIOD);
$dt = new DateTime();
$dt->modify($deleteThresholdPeriod);
try {
if ($dt->format('U') > (new DateTime($createdAt))->format('U')) {
return false;
}
}
catch (Exception $e) {
return false;
}
return true;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,23 +27,25 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Modules\Crm\AclPortal;
namespace Espo\Classes\Acl\Note;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\AclPortal\Acl;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
class Account extends Acl
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkInAccount(User $user, Entity $entity)
public function checkOwn(User $user, Entity $entity): bool
{
$accountIdList = $user->getLinkMultipleIdList('accounts');
if (count($accountIdList)) {
if (in_array($entity->id, $accountIdList)) {
return true;
}
if ($entity->get('type') === 'Post' && $user->getId() === $entity->get('createdById')) {
return true;
}
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,18 +27,24 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Acl;
namespace Espo\Classes\Acl\Notification;
use Espo\Entities\User;
use Espo\Entities\User as EntityUser;
use Espo\ORM\Entity;
class Notification extends \Espo\Core\Acl\Acl
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkIsOwner(EntityUser $user, Entity $entity)
public function checkOwn(User $user, Entity $entity): bool
{
if ($user->id === $entity->get('userId')) {
if ($user->getId() === $entity->get('userId')) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,63 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Acl\Portal;
use Espo\Entities\User;
use Espo\Core\{
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDChecker,
Acl\Traits\DefaultAccessCheckerDependency,
Acl\Table,
AclManager,
};
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
private $aclManager;
public function __construct(DefaultAccessChecker $defaultAccessChecker, AclManager $aclManager)
{
$this->defaultAccessChecker = $defaultAccessChecker;
$this->aclManager = $aclManager;
}
public function check(User $user, ScopeData $data): bool
{
$level = $this->aclManager->getPermissionLevel($user, 'portal');
return $level === Table::LEVEL_YES;
}
}

View File

@@ -0,0 +1,89 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Acl\ScheduledJob;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDChecker,
Acl\Traits\DefaultAccessCheckerDependency,
};
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
public function __construct(DefaultAccessChecker $defaultAccessChecker)
{
$this->defaultAccessChecker = $defaultAccessChecker;
}
public function checkEntityCreate(User $user, Entity $entity, ScopeData $data): bool
{
if ($entity->get('isInternal')) {
return false;
}
return $this->defaultAccessChecker->checkEntityCreate($user, $entity, $data);
}
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
if ($entity->get('isInternal')) {
return false;
}
return $this->defaultAccessChecker->checkEntityRead($user, $entity, $data);
}
public function checkEntityEdit(User $user, Entity $entity, ScopeData $data): bool
{
if ($entity->get('isInternal')) {
return false;
}
return $this->defaultAccessChecker->checkEntityEdit($user, $entity, $data);
}
public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool
{
if ($entity->get('isInternal')) {
return false;
}
return $this->defaultAccessChecker->checkEntityDelete($user, $entity, $data);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,17 +27,22 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Acl;
namespace Espo\Classes\Acl\Team;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Entities\User as UserEntity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
class Team extends \Espo\Core\Acl\Acl
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkInTeam(UserEntity $user, Entity $entity)
public function checkOwn(User $user, Entity $entity): bool
{
$userTeamIdList = $user->getLinkMultipleIdList('teams');
return in_array($entity->id, $userTeamIdList);
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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,72 +27,103 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Acl;
namespace Espo\Classes\Acl\User;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Entities\User as EntityUser;
class User extends \Espo\Core\Acl\Acl
use Espo\Core\{
Acl\Table,
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDSChecker,
Acl\Traits\DefaultAccessCheckerDependency,
AclManager,
};
class AccessChecker implements AccessEntityCREDSChecker
{
public function checkIsOwner(EntityUser $user, Entity $entity)
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
private $aclManager;
public function __construct(DefaultAccessChecker $defaultAccessChecker, AclManager $aclManager)
{
return $user->id === $entity->id;
$this->defaultAccessChecker = $defaultAccessChecker;
$this->aclManager = $aclManager;
}
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
public function checkEntityCreate(User $user, Entity $entity, ScopeData $data): bool
{
if (!$user->isAdmin() && $entity->isPortal()) {
if ($this->getAclManager()->get($user, 'portalPermission') === 'yes') {
if (!$user->isAdmin()) {
return false;
}
if ($entity->isSuperAdmin() && !$user->isSuperAdmin()) {
return false;
}
return $this->defaultAccessChecker->checkEntityCreate($user, $entity, $data);
}
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
if ($entity->isPortal()) {
if ($this->aclManager->getPermissionLevel($user, 'portal') === Table::LEVEL_YES) {
return true;
}
}
return $this->checkEntity($user, $entity, $data, 'read');
}
public function checkEntityCreate(EntityUser $user, Entity $entity, $data)
{
if (!$user->isAdmin()) {
return false;
}
if ($entity->isSuperAdmin() && !$user->isSuperAdmin()) {
return false;
}
return $this->checkEntity($user, $entity, $data, 'create');
return $this->defaultAccessChecker->checkEntityRead($user, $entity, $data);
}
public function checkEntityDelete(EntityUser $user, Entity $entity, $data)
public function checkEntityEdit(User $user, Entity $entity, ScopeData $data): bool
{
if ($entity->id === 'system') {
return false;
}
if (!$user->isAdmin()) {
return false;
}
if ($entity->isSystem()) {
return false;
}
if ($entity->isSuperAdmin() && !$user->isSuperAdmin()) {
return false;
}
return parent::checkEntityDelete($user, $entity, $data);
}
public function checkEntityEdit(EntityUser $user, Entity $entity, $data)
{
if ($entity->id === 'system') {
return false;
}
if ($entity->isSystem()) {
return false;
}
if (!$user->isAdmin()) {
if ($user->id !== $entity->id) {
if ($user->getId() !== $entity->getId()) {
return false;
}
}
if ($entity->isSuperAdmin() && !$user->isSuperAdmin()) {
return false;
}
return $this->checkEntity($user, $entity, $data, 'edit');
return $this->defaultAccessChecker->checkEntityEdit($user, $entity, $data);
}
public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool
{
if (!$user->isAdmin()) {
return false;
}
if ($entity->isSystem()) {
return false;
}
if ($entity->isSuperAdmin() && !$user->isSuperAdmin()) {
return false;
}
return $this->defaultAccessChecker->checkEntityDelete($user, $entity, $data);
}
public function checkEntityStream(User $user, Entity $entity, ScopeData $data): bool
{
return $this->aclManager->checkUserPermission($user, $entity, 'user');
}
}

View File

@@ -0,0 +1,61 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Acl\User;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
Acl\OwnershipTeamChecker,
};
class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{
public function checkOwn(User $user, Entity $entity): bool
{
return $user->getId() === $entity->getId();
}
public function checkTeam(User $user, Entity $entity): bool
{
$intersect = array_intersect(
$user->getLinkMultipleIdList('teams'),
$entity->getLinkMultipleIdList('teams')
);
if (count($intersect)) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,107 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Acl\Webhook;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDChecker,
Acl\Traits\DefaultAccessCheckerDependency,
};
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
public function __construct(DefaultAccessChecker $defaultAccessChecker)
{
$this->defaultAccessChecker = $defaultAccessChecker;
}
public function check(User $user, ScopeData $data): bool
{
if ($user->isAdmin()) {
return true;
}
if (!$user->isApi()) {
return false;
}
if ($data->isFalse()) {
return false;
}
return true;
}
public function checkEntityCreate(User $user, Entity $entity, ScopeData $data): bool
{
return $this->checkEntityInternal($user, $entity, $data);
}
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
return $this->checkEntityInternal($user, $entity, $data);
}
public function checkEntityEdit(User $user, Entity $entity, ScopeData $data): bool
{
return $this->checkEntityInternal($user, $entity, $data);
}
public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool
{
return $this->checkEntityInternal($user, $entity, $data);
}
private function checkEntityInternal(User $user, Entity $entity, ScopeData $data): bool
{
if ($user->isAdmin()) {
return true;
}
if ($data->isFalse()) {
return false;
}
if ($user->isApi() && $user->getId() === $entity->get('userId')) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,46 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Acl\Webhook;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool
{
return $user->getId() === $entity->get('userId') && $user->isApi();
}
}

View File

@@ -0,0 +1,158 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AclPortal\Attachment;
use Espo\Entities\{
User,
Note,
};
use Espo\ORM\Entity;
use Espo\Core\{
ORM\EntityManager,
Portal\AclManager,
Acl\ScopeData,
Acl\AccessEntityCREDChecker,
Portal\Acl\DefaultAccessChecker,
Portal\Acl\Traits\DefaultAccessCheckerDependency,
};
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
private $aclManager;
private $entityManager;
public function __construct(
DefaultAccessChecker $defaultAccessChecker,
AclManager $aclManager,
EntityManager $entityManager
) {
$this->defaultAccessChecker = $defaultAccessChecker;
$this->aclManager = $aclManager;
$this->entityManager = $entityManager;
}
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
if ($entity->get('parentType') === 'Settings') {
return true;
}
$parent = null;
$hasParent = false;
if ($entity->get('parentId') && $entity->get('parentType')) {
$hasParent = true;
$parent = $this->entityManager->getEntity($entity->get('parentType'), $entity->get('parentId'));
}
else if ($entity->get('relatedId') && $entity->get('relatedType')) {
$hasParent = true;
$parent = $this->entityManager->getEntity($entity->get('relatedType'), $entity->get('relatedId'));
}
if (!$hasParent) {
if ($entity->get('createdById') === $user->getId()) {
return true;
}
return false;
}
if ($parent->getEntityType() === 'Note') {
$result = $this->checkEntityReadNoteParent($user, $parent);
if ($result !== null) {
return $result;
}
}
else if ($this->aclManager->checkEntity($user, $parent)) {
return true;
}
if ($this->defaultAccessChecker->checkEntityRead($user, $entity, $data)) {
return true;
}
return false;
}
private function checkEntityReadNoteParent(User $user, Note $note): ?bool
{
if ($note->isInternal()) {
return false;
}
if ($note->getTargetType() === Note::TARGET_PORTALS) {
$intersect = array_intersect(
$note->getLinkMultipleIdList('portals'),
$user->getLinkMultipleIdList('portals')
);
if (count($intersect)) {
return true;
}
return false;
}
if ($note->getTargetType() === Note::TARGET_USERS) {
$isRelated = $this->entityManager
->getRDBRepository('Note')
->getRelation($note, 'users')
->isRelated($user);
if ($isRelated) {
return true;
}
return false;
}
if (!$note->getParentId() || !$note->getParentType()) {
return null;
}
$parent = $this->entityManager->getEntity($note->getParentType(), $note->getParentId());
if ($parent && $this->aclManager->checkEntity($user, $parent)) {
return true;
}
return null;
}
}

View File

@@ -0,0 +1,52 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AclPortal\Attachment;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
class OwnershipChecker implements OwnershipOwnChecker
{
private const ATTR_CREATED_BY_ID = 'createdById';
public function checkOwn(User $user, Entity $entity): bool
{
if ($user->getId() === $entity->get(self::ATTR_CREATED_BY_ID)) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,83 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AclPortal\Email;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Portal\AclManager,
Acl\Table,
Acl\ScopeData,
Acl\AccessEntityCREDSChecker,
Portal\Acl\DefaultAccessChecker,
Portal\Acl\Traits\DefaultAccessCheckerDependency,
};
class AccessChecker implements AccessEntityCREDSChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
private $aclManager;
public function __construct(
DefaultAccessChecker $defaultAccessChecker,
AclManager $aclManager
) {
$this->defaultAccessChecker = $defaultAccessChecker;
$this->aclManager = $aclManager;
}
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
if ($this->defaultAccessChecker->checkEntityRead($user, $entity, $data)) {
return true;
}
if ($data->isFalse()) {
return false;
}
if ($data->getRead() === Table::LEVEL_NO) {
return false;
}
$userIdList = $entity->getLinkMultipleIdLIst('users');
if (is_array($userIdList) && in_array($user->getId(), $userIdList)) {
return true;
}
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,23 +27,24 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Modules\Crm\AclPortal;
namespace Espo\Classes\AclPortal\Email;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\AclPortal\Acl;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
class Contact extends Acl
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkIsOwnContact(User $user, Entity $entity)
public function checkOwn(User $user, Entity $entity): bool
{
$contactId = $user->get('contactId');
if ($contactId) {
if ($entity->id === $contactId) {
return true;
}
if ($user->getId() === $entity->get('createdById')) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,189 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AclPortal\Note;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Portal\AclManager,
Acl\ScopeData,
Acl\AccessEntityCREDChecker,
Portal\Acl\DefaultAccessChecker,
Portal\Acl\Traits\DefaultAccessCheckerDependency,
ORM\EntityManager,
Utils\Config,
};
use DateTime;
use Exception;
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private const EDIT_PERIOD = '7 days';
private const DELETE_PERIOD = '1 month';
private $defaultAccessChecker;
private $aclManager;
private $entityManager;
private $config;
public function __construct(
DefaultAccessChecker $defaultAccessChecker,
AclManager $aclManager,
EntityManager $entityManager,
Config $config
) {
$this->defaultAccessChecker = $defaultAccessChecker;
$this->aclManager = $aclManager;
$this->entityManager = $entityManager;
$this->config = $config;
}
public function checkEntityCreate(User $user, Entity $entity, ScopeData $data): bool
{
$parentId = $entity->get('parentId');
$parentType = $entity->get('parentType');
if (!$parentId || !$parentType) {
return $this->defaultAccessChecker->checkEntityCreate($user, $entity, $data);
}
$parent = $this->entityManager->getEntity($parentType, $parentId);
if ($parent && $this->aclManager->checkEntityStream($user, $parent)) {
return true;
}
return $this->defaultAccessChecker->checkEntityCreate($user, $entity, $data);
}
public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool
{
if ($entity->get('type') !== 'Post') {
return false;
}
if ($entity->get('type') === 'Post' && $entity->get('targetType')) {
return false;
}
if (!$entity->get('parentId') || !$entity->get('parentType')) {
return false;
}
$parent = $this->entityManager->getEntity($entity->get('parentType'), $entity->get('parentId'));
if ($parent) {
if ($this->aclManager->checkEntityStream($user, $parent)) {
return true;
}
}
return false;
}
public function checkEntityEdit(User $user, Entity $entity, ScopeData $data): bool
{
if (!$this->defaultAccessChecker->checkEntityEdit($user, $entity, $data)) {
return false;
}
if (!$this->aclManager->checkOwnershipOwn($user, $entity)) {
return true;
}
$createdAt = $entity->get('createdAt');
if (!$createdAt) {
return true;
}
$noteEditThresholdPeriod =
'-' . $this->config->get('noteEditThresholdPeriod', self::EDIT_PERIOD);
$dt = new DateTime();
$dt->modify($noteEditThresholdPeriod);
try {
if ($dt->format('U') > (new DateTime($createdAt))->format('U')) {
return false;
}
}
catch (Exception $e) {
return false;
}
return true;
}
public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool
{
if (!$this->defaultAccessChecker->checkEntityDelete($user, $entity, $data)) {
return false;
}
if (!$this->aclManager->checkOwnershipOwn($user, $entity)) {
return true;
}
$createdAt = $entity->get('createdAt');
if (!$createdAt) {
return true;
}
$deleteThresholdPeriod =
'-' . $this->config->get('noteDeleteThresholdPeriod', self::DELETE_PERIOD);
$dt = new DateTime();
$dt->modify($deleteThresholdPeriod);
try {
if ($dt->format('U') > (new DateTime($createdAt))->format('U')) {
return false;
}
}
catch (Exception $e) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,50 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AclPortal\Note;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool
{
if ($entity->get('type') === 'Post' && $user->getId() === $entity->get('createdById')) {
return true;
}
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,19 +27,24 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\AclPortal;
namespace Espo\Classes\AclPortal\Notification;
use \Espo\Entities\User as EntityUser;
use \Espo\ORM\Entity;
use Espo\Entities\User;
class Notification extends \Espo\Core\AclPortal\Base
use Espo\ORM\Entity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkIsOwner(EntityUser $user, Entity $entity)
public function checkOwn(User $user, Entity $entity): bool
{
if ($user->id === $entity->get('userId')) {
if ($user->getId() === $entity->get('userId')) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,46 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AclPortal\User;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool
{
return $user->getId() === $entity->getId();
}
}

View File

@@ -0,0 +1,89 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AddressFormatters;
use Espo\Core\{
Field\Address,
Field\Address\AddressFormatter,
};
class Formatter1 implements AddressFormatter
{
public function format(Address $address): string
{
$result = '';
$street = $address->getStreet();
$city = $address->getCity();
$country = $address->getCountry();
$state = $address->getState();
$postalCode = $address->getPostalCode();
if ($street) {
$result .= $street;
}
if ($city || $state || $postalCode) {
if ($result) {
$result .= "\n";
}
if ($city) {
$result .= $city;
}
if ($state && $city) {
$result .= ', ';
}
if ($state) {
$result .= $state;
}
if ($postalCode && ($state || $city)) {
$result .= ' ';
}
if ($postalCode) {
$result .= $postalCode;
}
}
if ($country) {
if ($result) {
$result .= "\n";
}
$result .= $country;
}
return $result;
}
}

View File

@@ -0,0 +1,91 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AddressFormatters;
use Espo\Core\{
Field\Address,
Field\Address\AddressFormatter,
};
class Formatter2 implements AddressFormatter
{
public function format(Address $address): string
{
$result = '';
$street = $address->getStreet();
$city = $address->getCity();
$country = $address->getCountry();
$state = $address->getState();
$postalCode = $address->getPostalCode();
if ($street) {
$result .= $street;
}
if ($city || $postalCode) {
if ($result) {
$result .= "\n";
}
if ($postalCode) {
$result .= $postalCode;
}
if ($postalCode && $city) {
$result .= ' ';
}
if ($city) {
$result .= $city;
}
}
if ($state || $country) {
if ($result) {
$result .= "\n";
}
if ($state) {
$result .= $state;
}
if ($state && $country) {
$result .= ' ';
}
if ($country) {
$result .= $country;
}
}
return $result;
}
}

View File

@@ -0,0 +1,89 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AddressFormatters;
use Espo\Core\{
Field\Address,
Field\Address\AddressFormatter,
};
class Formatter3 implements AddressFormatter
{
public function format(Address $address): string
{
$result = '';
$street = $address->getStreet();
$city = $address->getCity();
$country = $address->getCountry();
$state = $address->getState();
$postalCode = $address->getPostalCode();
if ($country) {
$result .= $country;
}
if ($city || $state || $postalCode) {
if ($result) {
$result .= "\n";
}
if ($state) {
$result .= $state;
}
if ($state && $postalCode) {
$result .= ' ';
}
if ($postalCode) {
$result .= $postalCode;
}
if ($city && ($state || $postalCode)) {
$result .= ' ';
}
if ($city) {
$result .= $city;
}
}
if ($street) {
if ($result) {
$result .= "\n";
}
$result .= $street;
}
return $result;
}
}

View File

@@ -0,0 +1,89 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AddressFormatters;
use Espo\Core\{
Field\Address,
Field\Address\AddressFormatter,
};
class Formatter4 implements AddressFormatter
{
public function format(Address $address): string
{
$result = '';
$street = $address->getStreet();
$city = $address->getCity();
$country = $address->getCountry();
$state = $address->getState();
$postalCode = $address->getPostalCode();
if ($street) {
$result .= $street;
}
if ($city) {
if ($result) {
$result .= "\n";
}
$result .= $city;
}
if ($country || $state || $postalCode) {
if ($result) {
$result .= "\n";
}
if ($country) {
$result .= $country;
}
if ($state && $country) {
$result .= ' - ';
}
if ($state) {
$result .= $state;
}
if ($postalCode && ($state || $country)) {
$result .= ' ';
}
if ($postalCode) {
$result .= $postalCode;
}
}
return $result;
}
}

View File

@@ -0,0 +1,120 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AppInfo;
use Espo\Core\{
Utils\Module,
Binding\EspoBindingLoader,
Binding\Binding as BindingItem,
Console\Command\Params,
};
class Binding
{
private $module;
public function __construct(Module $module)
{
$this->module = $module;
}
public function process(Params $params): string
{
$result = '';
$bindingLoader = new EspoBindingLoader($this->module);
$data = $bindingLoader->load();
$keyList = $data->getGlobalKeyList();
$result .= "Global:\n\n";
foreach ($keyList as $key) {
$result .= $this->printItem($key, $data->getGlobal($key));
}
$contextList = $data->getContextList();
foreach ($contextList as $context) {
$result .= "Context: {$context}\n\n";
$keyList = $data->getContextKeyList($context);
foreach ($keyList as $key) {
$result .= $this->printItem($key, $data->getContext($context, $key), true);
}
}
return $result;
}
private function printItem(string $key, BindingItem $binding): string
{
$result = '';
$tab = ' ';
$result .= $tab . "Key: {$key}\n";
$type = $binding->getType();
$value = $binding->getValue();
$typeString = [
BindingItem::IMPLEMENTATION_CLASS_NAME => 'Implementation',
BindingItem::CONTAINER_SERVICE => 'Service',
BindingItem::VALUE => 'Value',
BindingItem::CALLBACK => 'Callback',
BindingItem::FACTORY_CLASS_NAME => 'Factory',
][$type];
$result .= $tab . "Type: {$typeString}\n";
if ($type == BindingItem::IMPLEMENTATION_CLASS_NAME || $type == BindingItem::CONTAINER_SERVICE) {
$result .= $tab . "Value: {$value}\n";
}
if ($type == BindingItem::VALUE) {
if (is_string($value) || is_int($value) || is_float($value)) {
$result .= $tab . "Value: {$value}\n";
}
if (is_bool($value)) {
$valueString = $value ? 'true' : 'false';
$result .= $tab . "Value: {$valueString}\n";
}
}
$result .= "\n";
return $result;
}
}

View File

@@ -0,0 +1,109 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AppInfo;
use Espo\Core\{
Container as ContainerService,
Utils\Metadata,
Console\Command\Params,
};
class Container
{
private $container;
private $metadata;
public function __construct(ContainerService $container, Metadata $metadata)
{
$this->container = $container;
$this->metadata = $metadata;
}
public function process(Params $params): string
{
$nameOnly = $params->hasFlag('nameOnly');
$result = '';
$serviceList = [
'injectableFactory',
'config',
'log',
'fileManager',
'dataManager',
'metadata',
'user',
];
$fileList = scandir('application/Espo/Core/Loaders');
if (file_exists('custom/Espo/Custom/Core/Loaders')) {
$fileList = array_merge($fileList, scandir('custom/Espo/Custom/Core/Loaders'));
}
foreach ($fileList as $file) {
if (substr($file, -4) === '.php') {
$name = lcfirst(substr($file, 0, -4));
if (!in_array($name, $serviceList) && $this->container->has($name)) {
$serviceList[] = $name;
}
}
}
foreach ($this->metadata->get(['app', 'containerServices']) ?? [] as $name => $data) {
if (!in_array($name, $serviceList)) {
$serviceList[] = $name;
}
}
sort($serviceList);
if ($nameOnly) {
foreach ($serviceList as $name) {
$result .= $name . "\n";
}
return $result;
}
foreach ($serviceList as $name) {
$result .= $name . "\n";
$obj = $this->container->get($name);
$result .= get_class($obj) . "\n";
$result .= "\n";
}
return $result;
}
}

View File

@@ -0,0 +1,68 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\AppInfo;
use Espo\Core\Console\Command\Params;
use Espo\Core\Utils\ClassFinder;
use Espo\Core\Job\MetadataProvider;
class Jobs
{
private $classFinder;
private $metadataProvider;
public function __construct(ClassFinder $classFinder, MetadataProvider $metadataProvider)
{
$this->classFinder = $classFinder;
$this->metadataProvider = $metadataProvider;
}
public function process(Params $params): string
{
$result = "Available jobs:\n\n";
$list = array_map(
function ($item) {
return ' ' . $item;
},
array_unique(
array_merge(
array_keys($this->classFinder->getMap('Jobs')),
$this->metadataProvider->getScheduledJobNameList()
)
)
);
asort($list);
return $result . implode("\n", $list) . "\n";
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,7 +31,7 @@ namespace Espo\Classes\AppParams;
use Espo\Core\{
Acl,
Select\SelectManagerFactory,
Select\SelectBuilderFactory,
ORM\EntityManager,
};
@@ -41,17 +41,17 @@ use Espo\Core\{
class TemplateEntityTypeList
{
protected $acl;
protected $selectManagerFactory;
protected $selectBuilderFactory;
protected $entityManager;
public function __construct(Acl $acl, SelectManagerFactory $selectManagerFactory, EntityManager $entityManager)
public function __construct(Acl $acl, SelectBuilderFactory $selectBuilderFactory, EntityManager $entityManager)
{
$this->acl = $acl;
$this->selectManagerFactory = $selectManagerFactory;
$this->selectBuilderFactory = $selectBuilderFactory;
$this->entityManager = $entityManager;
}
public function get()
public function get() : array
{
if (!$this->acl->checkScope('Template')) {
return [];
@@ -59,17 +59,21 @@ class TemplateEntityTypeList
$list = [];
$selectManager = $this->selectManagerFactory->create('Template');
$selectParams = $selectManager->getEmptySelectParams();
$selectManager->applyAccess($selectParams);
$templateList = $this->entityManager->getRepository('Template')
$query = $this->selectBuilderFactory
->create()
->from('Template')
->withAccessControlFilter()
->buildQueryBuilder()
->select(['entityType'])
->groupBy(['entityType'])
->find($selectParams);
->group(['entityType'])
->build();
foreach ($templateList as $template) {
$templateCollection = $this->entityManager
->getRepository('Template')
->clone($query)
->find();
foreach ($templateCollection as $template) {
$list[] = $template->get('entityType');
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,78 +27,93 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Notificators;
use Espo\ORM\Entity;
use Espo\Core\Notificators\DefaultNotificator;
namespace Espo\Classes\AssignmentNotificators;
use Espo\Services\Email as EmailService;
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\AclManager;
use Espo\ORM\EntityManager;
use Espo\ORM\Entity;
use Espo\Entities\User;
use Espo\Entities\Notification;
use Espo\Core\{
ORM\EntityManager,
ServiceFactory,
AclManager,
};
use DateTime;
use Exception;
class Email extends DefaultNotificator
class Email implements AssignmentNotificator
{
const DAYS_THRESHOLD = 2;
private const DAYS_THRESHOLD = 2;
private $streamService = null;
protected $user;
protected $entityManager;
protected $serviceFactory;
protected $aclManager;
private $user;
private $entityManager;
private $serviceFactory;
private $aclManager;
private $userChecker;
public function __construct(
User $user,
EntityManager $entityManager,
UserEnabledChecker $userChecker,
ServiceFactory $serviceFactory,
AclManager $aclManager
) {
$this->user = $user;
$this->entityManager = $entityManager;
$this->userChecker = $userChecker;
$this->serviceFactory = $serviceFactory;
$this->aclManager = $aclManager;
}
protected function getStreamService()
{
if (empty($this->streamService)) {
$this->streamService = $this->serviceFactory->create('Stream');
}
return $this->streamService;
}
public function process(Entity $entity, array $options = [])
public function process(Entity $entity, Params $params): void
{
if (!in_array($entity->get('status'), ['Archived', 'Sent', 'Being Imported'])) {
return;
}
if (!empty($options['isJustSent'])) {
if ($params->getOption('isJustSent')) {
$previousUserIdList = [];
} else {
}
else {
$previousUserIdList = $entity->getFetched('usersIds');
if (!is_array($previousUserIdList)) {
$previousUserIdList = [];
}
}
$dateSent = $entity->get('dateSent');
if (!$dateSent) return;
$dt = null;
if (!$dateSent) {
return;
}
try {
$dt = new \DateTime($dateSent);
} catch (\Exception $e) {}
if (!$dt) return;
$dt = new DateTime($dateSent);
}
catch (Exception $e) {
return;
}
if ($dt->diff(new \DateTime())->days > self::DAYS_THRESHOLD) return;
if (!$dt) {
return;
}
if ($dt->diff(new DateTime())->days > self::DAYS_THRESHOLD) {
return;
}
$emailUserIdList = $entity->get('usersIds');
@@ -107,14 +122,19 @@ class Email extends DefaultNotificator
}
$userIdList = [];
foreach ($emailUserIdList as $userId) {
if (!in_array($userId, $userIdList) && !in_array($userId, $previousUserIdList) && $userId != $this->user->id) {
if (
!in_array($userId, $userIdList) &&
!in_array($userId, $previousUserIdList) &&
$userId !== $this->user->getId()
) {
$userIdList[] = $userId;
}
}
$data = [
'emailId' => $entity->id,
'emailId' => $entity->getId(),
'emailName' => $entity->get('name'),
];
@@ -125,54 +145,81 @@ class Email extends DefaultNotificator
if (!$entity->has('to')) {
$this->entityManager->getRepository('Email')->loadToField($entity);
}
$person = null;
$from = $entity->get('from');
if ($from) {
$person = $this->entityManager->getRepository('EmailAddress')
$person = $this->entityManager
->getRepository('EmailAddress')
->getEntityByAddress($from, null, ['User', 'Contact', 'Lead']);
if ($person) {
$data['personEntityType'] = $person->getEntityType();
$data['personEntityName'] = $person->get('name');
$data['personEntityId'] = $person->id;
$data['personEntityId'] = $person->getId();
}
}
$userIdFrom = null;
if ($person && $person->getEntityType() == 'User') {
if ($person && $person->getEntityType() === 'User') {
$userIdFrom = $person->id;
}
if (empty($data['personEntityId'])) {
$data['fromString'] = EmailService::parseFromName($entity->get('fromString'));
if (empty($data['fromString']) && $from) {
$data['fromString'] = $from;
}
}
$parent = null;
if ($entity->get('parentId') && $entity->get('parentType')) {
$parent = $this->entityManager->getEntity($entity->get('parentType'), $entity->get('parentId'));
}
$account = null;
if ($entity->get('accountId')) {
$account = $this->entityManager->getEntity('Account', $entity->get('accountId'));
}
foreach ($userIdList as $userId) {
if (!$userId) continue;
if ($userIdFrom === $userId) continue;
if ($entity->getLinkMultipleColumn('users', 'inTrash', $userId)) continue;
if (!$this->isNotificationsEnabledForUser($userId)) return;
if (!$userId) {
continue;
}
if (!empty($options['isBeingImported']) || !empty($options['isJustSent'])) {
if ($userIdFrom === $userId) {
continue;
}
if ($entity->getLinkMultipleColumn('users', 'inTrash', $userId)) {
continue;
}
if (!$this->userChecker->checkAssignment('Email', $userId)) {
continue;
}
if (
$params->getOption('isBeingImported') ||
$params->getOption('isJustSent')
) {
$folderId = $entity->getLinkMultipleColumn('users', 'folderId', $userId);
if ($folderId) {
if (
$this->entityManager->getRepository('EmailFolder')->where([
'id' => $folderId,
'skipNotifications' => true
])->count()
$this->entityManager
->getRepository('EmailFolder')
->where([
'id' => $folderId,
'skipNotifications' => true,
])
->count()
) {
continue;
}
@@ -180,41 +227,70 @@ class Email extends DefaultNotificator
}
$user = $this->entityManager->getEntity('User', $userId);
if (!$user) continue;
if ($user->isPortal()) continue;
if (!$user) {
continue;
}
if ($user->isPortal()) {
continue;
}
if (!$this->aclManager->checkScope($user, 'Email')) {
continue;
}
if ($entity->get('status') == 'Archived' || !empty($options['isBeingImported'])) {
if ($parent) {
if ($this->getStreamService()->checkIsFollowed($parent, $userId)) {
continue;
}
}
if ($account) {
if ($this->getStreamService()->checkIsFollowed($account, $userId)) {
continue;
}
}
}
if (
$this->entityManager->getRepository('Notification')->where([
'type' => 'EmailReceived',
'userId' => $userId,
'relatedId' => $entity->id,
'relatedType' => 'Email',
])->select(['id'])->findOne()
) continue;
$notification = $this->entityManager->getEntity('Notification');
$notification->set([
'type' => 'EmailReceived',
$isArchivedOrBeingImported =
$entity->get('status') === 'Archived' ||
$params->getOption('isBeingImported');
if (
$isArchivedOrBeingImported &&
$parent &&
$this->getStreamService()->checkIsFollowed($parent, $userId)
) {
continue;
}
if (
$isArchivedOrBeingImported &&
$account &&
$this->getStreamService()->checkIsFollowed($account, $userId)
) {
continue;
}
$existing = $this->entityManager
->getRepository(Notification::ENTITY_TYPE)
->where([
'type' => Notification::TYPE_EMAIL_RECEIVED,
'userId' => $userId,
'relatedId' => $entity->getId(),
'relatedType' => 'Email',
])
->select(['id'])
->findOne();
if ($existing) {
continue;
}
$this->entityManager->createEntity(Notification::ENTITY_TYPE, [
'type' => Notification::TYPE_EMAIL_RECEIVED,
'userId' => $userId,
'data' => $data,
'relatedId' => $entity->id,
'relatedId' => $entity->getId(),
'relatedType' => 'Email',
]);
$this->entityManager->saveEntity($notification);
}
}
private function getStreamService(): StreamService
{
if (empty($this->streamService)) {
$this->streamService = $this->serviceFactory->create('Stream');
}
return $this->streamService;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,17 +29,19 @@
namespace Espo\Classes\Cleanup;
use Espo\Core\{
Utils\Config,
ORM\EntityManager,
};
use Espo\Core\Cleanup\Cleanup;
use Espo\Core\Utils\Config;
use Espo\ORM\EntityManager;
use DateTime;
class Reminders
class Reminders implements Cleanup
{
protected $config;
protected $entityManager;
private $config;
private $entityManager;
private $cleanupRemindersPeriod = '15 days';
public function __construct(Config $config, EntityManager $entityManager)
{
@@ -47,9 +49,7 @@ class Reminders
$this->entityManager = $entityManager;
}
protected $cleanupRemindersPeriod = '15 days';
public function process()
public function process(): void
{
$period = '-' . $this->config->get('cleanupRemindersPeriod', $this->cleanupRemindersPeriod);
@@ -57,7 +57,8 @@ class Reminders
$dt->modify($period);
$delete = $this->entityManager->getQueryBuilder()
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from('Reminder')
->where([

View File

@@ -0,0 +1,77 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Utils\DateTime as DateTimeUtil;
use Espo\ORM\EntityManager;
use Espo\Entities\TwoFactorCode;
use DateTime;
class TwoFactorCodes implements Cleanup
{
private const PERIOD = '5 days';
private $config;
private $entityManager;
public function __construct(Config $config, EntityManager $entityManager)
{
$this->config = $config;
$this->entityManager = $entityManager;
}
public function process(): void
{
$period = '-' . $this->config->get('cleanupTwoFactorCodesPeriod', self::PERIOD);
$from = (new DateTime())
->modify($period)
->format(DateTimeUtil::SYSTEM_DATE_TIME_FORMAT);
$query = $this->entityManager
->getQueryBuilder()
->delete()
->from(TwoFactorCode::ENTITY_TYPE)
->where([
'createdAt<' => $from,
])
->build();
$this->entityManager
->getQueryExecutor()
->execute($query);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,19 +29,19 @@
namespace Espo\Classes\Cleanup;
use Espo\Core\{
Utils\Config,
ORM\EntityManager,
};
use Espo\Core\Cleanup\Cleanup;
use Espo\Core\Utils\Config;
use Espo\ORM\EntityManager;
use DateTime;
class WebhookQueue
class WebhookQueue implements Cleanup
{
protected $cleanupWebhookQueuePeriod = '10 days';
private $cleanupWebhookQueuePeriod = '10 days';
protected $config;
protected $entityManager;
private $config;
private $entityManager;
public function __construct(Config $config, EntityManager $entityManager)
{
@@ -49,7 +49,7 @@ class WebhookQueue
$this->entityManager = $entityManager;
}
public function process()
public function process(): void
{
$period = '-' . $this->config->get('cleanupWebhookQueuePeriod', $this->cleanupWebhookQueuePeriod);
@@ -58,7 +58,8 @@ class WebhookQueue
$datetime->modify($period);
$from = $datetime->format('Y-m-d H:i:s');
$query = $this->entityManager->getQueryBuilder()
$query1 = $this->entityManager
->getQueryBuilder()
->delete()
->from('WebhookQueueItem')
->where([
@@ -70,9 +71,10 @@ class WebhookQueue
])
->build();
$this->entityManager->getQueryExecutor()->execute($query);
$this->entityManager->getQueryExecutor()->execute($query1);
$query = $this->entityManager->getQueryBuilder()
$query2 = $this->entityManager
->getQueryBuilder()
->delete()
->from('WebhookEventQueueItem')
->where([
@@ -84,6 +86,6 @@ class WebhookQueue
])
->build();
$this->entityManager->getQueryExecutor()->execute($query);
$this->entityManager->getQueryExecutor()->execute($query2);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,42 +29,43 @@
namespace Espo\Classes\ConsoleCommands;
use Espo\Tools\Import\Service;
use Espo\Core\{
ServiceFactory,
Console\Commands\Command,
Console\Command,
Console\Command\Params,
Console\IO,
};
use Throwable;
class Import implements Command
{
protected $serviceFactory;
private $service;
public function __construct(ServiceFactory $serviceFactory)
public function __construct(Service $service)
{
$this->serviceFactory = $serviceFactory;
$this->service = $service;
}
public function run(array $options, array $flagList)
public function run(Params $params, IO $io) : void
{
$id = $options['id'] ?? null;
$filePath = $options['file'] ?? null;
$paramsId = $options['paramsId'] ?? null;
$id = $params->getOption('id');
$filePath = $params->getOption('file');
$paramsId = $params->getOption('paramsId');
$service = $this->serviceFactory->create('Import');
$forceResume = in_array('resume', $flagList);
$revert = in_array('revert', $flagList);
$forceResume = $params->hasFlag('resume');
$revert = $params->hasFlag('revert');
if (!$id && $filePath) {
if (!$paramsId) {
$this->out("You need to specify --params-id option.\n");
$io->writeLine("You need to specify --params-id option.");
return;
}
if (!file_exists($filePath)) {
$this->out("File not found.\n");
$io->writeLine("File not found.");
return;
}
@@ -72,67 +73,60 @@ class Import implements Command
$contents = file_get_contents($filePath);
try {
$result = $service->importFileWithParamsId($contents, $paramsId);
$result = $this->service->importContentsWithParamsId($contents, $paramsId);
$resultId = $result->id;
$countCreated = $result->countCreated;
$countUpdated = $result->countUpdated;
$resultId = $result->getId();
$countCreated = $result->getCountCreated();
$countUpdated = $result->getCountUpdated();
}
catch (Throwable $e) {
$this->out("Error occured: ".$e->getMessage()."\n");
$io->writeLine("Error occurred: ". $e->getMessage() . "");
return;
}
$this->out("Finished. Import ID: {$resultId}. Created: {$countCreated}. Updated: {$countUpdated}.\n");
$io->writeLine("Finished. Import ID: {$resultId}. Created: {$countCreated}. Updated: {$countUpdated}.");
return;
}
if ($id && $revert) {
$this->out("Reverting import...\n");
$io->writeLine("Reverting import...");
try {
$service->revert($id);
$this->service->revert($id);
}
catch (Throwable $e) {
$this->out("Error occured: " . $e->getMessage() . "\n");
$io->writeLine("Error occurred: " . $e->getMessage() . "");
return;
}
$this->out("Finished.\n");
$io->writeLine("Finished.");
return;
}
if ($id) {
$this->out("Running import, this may take a while...\n");
$io->writeLine("Running import, this may take a while...");
try {
$result = $service->importById($id, true, $forceResume);
$result = $this->service->importById($id, true, $forceResume);
}
catch (Throwable $e) {
$this->out("Error occured: " . $e->getMessage() . "\n");
$io->writeLine("Error occurred: " . $e->getMessage() . "");
return;
}
$countCreated = $result->countCreated;
$countUpdated = $result->countUpdated;
$countCreated = $result->getCountCreated();
$countUpdated = $result->getCountUpdated();
$this->out("Finished. Created: {$countCreated}. Updated: {$countUpdated}.\n");
$io->writeLine("Finished. Created: {$countCreated}. Updated: {$countUpdated}.");
return;
}
$this->out("Not enough params passed.\n");
return;
}
protected function out($string)
{
fwrite(\STDOUT, $string);
$io->writeLine("Not enough params passed.");
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 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,7 @@ class DefaultSidePanelType
$this->metadata = $metadata;
}
public function get(string $scope) : array
public function get(string $scope): array
{
$list = [];

View File

@@ -0,0 +1,104 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\DuplicateWhereBuilders;
use Espo\Core\Duplicate\WhereBuilder;
use Espo\ORM\{
Query\Part\Condition as Cond,
Query\Part\WhereItem,
Query\Part\Where\OrGroup,
Entity,
};
class Company implements WhereBuilder
{
public function build(Entity $entity): ?WhereItem
{
$orBuilder = OrGroup::createBuilder();
$toCheck = false;
if ($entity->get('name')) {
$orBuilder->add(
Cond::equal(
Cond::column('name'),
$entity->get('name')
),
);
$toCheck = true;
}
if (
($entity->get('emailAddress') || $entity->get('emailAddressData')) &&
(
$entity->isNew() ||
$entity->isAttributeChanged('emailAddress') ||
$entity->isAttributeChanged('emailAddressData')
)
) {
foreach ($this->getEmailAddressList($entity) as $emailAddress) {
$orBuilder->add(
Cond::equal(
Cond::column('emailAddress'),
$emailAddress
)
);
$toCheck = true;
}
}
if (!$toCheck) {
return null;
}
return $orBuilder->build();
}
private function getEmailAddressList(Entity $entity): array
{
if ($entity->get('emailAddressData')) {
/* @var $eaGroup EmailAddressGroup */
$eaGroup = $entity->getValueObject('emailAddress');
return $eaGroup->getAddressList();
}
if ($entity->get('emailAddress')) {
return [
$entity->get('emailAddress')
];
}
return [];
}
}

View File

@@ -0,0 +1,113 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\DuplicateWhereBuilders;
use Espo\Core\{
Duplicate\WhereBuilder,
Field\EmailAddressGroup,
};
use Espo\ORM\{
Query\Part\Condition as Cond,
Query\Part\WhereItem,
Query\Part\Where\OrGroup,
Entity,
};
class Person implements WhereBuilder
{
public function build(Entity $entity): ?WhereItem
{
$orBuilder = OrGroup::createBuilder();
$toCheck = false;
if ($entity->get('firstName') || $entity->get('lastName')) {
$orBuilder->add(
Cond::and(
Cond::equal(
Cond::column('firstName'),
$entity->get('firstName')
),
Cond::equal(
Cond::column('lastName'),
$entity->get('lastName')
)
)
);
$toCheck = true;
}
if (
($entity->get('emailAddress') || $entity->get('emailAddressData')) &&
(
$entity->isNew() ||
$entity->isAttributeChanged('emailAddress') ||
$entity->isAttributeChanged('emailAddressData')
)
) {
foreach ($this->getEmailAddressList($entity) as $emailAddress) {
$orBuilder->add(
Cond::equal(
Cond::column('emailAddress'),
$emailAddress
)
);
$toCheck = true;
}
}
if (!$toCheck) {
return null;
}
return $orBuilder->build();
}
private function getEmailAddressList(Entity $entity): array
{
if ($entity->get('emailAddressData')) {
/* @var $eaGroup EmailAddressGroup */
$eaGroup = $entity->getValueObject('emailAddress');
return $eaGroup->getAddressList();
}
if ($entity->get('emailAddress')) {
return [
$entity->get('emailAddress')
];
}
return [];
}
}

View File

@@ -0,0 +1,63 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\FieldProcessing\Email;
use Espo\ORM\Entity;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
ORM\EntityManager,
};
use Espo\Repositories\Email as EmailRepository;
class AddressDataLoader implements Loader
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function process(Entity $entity, Params $params): void
{
/* @var $repository EmailRepository */
$repository = $this->entityManager->getRepository('Email');
$repository->loadFromField($entity);
$repository->loadToField($entity);
$repository->loadCcField($entity);
$repository->loadBccField($entity);
$repository->loadReplyToField($entity);
$repository->loadNameHash($entity);
}
}

View File

@@ -0,0 +1,205 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\FieldProcessing\Email;
use Espo\ORM\Entity;
use Espo\ORM\EntityManager;
use Espo\Repositories\EmailAddress as EmailAddressRepository;
use Espo\Entities\EmailAddress;
use Espo\Entities\Email;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
Mail\Event\Event as EspoEvent,
Mail\Event\EventFactory,
Utils\Log,
};
use ICal\ICal;
use ICal\Event;
use Throwable;
class IcsDataLoader implements Loader
{
private $entityManager;
private $log;
private $entityTypeLinkMap = [
'User' => 'users',
'Contact' => 'contacts',
'Lead' => 'leads',
];
public function __construct(EntityManager $entityManager, Log $log)
{
$this->entityManager = $entityManager;
$this->log = $log;
}
public function process(Entity $entity, Params $params): void
{
$icsContents = $entity->get('icsContents');
if ($icsContents === null) {
return;
}
$ical = new ICal();
$ical->initString($icsContents);
/* @var $event Event */
$event = $ical->events()[0] ?? null;
if ($event === null) {
return;
}
if ($event->status === 'CANCELLED') {
return;
}
$espoEvent = EventFactory::createFromU01jmg3Ical($ical);
$valueMap = (object) [
'sourceEmailId' => $entity->getId(),
];
try {
$valueMap->name = $espoEvent->getName();
$valueMap->description = $espoEvent->getDescription();
$valueMap->dateStart = $espoEvent->getDateStart();
$valueMap->dateEnd = $espoEvent->getDateEnd();
$valueMap->location = $espoEvent->getLocation();
$valueMap->isAllDay = $espoEvent->isAllDay();
if ($espoEvent->isAllDay()) {
$valueMap->dateStartDate = $espoEvent->getDateStart();
$valueMap->dateEndDate = $espoEvent->getDateEnd();
}
}
catch (Throwable $e) {
$this->log->warning("Error while converting ICS event '" . $entity->getId() . "': " . $e->getMessage());
return;
}
/* @var $emailAddressRepository EmailAddressRepository */
$emailAddressRepository = $this->entityManager->getRepository(EmailAddress::ENTITY_TYPE);
$attendeeEmailAddressList = $espoEvent->getAttendeeEmailAddressList();
$organizerEmailAddress = $espoEvent->getOrganizerEmailAddress();
if ($organizerEmailAddress) {
$attendeeEmailAddressList[] = $organizerEmailAddress;
}
foreach ($attendeeEmailAddressList as $address) {
$personEntity = $emailAddressRepository->getEntityByAddress($address);
if (!$personEntity) {
continue;
}
$link = $this->entityTypeLinkMap[$personEntity->getEntityType()] ?? null;
if (!$link) {
continue;
}
$idsAttribute = $link . 'Ids';
$namesAttribute = $link . 'Names';
$idList = $valueMap->$idsAttribute ?? [];
$nameMap = $valueMap->$namesAttribute ?? (object) [];
$idList[] = $personEntity->getId();
$nameMap->{$personEntity->getId()} = $personEntity->get('name');
$valueMap->$idsAttribute = $idList;
$valueMap->$namesAttribute = $nameMap;
}
$eventData = (object) [
'valueMap' => $valueMap,
'uid' => $espoEvent->getUid(),
'createdEvent' => null,
];
$this->loadCreatedEvent($entity, $espoEvent, $eventData);
$entity->set('icsEventData', $eventData);
$entity->set('icsEventDateStart', $espoEvent->getDateStart());
if ($espoEvent->isAllDay()) {
$entity->set('icsEventDateStartDate', $espoEvent->getDateStart());
}
}
private function loadCreatedEvent(Entity $entity, EspoEvent $espoEvent, object $eventData): void
{
$emailSameEvent = $this->entityManager
->getRDBRepository(Email::ENTITY_TYPE)
->where([
'icsEventUid' => $espoEvent->getUid(),
'id!=' => $entity->getId()
])
->findOne();
if (!$emailSameEvent) {
return;
}
if (
!$emailSameEvent->get('createdEventId') ||
!$emailSameEvent->get('createdEventType')
) {
return;
}
$createdEvent = $this->entityManager
->getEntity($emailSameEvent->get('createdEventType'), $emailSameEvent->get('createdEventId'));
if (!$createdEvent) {
return;
}
$eventData->createdEvent = (object) [
'id' => $createdEvent->getId(),
'entityType' => $emailSameEvent->getEntityType(),
'name' => $createdEvent->get('name'),
];
}
}

View File

@@ -0,0 +1,122 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\FieldProcessing\Email;
use Espo\ORM\Entity;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
ORM\EntityManager,
};
use Espo\Entities\Email;
use Espo\Entities\User;
class StringDataLoader implements Loader
{
private $entityManager;
private $user;
private $fromEmailAddressNameCache = [];
public function __construct(EntityManager $entityManager, User $user)
{
$this->entityManager = $entityManager;
$this->user = $user;
}
public function process(Entity $entity, Params $params): void
{
$userEmailAdddressIdList = [];
$emailAddressCollection = $this->entityManager
->getRDBRepository('User')
->getRelation($this->user, 'emailAddresses')
->select(['id'])
->find();
foreach ($emailAddressCollection as $emailAddress) {
$userEmailAdddressIdList[] = $emailAddress->getId();
}
if (
in_array($entity->get('fromEmailAddressId'), $userEmailAdddressIdList) ||
$entity->get('createdById') === $this->user->getId() && $entity->get('status') === Email::STATUS_SENT
) {
$entity->loadLinkMultipleField('toEmailAddresses');
$idList = $entity->get('toEmailAddressesIds');
$names = $entity->get('toEmailAddressesNames');
if (empty($idList)) {
return;
}
$list = [];
foreach ($idList as $emailAddressId) {
$person = $this->entityManager
->getRepository('EmailAddress')
->getEntityByAddressId($emailAddressId, null, true);
$list[] = $person ? $person->get('name') : $names->$emailAddressId;
}
$entity->set('personStringData', 'To: ' . implode(', ', $list));
return;
}
$fromEmailAddressId = $entity->get('fromEmailAddressId');
if (!$fromEmailAddressId) {
return;
}
if (!array_key_exists($fromEmailAddressId, $this->fromEmailAddressNameCache)) {
$person = $this->entityManager
->getRepository('EmailAddress')
->getEntityByAddressId($fromEmailAddressId, null, true);
$fromName = $person ? $person->get('name') : null;
$this->fromEmailAddressNameCache[$fromEmailAddressId] = $fromName;
}
$fromName =
$this->fromEmailAddressNameCache[$fromEmailAddressId] ??
$entity->get('fromName') ??
$entity->get('fromEmailAddressName');
$entity->set('personStringData', $fromName);
}
}

View File

@@ -0,0 +1,80 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\FieldProcessing\Email;
use Espo\ORM\Entity;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
ORM\EntityManager,
};
use Espo\Entities\User;
class UserColumnsLoader implements Loader
{
private $entityManager;
private $user;
public function __construct(EntityManager $entityManager, User $user)
{
$this->entityManager = $entityManager;
$this->user = $user;
}
public function process(Entity $entity, Params $params): void
{
$emailUser = $this->entityManager
->getRepository('EmailUser')
->select(['isRead', 'isImportant', 'inTrash'])
->where([
'deleted' => false,
'userId' => $this->user->getId(),
'emailId' => $entity->getId(),
])
->findOne();
if (!$emailUser) {
$entity->set('isRead', null);
$entity->clear('isImportant');
$entity->clear('inTrash');
return;
}
$entity->set([
'isRead' => $emailUser->get('isRead'),
'isImportant' => $emailUser->get('isImportant'),
'inTrash' => $emailUser->get('inTrash'),
]);
}
}

View File

@@ -0,0 +1,66 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\FieldProcessing\Import;
use Espo\ORM\Entity;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
ORM\EntityManager,
};
use Espo\Repositories\Import as ImportRepository;
class CountsLoader implements Loader
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function process(Entity $entity, Params $params): void
{
/* @var $repository ImportRepository */
$repository = $this->entityManager->getRepository('Import');
$importedCount = $repository->countResultRecords($entity, 'imported');
$duplicateCount = $repository->countResultRecords($entity, 'duplicates');
$updatedCount = $repository->countResultRecords($entity, 'updated');
$entity->set([
'importedCount' => $importedCount,
'duplicateCount' => $duplicateCount,
'updatedCount' => $updatedCount,
]);
}
}

View File

@@ -0,0 +1,48 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\FieldProcessing\Note;
use Espo\ORM\Entity;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
};
use Espo\Entities\Note;
class AttachmentsLoader implements Loader
{
public function process(Entity $entity, Params $params): void
{
/* @var $entity Note */
$entity->loadAttachments();
}
}

View File

@@ -0,0 +1,55 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\FieldProcessing\Portal;
use Espo\ORM\Entity;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
ORM\EntityManager,
};
class UrlLoader implements Loader
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function process(Entity $entity, Params $params): void
{
$this->entityManager
->getRepository('Portal')
->loadUrlField($entity);
}
}

View File

@@ -0,0 +1,112 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\FieldProcessing\User;
use Espo\ORM\Entity;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
ORM\EntityManager,
Acl,
Acl\Table,
};
use DateTime;
use Exception;
class LastAccessLoader implements Loader
{
private $entityManager;
private $acl;
public function __construct(EntityManager $entityManager, Acl $acl)
{
$this->entityManager = $entityManager;
$this->acl = $acl;
}
public function process(Entity $entity, Params $params): void
{
$forbiddenFieldList = $this->acl
->getScopeForbiddenFieldList($entity->getEntityType(), Table::ACTION_READ);
if (in_array('lastAccess', $forbiddenFieldList)) {
return;
}
$authToken = $this->entityManager
->getRDBRepository('AuthToken')
->select(['id', 'lastAccess'])
->where([
'userId' => $entity->getId(),
])
->order('lastAccess', 'DESC')
->findOne();
$lastAccess = null;
if ($authToken) {
$lastAccess = $authToken->get('lastAccess');
}
$dt = null;
if ($lastAccess) {
try {
$dt = new DateTime($lastAccess);
}
catch (Exception $e) {}
}
$where = [
'userId' => $entity->getId(),
'isDenied' => false,
];
if ($dt) {
$where['requestTime>'] = $dt->format('U');
}
$authLogRecord = $this->entityManager
->getRDBRepository('AuthLogRecord')
->select(['id', 'createdAt'])
->where($where)
->order('requestTime', true)
->findOne();
if ($authLogRecord) {
$lastAccess = $authLogRecord->get('createdAt');
}
$entity->set('lastAccess', $lastAccess);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,22 +31,31 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class ArrayType extends BaseType
use StdClass;
class ArrayType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
public function checkRequired(Entity $entity, string $field): bool
{
return $this->isNotEmpty($entity, $field);
}
public function checkMaxCount(Entity $entity, string $field, $validationValue, $data) : bool
public function checkMaxCount(Entity $entity, string $field, int $validationValue): bool
{
if (!$this->isNotEmpty($entity, $field)) return true;
if (!$this->isNotEmpty($entity, $field)) {
return true;
}
$list = $entity->get($field);
if (count($list) > $validationValue) return false;
if (count($list) > $validationValue) {
return false;
}
return true;
}
public function checkArray(Entity $entity, string $field, $validationValue, $data) : bool
public function rawCheckArray(StdClass $data, string $field): bool
{
if (isset($data->$field) && $data->$field !== null && !is_array($data->$field)) {
return false;
@@ -55,12 +64,22 @@ class ArrayType extends BaseType
return true;
}
protected function isNotEmpty(Entity $entity, $field)
protected function isNotEmpty(Entity $entity, string $field): bool
{
if (!$entity->has($field) || $entity->get($field) === null) return false;
if (!$entity->has($field) || $entity->get($field) === null) {
return false;
}
$list = $entity->get($field);
if (!is_array($list)) return false;
if (count($list)) return true;
if (!is_array($list)) {
return false;
}
if (count($list)) {
return true;
}
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -33,7 +33,7 @@ use Espo\ORM\Entity;
class CurrencyType extends FloatType
{
protected function isNotEmpty(Entity $entity, $field)
protected function isNotEmpty(Entity $entity, string $field): bool
{
return
$entity->has($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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,14 +31,14 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class DateType extends BaseType
class DateType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
public function checkRequired(Entity $entity, string $field): bool
{
return $this->isNotEmpty($entity, $field);
}
protected function isNotEmpty(Entity $entity, $field)
protected function isNotEmpty(Entity $entity, string $field): bool
{
return $entity->has($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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -33,15 +33,21 @@ use Espo\ORM\Entity;
class DatetimeOptionalType extends DatetimeType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
public function checkRequired(Entity $entity, string $field): bool
{
return $this->isNotEmpty($entity, $field);
}
protected function isNotEmpty(Entity $entity, $field)
protected function isNotEmpty(Entity $entity, string $field): bool
{
if ($entity->has($field) && $entity->get($field) !== null) return true;
if ($entity->has($field . 'Date') && $entity->get($field . 'Date') !== null) return true;
if ($entity->has($field) && $entity->get($field) !== null) {
return true;
}
if ($entity->has($field . 'Date') && $entity->get($field . 'Date') !== null) {
return true;
}
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,46 +31,61 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class EmailType extends BaseType
class EmailType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
public function checkRequired(Entity $entity, string $field): bool
{
if ($this->isNotEmpty($entity, $field)) return true;
if ($this->isNotEmpty($entity, $field)) {
return true;
}
$dataList = $entity->get($field . 'Data');
if (!is_array($dataList)) return false;
if (!is_array($dataList)) {
return false;
}
foreach ($dataList as $item) {
if (!empty($item->emailAddress)) return true;
if (!empty($item->emailAddress)) {
return true;
}
}
return false;
}
public function checkEmailAddress(Entity $entity, string $field, $validationValue, $data) : bool
public function checkEmailAddress(Entity $entity, string $field): bool
{
if ($this->isNotEmpty($entity, $field)) {
$address = $entity->get($field);
if (!filter_var($address, FILTER_VALIDATE_EMAIL)) {
return false;
}
}
$dataList = $entity->get($field . 'Data');
if (is_array($dataList)) {
foreach ($dataList as $item) {
if (empty($item->emailAddress)) continue;
$address = $item->emailAddress;
if (!filter_var($address, FILTER_VALIDATE_EMAIL)) {
return false;
}
if (!is_array($dataList)) {
return true;
}
foreach ($dataList as $item) {
if (empty($item->emailAddress)) {
continue;
}
$address = $item->emailAddress;
if (!filter_var($address, FILTER_VALIDATE_EMAIL)) {
return false;
}
}
return true;
}
protected function isNotEmpty(Entity $entity, $field)
protected 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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,14 +31,14 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class EnumType extends BaseType
class EnumType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
public function checkRequired(Entity $entity, string $field): bool
{
return $this->isNotEmpty($entity, $field);
}
protected function isNotEmpty(Entity $entity, $field)
protected function isNotEmpty(Entity $entity, string $field): bool
{
return $entity->has($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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,28 +31,40 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class IntType extends BaseType
class IntType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
public function checkRequired(Entity $entity, string $field): bool
{
return $this->isNotEmpty($entity, $field);
}
public function checkMax(Entity $entity, string $field, $validationValue, $data) : bool
public function checkMax(Entity $entity, string $field, $validationValue): bool
{
if (!$this->isNotEmpty($entity, $field)) return true;
if ($entity->get($field) > $validationValue) return false;
if (!$this->isNotEmpty($entity, $field)) {
return true;
}
if ($entity->get($field) > $validationValue) {
return false;
}
return true;
}
public function checkMin(Entity $entity, string $field, $validationValue, $data) : bool
public function checkMin(Entity $entity, string $field, $validationValue): bool
{
if (!$this->isNotEmpty($entity, $field)) return true;
if ($entity->get($field) < $validationValue) return false;
if (!$this->isNotEmpty($entity, $field)) {
return true;
}
if ($entity->get($field) < $validationValue) {
return false;
}
return true;
}
protected function isNotEmpty(Entity $entity, $field)
protected function isNotEmpty(Entity $entity, string $field): bool
{
return $entity->has($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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,21 +31,35 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class JsonArrayType extends BaseType
{
public function checkArray(Entity $entity, string $field, $validationValue, $data) : bool
{
if (!$entity->has($field) || $entity->get($field) === null) return true;
use StdClass;
return is_array($entity->get($field));
class JsonArrayType
{
public function rawCheckArray(StdClass $data, string $field): bool
{
if (isset($data->$field) && $data->$field !== null && !is_array($data->$field)) {
return false;
}
return true;
}
protected function isNotEmpty(Entity $entity, $field)
protected function isNotEmpty(Entity $entity, string $field): bool
{
if (!$entity->has($field) || $entity->get($field) === null) return false;
if (!$entity->has($field) || $entity->get($field) === null) {
return false;
}
$list = $entity->get($field);
if (!is_array($list)) return false;
if (count($list)) return true;
if (!is_array($list)) {
return false;
}
if (count($list)) {
return true;
}
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,9 +31,9 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class LinkMultipleType extends BaseType
class LinkMultipleType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
public function checkRequired(Entity $entity, string $field): bool
{
return count($entity->getLinkMultipleIdList($field)) > 0;
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,14 +31,18 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class LinkParentType extends BaseType
class LinkParentType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
public function checkRequired(Entity $entity, string $field): bool
{
$idAttribute = $field . 'Id';
$typeAttribute = $field . 'Type';
if (!$entity->has($idAttribute) || $entity->get($idAttribute) === '' || $entity->get($idAttribute) === null) {
if (
!$entity->has($idAttribute) ||
$entity->get($idAttribute) === '' ||
$entity->get($idAttribute) === null
) {
return false;
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,9 +31,9 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class LinkType extends BaseType
class LinkType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
public function checkRequired(Entity $entity, string $field): bool
{
$idAttribute = $field . 'Id';

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,21 +31,41 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class PersonNameType extends BaseType
use Espo\Core\{
Utils\FieldUtil,
};
class PersonNameType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
private $fieldUtil;
public function __construct(FieldUtil $fieldUtil)
{
$this->fieldUtil = $fieldUtil;
}
public function checkRequired(Entity $entity, string $field): bool
{
$isEmpty = true;
foreach ($this->getActualAttributeList($entity, $field) as $attribute) {
$attributeList = $this->fieldUtil->getActualAttributeList($entity->getEntityType(), $field);
foreach ($attributeList as $attribute) {
if ($attribute === 'salutation' . ucfirst($field)) {
continue;
}
if ($entity->has($attribute) && $entity->get($attribute) !== '') {
$isEmpty = false;
break;
}
}
if ($isEmpty) return false;
if ($isEmpty) {
return false;
}
return true;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,23 +31,30 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class PhoneType extends BaseType
class PhoneType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
public function checkRequired(Entity $entity, string $field): bool
{
if ($this->isNotEmpty($entity, $field)) return true;
if ($this->isNotEmpty($entity, $field)) {
return true;
}
$dataList = $entity->get($field . 'Data');
if (!is_array($dataList)) return false;
if (!is_array($dataList)) {
return false;
}
foreach ($dataList as $item) {
if (!empty($item->phoneNumber)) return true;
if (!empty($item->phoneNumber)) {
return true;
}
}
return false;
}
protected function isNotEmpty(Entity $entity, $field)
protected 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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,25 +31,27 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
class VarcharType extends BaseType
class VarcharType
{
public function checkRequired(Entity $entity, string $field, $validationValue, $data) : bool
public function checkRequired(Entity $entity, string $field): bool
{
return $this->isNotEmpty($entity, $field);
}
public function checkMaxLength(Entity $entity, string $field, $validationValue, $data) : bool
public function checkMaxLength(Entity $entity, string $field, int $validationValue): bool
{
if ($this->isNotEmpty($entity, $field)) {
$value = $entity->get($field);
if (mb_strlen($value) > $validationValue) {
return false;
}
}
return true;
}
protected function isNotEmpty(Entity $entity, $field)
protected function isNotEmpty(Entity $entity, string $field): bool
{
return $entity->has($field) && $entity->get($field) !== '' && $entity->get($field) !== null;
}

View File

@@ -0,0 +1,109 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\JobPreparators;
use Espo\Core\Utils\DateTime;
use Espo\Core\Job\Job\Status;
use Espo\Core\Job\Preparator;
use Espo\Core\Job\Preparator\Data;
use Espo\ORM\EntityManager;
use Espo\Entities\Job as JobEntity;
use DateTimeImmutable;
class CheckEmailAccounts implements Preparator
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function prepare(Data $data, DateTimeImmutable $executeTime): void
{
$collection = $this->entityManager
->getRDBRepository('EmailAccount')
->join('assignedUser', 'assignedUserAdditional')
->where([
'status' => 'Active',
'useImap' => true,
'assignedUserAdditional.isActive' => true,
])
->find();
foreach ($collection as $entity) {
$running = $this->entityManager
->getRDBRepository(JobEntity::ENTITY_TYPE)
->where([
'scheduledJobId' => $data->getId(),
'status' => [
Status::RUNNING,
Status::READY,
],
'targetType' => 'EmailAccount',
'targetId' => $entity->getId(),
])
->findOne();
if ($running) {
continue;
}
$countPending = $this->entityManager
->getRDBRepository(JobEntity::ENTITY_TYPE)
->where([
'scheduledJobId' => $data->getId(),
'status' => Status::PENDING,
'targetType' => 'EmailAccount',
'targetId' => $entity->getId(),
])
->count();
if ($countPending > 1) {
continue;
}
$jobEntity = $this->entityManager->getEntity(JobEntity::ENTITY_TYPE);
$jobEntity->set([
'name' => $data->getName(),
'scheduledJobId' => $data->getId(),
'executeTime' => $executeTime->format(DateTime::SYSTEM_DATE_TIME_FORMAT),
'targetType' => 'EmailAccount',
'targetId' => $entity->getId(),
]);
$this->entityManager->saveEntity($jobEntity);
}
}
}

View File

@@ -0,0 +1,107 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\JobPreparators;
use Espo\Core\Utils\DateTime;
use Espo\Core\Job\Job\Status;
use Espo\Core\Job\Preparator;
use Espo\Core\Job\Preparator\Data;
use Espo\ORM\EntityManager;
use Espo\Entities\Job as JobEntity;
use DateTimeImmutable;
class CheckInboundEmails implements Preparator
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function prepare(Data $data, DateTimeImmutable $executeTime): void
{
$collection = $this->entityManager
->getRDBRepository('InboundEmail')
->where([
'status' => 'Active',
'useImap' => true,
])
->find();
foreach ($collection as $entity) {
$running = $this->entityManager
->getRDBRepository(JobEntity::ENTITY_TYPE)
->where([
'scheduledJobId' => $data->getId(),
'status' => [
Status::RUNNING,
Status::READY,
],
'targetType' => 'InboundEmail',
'targetId' => $entity->getId(),
])
->findOne();
if ($running) {
continue;
}
$countPending = $this->entityManager
->getRDBRepository(JobEntity::ENTITY_TYPE)
->where([
'scheduledJobId' => $data->getId(),
'status' => Status::PENDING,
'targetType' => 'InboundEmail',
'targetId' => $entity->getId(),
])
->count();
if ($countPending > 1) {
continue;
}
$jobEntity = $this->entityManager->getEntity(JobEntity::ENTITY_TYPE);
$jobEntity->set([
'name' => $data->getName(),
'scheduledJobId' => $data->getId(),
'executeTime' => $executeTime->format(DateTime::SYSTEM_DATE_TIME_FORMAT),
'targetType' => 'InboundEmail',
'targetId' => $entity->getId(),
]);
$this->entityManager->saveEntity($jobEntity);
}
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,18 +27,21 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Jobs;
namespace Espo\Classes\Jobs;
use Espo\Core\{
Utils\Config,
ORM\EntityManager,
Jobs\Job,
Job\JobDataLess,
};
class AuthTokenControl implements Job
use DateTime;
class AuthTokenControl implements JobDataLess
{
protected $config;
protected $entityManager;
private $config;
private $entityManager;
public function __construct(Config $config, EntityManager $entityManager)
{
@@ -46,7 +49,7 @@ class AuthTokenControl implements Job
$this->entityManager = $entityManager;
}
public function run()
public function run(): void
{
$authTokenLifetime = $this->config->get('authTokenLifetime');
$authTokenMaxIdleTime = $this->config->get('authTokenMaxIdleTime');
@@ -55,30 +58,39 @@ class AuthTokenControl implements Job
return;
}
$whereClause = array(
'isActive' => true
);
$whereClause = [
'isActive' => true,
];
if ($authTokenLifetime) {
$dt = new \DateTime();
$dt = new DateTime();
$dt->modify('-' . $authTokenLifetime . ' hours');
$authTokenLifetimeThreshold = $dt->format('Y-m-d H:i:s');
$whereClause['createdAt<'] = $authTokenLifetimeThreshold;
}
if ($authTokenMaxIdleTime) {
$dt = new \DateTime();
$dt = new DateTime();
$dt->modify('-' . $authTokenMaxIdleTime . ' hours');
$authTokenMaxIdleTimeThreshold = $dt->format('Y-m-d H:i:s');
$whereClause['lastAccess<'] = $authTokenMaxIdleTimeThreshold;
}
$tokenList = $this->entityManager->getRepository('AuthToken')->where($whereClause)->limit(0, 500)->find();
$tokenList = $this->entityManager
->getRepository('AuthToken')
->where($whereClause)
->limit(0, 500)
->find();
foreach ($tokenList as $token) {
$token->set('isActive', false);
$this->entityManager->saveEntity($token);
}
}

View File

@@ -0,0 +1,83 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Jobs;
use Espo\Core\Exceptions\Error;
use Espo\Services\EmailAccount as Service;
use Espo\Core\{
Job\Job,
Job\Job\Data,
ORM\EntityManager,
};
use Throwable;
class CheckEmailAccounts implements Job
{
private $service;
private $entityManager;
public function __construct(Service $service, EntityManager $entityManager)
{
$this->service = $service;
$this->entityManager = $entityManager;
}
public function run(Data $data): void
{
$targetId = $data->getTargetId();
if (!$targetId) {
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);
}
catch (Throwable $e) {
throw new Error(
'Job CheckEmailAccounts ' . $entity->getId() . ': [' . $e->getCode() . '] ' .$e->getMessage()
);
}
}
}

View File

@@ -0,0 +1,83 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Jobs;
use Espo\Core\Exceptions\Error;
use Espo\Services\InboundEmail as Service;
use Espo\Core\{
Job\Job,
Job\Job\Data,
ORM\EntityManager,
};
use Throwable;
class CheckInboundEmails implements Job
{
private $service;
private $entityManager;
public function __construct(Service $service, EntityManager $entityManager)
{
$this->service = $service;
$this->entityManager = $entityManager;
}
public function run(Data $data): void
{
$targetId = $data->getTargetId();
if (!$targetId) {
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);
}
catch (Throwable $e) {
throw new Error(
'Job CheckInboundEmails ' . $entity->getId() . ': [' . $e->getCode() . '] ' .$e->getMessage()
);
}
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,16 +27,17 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Jobs;
use Espo\Core\Exceptions;
namespace Espo\Classes\Jobs;
class CheckNewExtensionVersion extends CheckNewVersion
{
public function run()
public function run(): void
{
if (!$this->config->get('adminNotifications') || !$this->config->get('adminNotificationsNewExtensionVersion')) {
return true;
if (
!$this->config->get('adminNotifications') ||
!$this->config->get('adminNotificationsNewExtensionVersion')
) {
return;
}
$job = $this->entityManager->getEntity('Job');
@@ -48,7 +49,5 @@ class CheckNewExtensionVersion extends CheckNewVersion
]);
$this->entityManager->saveEntity($job);
return true;
}
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,20 +27,21 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Jobs;
namespace Espo\Classes\Jobs;
use Espo\Core\{
Utils\Config,
ORM\EntityManager,
Jobs\Job,
Job\JobDataLess,
};
use DateTime;
use DateTimeZone;
class CheckNewVersion implements Job
class CheckNewVersion implements JobDataLess
{
protected $config;
protected $entityManager;
public function __construct(Config $config, EntityManager $entityManager)
@@ -49,13 +50,14 @@ class CheckNewVersion implements Job
$this->entityManager = $entityManager;
}
public function run()
public function run(): void
{
if (!$this->config->get('adminNotifications') || !$this->config->get('adminNotificationsNewVersion')) {
return true;
return;
}
$job = $this->entityManager->getEntity('Job');
$job->set([
'name' => 'Check for New Version (job)',
'serviceName' => 'AdminNotifications',
@@ -65,7 +67,7 @@ class CheckNewVersion implements Job
$this->entityManager->saveEntity($job);
return true;
return;
}
protected function getRunTime()
@@ -77,6 +79,7 @@ class CheckNewVersion implements Job
$time = $nextDay->format('Y-m-d') . ' ' . $hour . ':' . $minute . ':00';
$timeZone = $this->config->get('timeZone');
if (empty($timeZone)) {
$timeZone = 'UTC';
}
@@ -88,6 +91,7 @@ class CheckNewVersion implements Job
/**
* For backward compatibility.
* @deprecated
*/
protected function getEntityManager()
{

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,19 +27,19 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Jobs;
namespace Espo\Classes\Jobs;
use Espo\Core\Exceptions;
use Espo\Core\Record\ServiceContainer;
use Espo\Core\{
Utils\Config,
ORM\EntityManager,
Jobs\Job,
Job\JobDataLess,
Utils\Metadata,
Utils\File\Manager as FileManager,
InjectableFactory,
Select\SelectManagerFactory,
ServiceFactory,
Select\SelectBuilderFactory,
Utils\Log,
};
use Espo\ORM\Entity;
@@ -49,25 +49,41 @@ use SplFileInfo;
use Exception;
use Throwable;
class Cleanup implements Job
class Cleanup implements JobDataLess
{
protected $cleanupJobPeriod = '10 days';
protected $cleanupActionHistoryPeriod = '15 days';
protected $cleanupAuthTokenPeriod = '1 month';
protected $cleanupAuthLogPeriod = '2 months';
protected $cleanupNotificationsPeriod = '2 months';
protected $cleanupAttachmentsPeriod = '15 days';
protected $cleanupAttachmentsFromPeriod = '3 months';
protected $cleanupBackupPeriod = '2 month';
protected $cleanupDeletedRecordsPeriod = '3 months';
private $cleanupJobPeriod = '10 days';
protected $config;
protected $entityManager;
protected $metedata;
protected $fileManager;
protected $injectableFactory;
protected $selectManagerFactory;
protected $serviceFactory;
private $cleanupActionHistoryPeriod = '15 days';
private $cleanupAuthTokenPeriod = '1 month';
private $cleanupAuthLogPeriod = '2 months';
private $cleanupNotificationsPeriod = '2 months';
private $cleanupAttachmentsPeriod = '15 days';
private $cleanupAttachmentsFromPeriod = '3 months';
private $cleanupBackupPeriod = '2 month';
private $cleanupDeletedRecordsPeriod = '3 months';
private $config;
private $entityManager;
private $metadata;
private $fileManager;
private $injectableFactory;
private $selectBuilderFactory;
private $recordServiceContainer;
private $log;
public function __construct(
Config $config,
@@ -75,19 +91,21 @@ class Cleanup implements Job
Metadata $metadata,
FileManager $fileManager,
InjectableFactory $injectableFactory,
SelectManagerFactory $selectManagerFactory,
ServiceFactory $serviceFactory
SelectBuilderFactory $selectBuilderFactory,
ServiceContainer $recordServiceContainer,
Log $log
) {
$this->config = $config;
$this->entityManager = $entityManager;
$this->metadata = $metadata;
$this->fileManager = $fileManager;
$this->injectableFactory = $injectableFactory;
$this->selectManagerFactory = $selectManagerFactory;
$this->serviceFactory = $serviceFactory;
$this->selectBuilderFactory = $selectBuilderFactory;
$this->recordServiceContainer = $recordServiceContainer;
$this->log = $log;
}
public function run()
public function run(): void
{
$this->cleanupJobs();
$this->cleanupScheduledJobLog();
@@ -107,7 +125,7 @@ class Cleanup implements Job
$o1 = $a['order'] ?? 0;
$o2 = $b['order'] ?? 0;
return $o1 > $o2;
return $o1 <=> $o2;
});
$injectableFactory = $this->injectableFactory;
@@ -115,15 +133,16 @@ class Cleanup implements Job
foreach ($items as $name => $item) {
try {
$className = $item['className'];
$injectableFactory->create($className)->process();
}
catch (Throwable $e) {
$GLOBALS['log']->error("Cleanup: {$name}: " . $e->getMessage());
$this->log->error("Cleanup: {$name}: " . $e->getMessage());
}
}
}
protected function cleanupJobs()
private function cleanupJobs(): void
{
$delete = $this->entityManager->getQueryBuilder()->delete()
->from('Job')
@@ -147,9 +166,11 @@ class Cleanup implements Job
$this->entityManager->getQueryExecutor()->execute($delete);
}
protected function cleanupUniqueIds()
private function cleanupUniqueIds(): void
{
$delete = $this->entityManager->getQueryBuilder()->delete()
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from('UniqueId')
->where([
'terminateAt!=' => null,
@@ -160,7 +181,7 @@ class Cleanup implements Job
$this->entityManager->getQueryExecutor()->execute($delete);
}
protected function cleanupScheduledJobLog()
private function cleanupScheduledJobLog(): void
{
$scheduledJobList = $this->entityManager->getRepository('ScheduledJob')
->select(['id'])
@@ -187,7 +208,9 @@ class Cleanup implements Job
$ignoreIdList[] = $logRecord->get('id');
}
$delete = $this->entityManager->getQueryBuilder()->delete()
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from('ScheduledJobLogRecord')
->where([
'scheduledJobId' => $scheduledJobId,
@@ -200,7 +223,7 @@ class Cleanup implements Job
}
}
protected function cleanupActionHistory()
private function cleanupActionHistory(): void
{
$period = '-' . $this->config->get('cleanupActionHistoryPeriod', $this->cleanupActionHistoryPeriod);
@@ -218,14 +241,16 @@ class Cleanup implements Job
$this->entityManager->getQueryExecutor()->execute($delete);
}
protected function cleanupAuthToken()
private function cleanupAuthToken(): void
{
$period = '-' . $this->config->get('cleanupAuthTokenPeriod', $this->cleanupAuthTokenPeriod);
$datetime = new DateTime();
$datetime->modify($period);
$delete = $this->entityManager->getQueryBuilder()->delete()
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from('AuthToken')
->where([
'DATE:modifiedAt<' => $datetime->format('Y-m-d'),
@@ -236,7 +261,7 @@ class Cleanup implements Job
$this->entityManager->getQueryExecutor()->execute($delete);
}
protected function cleanupAuthLog()
private function cleanupAuthLog(): void
{
$period = '-' . $this->config->get('cleanupAuthLogPeriod', $this->cleanupAuthLogPeriod);
@@ -244,7 +269,9 @@ class Cleanup implements Job
$datetime->modify($period);
$delete = $this->entityManager->getQueryBuilder()->delete()
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from('AuthLogRecord')
->where([
'DATE:createdAt<' => $datetime->format('Y-m-d'),
@@ -254,21 +281,18 @@ class Cleanup implements Job
$this->entityManager->getQueryExecutor()->execute($delete);
}
protected function getCleanupJobFromDate()
private function getCleanupJobFromDate(): string
{
$period = '-' . $this->config->get('cleanupJobPeriod', $this->cleanupJobPeriod);
$datetime = new DateTime();
$datetime->modify($period);
return $datetime->format('Y-m-d');
}
protected function cleanupAttachments()
private function cleanupAttachments(): void
{
$pdo = $this->entityManager->getPDO();
$period = '-' . $this->config->get('cleanupAttachmentsPeriod', $this->cleanupAttachmentsPeriod);
$datetime = new DateTime();
@@ -293,17 +317,22 @@ class Cleanup implements Job
}
if ($this->config->get('cleanupOrphanAttachments')) {
$selectManager = $this->selectManagerFactory->create('Attachment');
$orphanQueryBuilder = $this->selectBuilderFactory
->create()
->from('Attachment')
->withPrimaryFilter('orphan')
->buildQueryBuilder();
$selectParams = $selectManager->getEmptySelectParams();
$selectManager->applyFilter('orphan', $selectParams);
$selectParams['whereClause'][] = [
$orphanQueryBuilder->where([
'createdAt<' => $datetime->format('Y-m-d H:i:s'),
'createdAt>' => '2018-01-01 00:00:00',
];
]);
$collection = $this->entityManager->getRepository('Attachment')->limit(0, 5000)->find($selectParams);
$collection = $this->entityManager
->getRepository('Attachment')
->clone($orphanQueryBuilder->build())
->limit(0, 5000)
->find();
foreach ($collection as $entity) {
$this->entityManager->removeEntity($entity);
@@ -418,7 +447,7 @@ class Cleanup implements Job
$this->entityManager->getQueryExecutor()->execute($delete);
}
protected function cleanupEmails()
private function cleanupEmails(): void
{
$dateBefore = date('Y-m-d H:i:s', time() - 3600 * 24 * 20);
@@ -474,7 +503,7 @@ class Cleanup implements Job
}
}
protected function cleanupNotifications()
private function cleanupNotifications(): void
{
$period = '-' . $this->config->get('cleanupNotificationsPeriod', $this->cleanupNotificationsPeriod);
@@ -492,7 +521,7 @@ class Cleanup implements Job
}
}
protected function cleanupUpgradeBackups()
private function cleanupUpgradeBackups(): void
{
$path = 'data/.backup/upgrades';
@@ -514,7 +543,7 @@ class Cleanup implements Job
}
}
protected function cleanupDeletedEntity(Entity $entity)
private function cleanupDeletedEntity(Entity $entity): void
{
$scope = $entity->getEntityType();
@@ -574,7 +603,7 @@ class Cleanup implements Job
$this->entityManager->getQueryExecutor()->execute($delete);
}
catch (Exception $e) {
$GLOBALS['log']->error("Cleanup: " . $e->getMessage());
$this->log->error("Cleanup: " . $e->getMessage());
}
}
@@ -637,7 +666,7 @@ class Cleanup implements Job
}
}
protected function cleanupDeletedRecords()
private function cleanupDeletedRecords(): void
{
if (!$this->config->get('cleanupDeletedRecords')) {
return;
@@ -647,8 +676,6 @@ class Cleanup implements Job
$datetime = new DateTime($period);
$serviceFactory = $this->serviceFactory;
$scopeList = array_keys($this->metadata->get(['scopes']));
foreach ($scopeList as $scope) {
@@ -677,14 +704,11 @@ class Cleanup implements Job
if (!method_exists($repository, 'deleteFromDb')) continue;
$hasCleanupMethod = false;
$service = null;
if ($serviceFactory->checkExists($scope)) {
$service = $serviceFactory->create($scope);
$service = $this->recordServiceContainer->get($scope);
if (method_exists($service, 'cleanup')) {
$hasCleanupMethod = true;
}
if (method_exists($service, 'cleanup')) {
$hasCleanupMethod = true;
}
$whereClause = [
@@ -693,8 +717,8 @@ class Cleanup implements Job
if ($this->metadata->get(['entityDefs', $scope, 'fields', 'modifiedAt'])) {
$whereClause['modifiedAt<'] = $datetime->format('Y-m-d H:i:s');
} else
if ($this->metadata->get(['entityDefs', $scope, 'fields', 'createdAt'])) {
}
else if ($this->metadata->get(['entityDefs', $scope, 'fields', 'createdAt'])) {
$whereClause['createdAt<'] = $datetime->format('Y-m-d H:i:s');
}
@@ -716,7 +740,7 @@ class Cleanup implements Job
$service->cleanup($entity->id);
}
catch (Throwable $e) {
$GLOBALS['log']->error("Cleanup job: Cleanup scope {$scope}: " . $e->getMessage());
$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-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,15 +27,11 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Jobs;
namespace Espo\Classes\Jobs;
use Espo\Core\{
Jobs\Job,
};
use Espo\Core\Job\JobDataLess;
class Dummy implements Job
class Dummy implements JobDataLess
{
public function run()
{
}
public function run(): void {}
}

View File

@@ -0,0 +1,50 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2021 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\Jobs;
use Espo\Core\{
Job\JobDataLess,
Webhook\Queue,
};
class ProcessWebhookQueue implements JobDataLess
{
private $queue;
public function __construct(Queue $queue)
{
$this->queue = $queue;
}
public function run(): void
{
$this->queue->process();
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2020 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,21 +27,23 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\SelectManagers;
namespace Espo\Classes\Jobs;
class AuthToken extends \Espo\Core\Select\SelectManager
use Espo\Core\Job\JobDataLess;
use Espo\Tools\EmailNotification\Processor;
class SendEmailNotifications implements JobDataLess
{
protected function filterActive(&$result)
private $processor;
public function __construct(Processor $processor)
{
$result['whereClause'][] = array(
'isActive' => true
);
$this->processor = $processor;
}
protected function filterInactive(&$result)
public function run(): void
{
$result['whereClause'][] = array(
'isActive' => false
);
$this->processor->process();
}
}

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