Compare commits

...

746 Commits
7.2.5 ... 7.3.2

Author SHA1 Message Date
Yuri Kuznetsov
c351a8fc02 v 2023-01-16 09:22:33 +02:00
Yuri Kuznetsov
14c0f12fe9 fix 2023-01-16 09:12:17 +02:00
Yuri Kuznetsov
9e5810c8cf lang 2023-01-15 11:12:02 +02:00
Yuri Kuznetsov
e6a0a94e17 label fix 2023-01-15 10:39:39 +02:00
Yuri Kuznetsov
777f9de3d9 oidc pass client secret 2023-01-15 10:31:53 +02:00
Yuri Kuznetsov
791c172c7a fix from name 2023-01-13 16:32:00 +02:00
Yuri Kuznetsov
3bef6d8e84 fix follow entity check acl 2023-01-12 20:27:46 +02:00
Yuri Kuznetsov
093d71e5ae mass action delete 2023-01-12 19:01:39 +02:00
Yuri Kuznetsov
67e83f5c9e labels 2023-01-12 12:27:47 +02:00
Yuri Kuznetsov
b952f3dbfb fix hide/show remove 2023-01-12 10:59:08 +02:00
Yuri Kuznetsov
23b125f552 fix grouped notifications 2023-01-12 10:13:48 +02:00
Yuri Kuznetsov
93e17e8f8d cleanup 2023-01-12 09:57:36 +02:00
Yuri Kuznetsov
9af562fda2 notifications fix 2023-01-11 14:31:49 +02:00
Yuri Kuznetsov
0612cd2399 fix 2023-01-11 13:05:32 +02:00
Yuri Kuznetsov
811ea3ad27 grouped popup notifications interval 2023-01-11 12:48:07 +02:00
Yuri Kuznetsov
967571f030 cs 2023-01-11 12:11:00 +02:00
Yuri Kuznetsov
ac2576b760 add idea/misc.xml 2023-01-11 09:20:58 +02:00
Taras Machyshyn
7f1bc0cf1d Upgrade script 2023-01-10 22:15:17 +02:00
Yuri Kuznetsov
3ba9ea5085 email prevent drag by menu 2023-01-10 11:31:26 +02:00
Yuri Kuznetsov
08512304f1 class alias check existance 2023-01-10 09:44:04 +02:00
Yuri Kuznetsov
c0da4e1777 setup system user attributes to select 2023-01-10 09:28:30 +02:00
Yuri Kuznetsov
14705e2100 v 2023-01-09 18:12:05 +02:00
Yuri Kuznetsov
0c99f35c02 fix working time calendar apperance 2023-01-09 18:11:26 +02:00
Yuri Kuznetsov
a91da86ae4 working calendar noJoin 2023-01-09 17:46:40 +02:00
Yuri Kuznetsov
fe726b2637 de_DE 2023-01-09 11:21:40 +02:00
Yuri Kuznetsov
8852dd7ea2 it_IT 2023-01-09 11:17:05 +02:00
Yuri Kuznetsov
44897a64b5 fix upgrade 2023-01-09 10:48:29 +02:00
Yuri Kuznetsov
4f160937a4 string for upgrade 2023-01-09 10:32:12 +02:00
Yuri Kuznetsov
6ca02933c9 v 2023-01-09 10:20:07 +02:00
Yuri Kuznetsov
d233d8ce46 fix smtp params bc 2023-01-05 16:05:16 +02:00
Yuri Kuznetsov
07db57717f campaign enable on list 2023-01-05 12:04:19 +02:00
Taras Machyshyn
6f676c8a2f 2023 year 2023-01-03 16:01:43 +02:00
Yuri Kuznetsov
ac667356c5 fix loading not hiding 2023-01-02 14:47:49 +02:00
Yuri Kuznetsov
acef776782 fix select caret width 2023-01-02 14:31:04 +02:00
Yuri Kuznetsov
ff41b49538 fix notice 2022-12-30 17:58:40 +02:00
Taras Machyshyn
24d2bd5cad Notice fixes 2022-12-30 15:10:08 +02:00
Yuri Kuznetsov
86a092ddb1 fix 2022-12-29 14:08:27 +02:00
Yuri Kuznetsov
6c2fa01375 fix lead capture message 2022-12-29 13:58:07 +02:00
Yuri Kuznetsov
77eaaa45d9 Merge branch 'fix' 2022-12-29 13:03:43 +02:00
David
3d8b487754 getColumns datatype fix (#2545)
Co-authored-by: David Moškoř <david.moskor@apertia.cz>
2022-12-29 13:03:06 +02:00
Yuri Kuznetsov
94c6715c21 Merge branch 'fix' 2022-12-26 13:24:26 +02:00
Yuri Kuznetsov
976a10ed0a fix 2022-12-26 13:24:18 +02:00
Yuri Kuznetsov
a5c7fb8905 ref move 2022-12-24 12:13:04 +02:00
Yuri Kuznetsov
4dec6b8d49 import task date completed 2022-12-24 11:04:03 +02:00
Yuri Kuznetsov
e1eaeab938 fix import null related name 2022-12-24 11:03:42 +02:00
Yuri Kuznetsov
4a4766cb0b Merge branch 'fix' 2022-12-23 22:08:20 +02:00
Yuri Kuznetsov
686219c60b fix btn add radous 2022-12-23 22:05:04 +02:00
Yuri Kuznetsov
a97c642d3b fix 2022-12-23 11:29:50 +02:00
Yuri Kuznetsov
432d45e122 lead capture is invalid fix 2022-12-23 11:27:15 +02:00
Yuri Kuznetsov
336bb95d11 fix 2022-12-20 14:36:58 +02:00
Yuri Kuznetsov
185a24f007 docs 2022-12-20 14:33:06 +02:00
Yuri Kuznetsov
6cfe9b6b43 cs 2022-12-20 14:21:36 +02:00
Yuri Kuznetsov
61cdcbfeb5 cs 2022-12-20 14:20:03 +02:00
Yuri Kuznetsov
b0a77054dc labels 2022-12-19 15:54:39 +02:00
Yuri Kuznetsov
f6fb791fd2 docs fix 2022-12-19 15:51:58 +02:00
Yuri Kuznetsov
ec3a6bf0a2 fix group email folder 2022-12-19 12:11:51 +02:00
Yuri Kuznetsov
8e277fdb36 css fix 2022-12-19 11:50:32 +02:00
Yuri Kuznetsov
085e5ef4bf currency no-join-mode 2022-12-19 10:58:05 +02:00
Yuri Kuznetsov
cf7f382784 oidc user provider 2022-12-18 21:32:18 +02:00
Yuri Kuznetsov
65266fcf25 link multiple custom field fixes 2022-12-17 11:16:58 +02:00
Yuri Kuznetsov
8bc34aab9b htmlizer take into account noLoad 2022-12-17 10:42:42 +02:00
Yuri Kuznetsov
3bd73f16a8 ref 2022-12-17 10:39:04 +02:00
Yuri Kuznetsov
0db4057d44 fix deleted return 2022-12-15 18:40:49 +02:00
Yuri Kuznetsov
f14bc07174 css fix 2022-12-13 18:30:11 +02:00
Yuri Kuznetsov
8e91786d99 fix list quick view show more issue 2022-12-13 17:48:24 +02:00
Yuri Kuznetsov
44745aef14 cs 2022-12-13 17:28:33 +02:00
Yuri Kuznetsov
56640839d2 cs 2022-12-12 12:55:43 +02:00
Yuri Kuznetsov
1e319a91ba phpdoc fix 2022-12-12 12:53:33 +02:00
Yuri Kuznetsov
c37b2964c2 cs 2022-12-12 12:06:04 +02:00
Yuri Kuznetsov
24647cd5fb attribute-fetcher foreign skip many 2022-12-10 15:19:21 +02:00
Yuri Kuznetsov
d407494579 fix warning 2022-12-09 15:56:53 +02:00
Yuri Kuznetsov
b43843f882 fix select auto position 2022-12-09 14:49:50 +02:00
Yuri Kuznetsov
87c5371846 formula attribute fetch phone email 2022-12-09 13:23:53 +02:00
Yuri Kuznetsov
7b9c6cdb3f ref 2022-12-09 13:17:43 +02:00
Yuri Kuznetsov
32ea4dae9d formula ref 2022-12-09 12:57:01 +02:00
Yuri Kuznetsov
a3cb0e6313 fix 2022-12-09 11:52:59 +02:00
Yuri Kuznetsov
0f88e535ad css fix 2022-12-08 21:58:42 +02:00
Yuri Kuznetsov
3edb739e2a lang acl anyScopeList 2022-12-08 20:12:30 +02:00
Yuri Kuznetsov
82ad48c586 jsdoc fix 2022-12-08 18:23:10 +02:00
Yuri Kuznetsov
710f6783bc select shortcut save fix 2022-12-08 18:22:23 +02:00
Yuri Kuznetsov
797c5453c9 fix select ctrl+s/enter 2022-12-08 13:54:58 +02:00
Yuri Kuznetsov
a03ef074ef css fix 2022-12-08 11:25:16 +02:00
Yuri Kuznetsov
1e6b28e560 multi-select use text param 2022-12-08 11:22:04 +02:00
Yuri Kuznetsov
77c7468512 ref 2022-12-08 11:19:31 +02:00
Yuri Kuznetsov
0764231ab6 fix select match any word 2022-12-08 10:59:03 +02:00
Yuri Kuznetsov
a779fc0a99 select hight 2022-12-08 10:39:47 +02:00
Yuri Kuznetsov
d5fb8af1a3 install default theme 2022-12-07 17:18:14 +02:00
Yuri Kuznetsov
3099ef6dc3 install checkboxes 2022-12-07 17:18:07 +02:00
Yuri Kuznetsov
078a445e18 cleanup 2022-12-07 10:49:58 +02:00
Yuri Kuznetsov
e6e1471a53 ref convert btn 2022-12-07 10:34:23 +02:00
Yuri Kuznetsov
b16ffc4739 follow button refactor 2022-12-06 20:24:50 +02:00
Yuri Kuznetsov
ec44deceaa record handler in setupFinal 2022-12-06 18:35:13 +02:00
Yuri Kuznetsov
31b416d3ee ref 2022-12-06 18:12:54 +02:00
Yuri Kuznetsov
9dd0f8eb70 js docs 2022-12-06 17:10:41 +02:00
Yuri Kuznetsov
cf508debae ref 2022-12-06 17:03:09 +02:00
Yuri Kuznetsov
e25227e853 cs 2022-12-05 12:17:20 +02:00
Yuri Kuznetsov
6bba422d07 fix select letter 2022-12-05 12:17:03 +02:00
Yuri Kuznetsov
a1337cefe4 email template & template selectize 2022-12-05 12:07:17 +02:00
Yuri Kuznetsov
1ce54bbb33 cs 2022-12-05 11:34:15 +02:00
Yuri Kuznetsov
e46edf2b36 ref 2022-12-04 15:41:52 +02:00
Yuri Kuznetsov
0093a03b7b ref 2022-12-04 15:23:35 +02:00
Yuri Kuznetsov
f35df154ae fix phpdoc 2022-12-04 14:11:01 +02:00
Yuri Kuznetsov
a5dc3aae70 fix phpdoc 2022-12-04 14:09:27 +02:00
Yuri Kuznetsov
847ac0c20a cs 2022-12-04 13:38:29 +02:00
Yuri Kuznetsov
87396518f1 save options 2022-12-04 13:32:27 +02:00
Yuri Kuznetsov
4ba74fe8b4 fix 2022-12-01 19:58:09 +02:00
Yuri Kuznetsov
8858d96cda no SMTP label 2022-12-01 19:52:55 +02:00
Yuri Kuznetsov
415e30ece8 cs 2022-12-01 19:38:29 +02:00
Yuri Kuznetsov
1a0958e65a label radius in var 2022-12-01 13:59:17 +02:00
Yuri Kuznetsov
cf0e5bb328 clientXFrameOptionsHeaderDisabled 2022-12-01 12:28:04 +02:00
Yuri Kuznetsov
b02e1218ee update flotr 2022-11-30 17:34:26 +02:00
Yuri Kuznetsov
ba478fcce5 timepicker css fix 2022-11-30 10:54:24 +02:00
Yuri Kuznetsov
9682138038 ref 2022-11-29 21:11:09 +02:00
Yuri Kuznetsov
59499f6f07 ref 2022-11-29 21:08:57 +02:00
Yuri Kuznetsov
b425a335ab fix typo 2022-11-29 20:38:47 +02:00
Yuri Kuznetsov
8cdde45b1b ref 2022-11-29 20:37:35 +02:00
Yuri Kuznetsov
d00925d99a ref 2022-11-29 20:35:42 +02:00
Yuri Kuznetsov
2fffec3e5d css fix 2022-11-29 18:54:31 +02:00
Yuri Kuznetsov
395785d0c4 cs 2022-11-29 18:31:17 +02:00
Yuri Kuznetsov
3812856740 ref 2022-11-29 18:19:11 +02:00
Yuri Kuznetsov
088558d969 cleanup 2022-11-29 17:59:12 +02:00
Yuri Kuznetsov
d79e81f652 ref 2022-11-29 17:58:41 +02:00
Yuri Kuznetsov
39c0f159a8 ref 2022-11-29 17:56:45 +02:00
Yuri Kuznetsov
f2ea162952 campaign log impr 2022-11-29 17:27:06 +02:00
Yuri Kuznetsov
fdde599205 style fix 2022-11-29 16:10:18 +02:00
Yuri Kuznetsov
7e80ca806d fix currency validation 2022-11-29 16:05:43 +02:00
Yuri Kuznetsov
09bf5219ad cs 2022-11-29 13:29:49 +02:00
Yuri Kuznetsov
9922dc8e22 doc fix 2022-11-29 13:10:57 +02:00
Yuri Kuznetsov
b9bb4bc0b5 readme fix 2022-11-29 13:03:35 +02:00
Yuri Kuznetsov
d5a928d955 fix save duplicate 2022-11-29 12:27:29 +02:00
Yuri Kuznetsov
aad2ab08c5 fix docs 2022-11-29 12:08:29 +02:00
Yuri Kuznetsov
5d18d50ca0 ref 2022-11-29 12:01:23 +02:00
Yuri Kuznetsov
54f2ab411f ref 2022-11-29 11:41:49 +02:00
Yuri Kuznetsov
b066c3d3da fix email drop css 2022-11-28 18:01:17 +02:00
Yuri Kuznetsov
957a2fa171 fix upgrade 2022-11-28 17:06:30 +02:00
Yuri Kuznetsov
61ccee3ac2 unknown error msg 2022-11-28 16:52:20 +02:00
Yuri Kuznetsov
c889edb782 cs 2022-11-28 16:50:32 +02:00
Yuri Kuznetsov
e1f673fe78 prevent email drag on touch devise 2022-11-28 16:44:45 +02:00
Yuri Kuznetsov
8b781d32da focus fix 2022-11-28 16:01:15 +02:00
Yuri Kuznetsov
3c06d6684e send invintations from modal fix 2022-11-28 15:47:19 +02:00
Yuri Kuznetsov
6bf8274d11 fix focus 2022-11-28 15:33:20 +02:00
Yuri Kuznetsov
2b59c5bdec email template fix inline attachments 2022-11-28 14:22:30 +02:00
Yuri Kuznetsov
4f6497f412 fix workflow 2022-11-28 12:27:12 +02:00
Yuri Kuznetsov
1fa937ef64 focus fix 2022-11-28 09:43:11 +02:00
Yuri Kuznetsov
4ffc309e11 fix 2022-11-28 09:36:47 +02:00
Yuri Kuznetsov
33b60e6791 email account tabs 2022-11-27 19:52:54 +02:00
Yuri Kuznetsov
378bebb2bf fix select 2022-11-27 19:07:00 +02:00
Yuri Kuznetsov
7925f2468a from address select 2022-11-27 19:05:08 +02:00
Yuri Kuznetsov
a1d0c494af ref 2022-11-27 19:01:13 +02:00
Yuri Kuznetsov
a86ca38bd7 reply from address email sent to 2022-11-27 18:55:32 +02:00
Yuri Kuznetsov
18cf4c4cf5 email archived save shortcut 2022-11-27 18:44:35 +02:00
Yuri Kuznetsov
cf42f49431 email archived save shortcut 2022-11-27 18:44:12 +02:00
Yuri Kuznetsov
82df939bda cleanup 2022-11-27 16:22:09 +02:00
Yuri Kuznetsov
94f0c0bb3e fix typo 2022-11-27 14:05:00 +02:00
Yuri Kuznetsov
9f78afd0e6 8.2 integration test workflow 2022-11-27 13:59:49 +02:00
Yuri Kuznetsov
04f4a4a63a exception hasLogLevel 2022-11-27 13:55:54 +02:00
Yuri Kuznetsov
31c226dd16 fix property access 2022-11-27 13:34:05 +02:00
Yuri Kuznetsov
9fe3f7cdf8 cs 2022-11-27 13:30:19 +02:00
Yuri Kuznetsov
be744399cb add 8,2 to test workflow 2022-11-27 13:25:29 +02:00
Yuri Kuznetsov
866c336a0b remove zend bridge 2022-11-27 13:16:48 +02:00
Yuri Kuznetsov
4928edc4d1 update laminas crypt 2022-11-27 12:33:22 +02:00
Yuri Kuznetsov
2e1b35d404 remove prophecy 2022-11-27 12:32:08 +02:00
Yuri Kuznetsov
a8db63910e composer dep updates 2022-11-27 12:27:18 +02:00
Yuri Kuznetsov
2cde8e8918 jsdoc 2022-11-26 20:50:21 +02:00
Yuri Kuznetsov
6c59f70cf4 jsdoc 2022-11-26 20:38:17 +02:00
Yuri Kuznetsov
2ac1c8d444 cs 2022-11-26 20:10:13 +02:00
Yuri Kuznetsov
7526e737b8 once-remove => on-remove 2022-11-26 19:55:18 +02:00
Yuri Kuznetsov
0d44d04a17 ref 2022-11-26 19:50:06 +02:00
Yuri Kuznetsov
bc81154ce2 ref 2022-11-26 19:48:47 +02:00
Yuri Kuznetsov
1632668529 ref 2022-11-26 19:46:54 +02:00
Yuri Kuznetsov
fbd05ebafa ref 2022-11-26 19:45:19 +02:00
Yuri Kuznetsov
2c6f9f02df cleanup 2022-11-26 19:43:18 +02:00
Yuri Kuznetsov
5c572b9750 scheduler item bg color fix 2022-11-26 19:41:28 +02:00
Yuri Kuznetsov
5be21c7342 cs fix 2022-11-26 19:38:35 +02:00
Yuri Kuznetsov
7d662eab8e disable call scheduler by default 2022-11-26 19:35:19 +02:00
Yuri Kuznetsov
8734a00d11 cs fix 2022-11-26 19:31:15 +02:00
Yuri Kuznetsov
d4511e3983 scheduler on edit-small 2022-11-26 19:21:23 +02:00
Yuri Kuznetsov
ae643c5a28 phone/email is invalid fields 2022-11-25 18:05:40 +02:00
Yuri Kuznetsov
e6dc5dd12b bool search selectize 2022-11-25 11:28:58 +02:00
Yuri Kuznetsov
566f92149c ref 2022-11-25 10:55:35 +02:00
Yuri Kuznetsov
99bf7fc524 ref 2022-11-25 10:47:58 +02:00
Yuri Kuznetsov
b350bd4fc1 event confirmation fixes 2022-11-25 09:41:16 +02:00
Yuri Kuznetsov
58d1e67b53 Merge branch 'fix' 2022-11-25 08:58:23 +02:00
Yuri Kuznetsov
20855e81d4 fix remove related from modal 2022-11-25 08:57:56 +02:00
Yuri Kuznetsov
3282de2c8f cancellation email 2022-11-23 17:53:08 +02:00
Yuri Kuznetsov
72f51ec77c ref 2022-11-23 13:48:27 +02:00
Yuri Kuznetsov
c8558f0cba fix templates 2022-11-23 13:26:47 +02:00
Yuri Kuznetsov
d0876db1f7 color icon rounded 2022-11-23 13:07:07 +02:00
Yuri Kuznetsov
efd7de49c6 cs 2022-11-23 12:39:13 +02:00
Yuri Kuznetsov
5ae6fb0020 cs 2022-11-23 12:30:03 +02:00
Yuri Kuznetsov
1057b8bc95 ref 2022-11-23 12:26:48 +02:00
Yuri Kuznetsov
3076b6c8ea send invitations impr 2022-11-23 12:05:54 +02:00
Yuri Kuznetsov
b7ff603772 collapsed modal css fix 2022-11-22 12:13:48 +02:00
Yuri Kuznetsov
b996389845 do not show send invitations for past events 2022-11-22 11:23:50 +02:00
Yuri Kuznetsov
ca2d1217cd acl checkField test 2022-11-21 18:49:49 +02:00
Yuri Kuznetsov
227b0fb828 get attendees api endpoint 2022-11-21 18:32:00 +02:00
Yuri Kuznetsov
ac28ae5a9b acl checkField 2022-11-21 18:13:04 +02:00
Yuri Kuznetsov
04eaf4db02 clientStrictTransportSecurityHeaderDisabled param 2022-11-21 13:05:42 +02:00
Yuri Kuznetsov
a380d7e5f9 currency validation 2022-11-21 12:56:31 +02:00
Yuri Kuznetsov
73af7d4119 currency field ui impr 2022-11-21 12:47:14 +02:00
Yuri Kuznetsov
4762237796 wysiwyg modals impr 2022-11-21 12:13:35 +02:00
Yuri Kuznetsov
591a4f0f32 wysiwyg click event 2022-11-21 11:52:32 +02:00
Yuri Kuznetsov
d28cc59feb cs 2022-11-21 11:28:43 +02:00
Yuri Kuznetsov
be899564c1 css radius input group addon 2022-11-21 11:20:31 +02:00
Yuri Kuznetsov
6fb8e7ab37 type fix 2022-11-20 14:05:53 +02:00
Yuri Kuznetsov
047b07d3c9 binding improvements 2022-11-20 13:25:54 +02:00
Yuri Kuznetsov
8f0969eb5d cs 2022-11-20 11:54:22 +02:00
Yuri Kuznetsov
b92975c9b7 cs 2022-11-20 11:51:34 +02:00
Yuri Kuznetsov
0cfc69cdaa currency input-group flex 2022-11-19 20:36:37 +02:00
Yuri Kuznetsov
1b497c81c7 selectize dropdown css fix 2022-11-19 17:20:47 +02:00
Yuri Kuznetsov
eab2dbd1b4 fix link item input column 2022-11-19 16:36:16 +02:00
Yuri Kuznetsov
4eac37ad61 destroy timepicker 2022-11-19 16:15:41 +02:00
Yuri Kuznetsov
dc658a6b06 fix 2022-11-19 16:08:31 +02:00
Yuri Kuznetsov
9d3aaebf24 cleanup 2022-11-19 15:56:30 +02:00
Yuri Kuznetsov
f5b6876626 ref 2022-11-19 15:53:52 +02:00
Yuri Kuznetsov
5d7893e4ee no min width selectbox 2022-11-19 15:33:03 +02:00
Yuri Kuznetsov
01ef55ffc1 fix test 2022-11-19 14:08:22 +02:00
Yuri Kuznetsov
551d97883f assignment notif discard task 2022-11-19 13:51:18 +02:00
Yuri Kuznetsov
68ccfe735f select click flick fix 2022-11-19 12:54:12 +02:00
Yuri Kuznetsov
de4ed2100c select scroll impr 2022-11-19 12:36:43 +02:00
Yuri Kuznetsov
b602ef8eb8 acceptance button style 2022-11-19 11:22:19 +02:00
Yuri Kuznetsov
5ade5cf4c1 arbitrary duration 2022-11-19 10:52:33 +02:00
Yuri Kuznetsov
7cb7719cf6 select ref 2022-11-19 10:43:26 +02:00
Yuri Kuznetsov
d07be2b5f4 css fix 2022-11-18 23:16:22 +02:00
Yuri Kuznetsov
77f01fd28d change reminder list 2022-11-18 18:23:42 +02:00
Yuri Kuznetsov
93fb78cf71 remider duration impr 2022-11-18 18:14:19 +02:00
Yuri Kuznetsov
2ff28ba8ca select fix 2022-11-18 17:58:14 +02:00
Yuri Kuznetsov
01b9b735e5 duration search fix 2022-11-18 17:44:19 +02:00
Yuri Kuznetsov
751a293319 select fix width 2022-11-18 17:43:58 +02:00
Yuri Kuznetsov
2e1cd55ee2 select fix 2022-11-18 15:41:10 +02:00
Yuri Kuznetsov
45bdd62bbf select uix fix 2022-11-18 14:44:55 +02:00
Yuri Kuznetsov
9a56ca9599 enable meeting stream by default 2022-11-18 13:45:32 +02:00
Yuri Kuznetsov
1eb5fab3e3 reminder arbitrary values 2022-11-18 12:54:52 +02:00
Yuri Kuznetsov
99ca025ded ref 2022-11-18 11:01:23 +02:00
Yuri Kuznetsov
3fa83db99f css fix 2022-11-17 23:22:40 +02:00
Yuri Kuznetsov
f143dc7042 fix reset options 2022-11-17 22:53:35 +02:00
Yuri Kuznetsov
1a8a93c03a select fixes 2022-11-17 21:09:41 +02:00
Yuri Kuznetsov
9bbd51fd61 select fix 2022-11-17 19:39:12 +02:00
Yuri Kuznetsov
00238ba043 phone/email uix impr 2022-11-17 19:25:35 +02:00
Yuri Kuznetsov
2147e3073c cs 2022-11-17 18:30:46 +02:00
Yuri Kuznetsov
3f9dc78fa4 css fix 2022-11-17 18:26:17 +02:00
Yuri Kuznetsov
0c8c3ef5f4 phpdoc fix 2022-11-17 18:19:32 +02:00
Yuri Kuznetsov
b6cafb1a35 invitation no email access required 2022-11-17 18:18:12 +02:00
Yuri Kuznetsov
c3ace0b56d note event confirmation icon 2022-11-17 18:14:46 +02:00
Yuri Kuznetsov
0c3b452d6f acceptance button style 2022-11-17 16:46:52 +02:00
Yuri Kuznetsov
297c973695 reminder validation 2022-11-17 16:28:32 +02:00
Yuri Kuznetsov
57ec132aa7 fix 2022-11-17 15:52:59 +02:00
Yuri Kuznetsov
d1b10de17d reminder show only actual items 2022-11-17 15:45:24 +02:00
Yuri Kuznetsov
85549cf39f datepicker fixes 2022-11-17 15:21:23 +02:00
Yuri Kuznetsov
bba2d5b898 fix 2022-11-17 14:46:29 +02:00
Yuri Kuznetsov
4e0de42b0d selectbox improvement 2022-11-17 14:22:31 +02:00
Yuri Kuznetsov
66fc373af6 fix 2022-11-15 13:31:08 +02:00
Yuri Kuznetsov
d7e215505f cs 2022-11-15 10:39:17 +02:00
Yuri Kuznetsov
c293bef232 fix 2022-11-15 10:15:34 +02:00
Yuri Kuznetsov
11d6ea3271 reminder use labels 2022-11-15 09:59:07 +02:00
Yuri Kuznetsov
3d243e19fd cs 2022-11-15 09:58:57 +02:00
Yuri Kuznetsov
813b5834fd calnder full form link 2022-11-15 09:51:12 +02:00
Yuri Kuznetsov
2f3e662ef6 reminder ui fix 2022-11-14 23:20:57 +02:00
Yuri Kuznetsov
a3779dbbee dark more radius 2022-11-14 20:15:03 +02:00
Yuri Kuznetsov
f109b6f60a fix acceptance note 2022-11-14 20:14:02 +02:00
Yuri Kuznetsov
9b7ddf19a5 event confirmation improvement 2022-11-14 19:03:05 +02:00
Yuri Kuznetsov
9e4ca525a0 event confirmation 404 2022-11-14 18:42:50 +02:00
Yuri Kuznetsov
0359528b7c fix login logout broadcast 2022-11-14 18:05:17 +02:00
Yuri Kuznetsov
c1ef8854ac cs fix 2022-11-14 17:55:15 +02:00
Yuri Kuznetsov
824878de39 css fix 2022-11-14 17:22:55 +02:00
Yuri Kuznetsov
919f48e0a3 logged-in broadcast fix 2022-11-14 17:15:53 +02:00
Yuri Kuznetsov
0a16ae3395 acceptance note from ui 2022-11-14 16:59:15 +02:00
Yuri Kuznetsov
4528edd6a7 Merge branch 'fix' 2022-11-14 16:48:22 +02:00
Yuri Kuznetsov
25daa39a91 fix 2022-11-14 16:48:10 +02:00
Yuri Kuznetsov
e20e6e863f event confirmation note 2022-11-14 16:36:56 +02:00
Yuri Kuznetsov
dbe5dbaf1f ref 2022-11-14 16:27:38 +02:00
Yuri Kuznetsov
a5ba3ca5db orm join condition alias handling change 2022-11-14 14:13:59 +02:00
Yuri Kuznetsov
8efe9842cf cs 2022-11-14 13:15:45 +02:00
Yuri Kuznetsov
550bdaba4f ref 2022-11-14 13:07:44 +02:00
Yuri Kuznetsov
6f6c08f9a3 css fix 2022-11-14 12:45:27 +02:00
Yuri Kuznetsov
dfea8470d1 cleanup 2022-11-14 12:38:29 +02:00
Yuri Kuznetsov
a19ada57fa linkRequiredAccess 2022-11-14 12:25:28 +02:00
Yuri Kuznetsov
f617d212f2 fix 2022-11-14 12:25:10 +02:00
Yuri Kuznetsov
88a09b2487 clientDefs relationshipPanels selectRequiredAccess createRequiredAccess 2022-11-14 12:23:42 +02:00
Yuri Kuznetsov
8dd5b078e6 cs fix 2022-11-14 11:07:31 +02:00
Yuri Kuznetsov
cccb71fd5b ref 2022-11-14 11:01:28 +02:00
Yuri Kuznetsov
f232f58b07 cs fix 2022-11-14 10:54:58 +02:00
Yuri Kuznetsov
17f8cb2f42 cs fix 2022-11-14 10:52:22 +02:00
Yuri Kuznetsov
5149713643 ref 2022-11-14 10:44:15 +02:00
Yuri Kuznetsov
586852ce7d categories max depth fix 2022-11-14 10:39:02 +02:00
Yuri Kuznetsov
65afe07a03 ref 2022-11-14 10:38:39 +02:00
Yuri Kuznetsov
ea8bb03e8d no edit access check for create related 2022-11-14 10:22:07 +02:00
Yuri Kuznetsov
7f52192fa8 event confirmation style fix 2022-11-13 15:37:07 +02:00
Yuri Kuznetsov
cadf54fb4e email part fix 2022-11-13 15:24:10 +02:00
Yuri Kuznetsov
631e766e5f ref 2022-11-13 14:57:19 +02:00
Yuri Kuznetsov
d770afd24a css fix 2022-11-13 12:43:14 +02:00
Yuri Kuznetsov
6eb29eef2b orm join support expression on the left 2022-11-13 11:05:42 +02:00
Yuri Kuznetsov
7079ecfba1 fix typo 2022-11-13 10:13:42 +02:00
Yuri Kuznetsov
ecf9962d6e ref 2022-11-12 22:26:04 +02:00
Yuri Kuznetsov
4bc24352c6 fix 2022-11-12 18:36:08 +02:00
Yuri Kuznetsov
cc5125230e stream subscribers cleanup 2022-11-12 18:26:30 +02:00
Yuri Kuznetsov
f50e962aee cleanup memory usage fix 2022-11-12 18:03:46 +02:00
Yuri Kuznetsov
c363be67a1 ref cs 2022-11-12 17:55:10 +02:00
Yuri Kuznetsov
2467129e48 css fix 2022-11-11 17:21:29 +02:00
Yuri Kuznetsov
dbcc6b43e6 css fix 2022-11-11 16:51:47 +02:00
Yuri Kuznetsov
13ebb9b63f css fix 2022-11-11 16:38:07 +02:00
Yuri Kuznetsov
6ba856fc66 ref 2022-11-11 14:19:05 +02:00
Yuri Kuznetsov
6f08fee069 move ref 2022-11-11 13:53:14 +02:00
Yuri Kuznetsov
f270073be6 move 2022-11-11 13:45:39 +02:00
Yuri Kuznetsov
fb3dd2dbf5 phpdoc fix 2022-11-11 13:40:04 +02:00
Yuri Kuznetsov
ef47d3d2bf update query builder support expression 2022-11-11 13:25:50 +02:00
Yuri Kuznetsov
31bf387cbe text change interval 2022-11-11 13:01:52 +02:00
Yuri Kuznetsov
446c9a13cc wysiwyg fetch every 5 seconds on key down 2022-11-11 12:50:42 +02:00
Yuri Kuznetsov
a373f1a864 do not show basic auth dialog if referer 2022-11-11 12:40:18 +02:00
Yuri Kuznetsov
7526e3c516 cleanup 2022-11-11 12:25:11 +02:00
Yuri Kuznetsov
98eb42ddb0 focus fix 2022-11-11 12:06:50 +02:00
Yuri Kuznetsov
9fd6c202a4 cs fix 2022-11-11 11:54:43 +02:00
Yuri Kuznetsov
00cbc80ccd log in log out sync between tabs 2022-11-11 11:22:17 +02:00
Yuri Kuznetsov
b1252d2be4 focus fix 2022-11-11 09:00:49 +02:00
Yuri Kuznetsov
daba2b3ba3 cs fix 2022-11-11 08:44:47 +02:00
Yuri Kuznetsov
3ecb64965d ref 2022-11-11 08:40:03 +02:00
Yuri Kuznetsov
061535d9fe css fix 2022-11-10 22:14:51 +02:00
Yuri Kuznetsov
87459afab4 meeting/call improve stream support 2022-11-10 22:09:06 +02:00
Yuri Kuznetsov
a5da02df0f ref 2022-11-10 17:53:57 +02:00
Yuri Kuznetsov
f37f59aff9 fix and ref 2022-11-10 17:14:34 +02:00
Yuri Kuznetsov
155a34245f discard 8.2 from workflow 2022-11-10 16:40:25 +02:00
Yuri Kuznetsov
456eca773d update workflow php version 2022-11-10 16:38:05 +02:00
Yuri Kuznetsov
7e54ff7f98 drop php7.4 2022-11-10 16:35:10 +02:00
Yuri Kuznetsov
d2abd0eb3b Merge branch 'fix' 2022-11-10 15:54:58 +02:00
Yuri Kuznetsov
853ca01176 Merge branch 'fix' of github.com:espocrm/espocrm into fix 2022-11-10 15:54:01 +02:00
Yuri Kuznetsov
4e7462566b fix bottom tab text show more 2022-11-10 15:53:43 +02:00
Yuri Kuznetsov
46c910d74f fix bottom tab text show more 2022-11-10 15:53:15 +02:00
Yuri Kuznetsov
e2a3761f10 ref 2022-11-10 15:22:04 +02:00
Yuri Kuznetsov
4d04a513c5 layout focus fix 2022-11-10 14:12:47 +02:00
Yuri Kuznetsov
dcb550d6a8 layout shortcuts 2022-11-10 13:52:36 +02:00
Yuri Kuznetsov
44c13c9223 ref 2022-11-10 13:22:15 +02:00
Yuri Kuznetsov
3f37245a8c fix sticked issue 2022-11-10 13:18:24 +02:00
Yuri Kuznetsov
1f1b2c2203 update gridstack 2022-11-10 10:54:57 +02:00
Yuri Kuznetsov
2fc38dd184 merge 2022-11-10 09:38:05 +02:00
Yuri Kuznetsov
5e95a9e6b5 stream acl true 2022-11-10 09:37:04 +02:00
Yuri Kuznetsov
832a135556 Merge branch 'fix' 2022-11-10 09:29:38 +02:00
Yuri Kuznetsov
39c3eeadd8 ref 2022-11-10 09:21:11 +02:00
Yuri Kuznetsov
aaaad41051 css fix 2022-11-09 13:26:05 +02:00
Yuri Kuznetsov
d446034f41 default theme 2022-11-09 11:04:49 +02:00
Yuri Kuznetsov
644c165b94 kanban fixes 2022-11-09 11:01:50 +02:00
Yuri Kuznetsov
b4bec78081 change duplicate finder interface 2022-11-09 10:03:15 +02:00
Yuri Kuznetsov
ac35e3db83 Merge branch 'fix' 2022-11-08 23:04:17 +02:00
Yuri Kuznetsov
429d808e98 css fix 2022-11-08 23:04:08 +02:00
Yuri Kuznetsov
0354cc1e38 fix 2022-11-08 18:56:45 +02:00
Yuri Kuznetsov
7c731550ac cs fix 2022-11-08 18:39:54 +02:00
Yuri Kuznetsov
aa45ed88aa fix 2022-11-08 18:37:27 +02:00
Yuri Kuznetsov
98fa68a070 calendar utility factory 2022-11-08 18:29:41 +02:00
Yuri Kuznetsov
0b3b915641 cs fix 2022-11-08 17:06:23 +02:00
Yuri Kuznetsov
d54f5cb259 test 2022-11-08 16:06:12 +02:00
Yuri Kuznetsov
d018781667 ref 2022-11-08 15:18:02 +02:00
Yuri Kuznetsov
6e07ecd5bb email import ref 2022-11-08 14:29:12 +02:00
Yuri Kuznetsov
9190544b10 cs 2022-11-08 12:41:00 +02:00
Yuri Kuznetsov
2c6674efe0 ref 2022-11-08 12:02:18 +02:00
Yuri Kuznetsov
2d6528a8d5 update bullbone 2022-11-08 12:02:08 +02:00
Yuri Kuznetsov
6b4980899c cleanup 2022-11-08 12:01:54 +02:00
Yuri Kuznetsov
c5781971f3 email dnd fix 2022-11-08 11:24:35 +02:00
Yuri Kuznetsov
19984e6e4e css fix 2022-11-07 22:40:40 +02:00
Yuri Kuznetsov
97b12c3916 css fix 2022-11-07 16:54:03 +02:00
Yuri Kuznetsov
237ff5699c css fix 2022-11-07 16:20:41 +02:00
Yuri Kuznetsov
61e869a552 css fix 2022-11-07 16:03:52 +02:00
Yuri Kuznetsov
d0710ccb21 fix 2022-11-07 15:48:20 +02:00
Yuri Kuznetsov
d83ab71e48 dashlet draggable distance 2022-11-07 15:46:59 +02:00
Yuri Kuznetsov
e1da88372f css fix 2022-11-07 15:39:44 +02:00
Yuri Kuznetsov
cb9bda59f0 css fix 2022-11-07 15:37:36 +02:00
Yuri Kuznetsov
1d41127810 fix 2022-11-07 15:35:49 +02:00
Yuri Kuznetsov
0835699897 record panel title text not selectable 2022-11-07 15:31:06 +02:00
Yuri Kuznetsov
07f9d6b482 no list head select 2022-11-07 15:19:44 +02:00
Yuri Kuznetsov
9cdb14daaa email folders sticked 2022-11-07 14:30:42 +02:00
Yuri Kuznetsov
bb2db7d675 css fix 2022-11-06 17:48:59 +02:00
Yuri Kuznetsov
3991efff4c restore middle tab on return 2022-11-06 14:30:22 +02:00
Yuri Kuznetsov
b3ad922691 restore bottom tab on return 2022-11-06 14:08:42 +02:00
Yuri Kuznetsov
8d3ad7318a storage number fix 2022-11-06 14:03:03 +02:00
Yuri Kuznetsov
def5c9d97b reminder style fix 2022-11-06 12:14:08 +02:00
Yuri Kuznetsov
feb880fd53 fix 2022-11-06 11:44:00 +02:00
Yuri Kuznetsov
bff95e6522 email dnd impr 2022-11-06 11:41:06 +02:00
Yuri Kuznetsov
38f2172f20 email drag n drop improvement 2022-11-05 15:18:49 +02:00
Yuri Kuznetsov
20ccba9f23 bottom tabs ref 2022-11-05 11:54:16 +02:00
Yuri Kuznetsov
8ae97efb43 ref 2022-11-05 10:20:11 +02:00
Yuri Kuznetsov
fdf72b3676 fix 2022-11-04 18:03:08 +02:00
Yuri Kuznetsov
334d88775f select first visible bottom tab on render 2022-11-04 17:49:32 +02:00
Yuri Kuznetsov
b47a6b2cd5 move to folder ui fix 2022-11-04 16:07:04 +02:00
Yuri Kuznetsov
69c7752537 move to folder modal label 2022-11-04 16:04:06 +02:00
Yuri Kuznetsov
e708db7e5b fix 2022-11-04 13:23:48 +02:00
Yuri Kuznetsov
978a206662 Merge branch 'fix' 2022-11-04 11:52:00 +02:00
Yuri Kuznetsov
62d1c0fae9 attachment csp 2022-11-04 10:36:00 +02:00
Yuri Kuznetsov
76546ff06c logo svg 2022-11-04 10:27:17 +02:00
Yuri Kuznetsov
171164ed2b is html label 2022-11-03 17:01:55 +02:00
Yuri Kuznetsov
4057f92ec0 meeting notify about attendee 2022-11-03 16:47:12 +02:00
Yuri Kuznetsov
2b181b8d84 ref 2022-11-03 12:06:59 +02:00
Yuri Kuznetsov
e210f1386d job use sth 2022-11-03 11:50:37 +02:00
Yuri Kuznetsov
711781b666 ref and cs fix 2022-11-03 11:48:10 +02:00
Yuri Kuznetsov
addda0d9a8 ref 2022-11-03 11:38:23 +02:00
Yuri Kuznetsov
b2b958c946 Merge branch 'fix' 2022-11-02 20:51:01 +02:00
David
42af361ae4 Fix czech translation (#2491)
* fixed require promise

* czech translation fix

Co-authored-by: David Moškoř <david.moskor@apertia.cz>
2022-11-02 20:50:11 +02:00
Yuri Kuznetsov
440c6cee23 it_IT 2022-11-02 20:49:25 +02:00
Yuri Kuznetsov
1b32e57637 css fix 2022-11-02 19:48:03 +02:00
Yuri Kuznetsov
5008561965 fix 2022-11-02 18:41:35 +02:00
Yuri Kuznetsov
168f32a90e fix 2022-11-02 18:30:59 +02:00
Yuri Kuznetsov
23a21a060c fix shortcut 2022-11-02 17:56:11 +02:00
Yuri Kuznetsov
0eab4f0cac skip stream processing if silent 2022-11-02 15:58:55 +02:00
Yuri Kuznetsov
0ee3044ebc fix typo 2022-11-02 15:18:13 +02:00
Yuri Kuznetsov
916ad5159e dropdown focus 2022-11-02 14:47:24 +02:00
Yuri Kuznetsov
31d985e875 email draft from name 2022-11-02 12:37:20 +02:00
Yuri Kuznetsov
973404d46e css fix 2022-11-02 09:33:24 +02:00
David
042c5e5791 Regex with optional capture groups might cause catastrophic backtracking (#2490)
* fix catastrophic backtracking

* prevented catasthropic backtracing

Co-authored-by: David Moškoř <david.moskor@apertia.cz>
2022-11-02 08:56:00 +02:00
Yuri Kuznetsov
64b3328916 kanban drag cursor fix 2022-11-01 21:19:03 +02:00
Yuri Kuznetsov
ef8faa466c notify 2022-11-01 20:48:16 +02:00
Yuri Kuznetsov
4f53f6861c fix 2022-11-01 20:41:32 +02:00
Yuri Kuznetsov
c610f8d6a7 next number populate 2022-11-01 16:59:56 +02:00
Yuri Kuznetsov
ecde182b08 exceptions 2022-11-01 16:59:42 +02:00
Yuri Kuznetsov
94a723753f email shortcut keys 2022-11-01 15:08:53 +02:00
Yuri Kuznetsov
cef40340cf Email mime message fix (#2486)
* email-message-fix

* fix test

* email mime parts message fix
2022-11-01 12:37:01 +02:00
Yuri Kuznetsov
8413e56d3f ref 2022-11-01 11:06:13 +02:00
Yuri Kuznetsov
c14c6d9187 enum change on option change 2022-11-01 10:52:41 +02:00
Yuri Kuznetsov
d010c4a463 array sorting uix fix 2022-11-01 10:43:45 +02:00
Yuri Kuznetsov
ecf70585d7 validate default option 2022-11-01 10:01:55 +02:00
Yuri Kuznetsov
9183489d19 Merge branch 'fix' 2022-10-31 17:27:31 +02:00
Yuri Kuznetsov
e659c79bf7 v 2022-10-31 17:21:33 +02:00
Yuri Kuznetsov
e017479f85 fix panel heading overflow 2022-10-31 17:21:06 +02:00
Yuri Kuznetsov
24091d9eed color fix 2022-10-31 16:24:38 +02:00
Yuri Kuznetsov
abdc73af6a attachment focus fix 2022-10-31 15:40:45 +02:00
Yuri Kuznetsov
168335c5b0 logo radius issue 2022-10-31 15:30:48 +02:00
Yuri Kuznetsov
d0f43e7de9 alert viewport center 2022-10-31 15:19:34 +02:00
Yuri Kuznetsov
4dee40f714 style fix 2022-10-31 15:06:55 +02:00
Yuri Kuznetsov
bd238f912f notification query no count 2022-10-31 13:06:04 +02:00
Yuri Kuznetsov
e91539f534 apply button on filter removal 2022-10-31 12:41:08 +02:00
Yuri Kuznetsov
e912566b44 fix 2022-10-31 12:05:25 +02:00
Yuri Kuznetsov
daef165a2e fix 2022-10-31 11:55:39 +02:00
Yuri Kuznetsov
2b740082e4 fix 2022-10-31 11:54:39 +02:00
Yuri Kuznetsov
b0292e61a9 style fixes 2022-10-31 11:44:35 +02:00
Yuri Kuznetsov
e5b8db367b discard loading 2022-10-31 11:24:29 +02:00
Yuri Kuznetsov
1aad648987 css fix 2022-10-31 10:55:54 +02:00
Yuri Kuznetsov
a943c4a7ea radio css 2022-10-31 10:42:15 +02:00
Yuri Kuznetsov
a184d5568d color fix 2022-10-31 09:54:45 +02:00
Yuri Kuznetsov
a351875586 create select handler for link 2022-10-31 09:43:56 +02:00
Yuri Kuznetsov
21b325f27f fix 2022-10-31 09:42:23 +02:00
Yuri Kuznetsov
992d581ff2 Merge branch 'fix' 2022-10-31 09:11:20 +02:00
Yuri Kuznetsov
4824714b0d fix non-storable varchar default maxlength validation 2022-10-31 08:56:56 +02:00
Yuri Kuznetsov
bdf3e9a4b6 css fix 2022-10-31 08:50:55 +02:00
Yuri Kuznetsov
5826f0fb2a style fixes 2022-10-30 19:18:01 +02:00
Yuri Kuznetsov
65a57aed59 style fix 2022-10-30 19:02:05 +02:00
Yuri Kuznetsov
ffe4b82e1e fix 2022-10-30 15:44:02 +02:00
Yuri Kuznetsov
32c29ac829 create handler in link multiple 2022-10-30 15:12:16 +02:00
Yuri Kuznetsov
03e46ed08f color fix 2022-10-30 14:30:23 +02:00
Yuri Kuznetsov
d4821db812 relationshipPanels defs in link multiple 2022-10-30 14:25:16 +02:00
Yuri Kuznetsov
0f8d9f96fb selectModalView 2022-10-30 11:47:28 +02:00
Yuri Kuznetsov
dbaf535f53 select related handler 2022-10-30 11:31:44 +02:00
Yuri Kuznetsov
f8254f49c0 fix 2022-10-30 10:25:30 +02:00
Yuri Kuznetsov
6592ad3798 create related use promise 2022-10-30 09:29:00 +02:00
Yuri Kuznetsov
d5bb95cab6 color fix 2022-10-29 22:56:59 +03:00
Yuri Kuznetsov
ae2f2ab235 list fetch main 2022-10-29 15:58:47 +03:00
Yuri Kuznetsov
489e41a042 related list 2022-10-29 15:49:28 +03:00
Yuri Kuznetsov
4c209aaa86 Stream: Update notes when edited (with web socket) (#2483)
* note edit websocket

* fix note update input
2022-10-28 11:39:56 +03:00
Yuri Kuznetsov
09d8bc5a36 phone default enum 2022-10-26 16:36:03 +03:00
Yuri Kuznetsov
589415b036 Merge branch 'fix' 2022-10-26 16:30:17 +03:00
Yuri Kuznetsov
6ee936d522 bottom layout edit impr 2022-10-26 16:29:52 +03:00
Yuri Kuznetsov
648fa60e14 bottom layout edit impr 2022-10-26 16:29:24 +03:00
Yuri Kuznetsov
deea05a986 style fix 2022-10-26 15:21:21 +03:00
Yuri Kuznetsov
1ddefe2541 log in button text 2022-10-26 14:05:35 +03:00
Yuri Kuznetsov
efaf3327e3 update minimatch 2022-10-26 13:56:11 +03:00
Yuri Kuznetsov
0046734522 pt_PT lang 2022-10-26 12:56:01 +03:00
Yuri Kuznetsov
0ed243c9b1 wysiwyg img max width 2022-10-26 12:45:32 +03:00
Yuri Kuznetsov
91d81773bc css fix 2022-10-26 12:29:40 +03:00
Yuri Kuznetsov
c71f8a5334 spellcheck off 2022-10-26 12:21:22 +03:00
Yuri Kuznetsov
21e8425e59 css fix 2022-10-26 10:00:08 +03:00
Yuri Kuznetsov
f246021819 css fix 2022-10-26 09:53:52 +03:00
Yuri Kuznetsov
e0ac2e156d checklist fix 2022-10-26 09:49:02 +03:00
Yuri Kuznetsov
46a4815def fix css 2022-10-25 19:06:34 +03:00
Yuri Kuznetsov
5851245f43 css fix 2022-10-25 18:44:51 +03:00
Yuri Kuznetsov
66f0aa71c9 css fixes 2022-10-25 17:10:19 +03:00
Yuri Kuznetsov
51b621ecd1 checkbox styled 2022-10-25 16:51:19 +03:00
Yuri Kuznetsov
65d88e5ac8 ref 2022-10-25 11:17:33 +03:00
Yuri Kuznetsov
96a0cb12a0 ref 2022-10-24 18:05:41 +03:00
Yuri Kuznetsov
07844912d2 cs fix 2022-10-24 18:00:47 +03:00
Yuri Kuznetsov
cdbe9651f3 Merge branch 'fix' 2022-10-24 17:29:09 +03:00
Yuri Kuznetsov
ba172494b4 fix kanban with disable total 2022-10-24 17:26:29 +03:00
Yuri Kuznetsov
956e7108c3 fix 2022-10-24 16:53:03 +03:00
Yuri Kuznetsov
66a111d7fc fix 2022-10-24 16:44:33 +03:00
Yuri Kuznetsov
4b038d66d1 fix 2022-10-24 16:13:09 +03:00
Yuri Kuznetsov
8feab8f394 ajax fullResponse 2022-10-24 16:10:59 +03:00
Yuri Kuznetsov
0c350b5f16 redirect to root after create forbidden 2022-10-24 14:42:17 +03:00
Yuri Kuznetsov
be21968795 ajax error handler timeout 2022-10-24 14:41:51 +03:00
Yuri Kuznetsov
0dac024316 cs fix 2022-10-24 13:45:23 +03:00
Yuri Kuznetsov
d7d1a38fd3 cs fix 2022-10-24 13:37:06 +03:00
Yuri Kuznetsov
cc562d6c26 fix typo 2022-10-24 13:35:18 +03:00
Yuri Kuznetsov
8565711a3e fix 2022-10-24 13:33:49 +03:00
Yuri Kuznetsov
362b65b2b2 cs fix 2022-10-24 13:32:53 +03:00
Yuri Kuznetsov
444f699853 fix comment 2022-10-24 13:24:17 +03:00
Yuri Kuznetsov
f6ea204259 Merge branch 'fix' 2022-10-24 12:14:00 +03:00
Yuri Kuznetsov
5c44a374d5 glass table text bold 700 2022-10-24 12:13:46 +03:00
Yuri Kuznetsov
8aae2b18ba glass fix 2022-10-24 12:06:46 +03:00
Yuri Kuznetsov
258e56c61d fix 2022-10-24 12:06:41 +03:00
Yuri Kuznetsov
55d054b15c fix 2022-10-24 11:52:23 +03:00
Yuri Kuznetsov
1f733fa307 fix 2022-10-24 11:43:37 +03:00
Yuri Kuznetsov
acfcc65aee email filter mark as read 2022-10-24 11:34:26 +03:00
Yuri Kuznetsov
5a29830202 ref 2022-10-24 10:29:15 +03:00
Yuri Kuznetsov
04ef798866 fix 2022-10-24 10:04:44 +03:00
Yuri Kuznetsov
5987906fd8 Merge branch 'fix' 2022-10-24 09:47:09 +03:00
Yuri Kuznetsov
3084dddf1c fix url field pattern 2022-10-24 09:44:43 +03:00
Yuri Kuznetsov
87b112c699 rename ldap 2022-10-23 16:56:06 +03:00
Yuri Kuznetsov
212a5879b3 Merge branch 'fix' 2022-10-23 16:51:12 +03:00
Yuri Kuznetsov
eb6f9b602f upgrade 2022-10-23 16:40:40 +03:00
Yuri Kuznetsov
cf508a540e Merge branch 'fix' of https://github.com/espocrm/espocrm into fix 2022-10-23 16:36:19 +03:00
Yuri Kuznetsov
5278e3bf06 v 2022-10-23 16:25:17 +03:00
Yuri Kuznetsov
ee70b1afad ref 2022-10-23 15:04:53 +03:00
Yuri Kuznetsov
4374688c85 css fix 2022-10-23 10:59:33 +03:00
Yuri Kuznetsov
0b7804f4f1 update carbon 2022-10-23 10:30:02 +03:00
Yuri Kuznetsov
c01545678f kanban drag min distance 2022-10-23 10:24:20 +03:00
Yuri Kuznetsov
3ea617e449 cs fix 2022-10-23 10:22:19 +03:00
Yuri Kuznetsov
75e3961fb5 ajax promise 2022-10-23 10:18:02 +03:00
Yuri Kuznetsov
cc8d66dc7d populate array values command 2022-10-22 14:44:58 +03:00
Yuri Kuznetsov
874c42fa33 ref 2022-10-22 13:27:09 +03:00
Yuri Kuznetsov
8a554bdf55 cs fix 2022-10-22 13:15:46 +03:00
Yuri Kuznetsov
5b02dc23f5 fix 2022-10-22 12:58:00 +03:00
Yuri Kuznetsov
dd75aaeef2 rebuild category paths command 2022-10-22 12:52:13 +03:00
Yuri Kuznetsov
97c109dc79 cleanup 2022-10-21 18:14:43 +03:00
Yuri Kuznetsov
f61c546af7 cs fix 2022-10-21 17:59:28 +03:00
Yuri Kuznetsov
f6742d225d ldap fix 2022-10-21 17:33:53 +03:00
Yuri Kuznetsov
ba69668df5 ref 2022-10-21 17:29:27 +03:00
Yuri Kuznetsov
7b8d2a874c fix jsdoc 2022-10-21 17:11:50 +03:00
Yuri Kuznetsov
8ba1e8148e merge 2022-10-21 17:11:05 +03:00
Yuri Kuznetsov
7266cc96c9 ref 2022-10-21 17:09:39 +03:00
Yuri Kuznetsov
f4a3a3fbd3 extension admin notifications 2022-10-21 16:25:19 +03:00
Yuri Kuznetsov
937f28b52f cs fix 2022-10-21 15:44:09 +03:00
Yuri Kuznetsov
0997a870ec fix 2022-10-21 15:41:49 +03:00
Yuri Kuznetsov
5da17fd8a9 cs fix 2022-10-21 15:33:50 +03:00
Yuri Kuznetsov
d8ca8a9a22 cs fix 2022-10-21 15:29:12 +03:00
Yuri Kuznetsov
76007e2c79 license status 2022-10-21 14:43:00 +03:00
Yuri Kuznetsov
f0b7e94aa0 doc fix 2022-10-21 14:02:57 +03:00
Yuri Kuznetsov
89f7281a02 cs fix 2022-10-21 10:41:06 +03:00
Yuri Kuznetsov
9d7d9d0f3d ref 2022-10-21 10:13:11 +03:00
Yuri Kuznetsov
46d6cbb042 ref 2022-10-20 21:08:44 +03:00
Yuri Kuznetsov
63d50c1ebd record service container get by class 2022-10-20 21:02:50 +03:00
Yuri Kuznetsov
4917f0d5f6 ref 2022-10-20 20:55:42 +03:00
Yuri Kuznetsov
ffb1f51f52 ref 2022-10-20 19:50:49 +03:00
Yuri Kuznetsov
48f98014a9 fix 2022-10-20 19:50:15 +03:00
Yuri Kuznetsov
8005e6e879 ref 2022-10-20 19:40:14 +03:00
David
5763f5b58e fixed require promise (#2473)
Co-authored-by: David Moškoř <david.moskor@apertia.cz>
2022-10-20 18:55:50 +03:00
Yuri Kuznetsov
8f6872bb08 eventInvitationForceSystemSmtp 2022-10-20 18:46:59 +03:00
Yuri Kuznetsov
6fe21e68c0 ref 2022-10-20 18:38:33 +03:00
Yuri Kuznetsov
6b0bc18cbe ref 2022-10-20 17:38:01 +03:00
Yuri Kuznetsov
d1eced41aa fix test 2022-10-20 15:43:12 +03:00
Yuri Kuznetsov
ff83b4cb41 Merge branch 'fix' 2022-10-20 15:37:22 +03:00
Yuri Kuznetsov
59d46e43a4 ref 2022-10-19 18:46:11 +03:00
Yuri Kuznetsov
240644dd8c cs fix 2022-10-19 18:08:27 +03:00
Yuri Kuznetsov
840b31c7d3 ref 2022-10-19 18:05:33 +03:00
Yuri Kuznetsov
1c29123a44 cleanup 2022-10-19 17:42:07 +03:00
Yuri Kuznetsov
8e73af8d38 fix 2022-10-19 17:07:12 +03:00
Yuri Kuznetsov
85e583ec7c fix 2022-10-19 17:00:57 +03:00
Yuri Kuznetsov
509841344f ref 2022-10-19 16:47:56 +03:00
Yuri Kuznetsov
5eef8f2ce5 ref 2022-10-19 15:32:03 +03:00
Yuri Kuznetsov
85efea44ed ref 2022-10-19 13:27:06 +03:00
Yuri Kuznetsov
c004815a42 ref 2022-10-19 13:25:11 +03:00
Yuri Kuznetsov
afddb6afc9 ref 2022-10-19 12:56:46 +03:00
Yuri Kuznetsov
7c869ce3fc style fix 2022-10-19 12:56:24 +03:00
Yuri Kuznetsov
b9541eea35 cs fix 2022-10-19 12:54:08 +03:00
Yuri Kuznetsov
75e46f6f5b ref 2022-10-18 21:33:59 +03:00
Yuri Kuznetsov
531992adff ref 2022-10-18 21:32:21 +03:00
Yuri Kuznetsov
1f88b60cca ref 2022-10-18 21:19:43 +03:00
Yuri Kuznetsov
09d7c73449 ref 2022-10-18 21:16:27 +03:00
Yuri Kuznetsov
b43d9f8784 user password ref 2022-10-18 20:29:23 +03:00
Yuri Kuznetsov
d3e65f9ba1 ref 2022-10-18 18:16:10 +03:00
Yuri Kuznetsov
5485966c1c ref 2022-10-18 18:03:41 +03:00
Yuri Kuznetsov
d6dc858720 ref 2022-10-18 17:13:56 +03:00
Yuri Kuznetsov
07ee43d4d7 ref 2022-10-18 15:50:51 +03:00
Yuri Kuznetsov
45720afd50 ref 2022-10-18 14:06:29 +03:00
Yuri Kuznetsov
291c692bdb ref 2022-10-18 13:03:48 +03:00
Yuri Kuznetsov
464976629d ref 2022-10-18 12:54:50 +03:00
Yuri Kuznetsov
4267adbdb2 cs fix 2022-10-18 12:41:29 +03:00
Yuri Kuznetsov
f8d0fc2654 ref 2022-10-18 12:40:02 +03:00
Yuri Kuznetsov
ba2bea15b5 ref 2022-10-18 11:40:28 +03:00
Yuri Kuznetsov
7ffd5a25a9 ref 2022-10-17 16:54:10 +03:00
Yuri Kuznetsov
ba59e3922f fix tests 2022-10-17 16:48:33 +03:00
Yuri Kuznetsov
8336eb3dd9 cleanup 2022-10-17 16:42:21 +03:00
Yuri Kuznetsov
667f9b6eb6 cs fix 2022-10-17 16:37:50 +03:00
Yuri Kuznetsov
f76d8601e7 fix 2022-10-17 16:36:59 +03:00
Yuri Kuznetsov
f09db0ebdb ref 2022-10-17 16:07:05 +03:00
Yuri Kuznetsov
3b6a686257 ref 2022-10-17 15:04:53 +03:00
Yuri Kuznetsov
e939b4541d ref 2022-10-17 14:43:24 +03:00
Yuri Kuznetsov
d6c4002e82 ref 2022-10-17 13:12:03 +03:00
Yuri Kuznetsov
0cb1629f75 cs fix 2022-10-17 13:10:35 +03:00
Yuri Kuznetsov
e8f600c99f ref 2022-10-17 13:00:11 +03:00
Yuri Kuznetsov
745d6b9603 ref 2022-10-17 12:50:34 +03:00
Yuri Kuznetsov
245e267f73 fix 2022-10-17 12:38:23 +03:00
Yuri Kuznetsov
953920a742 ref 2022-10-17 12:35:41 +03:00
Yuri Kuznetsov
a6e1b016ae ref 2022-10-17 12:11:52 +03:00
Yuri Kuznetsov
fdddc5cc2a ref 2022-10-17 11:34:15 +03:00
Yuri Kuznetsov
b7de49a2aa ref 2022-10-17 11:22:44 +03:00
Yuri Kuznetsov
35dbe35ea4 test 2022-10-17 11:09:50 +03:00
Yuri Kuznetsov
d0f84584a0 docs 2022-10-17 11:07:49 +03:00
Yuri Kuznetsov
a334fc5456 search param bool added 2022-10-17 10:58:12 +03:00
Yuri Kuznetsov
ccbc9a2348 ref 2022-10-17 10:48:25 +03:00
Yuri Kuznetsov
8c109d2713 ref 2022-10-17 09:19:38 +03:00
Yuri Kuznetsov
8b3b659ec6 ref 2022-10-17 08:37:37 +03:00
Yuri Kuznetsov
537b921e87 fix 2022-10-16 23:08:07 +03:00
Yuri Kuznetsov
74dbc64d5b fix 2022-10-16 21:59:21 +03:00
Yuri Kuznetsov
fe9ed74875 ref 2022-10-16 21:52:37 +03:00
Yuri Kuznetsov
a8f48c3248 update php-parser 2022-10-16 21:43:34 +03:00
Yuri Kuznetsov
857648633e ref 2022-10-16 21:37:57 +03:00
Yuri Kuznetsov
81d961d5d9 ref 2022-10-16 20:52:54 +03:00
Yuri Kuznetsov
ae2d5e2552 update phpstan 2022-10-16 20:31:33 +03:00
Yuri Kuznetsov
035e561a4c ref 2022-10-16 20:26:18 +03:00
Yuri Kuznetsov
541cc907f1 phpdoc 2022-10-16 19:08:16 +03:00
Yuri Kuznetsov
a5fc42a85f ref 2022-10-16 18:45:05 +03:00
Yuri Kuznetsov
421384980a fix 2022-10-16 18:26:13 +03:00
Yuri Kuznetsov
331fb69364 phpdoc 2022-10-16 17:53:31 +03:00
Yuri Kuznetsov
9d5e1b7d33 ref 2022-10-16 17:40:33 +03:00
Yuri Kuznetsov
1c06f3be92 ref 2022-10-16 16:29:05 +03:00
Yuri Kuznetsov
64c8c1a891 fix test 2022-10-16 16:13:55 +03:00
Yuri Kuznetsov
f637960648 ref 2022-10-16 16:08:01 +03:00
Yuri Kuznetsov
2f73ae43ac ref 2022-10-16 15:43:42 +03:00
Yuri Kuznetsov
befdff8085 ref 2022-10-16 14:25:52 +03:00
Yuri Kuznetsov
7be573be67 ref 2022-10-16 14:25:11 +03:00
Yuri Kuznetsov
19227313b3 ref 2022-10-16 13:07:37 +03:00
Yuri Kuznetsov
4d71e3c904 ref 2022-10-16 12:28:05 +03:00
Yuri Kuznetsov
fef90ac1dc ref 2022-10-16 12:18:54 +03:00
Yuri Kuznetsov
6a940eb732 ref 2022-10-16 12:01:04 +03:00
Yuri Kuznetsov
838d0b08db move default binding 2022-10-16 11:33:32 +03:00
Yuri Kuznetsov
c36c5a9d63 todo 2022-10-16 11:18:34 +03:00
Yuri Kuznetsov
327b6adbbf fix test 2022-10-16 11:15:57 +03:00
Yuri Kuznetsov
3f78f71c5f fix test 2022-10-16 10:59:09 +03:00
Yuri Kuznetsov
06e68a3e7d mail ref 2022-10-16 10:57:55 +03:00
Yuri Kuznetsov
b1614ae660 ref 2022-10-14 17:24:32 +03:00
Yuri Kuznetsov
9575b8e24f ref 2022-10-14 17:06:13 +03:00
Yuri Kuznetsov
b6b562cff1 dev 2022-10-14 17:01:18 +03:00
Yuri Kuznetsov
e22f8b0120 ref 2022-10-14 16:34:27 +03:00
Yuri Kuznetsov
eaa0426628 ref 2022-10-14 15:45:32 +03:00
Yuri Kuznetsov
42c5ac56ca ref 2022-10-14 15:23:45 +03:00
Yuri Kuznetsov
f54497b76f ref 2022-10-14 14:13:16 +03:00
Yuri Kuznetsov
f253e021d0 ref 2022-10-14 14:06:22 +03:00
Yuri Kuznetsov
fa679b6dd2 cs fix 2022-10-14 13:22:29 +03:00
Yuri Kuznetsov
11d55b9e40 ref 2022-10-14 12:25:07 +03:00
Yuri Kuznetsov
00fbf45e88 ref 2022-10-14 11:17:10 +03:00
Yuri Kuznetsov
945921b38d from email address filtering 2022-10-14 10:13:36 +03:00
Yuri Kuznetsov
b69f20a7fd ref 2022-10-13 21:18:37 +03:00
Yuri Kuznetsov
1f445770cf ref 2022-10-13 21:07:55 +03:00
Yuri Kuznetsov
7765562302 fix test 2022-10-13 19:47:43 +03:00
Yuri Kuznetsov
16abe43003 ref 2022-10-13 19:23:36 +03:00
Yuri Kuznetsov
5fed4f93e5 fix before upgrade 2022-10-13 18:29:10 +03:00
Yuri Kuznetsov
4514e8225f discard smtp preferences 2022-10-13 17:48:34 +03:00
Yuri Kuznetsov
ab2d3eed43 ref 2022-10-13 13:05:34 +03:00
Yuri Kuznetsov
f236a72a1a ref 2022-10-13 11:57:14 +03:00
Yuri Kuznetsov
b66ac6ce13 ref 2022-10-13 11:45:55 +03:00
Yuri Kuznetsov
0a8ade65f4 ref 2022-10-13 10:52:07 +03:00
Yuri Kuznetsov
1235eee695 ref 2022-10-13 10:25:59 +03:00
Yuri Kuznetsov
fbc35ec23d fix test 2022-10-13 10:04:07 +03:00
Yuri Kuznetsov
4e31fc89d4 email filter move to folder 2022-10-12 18:35:43 +03:00
Yuri Kuznetsov
a7d3073861 fix 2022-10-12 14:09:22 +03:00
Yuri Kuznetsov
abd40d42b8 ref 2022-10-12 13:32:05 +03:00
Yuri Kuznetsov
ec19ae061f ref 2022-10-12 13:10:17 +03:00
Yuri Kuznetsov
84d9e1fe29 cs fix 2022-10-12 12:39:36 +03:00
Yuri Kuznetsov
50d7f6d831 dropdown action helper and labelTranslation 2022-10-12 12:17:25 +03:00
Yuri Kuznetsov
b80bdf9a83 fix docs 2022-10-12 10:33:32 +03:00
Yuri Kuznetsov
19eb99ed25 group folder menu link 2022-10-12 10:31:36 +03:00
Yuri Kuznetsov
6c2be9199e email drop sent limitation 2022-10-12 10:11:14 +03:00
Yuri Kuznetsov
ff1c449411 email drop to all 2022-10-12 10:07:58 +03:00
Yuri Kuznetsov
259b06cd7a ref 2022-10-11 20:59:50 +03:00
Yuri Kuznetsov
cb00922841 group email folders 2022-10-11 17:43:31 +03:00
Yuri Kuznetsov
e21f500a4d Merge branch 'fix' 2022-10-11 13:04:41 +03:00
Yuri Kuznetsov
af9fac2b51 dE_DE 2022-10-10 11:43:20 +03:00
Yuri Kuznetsov
81c8311026 fix 2022-10-09 10:26:40 +03:00
Yuri Kuznetsov
085e66feea search panel disabled modal select records 2022-10-07 15:51:14 +03:00
Yuri Kuznetsov
7ad01cad77 fix 2022-10-07 12:25:14 +03:00
Yuri Kuznetsov
5038e4144f ref 2022-10-07 12:07:03 +03:00
Yuri Kuznetsov
4e6d5cf773 fix, setupReuse 2022-10-06 20:35:27 +03:00
Yuri Kuznetsov
8815564be3 fix 2022-10-06 18:36:59 +03:00
Yuri Kuznetsov
097a600488 fix 2022-10-06 14:25:25 +03:00
Yuri Kuznetsov
037687e11f fix 2022-10-06 14:16:28 +03:00
Yuri Kuznetsov
6eddc10d5a email drop into folder 2022-10-06 13:07:08 +03:00
Yuri Kuznetsov
0b9256ecf9 ref 2022-10-06 12:28:09 +03:00
Yuri Kuznetsov
26e692563b username validator 2022-10-05 14:42:54 +03:00
Yuri Kuznetsov
961e056e8d fix 2022-10-05 14:40:50 +03:00
Yuri Kuznetsov
77debc3875 fix 2022-10-05 14:30:26 +03:00
Yuri Kuznetsov
d4376264c3 cs fix 2022-10-05 14:28:21 +03:00
Yuri Kuznetsov
424302287e fix test 2022-10-05 14:28:14 +03:00
Yuri Kuznetsov
bcdee914ad keywords 2022-10-05 13:24:34 +03:00
Yuri Kuznetsov
9580c4f376 shortcuts 2022-10-05 13:22:51 +03:00
Yuri Kuznetsov
edf673fb69 ref and shortcut usage 2022-10-05 13:16:18 +03:00
Yuri Kuznetsov
7738b9c3e0 remove with select all improvement 2022-10-05 12:37:13 +03:00
Yuri Kuznetsov
1579e4851e ref 2022-10-05 12:03:27 +03:00
Yuri Kuznetsov
914e070732 datetime from timestamp 2022-10-05 11:49:44 +03:00
Yuri Kuznetsov
a976e22ebd fix settings lang 2fa param 2022-10-05 11:34:07 +03:00
Yuri Kuznetsov
138d0215f7 rebuild error output 2022-10-05 11:23:26 +03:00
Yuri Kuznetsov
39b42c3953 config iternal param 2022-10-05 11:14:13 +03:00
Yuri Kuznetsov
da10e9c4a9 docs 2022-10-05 10:25:23 +03:00
Yuri Kuznetsov
89273a26d4 Merge branch 'fix' 2022-10-05 10:12:30 +03:00
Yuri Kuznetsov
bac7eb6c89 model factory fix 2022-10-04 18:40:14 +03:00
Yuri Kuznetsov
80572ae14f update laminas libs, install laminas crypt 2022-10-04 18:27:23 +03:00
Yuri Kuznetsov
c8a746d90b authentication deny system user 2022-10-04 17:50:22 +03:00
Yuri Kuznetsov
a57f13eda2 auth settings label 2022-10-04 17:24:50 +03:00
Yuri Kuznetsov
e576b9f272 dev 2022-10-04 17:13:34 +03:00
Yuri Kuznetsov
6df18b3604 label on list fix 2022-10-04 10:46:28 +03:00
Yuri Kuznetsov
616d65023b oidc auth 2022-10-04 09:41:40 +03:00
Yuri Kuznetsov
ea001812e2 Merge branch 'master' of https://github.com/espocrm/espocrm 2022-10-04 09:40:39 +03:00
Yuri Kuznetsov
b7925f6d1f Merge branch 'fix' 2022-10-04 09:40:24 +03:00
David
e7d1cbd5ca setup action views in modal with unset model (#2462)
Co-authored-by: David Moškoř <david.moskor@apertia.cz>
2022-10-03 21:17:31 +03:00
Yuri Kuznetsov
b165d54ad6 request get parsed body form data support 2022-10-03 15:32:21 +03:00
David
25afbffda8 added other reserved keywords (#2461)
Co-authored-by: David Moškoř <david.moskor@apertia.cz>
2022-10-03 08:57:26 +03:00
Yuri Kuznetsov
77f7db3592 acl cache clearer 2022-09-30 16:38:58 +03:00
Yuri Kuznetsov
3f950cb615 fix login 2022-09-27 17:53:19 +03:00
Yuri Kuznetsov
a0e2b1a9b6 fix login 2022-09-27 17:18:33 +03:00
Yuri Kuznetsov
c50b043e52 Merge branch 'fix' 2022-09-27 10:04:10 +03:00
Yuri Kuznetsov
b99091eb3a ref 2022-09-27 09:41:28 +03:00
Yuri Kuznetsov
450cd80f62 Merge branch 'fix' 2022-09-27 08:57:58 +03:00
Yuri Kuznetsov
0b9d52d30d color fix 2022-09-26 17:41:36 +03:00
Yuri Kuznetsov
6e9b125818 calendar today bg change 2022-09-26 17:07:32 +03:00
Yuri Kuznetsov
93146dffd6 authTokenSecretDisabled system 2022-09-26 13:47:22 +03:00
Yuri Kuznetsov
07d3e982ef date-time step 60 2022-09-26 13:08:30 +03:00
Yuri Kuznetsov
865078a7f9 shortcut framework take into account action availability 2022-09-26 12:56:29 +03:00
Yuri Kuznetsov
14eafb6121 Merge branch 'fix' 2022-09-26 12:46:18 +03:00
Yuri Kuznetsov
0d1ce3ee90 typoe fix 2022-09-26 12:43:50 +03:00
Yuri Kuznetsov
638654d52e credentialsHeader 2022-09-26 12:14:36 +03:00
Yuri Kuznetsov
3c0f7ca93e login handler changes 2022-09-26 10:22:35 +03:00
Yuri Kuznetsov
c5c9862c68 ref cs 2022-09-25 18:25:07 +03:00
Yuri Kuznetsov
452ea6f1ef ref 2022-09-24 20:29:04 +03:00
Yuri Kuznetsov
c5fe7bca21 login handler framework 2022-09-24 16:56:10 +03:00
Yuri Kuznetsov
60922ac7cd ref 2022-09-24 12:08:07 +03:00
Yuri Kuznetsov
97b7f4adfa require promise fix 2022-09-23 18:01:58 +03:00
Yuri Kuznetsov
895a2f7f2f ref 2022-09-23 15:49:08 +03:00
Yuri Kuznetsov
25bcb9a49d ref 2022-09-23 15:34:03 +03:00
Yuri Kuznetsov
ebf8d58a5e jsdoc 2022-09-23 15:10:43 +03:00
Yuri Kuznetsov
8d5cf689ee ref 2022-09-23 14:27:04 +03:00
Yuri Kuznetsov
e72f348dc8 cs fix 2022-09-23 14:21:14 +03:00
Yuri Kuznetsov
caaf651a2e type fix 2022-09-23 14:20:13 +03:00
Yuri Kuznetsov
8e62ed2fb8 login as another user 2022-09-23 14:02:31 +03:00
Yuri Kuznetsov
d5058d9399 fix 2022-09-23 13:57:33 +03:00
Yuri Kuznetsov
4279e86526 fix typo 2022-09-23 12:07:50 +03:00
Yuri Kuznetsov
0691e469e5 cs fix and types 2022-09-23 12:04:50 +03:00
Yuri Kuznetsov
90cd54410b fix page title 2022-09-23 11:49:34 +03:00
Yuri Kuznetsov
546bb56c86 working time range assignment checker 2022-09-23 11:44:54 +03:00
Yuri Kuznetsov
340f82cc4b idea cs 2022-09-23 11:38:19 +03:00
Yuri Kuznetsov
81f10127fa Merge branch 'fix' 2022-09-23 11:06:34 +03:00
Yuri Kuznetsov
8d12148722 Merge branch 'fix' 2022-09-21 14:45:32 +03:00
Yuri Kuznetsov
70000efc0a app doAction public 2022-09-21 14:26:49 +03:00
Yuri Kuznetsov
31de034d45 storage support null 2022-09-21 12:35:14 +03:00
Yuri Kuznetsov
94cef5d4a2 cs fix 2022-09-20 13:51:44 +03:00
Yuri Kuznetsov
3a97076790 date-time value object support from string w/o seconds 2022-09-20 13:32:02 +03:00
Yuri Kuznetsov
3dfaae167f working time function fixes 2022-09-19 18:17:21 +03:00
Yuri Kuznetsov
4d7e56e7b7 working calendar 2022-09-19 17:07:16 +03:00
Yuri Kuznetsov
c0f3fdb226 Merge branch 'fix' 2022-09-19 10:55:26 +03:00
Yuri Kuznetsov
6f37c54ff6 fix typo 2022-09-18 11:11:38 +03:00
Yuri Kuznetsov
a6ca10fdc8 email mass move to folder 2022-09-18 11:09:22 +03:00
Yuri Kuznetsov
07d7afb5b4 fix 2022-09-17 19:55:37 +03:00
Yuri Kuznetsov
cae9b04f80 date fields validation 2022-09-17 19:52:33 +03:00
Yuri Kuznetsov
edf4e6c9e4 date add methods 2022-09-17 19:22:26 +03:00
Yuri Kuznetsov
9857a61744 field validator 2022-09-11 18:09:59 +03:00
3733 changed files with 63937 additions and 29571 deletions

View File

@@ -19,7 +19,6 @@ jobs:
image: mysql:8.0
env:
MYSQL_ALLOW_EMPTY_PASSWORD: false
MYSQ_USER: root
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: integration_test
ports:
@@ -28,7 +27,7 @@ jobs:
strategy:
fail-fast: false
matrix:
php-versions: ['7.4', '8.1']
php-versions: ['8.0', '8.1', '8.2']
branches: ['master']
steps:

View File

@@ -26,7 +26,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
php-versions: ['7.4', '8.0', '8.1']
php-versions: ['8.0', '8.1', '8.2']
steps:
- uses: actions/checkout@v2

1
.idea/.gitignore generated vendored
View File

@@ -3,3 +3,4 @@
!/codeStyles
!/fileTemplates
!/inspectionProfiles
!misc.xml

View File

@@ -2,10 +2,19 @@
<code_scheme name="Project" version="173">
<PHPCodeStyleSettings>
<option name="GROUP_USE_WRAP" value="2" />
<option name="VARIABLE_NAMING_STYLE" value="CAMEL_CASE" />
<option name="KEEP_RPAREN_AND_LBRACE_ON_ONE_LINE" value="true" />
<option name="FORCE_EMPTY_METHODS_IN_ONE_LINE" value="true" />
</PHPCodeStyleSettings>
<codeStyleSettings language="PHP">
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
<option name="CATCH_ON_NEW_LINE" value="true" />
<option name="FINALLY_ON_NEW_LINE" value="true" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" />
<option name="METHOD_CALL_CHAIN_WRAP" value="5" />
</codeStyleSettings>
</code_scheme>
</component>

7
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PhpEntryPointsManager">
<pattern value="\Espo\Controllers\*" member="*Action*" />
<pattern value="\Espo\Modules\*\Controllers\*" member="*Action*" />
</component>
</project>

View File

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

View File

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

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -27,9 +27,19 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Core\Binding;
namespace Espo;
class DefaultBinding implements BindingProcessor
use Espo\Core\Binding\Binder;
use Espo\Core\Binding\BindingProcessor;
use Espo\Core\Binding\Key\NamedClassKey;
/**
* Default binding for the dependency injection framework. Custom binding should be set up in
* `Espo\Modules\{ModuleName}\Binding` or `Espo\Custom\Binding`.
*
* @link https://docs.espocrm.com/development/di/#binding.
*/
class Binding implements BindingProcessor
{
public function process(Binder $binder): void
{
@@ -108,7 +118,7 @@ class DefaultBinding implements BindingProcessor
);
$binder->bindService(
'Espo\\Core\\SelectBuilderFactory',
'Espo\\Core\\Select\\SelectBuilderFactory',
'selectBuilderFactory'
);
@@ -128,7 +138,7 @@ class DefaultBinding implements BindingProcessor
);
$binder->bindService(
'Espo\\Core\\Utils\\HookManager',
'Espo\\Core\\HookManager',
'hookManager'
);
@@ -153,12 +163,12 @@ class DefaultBinding implements BindingProcessor
);
$binder->bindService(
'Espo\\Core\\Utils\\Language $baseLanguage',
NamedClassKey::create('Espo\\Core\\Utils\\Language', 'baseLanguage'),
'baseLanguage'
);
$binder->bindService(
'Espo\\Core\\Utils\\Language $defaultLanguage',
NamedClassKey::create('Espo\\Core\\Utils\\Language', 'defaultLanguage'),
'defaultLanguage'
);
@@ -173,7 +183,7 @@ class DefaultBinding implements BindingProcessor
);
$binder->bindService(
'Espo\\Core\\AclManager $internalAclManager',
NamedClassKey::create('Espo\\Core\\AclManager', 'internalAclManager'),
'internalAclManager'
);
@@ -219,6 +229,35 @@ class DefaultBinding implements BindingProcessor
'Espo\\Core\\Sms\\Sender',
'Espo\\Core\\Sms\\SenderFactory'
);
$binder->bindImplementation(
'Espo\\Core\\Authentication\\Jwt\\KeyFactory',
'Espo\\Core\\Authentication\\Jwt\\DefaultKeyFactory'
);
$binder
->for('Espo\\Core\\Authentication\\Oidc\\TokenValidator')
->bindImplementation(
'Espo\\Core\\Authentication\\Jwt\\SignatureVerifierFactory',
'Espo\\Core\\Authentication\\Oidc\\DefaultSignatureVerifierFactory'
);
$binder
->for('Espo\\Core\\Authentication\\Oidc\\Login')
->bindImplementation(
'Espo\\Core\\Authentication\\Oidc\\UserProvider',
'Espo\\Core\\Authentication\\Oidc\\DefaultUserProvider'
);
$binder->bindImplementation(
'Espo\\Core\\Mail\\Importer\\ParentFinder',
'Espo\\Core\\Mail\\Importer\\DefaultParentFinder'
);
$binder->bindImplementation(
'Espo\\Core\\Mail\\Importer\\DuplicateFinder',
'Espo\\Core\\Mail\\Importer\\DefaultDuplicateFinder'
);
}
private function bindAcl(Binder $binder): void

View File

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

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,22 +29,17 @@
namespace Espo\Classes\Acl\Attachment;
use Espo\Entities\{
User,
Note,
Attachment,
};
use Espo\Entities\Attachment;
use Espo\Entities\Note;
use Espo\Entities\Settings;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
ORM\EntityManager,
AclManager,
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDChecker,
Acl\Traits\DefaultAccessCheckerDependency,
};
use Espo\Core\Acl\AccessEntityCREDChecker;
use Espo\Core\Acl\DefaultAccessChecker;
use Espo\Core\Acl\ScopeData;
use Espo\Core\Acl\Traits\DefaultAccessCheckerDependency;
use Espo\Core\AclManager;
use Espo\Core\ORM\EntityManager;
/**
* @implements AccessEntityCREDChecker<Attachment>
@@ -53,9 +48,8 @@ class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private $aclManager;
private $entityManager;
private AclManager $aclManager;
private EntityManager $entityManager;
public function __construct(
DefaultAccessChecker $defaultAccessChecker,
@@ -71,7 +65,7 @@ class AccessChecker implements AccessEntityCREDChecker
{
/** @var Attachment $entity */
if ($entity->get('parentType') === 'Settings') {
if ($entity->get('parentType') === Settings::ENTITY_TYPE) {
// Allow the logo.
return true;
}
@@ -99,7 +93,7 @@ class AccessChecker implements AccessEntityCREDChecker
return false;
}
if ($parent->getEntityType() === 'Note') {
if ($parent->getEntityType() === Note::ENTITY_TYPE) {
/** @var Note $parent */
$result = $this->checkEntityReadNoteParent($user, $parent);
@@ -145,7 +139,7 @@ class AccessChecker implements AccessEntityCREDChecker
if ($note->getTargetType() === Note::TARGET_USERS) {
$isRelated = $this->entityManager
->getRDBRepository('Note')
->getRDBRepository(Note::ENTITY_TYPE)
->getRelation($note, 'users')
->isRelated($user);

View File

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

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,24 +29,20 @@
namespace Espo\Classes\Acl\AuthToken;
use Espo\Entities\AuthToken;
use Espo\Entities\User;
use Espo\Core\{
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDChecker,
Acl\Traits\DefaultAccessCheckerDependency,
};
use Espo\Core\Acl\AccessEntityCREDChecker;
use Espo\Core\Acl\DefaultAccessChecker;
use Espo\Core\Acl\ScopeData;
use Espo\Core\Acl\Traits\DefaultAccessCheckerDependency;
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\AuthToken>
* @implements AccessEntityCREDChecker<AuthToken>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
public function __construct(DefaultAccessChecker $defaultAccessChecker)
{
$this->defaultAccessChecker = $defaultAccessChecker;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,19 +31,15 @@ namespace Espo\Classes\Acl\Email;
use Espo\Entities\User;
use Espo\Entities\Email;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\Table,
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDSChecker,
Acl\Traits\DefaultAccessCheckerDependency,
};
use Espo\Core\Acl\AccessEntityCREDSChecker;
use Espo\Core\Acl\DefaultAccessChecker;
use Espo\Core\Acl\ScopeData;
use Espo\Core\Acl\Table;
use Espo\Core\Acl\Traits\DefaultAccessCheckerDependency;
/**
* @implements AccessEntityCREDSChecker<\Espo\Entities\Email>
* @implements AccessEntityCREDSChecker<Email>
*/
class AccessChecker implements AccessEntityCREDSChecker
{
@@ -129,7 +125,10 @@ class AccessChecker implements AccessEntityCREDSChecker
return false;
}
if ($entity->get('status') !== 'Sent' && $entity->get('status') !== 'Archived') {
if (
$entity->getStatus() !== Email::STATUS_SENT &&
$entity->getStatus() !== Email::STATUS_ARCHIVED
) {
return true;
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,12 +30,8 @@
namespace Espo\Classes\Acl\Email;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\DefaultAssignmentChecker,
};
use Espo\Core\Acl\DefaultAssignmentChecker;
class AssignmentChecker extends DefaultAssignmentChecker
{

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -34,15 +34,13 @@ use Espo\Entities\Email;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\DefaultOwnershipChecker,
Acl\OwnershipOwnChecker,
Acl\OwnershipTeamChecker,
};
use Espo\Core\Acl\DefaultOwnershipChecker;
use Espo\Core\Acl\OwnershipOwnChecker;
use Espo\Core\Acl\OwnershipTeamChecker;
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Email>
* @implements OwnershipTeamChecker<\Espo\Entities\Email>
* @implements OwnershipOwnChecker<Email>
* @implements OwnershipTeamChecker<Email>
*/
class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,51 +29,56 @@
namespace Espo\Classes\Acl\EmailFilter;
use Espo\Entities\EmailAccount;
use Espo\Entities\User;
use Espo\Entities\EmailFilter;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
ORM\EntityManager,
};
use Espo\Core\Acl\OwnershipOwnChecker;
use Espo\Core\ORM\EntityManager;
/**
* @implements OwnershipOwnChecker<\Espo\Entities\EmailFilter>
* @implements OwnershipOwnChecker<EmailFilter>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
private $entityManager;
private EntityManager $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @param EmailFilter $entity
*/
public function checkOwn(User $user, Entity $entity): bool
{
if (!$entity->has('parentId') || !$entity->has('parentType')) {
if ($entity->isGlobal()) {
return false;
}
$parentType = $entity->get('parentType');
$parentId = $entity->get('parentId');
$parentType = $entity->getParentType();
$parentId = $entity->getParentId();
if (!$parentType || !$parentId) {
return false;
}
$parent = $this->entityManager->getEntity($parentType, $parentId);
$parent = $this->entityManager->getEntityById($parentType, $parentId);
if (!$parent) {
return false;
}
if ($parent->getEntityType() === 'User') {
if ($parent->getEntityType() === User::ENTITY_TYPE) {
return $parent->getId() === $user->getId();
}
if ($parent->has('assignedUserId') && $parent->get('assignedUserId') === $user->getId()) {
if (
$parent instanceof EmailAccount &&
$parent->has('assignedUserId') &&
$parent->get('assignedUserId') === $user->getId()
) {
return true;
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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,16 @@
namespace Espo\Classes\Acl\Import;
use Espo\Entities\Import;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\ScopeData,
Acl\AccessEntityReadChecker,
Acl\AccessEntityDeleteChecker,
};
use Espo\Core\Acl\AccessEntityDeleteChecker;
use Espo\Core\Acl\AccessEntityReadChecker;
use Espo\Core\Acl\ScopeData;
/**
* @implements AccessEntityReadChecker<\Espo\Entities\Import>
* @implements AccessEntityDeleteChecker<\Espo\Entities\Import>
* @implements AccessEntityReadChecker<Import>
* @implements AccessEntityDeleteChecker<Import>
*/
class AccessChecker implements AccessEntityReadChecker, AccessEntityDeleteChecker
{

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,40 +31,32 @@ namespace Espo\Classes\Acl\Note;
use Espo\Entities\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 Espo\Core\Acl\AccessEntityCREDChecker;
use Espo\Core\Acl\DefaultAccessChecker;
use Espo\Core\Acl\ScopeData;
use Espo\Core\Acl\Traits\DefaultAccessCheckerDependency;
use Espo\Core\AclManager;
use Espo\Core\ORM\EntityManager;
use Espo\Core\Utils\Config;
use DateTime;
use Exception;
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\Note>
* @implements AccessEntityCREDChecker<Note>
*/
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;
private DefaultAccessChecker $defaultAccessChecker;
private AclManager $aclManager;
private EntityManager $entityManager;
private Config $config;
public function __construct(
DefaultAccessChecker $defaultAccessChecker,

View File

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

View File

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

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,27 +29,24 @@
namespace Espo\Classes\Acl\Portal;
use Espo\Entities\Portal;
use Espo\Entities\User;
use Espo\Core\{
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDChecker,
Acl\Traits\DefaultAccessCheckerDependency,
Acl\Table,
AclManager,
};
use Espo\Core\Acl\AccessEntityCREDChecker;
use Espo\Core\Acl\DefaultAccessChecker;
use Espo\Core\Acl\ScopeData;
use Espo\Core\Acl\Table;
use Espo\Core\Acl\Traits\DefaultAccessCheckerDependency;
use Espo\Core\AclManager;
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\Portal>
* @implements AccessEntityCREDChecker<Portal>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
private $aclManager;
private DefaultAccessChecker $defaultAccessChecker;
private AclManager $aclManager;
public function __construct(DefaultAccessChecker $defaultAccessChecker, AclManager $aclManager)
{

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,25 +29,22 @@
namespace Espo\Classes\Acl\ScheduledJob;
use Espo\Entities\ScheduledJob;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDChecker,
Acl\Traits\DefaultAccessCheckerDependency,
};
use Espo\Core\Acl\AccessEntityCREDChecker;
use Espo\Core\Acl\DefaultAccessChecker;
use Espo\Core\Acl\ScopeData;
use Espo\Core\Acl\Traits\DefaultAccessCheckerDependency;
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\ScheduledJob>
* @implements AccessEntityCREDChecker<ScheduledJob>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
private DefaultAccessChecker $defaultAccessChecker;
public function __construct(DefaultAccessChecker $defaultAccessChecker)
{

View File

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

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,17 +30,13 @@
namespace Espo\Classes\Acl\User;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\Table,
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDSChecker,
Acl\Traits\DefaultAccessCheckerDependency,
AclManager,
};
use Espo\Core\Acl\AccessEntityCREDSChecker;
use Espo\Core\Acl\DefaultAccessChecker;
use Espo\Core\Acl\ScopeData;
use Espo\Core\Acl\Table;
use Espo\Core\Acl\Traits\DefaultAccessCheckerDependency;
use Espo\Core\AclManager;
/**
* @implements AccessEntityCREDSChecker<User>
@@ -49,9 +45,8 @@ class AccessChecker implements AccessEntityCREDSChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
private $aclManager;
private DefaultAccessChecker $defaultAccessChecker;
private AclManager $aclManager;
public function __construct(DefaultAccessChecker $defaultAccessChecker, AclManager $aclManager)
{

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -32,15 +32,12 @@ namespace Espo\Classes\Acl\User;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\ORM\Entity as CoreEntity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
Acl\OwnershipTeamChecker,
};
use Espo\Core\Acl\OwnershipOwnChecker;
use Espo\Core\Acl\OwnershipTeamChecker;
/**
* @implements OwnershipOwnChecker<\Espo\Entities\User>
* @implements OwnershipTeamChecker<\Espo\Entities\User>
* @implements OwnershipOwnChecker<User>
* @implements OwnershipTeamChecker<User>
*/
class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,25 +30,20 @@
namespace Espo\Classes\Acl\Webhook;
use Espo\Entities\User;
use Espo\Entities\Webhook;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\ScopeData,
Acl\DefaultAccessChecker,
Acl\AccessEntityCREDChecker,
Acl\Traits\DefaultAccessCheckerDependency,
};
use Espo\Core\Acl\AccessEntityCREDChecker;
use Espo\Core\Acl\DefaultAccessChecker;
use Espo\Core\Acl\ScopeData;
use Espo\Core\Acl\Traits\DefaultAccessCheckerDependency;
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\Webhook>
* @implements AccessEntityCREDChecker<Webhook>
*/
class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
public function __construct(DefaultAccessChecker $defaultAccessChecker)
{
$this->defaultAccessChecker = $defaultAccessChecker;

View File

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

View File

@@ -0,0 +1,89 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2023 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\WorkingTimeRange;
use Espo\Core\Acl\AssignmentChecker as AssignmentCheckerInterface;
use Espo\Core\Acl\DefaultAssignmentChecker;
use Espo\Core\AclManager;
use Espo\Entities\User;
use Espo\Entities\WorkingTimeRange;
use Espo\ORM\Entity;
use Espo\ORM\EntityManager;
/**
* @implements AssignmentCheckerInterface<WorkingTimeRange>
*/
class AssignmentChecker implements AssignmentCheckerInterface
{
private DefaultAssignmentChecker $defaultAssignmentChecker;
private AclManager $aclManager;
private EntityManager $entityManager;
public function __construct(
DefaultAssignmentChecker $defaultAssignmentChecker,
AclManager $aclManager,
EntityManager $entityManager
) {
$this->defaultAssignmentChecker = $defaultAssignmentChecker;
$this->aclManager = $aclManager;
$this->entityManager = $entityManager;
}
/**
* @param WorkingTimeRange $entity
*/
public function check(User $user, Entity $entity): bool
{
$result = $this->defaultAssignmentChecker->check($user, $entity);
if (!$result) {
return false;
}
if (!$entity->isAttributeChanged('usersIds')) {
return true;
}
$users = $this->entityManager
->getRDBRepositoryByClass(User::class)
->where(['id' => $entity->getUsers()->getIdList()])
->find();
foreach ($users as $targetUser) {
$accessToUser = $this->aclManager->check($user, $targetUser);
if (!$accessToUser) {
return false;
}
}
return true;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,22 +29,17 @@
namespace Espo\Classes\AclPortal\Attachment;
use Espo\Entities\{
User,
Note,
Attachment,
};
use Espo\Entities\Attachment;
use Espo\Entities\Note;
use Espo\Entities\Settings;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
ORM\EntityManager,
Portal\AclManager,
Acl\ScopeData,
Acl\AccessEntityCREDChecker,
Portal\Acl\DefaultAccessChecker,
Portal\Acl\Traits\DefaultAccessCheckerDependency,
};
use Espo\Core\Acl\AccessEntityCREDChecker;
use Espo\Core\Acl\ScopeData;
use Espo\Core\ORM\EntityManager;
use Espo\Core\Portal\Acl\DefaultAccessChecker;
use Espo\Core\Portal\Acl\Traits\DefaultAccessCheckerDependency;
use Espo\Core\Portal\AclManager;
/**
* @implements AccessEntityCREDChecker<Attachment>
@@ -53,11 +48,9 @@ class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
private $aclManager;
private $entityManager;
private DefaultAccessChecker $defaultAccessChecker;
private AclManager $aclManager;
private EntityManager $entityManager;
public function __construct(
DefaultAccessChecker $defaultAccessChecker,
@@ -73,7 +66,7 @@ class AccessChecker implements AccessEntityCREDChecker
{
/** @var Attachment $entity */
if ($entity->get('parentType') === 'Settings') {
if ($entity->get('parentType') === Settings::ENTITY_TYPE) {
// Allow the logo.
return true;
}
@@ -101,7 +94,7 @@ class AccessChecker implements AccessEntityCREDChecker
return false;
}
if ($parent->getEntityType() === 'Note') {
if ($parent->getEntityType() === Note::ENTITY_TYPE) {
/** @var Note $parent */
$result = $this->checkEntityReadNoteParent($user, $parent);
@@ -151,7 +144,7 @@ class AccessChecker implements AccessEntityCREDChecker
if ($note->getTargetType() === Note::TARGET_USERS) {
$isRelated = $this->entityManager
->getRDBRepository('Note')
->getRDBRepository(Note::ENTITY_TYPE)
->getRelation($note, 'users')
->isRelated($user);

View File

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

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,29 +29,23 @@
namespace Espo\Classes\AclPortal\Email;
use Espo\Entities\Email;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\ORM\Entity as CoreEntity;
use Espo\Core\{
Acl\Table,
Acl\ScopeData,
Acl\AccessEntityCREDSChecker,
Portal\Acl\DefaultAccessChecker,
Portal\Acl\Traits\DefaultAccessCheckerDependency,
};
use Espo\Core\Acl\AccessEntityCREDSChecker;
use Espo\Core\Acl\ScopeData;
use Espo\Core\Acl\Table;
use Espo\Core\Portal\Acl\DefaultAccessChecker;
use Espo\Core\Portal\Acl\Traits\DefaultAccessCheckerDependency;
/**
* @implements AccessEntityCREDSChecker<\Espo\Entities\Email>
* @implements AccessEntityCREDSChecker<Email>
*/
class AccessChecker implements AccessEntityCREDSChecker
{
use DefaultAccessCheckerDependency;
private $defaultAccessChecker;
public function __construct(
DefaultAccessChecker $defaultAccessChecker
) {

View File

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

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,40 +31,32 @@ namespace Espo\Classes\AclPortal\Note;
use Espo\Entities\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 Espo\Core\Acl\AccessEntityCREDChecker;
use Espo\Core\Acl\ScopeData;
use Espo\Core\ORM\EntityManager;
use Espo\Core\Portal\Acl\DefaultAccessChecker;
use Espo\Core\Portal\Acl\Traits\DefaultAccessCheckerDependency;
use Espo\Core\Portal\AclManager;
use Espo\Core\Utils\Config;
use DateTime;
use Exception;
/**
* @implements AccessEntityCREDChecker<\Espo\Entities\Note>
* @implements AccessEntityCREDChecker<Note>
*/
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;
private DefaultAccessChecker $defaultAccessChecker;
private AclManager $aclManager;
private EntityManager $entityManager;
private Config $config;
public function __construct(
DefaultAccessChecker $defaultAccessChecker,

View File

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

View File

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

View File

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

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,16 +29,14 @@
namespace Espo\Classes\AppInfo;
use Espo\Core\{
Utils\Module,
Binding\EspoBindingLoader,
Binding\Binding as BindingItem,
Console\Command\Params,
};
use Espo\Core\Binding\Binding as BindingItem;
use Espo\Core\Binding\EspoBindingLoader;
use Espo\Core\Console\Command\Params;
use Espo\Core\Utils\Module;
class Binding
{
private $module;
private Module $module;
public function __construct(Module $module)
{

View File

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

View File

@@ -0,0 +1,92 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2023 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\AppParams;
use Espo\Entities\Extension;
use Espo\Entities\User;
use Espo\ORM\EntityManager;
use Espo\Tools\App\AppParam;
use stdClass;
class Extensions implements AppParam
{
private User $user;
private EntityManager $entityManager;
public function __construct(
User $user,
EntityManager $entityManager
) {
$this->user = $user;
$this->entityManager = $entityManager;
}
/**
* @return stdClass[]
*/
public function get(): array
{
if (!$this->user->isRegular() && !$this->user->isAdmin()) {
return [];
}
$extensionList = $this->entityManager
->getRDBRepositoryByClass(Extension::class)
->where([
'licenseStatus' => [
Extension::LICENSE_STATUS_INVALID,
Extension::LICENSE_STATUS_EXPIRED,
Extension::LICENSE_STATUS_SOFT_EXPIRED,
],
])
->find();
$list = [];
foreach ($extensionList as $extension) {
$list[] = (object) [
'name' => $extension->getName(),
'version' => $extension->getVersion(),
'licenseStatus' => $extension->getLicenseStatus(),
'licenseStatusMessage' => $extension->getLicenseStatusMessage(),
'isInstalled' => $extension->isInstalled(),
'notify' => in_array(
$extension->getLicenseStatus(),
[
Extension::LICENSE_STATUS_INVALID,
Extension::LICENSE_STATUS_EXPIRED,
]
)
];
}
return $list;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,11 +29,10 @@
namespace Espo\Classes\AppParams;
use Espo\Core\{
Acl,
Select\SelectBuilderFactory,
ORM\EntityManager,
};
use Espo\Core\Acl;
use Espo\Core\ORM\EntityManager;
use Espo\Core\Select\SelectBuilderFactory;
use Espo\Entities\Template;
use Espo\Tools\App\AppParam;
/**
@@ -42,9 +41,7 @@ use Espo\Tools\App\AppParam;
class TemplateEntityTypeList implements AppParam
{
private Acl $acl;
private SelectBuilderFactory $selectBuilderFactory;
private EntityManager $entityManager;
public function __construct(
@@ -62,7 +59,7 @@ class TemplateEntityTypeList implements AppParam
*/
public function get(): array
{
if (!$this->acl->checkScope('Template')) {
if (!$this->acl->checkScope(Template::ENTITY_TYPE)) {
return [];
}
@@ -70,7 +67,7 @@ class TemplateEntityTypeList implements AppParam
$query = $this->selectBuilderFactory
->create()
->from('Template')
->from(Template::ENTITY_TYPE)
->withAccessControlFilter()
->buildQueryBuilder()
->select(['entityType'])
@@ -78,12 +75,12 @@ class TemplateEntityTypeList implements AppParam
->build();
$templateCollection = $this->entityManager
->getRDBRepository('Template')
->getRDBRepositoryByClass(Template::class)
->clone($query)
->find();
foreach ($templateCollection as $template) {
$list[] = $template->get('entityType');
$list[] = $template->getTargetEntityType();
}
return $list;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,65 +29,61 @@
namespace Espo\Classes\AssignmentNotificators;
use Espo\Services\Email as EmailService;
use Espo\Services\Stream as StreamService;
use Espo\Core\Field\DateTime;
use Espo\Entities\EmailAddress;
use Espo\Entities\EmailFolder;
use Espo\Modules\Crm\Entities\Account;
use Espo\Modules\Crm\Entities\Contact;
use Espo\Modules\Crm\Entities\Lead;
use Espo\Tools\Stream\Service as StreamService;
use Espo\Core\Notification\AssignmentNotificator;
use Espo\Core\Notification\AssignmentNotificator\Params;
use Espo\Core\Notification\UserEnabledChecker;
use Espo\Core\InjectableFactory;
use Espo\Core\AclManager;
use Espo\ORM\EntityManager;
use Espo\ORM\Entity;
use Espo\Entities\User;
use Espo\Entities\Notification;
use Espo\Entities\Email as EmailEntity;
use Espo\Repositories\Email as EmailRepository;
use Espo\Repositories\EmailAddress as EmailAddressRepository;
use Espo\Tools\Email\Util;
use DateTime;
use Exception;
/**
* @implements AssignmentNotificator<EmailEntity>
*/
class Email implements AssignmentNotificator
{
private const DAYS_THRESHOLD = 2;
private ?StreamService $streamService = null;
private $user;
private $entityManager;
private $injectableFactory;
private $aclManager;
private $userChecker;
private User $user;
private EntityManager $entityManager;
private UserEnabledChecker $userChecker;
private AclManager $aclManager;
private StreamService $streamService;
public function __construct(
User $user,
EntityManager $entityManager,
UserEnabledChecker $userChecker,
InjectableFactory $injectableFactory,
AclManager $aclManager
AclManager $aclManager,
StreamService $streamService
) {
$this->user = $user;
$this->entityManager = $entityManager;
$this->userChecker = $userChecker;
$this->injectableFactory = $injectableFactory;
$this->aclManager = $aclManager;
$this->streamService = $streamService;
}
/**
* @param EmailEntity $entity
*/
public function process(Entity $entity, Params $params): void
{
/** @var EmailEntity $entity */
if (
!in_array(
$entity->get('status'),
$entity->getStatus(),
[
EmailEntity::STATUS_ARCHIVED,
EmailEntity::STATUS_SENT,
@@ -109,26 +105,19 @@ class Email implements AssignmentNotificator
}
}
$dateSent = $entity->get('dateSent');
$dateSent = $entity->getDateSent();
if (!$dateSent) {
return;
}
try {
$dt = new DateTime($dateSent);
}
catch (Exception $e) {
return;
}
if ($dt->diff(new DateTime())->days > self::DAYS_THRESHOLD) {
if ($dateSent->diff(DateTime::createNow())->days > self::DAYS_THRESHOLD) {
return;
}
$emailUserIdList = $entity->get('usersIds');
if (is_null($emailUserIdList) || !is_array($emailUserIdList)) {
if (!is_array($emailUserIdList)) {
return;
}
@@ -146,13 +135,13 @@ class Email implements AssignmentNotificator
$data = [
'emailId' => $entity->getId(),
'emailName' => $entity->get('name'),
'emailName' => $entity->getSubject(),
];
/** @var EmailRepository $emailRepository */
$emailRepository = $this->entityManager->getRepository('Email');
$emailRepository = $this->entityManager->getRepository(EmailEntity::ENTITY_TYPE);
/** @var EmailAddressRepository $emailAddressRepository */
$emailAddressRepository = $this->entityManager->getRepository('EmailAddress');
$emailAddressRepository = $this->entityManager->getRepository(EmailAddress::ENTITY_TYPE);
if (!$entity->has('from')) {
$emailRepository->loadFromField($entity);
@@ -167,7 +156,11 @@ class Email implements AssignmentNotificator
$from = $entity->get('from');
if ($from) {
$person = $emailAddressRepository->getEntityByAddress($from, null, ['User', 'Contact', 'Lead']);
$person = $emailAddressRepository->getEntityByAddress($from, null, [
User::ENTITY_TYPE,
Contact::ENTITY_TYPE,
Lead::ENTITY_TYPE,
]);
if ($person) {
$data['personEntityType'] = $person->getEntityType();
@@ -178,12 +171,12 @@ class Email implements AssignmentNotificator
$userIdFrom = null;
if ($person && $person->getEntityType() === 'User') {
if ($person && $person->getEntityType() === User::ENTITY_TYPE) {
$userIdFrom = $person->getId();
}
if (empty($data['personEntityId'])) {
$data['fromString'] = EmailService::parseFromName($entity->get('fromString'));
$data['fromString'] = Util::parseFromName($entity->getFromString());
if (empty($data['fromString']) && $from) {
$data['fromString'] = $from;
@@ -192,8 +185,8 @@ class Email implements AssignmentNotificator
$parent = null;
$parentId = $entity->get('parentId');
$parentType = $entity->get('parentType');
$parentId = $entity->getParentId();
$parentType = $entity->getParentType();
if ($parentType && $parentId) {
$parent = $this->entityManager->getEntityById($parentType, $parentId);
@@ -201,10 +194,10 @@ class Email implements AssignmentNotificator
$account = null;
$accountId = $entity->get('accountId');
$accountLink = $entity->getAccount();
if ($accountId) {
$account = $this->entityManager->getEntityById('Account', $accountId);
if ($accountLink) {
$account = $this->entityManager->getEntityById(Account::ENTITY_TYPE, $accountLink->getId());
}
foreach ($userIdList as $userId) {
@@ -216,11 +209,15 @@ class Email implements AssignmentNotificator
continue;
}
if ($entity->getLinkMultipleColumn('users', 'inTrash', $userId)) {
if ($entity->getLinkMultipleColumn('users', EmailEntity::USERS_COLUMN_IN_TRASH, $userId)) {
continue;
}
if (!$this->userChecker->checkAssignment('Email', $userId)) {
if ($entity->getLinkMultipleColumn('users', EmailEntity::USERS_COLUMN_IS_READ, $userId)) {
continue;
}
if (!$this->userChecker->checkAssignment(EmailEntity::ENTITY_TYPE, $userId)) {
continue;
}
@@ -228,25 +225,24 @@ class Email implements AssignmentNotificator
$params->getOption('isBeingImported') ||
$params->getOption('isJustSent')
) {
$folderId = $entity->getLinkMultipleColumn('users', 'folderId', $userId);
$folderId = $entity->getLinkMultipleColumn('users', EmailEntity::USERS_COLUMN_FOLDER_ID, $userId);
if ($folderId) {
if (
$this->entityManager
->getRDBRepository('EmailFolder')
->where([
'id' => $folderId,
'skipNotifications' => true,
])
->count()
) {
continue;
}
if (
$folderId &&
$this->entityManager
->getRDBRepositoryByClass(EmailFolder::class)
->where([
'id' => $folderId,
'skipNotifications' => true,
])
->count()
) {
continue;
}
}
/** @var User|null $user */
$user = $this->entityManager->getEntity('User', $userId);
/** @var ?User $user */
$user = $this->entityManager->getEntityById(User::ENTITY_TYPE, $userId);
if (!$user) {
continue;
@@ -256,18 +252,18 @@ class Email implements AssignmentNotificator
continue;
}
if (!$this->aclManager->checkScope($user, 'Email')) {
if (!$this->aclManager->checkScope($user, EmailEntity::ENTITY_TYPE)) {
continue;
}
$isArchivedOrBeingImported =
$entity->get('status') === EmailEntity::STATUS_ARCHIVED ||
$entity->getStatus() === EmailEntity::STATUS_ARCHIVED ||
$params->getOption('isBeingImported');
if (
$isArchivedOrBeingImported &&
$parent &&
$this->getStreamService()->checkIsFollowed($parent, $userId)
$this->streamService->checkIsFollowed($parent, $userId)
) {
continue;
}
@@ -275,7 +271,7 @@ class Email implements AssignmentNotificator
if (
$isArchivedOrBeingImported &&
$account &&
$this->getStreamService()->checkIsFollowed($account, $userId)
$this->streamService->checkIsFollowed($account, $userId)
) {
continue;
}
@@ -286,7 +282,7 @@ class Email implements AssignmentNotificator
'type' => Notification::TYPE_EMAIL_RECEIVED,
'userId' => $userId,
'relatedId' => $entity->getId(),
'relatedType' => 'Email',
'relatedType' => EmailEntity::ENTITY_TYPE,
])
->select(['id'])
->findOne();
@@ -300,17 +296,8 @@ class Email implements AssignmentNotificator
'userId' => $userId,
'data' => $data,
'relatedId' => $entity->getId(),
'relatedType' => 'Email',
'relatedType' => EmailEntity::ENTITY_TYPE,
]);
}
}
private function getStreamService(): StreamService
{
if (empty($this->streamService)) {
$this->streamService = $this->injectableFactory->create(StreamService::class);
}
return $this->streamService;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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,6 @@ use Espo\Entities\PasswordChangeRequest;
class PasswordChangeRequests implements Cleanup
{
private Config $config;
private EntityManager $entityManager;
private string $cleanupPeriod = '30 days';

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,18 +31,19 @@ namespace Espo\Classes\Cleanup;
use Espo\Core\Cleanup\Cleanup;
use Espo\Core\Utils\Config;
use Espo\Core\Utils\DateTime as DateTimeUtil;
use Espo\Modules\Crm\Entities\Reminder;
use Espo\ORM\EntityManager;
use DateTime;
class Reminders implements Cleanup
{
private $config;
private $entityManager;
private string $cleanupRemindersPeriod = '15 days';
private Config $config;
private EntityManager $entityManager;
public function __construct(Config $config, EntityManager $entityManager)
{
$this->config = $config;
@@ -60,9 +61,9 @@ class Reminders implements Cleanup
$delete = $this->entityManager
->getQueryBuilder()
->delete()
->from('Reminder')
->from(Reminder::ENTITY_TYPE)
->where([
'remindAt<' => $dt->format('Y-m-d'),
'remindAt<' => $dt->format(DateTimeUtil::SYSTEM_DATE_TIME_FORMAT),
])
->build();

View File

@@ -0,0 +1,137 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2023 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\Field\DateTime;
use Espo\Core\Utils\Config;
use Espo\Core\Utils\Metadata;
use Espo\Entities\Subscription;
use Espo\ORM\EntityManager;
use Espo\ORM\Query\Part\Condition as Cond;
class Subscribers implements Cleanup
{
private const PERIOD = '2 months';
private Metadata $metadata;
private EntityManager $entityManager;
private Config $config;
public function __construct(
Metadata $metadata,
EntityManager $entityManager,
Config $config
) {
$this->metadata = $metadata;
$this->entityManager = $entityManager;
$this->config = $config;
}
public function process(): void
{
if (!$this->config->get('cleanupSubscribers')) {
return;
}
/** @var string[] $scopeList */
$scopeList = array_keys($this->metadata->get(['scopes']) ?? []);
/** @var string[] $scopeList */
$scopeList = array_values(array_filter(
$scopeList,
fn ($item) => (bool) $this->metadata->get(['scopes', $item, 'stream'])
));
foreach ($scopeList as $scope) {
$this->processEntityType($scope);
}
}
private function processEntityType(string $entityType): void
{
/** @var ?array<string, mixed> $data */
$data = $this->metadata->get(['streamDefs', $entityType, 'subscribersCleanup']);
if (!($data['enabled'] ?? false)) {
return;
}
/** @var string $dateField */
$dateField = $data['dateField'] ?? 'createdAt';
/** @var ?string[] $statusList */
$statusList = $data['statusList'] ?? null;
/** @var ?string $statusField */
$statusField = $this->metadata->get(['scopes', $entityType, 'statusField']);
if ($statusList === null || $statusField === null) {
return;
}
/** @var string $period */
$period = $this->metadata->get(['streamDefs', $entityType, 'subscribersCleanup', 'period']) ??
$this->config->get('cleanupSubscribersPeriod') ??
self::PERIOD;
$before = DateTime::createNow()->modify('-' . $period);
$query = $this->entityManager
->getQueryBuilder()
->delete()
->from(Subscription::ENTITY_TYPE, 'subscription')
->join(
$entityType,
'entity',
Cond::equal(
Cond::column('entity.id'),
Cond::column('entityId')
)
)
->where(
Cond::and(
Cond::equal(
Cond::column('entityType'),
$entityType
),
Cond::less(
Cond::column('entity.' . $dateField),
$before->getString()
),
Cond::in(
Cond::column('entity.' . $statusField),
$statusList
)
)
)
->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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -0,0 +1,108 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2023 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\ConsoleCommands;
use Espo\Core\Console\Command;
use Espo\Core\Console\Command\Params;
use Espo\Core\Console\IO;
use Espo\Core\Exceptions\Error;
use Espo\Core\ORM\Entity as CoreEntity;
use Espo\Entities\ArrayValue;
use Espo\ORM\Entity;
use Espo\ORM\EntityManager;
use Espo\Repositories\ArrayValue as ArrayValueRepository;
class PopulateArrayValues implements Command
{
private EntityManager $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @throws Error
*/
public function run(Params $params, IO $io): void
{
$entityType = $params->getArgument(0);
$field = $params->getArgument(1);
if (!$entityType || !$field) {
throw new Error("Entity type and field should be passed as arguments.");
}
if (!$this->entityManager->hasRepository($entityType)) {
throw new Error("Bad entity type.");
}
$defs = $this->entityManager->getDefs()->getEntity($entityType);
if (!$defs->hasAttribute($field)) {
throw new Error("Bad field.");
}
if ($defs->getAttribute($field)->getType() !== Entity::JSON_ARRAY) {
throw new Error("Non-array field.");
}
if ($defs->getAttribute($field)->isNotStorable()) {
throw new Error("Not-storable field.");
}
if (!$defs->getAttribute($field)->getParam('storeArrayValues')) {
throw new Error("Array values disabled for the field..");
}
$collection = $this->entityManager
->getRDBRepository($entityType)
->sth()
->find();
/** @var ArrayValueRepository $repository */
$repository = $this->entityManager->getRepository(ArrayValue::ENTITY_TYPE);
foreach ($collection as $i => $entity) {
if (!$entity instanceof CoreEntity) {
throw new Error();
}
$repository->storeEntityAttribute($entity, $field);
if ($i % 1000 === 0) {
$io->write('.');
}
}
$io->writeLine('');
$io->writeLine('Done.');
}
}

View File

@@ -0,0 +1,111 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2023 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\ConsoleCommands;
use Espo\Core\Console\Command;
use Espo\Core\Console\Command\Params;
use Espo\Core\Console\Exceptions\ArgumentNotSpecified;
use Espo\Core\Console\Exceptions\InvalidArgument;
use Espo\Core\Console\IO;
use Espo\Core\Exceptions\Error;
use Espo\Core\FieldProcessing\NextNumber\BeforeSaveProcessor;
use Espo\Core\ORM\Entity as CoreEntity;
use Espo\Core\ORM\Repository\Option\SaveOption;
use Espo\ORM\EntityManager;
use Espo\ORM\Query\Part\Order;
class PopulateNumbers implements Command
{
private BeforeSaveProcessor $beforeSaveProcessor;
private EntityManager $entityManager;
public function __construct(
BeforeSaveProcessor $beforeSaveProcessor,
EntityManager $entityManager
) {
$this->beforeSaveProcessor = $beforeSaveProcessor;
$this->entityManager = $entityManager;
}
/**
* @throws Error
*/
public function run(Params $params, IO $io): void
{
$entityType = $params->getArgument(0);
$field = $params->getArgument(1);
$orderBy = $params->getOption('orderBy') ?? 'createdAt';
$order = $params->getOption('order') ?? Order::ASC;
if (!$entityType) {
throw new ArgumentNotSpecified("No entity type argument.");
}
if (!$field) {
throw new ArgumentNotSpecified("No field argument.");
}
$fieldType = $this->entityManager
->getDefs()
->getEntity($entityType)
->getField($field)
->getType();
if ($fieldType !== 'number') {
throw new InvalidArgument("Field `{$field}` is not of `number` type.");
}
$collection = $this->entityManager
->getRDBRepository($entityType)
->where([
$field => null,
])
->order($orderBy, $order)
->sth()
->find();
foreach ($collection as $i => $entity) {
if (!$entity instanceof CoreEntity) {
throw new Error();
}
$this->beforeSaveProcessor->processPopulate($entity, $field);
$this->entityManager->saveEntity($entity, [SaveOption::IMPORT => true]);
if ($i % 1000 === 0) {
$io->write('.');
}
}
$io->writeLine('');
$io->writeLine('Done.');
}
}

View File

@@ -0,0 +1,70 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2023 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\ConsoleCommands;
use Espo\Core\Console\Command;
use Espo\Core\Console\Command\Params;
use Espo\Core\Console\IO;
use Espo\Tools\CategoryTree\RebuildPaths;
use Exception;
class RebuildCategoryPaths implements Command
{
private RebuildPaths $rebuildPaths;
public function __construct(RebuildPaths $rebuildPaths)
{
$this->rebuildPaths = $rebuildPaths;
}
public function run(Params $params, IO $io): void
{
$entityType = $params->getArgument(0);
if (!$entityType) {
$io->setExitStatus(1);
$io->writeLine("Error: No entity type. Should be specified as the first argument.");
return;
}
try {
$this->rebuildPaths->run($entityType);
}
catch (Exception $e) {
$io->setExitStatus(1);
$io->writeLine("Error: " . $e->getMessage());
return;
}
$io->writeLine("Done.");
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -36,43 +36,32 @@ use Espo\ORM\EntityManager;
use Espo\Repositories\EmailAddress as EmailAddressRepository;
use Espo\Entities\EmailAddress;
use Espo\Entities\Email;
use Espo\Core\FieldProcessing\Loader;
use Espo\Core\FieldProcessing\Loader\Params;
use Espo\Core\Mail\Event\Event as EspoEvent;
use Espo\Core\Mail\Event\EventFactory;
use Espo\Core\Utils\Log;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
Mail\Event\Event as EspoEvent,
Mail\Event\EventFactory,
Utils\Log,
};
use ICal\Event;
use ICal\ICal;
use Throwable;
use stdClass;
/**
* @implements Loader<\Espo\Entities\Email>
* @implements Loader<Email>
*/
class IcsDataLoader implements Loader
{
private $entityManager;
private $log;
/**
* @var array<string,string>
*/
/** @var array<string, string> */
private $entityTypeLinkMap = [
'User' => 'users',
'Contact' => 'contacts',
'Lead' => 'leads',
];
public function __construct(EntityManager $entityManager, Log $log)
{
$this->entityManager = $entityManager;
$this->log = $log;
}
public function __construct(private EntityManager $entityManager, private Log $log)
{}
public function process(Entity $entity, Params $params): void
{
@@ -86,7 +75,7 @@ class IcsDataLoader implements Loader
$ical->initString($icsContents);
/* @var \ICal\Event|null $event */
/* @var ?Event $event */
$event = $ical->events()[0] ?? null;
if ($event === null) {

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,30 +30,22 @@
namespace Espo\Classes\FieldProcessing\Email;
use Espo\ORM\Entity;
use Espo\Repositories\EmailAddress as EmailAddressRepository;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
ORM\EntityManager,
};
use Espo\Core\FieldProcessing\Loader;
use Espo\Core\FieldProcessing\Loader\Params;
use Espo\Core\ORM\EntityManager;
use Espo\Entities\Email;
use Espo\Entities\User;
/**
* @implements Loader<\Espo\Entities\Email>
* @implements Loader<Email>
*/
class StringDataLoader implements Loader
{
private $entityManager;
private EntityManager $entityManager;
private User $user;
private $user;
/**
* @var array<string,string>
*/
/** @var array<string, string> */
private $fromEmailAddressNameCache = [];
public function __construct(EntityManager $entityManager, User $user)
@@ -66,21 +58,22 @@ class StringDataLoader implements Loader
{
/** @var Email $entity */
$userEmailAdddressIdList = [];
$userEmailAddressIdList = [];
$emailAddressCollection = $this->entityManager
->getRDBRepository('User')
->getRDBRepository(User::ENTITY_TYPE)
->getRelation($this->user, 'emailAddresses')
->select(['id'])
->find();
foreach ($emailAddressCollection as $emailAddress) {
$userEmailAdddressIdList[] = $emailAddress->getId();
$userEmailAddressIdList[] = $emailAddress->getId();
}
if (
in_array($entity->get('fromEmailAddressId'), $userEmailAdddressIdList) ||
$entity->get('createdById') === $this->user->getId() && $entity->get('status') === Email::STATUS_SENT
in_array($entity->get('fromEmailAddressId'), $userEmailAddressIdList) ||
$entity->get('createdById') === $this->user->getId() &&
$entity->getStatus() === Email::STATUS_SENT
) {
$entity->loadLinkMultipleField('toEmailAddresses');
@@ -114,7 +107,7 @@ class StringDataLoader implements Loader
if (!array_key_exists($fromEmailAddressId, $this->fromEmailAddressNameCache)) {
$person = $this->getEmailAddressRepository()->getEntityByAddressId($fromEmailAddressId, null, true);
$fromName = $person ? $person->get('name') : null;
$fromName = $person?->get('name');
$this->fromEmailAddressNameCache[$fromEmailAddressId] = $fromName;
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,24 +29,20 @@
namespace Espo\Classes\FieldProcessing\Email;
use Espo\Entities\Email;
use Espo\ORM\Entity;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
ORM\EntityManager,
};
use Espo\Core\FieldProcessing\Loader;
use Espo\Core\FieldProcessing\Loader\Params;
use Espo\Core\ORM\EntityManager;
use Espo\Entities\User;
/**
* @implements Loader<\Espo\Entities\Email>
* @implements Loader<Email>
*/
class UserColumnsLoader implements Loader
{
private $entityManager;
private $user;
private EntityManager $entityManager;
private User $user;
public function __construct(EntityManager $entityManager, User $user)
{
@@ -57,8 +53,12 @@ class UserColumnsLoader implements Loader
public function process(Entity $entity, Params $params): void
{
$emailUser = $this->entityManager
->getRDBRepository('EmailUser')
->select(['isRead', 'isImportant', 'inTrash'])
->getRDBRepository(Email::RELATIONSHIP_EMAIL_USER)
->select([
Email::USERS_COLUMN_IS_READ,
Email::USERS_COLUMN_IS_IMPORTANT,
Email::USERS_COLUMN_IN_TRASH,
])
->where([
'deleted' => false,
'userId' => $this->user->getId(),
@@ -67,17 +67,17 @@ class UserColumnsLoader implements Loader
->findOne();
if (!$emailUser) {
$entity->set('isRead', null);
$entity->clear('isImportant');
$entity->clear('inTrash');
$entity->set(Email::USERS_COLUMN_IS_READ, null);
$entity->clear(Email::USERS_COLUMN_IS_IMPORTANT);
$entity->clear(Email::USERS_COLUMN_IN_TRASH);
return;
}
$entity->set([
'isRead' => $emailUser->get('isRead'),
'isImportant' => $emailUser->get('isImportant'),
'inTrash' => $emailUser->get('inTrash'),
Email::USERS_COLUMN_IS_READ => $emailUser->get(Email::USERS_COLUMN_IS_READ),
Email::USERS_COLUMN_IS_IMPORTANT => $emailUser->get(Email::USERS_COLUMN_IS_IMPORTANT),
Email::USERS_COLUMN_IN_TRASH => $emailUser->get(Email::USERS_COLUMN_IN_TRASH),
]);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,27 +29,26 @@
namespace Espo\Classes\FieldProcessing\User;
use Espo\Entities\AuthLogRecord;
use Espo\Entities\AuthToken;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
FieldProcessing\Loader,
FieldProcessing\Loader\Params,
ORM\EntityManager,
Acl,
Acl\Table,
};
use Espo\Core\Acl;
use Espo\Core\Acl\Table;
use Espo\Core\FieldProcessing\Loader;
use Espo\Core\FieldProcessing\Loader\Params;
use Espo\Core\ORM\EntityManager;
use DateTime;
use Exception;
/**
* @implements Loader<\Espo\Entities\User>
* @implements Loader<User>
*/
class LastAccessLoader implements Loader
{
private $entityManager;
private $acl;
private EntityManager $entityManager;
private Acl $acl;
public function __construct(EntityManager $entityManager, Acl $acl)
{
@@ -67,7 +66,7 @@ class LastAccessLoader implements Loader
}
$authToken = $this->entityManager
->getRDBRepository('AuthToken')
->getRDBRepository(AuthToken::ENTITY_TYPE)
->select(['id', 'lastAccess'])
->where([
'userId' => $entity->getId(),
@@ -87,7 +86,7 @@ class LastAccessLoader implements Loader
try {
$dt = new DateTime($lastAccess);
}
catch (Exception $e) {}
catch (Exception) {}
}
$where = [
@@ -100,7 +99,7 @@ class LastAccessLoader implements Loader
}
$authLogRecord = $this->entityManager
->getRDBRepository('AuthLogRecord')
->getRDBRepository(AuthLogRecord::ENTITY_TYPE)
->select(['id', 'createdAt'])
->where($where)
->order('requestTime', true)

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,10 +29,13 @@
namespace Espo\Classes\FieldValidators;
use Espo\Core\Utils\Config;
use Espo\ORM\Entity;
class CurrencyType extends FloatType
{
public function __construct(private Config $config) {}
protected function isNotEmpty(Entity $entity, string $field): bool
{
return
@@ -40,4 +43,26 @@ class CurrencyType extends FloatType
$entity->has($field . 'Currency') && $entity->get($field . 'Currency') !== null &&
$entity->get($field . 'Currency') !== '';
}
public function checkValidCurrency(Entity $entity, string $field): bool
{
$attribute = $field . 'Currency';
if (!$entity->has($attribute)) {
return true;
}
$currency = $entity->get($attribute);
$currencyList = $this->config->get('currencyList') ?? [$this->config->get('defaultCurrency')];
if (
$currency === null &&
$entity->has($field) &&
$entity->get($field) === null
) {
return true;
}
return in_array($currency, $currencyList);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,8 +29,11 @@
namespace Espo\Classes\FieldValidators;
use Espo\Core\Field\Date;
use Espo\ORM\Entity;
use Exception;
class DateType
{
public function checkRequired(Entity $entity, string $field): bool
@@ -42,4 +45,23 @@ class DateType
{
return $entity->has($field) && $entity->get($field) !== null;
}
public function checkValid(Entity $entity, string $field): bool
{
/** @var ?string $value */
$value = $entity->get($field);
if ($value === null) {
return true;
}
try {
Date::fromString($value);
}
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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,7 +29,10 @@
namespace Espo\Classes\FieldValidators;
use Espo\Core\Field\DateTime;
use Espo\Core\Field\Date;
use Espo\ORM\Entity;
use Exception;
class DatetimeOptionalType extends DatetimeType
{
@@ -50,4 +53,33 @@ class DatetimeOptionalType extends DatetimeType
return false;
}
public function checkValid(Entity $entity, string $field): bool
{
/** @var ?string $dateValue */
$dateValue = $entity->get($field . 'Date');
if ($dateValue !== null) {
try {
Date::fromString($dateValue);
}
catch (Exception $e) {
return false;
}
}
/** @var ?string $value */
$value = $entity->get($field);
if ($value !== null) {
try {
DateTime::fromString($value);
}
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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -29,6 +29,29 @@
namespace Espo\Classes\FieldValidators;
use Espo\Core\Field\DateTime;
use Espo\ORM\Entity;
use Exception;
class DatetimeType extends DateType
{
public function checkValid(Entity $entity, string $field): bool
{
/** @var ?string $value */
$value = $entity->get($field);
if ($value === null) {
return true;
}
try {
DateTime::fromString($value);
}
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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 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-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,11 +31,11 @@ namespace Espo\Classes\FieldValidators;
use Espo\ORM\Entity;
use StdClass;
use stdClass;
class JsonArrayType
{
public function rawCheckArray(StdClass $data, string $field): bool
public function rawCheckArray(stdClass $data, string $field): bool
{
if (isset($data->$field) && !is_array($data->$field)) {
return false;

View File

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

View File

@@ -0,0 +1,79 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Classes\FieldValidators\User\UserName;
use Espo\Core\FieldValidation\Validator;
use Espo\Core\FieldValidation\Validator\Data;
use Espo\Core\FieldValidation\Validator\Failure;
use Espo\Core\Utils\Config;
use Espo\Entities\User;
use Espo\ORM\Entity;
use RuntimeException;
/**
* @implements Validator<User>
*/
class Valid implements Validator
{
private Config $config;
public function __construct(Config $config) {
$this->config = $config;
}
/**
* @param User $entity
*/
public function validate(Entity $entity, string $field, Data $data): ?Failure
{
$value = $entity->getUserName();
if ($value === null) {
return null;
}
/** @var ?string $regExp */
$regExp = $this->config->get('userNameRegularExpression');
if (!$regExp) {
throw new RuntimeException("No `userNameRegularExpression` in config.");
}
if (strpos($value, ' ') !== false) {
return Failure::create();
}
if (preg_replace("/{$regExp}/", '_', $value) !== $value) {
return Failure::create();
}
return null;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,6 +30,7 @@
namespace Espo\Classes\FieldValidators;
use Espo\Core\Utils\Metadata;
use Espo\ORM\Defs;
use Espo\ORM\Entity;
class VarcharType
@@ -37,10 +38,12 @@ class VarcharType
private Metadata $metadata;
private const DEFAULT_MAX_LENGTH = 255;
private Defs $defs;
public function __construct(Metadata $metadata)
public function __construct(Metadata $metadata, Defs $defs)
{
$this->metadata = $metadata;
$this->defs = $defs;
}
public function checkRequired(Entity $entity, string $field): bool
@@ -54,6 +57,14 @@ class VarcharType
return true;
}
$fieldDefs = $this->defs
->getEntity($entity->getEntityType())
->getField($field);
if ($fieldDefs->isNotStorable() && !$validationValue) {
return true;
}
$value = $entity->get($field);
$maxLength = $validationValue ?? self::DEFAULT_MAX_LENGTH;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -34,6 +34,7 @@ use Espo\Core\Job\Job\Status;
use Espo\Core\Job\Preparator;
use Espo\Core\Job\Preparator\Data;
use Espo\Entities\EmailAccount;
use Espo\ORM\EntityManager;
use Espo\Entities\Job as JobEntity;
@@ -42,7 +43,7 @@ use DateTimeImmutable;
class CheckEmailAccounts implements Preparator
{
private $entityManager;
private EntityManager $entityManager;
public function __construct(EntityManager $entityManager)
{
@@ -52,10 +53,10 @@ class CheckEmailAccounts implements Preparator
public function prepare(Data $data, DateTimeImmutable $executeTime): void
{
$collection = $this->entityManager
->getRDBRepository('EmailAccount')
->getRDBRepository(EmailAccount::ENTITY_TYPE)
->join('assignedUser', 'assignedUserAdditional')
->where([
'status' => 'Active',
'status' => EmailAccount::STATUS_ACTIVE,
'useImap' => true,
'assignedUserAdditional.isActive' => true,
])
@@ -70,7 +71,7 @@ class CheckEmailAccounts implements Preparator
Status::RUNNING,
Status::READY,
],
'targetType' => 'EmailAccount',
'targetType' => EmailAccount::ENTITY_TYPE,
'targetId' => $entity->getId(),
])
->findOne();
@@ -84,7 +85,7 @@ class CheckEmailAccounts implements Preparator
->where([
'scheduledJobId' => $data->getId(),
'status' => Status::PENDING,
'targetType' => 'EmailAccount',
'targetType' => EmailAccount::ENTITY_TYPE,
'targetId' => $entity->getId(),
])
->count();
@@ -99,7 +100,7 @@ class CheckEmailAccounts implements Preparator
'name' => $data->getName(),
'scheduledJobId' => $data->getId(),
'executeTime' => $executeTime->format(DateTime::SYSTEM_DATE_TIME_FORMAT),
'targetType' => 'EmailAccount',
'targetType' => EmailAccount::ENTITY_TYPE,
'targetId' => $entity->getId(),
]);

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