Compare commits

...

1285 Commits
4.7.2 ... 5.2.2

Author SHA1 Message Date
yuri
ddc90a05d9 fix email template insertion 2018-05-25 10:15:14 +03:00
yuri
bbbadb1c32 version 2018-05-24 14:35:10 +03:00
yuri
8995835d8e email attach in toolbox 2018-05-24 14:16:51 +03:00
yuri
df3c119f5f wysywyg stick toolbar 2018-05-24 13:57:48 +03:00
yuri
6a2ba73412 fix orm 2018-05-23 15:22:00 +03:00
yuri
cbee8cc541 version 2018-05-23 15:12:51 +03:00
yuri
22f186af29 fix label manager 2018-05-22 14:41:16 +03:00
yuri
77ab385db8 fix client manager exit 2018-05-22 10:25:48 +03:00
yuri
13495ee32e fix rdb 2018-05-21 11:16:39 +03:00
yuri
254ce7d5d2 email-to-case contact 2018-05-21 10:34:24 +03:00
yuri
4e1053d037 lang fix 2018-05-21 10:31:13 +03:00
yuri
2fcc6e168f orm setAsFetched fix 2018-05-21 10:30:22 +03:00
yuri
96ea0ae690 pl_PL lang fix 2018-05-18 14:40:41 +03:00
yuri
aa66001981 fix personal email account check 2018-05-18 12:00:37 +03:00
yuri
173ff943a4 next number fix 2018-05-18 11:48:51 +03:00
yuri
79ac73bb95 cleanup 2018-05-18 11:43:53 +03:00
yuri
2143832c25 cleanup 2018-05-18 11:42:51 +03:00
yuri
c656e36265 export timeout 2018-05-18 11:41:20 +03:00
yuri
8564adca6a fix portal assinment permission 2018-05-18 11:37:05 +03:00
yuri
19c9922115 fix navbar 2018-05-18 11:19:33 +03:00
yuri
b22a6f204a fix export 2018-05-15 13:33:51 +03:00
yuri
daa0cf9fc9 fix calendar 2018-05-15 12:52:28 +03:00
yuri
6365aa04df fix 2018-05-15 12:23:26 +03:00
yuri
ff20e077b1 fix 2018-05-15 12:19:49 +03:00
yuri
1106aaf18e fix 2018-05-15 12:15:13 +03:00
yuri
872ba225b4 fix 2018-05-15 12:13:15 +03:00
yuri
95c15efa92 fix typo 2018-05-15 11:57:34 +03:00
yuri
c179cec8a0 fix attachment multiple 2018-05-15 11:50:59 +03:00
yuri
97f96396c5 fix 2018-05-15 11:28:08 +03:00
yuri
e05cac1261 fix kanban 2018-05-15 11:21:50 +03:00
yuri
f9d8894f37 fix email field 2018-05-15 11:09:40 +03:00
yuri
5bd5a76722 fix person name 2018-05-15 11:06:09 +03:00
yuri
2fbb4f3725 fix email address 2018-05-15 11:02:29 +03:00
yuri
61e1b18eb9 opted out bool field 2018-05-14 16:50:12 +03:00
yuri
08c1710326 fix erase persoanal data 2018-05-14 15:59:14 +03:00
yuri
39d3baf1b5 fix stream 2018-05-14 15:57:35 +03:00
yuri
fd4753d190 email template info panel fix 2018-05-14 15:48:32 +03:00
yuri
29745367f7 tr_TR lang fix 2018-05-14 12:26:06 +03:00
yuri
25bb4f08ba fix record list dashlet 2018-05-14 11:57:41 +03:00
yuri
40a13c16eb data privacy 2018-05-14 11:49:25 +03:00
yuri
8ad2c425bf fix table get 2018-05-11 17:15:29 +03:00
yuri
2b6c9bc57e fix opp report 2018-05-10 16:35:47 +03:00
yuri
bebbee5abd email: replyTo link 2018-05-10 12:41:42 +03:00
yuri
99156499f1 display opted out on list view 2018-05-08 12:21:30 +03:00
yuri
9ad81581bb email opt out ui change 2018-05-08 11:48:33 +03:00
yuri
1b4cd1478b bc fix 2018-05-08 11:14:16 +03:00
yuri
5fdf2e4403 css fix 2018-05-07 16:33:10 +03:00
yuri
319b523117 css fix 2018-05-07 16:28:01 +03:00
yuri
62823646b0 css fix 2018-05-07 16:12:20 +03:00
yuri
3c16758605 xls float fix 2018-05-07 13:35:56 +03:00
yuri
4705d2e38d link multiple json fields 2018-05-07 13:13:07 +03:00
yuri
05b405f76e attachment multiple order 2018-05-07 12:38:46 +03:00
yuri
f54b2788de fix list tree 2018-05-07 12:05:30 +03:00
yuri
6ac0c7b301 fix task/meeting accountName contactName 2018-05-07 11:57:05 +03:00
yuri
c44cc9906e fix lang 2018-05-04 16:19:12 +03:00
yuri
ecd5671e1a fix panels 2018-05-04 16:00:18 +03:00
yuri
c83f729eea color picker fix 2018-05-04 14:11:09 +03:00
yuri
10afd2dfef update tcpdf 2018-05-04 14:03:38 +03:00
yuri
8229b8320f entity maanger reset to defaults 2018-05-04 13:58:40 +03:00
yuri
50493cf725 user icon 2018-05-04 13:24:04 +03:00
yuri
3937b80254 icons update 2018-05-04 13:18:16 +03:00
yuri
bcb7aaf13c entity manager: ability to select icons 2018-05-04 13:18:04 +03:00
yuri
f9d7ec7f47 fix test 2018-05-04 11:14:19 +03:00
yuri
b7d43edf22 attachment tests 2018-05-04 11:13:05 +03:00
yuri
0f0060f0f6 fix attachment duplicate 2018-05-04 11:00:59 +03:00
yuri
036bad3912 entity manager iconClass backend 2018-05-03 17:09:57 +03:00
yuri
c9d675798b icon color change 2018-05-03 15:08:23 +03:00
yuri
10703750f9 stream icon 2018-05-03 14:10:29 +03:00
yuri
4d942851d3 css fix 2018-05-03 14:01:50 +03:00
yuri
1434c31b2f theme names 2018-05-03 12:01:32 +03:00
yuri
74405b2842 theme order 2018-05-03 12:01:23 +03:00
yuri
1070d18085 icons 2018-05-03 11:45:28 +03:00
yuri
b729c13c7a fix css 2018-05-03 11:37:00 +03:00
yuri
1c99327bfd team tab 2018-05-03 11:18:07 +03:00
yuri
61279b0e59 sidebar width fix 2018-05-03 11:10:07 +03:00
yuri
31cb17a41d sidebar expanded by default 2018-05-03 11:00:45 +03:00
yuri
f9349d5545 icon colors 2018-05-03 10:59:18 +03:00
yuri
c3703494eb icons 2018-05-02 16:42:37 +03:00
yuri
d94ff7c4fa concurrency fix 2 2018-05-02 12:58:25 +03:00
yuri
01e0bf4d6d add GNF currency 2018-05-02 12:02:46 +03:00
yuri
ca5f1a47fd cleanup 2018-05-02 11:54:07 +03:00
yuri
54af8ee7c6 fix concurrency 2018-05-02 11:41:46 +03:00
yuri
8572b565f3 update bull 2018-05-02 11:41:02 +03:00
yuri
ea1cc1c65a fix calendar 2018-04-27 16:19:47 +03:00
yuri
4610c61bd4 fix dashlets 2018-04-27 16:16:37 +03:00
yuri
02f04ea9c4 concurrency race fix 2018-04-27 16:06:23 +03:00
yuri
1ce4db6be4 model abort last fetch 2018-04-27 15:47:21 +03:00
yuri
888291a99d fix 2018-04-27 14:07:10 +03:00
yuri
3f9773a4cf fix htmlizer 2018-04-27 11:59:26 +03:00
yuri
a223c721aa fix nav tab overflow 2018-04-27 11:54:05 +03:00
yuri
5bce57b1f8 fix theme 2018-04-27 11:43:03 +03:00
yuri
3666c34845 tab colors enabled 2018-04-27 11:12:42 +03:00
yuri
0dceccac46 attachment create file before create record 2018-04-27 11:11:23 +03:00
yuri
59a2644e0f email order replies 2018-04-27 10:52:49 +03:00
yuri
6c33a7304d email template skip empty subject 2018-04-27 10:47:31 +03:00
yuri
e89f01a525 person name autocomplete off 2018-04-27 10:42:32 +03:00
yuri
7181b45461 fix campaign stats panel 2018-04-27 10:41:00 +03:00
yuri
b7ce52f476 fix 2018-04-26 18:05:04 +03:00
yuri
d2a8cd961f theme fixes 2018-04-26 18:03:56 +03:00
yuri
c152dbf4bf fix row actions 2018-04-26 11:50:27 +03:00
yuri
594a111bc3 fix import panels 2018-04-26 11:46:09 +03:00
yuri
005be2fe5a impoty fix attribute translation 2018-04-26 11:26:51 +03:00
yuri
8f194e6d9e import currency fix 2018-04-26 10:53:10 +03:00
yuri
e3a5cb464c fix datetime optional 2018-04-25 16:52:12 +03:00
yuri
779f0df83e link parent fix 2018-04-25 16:46:23 +03:00
yuri
086d9bdbb6 kanban fix 2018-04-25 15:52:28 +03:00
yuri
9dcaa46bc7 css fix 2018-04-25 15:00:34 +03:00
yuri
3bca95a4da entity manager color fix 2018-04-25 14:24:26 +03:00
yuri
be09935287 icon fix 2018-04-25 14:10:08 +03:00
yuri
410c338da8 css fix 2018-04-25 13:55:55 +03:00
yuri
be0606ede6 fix css 2018-04-25 13:47:27 +03:00
yuri
f54a84420a color icon change 2018-04-25 13:46:59 +03:00
yuri
6a0d1e3b8b kanban no data 2018-04-25 11:57:39 +03:00
yuri
33127cd1bb version 2018-04-25 11:09:33 +03:00
yuri
5cd03312e1 assigned users notifications 2018-04-24 17:02:14 +03:00
yuri
391c0dcaf8 fix list expanded layout 2018-04-24 16:26:53 +03:00
yuri
0b7b9599d3 multiple assigned users support 2018-04-24 16:18:50 +03:00
yuri
b45ff69376 email account assigned user view 2018-04-24 14:00:17 +03:00
yuri
1836d0a127 css change 2018-04-24 12:13:07 +03:00
yuri
048e156e59 fix kanban 2018-04-23 14:38:18 +03:00
yuri
a85be60e30 fix kanban 2018-04-23 14:29:32 +03:00
yuri
90d5c9eca6 fix kanban 2018-04-23 14:01:17 +03:00
yuri
1c8f0c7d9c css fix 2018-04-23 13:40:29 +03:00
yuri
f8d1c9ce05 opp kanban fix 2018-04-23 13:32:12 +03:00
yuri
28052bac23 layout manager kanban view 2018-04-23 12:14:16 +03:00
yuri
c361a940eb kanban view in entity manager 2018-04-23 11:56:46 +03:00
yuri
fbc1e936db Merge branch 'master' of github.com:espocrm/espocrm 2018-04-23 10:46:20 +03:00
yuri
84661f88fd Merge branch 'hotfix/5.1.3' 2018-04-23 10:45:49 +03:00
yuri
10b4c88872 template variable triple braces 2018-04-23 10:37:04 +03:00
yuri
10ddc7d941 fix send email attachment filename 2018-04-23 10:23:40 +03:00
Yuri Kuznetsov
b1c63e2cb9 Update CONTRIBUTING.md 2018-04-22 20:36:54 +03:00
yuri
3f6544d03b kanban fix 2018-04-20 16:05:40 +03:00
yuri
a9f211dfd5 notify loading 2018-04-20 16:02:25 +03:00
yuri
f2427abbf4 kanban 2018-04-20 15:27:58 +03:00
yuri
a6187f9838 empty date on list view 2018-04-20 15:25:33 +03:00
yuri
384600ed95 Merge branch 'hotfix/5.1.3' 2018-04-20 15:23:02 +03:00
yuri
6d06f03ef9 fix frontend acl 2018-04-20 13:56:09 +03:00
yuri
0829c714fd Merge branch 'hotfix/5.1.3' 2018-04-20 10:57:07 +03:00
yuri
9e2251755f quick view edit icons 2018-04-20 10:55:03 +03:00
yuri
436f871be2 update marked js 2018-04-20 10:45:14 +03:00
yuri
8d09f8e9b2 Merge branch 'hotfix/5.1.3' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.1.3 2018-04-19 13:46:27 +03:00
yuri
e4d43a6790 fix field names conflict with template variables 2018-04-19 13:11:20 +03:00
Taras Machyshyn
bb3d9d3466 ExternalAccount bug fixes 2018-04-19 11:16:08 +03:00
yuri
bd208e259c reset sorting in select modal 2018-04-18 14:42:39 +03:00
yuri
1a1cfec3e5 refactoring 2018-04-16 12:11:13 +03:00
yuri
1e95e98549 calendar dashlet fix 2018-04-16 11:36:00 +03:00
yuri
82056b5650 version 2018-04-16 10:35:44 +03:00
yuri
c0d118ee98 email plain fix 2018-04-16 10:31:31 +03:00
yuri
da13177292 shared calendar dashlet 2018-04-13 16:01:54 +03:00
yuri
4cc38ca564 meeting avatar fix 2018-04-13 15:17:00 +03:00
yuri
fa945c981e nav menu changes 2018-04-13 15:15:41 +03:00
yuri
63d76c6b71 Merge branch 'hotfix/5.1.3' 2018-04-13 14:42:22 +03:00
yuri
9b749a8f67 fix read only 2018-04-13 13:32:12 +03:00
yuri
1ce1d5c79a scope colors changes 2018-04-13 12:14:11 +03:00
yuri
0c2dd73334 password disable autocomplete 2018-04-12 16:15:02 +03:00
yuri
7331f14e0a quick view remove color 2018-04-12 15:38:58 +03:00
yuri
d44f2fd7cd calendar avatars change 2018-04-12 15:20:55 +03:00
yuri
4da7eddc69 event users with avatars 2018-04-12 15:12:16 +03:00
yuri
3ebe30a9c0 entity colors and icons 2018-04-12 14:48:45 +03:00
yuri
e959361df9 createField changes 2018-04-12 14:34:11 +03:00
yuri
7773506361 shared calendar 2018-04-12 13:43:27 +03:00
yuri
9db652a501 fix repository merge select params 2018-04-11 16:03:53 +03:00
yuri
27ebfd7f23 fix link multiple required 2018-04-11 12:09:14 +03:00
yuri
96f80e0008 create field options 2018-04-11 12:03:46 +03:00
yuri
5f3c208161 Merge branch 'hotfix/5.1.3' 2018-04-11 10:56:35 +03:00
yuri
d402f33c74 fix field level acl for json fields 2018-04-10 15:29:46 +03:00
yuri
879da4dca2 fix calls row actions 2018-04-10 14:02:36 +03:00
yuri
3e862790e6 Merge branch 'hotfix/5.1.3' 2018-04-10 12:08:29 +03:00
yuri
425e36bff6 view helper getAvatarHtml 2018-04-10 12:07:58 +03:00
yuri
705ecbdf72 es_MX lang fix 2018-04-10 11:49:28 +03:00
yuri
c658d67ac8 lt_LT lang fix 2018-04-10 11:48:27 +03:00
yuri
c46055b469 hr_HR language 2018-04-10 11:46:03 +03:00
yuri
66e4b89d1a email body plain fix 2018-04-10 11:35:45 +03:00
yuri
38b9f1d68c fix email body plain not filled 2018-04-10 11:17:27 +03:00
yuri
19b8a4e771 fix upload timeout 2018-04-10 10:42:07 +03:00
yuri
937ffea4ab fix upload timeout 2018-04-10 10:41:44 +03:00
yuri
1ae49a3d47 timeline users avatars 2018-04-06 16:48:02 +03:00
yuri
c76daf50db currency rate ui improvement 2018-04-06 14:54:38 +03:00
yuri
9e5c797243 opp currency convert 2018-04-06 14:09:15 +03:00
yuri
662c4afcdf fix mass update 2018-04-06 13:00:08 +03:00
yuri
9b50b97e79 field labelText 2018-04-06 12:09:06 +03:00
yuri
d00cefc37f list mass action all 2018-04-06 11:17:32 +03:00
yuri
1f94c13e25 fix confirm leavout 2018-04-05 17:12:04 +03:00
yuri
75801ea717 calendar fixes 2018-04-05 15:04:48 +03:00
yuri
b845f5086e remove ics tests 2018-04-05 11:57:34 +03:00
yuri
8c8e6ec551 fix ics 2018-04-05 11:50:14 +03:00
yuri
a4aecee18d fix stream parent fields load 2018-04-05 11:49:14 +03:00
Sebastian
3c0d445824 Fix Multiline descriptions for Outlook. (#862)
See https://social.technet.microsoft.com/Forums/lync/en-US/c16cc4aa-0a07-4742-929d-1b01d698066e/ics-file-description-with-colon-and-newline-is-displayed-without-newlines?forum=outlook
2018-04-05 11:48:31 +03:00
yuri
c36c6dc42d wysywyg remove max length 2018-04-04 13:36:40 +03:00
yuri
f7f8f14725 case new note color 2018-04-03 17:44:06 +03:00
yuri
9402bf4baf chart colors fix 2018-04-03 14:33:03 +03:00
yuri
12fcdcdb2d call icon change 2018-04-03 14:24:38 +03:00
yuri
61735ed4aa cleanup 2018-04-03 14:11:49 +03:00
yuri
3c65d252b6 fix image orientation 2018-04-02 15:57:14 +03:00
yuri
6423859195 email move to trash fix 2018-04-02 13:56:31 +03:00
yuri
53df34d6f2 acl read only comment 2018-04-02 13:21:51 +03:00
yuri
ed762c9be3 stream notifications types 2018-04-02 12:44:55 +03:00
yuri
f05f14b12a email fixes 2018-04-02 12:44:44 +03:00
yuri
183b5cb29b clientReadOnly 2018-04-02 12:44:07 +03:00
yuri
07193b1fb2 email send shared name 2018-04-02 12:29:05 +03:00
yuri
b24f8f538b fix auth 2018-03-30 16:21:45 +03:00
yuri
a259174415 outboundEmailBccAddress 2018-03-30 14:43:12 +03:00
yuri
3d93c2a4b1 Merge branch 'hotfix/5.1.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.1.2 2018-03-30 14:18:44 +03:00
yuri
8c112791ef external email client support 2018-03-30 14:16:28 +03:00
Taras Machyshyn
0ff4553c94 LDAP fixes 2018-03-30 13:52:22 +03:00
yuri
1e6094b5ee fix wysiwyg 2018-03-29 17:28:14 +03:00
yuri
a646d97aec opp list layout changes 2018-03-29 16:03:18 +03:00
yuri
57f4980802 fix bc 2018-03-29 13:39:12 +03:00
yuri
2477f5b696 fix import float values 2018-03-29 12:33:36 +03:00
yuri
6463422e81 version 2018-03-29 11:48:49 +03:00
yuri
3daf041698 auth improvements 2018-03-29 11:45:57 +03:00
yuri
933456ecdf repository check 2018-03-28 15:55:12 +03:00
yuri
ab18f72f69 schedule meeting for portal user fix 2018-03-28 15:22:55 +03:00
yuri
28465cf2bf acl read only 2018-03-27 17:22:28 +03:00
yuri
4cef5c547e string length and contains functions 2018-03-27 16:16:07 +03:00
yuri
057abf8024 fix email getBodyPlain 2018-03-27 15:00:36 +03:00
yuri
20de5658e9 role fields fixes 2018-03-27 14:43:29 +03:00
yuri
4a2ed2e0f7 kb language options disabled 2018-03-27 14:25:44 +03:00
yuri
3dc574bc48 fix field manager options 2018-03-27 14:23:52 +03:00
yuri
d43a42b646 fix export 2018-03-27 13:18:04 +03:00
yuri
823c46a6df fix email body plain 2018-03-27 12:00:58 +03:00
yuri
919c0bc8ae fix field manager enum 2018-03-27 11:51:22 +03:00
yuri
54d62a19cd tooltip added 2018-03-22 15:28:09 +02:00
yuri
18304fb710 attachment throw error if fie not stored 2018-03-22 13:21:57 +02:00
yuri
cc1afbed5d file field tpl fix 2018-03-22 12:52:51 +02:00
yuri
a195acfee9 fix field name conflict with view helpers 2018-03-22 12:47:24 +02:00
yuri
e22ec4c20b cleanup 2018-03-21 16:00:00 +02:00
yuri
7c8f4f9db8 display ... for not set values in detail views 2018-03-21 12:29:37 +02:00
yuri
d28ff1e438 Merge branch 'hotfix/5.1.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.1.2 2018-03-20 16:38:11 +02:00
Taras Machyshyn
5af7499fdb Use utf8mb4 for fresh instances with MySQL 5.7+ 2018-03-20 16:02:40 +02:00
yuri
6588d783cc activities dashlet: next x days 2018-03-20 15:52:09 +02:00
yuri
f1b8279d50 insert template fix 2018-03-20 14:51:31 +02:00
yuri
252d31ffac email template for reply 2018-03-20 14:00:05 +02:00
yuri
8a98cca4fa email insert email confirm 2018-03-20 13:12:30 +02:00
Taras Machyshyn
0b8486c1a7 Merge branch 'hotfix/5.1.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.1.2 2018-03-20 12:29:54 +02:00
Taras Machyshyn
b0bd0664f9 Extension installation improvements 2018-03-20 12:29:36 +02:00
yuri
286fd7e0ce template placeholders translation improvement 2018-03-20 12:22:47 +02:00
yuri
42f5d28369 template today now 2018-03-20 12:00:46 +02:00
yuri
ea5d873cc3 fix field manager buttons 2018-03-20 11:09:25 +02:00
yuri
ee8608469e fix css 2018-03-19 14:08:42 +02:00
yuri
f541625318 cache timestamp in dev html 2018-03-19 13:52:58 +02:00
yuri
ee70fb8483 new version notification skip for dev 2018-03-19 13:10:38 +02:00
yuri
f79e093f52 fix base auth split 2018-03-19 12:11:01 +02:00
yuri
254d9280b9 fix login 2018-03-16 15:47:03 +02:00
yuri
ddd9c765b8 Merge branch 'master' of github.com:espocrm/espocrm into hotfix/5.1.2 2018-03-16 15:43:52 +02:00
Ettienne Pitts
080f204eed uninstallConfirmation added to en_US (#834) 2018-03-16 15:43:33 +02:00
tanyalei
f30325849a Activities Dashlet: fix Display Records option (#835) 2018-03-16 14:20:57 +02:00
yuri
8caa5b3e60 image preview original target blank 2018-03-15 16:26:25 +02:00
yuri
0daeed49c1 version 2018-03-15 15:00:27 +02:00
Taras Machyshyn
34540e12f3 getMaxIndexLength() changes 2018-03-15 14:55:27 +02:00
yuri
b954a81630 template: page orientation and format 2018-03-15 12:23:59 +02:00
yuri
56472d6746 textFilterContainsMinLength config param 2018-03-15 11:03:14 +02:00
yuri
2721649313 Merge branch 'hotfix/5.1.1' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.1.1 2018-03-14 17:17:40 +02:00
yuri
24d7de60ab inline edit skip exit 2018-03-14 17:15:44 +02:00
Taras Machyshyn
441f9296ad Fixed file permissions after upgrading 2018-03-14 15:44:24 +02:00
yuri
3116a152e7 fix currency converted 2018-03-14 14:39:54 +02:00
yuri
77784c4224 fix currency converted 2018-03-14 13:02:40 +02:00
yuri
bf13c7ca8c textFilterUseContainsForVarchar on admin ui 2018-03-14 11:19:14 +02:00
yuri
26c779a2c5 fix store sent email 2018-03-14 11:03:03 +02:00
yuri
1bfaf6c3ad model get entity type 2018-03-13 15:11:54 +02:00
yuri
69229ff6af Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-03-13 14:54:12 +02:00
yuri
719164524b naming fix 2018-03-13 13:45:25 +02:00
yuri
5a67b17916 email fix 2018-03-13 13:37:37 +02:00
Taras Machyshyn
db4968b1ca Upgrade: Renamed vendorFiles 2018-03-13 13:11:58 +02:00
Taras Machyshyn
e50f46e38a Installer: fix installation warning 2018-03-13 13:02:30 +02:00
Taras Machyshyn
adc8988f6c Upgrade: copy vendor directory 2018-03-13 12:33:13 +02:00
yuri
a480ad9c11 optimization 2018-03-13 11:35:20 +02:00
Taras Machyshyn
d9be685f89 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-03-13 11:07:45 +02:00
Taras Machyshyn
bd9db140de Added 'deleteAndCopy' directory for upgrade 2018-03-13 10:56:14 +02:00
yuri
74c0204590 keep rootUrl for edit view 2018-03-12 14:59:37 +02:00
yuri
ce9d3299b1 skipTextColumns for email 2018-03-12 12:27:06 +02:00
yuri
8b27bc194d proper naming 2018-03-12 11:19:21 +02:00
yuri
1a6b4a6683 set fetched email address data 2018-03-12 11:11:28 +02:00
yuri
2ae4d6e090 orm converter skip fields w/o type 2018-03-12 10:57:41 +02:00
yuri
9467171c84 fix entity manager labels 2018-03-09 16:37:40 +02:00
yuri
402db729b7 field manager dont resave labels if not changed 2018-03-09 16:05:41 +02:00
yuri
e16be12438 fix field manager 2018-03-09 14:58:24 +02:00
yuri
605912443d fix tests 2018-03-09 14:50:50 +02:00
yuri
62acc14f4a drop php mime mail parser by default 2018-03-09 14:25:28 +02:00
yuri
017066a311 currency part label 2018-03-09 14:21:35 +02:00
yuri
273b122ca8 fix labels in entity manager saving 2018-03-09 13:58:26 +02:00
yuri
ce2ec3dd6c field manager utils get fields by type 2018-03-09 12:28:20 +02:00
yuri
fda22605cc fix repository 2018-03-09 12:16:12 +02:00
yuri
1076fa6230 repositories bypass 2018-03-09 12:01:39 +02:00
yuri
019af59c8a default currency if empty 2018-03-09 12:01:27 +02:00
yuri
08bb644b58 fix notice 2018-03-08 16:36:52 +02:00
yuri
6ec1273e61 update mail parser libs 2018-03-08 16:30:25 +02:00
yuri
ba5df9a4ae fix export time 2018-03-08 15:53:42 +02:00
yuri
050d77ef12 fix activities dashlet 2018-03-08 15:25:31 +02:00
yuri
f8ccaeab08 select manager user 2018-03-08 14:46:42 +02:00
yuri
3c4c464e4a fix email flicker 2018-03-08 12:37:06 +02:00
yuri
2a5730def9 iframe css fix 2018-03-08 11:36:35 +02:00
yuri
48fe3e6b86 fix email size 2018-03-07 16:15:26 +02:00
yuri
eecbc3aa2c lang 2018-03-07 13:52:26 +02:00
yuri
e177f14446 having count 2018-03-07 12:45:29 +02:00
yuri
493ab0396a fix currency 2018-03-07 11:52:31 +02:00
yuri
c776150ce0 rebuild after upgrade 2018-03-06 16:01:50 +02:00
yuri
b6bca982bb default side panel client defs params 2018-03-06 15:25:45 +02:00
yuri
aa8a243bf1 order fixes 2018-03-06 12:36:02 +02:00
yuri
75da037656 fix stream note 2018-03-06 11:25:39 +02:00
yuri
56a06a5581 remove dynamic logic from bottom and side 2018-03-06 11:03:23 +02:00
yuri
0af67bea3a fix dynamic logic 2018-03-06 11:01:38 +02:00
yuri
08b8d899b7 fix typo 2018-03-05 17:03:33 +02:00
yuri
cf07cb39c4 wysiwyg height fix 2018-03-05 17:03:24 +02:00
yuri
810d10c1c2 bottom panels order 2018-03-05 15:24:24 +02:00
yuri
342bdcfaac fix typo 2018-03-05 13:15:28 +02:00
yuri
d933dbb31a fix dynamic logic 2018-03-05 12:41:54 +02:00
yuri
fe61364178 fix panel dynamic logic 2018-03-05 12:32:09 +02:00
yuri
88c3c03f99 dynamic logic detail view 2018-03-05 12:12:41 +02:00
yuri
c21b16f5c7 panel defs dynamic logic 2018-03-05 11:23:11 +02:00
yuri
2481a2504f fix auth token ip length 2018-03-02 16:57:25 +02:00
Taras Machyshyn
dcb1e8040a MySQL charset change improvements 2018-03-02 15:42:26 +02:00
yuri
0e1c611034 update composer 2018-03-02 14:11:33 +02:00
yuri
fccd9d642c ditch php imap dependency 2018-03-02 14:10:48 +02:00
yuri
849f1becc7 version 2018-03-02 13:44:14 +02:00
yuri
be6c4a63ed do not remove mysql character service 2018-03-02 13:02:41 +02:00
yuri
4e48483276 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-03-02 13:01:32 +02:00
Taras Machyshyn
6817a54aa0 Job for changing mysql column characters 2018-03-02 13:00:25 +02:00
yuri
482f235dcc Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-03-02 11:54:04 +02:00
yuri
90b863c4ae update composer 2018-03-02 11:53:57 +02:00
Taras Machyshyn
8541a87d1f Integration tests fixes 2018-03-02 11:35:52 +02:00
Taras Machyshyn
002adeb00e Integration test fixes 2018-03-02 11:15:01 +02:00
Taras Machyshyn
30e7d1ba7c Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-03-02 10:49:35 +02:00
yuri
0923f2e120 Merge branch 'master' of github.com:espocrm/espocrm 2018-03-02 10:37:50 +02:00
Andra Fetele
38a0c8e19f Romanian translation (#823) 2018-03-02 09:31:01 +02:00
yuri
facf90d964 fix event Set Held label 2018-03-01 18:04:00 +02:00
yuri
cca3482bc0 fix query stringifyValue 2018-03-01 17:41:39 +02:00
yuri
6178ca550b import fix 2018-03-01 16:37:22 +02:00
yuri
dc51e467d4 excel export: migrate to phpspreadsheet 2018-03-01 16:01:37 +02:00
yuri
300827c1f0 vendor updates 2018-03-01 15:47:26 +02:00
yuri
aacf09a444 email move to trash from detail view updates list 2018-03-01 15:14:24 +02:00
yuri
0123488828 import revert remove change 2018-03-01 14:50:45 +02:00
yuri
a43b188f36 import action history 2018-02-28 17:06:50 +02:00
Taras Machyshyn
f0285ef8f2 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-02-28 16:19:05 +02:00
yuri
70a0ffbf3d fix list tpl 2018-02-28 11:48:29 +02:00
yuri
f2e6a4fc55 import improvement 2018-02-28 11:43:11 +02:00
yuri
df5fd76ae2 update-all event for model 2018-02-28 11:42:58 +02:00
yuri
f34d258b45 header button title 2018-02-28 11:09:34 +02:00
yuri
28c52763c8 Merge branch 'hotfix/5.0.6' 2018-02-27 17:46:45 +02:00
yuri
ebe22fa7f0 fix htmlizer 2018-02-27 17:44:56 +02:00
yuri
160327e471 Merge branch 'hotfix/5.0.6' 2018-02-27 17:32:51 +02:00
yuri
dd080dbff2 Merge branch 'hotfix/5.0.6' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.0.6 2018-02-27 17:32:33 +02:00
yuri
d509886cd1 sql fixes 2018-02-27 17:31:50 +02:00
Taras Machyshyn
239a8f0af8 Code improvements 2018-02-27 17:14:19 +02:00
Taras Machyshyn
c0565306c3 Code improvements 2018-02-27 17:13:15 +02:00
yuri
79d159511d fix category tree repository 2018-02-27 17:06:53 +02:00
yuri
e123fc7e6f target list layout change 2018-02-27 16:26:33 +02:00
yuri
52fa30f389 event confirmation change 2018-02-27 16:19:23 +02:00
yuri
1d744d5abc cleanup fixes 2018-02-27 16:16:30 +02:00
yuri
2629c12ade fix link and link multiple empty name 2018-02-27 14:27:15 +02:00
yuri
8fb6b1a5a9 fix parent name load 2018-02-27 14:12:48 +02:00
yuri
d4a23c9a4f fix parent 2018-02-27 14:07:58 +02:00
yuri
05d0f982a7 fix select manager 2018-02-26 15:30:42 +02:00
yuri
e3c8a3fcda fix applyFilter 2018-02-26 15:07:41 +02:00
yuri
8cd56d2705 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-02-26 14:23:21 +02:00
Taras Machyshyn
f94d1f3cd8 Metadata: get metadata in object format 2018-02-26 14:22:14 +02:00
yuri
5f64b74fad fix ro_RO 2018-02-26 13:35:54 +02:00
Taras Machyshyn
b422cd6f52 Metadata: getCustom() changes 2018-02-26 13:03:25 +02:00
Andra Fetele
17698409b9 Approx 700 lines, translated into Romanian (#813)
* Romanian translation

* Approx 700 lines, translated into Romanian
2018-02-24 20:07:34 +02:00
Andra Fetele
fb0dabebe1 Romanian translation (#812) 2018-02-23 20:59:55 +02:00
yuri
f81805fbf4 fix dynamic handler 2018-02-23 17:00:48 +02:00
Taras Machyshyn
596c9d4996 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-02-23 15:50:59 +02:00
Taras Machyshyn
a7530dcce9 Bug fixes in File Manager 2018-02-23 15:50:49 +02:00
yuri
55d59eea80 checkAccessDataList allowAllForAdmin 2018-02-23 15:14:22 +02:00
yuri
0c66a1fb7b dynamic handler extend 2018-02-23 13:55:00 +02:00
yuri
ad7ca5d287 dynamic handler 2018-02-23 13:44:24 +02:00
yuri
b34be4730d Merge branch 'master' of github.com:espocrm/espocrm 2018-02-23 11:10:16 +02:00
yuri
1c264055eb Merge branch 'hotfix/5.0.6' 2018-02-23 11:09:59 +02:00
yuri
12f41baff5 file filters 2018-02-23 11:09:42 +02:00
yuri
9a9ad1baa7 lang 2018-02-23 11:03:28 +02:00
Yuri Kuznetsov
46c31278e7 Update README.md 2018-02-22 18:34:37 +02:00
yuri
a08dc3d422 bottom panels isBottom 2018-02-22 15:51:07 +02:00
yuri
158a74f79b fix tests 2018-02-22 15:37:19 +02:00
Taras Machyshyn
bacf85ccf8 Metadata: saveCustom() fixes 2018-02-22 15:33:56 +02:00
Taras Machyshyn
ef683bd7fa Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-02-22 15:02:37 +02:00
yuri
20c233fb8c more user acl tests 2018-02-22 15:01:37 +02:00
Taras Machyshyn
ac21313190 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-02-22 14:56:29 +02:00
Taras Machyshyn
8ba6918139 Metadata: added possibility to work with metadata defined in custom directory 2018-02-22 14:56:20 +02:00
yuri
5e357b460d cleanup 2018-02-22 14:51:04 +02:00
yuri
d660abe1f6 acl tests 2018-02-22 14:48:56 +02:00
yuri
fd9617ec8f Merge branch 'hotfix/5.0.6' 2018-02-22 12:38:41 +02:00
yuri
48ccdaab5e calendar responcive fixes 2018-02-22 12:38:27 +02:00
yuri
52d9548333 select manager: external primary filters 2018-02-22 12:16:25 +02:00
yuri
4706d28560 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-02-21 16:34:58 +02:00
yuri
033f5de85d Merge branch 'hotfix/5.0.6' 2018-02-21 16:34:48 +02:00
yuri
6760f6f03d note type enum 2018-02-21 15:39:29 +02:00
yuri
e1a7862194 xlsx fix 2018-02-21 14:00:46 +02:00
Taras Machyshyn
8ef53d229d Required MySQL version is 5.5.3 2018-02-21 13:01:57 +02:00
yuri
c6d215f87c Merge branch 'hotfix/5.0.6' 2018-02-21 12:10:12 +02:00
yuri
dccaed124c fix duplicate one-to-many issue 2018-02-21 12:10:04 +02:00
yuri
ccfca4a61a activity account contact fiexes 2018-02-21 12:00:10 +02:00
Taras Machyshyn
417a05f24f Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-02-20 17:54:14 +02:00
Taras Machyshyn
7a85f7576d Unit test for copy() of FileManager 2018-02-20 17:54:04 +02:00
yuri
8407ab3a74 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2018-02-20 16:58:13 +02:00
yuri
c120ebd3ca header fixes 2018-02-20 16:50:24 +02:00
Taras Machyshyn
d0635484a2 Database: default column charset is utf8mb4 2018-02-20 15:56:34 +02:00
yuri
d3c487a28a modal overlaid shadow none 2018-02-20 15:49:22 +02:00
yuri
14f46a5d5d Merge branch 'hotfix/5.0.6' 2018-02-20 15:00:28 +02:00
yuri
00a8ca8273 fix select manager 2018-02-20 14:58:51 +02:00
yuri
deec457728 header fix 2018-02-20 14:34:27 +02:00
yuri
5a5508a973 accessDataList for dashlets 2018-02-20 12:42:38 +02:00
yuri
357b285346 accessDataList for list filters and panels 2018-02-20 12:40:38 +02:00
yuri
f8444b9e67 Merge branch 'hotfix/5.0.6' 2018-02-20 12:18:46 +02:00
yuri
e0a224e414 calendar fixes 2018-02-20 12:18:39 +02:00
yuri
9dfb128e1d calender decrease longPressDelay 2018-02-20 11:58:11 +02:00
yuri
462d1f0274 utils checkAccessDataList 2018-02-20 11:44:10 +02:00
yuri
2e3803eef1 cleanup 2018-02-19 15:32:08 +02:00
yuri
42b186eb94 Merge branch 'hotfix/5.0.6' 2018-02-19 15:31:20 +02:00
yuri
ccdee9ec09 import email unlock tables 2018-02-19 15:00:49 +02:00
yuri
05eeb82efd attendees panel not refreshable 2018-02-19 12:39:13 +02:00
yuri
6eefe64f4c fix frontend tests 2018-02-19 12:26:00 +02:00
yuri
5b96b19735 jasmine test fixes 2018-02-16 16:49:33 +02:00
yuri
3764d877ce Merge branch 'hotfix/5.0.6' 2018-02-16 12:33:46 +02:00
yuri
30e713c161 reminders in detailSmall 2018-02-16 11:49:01 +02:00
yuri
da3a76e441 hack for upgrade 2018-02-16 11:23:19 +02:00
yuri
adff467b50 event confirmation and unsubscribe: use frontend 2018-02-15 14:56:36 +02:00
yuri
d59f05ad8b event confirmation hook 2018-02-15 13:26:19 +02:00
yuri
9c3d124f48 Merge branch 'hotfix/5.0.6' 2018-02-14 15:16:59 +02:00
yuri
4404b0f02e select manager: convertWhere 2018-02-14 11:33:22 +02:00
Andra Fetele
77533fba72 translated ~700 lines into Romanian (#806)
* Partial Romanian translation

* translated ~700 lines into Romanian
2018-02-14 08:49:10 +02:00
yuri
62d36ed0c2 lang 2018-02-13 12:46:40 +02:00
yuri
94ad0123c7 css fix 2018-02-13 11:21:05 +02:00
yuri
109842f0fe contact: hide title if no account 2018-02-13 11:19:38 +02:00
yuri
d931d65cd8 formatting 2018-02-13 11:18:19 +02:00
yuri
b7861a7cb1 htmlizer enum translation 2018-02-13 11:07:19 +02:00
yuri
a49ad3bb48 fix lang 2018-02-13 11:04:05 +02:00
yuri
d94acf5b78 fix activities dashlet tasks 2018-02-12 16:34:45 +02:00
yuri
fd0e1d1460 css fix 2018-02-12 16:21:43 +02:00
yuri
2ed9d5487e chart css fix 2018-02-12 16:12:22 +02:00
yuri
5dc44cb701 fix assignment permission 2018-02-12 14:41:42 +02:00
yuri
9e07c383fe collection abortLastFetch 2018-02-12 14:33:09 +02:00
yuri
9e1ec2768b fix email switch folders 2018-02-12 14:06:55 +02:00
yuri
39674e8c7f htmlspecialchars for unsubscribe page 2018-02-12 12:52:47 +02:00
yuri
5dca4b7061 template aclPortal 2018-02-12 12:44:45 +02:00
yuri
5d3cb25d14 css fix 2018-02-12 12:43:16 +02:00
yuri
6e337affbb fix chart 2018-02-12 11:26:49 +02:00
yuri
87ab8cc15f chart css fix 2018-02-12 10:23:55 +02:00
yuri
b654e5cebd icon class 2018-02-10 15:37:48 +02:00
yuri
11958f2abf icon changes 2018-02-10 15:34:45 +02:00
yuri
2a329ba92d fix next/prev through collection 2018-02-10 14:38:03 +02:00
yuri
b22487ef70 lang fixes 2018-02-10 14:25:21 +02:00
Andra Fetele
bf03a2f540 Partial Romanian translation (#804) 2018-02-09 20:08:08 +02:00
yuri
ece51a6f9f task and activities dashlet fixes 2018-02-09 17:41:34 +02:00
yuri
915dbffe72 activities dashlet: support tasks 2018-02-09 17:22:00 +02:00
yuri
fda0d6df1f fix login appParams 2018-02-09 15:51:05 +02:00
yuri
25891f9dc0 print pdf change 2018-02-09 15:45:24 +02:00
yuri
35902adbdc orm having clause 2018-02-09 14:47:18 +02:00
yuri
981d15ee55 Merge branch 'hotfix/5.0.5' 2018-02-09 13:04:04 +02:00
yuri
adfec3441b template tab 2018-02-09 12:05:01 +02:00
yuri
a208aa051f Merge branch 'hotfix/5.0.5' 2018-02-08 17:44:06 +02:00
yuri
9068302357 version 2018-02-08 16:52:23 +02:00
yuri
1bb0439f19 fix model reset 2018-02-08 16:02:12 +02:00
yuri
f28585e245 mass update ui improvement 2018-02-08 15:37:41 +02:00
yuri
99cfeb25ee fix print to pdf button 2018-02-08 14:18:58 +02:00
yuri
6b7da9a39e fix entity manger and field manager 2018-02-08 13:22:00 +02:00
yuri
18bba7baec entity manager fix 2018-02-08 13:15:49 +02:00
yuri
ec8ffbc090 chart dashlets acl 2018-02-08 12:52:18 +02:00
yuri
60eb1ca236 fix sales by month chart 2018-02-08 12:40:49 +02:00
yuri
5e3756313c fix sales pipeline chart 2018-02-08 12:20:13 +02:00
yuri
d303d5a423 Merge branch 'hotfix/5.0.5' 2018-02-08 11:56:30 +02:00
yuri
938415aa79 cleanup 2018-02-08 11:54:15 +02:00
yuri
9033710e56 Merge branch 'hotfix/5.0.5' 2018-02-07 15:25:24 +02:00
yuri
2fd77e4034 excel export duration 2018-02-07 15:23:06 +02:00
yuri
b733d8205e relationship panel setup list layout method 2018-02-07 14:59:58 +02:00
yuri
f725ad09d7 user: hide mass update and export for non admin users 2018-02-07 13:41:29 +02:00
yuri
e9a53c5b25 list view acl delete check 2018-02-07 12:54:58 +02:00
yuri
43e94cfe68 user acl check 2018-02-07 12:13:23 +02:00
yuri
07d713734f Merge branch 'hotfix/5.0.5' 2018-02-07 11:29:18 +02:00
yuri
4f004b8402 note status styles change 2018-02-07 11:07:24 +02:00
yuri
b1f4131af9 user acl check 2018-02-06 17:36:10 +02:00
yuri
1adb19f427 fix field manager 2018-02-06 17:28:37 +02:00
yuri
fce4a4b1d9 skip additional select params 2018-02-06 17:13:48 +02:00
yuri
61f35bcb5e user editable 2018-02-06 17:04:42 +02:00
yuri
0db68917a1 Merge branch 'hotfix/5.0.5' 2018-02-06 15:13:51 +02:00
yuri
9da8ab9bdb chart fix 2018-02-06 13:46:59 +02:00
yuri
8d1724df84 less opp stages 2018-02-06 13:01:09 +02:00
yuri
cd88d59937 po ability to build po for all languages 2018-02-06 12:28:20 +02:00
yuri
cab4f5ce64 opp stages translation 2018-02-06 12:22:20 +02:00
yuri
62ab1f8d00 fix export 2018-02-06 11:29:17 +02:00
yuri
f0e1439c79 fix chart legend 2018-02-06 11:03:10 +02:00
yuri
5060918087 print pdf for all entity types 2018-02-05 16:42:33 +02:00
yuri
bf6b058152 reset page title on logout 2018-02-05 15:54:13 +02:00
yuri
40b607a73f template change 2018-02-05 15:48:35 +02:00
yuri
2bdbba0eff fix sales chart 2018-02-05 15:42:56 +02:00
yuri
058d821a7c fix chart 2018-02-05 15:32:22 +02:00
yuri
4575ff89ad chart fixes 2018-02-05 12:59:50 +02:00
yuri
608454fcf2 fix css 2018-02-05 12:54:26 +02:00
yuri
58c1bec2da css fix 2018-02-05 12:30:57 +02:00
yuri
e1ce16c399 chart legend title 2018-02-05 12:16:05 +02:00
yuri
2d3a748286 chart fixes 2018-02-05 11:58:21 +02:00
yuri
06834dd8bf fix calendar 2018-02-05 10:18:31 +02:00
yuri
e4c0f19b1c fix css 2018-02-02 16:03:29 +02:00
yuri
84faf7a782 entity manager: supporting templates in modules 2018-02-02 14:27:40 +02:00
yuri
61db675ab1 css fix 2018-02-01 16:48:59 +02:00
yuri
59e72796e3 css fix 2018-02-01 16:43:07 +02:00
yuri
76e61a6358 fix dropdown on small screens 2018-02-01 14:54:04 +02:00
yuri
455eceefa1 Merge branch 'hotfix/5.0.4' 2018-02-01 13:15:41 +02:00
yuri
834e979060 fix css 2018-02-01 12:23:17 +02:00
yuri
ece36c8711 fix test 2018-02-01 11:39:30 +02:00
yuri
9b999a1ec8 fix test email import 2018-02-01 11:22:16 +02:00
yuri
80c53e15e5 fix test 2018-02-01 11:12:15 +02:00
yuri
a37b6077c1 css fix 2018-02-01 11:02:45 +02:00
yuri
fabfa392b7 clear cache page style fixes 2018-02-01 10:55:57 +02:00
yuri
8ff717cfd5 css fixes 2018-02-01 10:53:28 +02:00
yuri
eae042d730 css chages 2018-01-31 15:07:57 +02:00
yuri
f6fda22160 css change 2018-01-31 14:55:43 +02:00
yuri
c120ecab1a css changes 2018-01-31 14:47:26 +02:00
yuri
6afcbe90a1 css change 2018-01-31 14:35:56 +02:00
yuri
130bde63cf Merge branch 'hotfix/5.0.4' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.0.4 2018-01-31 12:19:40 +02:00
Taras Machyshyn
c76e8f96d9 Code fixes 2018-01-31 11:56:47 +02:00
yuri
7b92014249 scheduled job update silent 2018-01-31 11:55:26 +02:00
yuri
33df80559d scheduled job hooks disabled 2018-01-31 11:53:12 +02:00
Taras Machyshyn
c0d9d1e514 Static methods for System utils 2018-01-31 11:51:11 +02:00
yuri
ed2567913b fix show more focus 2018-01-31 11:49:00 +02:00
yuri
9a7bd94ce1 fix collection lengthCorrection 2018-01-31 11:42:44 +02:00
yuri
036aea5c7f fix orm week_1 function 2018-01-31 11:33:09 +02:00
yuri
1bc1311113 fix job 2018-01-30 19:02:06 +02:00
yuri
135fe6f2e6 var name fixes 2018-01-30 18:56:08 +02:00
yuri
f366a1d0dd Merge branch 'hotfix/5.0.4' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.0.4 2018-01-30 18:42:08 +02:00
Taras Machyshyn
b4cda3b349 Code improvements 2018-01-30 18:41:53 +02:00
yuri
0e92ae792c Merge branch 'hotfix/5.0.4' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.0.4 2018-01-30 17:50:56 +02:00
Taras Machyshyn
cf4247321c Installer: changed loading icon 2018-01-30 17:26:03 +02:00
Taras Machyshyn
994be85579 Fixed after install duplicate records 2018-01-30 17:24:33 +02:00
yuri
8cdaf1a534 cleanup 2018-01-30 17:06:23 +02:00
yuri
f9996d3643 css fix 2018-01-30 14:25:36 +02:00
yuri
6b7bcca21b css fix 2018-01-30 14:24:26 +02:00
Taras Machyshyn
c7109906bc Merge branch 'pid' into hotfix/5.0.4 2018-01-30 12:52:15 +02:00
Taras Machyshyn
63583ad630 CronManager: added checking is process active 2018-01-30 12:49:29 +02:00
yuri
4d063194ed font size param in theme 2018-01-30 11:47:04 +02:00
yuri
c579e08614 save error handling supporting 500 error 2018-01-30 11:39:24 +02:00
yuri
40414a0f17 save error handling in frontend 2018-01-29 17:43:29 +02:00
yuri
5e1ee6f06f throw conflict if user name exists 2018-01-29 17:31:38 +02:00
yuri
f885333310 default jobs scheduling change 2018-01-29 17:14:12 +02:00
yuri
72149851cf job config params change 2018-01-29 16:02:10 +02:00
yuri
e2ce971b70 css fix 2018-01-29 14:30:43 +02:00
yuri
802bb9b1c2 fix css 2018-01-29 14:24:08 +02:00
yuri
30ce642d88 reneme check new version job 2018-01-29 13:35:33 +02:00
yuri
bc901fad0b installer style fixes 2018-01-29 13:26:04 +02:00
yuri
dae251fb43 fix show more 2018-01-29 13:13:18 +02:00
yuri
f98a916a55 update libs 2018-01-29 13:13:09 +02:00
yuri
a7fd14ef36 fix job 2018-01-27 13:55:34 +02:00
yuri
5ff2eb1945 number fields title in list view 2018-01-27 13:05:20 +02:00
yuri
a60e82591f default currency format 2 2018-01-27 12:59:47 +02:00
yuri
2ae59a5820 email portions limitation 2018-01-27 12:49:23 +02:00
yuri
1d46427d51 settings layout change 2018-01-27 12:47:08 +02:00
yuri
8bd7009c02 currency decimal places = 2 2018-01-27 12:41:06 +02:00
yuri
cc90d546a5 scheduled jobs fix 2018-01-27 12:36:42 +02:00
yuri
e916ff5a0b system scheduled job change 2018-01-27 12:34:42 +02:00
yuri
54fa8f4867 lang 2018-01-27 12:12:33 +02:00
yuri
7d92ee7d7a email import improvements 2018-01-26 16:23:29 +02:00
yuri
884388d0df email message id index 2018-01-26 15:55:39 +02:00
yuri
50b386388e App service rebuild and clear cache jobs 2018-01-26 15:55:20 +02:00
yuri
f03c0d7c57 entity manager: skipAll, keepNew save options 2018-01-26 15:08:19 +02:00
yuri
83a3552b21 charts date filter ranges 2018-01-26 13:33:17 +02:00
yuri
1462f54a65 sales pipeline fix 2018-01-26 12:55:12 +02:00
yuri
b7cd1657b0 css fix 2018-01-26 12:09:18 +02:00
yuri
9d1ae432d5 chart change 2018-01-26 11:40:08 +02:00
yuri
1e32df5a26 fix layout manager panel name loss 2018-01-25 17:56:04 +02:00
yuri
07128d04b0 dashboard side menu issue fix 2018-01-25 17:42:22 +02:00
yuri
8d0c1348b1 chart fixes 2018-01-25 17:31:22 +02:00
yuri
7bcacdbd27 css fix 2018-01-25 16:25:37 +02:00
yuri
65c3bb3291 chart fixes 2018-01-25 16:08:56 +02:00
yuri
a08fa65fae chart improvements 2018-01-25 15:47:47 +02:00
yuri
85d8c9795a fix calendar warning 2018-01-24 16:41:19 +02:00
yuri
9a17dbbd68 chart overflow fix 2018-01-24 16:26:33 +02:00
yuri
f83827886e chart sales by month fix 2018-01-24 16:07:46 +02:00
yuri
8964e98873 version 2018-01-24 15:10:51 +02:00
yuri
63e17e91bd email import concurrency issue fix 2018-01-24 15:05:52 +02:00
yuri
f95cbe4ed2 fix email replate to email account 2018-01-24 15:05:17 +02:00
yuri
9ddd1dac3a fix typo in email 2018-01-24 14:03:06 +02:00
yuri
5ff0e67392 skipHooks param 2018-01-24 13:16:33 +02:00
yuri
a60a2885e1 fix php mime mail parser 2018-01-24 13:12:34 +02:00
yuri
7e9ddf0c14 user access table: hide mandatory 2018-01-24 11:48:06 +02:00
yuri
5cb82cca42 email store sent fix 2018-01-24 11:40:52 +02:00
yuri
02edc35d3a user mass update fixes 2018-01-24 11:20:10 +02:00
yuri
a30c17ed91 chart fixes 2018-01-23 18:06:04 +02:00
yuri
d2dfd7ddb0 excel export: supporting address 2018-01-23 16:29:54 +02:00
yuri
2a35b9912c target lists exportable 2018-01-23 15:59:37 +02:00
yuri
bc097db09f record grid layout improvement 2018-01-23 15:55:40 +02:00
yuri
75eb49ced3 acl changes 2018-01-23 14:51:28 +02:00
yuri
cd2e3eec08 acl fix 2018-01-23 13:40:39 +02:00
yuri
d72884a0e4 lang 2018-01-23 13:30:23 +02:00
yuri
315e35965c acl gender default 2018-01-23 12:51:07 +02:00
yuri
f2fb3fc077 css fix 2018-01-23 11:30:28 +02:00
yuri
f4d9e3fbc6 fix navbar 2018-01-23 11:01:09 +02:00
yuri
d44f8e7ab4 fix export exception 2018-01-23 10:40:16 +02:00
yuri
b0438991bf entity manager refactoring 2018-01-22 15:52:13 +02:00
yuri
0a23a469e2 loadLinkMultipleField improvement 2018-01-22 15:28:15 +02:00
yuri
2900e8afb7 csv export link multiple 2018-01-22 15:12:40 +02:00
yuri
e3e25785c7 excel export link multiple fields 2018-01-22 14:43:57 +02:00
yuri
7c4e1393fe lang 2018-01-22 12:49:18 +02:00
yuri
b06736351b fix lang 2018-01-22 12:46:25 +02:00
yuri
9c5a8c63ce portal preferences layout fix 2018-01-19 14:44:32 +02:00
yuri
e8c171be92 Merge branch 'stable' 2018-01-19 14:14:25 +02:00
yuri
1b7aa9e48c css fixes 2018-01-19 12:39:59 +02:00
yuri
51fd3e681c css fix 2018-01-18 16:38:17 +02:00
yuri
484510f763 css fix 2018-01-18 15:50:26 +02:00
yuri
7fde7327fe css fixes 2018-01-18 15:14:28 +02:00
yuri
2c8094bf28 Merge branch 'hotfix/5.0.3' 2018-01-18 15:06:34 +02:00
tanyalei
256d30847e PDF: Images rendered not properly in footer FIX (#768) 2018-01-18 14:11:14 +02:00
yuri
0bbfee8716 timeline fixes 2018-01-18 11:53:23 +02:00
yuri
8d58e81d28 email account list fix 2018-01-18 11:41:22 +02:00
yuri
8fb80d12c9 portal hide custom tab list 2018-01-18 11:26:49 +02:00
yuri
2b5eed3a38 Merge branch 'hotfix/5.0.3' 2018-01-17 17:05:38 +02:00
yuri
dccd5305e7 css fix 2018-01-17 17:04:29 +02:00
yuri
bbb418d2af fix select record w/ categories 2018-01-17 15:27:45 +02:00
yuri
a5bae56f8d cleanup 2018-01-17 14:56:28 +02:00
yuri
aa3d2f8787 Merge branch 'hotfix/5.0.3' 2018-01-17 14:39:22 +02:00
yuri
e9750e145f kb: hide side for portal 2018-01-17 14:35:11 +02:00
yuri
d0cdefd972 Merge branch 'hotfix/5.0.3' 2018-01-17 13:34:38 +02:00
yuri
451aa7f5da relatonshipsPortal layout 2018-01-17 13:34:25 +02:00
yuri
43ee6ef8f6 css fix 2018-01-17 13:28:38 +02:00
yuri
c366e8decc search filters disabled for portal 2018-01-17 13:22:48 +02:00
yuri
8610c61c18 fix css 2018-01-17 13:12:07 +02:00
yuri
bee3a3b012 update vis 2018-01-17 12:57:54 +02:00
yuri
dc2d46ca21 noAppCache param for libs 2018-01-17 12:41:22 +02:00
yuri
1b5346e86d Merge branch 'hotfix/5.0.3' 2018-01-17 12:23:35 +02:00
yuri
8bc633aed9 fix preset filter for ie 2018-01-17 12:17:16 +02:00
yuri
ee3dee0570 fixc wysiwyg for ie 2018-01-17 12:11:05 +02:00
yuri
69048d8f89 fix css 2018-01-17 12:04:19 +02:00
yuri
427025c2ed storage fixes 2018-01-17 11:36:33 +02:00
yuri
6deb336115 Merge branch 'hotfix/5.0.3' 2018-01-16 17:15:24 +02:00
yuri
a8be115d4b fix service populateDefaults 2018-01-16 17:12:32 +02:00
yuri
115ae82b17 Merge branch 'hotfix/5.0.3' 2018-01-16 15:40:54 +02:00
yuri
e4b357e8d3 loading and caching impovements 2018-01-16 15:23:51 +02:00
yuri
560a7b2465 markdown disable tables 2018-01-16 12:56:59 +02:00
yuri
acfe05297b cache set try catch 2018-01-16 11:48:55 +02:00
yuri
16579ff1a8 Merge branch 'hotfix/5.0.3' 2018-01-16 11:12:48 +02:00
yuri
2dcf81a516 css fix 2018-01-16 11:12:39 +02:00
yuri
44f379e3d2 fix wysiwyg 2018-01-16 10:49:11 +02:00
yuri
9be406c0a2 fix categories 2018-01-15 16:31:37 +02:00
yuri
a030c50780 Merge branch 'hotfix/5.0.3' 2018-01-15 16:17:00 +02:00
yuri
c9ca3a497f wysywyg resize fix 2018-01-15 16:14:21 +02:00
yuri
71886cd91c role action title 2018-01-15 14:50:00 +02:00
yuri
e60d46b2ec Merge branch 'hotfix/5.0.3' 2018-01-15 14:44:30 +02:00
yuri
9829ca8d28 ff textarea fix 2018-01-15 14:44:22 +02:00
yuri
28c4651599 Merge branch 'hotfix/5.0.3' 2018-01-15 14:23:16 +02:00
yuri
14de81520b job: fix failed attempts 2018-01-15 14:23:05 +02:00
yuri
3a11d335a2 fix css 2018-01-15 12:51:03 +02:00
yuri
0d3554cc49 file upload ready validation 2018-01-15 12:50:48 +02:00
yuri
6b458f3b55 file upload ready validation 2018-01-15 12:46:49 +02:00
yuri
874885671b fix css 2018-01-15 12:38:52 +02:00
yuri
a75f4dacab Merge branch 'hotfix/5.0.3' 2018-01-15 11:56:26 +02:00
yuri
8c5a455f08 fix assigned permission issues 2018-01-15 11:55:21 +02:00
yuri
1b12cd46b2 Merge branch 'hotfix/5.0.3' 2018-01-12 16:46:15 +02:00
yuri
42581469da list in panel margin bottom fix 2 2018-01-12 16:45:06 +02:00
yuri
562fa03c6c list in panel margin bottom fix 2018-01-12 16:42:45 +02:00
yuri
7389acd87f Merge branch 'hotfix/5.0.3' 2018-01-12 16:09:45 +02:00
yuri
8feca2783f fix navbar 2018-01-12 15:45:05 +02:00
yuri
a290f7aba9 Merge branch 'hotfix/5.0.3' 2018-01-12 15:09:44 +02:00
yuri
eb11f9f757 label manager: filter options 2018-01-12 15:08:17 +02:00
yuri
2ace19face horizontal navbar fix 2 2018-01-12 13:43:15 +02:00
yuri
25b6a94fd6 horizontal navbar fix 2018-01-12 13:25:07 +02:00
yuri
d0768b3dce email plain fix 2018-01-11 17:18:09 +02:00
yuri
b4c27f50ea diff change 2018-01-11 17:01:45 +02:00
yuri
669cb10f10 fix email side panel 2018-01-11 16:52:24 +02:00
yuri
e9c0cd6d53 Merge branch 'hotfix/5.0.3' 2018-01-11 16:49:31 +02:00
yuri
06708a8b7e version 2018-01-11 16:44:45 +02:00
yuri
fba8ca7817 css form panel bottom margin fix 2018-01-11 16:31:25 +02:00
yuri
37cae817a7 fix file uploading validate message 2018-01-11 14:26:58 +02:00
yuri
7d847cf179 Merge branch 'hotfix/5.0.3' 2018-01-11 12:29:41 +02:00
yuri
a32c560f60 hide merge action if no remove access 2018-01-11 12:29:34 +02:00
yuri
a4d4e640a2 merge improvements 2018-01-11 12:24:12 +02:00
yuri
74093976db Merge branch 'hotfix/5.0.3' 2018-01-10 15:02:01 +02:00
yuri
76f17e3f95 Merge branch 'hotfix/5.0.3' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.0.3 2018-01-10 14:46:42 +02:00
Taras Machyshyn
ab4ce21927 Integration test fixes 2018-01-10 14:46:09 +02:00
yuri
eb14dedb63 update tests for phpunit 6 2018-01-10 12:54:44 +02:00
yuri
004dfc1687 Merge branch 'hotfix/5.0.2' 2018-01-09 16:23:56 +02:00
yuri
62b4b92815 fix install 2018-01-09 16:18:48 +02:00
yuri
e429bde5b8 Merge branch 'hotfix/5.0.2' 2018-01-09 16:15:07 +02:00
yuri
6c3ee8d462 fix opp repository 2018-01-09 12:35:32 +02:00
yuri
43f1c0d889 fix wysiwyg 2018-01-09 12:11:31 +02:00
yuri
2cd1bb8cdd Merge branch 'hotfix/5.0.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.0.2 2018-01-09 11:51:00 +02:00
yuri
3d8bbdd01d Merge branch 'hotfix/5.0.2' of ssh://172.20.0.1/var/git/espo/backend 2018-01-09 11:49:45 +02:00
yuri
1e90153f75 fix integration 2 2018-01-09 11:41:35 +02:00
yuri
61ef68d4ae account target list not exportable 2018-01-09 11:37:07 +02:00
Taras Machyshyn
517953a097 Merge branch 'hotfix/5.0.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/5.0.2 2018-01-09 11:19:38 +02:00
Taras Machyshyn
5ca757ac05 Tests: fixed a FieldManagerTest 2018-01-09 11:19:22 +02:00
yuri
1e69075099 fix integration 2018-01-09 11:08:59 +02:00
yuri
5e12a4b238 test disable 2018-01-08 14:34:28 +02:00
yuri
9ddbad0b50 fix account merge 2018-01-08 14:23:35 +02:00
yuri
6e444c3289 wysywyg useIframe 2018-01-08 12:09:26 +02:00
yuri
385f8733ab css 2018-01-08 11:47:09 +02:00
yuri
42c0c50e1b lang 2018-01-08 11:38:54 +02:00
yuri
3c17a8982a merge frontend change 2018-01-08 11:20:44 +02:00
yuri
e0abf85014 fix deprecated 2018-01-08 11:09:18 +02:00
yuri
35db6e5cde merge change 2018-01-08 11:05:01 +02:00
yuri
7abdb854ea merge use object 2018-01-08 10:54:12 +02:00
yuri
924e50d135 grunt theme refactor 2018-01-05 13:31:43 +02:00
yuri
0f70f7a169 fix iframe css 2018-01-05 13:21:32 +02:00
yuri
7d4683d130 remove reset 2018-01-05 13:14:37 +02:00
yuri
8803e96bb7 version 2018-01-05 13:13:17 +02:00
yuri
3a4220878d css location change 2018-01-05 13:12:13 +02:00
yuri
21ee02d4ed fix json array export 2018-01-05 11:20:50 +02:00
yuri
fbecb09d45 fix throw 2018-01-04 11:42:08 +02:00
yuri
bbbec3b54a opp fix 2018-01-03 11:59:35 +02:00
yuri
d62f7f3628 opp amount weight refresh 2018-01-03 11:54:01 +02:00
yuri
fc07a06248 fix orm DATE_NUMBER 2018-01-03 11:01:29 +02:00
yuri
c32682b245 amd support 2018-01-02 15:05:12 +02:00
yuri
fc502a55b3 multiEnum change 2017-12-29 14:11:38 +02:00
yuri
d580a3fa26 fix field manager 2017-12-29 14:09:08 +02:00
yuri
639686253b fix field manager options field 2017-12-29 11:19:59 +02:00
yuri
1274731a02 theme loading improvement 2017-12-28 12:56:42 +02:00
yuri
9ca51fcd94 fix css 2017-12-27 16:38:45 +02:00
yuri
8cabec8a3b fix navbar 2017-12-27 14:30:26 +02:00
yuri
967b6cfc81 ditch More label from navmar 2017-12-27 11:21:14 +02:00
yuri
416ae76a94 fix link panel css for small screen 2017-12-27 11:03:48 +02:00
yuri
05cfe65d8e gridstack fix 2017-12-26 17:33:16 +02:00
yuri
d7dd804822 fix getMaxUploadSize 2017-12-26 16:22:49 +02:00
yuri
aa56a20240 version 2017-12-26 14:59:07 +02:00
yuri
23b85d078b naming fix 2017-12-26 14:58:52 +02:00
yuri
154dad7cb4 fix button disabled 2017-12-26 12:23:52 +02:00
yuri
0a4c552602 tab remove 2017-12-26 11:32:27 +02:00
yuri
ae479449fc installer xml recommendation 2017-12-26 11:07:24 +02:00
yuri
f215196bcb 2018 2017-12-26 11:04:59 +02:00
yuri
79b688535b fix loader 2017-12-26 11:03:06 +02:00
yuri
b5bd3ec514 fix categories 2017-12-22 13:58:13 +02:00
yuri
696cab7f65 fix filterInput 2017-12-22 13:42:30 +02:00
yuri
9f3122df29 fix opp stage 2017-12-22 13:26:15 +02:00
Taras Machyshyn
2ef1d5becb Added new 2018 year 2017-12-22 10:29:39 +02:00
yuri
f5b5d94b27 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-21 17:11:39 +02:00
yuri
3a61e9b62d fix file 2017-12-21 17:11:18 +02:00
Taras Machyshyn
8ec70cc42f Metadata optimization 2017-12-21 15:57:42 +02:00
yuri
e336bfbc1d categories fix 2017-12-21 13:42:54 +02:00
yuri
bdd8579e7b fix list view 2017-12-21 12:31:19 +02:00
Taras Machyshyn
9b19e67eac Added 2018 year 2017-12-20 15:29:17 +02:00
yuri
62a4ea9080 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-20 13:54:58 +02:00
Taras Machyshyn
8dc9076de3 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-20 13:51:11 +02:00
Taras Machyshyn
4a72481a7d FieldManager: save only changes 2017-12-20 13:51:04 +02:00
yuri
ad22d2bab6 fix layout manager 2017-12-20 13:44:25 +02:00
yuri
d879d70b7d css 2017-12-20 13:37:07 +02:00
yuri
ec01288930 css 2017-12-20 12:51:16 +02:00
yuri
6bb03bb176 fix entity manager remove entity and links 2017-12-20 11:41:23 +02:00
yuri
fd085f5fde fix settings admin items 2017-12-19 16:51:56 +02:00
yuri
6e0b34d9d5 import style 2017-12-19 16:00:16 +02:00
yuri
a69cee274f fix checkEntityForDuplicate 2017-12-19 15:54:10 +02:00
yuri
63126a8371 css for iframe 2017-12-19 15:41:52 +02:00
yuri
2a2e7524e8 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-19 13:57:35 +02:00
yuri
87f1a84e0d layouts change 2017-12-19 12:55:11 +02:00
yuri
08b90e08cf email accounts: useImap 2017-12-19 12:24:45 +02:00
yuri
e5dad4622f fix group email account ui 2017-12-19 11:56:41 +02:00
Taras Machyshyn
f6f2010670 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-18 16:52:31 +02:00
Taras Machyshyn
fa8b77392a Css url fixes in the iframe 2017-12-18 16:52:22 +02:00
yuri
00476f082b Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-18 15:23:45 +02:00
Taras Machyshyn
60eefda570 Metadata optimizations 2017-12-18 15:10:44 +02:00
yuri
7532ba06cd cleanup 2017-12-18 13:47:40 +02:00
yuri
a86ba2b704 fix email smtp test and using smtpAuthMechanism for system 2017-12-18 12:38:32 +02:00
yuri
4d9bd89544 fix task complete sent twice 2017-12-18 11:53:37 +02:00
yuri
a6dc770afc metdata objects for frontend 2017-12-18 11:43:59 +02:00
yuri
a4deda924a Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-18 11:29:11 +02:00
yuri
f75511e723 dynamic logic required only if has required 2017-12-18 11:26:49 +02:00
Taras Machyshyn
b72c8bb212 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-15 16:51:18 +02:00
Taras Machyshyn
62eb33d936 Metadata in objects fixes 2017-12-15 16:51:10 +02:00
yuri
aa481dc14d lang 2017-12-15 15:52:51 +02:00
yuri
b2276950ca fix cron 2017-12-15 13:11:45 +02:00
yuri
1c032405fe attachment fix 2017-12-15 12:30:39 +02:00
yuri
2ae9b9239d css 2017-12-15 11:39:51 +02:00
yuri
b390cb921e lt_LT lang 2017-12-15 11:34:29 +02:00
yuri
fbee7df8da Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-15 11:25:37 +02:00
Taras Machyshyn
43559a0158 New version checker changes 2017-12-15 11:17:58 +02:00
yuri
0409a6102e fix 2017-12-14 17:46:48 +02:00
yuri
30985196b2 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-14 17:30:51 +02:00
Taras Machyshyn
f289072486 Metadata: added getAllObjects() 2017-12-14 17:23:28 +02:00
yuri
d244192783 text fix 2017-12-14 17:11:44 +02:00
yuri
87bf131f8e Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-14 16:58:29 +02:00
yuri
ff1d010745 stream: store on closing window 2017-12-14 16:50:10 +02:00
yuri
c0a72f3cbe layouts 2017-12-14 16:39:00 +02:00
yuri
14db1291b6 text minRows 2017-12-14 16:34:46 +02:00
yuri
76ab6bde62 fix text 2017-12-14 16:26:37 +02:00
yuri
df92a6e110 text: fit height 2017-12-14 15:54:37 +02:00
yuri
0836dec4a6 markdown support 2017-12-14 15:06:08 +02:00
yuri
6ae345a9e1 lt_LT 2017-12-14 12:03:40 +02:00
yuri
4c283747a4 formula lowerCase upperCase 2017-12-14 11:45:28 +02:00
yuri
a504bc8d4f lang changes 2017-12-13 15:29:42 +02:00
yuri
f6fcfeae06 ability to import number field type 2017-12-13 15:21:15 +02:00
yuri
11376e3a09 target list count not sortable 2017-12-13 14:38:48 +02:00
yuri
86d1650ede foreigh field: supporing text 2017-12-13 12:01:14 +02:00
yuri
3c1d2a4236 version 2017-12-13 11:49:44 +02:00
yuri
c80cfc9574 export disabled 2017-12-13 11:38:29 +02:00
Taras Machyshyn
4e47f203fb Fixed integration tests 2017-12-13 10:29:37 +02:00
Taras Machyshyn
42bbf92111 Integration tests improvements 2017-12-13 10:20:49 +02:00
yuri
e4be63222a cleanup 2017-12-12 17:04:10 +02:00
yuri
061ff019ea fix email template 2017-12-12 17:02:14 +02:00
yuri
84b0b4a713 hide dashlet resize icon 2017-12-12 16:31:05 +02:00
yuri
f9d4cdca51 fix dashboard layout field 2017-12-12 16:14:30 +02:00
yuri
b2ab2a9b01 fullcalendar upgrade 2017-12-12 14:58:05 +02:00
yuri
b044566309 summernote update 2017-12-12 12:29:20 +02:00
yuri
14e95414ab cleanup 2017-12-12 12:04:14 +02:00
yuri
88836f2d3a fix 2017-12-12 12:04:03 +02:00
yuri
d2aefab3e2 format json 2017-12-12 11:40:48 +02:00
yuri
a62e91af6f category ui fix 2017-12-12 11:27:36 +02:00
yuri
cdf473fb2c deprecated controller actions 2017-12-12 11:16:59 +02:00
yuri
4f1730d929 fix htmlizer 2017-12-11 15:48:16 +02:00
yuri
4a3a13414b mass update fix 2017-12-11 15:06:29 +02:00
yuri
939ead833c use object for conroller action data 2017-12-11 14:51:01 +02:00
yuri
0946c8dba8 mass update data typehint 2017-12-08 15:52:26 +02:00
yuri
47e1687029 category cleanup 2017-12-08 15:17:54 +02:00
yuri
9230519d91 notifications fix 2017-12-08 14:44:55 +02:00
yuri
915ddab072 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-08 14:31:12 +02:00
yuri
7293910d45 job layout fix 2017-12-08 14:30:23 +02:00
yuri
3cfae1964e cron data as object 2017-12-08 14:27:12 +02:00
Taras Machyshyn
e02fc8c9a2 Changed newVersionChecker 2017-12-08 12:49:22 +02:00
yuri
53fb2513d4 fix dashboard 2017-12-08 12:21:49 +02:00
yuri
ecc0d65ee4 controller change methods 2017-12-08 12:15:17 +02:00
yuri
c8dcc686c0 update gridstack 2017-12-08 10:42:24 +02:00
yuri
543a6447ae kb: hide empty attachments for portal users 2017-12-08 10:12:16 +02:00
yuri
78939a7152 codestyle fix 2017-12-07 17:25:12 +02:00
yuri
b6bcb75dcf en_GB lang 2017-12-07 17:10:07 +02:00
yuri
81e841f784 lang: do not translate if equals original 2017-12-07 17:09:50 +02:00
yuri
3e64daae0c fix layout detail 3 2017-12-07 16:36:27 +02:00
yuri
124acbc17d fix grid layout 2017-12-07 16:18:12 +02:00
yuri
0060823de6 changes 2017-12-07 15:52:59 +02:00
yuri
e60999ca5d fix email from 2 2017-12-07 14:08:22 +02:00
yuri
aab28fcc5d fix test 2017-12-07 13:37:03 +02:00
yuri
452c5981a8 fix email from 2017-12-07 13:35:21 +02:00
yuri
ebf43b64af fix file fetch 2017-12-07 12:40:07 +02:00
yuri
dbd95a96fb edit access detail button fix 2017-12-07 12:13:32 +02:00
yuri
8362ec825f fix relate acl check 2017-12-07 12:02:14 +02:00
yuri
e44d240f22 fix acl frontend 2017-12-07 11:44:02 +02:00
Taras Machyshyn
c04722c8d5 Added a css url for news iframe 2017-12-07 11:42:29 +02:00
yuri
26a5e5fa33 portal layouts 2017-12-07 11:23:15 +02:00
Taras Machyshyn
5b3837af9f Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-12-06 16:55:13 +02:00
Taras Machyshyn
6a64d5fe0e Merge branch 'check-releases' 2017-12-06 16:54:42 +02:00
Taras Machyshyn
4ceae087fa New version checker 2017-12-06 16:23:11 +02:00
yuri
321d45dc86 format fix 2017-12-06 16:22:59 +02:00
yuri
066b2b3803 grid layout refactoring 2017-12-06 16:04:37 +02:00
yuri
448387f29c fix max upload size 2017-12-06 13:11:12 +02:00
yuri
64b6eb42cc attachmentUploadMaxSize 2017-12-06 13:03:00 +02:00
yuri
c2f4e689e8 max file size check 2017-12-06 12:55:39 +02:00
yuri
f0d2856f44 team remove side panel 2017-12-06 11:37:11 +02:00
yuri
0465a03aee entity getValueMap 2017-12-06 11:30:10 +02:00
yuri
ef7eaa925f fix collection unset 2 2017-12-06 11:12:39 +02:00
yuri
e4d0fbaf37 fix collection 2017-12-05 15:48:08 +02:00
yuri
0bd2e65d93 link multiple role empty value 2017-12-05 14:27:05 +02:00
yuri
4f98f39f2a fix css 2017-12-05 11:18:22 +02:00
yuri
230364b3f3 trim address and person name 2017-12-05 11:02:40 +02:00
yuri
5fa591c84f lang fixes 2017-12-05 10:51:48 +02:00
yuri
f70ef6bb14 inbound email translation fix 2017-12-05 10:47:01 +02:00
yuri
9586b725ad fix return 2017-12-04 16:58:52 +02:00
yuri
a96a306901 fix return to list 2017-12-04 16:40:56 +02:00
yuri
366c0ca069 field level acl for list view 2017-12-04 15:23:43 +02:00
yuri
a22f8ce76c list view fix 2017-12-04 14:42:45 +02:00
yuri
96c97df1e0 cleanup 2017-12-04 14:35:28 +02:00
yuri
d683425ee1 emails drafts count 2017-12-04 14:10:30 +02:00
yuri
cd9690a45a export permission 2017-12-04 12:41:36 +02:00
yuri
81338e9120 personal email account list change 2017-12-04 12:22:34 +02:00
yuri
51c279047f fix return to list 2017-12-04 12:22:14 +02:00
yuri
a095f1255e manage categories link 2017-12-04 11:48:30 +02:00
yuri
2675b1f8e3 css fixes 2017-12-04 11:42:44 +02:00
yuri
f4d39051e3 es lang 2017-12-04 11:30:13 +02:00
yuri
d8f682393f panel customLabel 2017-12-04 11:17:24 +02:00
yuri
e592227628 fix lang 2017-12-04 10:04:43 +02:00
yuri
853e8dcebc categories small fix 2017-12-01 16:21:52 +02:00
yuri
cd77b5867a fix attachment multiple triggering change event 2017-12-01 15:59:21 +02:00
yuri
8d80e25d08 fix router navigate back 2017-12-01 15:31:05 +02:00
yuri
8b0ee19d6e filter list actions 2017-12-01 15:23:07 +02:00
yuri
817b853472 categories big change 2017-12-01 15:08:21 +02:00
yuri
cbc0597852 document layout change 2017-12-01 10:45:11 +02:00
yuri
642f12e894 trim username on login 2017-12-01 10:40:51 +02:00
yuri
7a0ed9ecf6 fix avatar forbidden access 2017-12-01 10:36:18 +02:00
yuri
a7d7c6e8f0 formula floor and ceil functions 2017-11-30 12:10:59 +02:00
yuri
14c747a26c improve number\format function 2017-11-30 12:00:18 +02:00
yuri
f1d57bd0df fix email action label 2017-11-30 11:31:05 +02:00
yuri
fc2bc0c715 fix detail view actions translation 2017-11-30 11:29:41 +02:00
yuri
47268cd6e0 fix required sign 2017-11-29 16:23:58 +02:00
yuri
214e7e4953 printPdf action 2017-11-28 13:56:15 +02:00
yuri
8161f387aa lt_LT lang 2017-11-28 12:06:23 +02:00
yuri
8f7d395a81 fix lang script 2017-11-28 12:06:05 +02:00
yuri
df9320bb8c fix link multiple field 2017-11-28 11:26:24 +02:00
yuri
0075f42c58 formula: removeLinkMultipleId 2017-11-28 11:21:28 +02:00
yuri
e76a05a436 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-11-27 11:52:33 +02:00
yuri
e8eeb98131 formula datetime functions change 2017-11-27 11:00:13 +02:00
Taras Machyshyn
67d47d59d3 Fixed checking if crontab is configured 2017-11-24 17:36:38 +02:00
yuri
30ebcf6d76 fix email 2017-11-24 15:28:27 +02:00
yuri
468c1c5fc2 fix css 2017-11-24 15:21:43 +02:00
yuri
bf4a172cb5 case portal default acl change 2017-11-24 13:59:16 +02:00
yuri
55a4a836c6 case portal filling account and contact if empty 2017-11-24 13:52:57 +02:00
yuri
2fe6f87b23 version 2017-11-24 12:30:22 +02:00
yuri
d0d9c91487 acl refactors 2017-11-24 12:13:59 +02:00
yuri
a3c7d8c0c2 email fixes 2017-11-24 11:45:17 +02:00
yuri
e1b8565358 password detail view 2017-11-24 11:16:31 +02:00
yuri
21b7ef1f21 fix int validation messages 2017-11-24 11:04:04 +02:00
yuri
547583a1bc mass email fixes 2017-11-24 10:57:39 +02:00
yuri
1c513cfb6f email: filters by subject and body 2017-11-24 10:47:55 +02:00
yuri
ae9c69307d fix notices 2017-11-23 17:53:07 +02:00
yuri
db5db54fcf fix mass email 2017-11-23 17:50:07 +02:00
yuri
34d28c1b34 Merge branch 'master' of github.com:espocrm/espocrm 2017-11-23 17:39:13 +02:00
yuri
92fa02514b mass email group smtp 2017-11-23 17:38:36 +02:00
yuri
5aad4489c1 group smtp 2017-11-23 15:32:03 +02:00
ayman-alkom
acf990e621 fix enum translate in list view when linkable (#709) 2017-11-23 11:30:43 +02:00
yuri
4f211cf691 readme change 2017-11-22 13:28:19 +02:00
yuri
be467cbbc1 readme change 2017-11-22 13:26:43 +02:00
yuri
1293620bbd Merge branch 'hotfix/4.8.5' 2017-11-22 13:24:03 +02:00
yuri
047c5d5f65 fixes category and storing list view 2017-11-22 12:54:18 +02:00
yuri
b66732bcd0 ms before mrs 2017-11-22 11:52:56 +02:00
yuri
cc245b3de8 fix link parent link 2017-11-22 11:48:46 +02:00
yuri
bb32b06063 fix address field search 2017-11-22 11:00:09 +02:00
yuri
f2f1fbddf3 Merge branch 'hotfix/4.8.5' 2017-11-21 18:38:02 +02:00
yuri
ee3378f88b storing list view improvements 2017-11-21 18:35:02 +02:00
yuri
9f57e68252 categoties refactor 2017-11-21 16:45:39 +02:00
yuri
70262f4e89 Merge branch 'hotfix/4.8.5' 2017-11-21 13:52:07 +02:00
yuri
7305ff7792 category tree improvement 2017-11-21 13:52:00 +02:00
yuri
b035f7aab4 Merge branch 'hotfix/4.8.5' 2017-11-21 12:13:50 +02:00
yuri
401a9c4687 export xlsx substr utf-8 2017-11-21 12:13:39 +02:00
yuri
420645800e Merge branch 'hotfix/4.8.5' 2017-11-21 12:11:12 +02:00
yuri
f4f33e3d1f fix xlsx export 2017-11-21 12:11:06 +02:00
yuri
7da0dfde7d Merge branch 'hotfix/4.8.5' 2017-11-21 11:43:24 +02:00
yuri
9c77281942 cases attachments 2017-11-21 11:33:27 +02:00
yuri
b67f775404 fix readme 2017-11-21 11:05:47 +02:00
yuri
ba844c4382 drop php 5.5 support 2017-11-21 11:03:41 +02:00
yuri
b8e526757a Merge branch 'hotfix/4.8.5' 2017-11-21 10:55:24 +02:00
yuri
0797b71d95 fix frontend date time 2017-11-21 10:55:13 +02:00
yuri
17cef2461d Merge branch 'hotfix/4.8.5' 2017-11-20 15:19:25 +02:00
yuri
cfec27eab8 attachments changes 2017-11-20 15:19:14 +02:00
yuri
0ae8f95313 Merge branch 'hotfix/4.8.5' 2017-11-17 17:08:15 +02:00
yuri
3d2ff947e4 refactor attachments 2017-11-17 17:08:08 +02:00
yuri
df5fead77c Merge branch 'hotfix/4.8.5' 2017-11-17 14:24:06 +02:00
yuri
6081aca66c fix email 2017-11-17 12:35:10 +02:00
yuri
2e51e3f363 Merge branch 'hotfix/4.8.5' 2017-11-17 12:30:00 +02:00
yuri
ea66bd16cb contact accountRole listen to title 2017-11-17 11:54:57 +02:00
yuri
80e9ffe881 hasSubject hasName methods 2017-11-17 11:47:02 +02:00
yuri
cc9cacc04b fix draft empty subject 2017-11-16 16:55:22 +02:00
yuri
355ca2e7fe Merge branch 'hotfix/4.8.5' 2017-11-16 16:10:21 +02:00
yuri
851cef40c4 formula datetime closest function 2017-11-16 16:10:13 +02:00
yuri
4cde4a5885 fix email-to-case 2017-11-16 14:16:05 +02:00
yuri
c6d37b7195 Merge branch 'hotfix/4.8.5' 2017-11-16 12:29:14 +02:00
yuri
618aa84555 ui filters changes 2017-11-16 12:24:19 +02:00
yuri
82d53474d3 Merge branch 'hotfix/4.8.5' 2017-11-16 11:56:08 +02:00
yuri
9d0d6d7475 update mail mime parser 2017-11-16 11:36:14 +02:00
yuri
f7923bdf52 version 2017-11-16 11:33:18 +02:00
yuri
e4598d5ebf Merge branch 'master' of github.com:espocrm/espocrm 2017-11-16 11:31:27 +02:00
yuri
fbe41afdca Merge branch 'hotfix/4.8.5' 2017-11-16 11:31:03 +02:00
yuri
b94f702cc0 language caching and fix 2017-11-16 11:30:53 +02:00
Taras Machyshyn
3951c8e35b Merge pull request #699 from zsroma/tests_for_route_replacing
PHPUnit for "Route : possibility to replace routes in modules"
2017-11-16 11:07:19 +02:00
r.ratsun
a331edafe8 PHPUnit for "Route : possibility to replace routes in modules" 2017-11-15 17:11:29 +02:00
yuri
a82b3acc2b selectize small in search mode 2017-11-15 16:12:17 +02:00
yuri
2637698641 Merge branch 'hotfix/4.8.5' 2017-11-15 16:02:02 +02:00
yuri
ffeb600382 next month filter 2017-11-15 16:01:54 +02:00
yuri
171ed885eb Merge branch 'master' of github.com:espocrm/espocrm 2017-11-15 15:14:06 +02:00
yuri
e3e05a07f3 Merge branch 'hotfix/4.8.5' 2017-11-15 15:13:05 +02:00
yuri
5a990de0d6 field manager: create labels for generated fields 2017-11-15 15:11:16 +02:00
Taras Machyshyn
3b11245525 Merge pull request #694 from Forestsoft-de/master
Unittests on windows failed
2017-11-15 12:55:02 +02:00
yuri
94923d3ddf merge hotfix/4.8.5 2017-11-15 11:39:14 +02:00
yuri
37a1a5246b sr_RS lang 2017-11-15 11:35:01 +02:00
yuri
428cfa3fe0 it_IT lang 2017-11-15 11:34:43 +02:00
yuri
d08a100259 es_MX lang 2017-11-15 11:34:14 +02:00
yuri
be567b9c0e es_ES lang 2017-11-15 11:33:45 +02:00
yuri
748231b8f1 fr_FR lang 2017-11-15 11:29:59 +02:00
yuri
48b1fbe66e zh CN lang 2017-11-15 11:26:36 +02:00
Sebastian Foerster
30fb116676 Extract change in different branch 2017-11-14 21:24:05 +01:00
Sebastian Foerster
c6149cedcc Remove duplicated Test lines. 2017-11-14 21:05:02 +01:00
Sebastian Foerster
5eb2b92397 Integration Test failed on Windows because Espo Bool Type for doctrine could not been found. 2017-11-14 20:54:03 +01:00
Sebastian Foerster
26bbd6672f Merge branch 'master' of https://github.com/espocrm/espocrm 2017-11-14 18:24:06 +01:00
yuri
3cfacafb16 Merge branch 'master' of github.com:espocrm/espocrm 2017-11-14 15:30:13 +02:00
yuri
d3bc318307 Merge branch 'hotfix/4.8.5' 2017-11-14 15:30:02 +02:00
yuri
405200d109 fix user filter not storing 2017-11-14 15:29:54 +02:00
yuri
6dfb4dd989 layout changes 2017-11-14 15:23:44 +02:00
Taras Machyshyn
763840e7fc Merge pull request #689 from ZinitSolutions/route_change
Route: possibility to replace routes in modules
2017-11-14 13:29:50 +02:00
Taras Machyshyn
a9f9a8ef7f Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-11-14 13:26:40 +02:00
Taras Machyshyn
2480ad34af Tests for Route 2017-11-14 13:25:08 +02:00
yuri
e2f6e3324a admin notifications param 2017-11-14 10:57:02 +02:00
Sebastian Foerster
ca7b5cab86 Fix Tests for Windows based Development System 2017-11-13 20:59:36 +01:00
r.ratsun
76471a6db1 Route: possibility to replace routes in modules 2017-11-13 16:51:25 +02:00
yuri
dd8e51a1d9 skipOrmDefs param additional 2017-11-13 16:14:33 +02:00
yuri
83a6a8663d Merge branch 'hotfix/4.8.5' 2017-11-13 15:33:46 +02:00
yuri
3c6fc62a8a lead w/o name 2017-11-13 15:33:35 +02:00
yuri
5fff3bd09e dynamic logic: support email address and phone number in conditions 2017-11-13 15:13:27 +02:00
yuri
9cbfb930a4 Merge branch 'hotfix/4.8.5' 2017-11-13 14:47:55 +02:00
yuri
4015bf7d3b Merge branch 'hotfix/4.8.5' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.8.5 2017-11-13 14:45:02 +02:00
yuri
7a7dc9b2b7 Merge branch 'hotfix/4.8.5' 2017-11-13 14:44:10 +02:00
yuri
0c993c069d preferences: auto-follow improvements 2017-11-13 14:43:09 +02:00
Taras Machyshyn
d04035dd3f HookManager improvements 2017-11-13 13:59:30 +02:00
yuri
5e18528d02 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-11-13 13:32:32 +02:00
yuri
68e42e9c5a Merge branch 'hotfix/4.8.5' 2017-11-13 13:32:21 +02:00
yuri
495f8bf968 import/export fixes 2017-11-13 11:54:21 +02:00
yuri
506a9a2e3f Merge branch 'hotfix/4.8.5' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.8.5 2017-11-10 15:30:36 +02:00
yuri
95992e918a change formula hook order 2017-11-10 15:27:15 +02:00
yuri
cf53edf604 Merge branch 'hotfix/4.8.5' 2017-11-10 12:22:14 +02:00
yuri
a581879a8e email parsing fixes 2017-11-10 12:19:57 +02:00
Taras Machyshyn
7581205800 Portal url fixes 2017-11-09 16:32:25 +02:00
yuri
4ed742fa4a fix email attachment import for weird formatting by apple client 2017-11-09 11:44:49 +02:00
yuri
d3cb258440 fix email attachment import for emails composed with not proper formatting by bad agents 2017-11-09 11:20:38 +02:00
Taras Machyshyn
2d42c21c1a Merge branch 'hotfix/4.8.5' 2017-11-08 16:50:03 +02:00
Taras Machyshyn
1e2700cde1 HookManager improvements 2017-11-08 16:48:20 +02:00
yuri
6c39a89636 Merge branch 'hotfix/4.8.5' 2017-11-07 14:36:25 +02:00
yuri
e5f8883399 formula: array push function 2017-11-07 14:33:05 +02:00
yuri
92b9a40891 fix excel export: foreign fields formatting 2017-11-07 14:19:55 +02:00
yuri
7d45be983b Merge branch 'hotfix/4.8.5' 2017-11-07 14:04:10 +02:00
yuri
63c60f3e6f export datetime timezone fix 2017-11-07 14:03:59 +02:00
yuri
badadbf469 user created by field 2017-11-06 17:04:14 +02:00
yuri
c32b665c12 job config change 2017-11-06 16:17:17 +02:00
yuri
b37f60053d event invitation change 2017-11-06 15:45:44 +02:00
Taras Machyshyn
87d96b285b Variable correction 2017-11-06 12:53:43 +02:00
yuri
0ad12719f0 Merge branch 'hotfix/4.8.5' 2017-11-03 16:48:39 +02:00
yuri
8ad80c7a1a acl: aclAllowDeleteCreated 2017-11-03 16:48:18 +02:00
yuri
7a17c78a51 Merge branch 'hotfix/4.8.5' 2017-11-02 11:22:59 +02:00
yuri
05acdc4c5c fix default today 2017-11-02 11:22:46 +02:00
yuri
0787252f36 version 2017-11-02 10:22:03 +02:00
yuri
c8089bfc32 fix link multiple sorting 2017-11-02 10:18:43 +02:00
yuri
1f38f5fd66 fix record base 2017-10-31 15:12:51 +02:00
yuri
1fb1edb2fa fix task complete button 2017-10-31 14:23:51 +02:00
yuri
9f5aa292ab fix main menu item names 2017-10-31 14:21:51 +02:00
Taras Machyshyn
92e61db752 Cleanup: remove old backup files after upgrade 2017-10-30 12:40:11 +02:00
yuri
67977a944c Merge branch 'hotfix/4.8.3' 2017-10-27 13:37:06 +03:00
yuri
9b170483da version 2017-10-27 13:33:02 +03:00
yuri
71ecc3c59e fix search preset filter 2017-10-27 10:26:26 +03:00
yuri
04039f5bc3 fix typo 2017-10-24 17:17:21 +03:00
yuri
94d0bccd96 dummy 2017-10-24 16:09:46 +03:00
yuri
72a12636b3 fix 2017-10-24 16:05:57 +03:00
yuri
bfbc69fb25 fix search preset menu 2017-10-24 15:29:24 +03:00
yuri
206dc36a78 person name required 2017-10-24 12:23:11 +03:00
yuri
54a35674bc Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-10-24 11:55:38 +03:00
yuri
d73bf51fcb Merge branch 'hotfix/4.8.3' 2017-10-24 11:55:28 +03:00
yuri
65f285e93f entity set object support 2017-10-24 11:45:45 +03:00
yuri
41f842e581 fix orm entity 2017-10-24 11:45:29 +03:00
yuri
9879f749e4 order link multiple records 2017-10-24 11:40:43 +03:00
yuri
b88686816b link parent changes 2017-10-24 10:55:41 +03:00
yuri
59219a8f55 Merge branch 'hotfix/4.8.3' 2017-10-23 11:40:08 +03:00
yuri
08da60b1b0 foreign field: support date and datetime 2017-10-23 11:40:01 +03:00
yuri
6481f38f66 Merge branch 'hotfix/4.8.3' 2017-10-23 11:09:03 +03:00
yuri
987b838856 fix layout manager 2017-10-23 11:08:50 +03:00
yuri
4706c971d6 Merge branch 'hotfix/4.8.3' 2017-10-20 14:21:29 +03:00
yuri
8ba79cce2a notificator fix 2017-10-20 14:21:19 +03:00
yuri
bfa1533ebf Merge branch 'master' of github.com:espocrm/espocrm 2017-10-18 12:19:34 +03:00
yuri
5db8069872 Merge branch 'hotfix/4.8.3' 2017-10-18 12:19:27 +03:00
yuri
3a48b155e2 formula: undefined variable treated as null 2017-10-18 12:18:58 +03:00
yuri
c5af04ec2b formula nl support 2017-10-18 12:17:38 +03:00
Yuri Kuznetsov
46692fd3dd Revert "Create rodrigoscoelho.md (#659)" (#663)
This reverts commit 4aa27ce269.
2017-10-17 11:03:59 +03:00
rodrigoscoelho
4aa27ce269 Create rodrigoscoelho.md (#659) 2017-10-16 23:50:17 +03:00
yuri
db38756b88 Merge branch 'hotfix/4.8.3' 2017-10-10 13:20:35 +03:00
yuri
62f0b6ad04 es_ES template 2017-10-10 13:20:27 +03:00
yuri
65e32d351b Merge branch 'hotfix/4.8.3' 2017-10-10 13:13:15 +03:00
yuri
e7787b18a3 fix actions propagation 2017-10-10 13:13:07 +03:00
yuri
e77127e2d5 fix orm 2017-10-10 13:03:41 +03:00
yuri
bc11e35d35 fix admin 2017-10-09 11:59:03 +03:00
Taras Machyshyn
39940b3cc7 Changed documentation link 2017-10-06 17:47:47 +03:00
Taras Machyshyn
d2d7b6805e Checking if Scheduled Jobs were run 2017-10-06 17:00:31 +03:00
yuri
9df45f6564 Merge branch 'hotfix/4.8.3' 2017-10-04 13:04:10 +03:00
yuri
a44a25f2e7 fix setup detail view 2017-10-04 13:00:27 +03:00
yuri
37827dfda1 admin panel changes 2017-10-04 11:26:35 +03:00
yuri
827b69076a admin notifications changes 2017-10-04 10:50:27 +03:00
yuri
b5d830361a Merge branch 'hotfix/4.8.3' 2017-10-03 18:23:35 +03:00
yuri
2ec595f8b0 admin quick create list fix 2017-10-03 18:23:17 +03:00
yuri
9d61f22296 first name last name max liength 2017-10-03 18:21:36 +03:00
yuri
69a99667a3 fix duplicate check person names 2017-10-03 18:17:19 +03:00
yuri
2665df0f1e fix duplicate check person names 2017-10-03 18:16:42 +03:00
yuri
6d5fc0a082 fix typo 2017-10-03 14:39:07 +03:00
yuri
41d12504ff admim notifications changes 2017-10-03 14:14:18 +03:00
yuri
20e069b5b2 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-10-03 13:18:33 +03:00
Taras Machyshyn
5f0a065f4b admin notifications 2017-10-03 13:18:22 +03:00
Sebastien DOIDO
f7c5e8773d Array field: fix fetch search replace regexp if multi slash are present (#653)
Thanx
2017-10-02 11:51:52 +03:00
Sebastien DOIDO
990b38a4c6 Array field: fix fetch search replace regexp if multi slash are present (#653)
Thanx
2017-10-02 11:50:00 +03:00
yuri
d48571cb04 Merge branch 'hotfix/4.8.3' 2017-09-28 11:01:37 +03:00
yuri
1e7bdaa991 fix css 2017-09-28 11:01:19 +03:00
yunga91
52acd88e97 mass-update field type fix (#652)
Thanks
2017-09-28 11:00:51 +03:00
yuri
b265375148 Merge branch 'hotfix/4.8.3' 2017-09-27 13:42:51 +03:00
yuri
fcd40af7c9 multi enum support empty strings 2017-09-27 13:40:53 +03:00
yuri
da1f339fd1 Merge branch 'hotfix/4.8.3' 2017-09-26 17:52:06 +03:00
yuri
8d949fa1fc formula fetch related link mulitple ids 2017-09-26 17:50:37 +03:00
yuri
83f0d70291 Merge branch 'hotfix/4.8.3' 2017-09-26 17:27:08 +03:00
yuri
d9504360d9 cleanup 2017-09-26 17:27:02 +03:00
yuri
bcd21f6fd1 Merge branch 'hotfix/4.8.3' 2017-09-26 17:15:51 +03:00
yuri
09c34ff006 formula entity addLinkMultipleId support array 2017-09-26 17:15:41 +03:00
yuri
dfc3f0a5d3 formula array create 2017-09-26 17:12:07 +03:00
yuri
0a3f1dad50 fix typo 2017-09-25 12:06:53 +03:00
yuri
3772e1e839 fix enum 2017-09-22 14:06:49 +03:00
yuri
c4f5416adf rename campaign statistics 2017-09-21 12:25:53 +03:00
yuri
fcdb9aca5d lang fix 2017-09-15 14:40:23 +03:00
yuri
eaadcca1a9 remove loadAdditionalFields request param 2017-09-15 11:16:24 +03:00
yuri
f0bff56146 Merge branch 'hotfix/4.8.3' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.8.3 2017-09-14 14:47:00 +03:00
yuri
1760e8019b Merge branch 'hotfix/4.8.3' 2017-09-14 13:48:37 +03:00
yuri
92e2177ed3 List action: loadAdditionalFields param 2017-09-14 13:48:28 +03:00
yuri
444b45a0c0 Merge branch 'hotfix/4.8.3' 2017-09-14 12:57:53 +03:00
yuri
de72e6d6af htmplizer: ifEqual 2017-09-14 12:57:41 +03:00
Taras Machyshyn
32a8efad0e Installer: changed default value of smtpAuth 2017-09-13 14:23:59 +03:00
yuri
a35e149e13 Merge branch 'hotfix/4.8.3' 2017-09-13 12:12:53 +03:00
yuri
f8523cf2b6 htmlizer numberFormat 2017-09-13 12:10:55 +03:00
yuri
4e1df42f36 event stop propagation 2017-09-13 11:03:45 +03:00
yuri
9a60ee9fe6 cleanup 2017-09-13 11:02:17 +03:00
yuri
4cba0dac6e Merge branch 'stable' 2017-09-12 17:03:41 +03:00
yuri
19f1ef75fd fix application set 2017-09-12 16:51:54 +03:00
yuri
0561ba1f83 Merge branch 'hotfix/4.8.2' 2017-09-12 10:45:28 +03:00
yuri
b29172ad18 it_IT lang fixes 2017-09-12 10:45:21 +03:00
yuri
312ced7e62 Merge branch 'hotfix/4.8.2' 2017-09-08 11:02:16 +03:00
yuri
8f201944a4 email inline attachment cleanable 2017-09-08 11:02:06 +03:00
yuri
6c9a350e43 fix typo 2017-09-06 12:09:13 +03:00
yuri
a8881d146a Merge branch 'hotfix/4.8.2' 2017-09-06 12:04:35 +03:00
yuri
6f1be59b4c remove attachment if file/image changed 2017-09-06 12:03:46 +03:00
yuri
5a15fcbbb5 cleanup attachment improvements 2017-09-06 11:45:05 +03:00
yuri
40d1b7a654 Merge branch 'hotfix/4.8.2' 2017-09-05 11:18:52 +03:00
yuri
9084e6b679 fix excel 2017-09-05 11:18:40 +03:00
yuri
2f280151d4 Merge branch 'hotfix/4.8.2' 2017-09-04 10:57:06 +03:00
yuri
ccb4fb13a9 fix formula parser 2017-09-04 10:56:57 +03:00
yuri
b07c3b62cf fix recotd stop listen window 2017-08-31 16:08:34 +03:00
yuri
d4805acef7 layout noLabel param 2017-08-31 15:37:14 +03:00
yuri
0637304a4f fix empty varchar and text 2017-08-31 11:39:22 +03:00
yuri
1454ac9299 Merge branch 'hotfix/4.8.2' 2017-08-30 16:31:29 +03:00
yuri
8f9089f0a3 fix lang 2017-08-30 16:31:22 +03:00
yuri
83ccec26ee fix lang 2017-08-30 15:29:33 +03:00
yuri
db427c0bf1 version 2017-08-28 17:02:24 +03:00
yuri
0785ab9ee1 bottom loaded with middle 2017-08-28 16:57:17 +03:00
yuri
3882bddc8a Merge branch 'hotfix/4.8.2' 2017-08-23 13:53:47 +03:00
yuri
767dcd1e9f Merge branch 'hotfix/4.8.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.8.2 2017-08-23 13:53:22 +03:00
Taras Machyshyn
7e997b224b Fixed undefined Log class 2017-08-23 12:47:11 +03:00
yuri
1c11442aea lang portal permission fix 2017-08-23 11:08:25 +03:00
Taras Machyshyn
7a08eea518 Changed news URL 2017-08-22 16:48:35 +03:00
Taras Machyshyn
cb14ca4627 installer: load values from existing data/config.php 2017-08-22 15:54:24 +03:00
Taras Machyshyn
7a6a8bc707 installer: added possibility to load values from existing data/config.php 2017-08-22 14:19:55 +03:00
yuri
157d63e2ed Merge branch 'hotfix/4.8.2' 2017-08-21 15:08:12 +03:00
yuri
cc3ba89ab3 calendar dashlet month title 2017-08-21 15:07:21 +03:00
yuri
f9da876818 Merge branch 'hotfix/4.8.2' 2017-08-21 13:03:27 +03:00
yuri
88135f93fe calendar dashlet next/previous buttons and some css fixes 2017-08-21 13:00:51 +03:00
yuri
1148e391a6 panel tpl fix 2017-08-21 11:52:22 +03:00
yuri
f7c5706004 calendar dashlet view link 2017-08-21 11:25:01 +03:00
yuri
569a23759a Merge branch 'hotfix/4.8.2' 2017-08-21 10:57:48 +03:00
yuri
3120afb55e fix date time filter ranges 2017-08-21 10:55:16 +03:00
yuri
4d565b853e Merge branch 'stable' 2017-08-18 13:23:35 +03:00
yuri
e991241ad2 remove target lang 2017-08-18 11:22:30 +03:00
Sebastien DOIDO
22e7756083 Fix clear cache typo update fr lang (#623)
* Update fr_FR lang.

* Fix clear cache typo.
2017-08-18 11:22:17 +03:00
yuri
c65f537b8f remove target lang 2017-08-18 11:21:17 +03:00
yuri
f2e48df7ea fix lang sr_RS 2017-08-18 11:10:08 +03:00
Sebastien DOIDO
935792fa9f Fix clear cache typo update fr lang (#623)
* Update fr_FR lang.

* Fix clear cache typo.
2017-08-17 22:37:08 +03:00
yuri
3b4dc45984 dont show auth error message 2017-08-16 16:30:55 +03:00
yuri
fc747a94bd Merge branch 'hotfix/4.8.1' 2017-08-16 16:25:27 +03:00
yuri
d9b1418f36 fix check personal email account job 2017-08-16 15:51:29 +03:00
yuri
443016790a fix menu check access 2017-08-16 14:45:23 +03:00
yuri
ca9253ecd5 email account assigned user required 2017-08-16 14:39:42 +03:00
yuri
ed8960d71f Merge branch 'hotfix/4.8.1' 2017-08-15 17:21:03 +03:00
yuri
395b11474e lang fix 2017-08-15 17:20:54 +03:00
yuri
71c2cb93cf lang fix 2017-08-15 17:17:37 +03:00
yuri
615438f1dd lang 2017-08-15 17:13:53 +03:00
yuri
dd14c94202 Merge branch 'hotfix/4.8.1' 2017-08-15 12:56:56 +03:00
yuri
1c7fb79b33 more db ssl options 2017-08-15 12:54:49 +03:00
yuri
0c8ac1539c Merge branch 'hotfix/4.8.1' 2017-08-15 12:39:29 +03:00
yuri
c6c16cd488 ssl database 2017-08-15 12:39:05 +03:00
yuri
86bd65556f Merge branch 'hotfix/4.8.1' 2017-08-14 16:38:42 +03:00
yuri
a56502b814 show loading if email address in not loaded 2017-08-14 16:38:33 +03:00
yuri
24137df013 lang 2017-08-14 11:51:38 +03:00
yuri
b945473422 fix array field 2017-08-11 15:05:23 +03:00
yuri
d1fd6bfc8a Merge branch 'hotfix/4.8.1' 2017-08-11 14:58:42 +03:00
yuri
ab7db9d084 color picker field 2017-08-11 14:57:14 +03:00
yuri
c36007f216 fix naming 2017-08-11 14:49:13 +03:00
yuri
1d8cc18411 fix record tpl 2017-08-11 14:40:00 +03:00
yuri
0ec31c689d Merge branch 'hotfix/4.8.1' 2017-08-11 11:38:00 +03:00
yuri
723fc52d1c fix cache 2017-08-11 11:37:53 +03:00
yuri
8f15b098fb Merge branch 'hotfix/4.8.1' 2017-08-10 14:35:29 +03:00
yuri
073aedc18b strikethrough inactive account 2017-08-10 14:35:20 +03:00
yuri
035abf03cb field manager label upper case first 2017-08-10 13:36:55 +03:00
yuri
5808e85182 Merge branch 'hotfix/4.8.1' 2017-08-10 13:32:31 +03:00
yuri
50dbc60a5c file/image should create link 2017-08-10 13:32:24 +03:00
yuri
dbdc83c544 fix stream acl 2017-08-10 12:58:45 +03:00
yuri
3551b3a8d4 Merge branch 'hotfix/4.8.1' 2017-08-10 12:44:40 +03:00
yuri
1d743afd2a Merge branch 'hotfix/4.8.1' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.8.1 2017-08-10 12:31:44 +03:00
yuri
3240d3161b Merge branch 'hotfix/4.8.1' 2017-08-10 12:31:24 +03:00
yuri
094bf69fab contacts panel filters 2017-08-10 12:31:13 +03:00
Taras Machyshyn
706226298a Merge branch 'hotfix/4.8.1' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.8.1 2017-08-09 17:38:17 +03:00
Taras Machyshyn
322bbb5d95 Schema converter optimization 2017-08-09 17:37:58 +03:00
yuri
3d9bd3b646 Merge branch 'hotfix/4.8.1' 2017-08-09 16:15:08 +03:00
yuri
5c12c6133f new text filters 2017-08-09 16:12:27 +03:00
yuri
417367838c fix array length 2017-08-09 14:30:46 +03:00
yuri
eb3480b514 Merge branch 'hotfix/4.8.1' 2017-08-09 14:25:36 +03:00
yuri
6f1cc78329 array\length function 2017-08-09 14:18:02 +03:00
yuri
a2faab036c file audited 2017-08-09 14:07:41 +03:00
yuri
a32441543c image converter orm 2017-08-09 14:06:44 +03:00
yuri
f4497402ca noIndex and file metadata converter 2017-08-09 13:13:33 +03:00
tanyalei
ef6548bc82 Import fix: find related person by name (#605) 2017-08-08 17:30:36 +03:00
tanyalei
99ec7d43c5 Import fix: find related person by name (#605) 2017-08-08 17:29:49 +03:00
yuri
f1bf0b3dee fix model:getLinkMultipleColumn 2017-08-08 15:18:13 +03:00
yuri
ec23cae38d fix user teams load error 2017-08-08 14:01:36 +03:00
yuri
771e3237cf system user is admin 2017-08-08 13:47:43 +03:00
yuri
ae72146d14 avatar requiring auth 2017-08-08 13:44:09 +03:00
yuri
20d6865323 version 2017-08-08 12:49:14 +03:00
yuri
89e13b0bac next number fix 2017-08-04 17:59:07 +03:00
yuri
8fa36ac14c fix next number unlock table 2017-08-04 17:45:46 +03:00
yuri
e557782c64 fix notice 2017-08-04 14:05:28 +03:00
yuri
7cc7f3fbcf week function 2017-08-03 12:45:53 +03:00
yuri
3f293a6d23 orm: week function 2017-08-03 12:07:06 +03:00
yuri
309b09f6ce Merge branch 'master' of github.com:espocrm/espocrm 2017-08-02 12:26:58 +03:00
yuri
0b7e9f3d62 disableHooks property 2017-08-02 11:51:36 +03:00
tanyalei
58c17ffd5c beforeSave for Event fix (#602) 2017-08-01 15:18:44 +03:00
yuri
7d3ba23a9f fix labal manager 2017-07-31 16:41:04 +03:00
yuri
ca2e4f5b37 fix duplicateIgnore 2017-07-31 16:17:47 +03:00
yuri
d82174fec5 fix excel export 2017-07-31 13:00:55 +03:00
yuri
033c65b79b acl strict mode 2017-07-31 12:15:01 +03:00
yuri
dbc8e5d9cc entity manager: common reserved word 2017-07-31 11:28:48 +03:00
yuri
42407935d5 duplicateIgnore 2017-07-31 11:23:52 +03:00
yuri
e7d558b0bf version 2017-07-31 11:14:48 +03:00
yuri
290b530b92 Merge branch 'master' of github.com:espocrm/espocrm 2017-07-18 15:23:24 +03:00
yuri
18726bdccd empty reminder if event is not actual 2017-07-18 15:23:09 +03:00
Dmitry Danilson
06b0498abb Fix #592: Replace undefined with (#593) 2017-07-14 13:57:40 +03:00
yuri
7a7627e931 update mail-mime-parser 2017-07-12 12:03:37 +03:00
yuri
c6038e9cee email account: unset recent flag 2017-07-12 11:32:10 +03:00
yuri
0e05596155 beforeSave repositoty order fix 2017-07-12 11:28:59 +03:00
yuri
0ca212f911 fix warning 2017-07-11 11:08:24 +03:00
yuri
94c2b9deda fix link search 2017-07-07 11:42:46 +03:00
yuri
2016a1bb0d relationship panel link in defs 2017-07-07 11:05:06 +03:00
yuri
6841ba9c85 side panel fieldList 2017-07-07 11:04:19 +03:00
yuri
d5988f2c04 fix after twice after remove hook 2017-07-05 15:38:11 +03:00
yuri
a56c9c3a46 fix complexText link 2017-07-04 17:28:51 +03:00
yuri
9d0bbdcd4d sr_RS lang 2017-07-04 15:47:57 +03:00
yuri
4bfaac3414 layout changes 2017-07-03 17:11:54 +03:00
yuri
d54c044fd9 Merge branch 'hotfix/4.7.3' 2017-07-03 11:27:08 +03:00
yuri
1def66bb77 fix team clear roles cache 2017-07-03 11:26:25 +03:00
yuri
75041db2e9 currency setting changes 2017-06-28 14:37:45 +03:00
yuri
356948cdf7 fix preferences edit 2017-06-28 14:04:33 +03:00
yuri
db92abf3ee Merge branch 'hotfix/4.7.3' 2017-06-28 12:45:20 +03:00
yuri
d5d59abf13 fix notice 2017-06-28 12:45:11 +03:00
yuri
69c1e3e8e0 email load bcc name 2017-06-28 12:22:08 +03:00
yuri
963c4e3e2b fix typo 2017-06-26 12:43:22 +03:00
yuri
cc4c735a27 entity manager: dont allow entity name if controller exists 2017-06-26 12:42:47 +03:00
yuri
175517a9dc list row menu links 2017-06-26 12:23:39 +03:00
yuri
9cb3548393 cleanup reminders 2017-06-26 12:22:36 +03:00
yuri
ac0dea317f reminder threshold fix 2017-06-26 11:42:44 +03:00
yuri
839dfb9709 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-06-23 15:47:24 +03:00
Taras Machyshyn
2c7a4098f3 Upgrade manager: added beforeUpgradeFiles and afterUpgradeFiles 2017-06-23 13:16:36 +03:00
yuri
0228396376 fix formula dayOfWeek 2017-06-23 13:11:00 +03:00
yuri
c5aa0eba48 fix formula dayOfWeek 2017-06-23 13:10:42 +03:00
Taras Machyshyn
ac4472975d Fixed scheduled job run date 2017-06-23 12:40:33 +03:00
yuri
379f5fbaaf field manager ui fix 2017-06-23 12:34:21 +03:00
yuri
af71408c52 cleanup 2017-06-23 12:19:22 +03:00
yuri
b7a4fa1e7c Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-06-23 12:15:39 +03:00
yuri
92b6e45ef2 default for link field 2017-06-23 12:15:31 +03:00
yuri
acf6f67627 fix warning 2017-06-23 12:15:12 +03:00
Taras Machyshyn
017c34dcde Orm converter: remove fields without type 2017-06-22 17:26:05 +03:00
yuri
f6e54918b2 fix orm 2017-06-22 12:43:11 +03:00
yuri
75b3c33526 tpl fix 2017-06-21 15:22:28 +03:00
yuri
f784760735 css fix 2017-06-21 14:22:30 +03:00
yuri
a739b3a96e fix link field empty name 2017-06-21 13:10:55 +03:00
yuri
0a8e0f00c2 defaultAttributes param 2017-06-21 12:37:01 +03:00
yuri
00c4cf4893 update mailmimeparser 2017-06-21 12:07:17 +03:00
yuri
e8e9ea9e2f fix search trim 2017-06-20 16:08:50 +03:00
yuri
c9cdb6767b update slim 2017-06-20 14:50:03 +03:00
yuri
24f9c1c762 es_MX lang 2017-06-20 11:08:15 +03:00
yuri
766a880799 lang 2017-06-20 11:04:23 +03:00
yuri
07de0dbeb0 fix search preset 2017-06-19 16:35:04 +03:00
yuri
d1752f2ff0 fix select related 2017-06-19 16:13:59 +03:00
yuri
ef27234ef8 enum column and varchar column field views 2017-06-19 15:58:20 +03:00
yuri
685862f1de fix enum int float 2017-06-19 11:04:12 +03:00
yuri
97621c45a8 opportunity role search 2017-06-16 12:50:35 +03:00
yuri
b96d433796 search by account fixes 2017-06-15 17:31:32 +03:00
yuri
03d784c284 label manager 2017-06-15 16:53:12 +03:00
yuri
02ef97724f inactive account 2017-06-15 16:50:37 +03:00
yuri
93e2c65d30 en_GB lang 2017-06-14 15:55:17 +03:00
yuri
d02bf65a55 version 2017-06-14 12:53:29 +03:00
yuri
fb2f566314 email importer contact parent if no account 2017-06-14 12:51:36 +03:00
yuri
2227870854 Merge branch 'master' of github.com:espocrm/espocrm 2017-06-14 12:34:16 +03:00
yuri
b195509843 Merge branch 'hotfix/4.7.3' 2017-06-14 12:34:06 +03:00
yuri
2100fa0606 fix email acl ui 2017-06-14 12:33:56 +03:00
Dmitry Danilson
3fe43bdfa3 #563 Replace Container::loadLog() with loader class (#565)
Looks good. Thanks.
2017-06-14 12:18:25 +03:00
yuri
26ad3d48af da_DK fix 2017-06-14 11:59:16 +03:00
yuri
9c224fefb7 label editor: confirm leave out 2017-06-12 14:51:51 +03:00
barwi
e4db873e43 fix typo (#560) 2017-06-12 14:29:50 +03:00
barwi
f06d53b3d2 fix typo (#560) 2017-06-12 14:28:58 +03:00
yuri
4ef706b716 Merge branch 'hotfix/4.7.2' 2017-06-08 16:52:16 +03:00
yuri
b8be2c9e13 travel industry 2017-06-07 11:51:20 +03:00
yuri
f05c763119 label manager 2017-06-06 15:09:36 +03:00
yuri
262b3bb3b3 Merge branch 'hotfix/4.7.2' 2017-06-06 14:01:53 +03:00
yuri
d3ea71c726 Merge branch 'hotfix/4.7.2' 2017-06-06 12:03:35 +03:00
yuri
62ccfaa9c0 Merge branch 'hotfix/4.7.2' 2017-05-31 10:38:00 +03:00
yuri
c0b169f7dd Merge branch 'hotfix/4.7.2' 2017-05-29 11:40:18 +03:00
yuri
3d68c77ed4 Merge branch 'hotfix/4.7.1' 2017-05-26 11:19:11 +03:00
yuri
a2e241966e Merge branch 'hotfix/4.7.1' 2017-05-25 14:22:49 +03:00
yuri
7bf7944360 excel export fix 2017-05-25 11:16:23 +03:00
yuri
9f72b074d5 Merge branch 'hotfix/4.7.1' 2017-05-24 13:41:26 +03:00
yuri
59b7934aa2 Merge branch 'hotfix/4.7.1' 2017-05-22 15:41:03 +03:00
yuri
a7a61a993c Merge branch 'master' of github.com:espocrm/espocrm 2017-05-22 14:36:09 +03:00
yunga91
68d1c0854b Fix view name resolving for custom field types in filter action (#546)
* fix view name resolving for custom field types in merge action

* fix view name resolving for custom field types in filter action
2017-05-22 14:35:31 +03:00
yuri
fdd6f01415 Merge branch 'hotfix/4.7.1' 2017-05-22 14:16:03 +03:00
yuri
54a045e25a Merge branch 'hotfix/4.7.1' 2017-05-19 17:37:25 +03:00
yuri
862b76f165 Merge branch 'hotfix/4.7.1' 2017-05-19 15:11:16 +03:00
yuri
5ed0b2ba6b field manager: forbid underscore name 2017-05-18 13:24:15 +03:00
yuri
bbe26618ac fix excel export label 2017-05-18 12:44:10 +03:00
yuri
6f65d9e8d8 Merge branch 'hotfix/4.7.1' 2017-05-18 12:18:39 +03:00
yuri
f1b0decbab Merge branch 'hotfix/4.7.1' 2017-05-17 16:08:06 +03:00
yuri
c2b60698bc Merge branch 'hotfix/4.7.1' 2017-05-17 15:56:37 +03:00
yuri
63ff4c1dca Merge branch 'hotfix/4.7.1' 2017-05-17 15:32:03 +03:00
yuri
8987ec61fe Merge branch 'hotfix/4.7.1' 2017-05-16 13:45:29 +03:00
yuri
a93627d274 tooltips 2017-05-16 12:58:23 +03:00
yuri
90fe18b660 Merge branch 'hotfix/4.7.1' 2017-05-16 12:47:44 +03:00
yuri
6182376d1f Merge branch 'hotfix/4.7.1' 2017-05-16 12:21:48 +03:00
yuri
66235f7e77 hide 2017-05-16 11:36:46 +03:00
yuri
49b61dab53 Merge branch 'hotfix/4.7.1' 2017-05-16 11:34:33 +03:00
yuri
a10f2949a4 Merge branch 'hotfix/4.7.1' 2017-05-16 11:30:52 +03:00
yuri
666d8ab5ad Merge branch 'hotfix/4.7.1' 2017-05-16 10:55:34 +03:00
yuri
bbcf9e00fa notification number 2017-05-15 16:54:34 +03:00
2663 changed files with 79403 additions and 20349 deletions

9
.gitignore vendored
View File

@@ -8,15 +8,6 @@
/node_modules
/test.php
/main.html
/client/css/espo.css
/client/css/espo-vertical.css
/client/css/sakura.css
/client/css/sakura-vertical.css
/client/css/violet.css
/client/css/violet-vertical.css
/client/css/espo-rtl.css
/client/css/hazyblue.css
/client/css/hazyblue-vertical.css
/tests/unit/testData/cache/*
!/tests/unit/testData/cache/.data

View File

@@ -6,4 +6,4 @@ Before we can merge your pull request you need to accept our CLA [here](https://
## Issues
We don't provide developer help or any kind of support on github. Please use our [forum](http://forum.espocrm.com/) for this.
We don't provide developer help or any kind of support on github. Please use our [forum](https://forum.espocrm.com) for this.

View File

@@ -2,7 +2,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -35,12 +35,72 @@ module.exports = function (grunt) {
'client/lib/bootstrap.min.js',
'client/lib/bootstrap-datepicker.js',
'client/lib/bull.js',
'client/lib/marked.min.js',
'client/src/namespace.js',
'client/src/exceptions.js',
'client/src/loader.js',
'client/src/utils.js'
'client/src/utils.js',
'client/src/acl.js',
'client/src/model.js',
'client/src/model-offline.js',
'client/src/ajax.js',
'client/src/controller.js',
'client/src/ui.js',
'client/src/acl-manager.js',
'client/src/cache.js',
'client/src/storage.js',
'client/src/models/settings.js',
'client/src/language.js',
'client/src/metadata.js',
'client/src/field-manager.js',
'client/src/models/user.js',
'client/src/models/preferences.js',
'client/src/model-factory.js',
'client/src/collection-factory.js',
'client/src/pre-loader.js',
'client/src/controllers/base.js',
'client/src/router.js',
'client/src/date-time.js',
'client/src/layout-manager.js',
'client/src/theme-manager.js',
'client/src/session-storage.js',
'client/src/view-helper.js',
'client/src/app.js'
];
function camelCaseToHyphen (string){
if (string == null) {
return string;
}
return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
}
var fs = require('fs');
var themeList = [];
fs.readdirSync('application/Espo/Resources/metadata/themes').forEach(function (file) {
themeList.push(file.substr(0, file.length - 5));
});
var lessData = {};
themeList.forEach(function (theme) {
var name = camelCaseToHyphen(theme);
var files = {};
files['client/css/espo/'+name+'.css'] = 'frontend/less/'+name+'/main.less';
files['client/css/espo/'+name+'-iframe.css'] = 'frontend/less/'+name+'/iframe/main.less';
var o = {
options: {
yuicompress: true,
},
files: files
};
lessData[theme] = o;
});
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
@@ -59,89 +119,7 @@ module.exports = function (grunt) {
start: ['build/*'],
final: ['build/tmp'],
},
less: {
espo: {
options: {
yuicompress: true,
},
files: {
'client/css/espo.css': 'frontend/less/espo/main.less',
}
},
espoVertical: {
options: {
yuicompress: true,
},
files: {
'client/css/espo-vertical.css': 'frontend/less/espo-vertical/main.less',
}
},
espoRtl: {
options: {
yuicompress: true
},
files: {
'client/css/espo-rtl.css': 'frontend/less/espo-rtl/main.less'
}
},
hazyblueVertical: {
options: {
yuicompress: true,
},
files: {
'client/css/hazyblue-vertical.css': 'frontend/less/hazyblue-vertical/main.less',
}
},
hazyblue: {
options: {
yuicompress: true,
},
files: {
'client/css/hazyblue.css': 'frontend/less/hazyblue/main.less',
}
},
sakura: {
options: {
yuicompress: true,
},
files: {
'client/css/sakura.css': 'frontend/less/sakura/main.less',
}
},
sakuraVertical: {
options: {
yuicompress: true,
},
files: {
'client/css/sakura-vertical.css': 'frontend/less/sakura-vertical/main.less',
}
},
violet: {
options: {
yuicompress: true,
},
files: {
'client/css/violet.css': 'frontend/less/violet/main.less',
}
},
violetVertical: {
options: {
yuicompress: true,
},
files: {
'client/css/violet-vertical.css': 'frontend/less/violet-vertical/main.less',
}
}
},
cssmin: {
minify: {
files: {
'build/tmp/client/css/espo.css': [
'client/css/espo.css',
]
}
},
},
less: lessData,
uglify: {
options: {
mangle: false,
@@ -168,10 +146,6 @@ module.exports = function (grunt) {
],
dest: 'build/tmp/client',
},
frontendHtml: {
src: 'frontend/reset.html',
dest: 'build/tmp/reset.html'
},
frontendLib: {
expand: true,
dot: true,
@@ -311,10 +285,8 @@ module.exports = function (grunt) {
'clean:start',
'mkdir:tmp',
'less',
'cssmin',
'uglify',
'copy:frontendFolders',
'copy:frontendHtml',
'copy:frontendLib',
'copy:backend',
'replace',

View File

@@ -8,10 +8,14 @@ Download the latest release from our [website](http://www.espocrm.com).
### Requirements
* PHP 5.5 or above (with pdo, json, gd, mcrypt extensions);
* MySQL 5.1 or above.
* PHP 5.6 or above (with pdo, json, gd, openssl, zip, imap, mbstring, curl extensions);
* MySQL 5.5.3 or above.
For more information about server configuration see [this article](http://blog.espocrm.com/administration/server-configuration-for-espocrm/).
For more information about server configuration see [this article](https://www.espocrm.com/documentation/administration/server-configuration/).
### Documentation
Documentation for administrators, users and developers is available [here](https://www.espocrm.com/documentation/).
### How to report bug

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -0,0 +1,63 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Acl;
use \Espo\Entities\User as EntityUser;
use \Espo\ORM\Entity;
class EmailAddress extends \Espo\Core\Acl\Base
{
public function checkEditInEntity(EntityUser $user, Entity $entity, Entity $excludeEntity)
{
$id = $entity->id;
$isFobidden = false;
$repository = $this->getEntityManager()->getRepository('EmailAddress');
if (!$user->isAdmin()) {
$entityWithSameAddressList = $repository->getEntityListByAddressId($id, $excludeEntity);
foreach ($entityWithSameAddressList as $e) {
if (!$this->getAclManager()->check($user, $e, 'edit')) {
$isFobidden = true;
if (
$e->get('isPortalUser') && $excludeEntity->getEntityType() === 'Contact' &&
$e->get('contactId') === $excludeEntity->id
) {
$isFobidden = false;
}
if ($isFobidden) break;
}
}
}
return !$isFobidden;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -0,0 +1,45 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Acl;
use \Espo\Entities\User as EntityUser;
use \Espo\ORM\Entity;
class Note extends \Espo\Core\Acl\Base
{
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($entity->get('type') === 'Post' && $user->id === $entity->get('createdById')) {
return true;
}
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -0,0 +1,63 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Acl;
use \Espo\Entities\User as EntityUser;
use \Espo\ORM\Entity;
class PhoneNumber extends \Espo\Core\Acl\Base
{
public function checkEditInEntity(EntityUser $user, Entity $entity, Entity $excludeEntity)
{
$id = $entity->id;
$isFobidden = false;
$repository = $this->getEntityManager()->getRepository('PhoneNumber');
if (!$user->isAdmin()) {
$entityWithSameNumberList = $repository->getEntityListByPhoneNumberId($id, $excludeEntity);
foreach ($entityWithSameNumberList as $e) {
if (!$this->getAclManager()->check($user, $e, 'edit')) {
$isFobidden = true;
if (
$e->get('isPortalUser') && $excludeEntity->getEntityType() === 'Contact' &&
$e->get('contactId') === $excludeEntity->id
) {
$isFobidden = false;
}
if ($isFobidden) break;
}
}
}
return !$isFobidden;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -30,6 +30,7 @@
namespace Espo\Acl;
use \Espo\ORM\Entity;
use \Espo\Entities\User as EntityUser;
class User extends \Espo\Core\Acl\Base
{
@@ -37,5 +38,36 @@ class User extends \Espo\Core\Acl\Base
{
return $user->id === $entity->id;
}
}
public function checkEntityCreate(EntityUser $user, Entity $entity, $data)
{
if (!$user->isAdmin()) {
return false;
}
return $this->checkEntity($user, $entity, $data, 'create');
}
public function checkEntityDelete(EntityUser $user, Entity $entity, $data)
{
if ($entity->id === 'system') {
return false;
}
if (!$user->isAdmin()) {
return false;
}
return parent::checkEntityDelete($user, $entity, $data);
}
public function checkEntityEdit(EntityUser $user, Entity $entity, $data)
{
if ($entity->id === 'system') {
return false;
}
if (!$user->isAdmin()) {
if ($user->id !== $entity->id) {
return false;
}
}
return $this->checkEntity($user, $entity, $data, 'edit');
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -0,0 +1,56 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\AclPortal;
use \Espo\Entities\User as EntityUser;
use \Espo\ORM\Entity;
class EmailAddress extends \Espo\Core\AclPortal\Base
{
public function checkEditInEntity(EntityUser $user, Entity $entity, Entity $excludeEntity)
{
$id = $entity->id;
$isFobidden = false;
$repository = $this->getEntityManager()->getRepository('EmailAddress');
if (!$user->isAdmin()) {
$entityWithSameAddressList = $repository->getEntityListByAddressId($id, $excludeEntity);
foreach ($entityWithSameAddressList as $e) {
if (!$this->getAclManager()->check($user, $e, 'edit')) {
$isFobidden = true;
break;
}
}
}
return !$isFobidden;
}
}

View File

@@ -0,0 +1,45 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\AclPortal;
use \Espo\Entities\User as EntityUser;
use \Espo\ORM\Entity;
class Note extends \Espo\Core\AclPortal\Base
{
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($entity->get('type') === 'Post' && $user->id === $entity->get('createdById')) {
return true;
}
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

View File

@@ -0,0 +1,57 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\AclPortal;
use \Espo\Entities\User as EntityUser;
use \Espo\ORM\Entity;
class PhoneNumber extends \Espo\Core\AclPortal\Base
{
public function checkEditInEntity(EntityUser $user, Entity $entity, Entity $excludeEntity)
{
$id = $entity->id;
$isFobidden = false;
$repository = $this->getEntityManager()->getRepository('PhoneNumber');
if (!$user->isAdmin()) {
$entityWithSameNumberList = $repository->getEntityListByPhoneNumberId($id, $excludeEntity);
foreach ($entityWithSameNumberList as $e) {
if (!$this->getAclManager()->check($user, $e, 'edit')) {
$isFobidden = true;
break;
}
}
}
return !$isFobidden;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -53,7 +53,7 @@ class Admin extends \Espo\Core\Controllers\Base
return $result;
}
public function postActionClearCache($params, $data)
public function postActionClearCache($params)
{
$result = $this->getContainer()->get('dataManager')->clearCache();
return $result;
@@ -93,15 +93,19 @@ class Admin extends \Espo\Core\Controllers\Base
}
$upgradeManager = new \Espo\Core\UpgradeManager($this->getContainer());
$upgradeManager->install($data);
$upgradeManager->install(get_object_vars($data));
return true;
}
public function actionCronMessage($params, $data)
public function actionCronMessage($params)
{
return $this->getContainer()->get('scheduledJob')->getSetupMessage();
}
public function actionAdminNotificationList($params)
{
$adminNotificationManager = new \Espo\Core\Utils\AdminNotificationManager($this->getContainer());
return $adminNotificationManager->getNotificationList();
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -35,57 +35,16 @@ class App extends \Espo\Core\Controllers\Base
{
public function actionUser()
{
$preferences = $this->getPreferences()->getValues();
unset($preferences['smtpPassword']);
$user = $this->getUser();
if (!$user->has('teamsIds')) {
$user->loadLinkMultipleField('teams');
}
if ($user->get('isPortalUser')) {
$user->loadAccountField();
$user->loadLinkMultipleField('accounts');
}
$userData = $user->getValues();
$emailAddressList = [];
foreach ($user->get('emailAddresses') as $emailAddress) {
if ($emailAddress->get('invalid')) continue;
if ($user->get('emailAddrses') === $emailAddress->get('name')) continue;
$emailAddressList[] = $emailAddress->get('name');
}
if ($user->get('emailAddrses')) {
array_unshift($emailAddressList, $user->get('emailAddrses'));
}
$userData['emailAddressList'] = $emailAddressList;
$settings = (object)[];
foreach ($this->getConfig()->get('userItems') as $item) {
$settings->$item = $this->getConfig()->get($item);
}
unset($userData['authTokenId']);
unset($userData['password']);
return array(
'user' => $userData,
'acl' => $this->getAcl()->getMap(),
'preferences' => $preferences,
'token' => $this->getUser()->get('token'),
'settings' => $settings
);
return $this->getServiceFactory()->create('App')->getUserData();
}
public function postActionDestroyAuthToken($params, $data)
{
$token = $data['token'];
if (empty($token)) {
if (empty($data->token)) {
throw new BadRequest();
}
$auth = new \Espo\Core\Utils\Auth($this->getContainer());
return $auth->destroyAuthToken($token);
return $auth->destroyAuthToken($data->token);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -34,32 +34,5 @@ use \Espo\Core\Exceptions\BadRequest;
class Attachment extends \Espo\Core\Controllers\Record
{
public function actionUpload($params, $data, $request)
{
if (!$request->isPost()) {
throw new BadRequest();
}
if (!$this->getAcl()->checkScope('Attachment', 'create')) {
throw new Forbidden();
}
$arr = explode(',', $data);
if (count($arr) > 1) {
list($prefix, $contents) = $arr;
$contents = base64_decode($contents);
} else {
$contents = '';
}
$attachment = $this->getEntityManager()->getEntity('Attachment');
$this->getEntityManager()->saveEntity($attachment);
$this->getContainer()->get('fileStorageManager')->putContents($attachment, $contents);
return array(
'attachmentId' => $attachment->id
);
}
}

View File

@@ -0,0 +1,67 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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\Controllers;
use \Espo\Core\Exceptions\Forbidden;
class AuthLogRecord extends \Espo\Core\Controllers\Record
{
protected function checkControllerAccess()
{
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
}
public function actionUpdate($params, $data, $request)
{
throw new Forbidden();
}
public function actionMassUpdate($params, $data, $request)
{
throw new Forbidden();
}
public function actionCreate($params, $data, $request)
{
throw new Forbidden();
}
public function actionCreateLink($params, $data, $request)
{
throw new Forbidden();
}
public function actionRemoveLink($params, $data, $request)
{
throw new Forbidden();
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -42,12 +42,17 @@ class AuthToken extends \Espo\Core\Controllers\Record
public function actionUpdate($params, $data, $request)
{
$dataAr = get_object_vars($data);
if (
is_array($data) &&
array_key_exists('isActive', $data) &&
$data['isActive'] === false &&
count(array_keys($data)) === 1)
{
is_object($data)
&&
isset($data->isActive)
&&
$data->isActive === false
&&
count(array_keys($dataAr)) === 1
) {
return parent::actionUpdate($params, $data, $request);
}
throw new Forbidden();
@@ -55,16 +60,19 @@ class AuthToken extends \Espo\Core\Controllers\Record
public function actionMassUpdate($params, $data, $request)
{
if (empty($data['attributes'])) {
if (empty($data->attributes)) {
throw new BadRequest();
}
$attributes = $data['attributes'];
$attributes = $data->attributes;
if (
is_object($attributes) &&
isset($attributes->isActive) &&
$attributes->isActive === false &&
is_object($attributes)
&&
isset($attributes->isActive)
&&
$attributes->isActive === false
&&
count(array_keys(get_object_vars($attributes))) === 1
) {
return parent::actionMassUpdate($params, $data, $request);
@@ -87,4 +95,3 @@ class AuthToken extends \Espo\Core\Controllers\Record
throw new Forbidden();
}
}

View File

@@ -0,0 +1,55 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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\Controllers;
use Espo\Core\Exceptions\Error;
use Espo\Core\Exceptions\Forbidden;
use Espo\Core\Exceptions\NotFound;
use Espo\Core\Exceptions\BadRequest;
class DataPrivacy extends \Espo\Core\Controllers\Base
{
protected function checkControllerAccess()
{
if ($this->getAcl()->get('dataPrivacyPermission') === 'no') {
throw new Forbidden();
}
}
public function postActionErase($params, $data)
{
if (empty($data->entityType) || empty($data->id) || empty($data->fieldList) || !is_array($data->fieldList)) {
throw new BadRequest();
}
return $this->getServiceFactory()->create('DataPrivacy')->erase($data->entityType, $data->id, $data->fieldList);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -38,10 +38,10 @@ class Email extends \Espo\Core\Controllers\Record
{
public function postActionGetCopiedAttachments($params, $data, $request)
{
if (empty($data['id'])) {
if (empty($data->id)) {
throw new BadRequest();
}
$id = $data['id'];
$id = $data->id;
return $this->getRecordService()->getCopiedAttachments($id);
}
@@ -56,25 +56,25 @@ class Email extends \Espo\Core\Controllers\Record
throw new Forbidden();
}
if (is_null($data['password'])) {
if ($data['type'] == 'preferences') {
if (!$this->getUser()->isAdmin() && $data['id'] !== $this->getUser()->id) {
if (is_null($data->password)) {
if ($data->type == 'preferences') {
if (!$this->getUser()->isAdmin() && $data->id !== $this->getUser()->id) {
throw new Forbidden();
}
$preferences = $this->getEntityManager()->getEntity('Preferences', $data['id']);
$preferences = $this->getEntityManager()->getEntity('Preferences', $data->id);
if (!$preferences) {
throw new NotFound();
}
if (is_null($data['password'])) {
$data['password'] = $this->getContainer()->get('crypt')->decrypt($preferences->get('smtpPassword'));
if (is_null($data->password)) {
$data->password = $this->getContainer()->get('crypt')->decrypt($preferences->get('smtpPassword'));
}
} else if ($data['type'] == 'emailAccount') {
} else if ($data->type == 'emailAccount') {
if (!$this->getAcl()->checkScope('EmailAccount')) {
throw new Forbidden();
}
if (!empty($data['id'])) {
$emailAccount = $this->getEntityManager()->getEntity('EmailAccount', $data['id']);
if (!empty($data->id)) {
$emailAccount = $this->getEntityManager()->getEntity('EmailAccount', $data->id);
if (!$emailAccount) {
throw new NotFound();
}
@@ -83,49 +83,62 @@ class Email extends \Espo\Core\Controllers\Record
throw new Forbidden();
}
}
if (is_null($data['password'])) {
$data['password'] = $this->getContainer()->get('crypt')->decrypt($emailAccount->get('smtpPassword'));
if (is_null($data->password)) {
$data->password = $this->getContainer()->get('crypt')->decrypt($emailAccount->get('smtpPassword'));
}
}
} else if ($data->type == 'inboundEmail') {
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
if (!empty($data->id)) {
$emailAccount = $this->getEntityManager()->getEntity('InboundEmail', $data->id);
if (!$emailAccount) {
throw new NotFound();
}
if (is_null($data->password)) {
$data->password = $this->getContainer()->get('crypt')->decrypt($emailAccount->get('smtpPassword'));
}
}
} else {
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
if (is_null($data['password'])) {
$data['password'] = $this->getConfig()->get('smtpPassword');
if (is_null($data->password)) {
$data->password = $this->getConfig()->get('smtpPassword');
}
}
}
return $this->getRecordService()->sendTestEmail($data);
return $this->getRecordService()->sendTestEmail(get_object_vars($data));
}
public function postActionMarkAsRead($params, $data, $request)
{
if (!empty($data['ids'])) {
$ids = $data['ids'];
if (!empty($data->ids)) {
$idList = $data->ids;
} else {
if (!empty($data['id'])) {
$ids = [$data['id']];
if (!empty($data->id)) {
$idList = [$data->id];
} else {
throw new BadRequest();
}
}
return $this->getRecordService()->markAsReadByIdList($ids);
return $this->getRecordService()->markAsReadByIdList($idList);
}
public function postActionMarkAsNotRead($params, $data, $request)
{
if (!empty($data['ids'])) {
$ids = $data['ids'];
if (!empty($data->ids)) {
$idList = $data->ids;
} else {
if (!empty($data['id'])) {
$ids = [$data['id']];
if (!empty($data->id)) {
$idList = [$data->id];
} else {
throw new BadRequest();
}
}
return $this->getRecordService()->markAsNotReadByIdList($ids);
return $this->getRecordService()->markAsNotReadByIdList($idList);
}
public function postActionMarkAllAsRead($params, $data, $request)
@@ -135,58 +148,58 @@ class Email extends \Espo\Core\Controllers\Record
public function postActionMarkAsImportant($params, $data, $request)
{
if (!empty($data['ids'])) {
$ids = $data['ids'];
if (!empty($data->ids)) {
$idList = $data->ids;
} else {
if (!empty($data['id'])) {
$ids = [$data['id']];
if (!empty($data->id)) {
$idList = [$data->id];
} else {
throw new BadRequest();
}
}
return $this->getRecordService()->markAsImportantByIdList($ids);
return $this->getRecordService()->markAsImportantByIdList($idList);
}
public function postActionMarkAsNotImportant($params, $data, $request)
{
if (!empty($data['ids'])) {
$ids = $data['ids'];
if (!empty($data->ids)) {
$idList = $data->ids;
} else {
if (!empty($data['id'])) {
$ids = [$data['id']];
if (!empty($data->id)) {
$idList = [$data->id];
} else {
throw new BadRequest();
}
}
return $this->getRecordService()->markAsNotImportantByIdList($ids);
return $this->getRecordService()->markAsNotImportantByIdList($idList);
}
public function postActionMoveToTrash($params, $data)
{
if (!empty($data['ids'])) {
$ids = $data['ids'];
if (!empty($data->ids)) {
$idList = $data->ids;
} else {
if (!empty($data['id'])) {
$ids = [$data['id']];
if (!empty($data->id)) {
$idList = [$data->id];
} else {
throw new BadRequest();
}
}
return $this->getRecordService()->moveToTrashByIdList($ids);
return $this->getRecordService()->moveToTrashByIdList($idList);
}
public function postActionRetrieveFromTrash($params, $data)
{
if (!empty($data['ids'])) {
$ids = $data['ids'];
if (!empty($data->ids)) {
$idList = $data->ids;
} else {
if (!empty($data['id'])) {
$ids = [$data['id']];
if (!empty($data->id)) {
$idList = [$data->id];
} else {
throw new BadRequest();
}
}
return $this->getRecordService()->retrieveFromTrashByIdList($ids);
return $this->getRecordService()->retrieveFromTrashByIdList($idList);
}
public function getActionGetFoldersNotReadCounts(&$params, $request, $data)
@@ -206,20 +219,19 @@ class Email extends \Espo\Core\Controllers\Record
public function postActionMoveToFolder($params, $data)
{
if (!empty($data['ids'])) {
$ids = $data['ids'];
if (!empty($data->ids)) {
$idList = $data->ids;
} else {
if (!empty($data['id'])) {
$ids = [$data['id']];
if (!empty($data->id)) {
$idList = [$data->id];
} else {
throw new BadRequest();
}
}
if (empty($data['folderId'])) {
if (empty($data->folderId)) {
throw new BadRequest();
}
return $this->getRecordService()->moveToFolderByIdList($ids, $data['folderId']);
return $this->getRecordService()->moveToFolderByIdList($idList, $data->folderId);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -59,9 +59,9 @@ class EmailAccount extends \Espo\Core\Controllers\Record
throw new BadRequest();
}
if (is_null($data['password'])) {
$emailAccount = $this->getEntityManager()->getEntity('EmailAccount', $data['id']);
if (!$emailAccount) {
if (is_null($data->password)) {
$emailAccount = $this->getEntityManager()->getEntity('EmailAccount', $data->id);
if (!$emailAccount || !$emailAccount->id) {
throw new Error();
}
@@ -69,10 +69,10 @@ class EmailAccount extends \Espo\Core\Controllers\Record
throw new Forbidden();
}
$data['password'] = $this->getContainer()->get('crypt')->decrypt($emailAccount->get('password'));
$data->password = $this->getContainer()->get('crypt')->decrypt($emailAccount->get('password'));
}
return $this->getRecordService()->testConnection($data);
return $this->getRecordService()->testConnection(get_object_vars($data));
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -35,22 +35,22 @@ class EmailFolder extends \Espo\Core\Controllers\Record
{
public function postActionMoveUp($params, $data, $request)
{
if (empty($data['id'])) {
if (empty($data->id)) {
throw new BadRequest();
}
$this->getRecordService()->moveUp($data['id']);
$this->getRecordService()->moveUp($data->id);
return true;
}
public function postActionMoveDown($params, $data, $request)
{
if (empty($data['id'])) {
if (empty($data->id)) {
throw new BadRequest();
}
$this->getRecordService()->moveDown($data['id']);
$this->getRecordService()->moveDown($data->id);
return true;
}
@@ -60,4 +60,3 @@ class EmailFolder extends \Espo\Core\Controllers\Record
return $this->getRecordService()->listAll();
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -44,6 +44,8 @@ class EntityManager extends \Espo\Core\Controllers\Base
public function actionCreateEntity($params, $data, $request)
{
$data = get_object_vars($data);
if (!$request->isPost()) {
throw new BadRequest();
}
@@ -81,6 +83,17 @@ class EntityManager extends \Espo\Core\Controllers\Base
if (isset($data['textFilterFields']) && is_array($data['textFilterFields'])) {
$params['textFilterFields'] = $data['textFilterFields'];
}
if (!empty($data['color'])) {
$params['color'] = $data['color'];
}
if (!empty($data['iconClass'])) {
$params['iconClass'] = $data['iconClass'];
}
$params['kanbanViewMode'] = !empty($data['kanbanViewMode']);
if (!empty($data['kanbanStatusIgnoreList'])) {
$params['kanbanStatusIgnoreList'] = $data['kanbanStatusIgnoreList'];
}
$result = $this->getContainer()->get('entityManagerUtil')->create($name, $type, $params);
@@ -103,6 +116,8 @@ class EntityManager extends \Espo\Core\Controllers\Base
public function actionUpdateEntity($params, $data, $request)
{
$data = get_object_vars($data);
if (!$request->isPost()) {
throw new BadRequest();
}
@@ -129,6 +144,8 @@ class EntityManager extends \Espo\Core\Controllers\Base
public function actionRemoveEntity($params, $data, $request)
{
$data = get_object_vars($data);
if (!$request->isPost()) {
throw new BadRequest();
}
@@ -160,6 +177,8 @@ class EntityManager extends \Espo\Core\Controllers\Base
public function actionCreateLink($params, $data, $request)
{
$data = get_object_vars($data);
if (!$request->isPost()) {
throw new BadRequest();
}
@@ -218,6 +237,8 @@ class EntityManager extends \Espo\Core\Controllers\Base
public function actionUpdateLink($params, $data, $request)
{
$data = get_object_vars($data);
if (!$request->isPost()) {
throw new BadRequest();
}
@@ -235,7 +256,9 @@ class EntityManager extends \Espo\Core\Controllers\Base
$params = array();
foreach ($paramList as $item) {
$params[$item] = filter_var($data[$item], \FILTER_SANITIZE_STRING);
if (array_key_exists($item, $data)) {
$params[$item] = filter_var($data[$item], \FILTER_SANITIZE_STRING);
}
}
foreach ($additionalParamList as $item) {
@@ -269,6 +292,8 @@ class EntityManager extends \Espo\Core\Controllers\Base
public function actionRemoveLink($params, $data, $request)
{
$data = get_object_vars($data);
if (!$request->isPost()) {
throw new BadRequest();
}
@@ -295,20 +320,31 @@ class EntityManager extends \Espo\Core\Controllers\Base
public function postActionFormula($params, $data, $request)
{
if (empty($data['scope'])) {
if (empty($data->scope)) {
throw new BadRequest();
}
if (!array_key_exists('data', $data)) {
if (!property_exists($data, 'data')) {
throw new BadRequest();
}
$formulaData = get_object_vars($data['data']);
$formulaData = get_object_vars($data->data);
$this->getContainer()->get('entityManagerUtil')->setFormulaData($data['scope'], $formulaData);
$this->getContainer()->get('entityManagerUtil')->setFormulaData($data->scope, $formulaData);
$this->getContainer()->get('dataManager')->clearCache();
return true;
}
}
public function postActionResetToDefault($params, $data, $request)
{
if (empty($data->scope)) {
throw new BadRequest();
}
$this->getContainer()->get('entityManagerUtil')->resetToDefaults($data->scope);
$this->getContainer()->get('dataManager')->clearCache();
return true;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -73,7 +73,7 @@ class Extension extends \Espo\Core\Controllers\Record
$manager = new \Espo\Core\ExtensionManager($this->getContainer());
$manager->install($data);
$manager->install(get_object_vars($data));
return true;
}
@@ -90,7 +90,7 @@ class Extension extends \Espo\Core\Controllers\Record
}
$manager = new \Espo\Core\ExtensionManager($this->getContainer());
$manager->uninstall($data);
$manager->uninstall(get_object_vars($data));
return true;
}
@@ -149,4 +149,3 @@ class Extension extends \Espo\Core\Controllers\Record
throw new Forbidden();
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -65,7 +65,6 @@ class ExternalAccount extends \Espo\Core\Controllers\Record
$id = $request->get('id');
list($integration, $userId) = explode('__', $id);
if ($this->getUser()->id != $userId) {
throw new Forbidden();
}
@@ -109,8 +108,8 @@ class ExternalAccount extends \Espo\Core\Controllers\Record
throw new Forbidden();
}
if (isset($data['enabled']) && !$data['enabled']) {
$data['data'] = null;
if (isset($data->enabled) && !$data->enabled) {
$data->data = null;
}
$entity = $this->getEntityManager()->getEntity('ExternalAccount', $params['id']);
@@ -126,8 +125,8 @@ class ExternalAccount extends \Espo\Core\Controllers\Record
throw new Error('Bad HTTP method type.');
}
$id = $data['id'];
$code = $data['code'];
$id = $data->id;
$code = $data->code;
list($integration, $userId) = explode('__', $id);
@@ -139,4 +138,3 @@ class ExternalAccount extends \Espo\Core\Controllers\Record
return $service->authorizationCode($integration, $userId, $code);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -60,21 +60,26 @@ class FieldManager extends \Espo\Core\Controllers\Base
public function postActionCreate($params, $data)
{
if (empty($params['scope']) || empty($data['name'])) {
if (empty($params['scope']) || empty($data->name)) {
throw new BadRequest();
}
$fieldManager = $this->getContainer()->get('fieldManager');
$fieldManager->create($params['scope'], $data['name'], $data);
$fieldManager->create($params['scope'], $data->name, get_object_vars($data));
try {
$this->getContainer()->get('dataManager')->rebuild($params['scope']);
} catch (Error $e) {
$fieldManager->delete($params['scope'], $data['name']);
$fieldManager->delete($params['scope'], $data->name);
throw new Error($e->getMessage());
}
return $fieldManager->read($params['scope'], $data['name']);
return $fieldManager->read($params['scope'], $data->name);
}
public function patchActionUpdate($params, $data)
{
return $this->putActionUpdate($params, $data);
}
public function putActionUpdate($params, $data)
@@ -84,7 +89,7 @@ class FieldManager extends \Espo\Core\Controllers\Base
}
$fieldManager = $this->getContainer()->get('fieldManager');
$fieldManager->update($params['scope'], $params['name'], $data);
$fieldManager->update($params['scope'], $params['name'], get_object_vars($data));
if ($fieldManager->isChanged()) {
$this->getContainer()->get('dataManager')->rebuild($params['scope']);
@@ -110,15 +115,14 @@ class FieldManager extends \Espo\Core\Controllers\Base
public function postActionResetToDefault($params, $data)
{
if (empty($data['scope']) || empty($data['name'])) {
if (empty($data->scope) || empty($data->name)) {
throw new BadRequest();
}
$this->getContainer()->get('fieldManager')->resetToDefault($data['scope'], $data['name']);
$this->getContainer()->get('fieldManager')->resetToDefault($data->scope, $data->name);
$this->getContainer()->get('dataManager')->rebuildMetadata();
return true;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,8 +31,11 @@ namespace Espo\Controllers;
class I18n extends \Espo\Core\Controllers\Base
{
public function actionRead($params, $data)
public function actionRead($params, $data, $request)
{
if ($request->get('default')) {
return $this->getContainer()->get('defaultLanguage')->getAll();
}
return $this->getContainer()->get('language')->getAll();
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -101,24 +101,24 @@ class Import extends \Espo\Core\Controllers\Record
public function actionRevert($params, $data, $request)
{
if (empty($data['id'])) {
if (empty($data->id)) {
throw new BadRequest();
}
if (!$request->isPost()) {
throw new BadRequest();
}
return $this->getService('Import')->revert($data['id']);
return $this->getService('Import')->revert($data->id);
}
public function actionRemoveDuplicates($params, $data, $request)
{
if (empty($data['id'])) {
if (empty($data->id)) {
throw new BadRequest();
}
if (!$request->isPost()) {
throw new BadRequest();
}
return $this->getService('Import')->removeDuplicates($data['id']);
return $this->getService('Import')->removeDuplicates($data->id);
}
public function actionCreate($params, $data, $request)
@@ -127,87 +127,90 @@ class Import extends \Espo\Core\Controllers\Record
throw new BadRequest();
}
if (!isset($data['fieldDelimiter'])) {
if (!isset($data->fieldDelimiter)) {
throw new BadRequest();
}
if (!isset($data['textQualifier'])) {
if (!isset($data->textQualifier)) {
throw new BadRequest();
}
if (!isset($data['dateFormat'])) {
if (!isset($data->dateFormat)) {
throw new BadRequest();
}
if (!isset($data['timeFormat'])) {
if (!isset($data->timeFormat)) {
throw new BadRequest();
}
if (!isset($data['personNameFormat'])) {
if (!isset($data->personNameFormat)) {
throw new BadRequest();
}
if (!isset($data['decimalMark'])) {
if (!isset($data->decimalMark)) {
throw new BadRequest();
}
if (!isset($data['defaultValues'])) {
if (!isset($data->defaultValues)) {
throw new BadRequest();
}
if (!isset($data['action'])) {
if (!isset($data->action)) {
throw new BadRequest();
}
if (!isset($data['attachmentId'])) {
if (!isset($data->attachmentId)) {
throw new BadRequest();
}
if (!isset($data['entityType'])) {
if (!isset($data->entityType)) {
throw new BadRequest();
}
if (!isset($data->fields)) {
throw new BadRequest();
}
$timezone = 'UTC';
if (isset($data['timezone'])) {
$timezone = $data['timezone'];
if (isset($data->timezone)) {
$timezone = $data->timezone;
}
$importParams = array(
'headerRow' => !empty($data['headerRow']),
'fieldDelimiter' => $data['fieldDelimiter'],
'textQualifier' => $data['textQualifier'],
'dateFormat' => $data['dateFormat'],
'timeFormat' => $data['timeFormat'],
'headerRow' => !empty($data->headerRow),
'fieldDelimiter' => $data->fieldDelimiter,
'textQualifier' => $data->textQualifier,
'dateFormat' => $data->dateFormat,
'timeFormat' => $data->timeFormat,
'timezone' => $timezone,
'personNameFormat' => $data['personNameFormat'],
'decimalMark' => $data['decimalMark'],
'currency' => $data['currency'],
'defaultValues' => $data['defaultValues'],
'action' => $data['action'],
'skipDuplicateChecking' => !empty($data['skipDuplicateChecking']),
'idleMode' => !empty($data['idleMode'])
'personNameFormat' => $data->personNameFormat,
'decimalMark' => $data->decimalMark,
'currency' => $data->currency,
'defaultValues' => $data->defaultValues,
'action' => $data->action,
'skipDuplicateChecking' => !empty($data->skipDuplicateChecking),
'idleMode' => !empty($data->idleMode)
);
if (array_key_exists('updateBy', $data)) {
$importParams['updateBy'] = $data['updateBy'];
if (property_exists($data, 'updateBy')) {
$importParams['updateBy'] = $data->updateBy;
}
$attachmentId = $data['attachmentId'];
$attachmentId = $data->attachmentId;
if (!$this->getAcl()->check($data['entityType'], 'edit')) {
if (!$this->getAcl()->check($data->entityType, 'edit')) {
throw new Forbidden();
}
return $this->getService('Import')->import($data['entityType'], $data['fields'], $attachmentId, $importParams);
return $this->getService('Import')->import($data->entityType, $data->fields, $attachmentId, $importParams);
}
public function postActionUnmarkAsDuplicate($params, $data)
{
if (empty($data['id']) || empty($data['entityType']) || empty($data['entityId'])) {
if (empty($data->id) || empty($data->entityType) || empty($data->entityId)) {
throw new BadRequest();
}
$this->getService('Import')->unmarkAsDuplicate($data['id'], $data['entityType'], $data['entityId']);
$this->getService('Import')->unmarkAsDuplicate($data->id, $data->entityType, $data->entityId);
return true;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -59,15 +59,15 @@ class InboundEmail extends \Espo\Core\Controllers\Record
throw new BadRequest();
}
if (is_null($data['password'])) {
$inboundEmail = $this->getEntityManager()->getEntity('InboundEmail', $data['id']);
if (!$inboundEmail) {
if (is_null($data->password)) {
$inboundEmail = $this->getEntityManager()->getEntity('InboundEmail', $data->id);
if (!$inboundEmail || !$inboundEmail->id) {
throw new Error();
}
$data['password'] = $this->getContainer()->get('crypt')->decrypt($inboundEmail->get('password'));
$data->password = $this->getContainer()->get('crypt')->decrypt($inboundEmail->get('password'));
}
return $this->getRecordService()->testConnection($data);
return $this->getRecordService()->testConnection(get_object_vars($data));
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -79,7 +79,6 @@ class Integration extends \Espo\Core\Controllers\Record
$this->getConfig()->save();
return $entity->toArray();
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -76,4 +76,3 @@ class Job extends \Espo\Core\Controllers\Record
throw new Forbidden();
}
}

View File

@@ -0,0 +1,78 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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\Controllers;
use Espo\Core\Utils as Utils;
use \Espo\Core\Exceptions\NotFound;
use \Espo\Core\Exceptions\Error;
use \Espo\Core\Exceptions\Forbidden;
use \Espo\Core\Exceptions\BadRequest;
class LabelManager extends \Espo\Core\Controllers\Base
{
protected function checkControllerAccess()
{
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
}
public function postActionGetScopeList($params)
{
$labelManager = $this->getContainer()->get('injectableFactory')->createByClassName('\\Espo\\Core\\Utils\\LabelManager');
return $labelManager->getScopeList();
}
public function postActionGetScopeData($params, $data, $request)
{
if (empty($data->scope) || empty($data->language)) {
throw new BadRequest();
}
$labelManager = $this->getContainer()->get('injectableFactory')->createByClassName('\\Espo\\Core\\Utils\\LabelManager');
return $labelManager->getScopeData($data->language, $data->scope);
}
public function postActionSaveLabels($params, $data)
{
if (empty($data->scope) || empty($data->language) || !isset($data->labels)) {
throw new BadRequest();
}
$labels = get_object_vars($data->labels);
$labelManager = $this->getContainer()->get('injectableFactory')->createByClassName('\\Espo\\Core\\Utils\\LabelManager');
$returnData = $labelManager->saveLabels($data->language, $data->scope, $labels);
$this->getContainer()->get('dataManager')->clearCache();
return $returnData;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -48,6 +48,10 @@ class Layout extends \Espo\Core\Controllers\Base
public function actionUpdate($params, $data, $request)
{
if (is_object($data)) {
$data = get_object_vars($data);
}
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
@@ -79,10 +83,10 @@ class Layout extends \Espo\Core\Controllers\Base
if (!$request->isPost()) {
throw new BadRequest();
}
if (empty($data['scope']) || empty($data['name'])) {
if (empty($data->scope) || empty($data->name)) {
throw new BadRequest();
}
return $this->getContainer()->get('layout')->resetToDefault($data['scope'], $data['name']);
return $this->getContainer()->get('layout')->resetToDefault($data->scope, $data->name);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -93,11 +93,11 @@ class Preferences extends \Espo\Core\Controllers\Base
}
foreach ($this->getAcl()->getScopeForbiddenAttributeList('Preferences', 'edit') as $attribute) {
unset($data[$attribute]);
unset($data->$attribute);
}
if (array_key_exists('smtpPassword', $data)) {
$data['smtpPassword'] = $this->getCrypt()->encrypt($data['smtpPassword']);
if (property_exists($data, 'smtpPassword')) {
$data->smtpPassword = $this->getCrypt()->encrypt($data->smtpPassword);
}
$user = $this->getEntityManager()->getEntity('User', $userId);
@@ -113,7 +113,7 @@ class Preferences extends \Espo\Core\Controllers\Base
$entity->clear('smtpPassword');
return $entity->toArray();
return $entity->getValueMap();
}
throw new Error();
}
@@ -140,7 +140,7 @@ class Preferences extends \Espo\Core\Controllers\Base
$entity->clear($attribute);
}
return $entity->toArray();
return $entity->getValueMap();
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -38,4 +38,3 @@ class ScheduledJob extends \Espo\Core\Controllers\Record
}
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -46,7 +46,7 @@ class Settings extends \Espo\Core\Controllers\Base
$fieldDefs = $this->getMetadata()->get('entityDefs.Settings.fields');
foreach ($fieldDefs as $field => $d) {
if ($d['type'] == 'password') {
if ($d['type'] === 'password') {
unset($data[$field]);
}
}
@@ -76,7 +76,11 @@ class Settings extends \Espo\Core\Controllers\Base
throw new BadRequest();
}
if (isset($data['useCache']) && $data['useCache'] != $this->getConfig()->get('useCache')) {
if (
(isset($data->useCache) && $data->useCache !== $this->getConfig()->get('useCache'))
||
(isset($data->aclStrictMode) && $data->aclStrictMode !== $this->getConfig()->get('aclStrictMode'))
) {
$this->getContainer()->get('dataManager')->clearCache();
}
@@ -86,11 +90,9 @@ class Settings extends \Espo\Core\Controllers\Base
throw new Error('Cannot save settings');
}
/** Rebuild for Currency Settings */
if (isset($data['baseCurrency']) || isset($data['currencyRates'])) {
$this->getContainer()->get('dataManager')->rebuildDatabase(array());
if (isset($data->defaultCurrency) || isset($data->baseCurrency) || isset($data->currencyRates)) {
$this->getContainer()->get('dataManager')->rebuildDatabase([]);
}
/** END Rebuild for Currency Settings */
return $this->getConfigData();
}
@@ -101,10 +103,12 @@ class Settings extends \Espo\Core\Controllers\Base
throw new Forbidden();
}
if (!isset($data['password'])) {
$data['password'] = $this->getConfig()->get('ldapPassword');
if (!isset($data->password)) {
$data->password = $this->getConfig()->get('ldapPassword');
}
$data = get_object_vars($data);
$ldapUtils = new \Espo\Core\Utils\Authentication\LDAP\Utils();
$options = $ldapUtils->normalizeOptions($data);

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,6 +31,4 @@ namespace Espo\Controllers;
class Team extends \Espo\Core\Controllers\Record
{
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -35,4 +35,3 @@ class Template extends \Espo\Core\Controllers\Record
{
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -57,20 +57,20 @@ class User extends \Espo\Core\Controllers\Record
public function postActionChangeOwnPassword($params, $data, $request)
{
if (!array_key_exists('password', $data) || !array_key_exists('currentPassword', $data)) {
if (!property_exists($data, 'password') || !property_exists($data, 'currentPassword')) {
throw new BadRequest();
}
return $this->getService('User')->changePassword($this->getUser()->id, $data['password'], true, $data['currentPassword']);
return $this->getService('User')->changePassword($this->getUser()->id, $data->password, true, $data->currentPassword);
}
public function postActionChangePasswordByRequest($params, $data, $request)
{
if (empty($data['requestId']) || empty($data['password'])) {
if (empty($data->requestId) || empty($data->password)) {
throw new BadRequest();
}
$p = $this->getEntityManager()->getRepository('PasswordChangeRequest')->where(array(
'requestId' => $data['requestId']
'requestId' => $data->requestId
))->findOne();
if (!$p) {
@@ -83,7 +83,7 @@ class User extends \Espo\Core\Controllers\Record
$this->getEntityManager()->removeEntity($p);
if ($this->getService('User')->changePassword($userId, $data['password'])) {
if ($this->getService('User')->changePassword($userId, $data->password)) {
return array(
'url' => $p->get('url')
);
@@ -92,15 +92,15 @@ class User extends \Espo\Core\Controllers\Record
public function postActionPasswordChangeRequest($params, $data, $request)
{
if (empty($data['userName']) || empty($data['emailAddress'])) {
if (empty($data->userName) || empty($data->emailAddress)) {
throw new BadRequest();
}
$userName = $data['userName'];
$emailAddress = $data['emailAddress'];
$userName = $data->userName;
$emailAddress = $data->emailAddress;
$url = null;
if (!empty($data['url'])) {
$url = $data['url'];
if (!empty($data->url)) {
$url = $data->url;
}
return $this->getService('User')->passwordChangeRequest($userName, $emailAddress, $url);

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -217,7 +217,7 @@ class Base implements Injectable
}
}
if ($entity->hasAttribute('assignedUsersIds') && $entity->hasRelation('assignedUsers')) {
if ($entity->hasLinkMultipleField('assignedUsers')) {
if ($entity->hasLinkMultipleId('assignedUsers', $user->id)) {
return true;
}
@@ -260,7 +260,11 @@ class Base implements Injectable
if (is_object($data)) {
if ($data->edit !== 'no' || $data->create !== 'no') {
if ($entity->has('createdById') && $entity->get('createdById') == $user->id) {
if (
$this->getConfig()->get('aclAllowDeleteCreated')
&&
$entity->has('createdById') && $entity->get('createdById') == $user->id
) {
if (!$entity->has('assignedUserId')) {
return true;
} else {

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -59,13 +59,9 @@ class Table
protected $fieldLevelList = ['yes', 'no'];
protected $valuePermissionList = ['assignmentPermission', 'userPermission', 'portalPermission'];
protected $valuePermissionHighestLevels = array();
protected $valuePrtmissionHighestLevels = array(
'assignmentPermission' => 'all',
'userPermission' => 'all',
'portalPermission' => 'yes'
);
protected $valuePermissionList = [];
private $fileManager;
@@ -77,6 +73,10 @@ class Table
protected $forbiddenFieldsCache = array();
protected $isStrictModeForced = false;
protected $isStrictMode = false;
public function __construct(User $user, Config $config = null, FileManager $fileManager = null, Metadata $metadata = null, FieldManagerUtil $fieldManager = null)
{
$this->data = (object) [
@@ -85,6 +85,12 @@ class Table
'fieldTableQuickAccess' => (object) [],
];
if ($this->isStrictModeForced) {
$this->isStrictMode = true;
} else {
$this->isStrictMode = $config->get('aclStrictMode', false);
}
$this->user = $user;
$this->metadata = $metadata;
@@ -100,7 +106,8 @@ class Table
if ($fileManager) {
$this->fileManager = $fileManager;
}
$this->valuePermissionList = $this->metadata->get('app.' . $this->type . '.defs.valuePermissionList', $this->valuePermissionList);
$this->valuePermissionList = $this->metadata->get(['app', $this->type, 'valuePermissionList'], []);
$this->valuePermissionHighestLevels = $this->metadata->get(['app', $this->type, 'valuePermissionHighestLevels'], array());
$this->initCacheFilePath();
@@ -135,11 +142,6 @@ class Table
return $this->fieldManager;
}
protected function getConfig()
{
return $this->config;
}
public function getMap()
{
return $this->data;
@@ -167,7 +169,7 @@ class Table
if (isset($this->data->$permission)) {
return $this->data->$permission;
}
return null;
return 'no';
}
public function getLevel($scope, $action)
@@ -208,6 +210,7 @@ class Table
$this->applyDisabled($aclTable, $fieldTable);
$this->applyMandatory($aclTable, $fieldTable);
$this->applyAdditional($aclTable, $fieldTable, $valuePermissionLists);
$this->applyReadOnlyFields($fieldTable);
} else {
$aclTable = (object) [];
foreach ($this->getScopeList() as $scope) {
@@ -242,8 +245,12 @@ class Table
$this->fillFieldTableQuickAccess();
if (!$this->getUser()->isAdmin()) {
$permissionsDefaultsGroupName = 'permissionsDefaults';
if ($this->isStrictMode) {
$permissionsDefaultsGroupName = 'permissionsStrictDefaults';
}
foreach ($this->valuePermissionList as $permission) {
$this->data->$permission = $this->mergeValueList($valuePermissionLists->$permission, $this->metadata->get('app.'.$this->type.'.default.' . $permission, 'yes'));
$this->data->$permission = $this->mergeValueList($valuePermissionLists->$permission, $this->metadata->get(['app', $this->type, $permissionsDefaultsGroupName, $permission, 'yes']));
if ($this->metadata->get('app.'.$this->type.'.mandatory.' . $permission)) {
$this->data->$permission = $this->metadata->get('app.'.$this->type.'.mandatory.' . $permission);
}
@@ -251,8 +258,8 @@ class Table
} else {
foreach ($this->valuePermissionList as $permission) {
if (isset($this->valuePrtmissionHighestLevels[$permission])) {
$this->data->$permission = $this->valuePrtmissionHighestLevels[$permission];
if (isset($this->valuePermissionHighestLevels[$permission])) {
$this->data->$permission = $this->valuePermissionHighestLevels[$permission];
continue;
}
$this->data->$permission = 'all';
@@ -405,7 +412,12 @@ class Table
return;
}
$data = $this->metadata->get('app.'.$this->type.'.default.scopeLevel', array());
$defaultsGroupName = 'default';
if ($this->isStrictMode) {
$defaultsGroupName = 'strictDefault';
}
$data = $this->metadata->get(['app', $this->type, $defaultsGroupName, 'scopeLevel'], []);
foreach ($data as $scope => $item) {
if (isset($table->$scope)) continue;
@@ -416,7 +428,7 @@ class Table
$table->$scope = $value;
}
$defaultFieldData = $this->metadata->get('app.'.$this->type.'.default.fieldLevel', array());
$defaultFieldData = $this->metadata->get(['app', $this->type, $defaultsGroupName, 'fieldLevel'], []);
foreach ($this->getScopeList() as $scope) {
if (isset($table->$scope) && $table->$scope === false) continue;
@@ -424,7 +436,7 @@ class Table
$fieldList = array_keys($this->getMetadata()->get("entityDefs.{$scope}.fields", []));
$defaultScopeFieldData = $this->metadata->get('app.'.$this->type.'.default.scopeFieldLevel.' . $scope, array());
$defaultScopeFieldData = $this->metadata->get('app.'.$this->type.'.'.$defaultsGroupName.'.scopeFieldLevel.' . $scope, []);
foreach (array_merge($defaultFieldData, $defaultScopeFieldData) as $field => $f) {
if (!in_array($field, $fieldList)) continue;
@@ -454,7 +466,11 @@ class Table
$aclType = $this->defaultAclType;
}
if (!empty($aclType)) {
$defaultValue = $this->metadata->get('app.'.$this->type.'.scopeLevelTypesDefaults.' . $aclType, $this->metadata->get('app.'.$this->type.'.scopeLevelTypesDefaults.record'));
$paramDefaultsName = 'scopeLevelTypesDefaults';
if ($this->isStrictMode) {
$paramDefaultsName = 'scopeLevelTypesStrictDefaults';
}
$defaultValue = $this->metadata->get(['app', $this->type, $paramDefaultsName, $aclType], $this->metadata->get(['app', $this->type, $paramDefaultsName, 'record']));
if (is_array($defaultValue)) {
$defaultValue = (object) $defaultValue;
}
@@ -698,25 +714,29 @@ class Table
private function buildCache()
{
$this->fileManager->putPhpContents($this->cacheFilePath, $this->data, true);
/*$contents = '<' . '?'. 'php return ' . $this->varExport($this->data) . ';';
$this->fileManager->putContents($this->cacheFilePath, $contents);*/
}
/*private function varExport($variable)
protected function applyReadOnlyFields(&$fieldTable)
{
if ($variable instanceof \StdClass) {
$result = '(object) ' . $this->varExport(get_object_vars($variable), true);
} else if (is_array($variable)) {
$array = array();
foreach ($variable as $key => $value) {
$array[] = var_export($key, true).' => ' . $this->varExport($value, true);
// TODO Enable in 5.4.0
return;
$scopeList = $this->getScopeWithAclList();
foreach ($scopeList as $scope) {
if (!property_exists($fieldTable, $scope)) continue;
$fieldList = array_keys($this->getMetadata()->get(['entityDefs', $scope, 'fields'], []));
foreach ($fieldList as $field) {
if ($this->getMetadata()->get(['entityDefs', $scope, 'fields', $field, 'readOnly'])) {
if (property_exists($fieldTable->$scope, $field)) {
$fieldTable->$scope->$field->edit = 'no';
} else {
$fieldTable->$scope->$field = (object) [];
foreach ($this->fieldActionList as $action) {
$fieldTable->$scope->$field->$action = 'yes';
}
$fieldTable->$scope->$field->edit = 'no';
}
}
}
$result = '['.implode(', ', $array).']';
} else {
$result = var_export($variable, true);
}
return $result;
}*/
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -47,6 +47,8 @@ class AclManager
protected $tableClassName = '\\Espo\\Core\\Acl\\Table';
protected $userAclClassName = '\\Espo\\Core\\Acl';
public function __construct(Container $container)
{
$this->container = $container;
@@ -279,5 +281,11 @@ class AclManager
{
return $this->checkUserPermission($user, $target, 'assignmentPermission');
}
}
public function createUserAcl(User $user)
{
$className = $this->userAclClassName;
$acl = new $className($this, $user);
return $acl;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -50,7 +50,7 @@ class Table extends \Espo\Core\Acl\Table
protected $levelList = ['yes', 'all', 'account', 'contact', 'own', 'no'];
protected $valuePermissionList = [];
protected $isStrictModeForced = true;
public function __construct(User $user, Portal $portal, Config $config = null, FileManager $fileManager = null, Metadata $metadata = null, FieldManagerUtil $fieldManager = null)
{

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -91,6 +91,7 @@ class Application
public function runClient()
{
$this->getContainer()->get('clientManager')->display();
exit;
}
public function runEntryPoint($entryPoint, $data = array(), $final = false)
@@ -134,7 +135,7 @@ class Application
public function runCron()
{
$auth = $this->createAuth();
$auth->useNoAuth(true);
$auth->useNoAuth();
$cronManager = new \Espo\Core\CronManager($this->container);
$cronManager->run();
@@ -327,6 +328,7 @@ class Application
public function setupSystemUser()
{
$user = $this->getContainer()->get('entityManager')->getEntity('User', 'system');
$user->set('isAdmin', true);
$this->getContainer()->setUser($user);
$this->getContainer()->get('entityManager')->setUser($user);
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -93,6 +93,24 @@ class Container
return $className;
}
protected function loadContainer()
{
return $this;
}
protected function loadSlim()
{
return new \Espo\Core\Utils\Api\Slim();
}
protected function loadFileStorageManager()
{
return new \Espo\Core\FileStorage\Manager(
$this->get('metadata')->get(['app', 'fileStorage', 'implementationClassNameMap']),
$this
);
}
protected function loadLog()
{
$config = $this->get('config');
@@ -118,24 +136,6 @@ class Container
return $log;
}
protected function loadContainer()
{
return $this;
}
protected function loadSlim()
{
return new \Espo\Core\Utils\Api\Slim();
}
protected function loadFileStorageManager()
{
return new \Espo\Core\FileStorage\Manager(
$this->get('metadata')->get(['app', 'fileStorage', 'implementationClassNameMap']),
$this
);
}
protected function loadFileManager()
{
return new \Espo\Core\Utils\File\Manager(
@@ -217,7 +217,8 @@ class Container
$this->get('acl'),
$this->get('aclManager'),
$this->get('metadata'),
$this->get('config')
$this->get('config'),
$this->get('injectableFactory')
);
}
@@ -295,10 +296,20 @@ class Container
);
}
protected function loadBaseLanguage()
{
return new \Espo\Core\Utils\Language(
'en_US',
$this->get('fileManager'),
$this->get('metadata'),
$this->get('useCache')
);
}
protected function loadDefaultLanguage()
{
return new \Espo\Core\Utils\Language(
null,
\Espo\Core\Utils\Language::detectLanguage($this->get('config')),
$this->get('fileManager'),
$this->get('metadata'),
$this->get('useCache')
@@ -329,8 +340,6 @@ class Container
protected function loadFieldManager()
{
return new \Espo\Core\Utils\FieldManager(
$this->get('metadata'),
$this->get('language'),
$this
);
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -60,9 +60,9 @@ class ControllerManager
public function process($controllerName, $actionName, $params, $data, $request)
{
$customeClassName = '\\Espo\\Custom\\Controllers\\' . Util::normilizeClassName($controllerName);
if (class_exists($customeClassName)) {
$controllerClassName = $customeClassName;
$customClassName = '\\Espo\\Custom\\Controllers\\' . Util::normilizeClassName($controllerName);
if (class_exists($customClassName)) {
$controllerClassName = $customClassName;
} else {
$moduleName = $this->metadata->getScopeModuleName($controllerName);
if ($moduleName) {
@@ -76,11 +76,6 @@ class ControllerManager
$data = json_decode($data);
}
if ($data instanceof \stdClass) {
$data = get_object_vars($data);
}
if (!class_exists($controllerClassName)) {
throw new NotFound("Controller '$controllerName' is not found");
}
@@ -109,6 +104,13 @@ class ControllerManager
throw new NotFound("Action '$actionName' (".$request->getMethod().") does not exist in controller '$controllerName'");
}
// TODO Remove in 5.1.0
if ($data instanceof \stdClass) {
if ($this->getMetadata()->get(['app', 'deprecatedControllerActions', $controllerName, $primaryActionMethodName])) {
$data = get_object_vars($data);
}
}
if (method_exists($controller, $beforeMethodName)) {
$controller->$beforeMethodName($params, $data, $request);
}
@@ -125,6 +127,4 @@ class ControllerManager
return $result;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -73,7 +73,7 @@ class Record extends Base
throw new NotFound();
}
return $entity->toArray();
return $entity->getValueMap();
}
public function actionPatch($params, $data, $request)
@@ -94,7 +94,7 @@ class Record extends Base
$service = $this->getRecordService();
if ($entity = $service->createEntity($data)) {
return $entity->toArray();
return $entity->getValueMap();
}
throw new Error();
@@ -113,7 +113,7 @@ class Record extends Base
$id = $params['id'];
if ($entity = $this->getRecordService()->updateEntity($id, $data)) {
return $entity->toArray();
return $entity->getValueMap();
}
throw new Error();
@@ -156,10 +156,52 @@ class Record extends Base
return array(
'total' => $result['total'],
'list' => isset($result['collection']) ? $result['collection']->toArray() : $result['list']
'list' => isset($result['collection']) ? $result['collection']->getValueMapList() : $result['list']
);
}
public function getActionListKanban($params, $data, $request)
{
if (!$this->getAcl()->check($this->name, 'read')) {
throw new Forbidden();
}
$where = $request->get('where');
$offset = $request->get('offset');
$maxSize = $request->get('maxSize');
$asc = $request->get('asc', 'true') === 'true';
$sortBy = $request->get('sortBy');
$q = $request->get('q');
$textFilter = $request->get('textFilter');
if (empty($maxSize)) {
$maxSize = self::MAX_SIZE_LIMIT;
}
if (!empty($maxSize) && $maxSize > self::MAX_SIZE_LIMIT) {
throw new Forbidden("Max should should not exceed " . self::MAX_SIZE_LIMIT . ". Use pagination (offset, limit).");
}
$params = array(
'where' => $where,
'offset' => $offset,
'maxSize' => $maxSize,
'asc' => $asc,
'sortBy' => $sortBy,
'q' => $q,
'textFilter' => $textFilter
);
$this->fetchListParamsFromRequest($params, $request, $data);
$result = $this->getRecordService()->getListKanban($params);
return (object) [
'total' => $result->total,
'list' => $result->collection->getValueMapList(),
'additionalData' => $result->additionalData
];
}
protected function fetchListParamsFromRequest(&$params, $request, $data)
{
if ($request->get('primaryFilter')) {
@@ -209,7 +251,7 @@ class Record extends Base
return array(
'total' => $result['total'],
'list' => isset($result['collection']) ? $result['collection']->toArray() : $result['list']
'list' => isset($result['collection']) ? $result['collection']->getValueMapList() : $result['list']
);
}
@@ -237,14 +279,18 @@ class Record extends Base
throw new Forbidden();
}
if ($this->getAcl()->get('exportPermission') !== 'yes' && !$this->getUser()->isAdmin()) {
throw new Forbidden();
}
if (!$this->getAcl()->check($this->name, 'read')) {
throw new Forbidden();
}
$ids = isset($data['ids']) ? $data['ids'] : null;
$where = isset($data['where']) ? json_decode(json_encode($data['where']), true) : null;
$byWhere = isset($data['byWhere']) ? $data['byWhere'] : false;
$selectData = isset($data['selectData']) ? json_decode(json_encode($data['selectData']), true) : null;
$ids = isset($data->ids) ? $data->ids : null;
$where = isset($data->where) ? json_decode(json_encode($data->where), true) : null;
$byWhere = isset($data->byWhere) ? $data->byWhere : false;
$selectData = isset($data->selectData) ? json_decode(json_encode($data->selectData), true) : null;
$params = array();
if ($byWhere) {
@@ -254,16 +300,16 @@ class Record extends Base
$params['ids'] = $ids;
}
if (isset($data['attributeList'])) {
$params['attributeList'] = $data['attributeList'];
if (isset($data->attributeList)) {
$params['attributeList'] = $data->attributeList;
}
if (isset($data['fieldList'])) {
$params['fieldList'] = $data['fieldList'];
if (isset($data->fieldList)) {
$params['fieldList'] = $data->fieldList;
}
if (isset($data['format'])) {
$params['format'] = $data['format'];
if (isset($data->format)) {
$params['format'] = $data->format;
}
return array(
@@ -280,21 +326,21 @@ class Record extends Base
if (!$this->getAcl()->check($this->name, 'edit')) {
throw new Forbidden();
}
if (empty($data['attributes'])) {
if (empty($data->attributes)) {
throw new BadRequest();
}
$params = array();
if (array_key_exists('where', $data) && !empty($data['byWhere'])) {
$params['where'] = json_decode(json_encode($data['where']), true);
if (array_key_exists('selectData', $data)) {
$params['selectData'] = json_decode(json_encode($data['selectData']), true);
if (property_exists($data, 'where') && !empty($data->byWhere)) {
$params['where'] = json_decode(json_encode($data->where), true);
if (property_exists($data, 'selectData')) {
$params['selectData'] = json_decode(json_encode($data->selectData), true);
}
} else if (array_key_exists('ids', $data)) {
$params['ids'] = $data['ids'];
} else if (property_exists($data, 'ids')) {
$params['ids'] = $data->ids;
}
$attributes = $data['attributes'];
$attributes = $data->attributes;
$idsUpdated = $this->getRecordService()->massUpdate($attributes, $params);
@@ -311,15 +357,15 @@ class Record extends Base
}
$params = array();
if (array_key_exists('where', $data) && !empty($data['byWhere'])) {
$where = json_decode(json_encode($data['where']), true);
if (property_exists($data, 'where') && !empty($data->byWhere)) {
$where = json_decode(json_encode($data->where), true);
$params['where'] = $where;
if (array_key_exists('selectData', $data)) {
$params['selectData'] = json_decode(json_encode($data['selectData']), true);
if (property_exists($data, 'selectData')) {
$params['selectData'] = json_decode(json_encode($data->selectData), true);
}
}
if (array_key_exists('ids', $data)) {
$params['ids'] = $data['ids'];
if (property_exists($data, 'ids')) {
$params['ids'] = $data->ids;
}
return $this->getRecordService()->massRemove($params);
@@ -338,25 +384,25 @@ class Record extends Base
$id = $params['id'];
$link = $params['link'];
if (!empty($data['massRelate'])) {
if (!is_array($data['where'])) {
if (!empty($data->massRelate)) {
if (!is_array($data->where)) {
throw new BadRequest();
}
$where = json_decode(json_encode($data['where']), true);
$where = json_decode(json_encode($data->where), true);
$selectData = null;
if (isset($data['selectData']) && is_array($data['selectData'])) {
$selectData = json_decode(json_encode($data['selectData']), true);
if (isset($data->selectData) && is_array($data->selectData)) {
$selectData = json_decode(json_encode($data->selectData), true);
}
return $this->getRecordService()->linkEntityMass($id, $link, $where, $selectData);
} else {
$foreignIdList = array();
if (isset($data['id'])) {
$foreignIdList[] = $data['id'];
if (isset($data->id)) {
$foreignIdList[] = $data->id;
}
if (isset($data['ids']) && is_array($data['ids'])) {
foreach ($data['ids'] as $foreignId) {
if (isset($data->ids) && is_array($data->ids)) {
foreach ($data->ids as $foreignId) {
$foreignIdList[] = $foreignId;
}
}
@@ -388,18 +434,18 @@ class Record extends Base
throw new BadRequest();
}
$foreignIds = array();
if (isset($data['id'])) {
$foreignIds[] = $data['id'];
$foreignIdList = [];
if (isset($data->id)) {
$foreignIdList[] = $data->id;
}
if (isset($data['ids']) && is_array($data['ids'])) {
foreach ($data['ids'] as $foreignId) {
$foreignIds[] = $foreignId;
if (isset($data->ids) && is_array($data->ids)) {
foreach ($data->ids as $foreignId) {
$foreignIdList[] = $foreignId;
}
}
$result = false;
foreach ($foreignIds as $foreignId) {
foreach ($foreignIdList as $foreignId) {
if ($this->getRecordService()->unlinkEntity($id, $link, $foreignId)) {
$result = $result || true;
}
@@ -441,12 +487,12 @@ class Record extends Base
throw new BadRequest();
}
if (empty($data['targetId']) || empty($data['sourceIds']) || !is_array($data['sourceIds']) || !($data['attributes'] instanceof \StdClass)) {
if (empty($data->targetId) || empty($data->sourceIds) || !is_array($data->sourceIds) || !($data->attributes instanceof \StdClass)) {
throw new BadRequest();
}
$targetId = $data['targetId'];
$sourceIds = $data['sourceIds'];
$attributes = get_object_vars($data['attributes']);
$targetId = $data->targetId;
$sourceIds = $data->sourceIds;
$attributes = $data->attributes;
if (!$this->getAcl()->check($this->name, 'edit')) {
throw new Forbidden();
@@ -457,7 +503,7 @@ class Record extends Base
public function postActionGetDuplicateAttributes($params, $data, $request)
{
if (empty($data['id'])) {
if (empty($data->id)) {
throw new BadRequest();
}
@@ -468,7 +514,7 @@ class Record extends Base
throw new Forbidden();
}
return $this->getRecordService()->getDuplicateAttributes($data['id']);
return $this->getRecordService()->getDuplicateAttributes($data->id);
}
public function postActionMassFollow($params, $data, $request)
@@ -477,8 +523,8 @@ class Record extends Base
throw new Forbidden();
}
if (array_key_exists('ids', $data)) {
$params['ids'] = $data['ids'];
if (property_exists($data, 'ids')) {
$params['ids'] = $data->ids;
}
return $this->getRecordService()->massFollow($params);
@@ -490,11 +536,10 @@ class Record extends Base
throw new Forbidden();
}
if (array_key_exists('ids', $data)) {
$params['ids'] = $data['ids'];
if (property_exists($data, 'ids')) {
$params['ids'] = $data->ids;
}
return $this->getRecordService()->massUnfollow($params);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -61,5 +61,15 @@ class RecordTree extends Record
'path' => $this->getRecordService()->getTreeItemPath($parentId)
);
}
}
public function getActionLastChildrenIdList($params, $data, $request)
{
if (!$this->getAcl()->check($this->name, 'read')) {
throw new Forbidden();
}
$parentId = $request->get('parentId');
return $this->getRecordService()->getLastChildrenIdList($parentId);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -44,6 +44,10 @@ class CronManager
private $scheduledJobUtil;
private $cronJobUtil;
private $cronScheduledJobUtil;
const PENDING = 'Pending';
const RUNNING = 'Running';
@@ -64,8 +68,8 @@ class CronManager
$this->serviceFactory = $this->container->get('serviceFactory');
$this->scheduledJobUtil = $this->container->get('scheduledJob');
$this->cronJob = new \Espo\Core\Utils\Cron\Job($this->config, $this->entityManager);
$this->cronScheduledJob = new \Espo\Core\Utils\Cron\ScheduledJob($this->config, $this->entityManager);
$this->cronJobUtil = new \Espo\Core\Utils\Cron\Job($this->config, $this->entityManager);
$this->cronScheduledJobUtil = new \Espo\Core\Utils\Cron\ScheduledJob($this->config, $this->entityManager);
}
protected function getContainer()
@@ -98,23 +102,24 @@ class CronManager
return $this->scheduledJobUtil;
}
protected function getCronJob()
protected function getCronJobUtil()
{
return $this->cronJob;
return $this->cronJobUtil;
}
protected function getCronScheduledJob()
protected function getCronScheduledJobUtil()
{
return $this->cronScheduledJob;
return $this->cronScheduledJobUtil;
}
protected function getLastRunTime()
{
$lastRunData = $this->getFileManager()->getPhpContents($this->lastRunTime);
$lastRunTime = time() - intval($this->getConfig()->get('cron.minExecutionTime')) - 1;
if (is_array($lastRunData) && !empty($lastRunData['time'])) {
$lastRunTime = $lastRunData['time'];
} else {
$lastRunTime = time() - intval($this->getConfig()->get('cronMinInterval', 0)) - 1;
}
return $lastRunTime;
@@ -132,9 +137,9 @@ class CronManager
{
$currentTime = time();
$lastRunTime = $this->getLastRunTime();
$minTime = $this->getConfig()->get('cron.minExecutionTime');
$cronMinInterval = $this->getConfig()->get('cronMinInterval', 0);
if ($currentTime > ($lastRunTime + $minTime) ) {
if ($currentTime > ($lastRunTime + $cronMinInterval)) {
return true;
}
@@ -155,58 +160,69 @@ class CronManager
$this->setLastRunTime(time());
$this->getCronJob()->markFailedJobs();
$this->getCronJob()->updateFailedJobAttempts();
$this->getCronJobUtil()->markFailedJobs();
$this->getCronJobUtil()->updateFailedJobAttempts();
$this->createJobsFromScheduledJobs();
$this->getCronJob()->removePendingJobDuplicates();
$this->getCronJobUtil()->removePendingJobDuplicates();
$pendingJobList = $this->getCronJob()->getPendingJobList();
$pendingJobList = $this->getCronJobUtil()->getPendingJobList();
foreach ($pendingJobList as $job) {
$jobEntity = $this->getEntityManager()->getEntity('Job', $job['id']);
$skip = false;
$this->getEntityManager()->getPdo()->query('LOCK TABLES `job` WRITE');
if ($this->getCronJobUtil()->isJobPending($job->id)) {
if ($job->get('scheduledJobId')) {
if ($this->getCronJobUtil()->isScheduledJobRunning($job->get('scheduledJobId'), $job->get('targetId'), $job->get('targetType'))) {
$skip = true;
}
}
} else {
$skip = true;
}
if (!isset($jobEntity)) {
$GLOBALS['log']->error('CronManager: empty Job entity ['.$job['id'].'].');
if ($skip) {
$this->getEntityManager()->getPdo()->query('UNLOCK TABLES');
continue;
}
$jobEntity->set('status', self::RUNNING);
$this->getEntityManager()->saveEntity($jobEntity);
$job->set('status', self::RUNNING);
$job->set('pid', $this->getCronJobUtil()->getPid());
$this->getEntityManager()->saveEntity($job);
$this->getEntityManager()->getPdo()->query('UNLOCK TABLES');
$isSuccess = true;
$skipLog = false;
try {
if (!empty($job['scheduled_job_id'])) {
if ($job->get('scheduledJobId')) {
$this->runScheduledJob($job);
} else {
$this->runService($job);
}
} catch (\Exception $e) {
$isSuccess = false;
$GLOBALS['log']->error('CronManager: Failed job running, job ['.$job['id'].']. Error Details: '.$e->getMessage());
if ($e->getCode() === -1) {
$job->set('attempts', 0);
$skipLog = true;
} else {
$GLOBALS['log']->error('CronManager: Failed job running, job ['.$job->id.']. Error Details: '.$e->getMessage());
}
}
$status = $isSuccess ? self::SUCCESS : self::FAILED;
$jobEntity->set('status', $status);
$this->getEntityManager()->saveEntity($jobEntity);
$job->set('status', $status);
$this->getEntityManager()->saveEntity($job);
if (!empty($job['scheduled_job_id'])) {
$this->getCronScheduledJob()->addLogRecord($job['scheduled_job_id'], $status, null, $job['target_id'], $job['target_type']);
if ($job->get('scheduledJobId') && !$skipLog) {
$this->getCronScheduledJobUtil()->addLogRecord($job->get('scheduledJobId'), $status, null, $job->get('targetId'), $job->get('targetType'));
}
}
}
/**
* Run Scheduled Job
*
* @param array $job
*
* @return void
*/
protected function runScheduledJob(array $job)
protected function runScheduledJob($job)
{
$jobName = $job['method'];
$jobName = $job->get('scheduledJobJob');
$className = $this->getScheduledJobUtil()->get($jobName);
if ($className === false) {
@@ -220,14 +236,12 @@ class CronManager
}
$data = null;
if (!empty($job['data'])) {
$data = $job['data'];
if (Json::isJSON($data)) {
$data = Json::decode($data, true);
}
if ($job->get('data')) {
$data = $job->get('data');
}
$jobClass->$method($data, $job['target_id'], $job['target_type']);
$jobClass->$method($data, $job->get('targetId'), $job->get('targetType'));
}
/**
@@ -237,92 +251,94 @@ class CronManager
*
* @return void
*/
protected function runService(array $job)
protected function runService($job)
{
$serviceName = $job['service_name'];
$serviceName = $job->get('serviceName');
if (!$serviceName) {
throw new Error('Job with empty serviceName.');
}
if (!$this->getServiceFactory()->checkExists($serviceName)) {
throw new NotFound();
}
$service = $this->getServiceFactory()->create($serviceName);
$serviceMethod = $job['method'];
if (!method_exists($service, $serviceMethod)) {
$methodNameDeprecated = $job->get('method');
$methodName = $job->get('methodName');
$isDeprecated = false;
if (!$methodName) {
$isDeprecated = true;
$methodName = $methodNameDeprecated;
}
if (!$methodName) {
throw new Error('Job with empty methodName.');
}
if (!method_exists($service, $methodName)) {
throw new NotFound();
}
$data = $job['data'];
if (Json::isJSON($data)) {
$data = Json::decode($data, true);
$data = $job->get('data');
if ($isDeprecated) {
$data = Json::decode(Json::encode($data), true);
}
$service->$serviceMethod($data, $job['target_id'], $job['target_type']);
$service->$methodName($data, $job->get('targetId'), $job->get('targetType'));
}
/**
* Check scheduled jobs and create related jobs
*
* @return array List of created Jobs
*/
protected function createJobsFromScheduledJobs()
{
$activeScheduledJobList = $this->getCronScheduledJob()->getActiveScheduledJobList();
$activeScheduledJobList = $this->getCronScheduledJobUtil()->getActiveScheduledJobList();
$runningScheduledJobIdList = $this->getCronJob()->getRunningScheduledJobIdList();
$runningScheduledJobIdList = $this->getCronJobUtil()->getRunningScheduledJobIdList();
$createdJobIdList = array();
foreach ($activeScheduledJobList as $scheduledJob) {
$scheduling = $scheduledJob['scheduling'];
$scheduling = $scheduledJob->get('scheduling');
try {
$cronExpression = \Cron\CronExpression::factory($scheduling);
} catch (\Exception $e) {
$GLOBALS['log']->error('CronManager (ScheduledJob ['.$scheduledJob['id'].']): Scheduling string error - '. $e->getMessage() . '.');
$GLOBALS['log']->error('CronManager (ScheduledJob ['.$scheduledJob->id.']): Scheduling string error - '. $e->getMessage() . '.');
continue;
}
try {
$previousDate = $cronExpression->getPreviousRunDate()->format('Y-m-d H:i:s');
$nextDate = $cronExpression->getNextRunDate()->format('Y-m-d H:i:s');
} catch (\Exception $e) {
$GLOBALS['log']->error('CronManager (ScheduledJob ['.$scheduledJob['id'].']): Unsupported CRON expression ['.$scheduling.']');
$GLOBALS['log']->error('CronManager (ScheduledJob ['.$scheduledJob->id.']): Unsupported CRON expression ['.$scheduling.']');
continue;
}
if ($cronExpression->isDue()) {
$previousDate = date('Y-m-d H:i:s');
}
$existingJob = $this->getCronJob()->getJobByScheduledJob($scheduledJob['id'], $previousDate);
$existingJob = $this->getCronJobUtil()->getJobByScheduledJob($scheduledJob->id, $nextDate);
if ($existingJob) continue;
$className = $this->getScheduledJobUtil()->get($scheduledJob['job']);
$className = $this->getScheduledJobUtil()->get($scheduledJob->get('job'));
if ($className) {
if (method_exists($className, 'prepare')) {
$implementation = new $className($this->container);
$implementation->prepare($scheduledJob, $previousDate);
$implementation->prepare($scheduledJob, $nextDate);
continue;
}
}
if (in_array($scheduledJob['id'], $runningScheduledJobIdList)) {
if (in_array($scheduledJob->id, $runningScheduledJobIdList)) {
continue;
}
$jobEntity = $this->getEntityManager()->getEntity('Job');
$jobEntity->set(array(
'name' => $scheduledJob['name'],
'name' => $scheduledJob->get('name'),
'status' => self::PENDING,
'scheduledJobId' => $scheduledJob['id'],
'executeTime' => $previousDate,
'method' => $scheduledJob['job']
'scheduledJobId' => $scheduledJob->id,
'executeTime' => $nextDate
));
$this->getEntityManager()->saveEntity($jobEntity);
$createdJobIdList[] = $jobEntity->id;
}
return $createdJobIdList;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -143,13 +143,17 @@ class DataManager
if ($job) {
$entityManager->removeEntity($job);
}
$name = $jobName;
if (!empty($defs['name'])) {
$name = $defs['name'];
}
$job = $entityManager->getEntity('ScheduledJob');
$job->set(array(
'job' => $jobName,
'status' => 'Active',
'scheduling' => $defs['scheduling'],
'isInternal' => true,
'name' => $jobName
'name' => $name
));
$entityManager->saveEntity($job);
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -31,19 +31,35 @@ namespace Espo\Core\Export;
use \Espo\Core\Exceptions\Error;
use \Espo\Core\ORM\Entity;
class Csv extends \Espo\Core\Injectable
{
protected $dependencyList = [
'config',
'preferences'
'preferences',
'metadata'
];
public function loadAdditionalFields(Entity $entity, $fieldList)
{
foreach ($fieldList as $field) {
if ($this->getInjection('metadata')->get(['entityDefs', $entity->getEntityType(), 'fields', $field, 'type']) === 'linkMultiple') {
if (!$entity->has($field . 'Ids')) {
$entity->loadLinkMultipleField($field);
}
}
}
}
public function process($entityType, $params, $dataList)
{
if (!is_array($params['attributeList'])) {
throw new Error();
}
$dataList = $this->prepareDataList($dataList);
$attributeList = $params['attributeList'];
$delimiter = $this->getInjection('preferences')->get('exportDelimiter');
@@ -62,4 +78,21 @@ class Csv extends \Espo\Core\Injectable
return $csv;
}
protected function prepareDataList($dataList)
{
$prepareDataList = [];
foreach ($dataList as $row) {
$preparedRow = [];
foreach ($row as $item) {
if (is_array($item) || is_object($item)) {
$item = \Espo\Core\Utils\Json::encode($item);
}
$preparedRow[] = $item;
}
$prepareDataList[] = $preparedRow;
}
return $prepareDataList;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -78,6 +78,27 @@ class Xlsx extends \Espo\Core\Injectable
}
}
}
foreach ($fieldList as $field) {
if ($this->getMetadata()->get(['entityDefs', $entity->getEntityType(), 'fields', $field, 'type']) === 'linkMultiple') {
if (!$entity->has($field . 'Ids')) {
$entity->loadLinkMultipleField($field);
}
}
}
}
public function filterFieldList($entityType, $fieldList, $exportAllFields)
{
if ($exportAllFields) {
foreach ($fieldList as $i => $field) {
$type = $this->getMetadata()->get(['entityDefs', $entityType, 'fields', $field, 'type']);
if (in_array($type, ['linkMultiple', 'attachmentMultiple'])) {
unset($fieldList[$i]);
}
}
}
return array_values($fieldList);
}
public function addAdditionalAttributes($entityType, &$attributeList, $fieldList)
@@ -123,7 +144,7 @@ class Xlsx extends \Espo\Core\Injectable
throw new Error();
}
$phpExcel = new \PHPExcel();
$phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$sheet = $phpExcel->setActiveSheetIndex(0);
if (isset($params['exportName'])) {
@@ -132,7 +153,7 @@ class Xlsx extends \Espo\Core\Injectable
$exportName = $this->getInjection('language')->translate($entityType, 'scopeNamesPlural');
}
$sheetName = substr($exportName, 0, 30);
$sheetName = mb_substr($exportName, 0, 30, 'utf-8');
$badCharList = ['*', ':', '/', '\\', '?', '[', ']'];
foreach ($badCharList as $badChar) {
$sheetName = str_replace($badCharList, ' ', $sheetName);
@@ -155,10 +176,11 @@ class Xlsx extends \Espo\Core\Injectable
)
);
$now = new \DateTime();
$now->setTimezone(new \DateTimeZone($this->getInjection('config')->get('timeZone', 'UTC')));
$sheet->setCellValue('A1', $exportName);
$sheet->setCellValue('B1', \PHPExcel_Shared_Date::PHPToExcel(strtotime(date('Y-m-d H:i:s'))));
$sheet->setCellValue('B1', \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel(strtotime($now->format('Y-m-d H:i:s'))));
$sheet->getStyle('A1')->applyFromArray($titleStyle);
$sheet->getStyle('B1')->applyFromArray($dateStyle);
@@ -195,9 +217,9 @@ class Xlsx extends \Espo\Core\Injectable
$label = $name;
if (strpos($name, '_') !== false) {
list($linkName, $foreignField) = explode('_', $name);
$foreigScope = $this->getInjection('metadata')->get(['entityDefs', $entityType, 'links', $linkName, 'entity']);
if ($foreigScope) {
$label = $this->getInjection('language')->translate($linkName, 'links', $entityType) . '.' . $this->getInjection('language')->translate($foreignField, 'fields', $foreigScope);
$foreignScope = $this->getInjection('metadata')->get(['entityDefs', $entityType, 'links', $linkName, 'entity']);
if ($foreignScope) {
$label = $this->getInjection('language')->translate($linkName, 'links', $entityType) . '.' . $this->getInjection('language')->translate($foreignField, 'fields', $foreignScope);
}
} else {
$label = $this->getInjection('language')->translate($name, 'fields', $entityType);
@@ -205,13 +227,7 @@ class Xlsx extends \Espo\Core\Injectable
$sheet->setCellValue($col . $rowNumber, $label);
$sheet->getColumnDimension($col)->setAutoSize(true);
if (
$defs['type'] == 'phone'
|| $defs['type'] == 'email'
|| $defs['type'] == 'url'
|| $defs['type'] == 'link'
|| $defs['type'] == 'linkParent'
) {
if (in_array($defs['type'], ['phone', 'email', 'url', 'link', 'linkParent'])) {
$linkColList[] = $col;
} else if ($name == 'name') {
$linkColList[] = $col;
@@ -231,6 +247,8 @@ class Xlsx extends \Espo\Core\Injectable
$sheet->getStyle("A$rowNumber:$col$rowNumber")->applyFromArray($headerStyle);
$sheet->setAutoFilter("A$rowNumber:$col$rowNumber");
$typesCache = array();
$rowNumber++;
foreach ($dataList as $row) {
$i = 0;
@@ -242,18 +260,41 @@ class Xlsx extends \Espo\Core\Injectable
$defs = array();
$defs['type'] = 'base';
}
$type = $defs['type'];
$foreignField = $name;
$linkName = null;
if (strpos($name, '_') !== false) {
list($linkName, $foreignField) = explode('_', $name);
$foreignScope = $this->getInjection('metadata')->get(['entityDefs', $entityType, 'links', $linkName, 'entity']);
if ($foreignScope) {
$type = $this->getInjection('metadata')->get(['entityDefs', $foreignScope, 'fields', $foreignField, 'type'], $type);
}
}
if ($type === 'foreign') {
$linkName = $this->getInjection('metadata')->get(['entityDefs', $entityType, 'fields', $name, 'link']);
$foreignField = $this->getInjection('metadata')->get(['entityDefs', $entityType, 'fields', $name, 'field']);
$foreignScope = $this->getInjection('metadata')->get(['entityDefs', $entityType, 'links', $linkName, 'entity']);
if ($foreignScope) {
$type = $this->getInjection('metadata')->get(['entityDefs', $foreignScope, 'fields', $foreignField, 'type'], $type);
}
}
$typesCache[$name] = $type;
$link = null;
if ($defs['type'] == 'link') {
if ($type == 'link') {
if (array_key_exists($name.'Name', $row)) {
$sheet->setCellValue("$col$rowNumber", $row[$name.'Name']);
}
} else if ($defs['type'] == 'linkParent') {
} else if ($type == 'linkParent') {
if (array_key_exists($name.'Name', $row)) {
$sheet->setCellValue("$col$rowNumber", $row[$name.'Name']);
}
} else if ($defs['type'] == 'int') {
} else if ($type == 'int') {
$sheet->setCellValue("$col$rowNumber", $row[$name] ?: 0);
} else if ($defs['type'] == 'currency') {
} else if ($type == 'float') {
$sheet->setCellValue("$col$rowNumber", $row[$name] ?: 0);
} else if ($type == 'currency') {
if (array_key_exists($name.'Currency', $row) && array_key_exists($name, $row)) {
$sheet->setCellValue("$col$rowNumber", $row[$name] ? $row[$name] : '');
$currency = $row[$name . 'Currency'];
@@ -263,9 +304,9 @@ class Xlsx extends \Espo\Core\Injectable
->getNumberFormat()
->setFormatCode('[$'.$currencySymbol.'-409]#,##0.00;-[$'.$currencySymbol.'-409]#,##0.00');
}
} else if ($defs['type'] == 'currencyConverted') {
} else if ($type == 'currencyConverted') {
if (array_key_exists($name, $row)) {
$currency = $this->getConfig()->get('baseCurrency');
$currency = $this->getConfig()->get('defaultCurrency');
$currencySymbol = $this->getMetadata()->get(['app', 'currency', 'symbolMap', $currency], '');
$sheet->getStyle("$col$rowNumber")
@@ -274,7 +315,7 @@ class Xlsx extends \Espo\Core\Injectable
$sheet->setCellValue("$col$rowNumber", $row[$name] ? $row[$name] : '');
}
} else if ($defs['type'] == 'personName') {
} else if ($type == 'personName') {
if (!empty($row['name'])) {
$sheet->setCellValue("$col$rowNumber", $row['name']);
} else {
@@ -290,20 +331,41 @@ class Xlsx extends \Espo\Core\Injectable
}
$sheet->setCellValue("$col$rowNumber", $personName);
}
} else if ($defs['type'] == 'date') {
} else if ($type == 'date') {
if (isset($row[$name])) {
$sheet->setCellValue("$col$rowNumber", \PHPExcel_Shared_Date::PHPToExcel(strtotime($row[$name])));
$sheet->setCellValue("$col$rowNumber", \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel(strtotime($row[$name])));
}
} else if ($defs['type'] == 'datetime' || $defs['type'] == 'datetimeOptional') {
if (isset($row[$name])) {
$sheet->setCellValue("$col$rowNumber", \PHPExcel_Shared_Date::PHPToExcel(strtotime($row[$name])));
} else if ($type == 'datetime' || $type == 'datetimeOptional') {
$value = null;
if ($type == 'datetimeOptional') {
if (isset($row[$name . 'Date']) && $row[$name . 'Date']) {
$value = $row[$name . 'Date'];
}
}
} else if ($defs['type'] == 'image') {
if (!$value) {
if (isset($row[$name])) {
$value = $row[$name];
}
}
if ($value && strlen($value) > 11) {
try {
$timeZone = $this->getInjection('config')->get('timeZone');
$dt = new \DateTime($value);
$dt->setTimezone(new \DateTimeZone($timeZone));
$value = $dt->format($this->getInjection('dateTime')->getInternalDateTimeFormat());
} catch (\Exception $e) {
$value = '';
}
}
if ($value) {
$sheet->setCellValue("$col$rowNumber", \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel(strtotime($value)));
}
} else if ($type == 'image') {
if (isset($row[$name . 'Id']) && $row[$name . 'Id']) {
$attachment = $this->getEntityManager()->getEntity('Attachment', $row[$name . 'Id']);
if ($attachment) {
$objDrawing = new \PHPExcel_Worksheet_Drawing();
$objDrawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$filePath = $this->getInjection('fileStorageManager')->getLocalFilePath($attachment);
if ($filePath && file_exists($filePath)) {
@@ -316,15 +378,95 @@ class Xlsx extends \Espo\Core\Injectable
}
}
} else if ($defs['type'] == 'file') {
} else if ($type == 'file') {
if (array_key_exists($name.'Name', $row)) {
$sheet->setCellValue("$col$rowNumber", $row[$name.'Name']);
}
} else if ($defs['type'] == 'enum') {
} else if ($type == 'enum') {
if (array_key_exists($name, $row)) {
$value = $this->getInjection('language')->translateOption($row[$name], $name, $entityType);
if ($linkName) {
$value = $this->getInjection('language')->translateOption($row[$name], $foreignField, $foreignScope);
} else {
$value = $this->getInjection('language')->translateOption($row[$name], $name, $entityType);
}
$sheet->setCellValue("$col$rowNumber", $value);
}
} else if ($type == 'linkMultiple') {
if (array_key_exists($name . 'Ids', $row) && array_key_exists($name . 'Names', $row)) {
$nameList = [];
foreach ($row[$name . 'Ids'] as $relatedId) {
$relatedName = $relatedId;
if (property_exists($row[$name . 'Names'], $relatedId)) {
$relatedName = $row[$name . 'Names']->$relatedId;
}
$nameList[] = $relatedName;
}
$sheet->setCellValue("$col$rowNumber", implode(', ', $nameList));
}
} else if ($type == 'address') {
$value = '';
if (!empty($row[$name . 'Street'])) {
$value = $value .= $row[$name.'Street'];
}
if (!empty($row[$name.'City']) || !empty($row[$name.'State']) || !empty($row[$name.'PostalCode'])) {
if ($value) {
$value .= "\n";
}
if (!empty($row[$name.'City'])) {
$value .= $row[$name.'City'];
if (
!empty($row[$name.'State']) || !empty($row[$name.'PostalCode'])
) {
$value .= ', ';
}
}
if (!empty($row[$name.'State'])) {
$value .= $row[$name.'State'];
if (!empty($row[$name.'PostalCode'])) {
$value .= ' ';
}
}
if (!empty($row[$name.'PostalCode'])) {
$value .= $row[$name.'PostalCode'];
}
}
if (!empty($row[$name.'Country'])) {
if ($value) {
$value .= "\n";
}
$value .= $row[$name.'Country'];
}
$sheet->setCellValue("$col$rowNumber", $value);
} else if ($type == 'duration') {
if (!empty($row[$name])) {
$seconds = intval($row[$name]);
$days = intval(floor($seconds / 86400));
$seconds = $seconds - $days * 86400;
$hours = intval(floor($seconds / 3600));
$seconds = $seconds - $hours * 3600;
$minutes = intval(floor($seconds / 60));
$value = '';
if ($days) {
$value .= (string) $days . $this->getInjection('language')->translate('d', 'durationUnits');
if ($minutes || $hours) {
$value .= ' ';
}
}
if ($hours) {
$value .= (string) $hours . $this->getInjection('language')->translate('h', 'durationUnits');
if ($minutes) {
$value .= ' ';
}
}
if ($minutes) {
$value .= (string) $minutes . $this->getInjection('language')->translate('m', 'durationUnits');
}
$sheet->setCellValue("$col$rowNumber", $value);
}
} else {
if (array_key_exists($name, $row)) {
$sheet->setCellValue("$col$rowNumber", $row[$name]);
@@ -333,34 +475,47 @@ class Xlsx extends \Espo\Core\Injectable
$link = false;
$foreignLink = null;
$isForeign = false;
if (strpos($name, '_')) {
$isForeign = true;
list($foreignLink, $foreignField) = explode('_', $name);
}
if ($name == 'name') {
if (array_key_exists('id', $row)) {
$link = $this->getConfig()->getSiteUrl() . "/#".$entityType . "/view/" . $row['id'];
}
} else if ($defs['type'] == 'url') {
} else if ($type == 'url') {
if (array_key_exists($name, $row) && filter_var($row[$name], FILTER_VALIDATE_URL)) {
$link = $row[$name];
}
} else if ($defs['type'] == 'link') {
} else if ($type == 'link') {
if (array_key_exists($name.'Id', $row)) {
$foreignEntity = $this->getMetadata()->get(['entityDefs', $entityType, 'links', $name, 'entity']);
$foreignEntity = null;
if (!$isForeign) {
$foreignEntity = $this->getMetadata()->get(['entityDefs', $entityType, 'links', $name, 'entity']);
} else {
$foreignEntity1 = $this->getMetadata()->get(['entityDefs', $entityType, 'links', $foreignLink, 'entity']);
$foreignEntity = $this->getMetadata()->get(['entityDefs', $foreignEntity1, 'links', $foreignField, 'entity']);
}
if ($foreignEntity) {
$link = $this->getConfig()->getSiteUrl() . "/#" . $foreignEntity. "/view/". $row[$name.'Id'];
}
}
} else if ($defs['type'] == 'file') {
} else if ($type == 'file') {
if (array_key_exists($name.'Id', $row)) {
$link = $this->getConfig()->getSiteUrl() . "/?entryPoint=download&id=" . $row[$name.'Id'];
}
} else if ($defs['type'] == 'linkParent') {
} else if ($type == 'linkParent') {
if (array_key_exists($name.'Id', $row) && array_key_exists($name.'Type', $row)) {
$link = $this->getConfig()->getSiteUrl() . "/#".$row[$name.'Type']."/view/". $row[$name.'Id'];
}
} else if ($defs['type'] == 'phone') {
} else if ($type == 'phone') {
if (array_key_exists($name, $row)) {
$link = "tel:".$row[$name];
}
} else if ($defs['type'] == 'email' && array_key_exists($name, $row)) {
} else if ($type == 'email' && array_key_exists($name, $row)) {
if (array_key_exists($name, $row)) {
$link = "mailto:".$row[$name];
}
@@ -373,52 +528,54 @@ class Xlsx extends \Espo\Core\Injectable
$rowNumber++;
}
$sheet->getStyle("A2:A$rowNumber")
->getNumberFormat()
->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
$startingRowNumber = 4;
foreach ($fieldList as $i => $name) {
$col = $azRange[$i];
$defs = $this->getInjection('metadata')->get(['entityDefs', $entityType, 'fields', $name]);
if (!$defs) {
$defs['type'] = 'base';
if (!array_key_exists($name, $typesCache)) {
break;
}
$type = $typesCache[$name];
if ($col == 'A') {
$sheet->getStyle("A2:A$rowNumber")
->getNumberFormat()
->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
} else {
switch($defs['type']) {
case 'currency':
case 'currencyConverted': {
switch ($type) {
case 'currency':
case 'currencyConverted': {
} break;
case 'int': {
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
->getNumberFormat()
->setFormatCode('0');
} break;
case 'date': {
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
->getNumberFormat()
->setFormatCode($this->getInjection('dateTime')->getDateFormat());
} break;
case 'datetime': {
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
->getNumberFormat()
->setFormatCode($this->getInjection('dateTime')->getDateTimeFormat());
} break;
case 'datetimeOptional': {
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
->getNumberFormat()
->setFormatCode($this->getInjection('dateTime')->getDateTimeFormat());
} break;
default: {
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
->getNumberFormat()
->setFormatCode('@');
} break;
}
} break;
case 'int': {
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
->getNumberFormat()
->setFormatCode('0');
} break;
case 'float': {
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
->getNumberFormat()
->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1);
} break;
case 'date': {
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
->getNumberFormat()
->setFormatCode($this->getInjection('dateTime')->getDateFormat());
} break;
case 'datetime': {
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
->getNumberFormat()
->setFormatCode($this->getInjection('dateTime')->getDateTimeFormat());
} break;
case 'datetimeOptional': {
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
->getNumberFormat()
->setFormatCode($this->getInjection('dateTime')->getDateTimeFormat());
} break;
default: {
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
->getNumberFormat()
->setFormatCode('@');
} break;
}
}
@@ -432,7 +589,7 @@ class Xlsx extends \Espo\Core\Injectable
$sheet->getStyle($linkColumn.$startingRowNumber.':'.$linkColumn.$rowNumber)->applyFromArray($linkStyle);
}
$objWriter = \PHPExcel_IOFactory::createWriter($phpExcel, 'Excel2007');
$objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
if (!$this->getInjection('fileManager')->isDir('data/cache/')) {
$this->getInjection('fileManager')->mkdir('data/cache/');

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
@@ -42,6 +42,11 @@ class ExtensionManager extends Upgrades\Base
'after' => 'AfterInstall',
'beforeUninstall' => 'BeforeUninstall',
'afterUninstall' => 'AfterUninstall',
),
'customDirNames' => array(
'before' => 'beforeInstallFiles',
'after' => 'afterInstallFiles',
)
);
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://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-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify

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