Compare commits

...

3097 Commits
3.9.0 ... 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
09e364625d fix formula parser 2017-06-08 16:52:03 +03:00
yuri
35f575ed7f fix array field 2017-06-07 12:06:58 +03:00
yuri
7b0d46b37f travel industry 2017-06-07 11:51:39 +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
f474137b91 fix mention 2017-06-06 14:01:33 +03:00
yuri
7a18d88c50 fix export 2 2017-06-06 12:20:46 +03:00
yuri
d3ea71c726 Merge branch 'hotfix/4.7.2' 2017-06-06 12:03:35 +03:00
yuri
8d1c9fe666 fix export 2017-06-06 12:01:19 +03:00
yuri
62ccfaa9c0 Merge branch 'hotfix/4.7.2' 2017-05-31 10:38:00 +03:00
yuri
e6566bccdc fix portal 2017-05-29 13:42:41 +03:00
yuri
14ed7282f3 cleanup 2017-05-29 11:47:50 +03:00
yuri
b13145adce version 2017-05-29 11:40:52 +03:00
yuri
c0b169f7dd Merge branch 'hotfix/4.7.2' 2017-05-29 11:40:18 +03:00
yuri
3cfca9845a improve dependencies 2017-05-29 11:40:06 +03:00
yuri
afa8d07bb4 fix notice 2017-05-29 11:35:00 +03:00
yuri
02434e0ca1 css fix 2017-05-26 11:48:34 +03:00
yuri
3d68c77ed4 Merge branch 'hotfix/4.7.1' 2017-05-26 11:19:11 +03:00
yuri
11f76c507b fix export sheet name 2017-05-25 14:51:11 +03:00
yuri
a2e241966e Merge branch 'hotfix/4.7.1' 2017-05-25 14:22:49 +03:00
yuri
c68f3eb44d template fixes 2017-05-25 14:22:39 +03:00
yuri
6a1d8dcdca version 2017-05-25 11:44:44 +03:00
yuri
ba358e5847 Merge branch 'hotfix/4.7.1' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.7.1 2017-05-25 11:40:18 +03:00
yuri
5e174fd5a9 excel export fix 2017-05-25 11:16:58 +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
9af2500292 xsl export fix 2017-05-24 13:41:15 +03:00
yuri
59b7934aa2 Merge branch 'hotfix/4.7.1' 2017-05-22 15:41:03 +03:00
yuri
8e9dea260e fix port theme 2017-05-22 15:40:31 +03:00
yunga91
29ed6cb3b0 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:36:43 +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
4670bb49e8 excel export by default 2017-05-22 14:15:56 +03:00
yuri
54a045e25a Merge branch 'hotfix/4.7.1' 2017-05-19 17:37:25 +03:00
yuri
fcc18befc3 excel export fix currency 2017-05-19 17:37:18 +03:00
yuri
52ac9b1621 small fix 2017-05-19 17:14:58 +03:00
yuri
862b76f165 Merge branch 'hotfix/4.7.1' 2017-05-19 15:11:16 +03:00
yuri
9bca545f01 fix excel temp file name 2017-05-19 15:11:05 +03:00
Taras Machyshyn
80032f8ed7 Correct labels 2017-05-18 17:08:37 +03:00
yuri
a63a690307 field manager: forbid underscore name 2017-05-18 13:24:36 +03:00
yuri
5ed0b2ba6b field manager: forbid underscore name 2017-05-18 13:24:15 +03:00
yuri
24dc2716f7 fix excel export label 2017-05-18 12:44:30 +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
3f40896374 export fileName 2017-05-18 12:18:31 +03:00
yuri
f1b0decbab Merge branch 'hotfix/4.7.1' 2017-05-17 16:08:06 +03:00
yuri
8d8778b397 lang 2017-05-17 16:07:36 +03:00
yuri
c2b60698bc Merge branch 'hotfix/4.7.1' 2017-05-17 15:56:37 +03:00
yuri
68d3b422cc lang 2017-05-17 15:56:28 +03:00
yuri
63ff4c1dca Merge branch 'hotfix/4.7.1' 2017-05-17 15:32:03 +03:00
yuri
145420aaaa fix export noJoin names 2017-05-17 15:31:54 +03:00
yuri
8987ec61fe Merge branch 'hotfix/4.7.1' 2017-05-16 13:45:29 +03:00
yuri
34ee17b7f5 fix notice 2017-05-16 13:45:12 +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
2a0646d1dd fix warning 2017-05-16 12:47:37 +03:00
yuri
6182376d1f Merge branch 'hotfix/4.7.1' 2017-05-16 12:21:48 +03:00
yuri
52620e84cd skipCreatedBy 2017-05-16 12:21:35 +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
4747113742 lang 2017-05-16 11:34:22 +03:00
yuri
a10f2949a4 Merge branch 'hotfix/4.7.1' 2017-05-16 11:30:52 +03:00
yuri
f26d7c6a62 lang 2017-05-16 11:30:43 +03:00
yuri
2e0d8cfd43 hide 2017-05-16 11:12:35 +03:00
yuri
666d8ab5ad Merge branch 'hotfix/4.7.1' 2017-05-16 10:55:34 +03:00
yuri
db57c53652 BAM currency 2017-05-16 10:55:27 +03:00
yuri
bbcf9e00fa notification number 2017-05-15 16:54:34 +03:00
yuri
badf1aec6f fix side panel 2017-05-15 11:38:46 +03:00
yuri
19bb4514df lang 2017-05-12 14:31:32 +03:00
yuri
778be7fea8 Merge branch 'master' of github.com:espocrm/espocrm 2017-05-12 11:22:53 +03:00
yuri
326970bcd4 fix lang 2017-05-12 11:22:42 +03:00
yuri
9411bce8b0 fix sorting field types 2017-05-12 11:12:40 +03:00
yuri
244c1a426b fix model factory 2017-05-12 11:04:36 +03:00
Mauricio Panuncio
b3f9ca8721 Fix and improve translations ES (#538)
* Translate es_ES: Globals. Admin.

* Tickets.

* Emails.

* New translations (missing).

* New translations (missing) II.

* Various.

* Opportunities: Improvement. Self-explanatory names.

* Some small fixes.

* Undo Tickets. Redo Casos.

* Fix: 'Lenguaje' to 'Idioma'.

* Fix some erros in the installation screens.

* Fix some erros in the installation screens II.

* Chamge mod

* Translate. Round 1.

* Translate ES. Stream: Actividades to Historia.

* Translate ES. Lead: Potencial to Posible Cliente.

* Translate ES. Log: Registros.

* Translate ES. Round 2.

* Translate ES. Round 3.

* Translate ES. Round 4.

* Translate ES. New translations.

* Translate ES. Fix bugs.

* Translate ES. Activity: Actividades to Actividades planeadas.

* Translate ES. Hostory: Historia to Historial de aactividades.

* Translate ES. Improvements.

* Fix.

* Traanslate ES.

* Traanslate ES.

* Traanslate ES.

* Fix permissions.

* New translations ES

* Fix and improve translations ES.
2017-05-11 17:55:55 +03:00
yuri
8c66a83054 html cache timestamp 2017-05-10 16:52:56 +03:00
yuri
df6a1f6613 defaults config addition 2017-05-10 14:59:59 +03:00
yuri
1033a926fc v 4.7.0 2017-05-10 14:49:41 +03:00
yuri
d339c04177 field manager: dont allow field name beginning with a number 2017-05-10 12:52:28 +03:00
yuri
edcf0aae84 allow only one attachment multiple field 2017-05-10 12:47:14 +03:00
yuri
20f97caab3 field manager: not allow name same as link 2017-05-10 12:36:50 +03:00
yuri
86be4e7352 Merge branch 'hotfix/4.6.1' 2017-05-10 12:31:50 +03:00
yuri
697e271e66 Merge branch 'hotfix/4.6.1' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.6.1 2017-05-10 12:31:34 +03:00
yuri
5f74504da8 cleanup changes 2017-05-10 12:06:11 +03:00
yuri
fb3d46d389 attachments fill parentType or relatedId w/o id if entity is not created 2017-05-10 11:35:23 +03:00
yuri
875971fb6e generate password preview 2017-05-10 10:59:04 +03:00
yuri
1939a58f17 stream post storing improvement 2017-05-09 15:57:03 +03:00
yuri
40b3374fdd stream post keep attachments 2017-05-09 15:07:03 +03:00
yuri
c564b1b75a stream: store post content on leave 2017-05-09 12:57:49 +03:00
yuri
c28e73ce3f formula fix 2017-05-08 16:06:47 +03:00
yuri
788a6bfdc3 formula ui fix 2017-05-08 13:32:16 +03:00
yuri
15d1f79115 formula change ui 2017-05-08 13:30:14 +03:00
yuri
bf699d88f7 system jobs 2017-05-08 12:34:07 +03:00
yuri
d7f8e4e050 fix notice 2017-05-08 12:32:49 +03:00
yuri
3872d7897a stream ignoreScopeList fix 2017-05-08 11:46:48 +03:00
yuri
17a1f6ce63 stream ignoreScopeList fix 2017-05-08 11:45:50 +03:00
Mauricio Panuncio
eaa155eff7 Translate es (#536)
* Translate es_ES: Globals. Admin.

* Tickets.

* Emails.

* New translations (missing).

* New translations (missing) II.

* Various.

* Opportunities: Improvement. Self-explanatory names.

* Some small fixes.

* Undo Tickets. Redo Casos.

* Fix: 'Lenguaje' to 'Idioma'.

* Fix some erros in the installation screens.

* Fix some erros in the installation screens II.

* Chamge mod

* Translate. Round 1.

* Translate ES. Stream: Actividades to Historia.

* Translate ES. Lead: Potencial to Posible Cliente.

* Translate ES. Log: Registros.

* Translate ES. Round 2.

* Translate ES. Round 3.

* Translate ES. Round 4.

* Translate ES. New translations.

* Translate ES. Fix bugs.

* Translate ES. Activity: Actividades to Actividades planeadas.

* Translate ES. Hostory: Historia to Historial de aactividades.

* Translate ES. Improvements.

* Fix.

* Traanslate ES.

* Traanslate ES.

* Traanslate ES.

* Fix permissions.
2017-05-08 10:57:45 +03:00
yuri
13fba6d71c Merge branch 'master' of github.com:espocrm/espocrm 2017-05-08 10:56:50 +03:00
yuri
0d423aa349 Merge branch 'hotfix/4.6.1' 2017-05-08 10:56:09 +03:00
yuri
2fca224ba4 fix html 2017-05-08 10:55:47 +03:00
yuri
574f85df46 email template related 2017-05-08 10:42:25 +03:00
yuri
b7176983e2 email template related 2017-05-08 10:42:01 +03:00
Mauricio Panuncio
e8f19ff0dc Translate es (#536)
* Translate es_ES: Globals. Admin.

* Tickets.

* Emails.

* New translations (missing).

* New translations (missing) II.

* Various.

* Opportunities: Improvement. Self-explanatory names.

* Some small fixes.

* Undo Tickets. Redo Casos.

* Fix: 'Lenguaje' to 'Idioma'.

* Fix some erros in the installation screens.

* Fix some erros in the installation screens II.

* Chamge mod

* Translate. Round 1.

* Translate ES. Stream: Actividades to Historia.

* Translate ES. Lead: Potencial to Posible Cliente.

* Translate ES. Log: Registros.

* Translate ES. Round 2.

* Translate ES. Round 3.

* Translate ES. Round 4.

* Translate ES. New translations.

* Translate ES. Fix bugs.

* Translate ES. Activity: Actividades to Actividades planeadas.

* Translate ES. Hostory: Historia to Historial de aactividades.

* Translate ES. Improvements.

* Fix.

* Traanslate ES.

* Traanslate ES.

* Traanslate ES.

* Fix permissions.
2017-05-07 08:13:47 +03:00
yuri
d3cb4607ea orm functions 2017-05-05 15:57:11 +03:00
yuri
8ae0696f07 formula: minute, hour 2017-05-05 13:45:37 +03:00
yuri
299c3c13fc orm: functionList 2017-05-05 13:33:33 +03:00
yuri
a79a8bcef6 orm dayofweek 2017-05-05 12:50:05 +03:00
yuri
2a0dd46b5e formula: date functions 2017-05-05 12:44:27 +03:00
yuri
6c287bc2e2 orm: DATE functions 2017-05-05 11:53:08 +03:00
yuri
7add59ffcb formula: list 2017-05-05 11:03:21 +03:00
yuri
9747c43988 duplicate link new tab 2017-05-04 15:40:39 +03:00
yuri
8b9a0f1437 excel export changes 2017-05-04 14:43:12 +03:00
yuri
1315ca007c fix 2017-05-03 16:37:59 +03:00
yuri
e753d767fc no-currency support 2017-05-03 16:34:25 +03:00
yuri
db893859c2 excel export changes 2017-05-03 16:25:02 +03:00
yuri
16af3d2ad8 currency format 2017-05-03 16:24:47 +03:00
yuri
f334080fe6 metadata currency symbols 2017-05-03 14:20:07 +03:00
yuri
b2acfbed98 email keep attachments on select template option 2017-05-03 12:00:21 +03:00
yuri
2aca6ca28a email keep attachments on select template option 2017-05-03 11:59:12 +03:00
yuri
c96040edec export fixes 2017-05-02 15:30:48 +03:00
yuri
e0ebb44e64 export xslx 2017-05-02 15:14:18 +03:00
yuri
ee1af88f8d fix select manager order file field 2017-05-02 11:27:46 +03:00
yuri
1659e583ea fix select manager order file field 2017-05-02 11:27:27 +03:00
yuri
6f0575d798 Merge branch 'hotfix/4.6.1' of ssh://172.20.0.1/var/git/espo/backend 2017-04-28 17:05:53 +03:00
Taras Machyshyn
ba05c45f47 EntityManager: fixed translated options 2017-04-28 17:02:16 +03:00
yuri
353caf29b3 fix export 2017-04-28 16:40:55 +03:00
yuri
7600d473bb export change 2017-04-28 16:39:26 +03:00
yuri
c9ff48245e export changes 2017-04-28 16:16:44 +03:00
yuri
4ed4a94209 export changes 2017-04-28 15:50:18 +03:00
yuri
c88e01fe75 export populate with list layout 2017-04-28 15:10:40 +03:00
yuri
9e46edce79 fix export 2017-04-28 14:46:39 +03:00
yuri
bae5c67839 exportCollection 2017-04-28 14:44:25 +03:00
yuri
635d5d9c6c tr_TR lang 2017-04-28 13:45:18 +03:00
yuri
65be8c385f formula array includes 2017-04-28 13:36:11 +03:00
yuri
c3d44e2472 orm not subquery prevent too deep 2017-04-28 12:42:08 +03:00
yuri
4a781ed5f4 Merge branch 'hotfix/4.6.1' 2017-04-28 12:34:13 +03:00
yuri
d9995512a1 fix required sign 2017-04-28 12:34:04 +03:00
Taras Machyshyn
6ed2466785 Fixed nginx routing rules 2017-04-28 12:15:01 +03:00
Anthony Andriano
724c74b488 en_US Updates (#525)
* fixed a typo

* updated a few en_US labels to be more natural english
2017-04-28 11:31:19 +03:00
Anthony Andriano
67887c5ba4 update diff to use util instead of sys (#524) 2017-04-28 11:31:05 +03:00
yuri
ea2a0068ed Merge branch 'master' of github.com:espocrm/espocrm 2017-04-28 11:25:25 +03:00
Anthony Andriano
0bfdea5976 en_US Updates (#525)
* fixed a typo

* updated a few en_US labels to be more natural english
2017-04-27 20:04:13 +03:00
Anthony Andriano
305ebc293f update diff to use util instead of sys (#524) 2017-04-27 19:19:58 +03:00
yuri
f17f74672e fix orm 2017-04-27 15:57:39 +03:00
yuri
fcaf184b13 dynamic logic and forumla add field focus 2017-04-27 15:41:51 +03:00
yuri
efe653f1f6 dynamic logic and forumla add field focus 2017-04-27 15:41:24 +03:00
yuri
c1022bf8f3 Merge branch 'hotfix/4.6.1' 2017-04-27 15:01:01 +03:00
yuri
0f4c3988f8 fix class name 2017-04-27 15:00:45 +03:00
yuri
498b7b5679 Merge branch 'hotfix/4.6.1' 2017-04-27 12:36:14 +03:00
yuri
ca445a3cb7 kb ui acl fix 2017-04-27 12:36:02 +03:00
yuri
8a293749e0 fix ORM not 2017-04-27 12:14:22 +03:00
yuri
5c034279e8 Merge branch 'hotfix/4.6.1' 2017-04-27 11:33:31 +03:00
yuri
9460943ad2 escaping fix 2017-04-27 11:33:22 +03:00
yuri
5eaeabe231 ORM: Subqueries IN and NOT 2017-04-26 16:32:24 +03:00
yuri
2202b00600 inlineEditDisabled in clientDefs 2017-04-26 11:35:07 +03:00
Sebastien DOIDO
68ba5a5c4a Improve french translation: Campaign.json + MassEmail.json (#517) 2017-04-24 17:39:35 +03:00
Sebastien DOIDO
e80b490152 Improve french translation: Campaign.json + MassEmail.json (#517) 2017-04-24 16:03:29 +03:00
yuri
380937b644 enum field filters 2017-04-24 15:44:43 +03:00
yuri
ac72305101 Merge branch 'hotfix/4.6.1' 2017-04-24 14:59:27 +03:00
yuri
a41779b0bb fr_FR fixes 2017-04-24 14:58:41 +03:00
yuri
86cdbf24b7 Merge branch 'hotfix/4.6.1' 2017-04-24 12:44:41 +03:00
yuri
5d7bc98088 user detail view: created at field 2017-04-24 12:43:39 +03:00
yuri
1359e8eb2f Merge branch 'hotfix/4.6.1' 2017-04-24 12:32:15 +03:00
yuri
f3a7003444 fr_FR lang 2017-04-24 12:32:05 +03:00
yuri
624f76b1a0 clear local cache improvements 2017-04-24 12:24:30 +03:00
yuri
484ffa071c label fix 2017-04-24 11:40:13 +03:00
Sebastien DOIDO
850fb3cb15 Fix typo to have correct translation (#516) 2017-04-24 11:32:04 +03:00
Sebastien DOIDO
40075ed2e3 Fix typo to have correct translation (#516) 2017-04-24 11:31:26 +03:00
yuri
f68bb4b491 tr_TR lang fix 2017-04-21 11:19:00 +03:00
yuri
473e1109b4 fix import 2017-04-20 15:23:20 +03:00
yuri
c4b8b90ff5 fix css 2017-04-20 12:21:30 +03:00
yuri
70b4017353 tr_TR lang 2017-04-20 11:32:58 +03:00
yuri
e6f7bf4d6c Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-04-19 16:28:22 +03:00
Taras Machyshyn
69385519d7 Metadata: delete related additional fields in entitiDefs 2017-04-19 16:24:44 +03:00
yuri
235ee7c383 Merge branch 'master' of github.com:espocrm/espocrm 2017-04-19 13:49:21 +03:00
yunga91
a6dba9f09a fix view name resolving for custom field types in merge action (#509) 2017-04-19 13:49:02 +03:00
yuri
f1352430b9 close modal bigger icon 2017-04-18 17:45:08 +03:00
yuri
b9b63a8a7c fix last viewed 2017-04-18 15:50:56 +03:00
yuri
5358bf4a43 fix last viewerd 2017-04-18 15:00:19 +03:00
yuri
1c7a7d8147 template placeholders labels 2017-04-18 14:58:23 +03:00
yuri
ca055e8ca9 css fix 2017-04-18 14:22:33 +03:00
yuri
081c058229 languge field order fix 2017-04-18 13:20:39 +03:00
yuri
a5c941b1b2 zh_CN lang 2017-04-18 13:14:26 +03:00
yuri
d43e63b89e fix checbox css 2 2017-04-18 12:39:47 +03:00
yuri
102886e23d fix firefox checkbox style 2017-04-18 12:06:50 +03:00
yuri
3b8b9e392e fix auth 2017-04-18 12:06:38 +03:00
yuri
226152135d fix portal language 2017-04-18 11:11:18 +03:00
yuri
7f6a5b626e fix last viewed 2017-04-14 16:04:54 +03:00
yuri
c5fa26ffcb portal kb acl published check 2017-04-14 15:12:29 +03:00
yuri
7b2bbcfd05 version 4.6.0 2017-04-13 15:40:10 +03:00
yuri
e5b336d4f3 Merge branch 'master' of github.com:espocrm/espocrm 2017-04-13 15:03:18 +03:00
yuri
2d786d9660 noneOf filter 2017-04-13 15:01:23 +03:00
yuri
a587efddde link multiple filters improvements 2017-04-13 12:56:32 +03:00
yuri
81dd2bc800 link filters changes 2017-04-12 17:20:06 +03:00
tanyalei
b1273176a9 Hooks for afterOptOut, afterCancelOptOut for TargetList (#502)
* Process hooks for optOut, cancelOptOut

* process hook afterOptOut

* process hook afterCancelOptOut

* updateRelation
2017-04-12 16:26:21 +03:00
yuri
46beb8b6b7 uk_UA lang 2017-04-12 15:22:32 +03:00
yuri
264efa2e8d formula number\\round 2017-04-12 14:18:47 +03:00
yuri
f538f05ec3 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-04-12 12:16:31 +03:00
yuri
069a50c717 fix hooks 2017-04-12 12:16:19 +03:00
yuri
08f1329868 kb article aclPortal 2017-04-12 12:09:06 +03:00
yuri
e48043c2e8 record list dashlet changes 2017-04-11 16:25:00 +03:00
yuri
024aeb6d01 fix dashlet expoanded layout field 2017-04-11 15:51:48 +03:00
yuri
c79ef63c4d internal scheduled jobs 2017-04-11 15:41:03 +03:00
yuri
54798b94c9 acl: check entity create 2017-04-11 15:40:40 +03:00
yuri
f70f22c503 css changes 2017-04-11 15:28:23 +03:00
yuri
33adc65dac records dashlet layout 2017-04-11 14:42:01 +03:00
yuri
a6541f6f21 fix chart 2 2017-04-11 14:05:49 +03:00
yuri
0b44fee0e5 field manager: forbidden field list 2017-04-11 12:56:16 +03:00
yuri
d03aec270e Merge branch 'master' of github.com:espocrm/espocrm 2017-04-11 12:33:45 +03:00
yuri
08bca7daf7 chart fix 2017-04-11 12:33:30 +03:00
yuri
d5cb1f5c1b useCacheInDeveloperMode 2017-04-11 12:22:31 +03:00
Yuri Kuznetsov
68b16d3de9 Update CONTRIBUTING.md 2017-04-10 16:35:07 +03:00
Taras Machyshyn
daffa60cd4 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-04-10 15:56:24 +03:00
Taras Machyshyn
25cb6cdfb3 Installation: correct configuration for nginx server 2017-04-10 15:56:15 +03:00
yuri
7afecc4cdd afterMassRelate, afterUnlinkAll hooks 2017-04-10 12:49:24 +03:00
yuri
0e9373cf5e fix record/list 2017-04-10 12:42:37 +03:00
yuri
7992b78d4e fix naming 2017-04-10 12:19:12 +03:00
yuri
fed5e6ded7 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-04-10 12:15:24 +03:00
Taras Machyshyn
82ddd2e562 HookManager: add possibility to define custom hook methods 2017-04-10 12:15:10 +03:00
yuri
1470cea4ed kb article available only in specified portals 2017-04-10 12:01:49 +03:00
yuri
43e8929368 fix kb moveToTop/Bottom 2017-04-10 11:32:02 +03:00
yuri
6db3600a4b Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-04-10 11:18:09 +03:00
Taras Machyshyn
9b2324755b Fixed wrong php path for Scheduled job in Windows 2017-04-10 10:55:42 +03:00
Taras Machyshyn
dc77b3c73e Added support 'unsetIgnore' 2017-04-10 10:47:10 +03:00
yuri
7627afb7d2 markdown changes 2017-04-07 16:01:42 +03:00
yuri
e68ad81d57 Merge branch 'hotfix/4.5.2' 2017-04-07 14:43:48 +03:00
yuri
73b84d720a fix auth 2017-04-07 14:43:23 +03:00
yuri
0743582ef6 records dashlet fix 2017-04-06 15:54:17 +03:00
yuri
f73d26fcf3 records dashlet sorting 2017-04-06 15:49:16 +03:00
yuri
b1dd9f30fb records dashlet 2017-04-06 15:25:51 +03:00
yuri
27071695cb email: keep list after remove 2017-04-06 13:19:30 +03:00
yuri
1f551b6052 mass email: additional headers 2017-04-06 12:44:56 +03:00
yuri
947ebbb6f5 fix dashboard css 2017-04-05 15:56:18 +03:00
yuri
3a706cad86 cleanup auth tokens 2017-04-05 14:08:17 +03:00
yuri
8cb1709966 document acl portal fix 2017-04-05 13:06:26 +03:00
yuri
7533fc337e preferences changes 2017-04-04 16:56:02 +03:00
yuri
601f908992 action history dev 2017-04-04 13:04:56 +03:00
yuri
ff72489f39 add contact to scope templates acl portal level list 2017-04-04 12:31:57 +03:00
yuri
db442e0769 action history onlt for admin 2017-04-03 14:25:01 +03:00
yuri
189bbd784d last viwed modal click 2017-04-03 14:10:32 +03:00
yuri
2940de57b6 Merge branch 'stable' 2017-04-03 13:55:22 +03:00
yuri
cceb9eccc3 fix license 2017-04-03 12:04:21 +03:00
yuri
410ba24bef Merge branch 'hotfix/4.5.1' 2017-04-03 12:03:15 +03:00
yuri
292e90e6b7 fix formula diff 2017-04-03 12:03:07 +03:00
yuri
3f9b229a9e Merge branch 'hotfix/4.5.1' 2017-04-03 11:30:13 +03:00
yuri
05c2270f36 fix relationship manager not storing has children audited 2017-04-03 11:28:24 +03:00
yuri
f22fdd6724 Merge branch 'hotfix/4.5.1' 2017-04-03 11:14:06 +03:00
yuri
8059669a21 link fields select modal issue 2017-04-03 11:14:00 +03:00
yuri
28a8ad927a Merge branch 'hotfix/4.5.1' 2017-03-31 14:40:27 +03:00
yuri
6f7d27a5fd fix user removal 2017-03-31 14:40:16 +03:00
yuri
d89a173a41 fix warning 2017-03-31 14:01:45 +03:00
yuri
ba5fef320e fix user changePassword method 2017-03-31 13:53:48 +03:00
yuri
a7982acc8f fix login page taborder 2017-03-31 13:30:41 +03:00
yuri
17742fccf1 fix array 2017-03-31 13:26:35 +03:00
yuri
7a2b563cd4 fix array field with empty options 2017-03-31 13:26:20 +03:00
yuri
549984d1ed fix xss 2017-03-31 13:13:27 +03:00
yuri
d9256074fe about tpl change 2017-03-24 16:38:27 +02:00
yuri
97be52a0bc menu change 2017-03-24 16:34:50 +02:00
yuri
26a4d24492 about tpl change 2017-03-24 16:29:00 +02:00
yuri
03dad5a178 action history 2017-03-24 16:19:35 +02:00
yuri
4c0453d0e3 Merge branch 'hotfix/4.5.1' 2017-03-23 12:31:30 +02:00
yuri
1299853961 campaign: subscribe again removes optet out log record 2017-03-23 12:28:25 +02:00
yuri
e6d792ef5a Merge branch 'hotfix/4.5.1' 2017-03-23 11:49:50 +02:00
yuri
e8e8d0d7b2 target list: update count dynamicaly 2017-03-23 11:49:43 +02:00
yuri
cec0c7b374 dynamic logic: multi-enum and array support 2017-03-22 13:22:58 +02:00
yuri
fd73a0b8a5 lang 2017-03-22 11:52:06 +02:00
yuri
120ff8543e language list sorted 2017-03-22 11:12:47 +02:00
yuri
7b8fa73474 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-03-22 11:04:35 +02:00
yuri
85164758ce zh_CN lang 2017-03-22 11:04:15 +02:00
yuri
8a38568617 zh_CN lang 2017-03-22 11:03:48 +02:00
Taras Machyshyn
0c9e795dfd Options for tables 2017-03-21 15:20:18 +02:00
yuri
ee1a50aa16 Merge branch 'hotfix/4.5.1' 2017-03-16 12:47:40 +02:00
yuri
a13b6af04a fix modal 2017-03-16 12:47:33 +02:00
yuri
f847535aea small amendments 2017-03-16 12:43:34 +02:00
yuri
b1b03c6dc1 naming fix 2017-03-16 12:26:46 +02:00
yuri
eeb10c6bce fix router navigate back 2017-03-16 12:23:55 +02:00
yuri
05241cefa5 side modal in espo theme 2017-03-15 17:06:28 +02:00
yuri
1861e2cd87 cleanup 2017-03-15 15:20:06 +02:00
yuri
8a17cbe23c mark mandatory fields on edit 2017-03-15 15:18:54 +02:00
yuri
484458c2ba inbound email ui improvement 2 2017-03-15 14:40:56 +02:00
yuri
c62cc15159 inbound email ui fix 2017-03-15 13:29:18 +02:00
yuri
17f8b09782 inbound email ui fix 2017-03-15 13:28:55 +02:00
yuri
9fd05672ae fix 2017-03-13 17:41:36 +02:00
yuri
69d96450da addition to about.tpl 2017-03-13 16:52:51 +02:00
tanyalei
7393040c12 Update datetime-optional.js (#457)
Does not work validating before and after type for field type datetimeOptional, if time wasn't set
2017-03-13 16:45:19 +02:00
yuri
9097e644d4 Merge branch 'master' of https://github.com/espocrm/espocrm 2017-03-13 16:44:12 +02:00
yuri
837b1691d1 showing email address name part 2017-03-13 16:44:00 +02:00
tanyalei
2cdec34062 Update datetime-optional.js (#457)
Does not work validating before and after type for field type datetimeOptional, if time wasn't set
2017-03-13 16:43:20 +02:00
yuri
a33e10e92d mailmimeparser and email parsing imrovements 2017-03-13 16:22:42 +02:00
yuri
86631117a2 fix inline attachment issue 2017-03-13 12:50:50 +02:00
yuri
05dfcf7511 fix image warning 2017-03-13 12:39:38 +02:00
yuri
3e1582bd6b version 2017-03-10 16:49:07 +02:00
yuri
743f348fcf version 2017-03-10 16:19:53 +02:00
yuri
2b2ac2a76d Merge branch 'hotfix/4.5.1' 2017-03-10 15:49:00 +02:00
yuri
a7d2d41b0f da_DK lang 2017-03-10 15:48:26 +02:00
yuri
6ef0081ace nb_NO fixes 2017-03-10 15:44:44 +02:00
yuri
4f3304d55f fix query 2017-03-10 14:24:47 +02:00
yuri
47b6093752 fix query 2017-03-10 14:22:36 +02:00
yuri
ea8d930e56 email: addToPerson improvement 2017-03-10 13:13:05 +02:00
yuri
79f3d86384 contact parent to event 2017-03-10 13:03:36 +02:00
yuri
fff201b7cd parent improvements 2017-03-10 13:02:30 +02:00
yuri
1ad454ce0b fix email address 2017-03-10 12:33:22 +02:00
yuri
e090fe699b new actions for unknown email addresses 2017-03-10 12:32:14 +02:00
yuri
f677b5614b tasks stream 2017-03-09 16:02:57 +02:00
yuri
f7b240e6a9 fix send email not read 2017-03-09 13:04:24 +02:00
yuri
ea3a60aaf7 email address tpl fix 2017-03-09 12:53:38 +02:00
yuri
6a7cfa58ae email import: inline attachment issue 2017-03-09 12:37:53 +02:00
yuri
482f0cc314 dashlet chart color 2017-03-07 11:06:59 +02:00
yuri
28ada61f3d internal post title 2017-03-07 10:58:04 +02:00
yuri
7057210e90 next number table locking 2017-03-06 17:32:54 +02:00
yuri
8c5bc59c45 fix lang 2017-03-06 15:35:53 +02:00
yuri
b7370ff238 activities panel: check read access 2017-03-06 12:49:03 +02:00
yuri
fb36f769d9 SelectManager: accessNo 2017-03-06 12:37:34 +02:00
yuri
f07b728851 nb_NO lang 2017-03-06 11:01:28 +02:00
yuri
7d4ada7ec2 fix portal user creation 2017-03-02 16:28:05 +02:00
yuri
1c31a6689f fix event duration order 2017-03-02 12:41:21 +02:00
yuri
a839144796 hide reminders from list view layout 2017-03-02 12:21:16 +02:00
yuri
87cbe603d2 fix lang 2017-03-02 12:00:53 +02:00
yuri
ec96916013 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-03-02 11:44:52 +02:00
yuri
2c811a4faa integration form fix 2017-03-02 11:43:11 +02:00
yuri
6e089c1e25 change stream post tpl 2017-03-02 11:03:30 +02:00
yuri
2e203341b7 dynamic logic: foreign fields 2017-03-02 10:30:21 +02:00
yuri
5bea143bf0 labels 2017-03-02 10:22:49 +02:00
yuri
732494e251 import: added time format with seconds 2017-03-01 16:57:18 +02:00
Taras Machyshyn
39e1303cbe Schema Converter improvements 2017-03-01 16:17:52 +02:00
yuri
62c3549004 label fix 2017-03-01 15:20:40 +02:00
yuri
9bcc942f0f change formula metadata 2017-03-01 13:04:28 +02:00
yuri
e34ee34d7b fix formula function insertText 2017-03-01 12:25:42 +02:00
yuri
dedef4b36f array: none if empty 2017-03-01 12:18:54 +02:00
yuri
e6f6e0fcf1 email performance improvement 2017-03-01 12:07:52 +02:00
yuri
11a9e2ab9c mark notification read if email is read 2017-03-01 12:05:50 +02:00
yuri
9077542f61 fix email inbound 2017-03-01 12:03:31 +02:00
yuri
cb6faaa769 fix email back 2017-02-28 15:55:28 +02:00
yuri
a209d5aaaf link multiple if not set then show dots 2017-02-27 15:17:30 +02:00
yuri
767cdc75ee fix css 2017-02-27 14:03:44 +02:00
yuri
3eef0e088a fix modal backdrop 2017-02-27 11:59:36 +02:00
yuri
1e5ef6a070 fix text field 2017-02-27 11:56:43 +02:00
yuri
a2edc3cf4e theme changes 2017-02-24 12:38:42 +02:00
yuri
9a5dc7b4d1 reduntancy fix 2017-02-24 12:17:19 +02:00
yuri
7b0fd40d3e fix modal 2017-02-24 12:11:25 +02:00
yuri
169df31cab css fix 2017-02-24 11:20:56 +02:00
yuri
44b0ba2f33 fix array field int issue 2017-02-23 16:15:34 +02:00
yuri
8d70956607 Merge branch 'master' of https://github.com/espocrm/espocrm 2017-02-23 15:59:12 +02:00
ayman-alkom
5ad20c8666 fix variable name (#426) 2017-02-23 15:58:48 +02:00
yuri
790d4a88b5 de_DE additions 2017-02-23 14:24:13 +02:00
yuri
b72ac42068 fr_FR langauge 2017-02-23 13:30:38 +02:00
yuri
0a379be049 version 4.5.0 2017-02-23 12:33:22 +02:00
yuri
e0e08a1c17 Merge branch 'hotfix/4.4.2' 2017-02-23 11:28:05 +02:00
yuri
0d825120bb notifications to portal users fix 2017-02-23 11:27:42 +02:00
yuri
7b81b66b76 formula: number abs 2017-02-22 15:38:50 +02:00
yuri
d39f4e2533 forumle: datetime diff 2017-02-22 15:31:36 +02:00
yuri
598a2f9f05 fix 2017-02-22 13:09:07 +02:00
yuri
ce9089b838 date time format 2017-02-22 13:06:10 +02:00
yuri
45b06fc154 stream: auto-follow after posting 2017-02-22 11:38:39 +02:00
yuri
f44177a994 Merge branch 'hotfix/4.4.2' 2017-02-21 17:11:41 +02:00
yuri
d91b13a7c1 Merge branch 'hotfix/4.4.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.4.2 2017-02-21 17:11:08 +02:00
Taras Machyshyn
bd1894322c Slim: fixed a notice 2017-02-21 17:10:16 +02:00
yuri
90874535ea Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-02-21 17:06:23 +02:00
yuri
8c919dbca4 Merge branch 'hotfix/4.4.2' 2017-02-21 17:06:14 +02:00
yuri
05223c5272 Merge branch 'hotfix/4.4.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.4.2 2017-02-21 17:05:52 +02:00
yuri
afee6d564b select manager textFilterUseContainsAttributeList 2017-02-21 17:04:47 +02:00
Taras Machyshyn
b4e879a369 FieldManager: improved storing logic 2017-02-21 16:26:23 +02:00
yuri
de4d96e260 event template set held action 2017-02-21 15:40:05 +02:00
yuri
89056f61c2 add consulting industry 2017-02-21 12:55:18 +02:00
yuri
afac29151c account filter website 2017-02-21 12:44:35 +02:00
Taras Machyshyn
e54430fb1b Merge branch 'hotfix/4.4.2' 2017-02-20 16:19:23 +02:00
tanyalei
7d8736b98c Creating Target List from Campaign Log not working in php7
creating a target list from the log bug fix(for mysql 5.7+)
2017-02-20 15:00:55 +02:00
tanyalei
216e9419d4 Creating Target List from Campaign Log not working in php7
creating a target list from the log bug fix(for mysql 5.7+)
2017-02-20 14:59:02 +02:00
yuri
359fdd4dab Merge branch 'hotfix/4.4.2' 2017-02-20 11:44:32 +02:00
yuri
2044a87630 fix last quarter filter 2017-02-20 11:44:24 +02:00
yuri
171feed28e global search mouseup fix 2017-02-20 11:10:58 +02:00
yuri
92dbbbd390 Merge branch 'master' of https://github.com/espocrm/espocrm 2017-02-17 16:24:04 +02:00
yuri
3166cb862e inbound email teams field 2017-02-17 12:41:04 +02:00
Taras Machyshyn
b606cb2e04 Fixed warnings in Slim 2017-02-17 11:10:29 +02:00
tanyalei
724ef00d52 clientDefs view of entities for convert (#416) 2017-02-16 21:41:15 +02:00
yuri
0b7857b495 self assign 2017-02-16 16:22:13 +02:00
yuri
a150eb7f0e fix email notification 2017-02-16 13:35:21 +02:00
yuri
4cb21a4fdb Merge branch 'hotfix/4.4.2' 2017-02-16 13:23:43 +02:00
yuri
46e13b0269 Merge branch 'hotfix/4.4.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.4.2 2017-02-16 13:23:32 +02:00
yuri
d4d5138991 fix sorting alphabeetically 2017-02-16 13:23:17 +02:00
yuri
9fd00d9f0a inbound email: reply to not required 2017-02-16 13:16:23 +02:00
yuri
9361938285 Injectable factory && Case: notifications replyToAddress 2017-02-16 13:00:11 +02:00
yuri
cb054b2f2b fix email email address 2017-02-16 12:41:58 +02:00
yuri
f8ff6e6cf5 Merge branch 'hotfix/4.4.2' 2017-02-16 10:56:59 +02:00
yuri
918c1b2114 fix formula resize issue 2017-02-16 10:56:51 +02:00
Taras Machyshyn
2026bcb021 Fixed field manager notices 2017-02-16 10:46:47 +02:00
Taras Machyshyn
ce5393155a Fixed merge method 2017-02-16 10:06:16 +02:00
Taras Machyshyn
6f4b752b10 Fixed merge method 2017-02-15 12:45:31 +02:00
yuri
2a5a453517 Merge branch 'hotfix/4.4.2' 2017-02-14 17:07:05 +02:00
yuri
191bba7afc fix notice 2017-02-14 17:06:54 +02:00
yuri
f50d2ef9e3 fix notice 2017-02-14 16:59:38 +02:00
yuri
1ad744d151 fix source list 2017-02-14 16:49:40 +02:00
yuri
ba0f86c8d4 attachment source list config check 2017-02-14 13:42:43 +02:00
yuri
372c84bfa3 file: sourceList 2017-02-14 12:33:28 +02:00
yuri
6ec18950e4 fix email user sent not added to users 2017-02-14 12:07:37 +02:00
yuri
6c3168a356 Merge branch 'hotfix/4.4.2' 2017-02-14 11:18:18 +02:00
yuri
109ee17a47 formula: parentName 2017-02-14 11:17:35 +02:00
yuri
21702b3c34 Merge branch 'hotfix/4.4.2' 2017-02-10 15:55:39 +02:00
yuri
159a2ee99d fix target list opted out count 2017-02-10 15:55:28 +02:00
yuri
d6151d33b4 ditch document source 2017-02-10 15:36:01 +02:00
yuri
2217e03fa8 file storage: download url 2017-02-10 15:28:52 +02:00
yuri
794c7eb523 fix document download link 2017-02-10 15:27:38 +02:00
yuri
98f61c0c4b fix css 2017-02-10 14:54:59 +02:00
yuri
5f5a450d95 css fix 2017-02-10 13:21:25 +02:00
yuri
0ba9679a75 confirm additions 2017-02-10 13:10:23 +02:00
yuri
85e60d4e32 attachment storage additions 2017-02-10 12:59:49 +02:00
yuri
a074b8a214 htmlizer fix 2017-02-09 16:01:04 +02:00
yuri
ac593c1d3d fix email queue 2 2017-02-09 15:39:34 +02:00
yuri
170e62bc8b fix email queue 2 2017-02-09 15:39:17 +02:00
yuri
5d19ae42dc fix email queue 2017-02-09 15:24:34 +02:00
yuri
9f3fdd01bf fix email queue 2017-02-09 15:24:06 +02:00
yuri
65e94e237d metadata getAllForFrontend 2017-02-09 15:05:11 +02:00
yuri
7935bc59fe fix sysiwyg 2017-02-09 14:31:40 +02:00
yuri
f49677b5c0 file storage manager 2017-02-09 14:29:28 +02:00
yuri
b69f829a3e import: timezone 2017-02-08 14:42:20 +02:00
yuri
13dfc90a1b import tpl fix 2017-02-08 13:46:35 +02:00
yuri
6d49d39480 layout manager confirm 2017-02-08 13:35:32 +02:00
yuri
f473ea9cea dashlet remove confirm 2017-02-08 13:34:06 +02:00
yuri
db8536ac55 phone strikestrough 2017-02-08 12:37:13 +02:00
yuri
e402745a86 change detailSmall layouts 2017-02-08 12:20:14 +02:00
yuri
abcaaddc2f fix wysiwyg destroying 2017-02-08 12:00:53 +02:00
yuri
3ac375c95c confirm change 2017-02-08 11:32:25 +02:00
yuri
56f65e0fc0 ui dialog 2017-02-07 16:30:55 +02:00
yuri
471df0034e css changes 2017-02-07 12:50:40 +02:00
yuri
a1b3be9ef3 Merge branch 'hotfix/4.4.2' 2017-02-07 11:32:36 +02:00
yuri
c4f70482ac fix email folder navigate back 2017-02-07 11:31:53 +02:00
yuri
31a8fa387d fix autocomplete 2017-02-07 10:48:45 +02:00
yuri
a0d6cb9be4 fix wysywyg modal 2017-02-07 10:34:53 +02:00
yuri
4586d26bd6 css fix 2017-02-06 17:41:52 +02:00
yuri
1609adc766 modal new style 2017-02-06 17:23:05 +02:00
yuri
aa0a9cf708 Merge branch 'hotfix/4.4.2' 2017-02-06 11:44:04 +02:00
yuri
d7dfe5fea4 email reply head text change 2017-02-06 11:43:47 +02:00
yuri
340ed5acec formula fix 2017-02-06 10:43:51 +02:00
yuri
7ec3e38e6d version 2017-02-03 15:53:53 +02:00
yuri
879bf13809 Merge branch 'stable' 2017-02-03 15:05:02 +02:00
yuri
4edf4ef9ea button fix 2017-02-02 14:13:27 +02:00
yuri
b44bbaffa2 Merge branch 'hotfix/4.4.1' 2017-02-02 12:44:12 +02:00
yuri
4b24491fe4 fix mass email 2017-02-02 12:44:05 +02:00
yuri
96458ab26a admin iframe height 2017-02-02 12:38:40 +02:00
yuri
4c562cb603 Merge branch 'hotfix/4.4.1' 2017-02-02 11:59:19 +02:00
yuri
494227324a formula field fix 2017-02-02 11:59:08 +02:00
yuri
8eb2be46ca Merge branch 'hotfix/4.4.1' 2017-02-02 11:25:53 +02:00
yuri
6d4b3f24cb fix formula 2017-02-02 11:18:25 +02:00
yuri
a26436d3de fix formula field 2017-02-01 15:55:38 +02:00
yuri
cd7571387c fix formula field 2017-02-01 15:55:15 +02:00
yuri
741f7f65c2 formula fix 2017-02-01 12:12:10 +02:00
yuri
1b3496edd9 formula fix 2017-02-01 12:11:49 +02:00
yuri
356da4e70d Merge branch 'hotfix/4.4.1' 2017-02-01 12:06:06 +02:00
yuri
cd6da3ba87 fix formula 2017-02-01 12:05:57 +02:00
yuri
ba0a79cc9b year 2017 2017-02-01 11:43:56 +02:00
yuri
f3deffb3f6 year 2017 2017-02-01 11:43:36 +02:00
yuri
c76823f9ee fix timeline 2017-02-01 11:14:43 +02:00
yuri
8398cc4364 fix timeline 2017-02-01 11:14:18 +02:00
yuri
6ddda814c0 Merge branch 'hotfix/4.4.1' 2017-01-31 15:30:34 +02:00
yuri
5b777d3f1e fix default schedulings 2017-01-31 15:30:17 +02:00
yuri
4f19109ba1 duration sortable 2017-01-31 14:29:40 +02:00
yuri
76ffa2def9 duration sortable 2017-01-31 13:24:05 +02:00
yuri
2fdc0a3a93 Merge branch 'master' of https://github.com/espocrm/espocrm 2017-01-31 12:23:12 +02:00
yuri
7f3b874061 fix array search 2017-01-31 12:22:36 +02:00
yuri
d9315763a6 v 2017-01-31 11:53:21 +02:00
yuri
c732f30e40 resize admin iframe 2017-01-31 11:46:32 +02:00
yuri
793cb4b878 installer theme 2017-01-31 11:38:48 +02:00
yuri
85c476c548 hazyblue horizontal theme 2017-01-31 11:34:32 +02:00
Alasdair Campbell
0dcc8d08d1 Removed executable permission set on stub file data/.data (#386) 2017-01-30 13:15:32 +02:00
yuri
da7635f68f diff 2017-01-27 15:50:41 +02:00
yuri
2fc66f14f3 field manager: fix default date 2017-01-27 15:10:58 +02:00
yuri
6623d9fa8b change install footer 2017-01-27 12:09:26 +02:00
yuri
774984a5a4 fix field manager tpl 2017-01-26 16:54:19 +02:00
yuri
30dec6bc02 fix css 2017-01-26 15:34:10 +02:00
yuri
3e56a1117d mass email filters 2017-01-26 15:08:12 +02:00
yuri
c28d680bf4 fix labels 2017-01-26 12:46:38 +02:00
yuri
89aa2950fa fix person name 2017-01-26 12:45:03 +02:00
yuri
d1c13bf03f css 2017-01-26 12:44:55 +02:00
yuri
5dc79086b7 fix attachment 2017-01-26 10:54:04 +02:00
yuri
406d241bc8 fix css 2017-01-25 14:57:21 +02:00
yuri
021760d75f fix css 2017-01-25 14:53:17 +02:00
yuri
77bae5a5e2 error message 2017-01-25 13:56:04 +02:00
yuri
d2cacdc8d9 text field fix 2017-01-25 11:12:59 +02:00
yuri
30097c32b5 fix list view 2017-01-24 17:35:56 +02:00
yuri
c114e08541 fix css 2017-01-24 16:00:26 +02:00
yuri
bf660e81ae css fix 2017-01-24 11:18:54 +02:00
yuri
cf9c4ec0b1 word wrapping in list view 2017-01-23 17:15:50 +02:00
yuri
7649f4d680 user acl fixes 2017-01-23 13:27:59 +02:00
yuri
9d238d270e css fixes 2017-01-23 12:47:00 +02:00
yuri
b89a128292 default tab list and theme change 2017-01-23 12:35:53 +02:00
yuri
ac2e244b11 fix notification update 2017-01-20 17:19:51 +02:00
yuri
76551a59fe modal fixes 2017-01-20 15:46:07 +02:00
yuri
61c1732b9c export fix 2017-01-20 14:34:47 +02:00
yuri
c54c4e9a17 cleanup 2017-01-19 16:29:40 +02:00
yuri
9bc7cefbc5 test fix 2017-01-19 16:22:27 +02:00
yuri
9a918e5d97 after x days filter 2017-01-19 15:21:14 +02:00
yuri
5f578298b4 Merge branch 'master' of https://github.com/espocrm/espocrm 2017-01-19 12:26:36 +02:00
Alasdair Campbell
cf63b1c779 Add .editorconfig file (#373) 2017-01-19 12:26:19 +02:00
yuri
85992dde1a installer fix 2017-01-19 11:58:55 +02:00
yuri
17dac5bde8 diff change 2017-01-18 16:18:21 +02:00
yuri
3887acfbf8 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-01-18 16:07:45 +02:00
Taras Machyshyn
ad5a0b2060 Added support PHP 7.1 2017-01-18 16:06:06 +02:00
yuri
bb2ddb3d1d version 2017-01-18 16:05:33 +02:00
yuri
6a6e0adb57 css change 2017-01-18 15:21:59 +02:00
yuri
4fa8d9b919 ui dialog change 2017-01-18 15:21:49 +02:00
yuri
908d2f69d3 css change 2017-01-18 11:13:26 +02:00
yuri
4c3c0db2c5 theme changes 2017-01-17 15:28:15 +02:00
yuri
fb4db584c2 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2017-01-17 15:11:57 +02:00
yuri
fcf645e73f changes theme 2017-01-17 15:10:09 +02:00
Taras Machyshyn
fac5704c9e Added 2017 year 2017-01-17 15:07:08 +02:00
Taras Machyshyn
a3548bc194 Improved crontab command for scheduled jobs 2017-01-17 13:59:03 +02:00
yuri
055a7daad5 theme change 2017-01-17 13:02:24 +02:00
Taras Machyshyn
e4a8bc38df Merge branch 'hotfix/4.3.2' 2017-01-17 12:59:58 +02:00
yuri
86bd451b05 fix theme 2017-01-17 12:44:53 +02:00
yuri
1101510817 cleanup 2017-01-17 12:27:33 +02:00
yuri
01d8dddeac portal tab list 2017-01-17 12:27:21 +02:00
yuri
ee2a8d2a39 theme changes 2017-01-17 12:21:15 +02:00
yuri
d8894d6645 fix nav 2017-01-16 18:03:34 +02:00
yuri
07daf6f5a0 rename theme 2017-01-16 16:44:40 +02:00
yuri
496ede69ac navbar: more delimiter 2017-01-16 16:34:45 +02:00
yuri
6068cbf3cc fix settings page title 2017-01-16 15:57:10 +02:00
yuri
7264fce1dd Merge branch 'hotfix/4.3.2' 2017-01-13 17:45:05 +02:00
yuri
a8a1acdbd0 fix dashlet translation 2017-01-13 17:44:54 +02:00
yuri
059c43f840 slim version certain 2017-01-13 16:56:10 +02:00
yuri
a5cb393447 ditch mcrypt 2017-01-13 16:12:17 +02:00
yuri
0b98c7beb5 fix theme 2017-01-12 16:00:13 +02:00
yuri
be735e572e sortable side panels 2017-01-12 15:28:29 +02:00
yuri
807dcb7901 theme changes 2017-01-12 12:19:12 +02:00
yuri
19241aca7a smtp admin changes 2017-01-12 12:10:59 +02:00
yuri
05e1145084 fix z index 2017-01-12 12:06:44 +02:00
yuri
22972b32b4 internal smtp 2017-01-12 11:58:39 +02:00
yuri
0d89218031 theme changes 2017-01-11 17:57:27 +02:00
yuri
baa0dd91d0 theme changes 2017-01-11 16:48:42 +02:00
yuri
09c11b2d7a calendar shadow 2017-01-11 16:37:00 +02:00
yuri
bb26bc1eab theme fixes 2017-01-11 16:31:41 +02:00
yuri
26a60fb68b theme lang change 2017-01-11 15:15:05 +02:00
yuri
3cebf73464 rtl and new cool theme 2017-01-11 15:11:12 +02:00
yuri
9e8550b572 Merge branch 'master' of https://github.com/espocrm/espocrm 2017-01-10 16:05:29 +02:00
yuri
cb8b6654e7 Merge branch 'hotfix/4.3.2' 2017-01-10 16:05:03 +02:00
yuri
8969866aec fix nl in email template text field 2017-01-10 16:04:54 +02:00
Taras Machyshyn
91ba7dfaf0 Fixed warnig for preg_match for some class names 2017-01-10 15:20:16 +02:00
Mauricio Panuncio
deb4dad643 Translate es (#359)
* Translate es_ES: Globals. Admin.

* Tickets.

* Emails.

* New translations (missing).

* New translations (missing) II.

* Various.

* Opportunities: Improvement. Self-explanatory names.

* Some small fixes.

* Undo Tickets. Redo Casos.

* Fix: 'Lenguaje' to 'Idioma'.

* Fix some erros in the installation screens.

* Fix some erros in the installation screens II.

* Chamge mod

* Translate. Round 1.

* Translate ES. Stream: Actividades to Historia.

* Translate ES. Lead: Potencial to Posible Cliente.

* Translate ES. Log: Registros.

* Translate ES. Round 2.

* Translate ES. Round 3.

* Translate ES. Round 4.

* Translate ES. New translations.

* Translate ES. Fix bugs.

* Translate ES. Activity: Actividades to Actividades planeadas.

* Translate ES. Hostory: Historia to Historial de aactividades.

* Translate ES. Improvements.
2017-01-09 20:57:42 +02:00
yuri
720635d7a3 older than x days filter 2017-01-09 13:18:35 +02:00
yuri
e5e082c48b permissions 2017-01-09 12:41:52 +02:00
yuri
d8b2a13c20 mass follow/unfollow actions 2017-01-09 12:36:34 +02:00
yuri
535607e089 Merge branch 'hotfix/4.3.2' 2017-01-09 11:42:18 +02:00
yuri
20f15e749e automatically follow case by portal user 2017-01-09 11:42:09 +02:00
yuri
d14faee83d es_ES lang 2017-01-09 11:12:15 +02:00
yuri
a53ccb66c5 change permissions 2017-01-09 11:02:57 +02:00
yuri
90bc01e467 Merge branch 'master' of https://github.com/espocrm/espocrm 2017-01-09 10:50:44 +02:00
Yuri Kuznetsov
399ac5348a Revert "es_ES - Update translations to today" (#357) 2017-01-08 00:18:39 +02:00
Mauricio Panuncio
61c8a125c3 es_ES - Update translations to today (#356)
* Translate es_ES: Globals. Admin.

* Tickets.

* Emails.

* New translations (missing).

* New translations (missing) II.

* Various.

* Opportunities: Improvement. Self-explanatory names.

* Some small fixes.

* Undo Tickets. Redo Casos.

* Fix: 'Lenguaje' to 'Idioma'.

* Fix some erros in the installation screens.

* Fix some erros in the installation screens II.

* Chamge mod

* Translate. Round 1.

* Translate ES. Stream: Actividades to Historia.

* Translate ES. Lead: Potencial to Posible Cliente.

* Translate ES. Log: Registros.

* Translate ES. Round 2.

* Translate ES. Round 3.

* Translate ES. Round 4.
2017-01-07 18:13:15 +02:00
yuri
84f261752f fix calendar edit 2017-01-05 17:32:39 +02:00
ayman-alkom
ec37ea62a2 add number fields to text filter list (#354) 2017-01-05 11:25:08 +02:00
ayman-alkom
6736f15f61 add number fields to text filter list (#354) 2017-01-05 11:23:13 +02:00
Alasdair Campbell
bc64e7ffe4 Compose from email address not sorted by primary (#351) 2017-01-04 12:54:25 +02:00
Alasdair Campbell
1e51006786 Compose from email address not sorted by primary (#351) 2017-01-04 12:53:10 +02:00
yuri
7357054517 Merge branch 'hotfix/4.3.2' 2017-01-04 12:49:02 +02:00
yuri
b25ff943e4 fix pdf footer 2017-01-04 12:48:53 +02:00
yuri
4446bc520b about 2017-01-03 12:58:18 +02:00
yuri
924d55de6e Merge branch 'hotfix/4.3.2' 2017-01-03 12:29:07 +02:00
yuri
eab9705e08 fix calendar 2017-01-03 12:28:56 +02:00
yuri
25ccc9f685 fix orm 2017-01-03 12:24:12 +02:00
yuri
62894366e6 fix opp stage change 2016-12-30 15:50:52 +02:00
yuri
d06c3f82c3 naming 2016-12-30 15:39:35 +02:00
yuri
a0fd9e05e8 read only param 2016-12-29 17:24:35 +02:00
yuri
dd3e52f230 metadata unset formula 2016-12-29 16:23:46 +02:00
yuri
af60f82322 formula ui 2016-12-29 16:17:54 +02:00
Taras Machyshyn
2e8e466a22 Unit tests fixes 2016-12-29 13:38:29 +02:00
yuri
a3ad4130af Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-12-29 13:37:49 +02:00
yuri
37f718f26e formula dev 2016-12-29 13:37:36 +02:00
Taras Machyshyn
c7e46ecc03 Unit tests fixes 2016-12-27 16:07:40 +02:00
yuri
1e368757ec fix dynamic logic isEmpty 2016-12-27 15:29:07 +02:00
yuri
54122e6ea2 fix dynamic logic isEmpty 2016-12-27 15:28:50 +02:00
yuri
9e3096b674 date/datetime default values 2016-12-27 15:24:14 +02:00
yuri
f0dbe8b78b field manager: opporunity probabilities 2016-12-27 12:42:45 +02:00
yuri
ab89b3c91b Merge branch 'hotfix/4.3.2' 2016-12-27 11:16:26 +02:00
yuri
54e0ee08e6 field manager: enum default 2016-12-27 11:16:14 +02:00
yuri
803e06c019 formula substring 2016-12-26 16:46:14 +02:00
yuri
2057fd7357 Merge branch 'hotfix/4.3.2' 2016-12-26 16:27:51 +02:00
yuri
2561660cf4 fix notice 2016-12-26 16:27:44 +02:00
yuri
e382c59556 formula field 2016-12-26 15:54:07 +02:00
yuri
a003efe7c9 Merge branch 'hotfix/4.3.2' 2016-12-26 11:15:55 +02:00
yuri
1975d16f3a orm: fix issue with bool column in relation table 2016-12-26 11:15:45 +02:00
yuri
da74c37ab1 Merge branch 'hotfix/4.3.1' 2016-12-23 17:15:28 +02:00
yuri
3df9c7eb02 fix stream panel 2016-12-23 16:55:22 +02:00
yuri
5951ac930a fix stream post 2016-12-23 16:31:53 +02:00
yuri
7160c0a65b fix stream panel 2016-12-23 16:30:19 +02:00
yuri
19a9b5c91e fix language.js 2016-12-23 15:56:58 +02:00
yuri
b6d1f26af0 fix cache 2016-12-23 15:52:19 +02:00
yuri
6094c69fc1 formula null 2016-12-23 13:09:36 +02:00
yuri
a11c6a23c4 formula ui 1 2016-12-23 12:52:00 +02:00
yuri
52afd6f11c Merge branch 'hotfix/4.3.1' 2016-12-22 17:23:48 +02:00
yuri
0c10657351 fix import 2016-12-22 17:23:39 +02:00
yuri
36ade17f67 formula item 2016-12-22 17:02:54 +02:00
yuri
469e35d8a0 industries 2016-12-22 11:18:32 +02:00
yuri
39219b6b78 Merge branch 'hotfix/4.3.1' 2016-12-21 17:40:36 +02:00
yuri
977b8fa8e9 fix enum none 2016-12-21 17:40:17 +02:00
yuri
7e0604409a varchar/text none 2016-12-21 17:37:10 +02:00
yuri
83f78cc02c Merge branch 'hotfix/4.3.1' 2016-12-21 16:07:11 +02:00
yuri
c21ec8d5f2 template fix 2016-12-21 16:06:16 +02:00
yuri
41c566e227 template ui improve 2016-12-21 15:56:15 +02:00
yuri
ae82ebbf74 htmlizer file helper 2016-12-21 15:29:12 +02:00
yuri
177018daae entity manager: check reserved names 2016-12-21 15:05:17 +02:00
yuri
003e884056 Merge branch 'hotfix/4.3.1' 2016-12-21 12:33:26 +02:00
yuri
5f481fa2dd fix 2016-12-21 12:20:29 +02:00
yuri
f425584822 Merge branch 'hotfix/4.3.1' 2016-12-21 12:08:35 +02:00
yuri
8c1142481d campaign log fix 2016-12-21 12:08:19 +02:00
yuri
569b995a94 Merge branch 'hotfix/4.3.1' 2016-12-21 12:00:43 +02:00
yuri
d20a26680a fix markdown 2016-12-21 12:00:29 +02:00
yuri
472e1ece5a Merge branch 'hotfix/4.3.1' 2016-12-20 17:52:44 +02:00
yuri
84c56256f7 css 2016-12-20 17:52:30 +02:00
yuri
632467a9a6 close modal on location change 2016-12-20 16:11:20 +02:00
yuri
d2faec45bb close modal on location change 2016-12-20 16:10:33 +02:00
yuri
480772e022 change css list view 2016-12-20 15:17:17 +02:00
yuri
e7bd4c1790 select records create change 2016-12-20 14:37:30 +02:00
yuri
5910b28362 css modal list cache 2016-12-20 14:29:01 +02:00
yuri
a3c32d8389 css modal changes 2016-12-20 14:21:44 +02:00
yuri
e2b0bba6e6 portal users 2016-12-20 14:01:13 +02:00
yuri
4813657568 Merge branch 'hotfix/4.3.1' 2016-12-19 11:56:23 +02:00
yuri
2989181723 fix calendar create acl check 2016-12-19 11:45:01 +02:00
yuri
5df8d833d5 fix lang 2016-12-19 11:26:41 +02:00
yuri
449fc4cddc fix css 2016-12-16 17:24:21 +02:00
yuri
fb87926318 cleanup 2016-12-16 16:43:39 +02:00
yuri
623d94b77f change 2016-12-16 16:34:40 +02:00
yuri
74ad0cab35 fix detailsmall edit small 2016-12-16 16:22:27 +02:00
yuri
4f81706b92 Merge branch 'hotfix/4.3.1' 2016-12-16 15:01:29 +02:00
yuri
4e61bd6048 fix user field list view tpl 2016-12-16 15:00:41 +02:00
yuri
252ae4e18f v 2016-12-16 14:53:06 +02:00
yuri
3249c07bcd Merge branch 'hotfix/4.3.1' 2016-12-16 12:14:28 +02:00
yuri
3def2ef0da enum: show none 2016-12-16 12:14:16 +02:00
yuri
cb0321aa20 lead layout change 2016-12-16 11:56:28 +02:00
yuri
1096f719ae panels fixes 2016-12-16 11:53:55 +02:00
yuri
9bfe12587f formula hook order change 2016-12-15 17:35:58 +02:00
yuri
91d4b26c1c formula 2016-12-15 16:52:29 +02:00
yuri
ef317064b4 fix modified and created fields 2016-12-15 16:42:53 +02:00
yuri
fa3b4f3ac2 export fix 2016-12-15 10:53:55 +02:00
yuri
052c489bf7 fix export error 2016-12-15 10:45:36 +02:00
yuri
f3402e2c4e dont send invitation for self if accepted 2016-12-14 12:23:15 +02:00
yuri
34a3cd9ce5 fix list js error 2016-12-12 11:17:09 +02:00
yuri
4d5f3bcbfe v 2016-12-08 11:41:55 +02:00
yuri
339e1dc897 defaultSidePanelFieldList 2016-12-07 17:32:43 +02:00
yuri
c4e617f18e css 2016-12-07 15:48:35 +02:00
yuri
89bc329ea6 css 2016-12-07 13:21:47 +02:00
yuri
eee49b215e portal user field show up 2016-12-07 11:32:22 +02:00
yuri
d9a8b83268 remove isToSelf not used field 2016-12-07 10:56:32 +02:00
yuri
def7abe3ba fix mention notification 2016-12-07 10:55:33 +02:00
yuri
75e64b3836 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-12-06 15:52:56 +02:00
yuri
efb106c597 fix translated options 2016-12-06 15:50:48 +02:00
Taras Machyshyn
5e1087c6b4 Cache in language 2016-12-06 13:18:06 +02:00
yuri
5f8800defa fix css 2016-12-06 13:08:06 +02:00
yuri
445c0b3834 integration check 2016-12-06 12:24:07 +02:00
yuri
61c1e5ab6c fix mass action list 2016-12-06 11:37:40 +02:00
yuri
2502cad0c1 settings activityEntityList no emails 2016-12-05 14:20:50 +02:00
yuri
76032493b9 fix 2016-12-01 12:33:34 +02:00
yuri
0a3a6b3773 load users config params after login 2016-12-01 12:29:26 +02:00
yuri
014d47d017 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-12-01 11:45:00 +02:00
Taras Machyshyn
8bd7734ae3 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-12-01 11:22:48 +02:00
Taras Machyshyn
7aa2ba917f Added 'userItems' 2016-12-01 11:21:20 +02:00
yuri
96f0ce2381 fix template 2016-11-30 17:41:30 +02:00
yuri
f1eb5b9862 email notification about email received 2016-11-30 15:54:23 +02:00
yuri
45cb5a6e38 Merge branch 'master' of https://github.com/espocrm/espocrm 2016-11-30 11:13:43 +02:00
ayman-alkom
4131ea54ae remove decleration duplicate (#319) 2016-11-30 11:12:56 +02:00
yuri
3806affe1b add industry 2016-11-30 10:58:17 +02:00
yuri
6ea3a03de3 readme change 2016-11-29 17:55:59 +02:00
yuri
5b25e8b7e6 fix address validate error 2016-11-29 17:04:27 +02:00
yuri
60c96ba5f7 import status colors 2016-11-29 15:29:09 +02:00
yuri
9732852891 job search fix 2016-11-29 15:27:28 +02:00
yuri
326b46a6e6 fix setting max records per page and int max length 2016-11-29 15:18:31 +02:00
yuri
29924ea3b1 css fix 2016-11-29 12:37:47 +02:00
yuri
434506699b fix list width 2016-11-29 12:00:13 +02:00
yuri
eeaaaf7af1 deferred filter 2016-11-29 11:19:32 +02:00
yuri
3f5dab0680 fix task date end field 2016-11-29 11:03:51 +02:00
yuri
dd69658f2a css change 2016-11-29 10:37:23 +02:00
yuri
3c2d998a30 added industries 2016-11-28 16:54:09 +02:00
yuri
a0ead9d774 fix css 2016-11-25 16:24:39 +02:00
yuri
4460a105a8 dynamic logic ID field and mass email duplicate fix 2016-11-25 15:52:05 +02:00
yuri
c6b369587d fix css 2016-11-25 12:46:13 +02:00
yuri
8c19ad5f7f fix warning 2016-11-25 12:22:48 +02:00
yuri
1824e0d0a6 version 2016-11-22 14:29:35 +02:00
yuri
404bb0c3cd layout panel colors 2 2016-11-22 12:27:03 +02:00
yuri
7fd6b16cf3 fix color panels 2016-11-22 10:39:28 +02:00
yuri
47abd1ab52 middle panel styles 2016-11-21 15:32:10 +02:00
yuri
5c8d728ac5 cleanup 2016-11-21 15:09:55 +02:00
yuri
2706bc461e fix error 2016-11-21 15:09:36 +02:00
yuri
91f52e4f42 panel color and sidePanels Small layout 2016-11-21 14:58:08 +02:00
yuri
5538dd45d3 preferences: reload page after theme or language changed 2016-11-21 11:00:06 +02:00
yuri
105205a9aa change in record base 2016-11-21 10:59:50 +02:00
yuri
e3547717a0 change varchar filter type order 2016-11-21 10:35:09 +02:00
yuri
1714e0e9a0 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-11-21 10:30:50 +02:00
yuri
afdd15ac44 text field: contains filter by default 2016-11-21 10:28:54 +02:00
yuri
09097dba4a cleanup 2016-11-21 10:28:23 +02:00
yuri
01a8fbd5b1 fix label 2016-11-21 10:27:21 +02:00
yuri
f2d5eed7e3 company entity: check for duplicates 2016-11-21 10:26:27 +02:00
Taras Machyshyn
cfae3cde1d Label correction 2016-11-18 18:18:01 +02:00
Taras Machyshyn
87a0c1b293 Installer bug fixes 2016-11-18 18:17:37 +02:00
Taras Machyshyn
486c8c8f37 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-11-18 17:33:45 +02:00
Taras Machyshyn
ea99ca3d38 FileManager: bug fixes 2016-11-18 17:33:29 +02:00
yuri
2069a25f30 b2c mode in settings 2016-11-18 11:31:25 +02:00
yuri
baf3493044 show up date time on mouse over shortened dates 2016-11-18 11:23:12 +02:00
yuri
543a12a475 note post textarea height 2016-11-18 11:11:00 +02:00
yuri
a73f97744a fix email address add 2016-11-18 10:58:59 +02:00
yuri
ae135ab678 fix mention text 2016-11-17 17:25:08 +02:00
yuri
96366548a3 fix avatar for deleted user and campaign tracker 1px 2016-11-17 10:49:00 +02:00
yuri
54cdd5180d industry 2016-11-17 10:25:56 +02:00
yuri
0a5ce2a4d4 industries 2016-11-16 17:09:50 +02:00
yuri
a4e1ccc4bb fix label 2016-11-16 15:28:30 +02:00
Taras Machyshyn
55c632979e Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-11-16 15:25:01 +02:00
Taras Machyshyn
b1208a449e Integration tests: added tests for upgrade, extension installation 2016-11-16 15:24:48 +02:00
Taras Machyshyn
9e2b329beb Integration tests improvements 2016-11-16 15:23:49 +02:00
Taras Machyshyn
10d329094c Added 'deleteBeforeCopy' for upgrade/extensions 2016-11-16 15:21:39 +02:00
yuri
38f44b3e5f cases layout change 2016-11-16 13:06:42 +02:00
yuri
c99a1261d5 lead industry field 2016-11-16 11:54:17 +02:00
yuri
4e2e344892 industry field additions 2016-11-16 11:45:31 +02:00
yuri
e0128bf54f contact-document relation 2016-11-16 11:17:46 +02:00
yuri
a683e6bdf8 improve export 2016-11-15 12:15:01 +02:00
yuri
bc64effb14 cleanup 2016-11-14 13:23:22 +02:00
yuri
6b0a280e2c fix layout swaping 2016-11-14 12:44:36 +02:00
yuri
ddf25e02e3 email: has attachment filter 2016-11-14 10:39:18 +02:00
yuri
967d5a6387 addition to about page 2016-11-11 16:46:11 +02:00
yuri
a5137b85af downgrade zendservicemanager 2016-11-11 16:34:38 +02:00
yuri
1ed79fedf0 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-11-10 14:44:40 +02:00
yuri
8a8cb08b99 order export 2016-11-10 14:41:39 +02:00
yuri
b49aaa69cc fix audited 2016-11-10 14:14:46 +02:00
yuri
015357d551 industries 2016-11-10 13:19:34 +02:00
yuri
5419d76080 link field empty name and audited note change 2016-11-10 12:58:54 +02:00
yuri
21e1422994 filed manager hook change 2016-11-09 11:43:30 +02:00
yuri
dafb076659 field manager inficate that field is readOnly 2016-11-09 10:56:19 +02:00
Taras Machyshyn
491f3d27ff Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-11-08 12:13:35 +02:00
Taras Machyshyn
3be58d5d09 Integration test improvements 2016-11-08 12:13:25 +02:00
yuri
8aeb23a985 version 2016-11-08 11:46:19 +02:00
yuri
fa99040232 downgrade zend 2016-11-08 11:45:32 +02:00
yuri
2e928f2442 clenup 2016-11-08 11:33:51 +02:00
yuri
8ebb35c0d5 my activities dashlet entity list 2016-11-07 17:18:04 +02:00
yuri
7d17bee201 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-11-07 16:06:12 +02:00
yuri
5c345fb4d9 import: idle mode 2016-11-07 16:01:52 +02:00
yuri
d2cd098ab0 fix record view readOnly 2016-11-07 15:09:15 +02:00
yuri
f4a88df067 import: skip search for duplicates 2016-11-07 12:54:14 +02:00
yuri
8f4917eb24 delete duplicates before import 2016-11-07 11:46:09 +02:00
yuri
a9310b108a fix warning 2016-11-07 10:45:52 +02:00
Taras Machyshyn
8c638dffd4 commented out sendRequest tests 2016-11-04 18:56:07 +02:00
yuri
0151273a75 cleanup 2016-11-04 17:39:00 +02:00
yuri
b10dc8128c conrollerManager in container 2016-11-04 17:32:58 +02:00
yuri
476d36c9c5 comment sendRequest tests 2016-11-04 17:22:55 +02:00
yuri
64087defd0 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-11-04 17:21:18 +02:00
yuri
807b7bc349 tooltip 2016-11-04 16:57:18 +02:00
yuri
3018c345fa entity manager tooltips 2016-11-04 16:34:12 +02:00
yuri
8f35c59943 ckeanup 2016-11-04 15:34:49 +02:00
yuri
348332f7ca entity manager: fix loading after creation 2016-11-04 12:52:24 +02:00
yuri
9ebd992222 default status styles 2016-11-04 12:43:49 +02:00
yuri
9597ea0dbd stream messages improvements 2016-11-04 12:29:39 +02:00
yuri
23fb6c6e1f status field in entity manager 2016-11-04 11:36:28 +02:00
Taras Machyshyn
ddb5033de8 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-11-03 18:00:15 +02:00
Taras Machyshyn
43a49e3c31 Integration tests: added 'createUser' method, portal support 2016-11-03 18:00:03 +02:00
yuri
5a06ee50d8 fix notice 2016-11-03 16:19:43 +02:00
yuri
c02f65ef81 audited relations 2016-11-03 16:14:19 +02:00
yuri
dbb9b20b7f fix case compose email 2016-11-03 11:37:39 +02:00
yuri
3bfd540f53 kb: move to top move to bottom 2016-11-03 11:11:03 +02:00
yuri
a971f7357f fix dynamic logic 2016-11-02 16:31:04 +02:00
yuri
4918f8f985 task reminders 2016-11-02 16:30:56 +02:00
Taras Machyshyn
988388ed16 Added 'sendRequest' possibility 2016-11-02 15:52:38 +02:00
yuri
f1de9deb80 event entity: reminders 2016-11-02 12:08:01 +02:00
yuri
2642a6ea6e fix notice 2016-11-02 11:52:42 +02:00
yuri
74b82c92d8 fix default layout detailSmall 2016-11-02 11:15:38 +02:00
yuri
ded3d112b2 created and modified fields fixes 2016-11-02 11:11:51 +02:00
yuri
c9e7f02b23 cut text columns 2016-11-01 15:07:18 +02:00
yuri
c7fb864e04 email changes and test 2016-11-01 12:54:51 +02:00
yuri
16d300445c fix emails 2016-11-01 12:43:20 +02:00
yuri
edc24621a6 fix php mime mail parser 2016-10-31 15:52:38 +02:00
yuri
17b48c0e4c fix wysywyg issue with base tags 2016-10-31 15:52:29 +02:00
yuri
771d58f425 phpmimemailparser 2016-10-31 11:30:14 +02:00
Felix Kaechele
fd76459077 Fix de_DE translation (#269)
* Fix escape symbols in translations

Signed-off-by: Felix Kaechele <felix@kaechele.ca>

* Update German translation

Signed-off-by: Felix Kaechele <felix@kaechele.ca>
2016-10-28 15:21:27 +03:00
yuri
1955dff68e manual merge 2016-10-28 14:50:48 +03:00
yuri
730b5fb8a9 fix calendar dashlet 2016-10-28 14:46:37 +03:00
yuri
c1a115e2b0 reminders: skip if declined 2016-10-21 15:55:03 +03:00
yuri
7773e41ad4 convert lead changes 2016-10-21 14:48:58 +03:00
yuri
304bbb62ad fix naming 2016-10-21 12:05:36 +03:00
yuri
7b439ace04 cleanup 2016-10-21 11:32:10 +03:00
yuri
d9ef87fb90 fix naming 2016-10-21 11:30:21 +03:00
yuri
2333b7a1ef user permission = all by default 2016-10-21 11:21:03 +03:00
yuri
1a00932c63 Merge branch 'hotfix/4.2.7' 2016-10-20 15:48:49 +03:00
yuri
1f09015c86 fix ids 2016-10-20 15:48:33 +03:00
yuri
5d79d8520f email: show group email account if email address matches 2016-10-20 15:04:26 +03:00
yuri
dde044d8c5 imptove email/phone filters 2016-10-20 14:53:47 +03:00
yuri
aeeb84b626 fix text and varchar 2016-10-20 14:47:18 +03:00
yuri
ccb9022e16 fix email address search 2016-10-20 12:47:44 +03:00
yuri
a9e783b5f1 email autocomplete: users first 2016-10-20 11:36:52 +03:00
yuri
46190df6ff fix notice 2016-10-20 11:30:19 +03:00
yuri
1eb258cab7 email filtering fix 2016-10-20 11:26:48 +03:00
yuri
a3836b0091 email fix 2016-10-19 16:38:27 +03:00
yuri
7fbc9fbac8 email fix 2016-10-19 16:38:00 +03:00
yuri
d0b5e2188b add marketing industry 2016-10-19 16:13:01 +03:00
yuri
dfa2d6be89 email notifications related to parent 2016-10-19 16:04:43 +03:00
yuri
276941197f email importer refactoring 2016-10-19 15:46:07 +03:00
yuri
20569e4252 fix notices 2016-10-19 12:47:54 +03:00
yuri
3b7f99daa1 fix import 2016-10-19 12:14:21 +03:00
Taras Machyshyn
5ee30d9f3f Integration test improvements 2016-10-17 17:35:44 +03:00
yuri
3cde7fa5e3 company type fix 2016-10-11 15:11:36 +03:00
yuri
aecb9bbdf4 lang 2016-10-11 15:11:25 +03:00
yuri
1a95e14ee8 entity manager improvements 2016-10-11 12:32:28 +03:00
yuri
83aa07b918 entity manager remove layouts 2016-10-11 11:30:53 +03:00
yuri
4f8eea59fe removeDir method 2016-10-11 11:28:45 +03:00
yuri
248280e086 fix entity manager 2016-10-11 11:28:38 +03:00
yuri
02b465ab8c company entity type 2016-10-11 11:22:48 +03:00
yuri
c9d26dc1d8 base plus entity template 2016-10-10 17:32:03 +03:00
yuri
389b158134 look up email address in custom entities 2016-10-10 16:35:30 +03:00
yuri
312af9befb change person layouts 2016-10-10 16:19:34 +03:00
yuri
b7f22bf687 Merge branch 'stable' 2016-10-10 15:33:27 +03:00
yuri
f062ac255a version 2016-10-10 15:19:14 +03:00
yuri
dd8082244c activities and tasks for person type 2016-10-10 12:37:21 +03:00
yuri
25ff7e17c1 activities dashlet change 2016-10-07 15:27:17 +03:00
yuri
f4b3071a92 change readme 2016-10-07 14:50:34 +03:00
yuri
0c7b182215 Merge branch 'stable' 2016-10-07 14:36:32 +03:00
yuri
2223a1ecf4 getActivitiesQuery change 2016-10-07 12:54:10 +03:00
yuri
3a24784980 fix email filter 2016-10-07 12:46:46 +03:00
yuri
f86564a580 tests 2016-10-07 12:46:27 +03:00
yuri
58897949eb fix email filter 2016-10-07 12:46:19 +03:00
yuri
2dee859b2a fix link field 2016-10-07 12:10:57 +03:00
yuri
b1dbd173ad fix mail filters 2016-10-07 11:14:37 +03:00
yuri
a9fc290627 mail filter test 2016-10-07 11:14:15 +03:00
yuri
12794968fc fix mail filters 2016-10-07 11:14:02 +03:00
yuri
1b4cbb91ee activities refactor additional 2016-10-06 17:26:51 +03:00
yuri
62f1362cf6 activities big refactor 2016-10-06 16:46:52 +03:00
yuri
49031d0b33 fix orm 2016-10-06 11:49:57 +03:00
yuri
22fea07b0a fix orm 2016-10-05 17:54:00 +03:00
yuri
81692371ec search by hasOne link 2016-10-05 15:35:53 +03:00
yuri
a96314f0f0 Merge branch 'hotfix/4.2.6' 2016-10-05 12:37:45 +03:00
yuri
a92c294255 fix layout manager reset to default 2016-10-05 12:37:38 +03:00
yuri
7c554a605e originalLead field 2016-10-05 12:07:08 +03:00
yuri
57eeec63c1 remove opportunities link from lead 2016-10-05 11:44:07 +03:00
yuri
bd158008b2 update tcpdf 2016-10-04 12:58:24 +03:00
yuri
c0ae8d5cdd Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-10-03 12:17:33 +03:00
yuri
78347920aa fix settings entityDefs 2016-10-03 12:17:26 +03:00
yuri
c88e662a30 mass email: massEmailDisableMandatoryOptOutLink 2016-10-03 12:03:28 +03:00
yuri
5ae57ff5f6 fix campaign log percentage 2016-10-03 11:32:06 +03:00
Taras Machyshyn
7c74c85a66 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-09-29 17:48:00 +03:00
Taras Machyshyn
07fc2123e7 Added testData cache folder to gitignore 2016-09-29 17:47:46 +03:00
yuri
afdb47b601 fix test email 2016-09-29 17:35:57 +03:00
yuri
5ea437afbb Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-09-29 17:30:49 +03:00
yuri
c7041546c4 fix number test 2016-09-29 17:27:26 +03:00
yuri
1d2fd21a06 Merge branch 'hotfix/4.2.6' 2016-09-29 17:25:35 +03:00
yuri
27624ead8d number fix 2 2016-09-29 17:25:25 +03:00
Taras Machyshyn
fefc003984 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-09-29 17:21:23 +03:00
Taras Machyshyn
70d3bf9fff Integration tests: rename method to 'createApplication' 2016-09-29 17:21:05 +03:00
yuri
4a64c4b648 Merge branch 'hotfix/4.2.6' 2016-09-29 17:21:01 +03:00
yuri
15c980e57f rename number to number util 2016-09-29 17:20:52 +03:00
yuri
9d8fc5b8ea sort by address field 2016-09-28 17:46:14 +03:00
yuri
8184221d2b Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-09-28 16:15:31 +03:00
yuri
5786983d8b add team to roles 2016-09-28 16:13:53 +03:00
yuri
1e1468ab68 acl changes and user role 2016-09-28 15:36:41 +03:00
yuri
e3f0177759 role changes 2016-09-27 16:46:14 +03:00
yuri
f1fc6160fe fix typo 2016-09-27 16:30:59 +03:00
yuri
38d4a39014 campaign log to target list 2016-09-27 15:13:25 +03:00
yuri
566d0c1aa0 fix orm query in array 2016-09-27 12:35:40 +03:00
yuri
ce752b32fd naming fix 2016-09-27 11:15:59 +03:00
Taras Machyshyn
a61553d08b Improved tests 2016-09-26 16:36:47 +03:00
yuri
daacb026d8 panel actions changes 2016-09-26 16:16:40 +03:00
yuri
0ae637fba2 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-09-26 12:50:41 +03:00
yuri
b81fd66b85 remove note with parent remval 2016-09-26 12:48:57 +03:00
yuri
071e94ac97 Merge branch 'hotfix/4.2.6' 2016-09-26 12:04:32 +03:00
yuri
a98465f30e skip notification checking while upgrade 2016-09-26 12:04:10 +03:00
yuri
e949a0bae6 dashboard: ability to rename tabs 2016-09-26 11:31:29 +03:00
yuri
f7f9e2fda0 fix export 2016-09-23 11:37:21 +03:00
yuri
80a0571b0c export: skip attributes 2016-09-23 11:31:38 +03:00
yuri
d91897a922 fix export 2016-09-22 17:31:42 +03:00
Taras Machyshyn
05180ece92 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-09-22 17:25:40 +03:00
Taras Machyshyn
ee8e960ce4 Added integration tests 2016-09-22 17:25:26 +03:00
yuri
5b4a8666cd Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-09-22 17:17:21 +03:00
yuri
7240757a28 export field list 2016-09-22 17:15:27 +03:00
yuri
2a8baa2f34 export: use POST request 2016-09-22 14:54:35 +03:00
yuri
0c44e0d101 duplicate target list only not opted out 2016-09-22 12:45:23 +03:00
yuri
63ab5b77f3 relationship copy change 2016-09-22 12:32:53 +03:00
yuri
300198c9fa duplicate with links 2016-09-22 11:24:21 +03:00
yuri
340af18beb Merge branch 'hotfix/4.2.6' 2016-09-20 15:58:34 +03:00
yuri
8862fd279e fix language enum translation 2016-09-20 15:47:58 +03:00
Taras Machyshyn
83cff1bc42 Added favicon to installator 2016-09-20 11:54:51 +03:00
yuri
a75534e32a Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-09-20 11:52:07 +03:00
Taras Machyshyn
462eb8792c Added test cache to gitignore 2016-09-20 11:51:57 +03:00
yuri
19f29c0401 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-09-20 11:49:41 +03:00
Taras Machyshyn
27657260fc Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-09-20 11:47:40 +03:00
yuri
c17fb9ab1e Merge branch 'hotfix/4.2.6' 2016-09-16 17:46:31 +03:00
yuri
bd6eafd291 version 2016-09-16 17:44:26 +03:00
yuri
a63306603a fix email filter 2016-09-16 17:44:10 +03:00
yuri
d3b1114b1e filters refactor 2016-09-16 16:38:10 +03:00
yuri
87340e29e8 base field: search data 2016-09-16 15:38:21 +03:00
yuri
4f1f8d9301 lead: created fields filter populate 2016-09-16 14:51:20 +03:00
yuri
664b294471 bool notNull 2016-09-16 11:23:44 +03:00
yuri
7774c12ab2 lang 2016-09-16 11:02:14 +03:00
yuri
6592dfc4da mass retrive from trash 2016-09-16 11:00:19 +03:00
yuri
e823ecc178 user: create portal user fix 2016-09-15 12:59:06 +03:00
yuri
74d5a737db int/float: isEmpty, isNotEmpty filters 2016-09-15 12:07:26 +03:00
yuri
bf9799af66 fix markdown link syntax 2016-09-14 17:09:10 +03:00
yuri
fc9b67672f date: isEmpty filter 2016-09-14 16:14:06 +03:00
yuri
6e8342511f lang 2016-09-14 16:01:29 +03:00
yuri
da2cebd765 fix orm 3 2016-09-14 14:03:30 +03:00
yuri
ef19dc3330 fix orm 2 2016-09-14 13:53:11 +03:00
Taras Machyshyn
2f73a2d19b Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-09-14 13:25:07 +03:00
yuri
fab257eb97 fix orm 2016-09-14 13:07:32 +03:00
yuri
850c3fd696 orm: get parent relation 2016-09-14 13:00:22 +03:00
yuri
a619738652 fix dashboard javascript error 2016-09-13 16:53:06 +03:00
Taras Machyshyn
395c575f78 Moved tests into 'unit' folder 2016-09-13 16:20:42 +03:00
yuri
ecf8256b14 fix textFilterFields list 2016-09-13 15:26:51 +03:00
yuri
2d6d6a2b19 link parent: search by parent type 2016-09-13 15:17:49 +03:00
yuri
ee404fa400 parentType = null if empty 2016-09-13 15:05:38 +03:00
yuri
10fc546369 Merge branch 'hotfix/4.2.5' 2016-09-13 13:13:00 +03:00
yuri
0ea0c09007 fix acl 2016-09-13 13:12:39 +03:00
yuri
85b2dbac11 Merge branch 'hotfix/4.2.5' 2016-09-13 10:28:39 +03:00
yuri
d69f994f4c fix insert template issue with signature 2016-09-13 10:28:24 +03:00
yuri
12a368054a dynamic logic options 2016-09-12 17:27:39 +03:00
yuri
7a2a9de174 Merge branch 'hotfix/4.2.5' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.2.5 2016-09-12 11:17:15 +03:00
yuri
0e14f2b987 fix dynamic logic save 2016-09-12 11:16:36 +03:00
yuri
a50d97adf5 cleanup 2016-09-09 16:36:57 +03:00
yuri
62e9138cf1 minor core changes, metadata delete fix 2016-09-09 16:33:43 +03:00
yuri
657e7f0e37 email sender: define sender header 2016-09-08 15:05:58 +03:00
yuri
66d648c7d4 hack zend messageId bug 2016-09-08 12:42:53 +03:00
yuri
08dd77a6b6 metadata refactoring 2016-09-08 11:59:33 +03:00
yuri
037f0d4db1 dynamicLogic edit 3 2016-09-07 17:18:40 +03:00
yuri
19ff591105 fix date field default null 2016-09-07 15:17:00 +03:00
Taras Machyshyn
7d2655f757 Fixed warnings on PHP 7 2016-09-07 15:04:06 +03:00
yuri
7b1a1be366 dynamicLogic edit 2 2016-09-06 16:59:50 +03:00
yuri
1fc3ae72b5 dynamicLogic edit 1 2016-09-05 17:01:41 +03:00
yuri
991b864881 tabs fix 2016-09-05 11:35:04 +03:00
yuri
f95fa96ae1 fix package.json 2016-09-05 11:13:23 +03:00
yuri
e33cdf268a dynamicLogic change 2016-09-05 11:12:36 +03:00
yuri
dcae13f4dc dynamicLogic string dev 2016-09-02 17:17:31 +03:00
yuri
96ac275970 client: fix naming 2016-09-02 16:17:09 +03:00
yuri
e58a4c4bbf fix stream status update message 2016-09-02 12:43:26 +03:00
yuri
c35985e658 Merge branch 'master' of https://github.com/espocrm/espocrm 2016-09-02 12:40:19 +03:00
yuri
4bc5a89ac2 fix stream status update message 2016-09-02 12:40:09 +03:00
yuri
b7e14d60cc dynamicLogic string change 2016-09-02 12:31:45 +03:00
Mauricio Panuncio
7164a71d88 es_ES - Complete translations to today (#219)
* Translate es_ES: Globals. Admin.

* Tickets.

* Emails.

* New translations (missing).

* New translations (missing) II.

* Various.

* Opportunities: Improvement. Self-explanatory names.

* Some small fixes.

* Undo Tickets. Redo Casos.
2016-09-02 12:30:13 +03:00
yuri
6bedd86e08 dynamic logic development 2016-09-01 17:38:47 +03:00
yuri
d39e99cbdd dynamic logic changes 2016-09-01 11:24:13 +03:00
yuri
ab3134f44a dynamicLogic additional compare types 2016-08-31 17:23:00 +03:00
yuri
5aaca9921c dynamicLogic core 2 2016-08-31 16:28:25 +03:00
yuri
9223e43b7c htmlizer: format number fix 2016-08-31 14:55:12 +03:00
yuri
3766dd16e7 dynamicLogic core 1 2016-08-31 14:48:51 +03:00
yuri
e53aff0031 fill primary account on selecting from account 2016-08-30 15:30:06 +03:00
yuri
4a40f1fba7 trim smtp credentials 2016-08-30 14:51:08 +03:00
yuri
8432e9dcc8 fix endWidth search 2016-08-30 13:05:41 +03:00
yuri
04e9bd9de3 fix endWidth search 2016-08-30 13:04:52 +03:00
yuri
ed8ed591f7 user: search by position 2016-08-30 13:00:37 +03:00
yuri
34ff0218b9 email notifications about posts w/o parent 2016-08-29 17:12:42 +03:00
yuri
2f6c928077 fix notification parent not null 2016-08-29 16:40:24 +03:00
yuri
eff0152f44 layout manager: Side Panels 2016-08-29 15:51:17 +03:00
yuri
a3188ce694 preferences: doNotFillAssignedUserIfNotRequired 2016-08-29 12:36:21 +03:00
yuri
4bf81be56f fix naming 2016-08-29 12:22:37 +03:00
yuri
7c22960f42 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-08-26 17:44:40 +03:00
yuri
3d6f90ad93 fix field manager 2016-08-26 17:44:04 +03:00
yuri
a02aebeed2 tooltips editable 2016-08-26 15:01:41 +03:00
Taras Machyshyn
d06afd4def Deleted unnecessary file 2016-08-26 14:25:30 +03:00
Taras Machyshyn
88e148fca8 Possibility to redefine hooks 2016-08-26 14:23:41 +03:00
Taras Machyshyn
2d00ef314f Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-08-26 14:22:35 +03:00
yuri
0b6a29a035 field manager: reset to detault 2016-08-26 12:19:50 +03:00
yuri
5feb0eb7c7 fix FieldManager controller 2016-08-26 11:21:09 +03:00
yuri
48cb718fbe naming change 2016-08-26 10:51:09 +03:00
yuri
13ad6ec0d0 field manager: change tpl 2016-08-26 10:48:36 +03:00
yuri
9cfdb3a00b Merge branch 'master' of https://github.com/espocrm/espocrm 2016-08-25 17:24:16 +03:00
rodrigoscoelho
b560254df2 Adding Home Page APP meta info for Android and IOS (#145)
This will allow the program to start as a separated program on Android and IOS. As a native program.
2016-08-25 17:23:44 +03:00
yuri
101ed19073 shortcut icon 2016-08-25 17:23:03 +03:00
yuri
65868fd26a fix unsubscribe 2016-08-25 17:07:30 +03:00
yuri
d2e5b26765 update zend 2016-08-25 17:00:34 +03:00
yuri
2cac1ea608 unsubscribe changes 2016-08-25 16:54:30 +03:00
yuri
9d37e68e24 sync contact name on portal user update 2016-08-25 13:01:08 +03:00
yuri
290a1c5b31 php 5.4 drop 2 2016-08-25 13:00:50 +03:00
yuri
ff924f666f drop php 5.4 support 2016-08-25 12:25:30 +03:00
yuri
8c5eb9c913 update zend 2016-08-25 12:19:06 +03:00
yuri
25e72fa6a5 Merge branch 'hotfix/4.2.5' 2016-08-25 11:58:24 +03:00
yuri
76602aede1 email import: fix for emails w/o subject header 2016-08-25 11:45:56 +03:00
Ayman Alkom
77411702a7 remove repeated key (#205) 2016-08-25 10:44:29 +03:00
Ayman Alkom
1aeee24d97 remove repeated key (#205) 2016-08-25 10:43:53 +03:00
yuri
d8cd0d31db email template foreign fields and acl 2016-08-25 10:43:06 +03:00
yuri
e72557bb59 Merge branch 'hotfix/4.2.5' 2016-08-24 11:09:41 +03:00
yuri
84e587fcaf mass email: automatically fill name 2016-08-24 10:49:53 +03:00
yuri
f8e75dccdf version 2016-08-23 15:41:32 +03:00
yuri
b6eca1db17 fix email entityDefs 2016-08-23 15:39:00 +03:00
yuri
6ff414ffcd fix users teams field 2016-08-23 15:26:00 +03:00
yuri
b54c9a797d Merge branch 'hotfix/4.2.5' 2016-08-23 12:05:51 +03:00
yuri
7acbf3084d template: related attributes 2016-08-23 12:05:29 +03:00
yuri
87847446a8 css cleanup 2016-08-23 11:18:20 +03:00
yuri
59f250b386 allow template entity 2016-08-23 11:17:39 +03:00
yuri
f93ce594d0 add mobile phone type to account 2016-08-23 11:13:58 +03:00
yuri
c41f4e51e5 fix filter fields css 2016-08-23 11:01:17 +03:00
yuri
6efd355864 remove tabs 2016-08-23 10:11:37 +03:00
Ayman Alkom
7ee2ee9d35 small syntax fixes (#197)
* fix variable name

* init $number variable

* another fix
2016-08-23 10:09:15 +03:00
Ayman Alkom
737215c599 small syntax fixes (#197)
* fix variable name

* init $number variable

* another fix
2016-08-23 10:08:17 +03:00
Yuri Kuznetsov
ced0c25a08 Merge pull request #194 from grzegorzgie/patch-3
Fix pl_PL
2016-08-22 19:51:22 +03:00
Yuri Kuznetsov
5e810d2aa3 Merge pull request #193 from grzegorzgie/patch-2
Fix pl_PL
2016-08-22 19:51:09 +03:00
Yuri Kuznetsov
c9e27dd190 Merge pull request #192 from grzegorzgie/patch-2
Fix pl_PL
2016-08-22 19:50:12 +03:00
yuri
1f8a14aca0 fix warning 2016-08-22 15:50:21 +03:00
yuri
f518ae59c0 activities small refactoring 2016-08-22 12:27:18 +03:00
Taras Machyshyn
c5866f3d86 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-08-22 12:21:16 +03:00
yuri
4d4bde46f8 version 2016-08-22 11:02:41 +03:00
yuri
cb89ad59af cleanup 2016-08-22 11:00:03 +03:00
yuri
092b5024fe it_IT language 2016-08-22 10:36:17 +03:00
grzegorzgie
8221f7182b Fix pl_PL 2016-08-21 13:21:43 +02:00
grzegorzgie
ecee739b1a Fix pl_PL 2016-08-21 13:16:03 +02:00
grzegorzgie
702b47296c Fix pl_PL
Repair linguistic errors
2016-08-21 13:02:22 +02:00
yuri
517edf2ced undo comment 2016-08-19 17:52:09 +03:00
yuri
219c28313c fix mass select 2016-08-19 17:48:14 +03:00
Taras Machyshyn
656bba1d3f Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-08-19 17:34:57 +03:00
yuri
311d92202b fix assignment notification if user is removed 2016-08-19 14:43:44 +03:00
yuri
05cb2ee272 email: fix move to trash update counts 2016-08-18 17:07:16 +03:00
yuri
f896a2d71a fix calendar range issue 2016-08-18 11:13:24 +03:00
yuri
dd6704ace5 fix moving to trash 2016-08-18 10:40:16 +03:00
yuri
1dc4d44a65 es_ES lang fix 2016-08-17 17:52:22 +03:00
yuri
bfb28ea178 Merge branch 'hotfix/4.2.3' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.2.3 2016-08-17 17:43:43 +03:00
yuri
ec6f3a22f2 version 2016-08-17 17:30:34 +03:00
yuri
5a0c7c330c fix email imported error in php4 2016-08-17 17:28:17 +03:00
Taras Machyshyn
f64df5af87 LDAP fixed admin login 2016-08-17 11:54:59 +03:00
Taras Machyshyn
d4dc7a4051 LDAP fixes 2016-08-16 16:53:40 +03:00
Taras Machyshyn
d676f85c8f LDAP fixes 2016-08-16 16:01:32 +03:00
Taras Machyshyn
ab382f2387 LDAP: changed ldapUserObjectClass attribute. 2016-08-15 16:46:55 +03:00
yuri
206219c738 Merge branch 'hotfix/4.2.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.2.2 2016-08-15 15:51:40 +03:00
Taras Machyshyn
37d1c707cb LDAP: label corrections 2016-08-15 15:51:10 +03:00
Taras Machyshyn
93af1c9bfc LDAP improvements: added possibility to define user objectClass 2016-08-15 15:47:25 +03:00
yuri
a021c4c8d5 open attachments in new window 2016-08-15 11:08:45 +03:00
yuri
a125244cdf Merge branch 'hotfix/4.2.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.2.2 2016-08-15 10:50:10 +03:00
yuri
1cfd251c4c copy attachments for duplicate 2016-08-12 12:51:02 +03:00
Taras Machyshyn
d2f4f312e5 Improvements 2016-08-11 16:21:35 +03:00
Taras Machyshyn
c468b061d9 Bug fixes for installation 2016-08-11 16:21:03 +03:00
yuri
7bf945f0b6 v 2016-08-11 15:31:19 +03:00
yuri
fecbb26cbf email acl fix 2016-08-11 15:30:47 +03:00
yuri
a5ae33ab81 fix dateTime exception 2016-08-11 13:01:25 +03:00
yuri
c6fa0e464e prevent stream request after remove record 2016-08-11 12:49:56 +03:00
yuri
38bae6238a portal: disable teams field 2016-08-11 12:28:14 +03:00
yuri
79de4c874f portal: follow created 2016-08-11 12:16:51 +03:00
yuri
814748ec61 fix map 2016-08-11 11:48:46 +03:00
yuri
1f0ad0cbec fix inbound email duplicate 2016-08-11 11:12:36 +03:00
yuri
7224f566d6 email import: bad date catch 2016-08-10 16:50:22 +03:00
yuri
eefb01ec4f fix salesByMonth 2016-08-10 16:22:17 +03:00
yuri
24d46ed81d fix currency rates 2016-08-10 15:51:20 +03:00
yuri
37c749faf8 remove messageIdInternal index 2016-08-10 15:34:23 +03:00
yuri
4306a3131e fix inbound email ui 2016-08-10 15:32:59 +03:00
yuri
8fa95fcce3 email: fix whitespace subject 2016-08-09 11:12:30 +03:00
yuri
b7c41ce640 email fix 2016-08-08 13:09:51 +03:00
yuri
a21be94ed3 fix acl 2016-08-08 13:06:40 +03:00
yuri
9d59edcae2 v 2016-08-08 11:51:54 +03:00
yuri
deaa26a355 es_ES lang fix 2016-08-08 10:29:49 +03:00
yuri
25d6fb6d82 theme fixes 2016-08-08 10:18:06 +03:00
yuri
c1bcc44f04 fix error 2016-08-08 10:03:00 +03:00
yuri
fdf8183385 fix massRemove acl check 2016-08-08 09:57:06 +03:00
yuri
db40426f00 lang fix 2016-08-05 11:00:24 +03:00
yuri
eb92e648a0 dashlet action url 2016-08-04 12:52:37 +03:00
yuri
5df26c324f fix scheduled job running 2016-08-04 12:30:26 +03:00
yuri
c36a064fdc lang 2016-08-04 11:01:39 +03:00
yuri
a28baa6a75 fix install footer date 2016-08-03 17:29:19 +03:00
yuri
27aed29ddf Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-08-03 17:26:43 +03:00
yuri
744fb176cc fix code to meet standards 2016-08-03 17:25:29 +03:00
Taras Machyshyn
5f8a0736e4 LDAP corrections 2016-08-03 16:25:33 +03:00
yuri
7fb179e769 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-08-03 16:09:55 +03:00
Taras Machyshyn
48239c53ca Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-08-03 12:41:50 +03:00
Taras Machyshyn
4e18afb80f LDAP: added 'Test Connection' button 2016-08-03 12:41:33 +03:00
yuri
e9d3d7c807 fix date stringify 2016-08-03 12:23:58 +03:00
Taras Machyshyn
60923197e5 Ldap: added user teams, user default team 2016-08-03 10:56:08 +03:00
Taras Machyshyn
a9f7c90323 Improvements 2016-08-03 10:37:48 +03:00
yuri
cc723095c2 fix file manager 2016-08-02 15:04:53 +03:00
yuri
373b77f83f fix tests 2016-08-02 14:57:47 +03:00
Taras Machyshyn
68ab589f3e Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-08-02 13:09:26 +03:00
Taras Machyshyn
23ccbb226f Test fixes 2016-08-02 13:09:14 +03:00
yuri
48edf2a2b5 selectManager test 2016-08-02 13:03:56 +03:00
yuri
082c65ef05 fix unit test 2016-08-02 10:54:12 +03:00
yuri
6553d8ec6c Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-08-01 17:45:07 +03:00
yuri
c54b6fcc7c test addition 2016-08-01 17:44:43 +03:00
yuri
655ee740e0 importer test 2016-08-01 17:40:47 +03:00
Taras Machyshyn
b02f77b8f9 LDAP improvements 2016-08-01 16:29:26 +03:00
yuri
351c46af06 fix kb order 2016-08-01 15:36:24 +03:00
yuri
d3db25d98a fix portal user password email 2016-08-01 15:24:01 +03:00
yuri
ef1fe1bd1d Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-08-01 11:12:51 +03:00
Taras Machyshyn
6c2cd93826 Default config 2016-08-01 11:12:26 +03:00
yuri
4859f54f42 email import: get rid of file manager 2016-08-01 10:16:09 +03:00
Taras Machyshyn
749c2dc1e9 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-07-29 17:54:02 +03:00
Taras Machyshyn
3d13026084 LDAP fixes 2016-07-29 17:53:49 +03:00
yuri
6cf66aa88e account: recently created filter 2016-07-29 11:51:23 +03:00
yuri
d10ef7038b meetings and assignmentPermissions 2016-07-29 11:41:37 +03:00
yuri
cda612810d Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-07-28 11:31:42 +03:00
yuri
a7aaac513d composer.lock 2016-07-28 11:30:57 +03:00
yuri
329dbdf408 it_IT lang 2016-07-28 11:28:47 +03:00
Taras Machyshyn
007f705904 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-07-27 16:53:24 +03:00
Taras Machyshyn
36cddbe0cf Fixed LDAP authorization 2016-07-27 16:53:11 +03:00
yuri
e9409ccf72 remove tab 2016-07-27 16:44:46 +03:00
yuri
b5a1ede962 Merge branch 'hotfix/4.1.7' 2016-07-27 11:26:28 +03:00
yuri
2dc6951ef9 v 2016-07-27 11:26:07 +03:00
yuri
66f686c013 fix kb order 2016-07-27 10:56:20 +03:00
yuri
937aab2b1c massAction successMessage 2016-07-26 15:31:49 +03:00
yuri
43bee97055 massAction fix 2016-07-26 12:22:36 +03:00
yuri
a31f5ea87a email address book filter by portal permissions 2016-07-26 12:06:50 +03:00
yuri
0c4d5f3405 mass action defs 2016-07-26 11:31:07 +03:00
yuri
4e70ea0586 fix email 2016-07-25 17:13:34 +03:00
yuri
7736f6cd76 fix email update 2016-07-25 17:07:14 +03:00
yuri
2db6eaa344 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-07-25 14:48:08 +03:00
Taras Machyshyn
38b6cbda0e Merge pull request #159 from ecm4u/master
Support AD with LDAP Auth
2016-07-25 14:47:36 +03:00
Taras Machyshyn
9292f18b5b WARNING fixes 2016-07-25 12:35:52 +03:00
Taras Machyshyn
193cf2438a Cron manager bug fixes 2016-07-25 12:31:27 +03:00
yuri
155e0e3841 import: allow created at and created by 2016-07-25 12:01:03 +03:00
yuri
019c03ed2f email-to-task name 2016-07-25 11:24:23 +03:00
yuri
316e54df92 fix message id issue 2016-07-25 11:17:00 +03:00
yuri
40691ae899 fix entity manager text filter list 2016-07-25 11:16:53 +03:00
yuri
ab8ba168ac move kb articles 2016-07-22 14:50:09 +03:00
yuri
b066d91cf5 fix warning 2016-07-21 15:24:01 +03:00
yuri
2833581cde email folders side panel: remove edit link 2016-07-21 13:28:53 +03:00
yuri
279c8b3188 email folder and email filter email link 2016-07-21 13:24:20 +03:00
yuri
eca6408415 prevent changing users email address and phone numbers for non admins 2016-07-21 13:07:13 +03:00
yuri
35cfb1a480 scheduled job mass actions 2016-07-21 10:58:09 +03:00
yuri
30f3d4ab5e stream notifications 2016-07-20 16:40:21 +03:00
yuri
7e5424e40a activities and history listen to save 2016-07-19 12:23:46 +03:00
Heiko Robert
82612326bf fixed wrong method syntax 2016-07-18 09:04:41 +02:00
Heiko Robert
da2e5c835a removed unnecessary comments 2016-07-14 15:06:31 +02:00
Heiko Robert
af8eb51c76 fix: setting ldap user fields array after constructor in createUser to support getConfig() 2016-07-14 14:51:26 +02:00
Heiko Robert
7253e257f1 moved hard coded ldap config to conf.php, added default config for Active Directory (cn --> samaccountname) 2016-07-13 17:50:43 +02:00
Heiko Robert
37e93edf25 Merge pull request #2 from espocrm/master
Update from original
2016-07-13 17:40:48 +02:00
yuri
36a56f050f multiple smtp 2016-07-08 16:25:27 +03:00
yuri
31c2d1360d fix warnings 2016-07-08 11:18:28 +03:00
yuri
4addc48339 fix import 2016-07-08 11:00:19 +03:00
yuri
a7267bc920 fix import of noJoin relations 2016-07-08 10:49:06 +03:00
yuri
93e94f40c3 fix move to folder 2016-07-07 17:36:58 +03:00
yuri
bd75790c29 change email list layout 2016-07-07 17:26:43 +03:00
yuri
f1cffcae38 email actions 2016-07-07 17:08:05 +03:00
yuri
9111bce47a move to folder email 2016-07-07 16:30:08 +03:00
yuri
73ec161ac4 fix RDB findRelated if new 2016-07-07 15:55:53 +03:00
yuri
495a07639e email folders dev 2016-07-07 15:55:37 +03:00
yuri
044223e70e fix RDB findRelated if new 2016-07-07 15:27:53 +03:00
yuri
42c9250995 email folders url 2016-07-07 12:07:51 +03:00
yuri
8b4a1d96fd replyInHtml 2016-07-07 11:32:42 +03:00
yuri
fff06d7e92 email folder dev 2016-07-06 17:14:08 +03:00
yuri
726adc550c email folders 2016-07-06 16:38:29 +03:00
yuri
f5bde670f6 fix mapper fatal error 2016-07-06 10:26:22 +03:00
yuri
050873dd3a Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-07-06 10:12:50 +03:00
yuri
d3886c1c94 dev 2016-07-06 10:12:40 +03:00
yuri
84f03cf3f9 email improvements 2 2016-07-05 12:41:57 +03:00
yuri
f8953d56f4 fix link multiple with role 2016-07-05 10:23:01 +03:00
yuri
ebbf14160b email folder changes 2016-07-04 17:29:46 +03:00
yuri
4df0a09de0 lang 2016-07-04 10:22:58 +03:00
yuri
c485aa9a62 email folder entity 2016-07-01 17:18:32 +03:00
yuri
ae474022b9 email filters skip 2016-07-01 15:23:41 +03:00
yuri
f994cdf7c4 email filter changes 2016-06-30 16:56:04 +03:00
yuri
7ff514e5a7 email sentBy field 2016-06-30 11:48:53 +03:00
yuri
344403de54 fix email sent filter 2016-06-30 11:18:15 +03:00
yuri
836243d170 fix email sent filter 2016-06-30 11:17:31 +03:00
yuri
0dc9129d79 notification improvements 2 2016-06-29 16:54:23 +03:00
yuri
61c9d07ad8 notifications improvements 2016-06-29 16:50:01 +03:00
yuri
a238295ba8 control followers after reassignment 2016-06-29 16:23:30 +03:00
yuri
dbabd0dd45 Merge branch 'hotfix/4.1.6' 2016-06-29 16:03:10 +03:00
yuri
f87ff8db8a fix 2016-06-29 15:38:21 +03:00
yuri
60d121f1e1 portal acl fixes 2016-06-29 15:17:52 +03:00
yuri
1497abff07 v 2016-06-29 13:12:09 +03:00
yuri
935ba7d4e4 fix 2016-06-29 13:10:36 +03:00
yuri
fba79cde8f notification chanfes 2016-06-29 11:51:30 +03:00
yuri
ce79d14a29 duplicate by default 2016-06-28 15:53:18 +03:00
yuri
14b2083226 google maps key 2016-06-28 15:28:50 +03:00
yuri
779a841817 kba ordering 2016-06-28 11:56:29 +03:00
yuri
3647523150 naming fix 2016-06-28 10:59:32 +03:00
yuri
eb5b941fe6 email accounts massUpdate 2016-06-28 10:56:25 +03:00
yuri
c542d99536 fix stream header long texts 2016-06-27 10:50:48 +03:00
yuri
918031a9c6 fix long texts in stream 2016-06-27 10:49:00 +03:00
yuri
163e0cac2a drag and drop additional 2016-06-24 17:08:49 +03:00
Taras Machyshyn
95096dd8fd Correct translations for installer 2016-06-24 15:28:28 +03:00
yuri
67bd98bf4b iso week numbers 2016-06-24 15:22:03 +03:00
yuri
ac434c00d6 stream drag and drop 2016-06-24 15:04:54 +03:00
yuri
0fb8330ecf preferenses: hide notifications if not enabled 2016-06-24 12:36:55 +03:00
yuri
3f969cee5b Merge branch 'hotfix/4.1.6' 2016-06-24 12:15:59 +03:00
yuri
ea5f6300f3 fix text overflow in list expanded 2016-06-24 12:15:51 +03:00
yuri
0d5e75db23 activities dashlet: show only todays and next day 2016-06-23 17:18:49 +03:00
yuri
7d667a1d1b notification about mention 2016-06-23 16:18:32 +03:00
yuri
610922c8e0 fix client notification 2016-06-23 15:20:17 +03:00
yuri
36e0882542 rename method 2016-06-23 11:44:13 +03:00
yuri
b9979e87af email notifications: dont notify old emails 2016-06-23 11:21:38 +03:00
yuri
bcd38dd853 fix email filters 2016-06-23 10:52:22 +03:00
yuri
b018580c0b fix email reminder 2016-06-23 10:36:08 +03:00
yuri
38a7f42a1e remove ob_clean and flush 2016-06-22 16:26:52 +03:00
yuri
1387d856ba remove ob_clean from installer 2016-06-22 16:20:11 +03:00
yuri
f2bbc872d6 lang fixes 2016-06-22 16:00:45 +03:00
yuri
c74e7b416e lang 2016-06-22 15:03:33 +03:00
yuri
f008688c14 orm: fix order by list 2016-06-22 12:14:15 +03:00
yuri
dff0d5a992 fix email notification from person 2016-06-22 12:01:38 +03:00
yuri
6fe6f8960f fix stream note.js 2016-06-22 10:28:25 +03:00
yuri
0b0184098d fix gender in stream 2016-06-21 17:25:18 +03:00
yuri
647515d21a gender support 2016-06-21 17:21:45 +03:00
yuri
2ee944ef7b change assignment templates 2016-06-21 12:23:51 +03:00
yuri
f4d2325b8b reminder and invitations change 2016-06-21 12:08:55 +03:00
yuri
c0904125eb notification changes and stream message changes 2016-06-20 17:35:57 +03:00
yuri
7dad30ad0c fix notices 2016-06-20 11:24:15 +03:00
yuri
d6acb6dfdc fix notice 2016-06-20 11:06:26 +03:00
yuri
b6da94fe2e fix modal backdrop close 2016-06-17 11:54:09 +03:00
yuri
dc5e292a02 fix modal backdrop close 2016-06-17 11:53:30 +03:00
yuri
4bf938107d portal id 2016-06-16 16:59:10 +03:00
yuri
ec7d49cdbc fix validate message if empty element 2016-06-15 17:20:19 +03:00
yuri
3c73062b91 email: is replied 2016-06-15 16:38:01 +03:00
yuri
5122f112d1 task dashlet: dont show if date start is future 2016-06-15 12:43:47 +03:00
yuri
5e20fa6717 orm: skip text fields param 2016-06-15 11:41:52 +03:00
yuri
d4599d9377 fix mapper test 2016-06-15 11:40:26 +03:00
yuri
adb9ce4d7e email: rename name label 2016-06-15 11:17:16 +03:00
yuri
e777413a7b enum order 2016-06-15 11:15:02 +03:00
yuri
2cb0ac6221 email: forward info 2016-06-14 17:30:24 +03:00
yuri
8f7fafb990 email import: fetch parent from replied 2016-06-14 16:37:54 +03:00
yuri
158c911787 fix label 2016-06-14 13:01:58 +03:00
yuri
aa67575ecb internal post dev 2016-06-14 12:56:18 +03:00
yuri
81cf82c99f fix stream posting 2016-06-14 11:56:42 +03:00
yuri
e638bf2eec Merge branch 'hotfix/4.1.6' 2016-06-14 11:44:55 +03:00
yuri
6c9d1dbb3d fix notification sounds 2016-06-14 11:43:31 +03:00
yuri
fbb034ef92 intenal post dev 2016-06-14 11:24:42 +03:00
yuri
335601d6b8 fix multienum validate message 2016-06-13 15:57:37 +03:00
yuri
f6ad51ca74 fix calendar colors 2016-06-13 15:30:16 +03:00
yuri
e119f8b008 fix entity manager tabList 2016-06-13 15:23:29 +03:00
yuri
5af0eeff3b entity manager: event type 2016-06-13 13:12:41 +03:00
yuri
f685feb312 Merge branch 'hotfix/4.1.6' 2016-06-13 10:56:38 +03:00
yuri
c78254a8fa no dashboard layout for portal useres 2016-06-13 10:52:20 +03:00
yuri
9c3758b92c Merge branch 'stable' 2016-06-10 16:10:48 +03:00
yuri
4ca2a7fa1a fix notice 2016-06-10 16:03:10 +03:00
yuri
d6814b1601 Merge branch 'hotfix/4.1.5' 2016-06-10 15:55:57 +03:00
yuri
55e5a21dcd Merge branch 'hotfix/4.1.5' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.1.5 2016-06-10 15:54:14 +03:00
Taras Machyshyn
792f422f76 Bug fixing 2016-06-10 15:53:37 +03:00
yuri
8cac546087 merge with hotfix/4.1.5 2016-06-10 15:05:41 +03:00
yuri
0cfe91d960 loadAdditionalFieldsForPdf 2016-06-10 14:44:09 +03:00
yuri
4dea1762e8 stream textarea fix 2016-06-10 13:08:22 +03:00
Taras Machyshyn
b1a9b8d8b1 Code improvement 2016-06-10 10:57:56 +03:00
yuri
6787acce61 fix next number 2016-06-10 10:50:40 +03:00
yuri
eb0adf7c28 fix afterMassRemove 2016-06-09 14:03:23 +03:00
yuri
783cccaa1b Number field type 2016-06-09 12:47:17 +03:00
yuri
36a0a22996 naming fix 2016-06-09 10:49:56 +03:00
yuri
a3f3357b2e Merge branch 'hotfix/4.1.5' 2016-06-08 17:58:29 +03:00
yuri
cbbfa44174 fix field manager ui 2016-06-08 17:58:18 +03:00
yuri
812d2ec9bc fix field manager hook 2016-06-08 17:52:20 +03:00
yuri
b51ba96bb7 number field type prepare 2016-06-08 17:38:12 +03:00
yuri
4c60cf79f6 rdb: rename methods 2016-06-08 15:56:04 +03:00
yuri
8451949805 database charset param 2016-06-08 11:47:52 +03:00
yuri
af5750cdf6 color change 2016-06-07 19:00:57 +03:00
yuri
1a4dfd6f67 version 2016-06-07 12:29:29 +03:00
yuri
6aa800d453 fix fetchOnModelAfterRelate 2016-06-07 12:26:20 +03:00
yuri
82aa3b9508 fix massRelate 2016-06-07 12:15:04 +03:00
yuri
6910a113da email filter: filters 2016-06-06 16:49:07 +03:00
yuri
bd20aaa577 fix htmlizer 2016-06-06 12:55:04 +03:00
yuri
0aef3c0b04 htmlizer and password 2016-06-06 12:53:10 +03:00
yuri
2f97010b54 htmlizer improvements 2016-06-06 12:31:26 +03:00
yuri
5bcdad2996 wysiwyg htmlToPlain fix 2016-06-06 11:59:49 +03:00
yuri
1e8a8d94c2 fix timeline timezone 2016-06-06 11:51:21 +03:00
yuri
9aeefd7685 contact: fix accounts field 2016-06-03 11:29:46 +03:00
yuri
f72385471c naming fix 2016-06-03 11:27:41 +03:00
yuri
f7a542560a check duplicates: all email 2016-06-03 11:19:03 +03:00
yuri
400f43447d v 2016-06-02 17:22:15 +03:00
yuri
866593a831 Storage Message: define ErrorHandler 2016-06-02 17:15:30 +03:00
yuri
c90cdc62fb global search changes 2016-06-02 12:39:06 +03:00
yuri
d5c93f21b5 audited for miltiEnum and arrays 2016-06-02 12:26:47 +03:00
yuri
b58d78a29e preferences: dashboardLayout 2016-05-31 12:05:37 +03:00
yuri
f5b41eb78b field manager: translatedOptions param 2016-05-31 11:01:17 +03:00
yuri
c2a7d90944 fix view-helper options 2016-05-27 13:17:51 +03:00
yuri
b2a4ec238c fix preferences fields 2016-05-27 12:11:17 +03:00
yuri
df69584c7d v 2016-05-27 11:46:31 +03:00
yuri
574da55be7 Merge branch 'hotfix/4.1.3' of ssh://172.20.0.1/var/git/espo/backend into hotfix/4.1.3 2016-05-26 17:15:40 +03:00
Taras Machyshyn
52b808b902 Removed unnecessary debugging messages 2016-05-26 16:53:52 +03:00
Taras Machyshyn
714c7b0a33 Fixed an issue for MySQL 5.7 2016-05-26 16:41:50 +03:00
yuri
3d774e3afa fix wysywyg modals 2016-05-26 16:26:16 +03:00
yuri
c91db1699b upgrade bootstrap 2016-05-26 15:39:04 +03:00
yuri
2b5695d8dc fix wysywig field detail view height 2016-05-26 12:23:52 +03:00
yuri
b562fc33bd dont allow email to modify 2016-05-26 11:43:52 +03:00
yuri
425414b8f3 fix add email address 2016-05-26 11:24:21 +03:00
yuri
3b363d5ee3 cleanup 2016-05-26 11:10:34 +03:00
yuri
4fc3b9a99e fix kb massUpdate layout 2016-05-25 15:23:12 +03:00
yuri
ab2b9bafeb fix meeting/call select manager 2016-05-24 15:53:09 +03:00
yuri
e99fc6302f reminders for all users 2016-05-24 12:35:46 +03:00
yuri
82996a807f calendar: getCalendarSelectParams method 2016-05-24 11:38:14 +03:00
yuri
86b31b1f26 clear role cach if isAdmin changed 2016-05-23 17:25:58 +03:00
yuri
19c9b38f82 applicationName in settings 2016-05-23 12:24:18 +03:00
yuri
b1d0d1cd27 activities: status not required 2016-05-23 11:47:04 +03:00
yuri
c916011530 add id_ID language 2016-05-23 11:36:58 +03:00
yuri
5db6327272 de_DE 2016-05-23 11:10:03 +03:00
yuri
3c5fe4c778 v 2016-05-20 15:41:08 +03:00
yuri
f6f3f05aa5 fix meeting acl 2016-05-20 15:39:51 +03:00
yuri
10f34564d0 load teams for user 2016-05-20 15:38:40 +03:00
yuri
216ec2329d fix record isPermittedTeams 2016-05-20 15:30:49 +03:00
yuri
c3cb4619cf disable formatting for autoincrement 2016-05-20 11:21:06 +03:00
yuri
fcf2929b5b fix record/base 2016-05-19 17:56:19 +03:00
yuri
15c10ca553 fix notice 2016-05-18 16:38:40 +03:00
yuri
9bb417ab38 v 2016-05-18 16:32:25 +03:00
yuri
5b110ee7b2 fix warning 2016-05-18 16:30:46 +03:00
yuri
f3951966f3 fix popup 2016-05-18 16:25:20 +03:00
yuri
f580f0ba60 namimng 2016-05-18 12:34:53 +03:00
yuri
a9e4ad3833 sidePanels refactoring 2016-05-18 11:22:18 +03:00
yuri
3e6c88eb27 lead-document relationship 2016-05-17 17:16:33 +03:00
yuri
7c4ef3f00f query: use distinct instead of group by id 2016-05-17 15:51:08 +03:00
yuri
762d7f71c6 fix date time 2016-05-17 11:18:30 +03:00
yuri
50cc658c20 fix campaign image 2016-05-16 16:09:18 +03:00
yuri
21a59cb198 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-05-16 12:56:36 +03:00
Taras Machyshyn
38ba3461be Fixed SemVer for PHP 7 2016-05-16 12:55:51 +03:00
yuri
f70ee27809 remove notes from user layout 2016-05-16 10:59:08 +03:00
yuri
674c1588d9 iOS 9 support 2016-05-13 12:40:26 +03:00
yuri
e9eb5402cc fix selector 2016-05-11 17:35:55 +03:00
yuri
7f746a72bb ui performance oprtimization 2016-05-11 16:22:02 +03:00
yuri
bde6a810c4 cleanup 2016-05-11 11:42:12 +03:00
yuri
ff3e7d1c5b fit add dashlet modal height 2016-05-11 11:41:27 +03:00
yuri
7ecb63189a fix full form from quick edit 2016-05-11 10:56:33 +03:00
yuri
eb1e16d6bd phone/email search more optimized way 2016-05-10 16:45:43 +03:00
yuri
f17b5d7244 small fix in RDB 2016-05-10 13:04:04 +03:00
yuri
a5b44e9fdf entity manager: text filter fields 2016-05-10 12:34:29 +03:00
yuri
734219dbd4 customUrl portal layout 2016-05-09 11:26:02 +03:00
yuri
45c351ab39 user entity small fixes 2016-05-09 11:22:06 +03:00
yuri
74aa55a8aa store sent emails 2016-05-09 11:19:14 +03:00
yuri
64b3a88ba0 fix shared calendar 2016-05-09 11:06:12 +03:00
yuri
08ff00f602 fix user select manager 2016-05-09 11:05:52 +03:00
yuri
0d9853311a inbox dashlet layout change 2016-05-06 12:54:24 +03:00
yuri
b1d17f9e84 fix shared calendar store 2016-05-06 12:02:00 +03:00
yuri
3a6041a8df shared calendar improvements 2016-05-06 11:57:37 +03:00
yuri
023171f19e merge 2016-05-05 15:17:29 +03:00
yuri
546fed83c8 version 4.0.6 2016-05-05 15:15:54 +03:00
yuri
6b37ce80fd fix kb 2016-05-05 15:14:32 +03:00
yuri
a98c8b3bcd naming 2016-05-05 13:08:28 +03:00
yuri
7bd3dd26cf notificationSoundsDisabled 2016-05-05 13:03:15 +03:00
yuri
fe7684b46c naming 2016-05-05 12:56:16 +03:00
yuri
ea5dcfe630 entity manager trimming 2016-05-05 12:12:40 +03:00
yuri
ad5f29338b field manager: trim 2016-05-05 11:59:35 +03:00
yuri
89d2b26613 cleanup 2016-05-05 11:10:56 +03:00
yuri
7206dc38bc meeting/call acl fix: allow read own record if no assigned 2016-05-05 11:08:26 +03:00
yuri
4b9ff21743 version 4.2.0 2016-05-04 17:05:09 +03:00
yuri
fbe7910349 merge 2016-05-04 16:32:19 +03:00
yuri
7b098095cb v 4.0.5 2016-05-04 16:18:36 +03:00
yuri
7966be90e7 fix acl 2016-05-04 16:18:12 +03:00
yuri
b64db89307 fix acl 2016-05-04 16:17:25 +03:00
yuri
cb9b7c3e72 code fix suite 2016-05-04 16:16:57 +03:00
yuri
a268962c15 dont save email reminder 2016-05-04 15:16:29 +03:00
yuri
36c1b56916 scheduled job mass update 2016-05-04 14:51:49 +03:00
yuri
39a2e30e3f version 2016-05-04 11:29:12 +03:00
yuri
b91d237f0b portal users activities 2016-05-04 11:25:12 +03:00
yuri
f7a0a0daa0 config textFilterUseContainsForVarchar 2016-05-04 10:52:25 +03:00
yuri
4f270d003b linkParent field entityList filtered by disabled 2016-05-04 10:23:34 +03:00
yuri
e3ebc8c2e2 portal customUrl and fix 2016-05-04 09:57:42 +03:00
yuri
c31c5618dd fix portal user sendPassword 2016-05-04 09:47:10 +03:00
yuri
341d5f8d7c fix InboundEmail namespace 2016-05-04 09:45:24 +03:00
yuri
04d2bd69c1 fix jobs 2016-04-29 16:40:05 +03:00
yuri
47efa792ee kb/documents buttons 2016-04-29 12:15:04 +03:00
yuri
a71c6789bc fix dateTimeOptional required 2016-04-29 11:49:50 +03:00
yuri
3a41aad935 fix job.php 2016-04-28 17:14:42 +03:00
yuri
fad56c1c0a email craetedAt filter 2016-04-28 17:09:08 +03:00
yuri
d6ad7f16c1 cron populate logic 2016-04-28 16:16:31 +03:00
yuri
ae89a9216d fix email importer 2016-04-28 15:18:14 +03:00
yuri
6927c82a0f Application setupSystemUser 2016-04-28 11:00:12 +03:00
yuri
e06b553653 fix avatar 2016-04-27 16:24:11 +03:00
yuri
e9a63c0c36 merge all links 2016-04-27 12:26:06 +03:00
yuri
582c23ecf4 metadata get by array 2016-04-27 12:24:42 +03:00
yuri
d86ff1e905 user mass update layout change 2016-04-27 11:43:33 +03:00
yuri
773bca8448 user mass update fix 2016-04-27 11:41:45 +03:00
yuri
a6258cd334 afterMassUpdate afterMassRemove methods 2016-04-27 11:41:35 +03:00
yuri
1cdf88ef9b cleanup 2016-04-27 11:41:14 +03:00
yuri
58ffbad422 fix jobs 2016-04-27 11:40:57 +03:00
yuri
aafcd5767e emails dashlet 2016-04-26 11:59:22 +03:00
yuri
2bfac8352b fix wysiwyg 2016-04-26 11:39:07 +03:00
yuri
954eff0c94 acl change 2016-04-26 11:36:42 +03:00
yuri
9692076ba8 int format 2016-04-26 11:08:30 +03:00
yuri
5ae64989eb system avatar color 2016-04-25 17:45:57 +03:00
yuri
3fd34fc48d show more after remove issue fix 2016-04-25 15:28:39 +03:00
yuri
94c207677f int count 2016-04-25 15:23:04 +03:00
yuri
39188f0b3a fix phone number import 2016-04-25 11:07:44 +03:00
yuri
7665ec2730 naming 2016-04-22 11:20:12 +03:00
yuri
bc57ac3065 fix task dashlet 2016-04-22 11:20:07 +03:00
yuri
6cf62736bb wysiwyg fix base tag 2016-04-20 17:59:46 +03:00
yuri
d5e78c1a7a field manager: foreign fielld 2016-04-20 15:37:18 +03:00
yuri
4a0aa1bca0 global search fix 2016-04-20 10:32:05 +03:00
yuri
2d06e8a801 calendar custom entity support 2016-04-19 16:32:40 +03:00
yuri
25b1479c23 fix layouts 2016-04-19 16:09:10 +03:00
yuri
09ab17f18b naming fix 2016-04-19 16:03:38 +03:00
yuri
be438a2f18 pl_PL fix 2016-04-19 11:51:48 +03:00
yuri
c9f91bb8da merge fix 2016-04-19 11:51:06 +03:00
yuri
cd01178151 fix activities service 2016-04-19 11:48:09 +03:00
yuri
3e8ed72246 mass update keep emails and phones 2016-04-19 11:32:56 +03:00
yuri
c500520130 remove dashlet confirmation 2016-04-18 16:45:48 +03:00
yuri
0fc2eb6817 fix lang 2016-04-18 16:42:43 +03:00
yuri
4db2f49233 fix json 2016-04-15 16:30:45 +03:00
yuri
8215c44be9 fix address format 2016-04-15 15:35:10 +03:00
yuri
dbee926a94 address formats 2016-04-15 15:28:54 +03:00
yuri
d85e13cae0 timeline today by default 2016-04-14 16:42:31 +03:00
yuri
370eee8d9d fix timeline lang 2016-04-14 16:34:26 +03:00
yuri
98f317cb1c calendar scope list for create 2016-04-14 12:43:17 +03:00
yuri
3ec9613b0e timeline and calendar less 2016-04-14 12:02:37 +03:00
yuri
8e27d50d5c about.tpl 2016-04-13 17:17:53 +03:00
yuri
fc50991317 fix deprecated ajax usage 2016-04-13 16:37:19 +03:00
yuri
52382bb958 fix deprecated moment usage 2016-04-13 16:22:41 +03:00
yuri
66fdd40659 timeline dashlet fix 2016-04-13 15:50:20 +03:00
yuri
f0f402a8b3 calendar timeline dashlet 2016-04-13 12:40:45 +03:00
yuri
591cbf4484 opp dashlet sorting 2016-04-13 10:00:10 +03:00
yuri
44d813bf5b fix person name template 2016-04-13 09:36:02 +03:00
yuri
fceff4ad7f calendar changes 2016-04-12 17:19:15 +03:00
yuri
f47b41928e fix view field 2016-04-12 17:14:58 +03:00
yuri
c559a97953 timeline dev 2016-04-11 17:16:14 +03:00
yuri
d1d64c84b0 fix typo 2016-04-11 12:46:16 +03:00
yuri
cb1f32ec3a Merge branch 'hotfix/4.0.5' 2016-04-11 11:36:13 +03:00
yuri
e76116810f fix calendar weekStart 2016-04-11 11:36:01 +03:00
yuri
974b69eed0 timeline dev 2016-04-08 17:20:38 +03:00
yuri
bb379c7a0e fix invitation 2016-04-08 10:30:00 +03:00
yuri
5664ede648 fix invitation 2016-04-08 10:28:31 +03:00
yuri
881a3db412 dev timeline 2016-04-08 10:26:53 +03:00
yuri
b74f1cc5d6 Merge branch 'hotfix/4.0.5' 2016-04-07 12:51:38 +03:00
yuri
265ec60614 remove empty side panel box 2016-04-07 12:51:22 +03:00
yuri
d79d716612 download file name escape 2016-04-07 12:51:09 +03:00
yuri
aa61f322bc fix email attachment filename parsing 2016-04-07 12:50:42 +03:00
yuri
c8d2f08c13 fix naming 2016-04-07 10:41:36 +03:00
yuri
920b6e2eba dev 2016-04-06 16:09:11 +03:00
yuri
6e7908de52 timeline dev 1 2016-04-05 16:22:13 +03:00
yuri
10de6aedbd Merge branch 'hotfix/4.0.5' 2016-04-05 11:23:46 +03:00
yuri
ce0efed7b8 fix calendar 2016-04-05 11:23:32 +03:00
yuri
204b9aa49d dev 2016-04-05 10:55:02 +03:00
yuri
ae1db7990e Merge branch 'hotfix/4.0.5' 2016-04-04 16:37:11 +03:00
yuri
18f13acfa9 assigner user field: dont display avatar in list view 2016-04-04 16:10:06 +03:00
yuri
a15b247952 fix lang 2016-04-01 16:34:00 +03:00
yuri
2e457e1f6f fix entity manager link conflicts 2016-04-01 16:30:53 +03:00
yuri
e0375a52f9 fix relationship manager ui 2016-04-01 16:30:38 +03:00
yuri
351a70015a fix email address and phone number duplicates 2016-04-01 12:27:52 +03:00
yuri
8faa001a56 use teams view 2016-04-01 11:34:48 +03:00
yuri
182fc8b65e Merge branch 'hotfix/4.0.5' 2016-04-01 11:16:34 +03:00
yuri
49b581dafd assigned user view 2016-04-01 11:16:25 +03:00
yuri
1319c54365 fix assignment permission no 2016-04-01 11:12:33 +03:00
yuri
c9db2687f5 fetch only header for emails w/ exceeding size 2016-03-31 12:38:37 +03:00
yuri
21252a6eb7 Merge branch 'hotfix/4.0.5' 2016-03-31 11:27:21 +03:00
yuri
1054050542 fix list modal 2 2016-03-31 11:27:12 +03:00
yuri
90e2d7ef0b cleanup 2016-03-31 11:24:56 +03:00
yuri
de9c1e7a20 merge 2016-03-31 11:24:30 +03:00
yuri
08b5f09c55 fix list modal 2016-03-31 11:21:46 +03:00
yuri
23a0ed86e0 cleanup 2016-03-31 10:34:50 +03:00
yuri
0ca7da454b fix notice 2016-03-31 10:33:16 +03:00
yuri
ffc22673f7 Merge branch 'hotfix/4.0.5' 2016-03-30 14:59:08 +03:00
yuri
1faa75c303 add email to quick create list 2016-03-30 12:30:01 +03:00
yuri
8136eed152 orm improvements 2016-03-30 12:29:07 +03:00
yuri
13dc6f0d76 email quick create 2016-03-30 11:19:46 +03:00
yuri
dd55141422 Merge branch 'hotfix/4.0.5' 2016-03-30 10:36:14 +03:00
yuri
d3bcadce13 fix contact filter is empty account 2016-03-30 10:36:06 +03:00
yuri
99533a5416 dont show notification about note if no access to entity 2016-03-29 16:20:05 +03:00
yuri
4a288434bc lead - case 2016-03-29 16:00:40 +03:00
yuri
9218bce3e4 kb email addition 2016-03-29 15:36:50 +03:00
yuri
b566413b78 Merge branch 'hotfix/4.0.5' 2016-03-29 15:30:46 +03:00
yuri
f624b441e4 KB: send email 2016-03-29 15:30:01 +03:00
yuri
ebe7834092 error message if restore password with empty smtp 2016-03-28 15:34:34 +03:00
yuri
9c8f54fd24 fix send test email button 2016-03-28 15:34:01 +03:00
yuri
4a20d74258 Merge branch 'hotfix/4.0.4' 2016-03-25 16:02:53 +02:00
yuri
f47915d077 fix list 2016-03-25 15:20:19 +02:00
yuri
eb2305712a user smtp info 2016-03-25 12:30:10 +02:00
yuri
f75414a5d2 fix intaller 2016-03-25 12:30:02 +02:00
yuri
a88cb05897 fix installer 2016-03-25 11:55:30 +02:00
yuri
2435ae67c9 v 2016-03-25 11:51:02 +02:00
yuri
4c49be5203 installer fix 2016-03-25 11:50:58 +02:00
yuri
2d8a1dad80 fix installer 2016-03-25 05:30:16 -04:00
yuri
a15b009133 user filters 2016-03-25 05:11:11 -04:00
yuri
25d2033b7c user select default filter active 2016-03-25 05:08:08 -04:00
yuri
9abeb6aec8 Merge branch 'hotfix/4.0.4' 2016-03-25 05:01:28 -04:00
yuri
c509eeae49 fix notices 2016-03-25 05:01:05 -04:00
yuri
2a4b0dbcb4 remove task dublicate index 2016-03-25 04:56:47 -04:00
yuri
e45a863e8d fix invitation 2016-03-24 11:27:53 +02:00
yuri
2ca40a6b4e Merge branch 'hotfix/4.0.4' 2016-03-23 17:01:30 +02:00
yuri
c4819e29e0 fix inv email date time 2016-03-23 17:01:00 +02:00
yuri
176fae228c Merge branch 'hotfix/4.0.4' 2016-03-23 16:57:33 +02:00
yuri
c0242a18e3 fix invitation email and email template 2016-03-23 16:57:18 +02:00
yuri
7a953c9a47 use word-break for long field 2016-03-23 16:09:07 +02:00
yuri
27cc0d812e url field title 2016-03-23 16:06:45 +02:00
Yuri Kuznetsov
2a1df998eb Merge pull request #123 from ecm4u/master
allow "Ends With" and "Like (%)" on varchar field
2016-03-23 14:59:56 +02:00
yuri
78573b85b5 Merge branch 'hotfix/4.0.4' 2016-03-23 14:59:09 +02:00
yuri
7a433c1890 fix list remove 2016-03-23 13:03:44 +02:00
yuri
de26d87400 list title 2016-03-23 12:02:03 +02:00
yuri
07da707503 Record controller fix sort 2016-03-23 11:40:24 +02:00
yuri
b473b19b45 fix opportunity dashlet acl 2016-03-22 16:19:44 +02:00
yuri
6c291999f4 keep meeting duration if rescheduled 2016-03-22 13:07:14 +02:00
yuri
2e92d0d3a5 case email compose fix 2016-03-22 12:03:21 +02:00
yuri
2ac5695e45 case email compose fix 2016-03-22 12:02:44 +02:00
yuri
0af4ab54f9 calendar quick view 2016-03-22 11:50:46 +02:00
yuri
8da92966de Merge branch 'hotfix/4.0.4' 2016-03-22 10:41:47 +02:00
yuri
bc3dfc7ff9 fix warnings 2016-03-18 16:05:41 +02:00
yuri
e81d5707f2 fix warnings 2016-03-18 15:26:04 +02:00
yuri
4cb42f8762 Merge branch 'hotfix/4.0.4' 2016-03-18 14:47:51 +02:00
yuri
1d2e3aff89 fix job rep 2016-03-18 14:47:21 +02:00
yuri
e36c8d6053 change year 2016-03-18 11:25:45 +02:00
yuri
4ea1d50caf fix detail getFieldViews 2016-03-18 11:19:14 +02:00
yuri
a50361126f Merge branch 'hotfix/4.0.4' 2016-03-17 12:32:49 +02:00
yuri
865a8e2abc fix E_STRICT notices 2016-03-16 17:34:50 +02:00
yuri
037ef7ea78 Merge branch 'hotfix/4.0.4' 2016-03-16 12:49:17 +02:00
yuri
5783f4e708 fix autoincrement 2016-03-16 12:48:44 +02:00
yuri
9991dd350f fix autoincrement 2016-03-16 12:48:18 +02:00
yuri
557a48ec6a isDraggable 2016-03-15 16:01:43 +02:00
yuri
d5fa18975e try catch for send password 2016-03-14 16:54:35 +02:00
yuri
23ee06e123 hide panels and buttons from portal user 2016-03-14 16:50:44 +02:00
yuri
e47eab0ce7 fix select manager 2016-03-14 15:52:06 +02:00
yuri
17ae5b6b5a fix file permissions 2016-03-14 15:51:58 +02:00
yuri
fa29bf3309 v 2016-03-14 11:43:24 +02:00
Heiko Robert
e839e505c8 en localisation for new search filter 2016-03-11 15:50:47 +01:00
Heiko Robert
7dc9c3e6b6 added search filter "Ends With", "Like" for varchar fields 2016-03-11 15:46:15 +01:00
yuri
684585278d fix email import 2016-03-11 12:02:21 +02:00
yuri
e303be8155 fix german salutations 2016-03-10 15:17:40 +02:00
yuri
f1285f0615 fix default side panel tpl 2016-03-10 12:46:21 +02:00
yuri
3fd1974d86 fix build permissions 2016-03-09 15:57:13 +02:00
yuri
d48716e65a account: text search by email address 2016-03-09 11:20:57 +02:00
yuri
a0432051f4 fix lead service 2016-03-09 11:03:56 +02:00
yuri
076c3aa65b trim search 2016-03-09 10:44:32 +02:00
yuri
92abd16032 remove notification if record removed 2016-03-04 12:40:30 +02:00
yuri
e6632066a6 aclPortal case: default status readOnly 2016-03-04 12:28:43 +02:00
yuri
e2deaf57dd fix portal account contact select acl 2016-03-03 13:02:10 +02:00
yuri
0530d9deb8 fix case compose email 2016-03-03 12:30:58 +02:00
yuri
b57ccf0c6a fix case assigned status 2016-03-03 12:27:01 +02:00
yuri
9ea9cf693d v 2016-03-03 12:19:44 +02:00
yuri
3460931fba fix portal windows issue 2016-03-03 12:19:05 +02:00
yuri
b743d113cc fix acl 2016-03-03 12:12:13 +02:00
yuri
f810371e70 fix tabbing 2016-03-03 12:12:07 +02:00
yuri
bc525f3047 fetchOnModelAfterRelate 2016-03-02 13:21:19 +02:00
yuri
6809181adf mass email: dont store test email 2016-03-02 13:02:44 +02:00
yuri
2c71a28421 fix use 2016-03-02 11:49:47 +02:00
yuri
82162e4fe6 fix select manager 2016-03-01 17:25:11 +02:00
yuri
03454bc309 fix portal log 2016-03-01 16:40:23 +02:00
yuri
d975501f29 fix warnings 2016-03-01 16:32:37 +02:00
yuri
761356adda fix mention 2016-03-01 12:23:37 +02:00
yuri
824835a28c email template: array fields 2016-03-01 12:01:27 +02:00
yuri
252ce15973 fix email template 2016-03-01 11:55:37 +02:00
yuri
7f25dba917 v 2016-03-01 10:57:31 +02:00
yuri
b5d4b8aa5a fix warning 2016-03-01 10:20:07 +02:00
yuri
39a136295a repository default options 2016-02-29 17:45:39 +02:00
yuri
6d674c007e php 7 compatibility 2016-02-29 17:01:18 +02:00
yuri
31f380a03a russian lang 2016-02-29 12:03:38 +02:00
yuri
7e23960196 v 2016-02-26 17:11:36 +02:00
yuri
d3b9f2479b fix export 2016-02-26 17:11:32 +02:00
yuri
c211842b52 fix metadata 2016-02-26 15:17:33 +02:00
yuri
3e11c0cfc1 fix loader 2016-02-26 12:23:53 +02:00
yuri
6747440b00 document folder customizable 2016-02-26 12:09:30 +02:00
yuri
dc1c4b1e78 fix lang 2016-02-26 10:48:01 +02:00
yuri
26f2fba3ac cleanyp 2016-02-25 16:17:55 +02:00
yuri
eb481c689b fix warnings 2016-02-25 16:16:40 +02:00
yuri
88c3984d35 date: ever filter 2016-02-25 13:07:50 +02:00
yuri
4eae088973 fix flotr2: remove underscore 2016-02-25 12:19:11 +02:00
yuri
60ae0fb365 fix 2016-02-25 10:28:21 +02:00
yuri
ab36f41fc3 duration notStorable 2016-02-24 17:51:13 +02:00
yuri
98de243e37 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-02-24 15:31:45 +02:00
yuri
0c6ccabbeb fix checkEntityForDuplicate 2016-02-24 15:31:26 +02:00
yuri
a66e6111cb fix detail view buttons fixed possition 2016-02-24 12:11:00 +02:00
yuri
caf5c8806a chart outlineColor 2016-02-24 11:43:48 +02:00
yuri
0154dfd6a1 view naming fix 2016-02-24 11:36:43 +02:00
yuri
e545e68877 version 2016-02-24 10:43:43 +02:00
yuri
fa24c2b7fe fix array field 2016-02-23 16:43:02 +02:00
Taras Machyshyn
df2b7d9659 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2016-02-23 15:58:24 +02:00
Taras Machyshyn
cc395232ff Fixed ukrainian translation 2016-02-23 15:58:10 +02:00
yuri
47afb83536 fix datetime 2016-02-23 15:48:13 +02:00
yuri
02d1b50b59 view naming 2016-02-23 15:42:05 +02:00
yuri
bd86eb08fa fix account list layout 2016-02-23 15:10:47 +02:00
yuri
b3c1a45b72 task: add parent to filters layout 2016-02-23 12:41:34 +02:00
yuri
15678e59e2 fix search frontend 2016-02-23 12:41:00 +02:00
yuri
6fe379bab3 link multiple and attachment multiple listLayoutDisabled 2016-02-23 11:54:48 +02:00
yuri
39ecb2fd37 cleanup 2016-02-23 11:51:36 +02:00
yuri
988c0059ff import language file 2016-02-23 11:34:15 +02:00
yuri
61ff31b3b7 trim 2016-02-23 11:17:05 +02:00
yuri
7c1a098b89 change account layouts 2016-02-22 16:47:52 +02:00
yuri
f843593843 add country to lead small view 2016-02-22 16:38:22 +02:00
yuri
c34eb915bc fix email draft 2016-02-22 15:54:37 +02:00
yuri
9508432294 opportunity set probability if empty 2016-02-22 15:00:40 +02:00
yuri
0959962269 version 2016-02-22 14:53:05 +02:00
yuri
e39a91bde6 fix view naming 2016-02-22 12:42:09 +02:00
yuri
51f5dbe25c address list view 2016-02-22 11:47:45 +02:00
yuri
6fd5c6cbe7 fix view naming 2016-02-22 11:18:07 +02:00
yuri
6622b09eaa fix issue that search input not stored 2016-02-22 11:16:47 +02:00
yuri
9bb9f066cd fix dashboard 2016-02-19 18:15:28 +02:00
yuri
03110b47df change account list layout 2016-02-19 17:41:15 +02:00
yuri
034e532e05 change contact list layout 2016-02-19 17:35:07 +02:00
yuri
c306af8b4c readable date formats according to selecred date format 2016-02-19 12:21:23 +02:00
yuri
bd4a784676 move readable date formats to date-time.js 2016-02-19 12:10:55 +02:00
yuri
4ca0a9dc5f fix german salutations 2016-02-19 12:03:15 +02:00
yuri
c6816b01b5 bool field filter: checked by default 2016-02-19 11:51:27 +02:00
yuri
bc7583ccb4 improve role table ui 2016-02-19 11:32:16 +02:00
yuri
318e43aca3 json formating 2016-02-19 10:38:05 +02:00
yuri
ea992f727b admin page: move user interface upper 2016-02-18 18:19:03 +02:00
yuri
5bdb16f98c fix home icon position 2016-02-18 18:09:27 +02:00
yuri
faa06993e6 cacheTimestamp fix for no cache 2016-02-18 18:06:50 +02:00
yuri
f6e0d017b2 change home icon 2016-02-18 18:03:16 +02:00
yuri
8ea56a74b0 code style link 2016-02-18 17:23:18 +02:00
yuri
d4c9666f85 contributing file 2016-02-18 17:19:43 +02:00
yuri
5f376304ce portal entryPoint changes 2016-02-18 11:41:56 +02:00
yuri
dbb29f25ab portal fixes 2016-02-17 17:31:10 +02:00
yuri
da059b2589 portal changes 2016-02-17 16:54:53 +02:00
yuri
fee64fd5ac fix lang 2016-02-17 12:48:30 +02:00
yuri
85de9f7a6f entryPoint data 2016-02-17 12:47:16 +02:00
yuri
5beb7641af portal folder 2016-02-17 12:35:19 +02:00
yuri
249852c3d7 baseBath 2016-02-16 17:27:45 +02:00
yuri
223d07579b display total count by default 2016-02-16 12:01:20 +02:00
yuri
74fb359740 pdf fontface in config 2016-02-16 10:48:40 +02:00
yuri
f7ffadc76f fix template vars sorting 2016-02-16 10:40:19 +02:00
yuri
fc03141dee calendar: fix issue with date w/o time 2016-02-16 10:25:38 +02:00
yuri
8d29014811 added cs_CZ lang 2016-02-15 16:18:52 +02:00
yuri
7dcbbcb98d version 2016-02-15 12:36:33 +02:00
yuri
60b9200247 fix vertical theme pagination issue 2016-02-15 12:19:02 +02:00
yuri
fa4d1d70d5 naming fix 2016-02-15 12:01:05 +02:00
yuri
de6cc1f9bb currency rounding 2016-02-15 11:52:20 +02:00
yuri
5fb6abe0e1 keep history in converted laed 2016-02-15 11:41:38 +02:00
yuri
94073b8aad account filters layout change 2016-02-15 11:16:40 +02:00
yuri
0e83e21aa0 use wildcard in address search 2016-02-15 11:14:56 +02:00
yuri
63bbf72942 fix company logo 403 error 2016-02-15 11:12:54 +02:00
yuri
dbaa41b161 refresh list view after create / edit 2016-02-15 10:53:25 +02:00
yuri
ed673dbe0d fix portal isDefault 2016-02-15 10:39:18 +02:00
yuri
d54ccb0c9e fix config 2016-02-12 18:40:23 +02:00
yuri
b29cbec3a1 kb fix 2016-02-12 12:33:19 +02:00
yuri
edc967c118 campaign: dont count test in statistics 2016-02-12 11:40:45 +02:00
yuri
e80681da22 change password url 2016-02-12 10:44:05 +02:00
yuri
03ec9c9378 attachment related field 2016-02-11 14:26:11 +02:00
yuri
6c54306cd6 fix email template 2016-02-11 12:48:33 +02:00
yuri
db49af84f4 kb portals 2016-02-11 12:29:12 +02:00
yuri
79a29531e9 fix import 2016-02-10 14:45:12 +02:00
yuri
c3de7f022e stream dashlet view list 2016-02-10 12:55:27 +02:00
yuri
59a3111596 fix acl 2016-02-10 12:49:06 +02:00
yuri
cf8dfadbdf dont display global search if no acl access 2016-02-10 11:58:07 +02:00
yuri
e500b2c906 user filters 2016-02-10 11:25:02 +02:00
yuri
0d9417cc3e create portal user 2016-02-10 11:21:50 +02:00
yuri
eb57d70182 fix lang 2016-02-10 10:27:37 +02:00
yuri
215b572d70 color fix 2016-02-10 10:01:46 +02:00
yuri
bc72f7f3e6 record dachlet check access 2016-02-09 16:18:09 +02:00
yuri
b449473f10 fix typo 2016-02-09 15:45:44 +02:00
yuri
6f23362bfd record dashlet url 2016-02-09 15:32:54 +02:00
yuri
074d2cc119 fix role 2016-02-09 12:33:20 +02:00
yuri
725cd224c1 fix portal html and 2016 2016-02-09 11:55:21 +02:00
yuri
2baee2398b fix portal html 2016-02-09 11:44:17 +02:00
yuri
1a8f8875fd fix show hide field 2016-02-09 10:46:40 +02:00
yuri
9cecea8317 theme in diff 2016-02-09 10:45:53 +02:00
yuri
05ac6ea0b8 fix cache 2016-02-08 18:22:56 +02:00
yuri
cce8186ccf fix dashlet 2016-02-08 17:39:19 +02:00
yuri
b143d1a30e show hide field for middle record 2016-02-08 17:09:50 +02:00
yuri
4c5f2e6b40 fixes 2016-02-08 16:54:58 +02:00
yuri
6bc2c7a576 theme manager fix 2016-02-08 16:03:09 +02:00
yuri
2412c7521b theme css use cacheTimestamp 2016-02-08 15:59:07 +02:00
yuri
c964897c59 fix list view show more 2016-02-08 13:00:47 +02:00
yuri
6abdc001e5 attachment: forbid parent 2016-02-08 11:56:47 +02:00
yuri
83943d1daa fix auto follow notification 2016-02-08 11:06:52 +02:00
yuri
eedd54d10a fix email modal 2016-02-05 16:40:03 +02:00
yuri
c8a3736816 attachment: small changes 2016-02-05 16:31:31 +02:00
yuri
e727196424 email address search check email create access 2016-02-05 16:06:07 +02:00
yuri
d0f715863c cleanup attachments w/o parent 2016-02-05 15:57:29 +02:00
yuri
ae94113370 attachment set size if empty 2016-02-05 12:43:16 +02:00
yuri
3fbe4970b2 clientDefs compose modal view 2016-02-05 12:31:54 +02:00
yuri
54e6e3bf39 fix mail sender 2016-02-05 12:16:17 +02:00
yuri
f2a7d3ae86 fix array 2016-02-05 11:06:31 +02:00
yuri
3799dd739b Attachment Multiple: sourceList to field manager 2016-02-05 10:55:16 +02:00
yuri
3161419682 fix pdf 2016-02-04 17:41:50 +02:00
yuri
bdc277e557 fix pdf 2016-02-04 17:39:38 +02:00
yuri
a515cd29a0 fix pdf 2016-02-04 17:38:26 +02:00
yuri
770a2b83f0 Pdf service 2016-02-04 17:35:48 +02:00
yuri
f9df8a757d attachment getFilePath method 2016-02-04 15:57:53 +02:00
yuri
6d17017c2d wysiwyg: auto height 2016-02-04 13:08:18 +02:00
yuri
9fea9d46fb fix attachment entry point 2016-02-04 12:44:37 +02:00
yuri
3925d83b68 when select display only not empty categories 2016-02-04 12:30:43 +02:00
yuri
ca23f1d58e add document 2016-02-04 12:15:28 +02:00
yuri
4492293464 new view naming 2016-02-03 15:30:33 +02:00
yuri
cd0a32846c added theme 2016-02-03 11:52:16 +02:00
yuri
f5d0a80626 impoty: empty assigned user 2016-02-03 10:43:42 +02:00
yuri
1b0fdad357 chache user layout 2016-02-02 17:03:28 +02:00
yuri
9ea5e3f4d0 email-to-case: no distribution 2016-02-02 15:58:40 +02:00
yuri
79416d7ac5 fix note error 2016-02-02 15:54:35 +02:00
yuri
52c6ecbcb6 new view name standard 2016-02-02 15:37:09 +02:00
yuri
f6732e72d2 notification: related id 2016-02-02 12:48:31 +02:00
yuri
bbf2128c8a fix notification all read 2016-02-02 12:19:01 +02:00
yuri
d5ba8058e4 notification list view link 2016-02-02 11:28:32 +02:00
yuri
926e243aa3 Notification remove 2016-02-01 17:36:53 +02:00
yuri
ed7d24bc8f notification fronend refactor 2016-02-01 17:09:45 +02:00
yuri
4f4069c3d7 case distribution small change 2016-02-01 15:49:03 +02:00
yuri
9426a09a40 fix stream post view 2016-02-01 11:51:53 +02:00
yuri
bfd9b40a5b fix email create contact 2016-02-01 11:04:39 +02:00
yuri
e94da5c189 select manager: addAndWhere addOrWhere 2016-01-29 16:56:51 +02:00
yuri
36847497fc fix case assignment if email is duplicate 2016-01-29 16:30:09 +02:00
yuri
0bb52a11ea fix email sent filter 2016-01-29 15:08:34 +02:00
yuri
9f7043a85d isFromTeams filter 2016-01-29 14:54:46 +02:00
yuri
eafb8bd2cb fix portal auth 2016-01-29 11:36:17 +02:00
yuri
63eeea7b26 lang 2016-01-29 11:29:07 +02:00
yuri
eac2372e00 edit dd for stream panel 2016-01-29 11:26:04 +02:00
yuri
d9e972684c change portal user name autofill 2016-01-29 11:12:39 +02:00
yuri
aaa9d1a7b4 add items to default filter layouts 2016-01-29 10:46:57 +02:00
yuri
df9a778ba0 portal dev 2016-01-28 17:55:28 +02:00
yuri
68612cf9d1 fux uk_UA 2016-01-28 16:26:07 +02:00
yuri
26b72ea73d Added Mass Email link 2016-01-28 16:19:59 +02:00
yuri
e8c570f5df fix emailReplyToAllByDefault 2016-01-28 16:10:29 +02:00
yuri
abbf601325 Preferences: replyEmailToAllByDefault 2016-01-28 15:57:23 +02:00
yuri
1cd73e2f50 fix lang 2016-01-28 15:33:11 +02:00
yuri
4b49bf280b portalUserLimit 2016-01-28 15:23:44 +02:00
yuri
48302fae95 code improvements 2016-01-28 13:00:39 +02:00
yuri
c525698427 fix reply cc 2016-01-27 16:29:47 +02:00
yuri
64738979e3 fix campaign revenue sum 2016-01-27 16:17:06 +02:00
yuri
bed7434cd0 Settings: added readableDateFormatDisabled 2016-01-27 15:42:19 +02:00
yuri
95f23863d4 attachment: sourceId 2016-01-27 11:56:22 +02:00
yuri
1406527755 text field parameters added 2016-01-27 11:08:16 +02:00
yuri
78395407e3 load jsLibs before login 2016-01-27 10:53:28 +02:00
yuri
26e5c802b6 portal dev 2016-01-26 16:26:10 +02:00
yuri
2f5f64e53c added d/m/y date format 2016-01-26 11:17:22 +02:00
yuri
a1c95fe0e9 kb changes 2016-01-26 11:17:09 +02:00
yuri
eb17c54dd6 opportunity assigned user not required 2016-01-25 15:58:51 +02:00
yuri
f3207a271a fix acl delete own record 2016-01-25 11:25:55 +02:00
yuri
ea76104b80 role: change order 2016-01-25 11:25:39 +02:00
yuri
3d5be39d46 fix quick create acl 2016-01-25 11:25:19 +02:00
yuri
1678bb070e dashlets changes 2016-01-22 16:52:08 +02:00
yuri
470a49d6cd fix record list dashlet 2016-01-22 16:04:02 +02:00
yuri
bb11a26816 role: clear cache on team change 2016-01-22 16:01:17 +02:00
yuri
06e6b19c40 siteUrl and text search filters 2016-01-22 15:43:37 +02:00
yuri
f085bf5e58 dashlet layouts dev 2016-01-22 15:01:30 +02:00
yuri
2437388bf0 dashboard improvements 2016-01-21 17:47:45 +02:00
yuri
fb70c9dce6 calendar size fix 2016-01-21 10:35:28 +02:00
yuri
30384a713e calendar dashlet size 2016-01-20 18:12:17 +02:00
yuri
cc26345db6 Merge branch 'master' of https://github.com/espocrm/espocrm 2016-01-20 18:03:45 +02:00
yuri
f29534531d dashboard improvements 2016-01-20 18:03:37 +02:00
Yuri Kuznetsov
00a2eae74e Merge pull request #82 from alasdaircr/PATCH_warning
Typo in variable name
2016-01-20 15:19:51 +02:00
Alasdair Campbell
283cac586d PATCH: warning 2016-01-20 11:03:20 +00:00
yuri
ca33cab247 fix currency change trigger 2016-01-20 12:51:09 +02:00
yuri
52fb9f8b0a increase max lenngth of attachment field 2016-01-18 16:54:49 +02:00
yuri
10fee4d974 after relate event 2016-01-18 16:48:00 +02:00
yuri
6edf6ae9f2 refactor stream query 2016-01-18 16:23:54 +02:00
yuri
58e0ee5721 portal dev 2016-01-18 15:35:23 +02:00
yuri
6354c72334 knowledge base dev 2016-01-15 16:36:20 +02:00
yuri
f93e6c03c9 knowledge base dev 2016-01-15 15:23:49 +02:00
yuri
ef5fec4282 portal dev 2016-01-15 14:41:58 +02:00
yuri
6dc13f229e is not read 2016-01-15 13:27:49 +02:00
yuri
f148bb0089 email: is read and is important filters 2016-01-15 13:24:06 +02:00
yuri
9b9a472dd5 portal dev 2016-01-15 12:52:23 +02:00
yuri
f965acf384 kb fixes 2016-01-14 17:12:36 +02:00
yuri
f7e3fb3e15 knowledge base 2016-01-14 16:41:27 +02:00
yuri
a8396df545 document folder acl 2016-01-14 12:02:29 +02:00
yuri
3cd91ba15e cleanup 2016-01-13 17:39:05 +02:00
yuri
2433f0d626 document changes 2016-01-13 17:30:24 +02:00
yuri
c0b5661ef4 fix list tree 2016-01-13 17:30:09 +02:00
yuri
ff81306e90 fix list and list tree views 2016-01-13 16:40:27 +02:00
yuri
d51e38bb6e portal dev 2016-01-13 13:08:35 +02:00
yuri
5c1ae72bc6 fix text fields undefined 2016-01-13 11:16:46 +02:00
yuri
b1ada57d93 portal dev 2016-01-12 15:51:30 +02:00
yuri
e7afe68868 dev 2016-01-11 16:02:03 +02:00
yuri
f6f58c679d fixes 2016-01-08 15:18:48 +02:00
yuri
4b4f8d2cc4 dev and fix 2016-01-08 14:50:46 +02:00
yuri
7dc230d731 portal development 2016-01-08 14:39:59 +02:00
yuri
db7e33fa61 development 2016-01-05 18:04:15 +02:00
yuri
e4d6b13d27 fixes 2016-01-05 13:00:30 +02:00
yuri
3177945146 portal auth 2016-01-05 11:49:14 +02:00
yuri
ef9c5da2d6 portal development 2016-01-04 16:14:18 +02:00
yuri
18423c0ba1 acl portal 2015-12-29 15:16:49 +02:00
yuri
f629cb3af6 role appearance change 2015-12-29 12:09:58 +02:00
yuri
d081d6b2d9 portal dev 2015-12-28 17:37:17 +02:00
yuri
ab3dfe4bf6 portal dev 2015-12-28 16:58:16 +02:00
yuri
a472e6d348 Portal Roles 2015-12-28 14:43:10 +02:00
yuri
fa014bb232 modal fixes 2015-12-25 18:31:20 +02:00
yuri
bdee4068c0 fixes 2015-12-25 18:01:02 +02:00
yuri
025e7134fc acl changes and portal entity 2015-12-25 17:01:50 +02:00
yuri
a388638a91 fix field readOnly 2015-12-25 15:52:30 +02:00
yuri
e7b8283fdc modals fixes 2015-12-25 12:30:56 +02:00
yuri
d7172f8ebe acl changes and fixes 2015-12-25 12:04:41 +02:00
yuri
bc0ea9ab3a readOnly attributes 2015-12-25 10:59:28 +02:00
yuri
838f8ba3b3 fix contact layout 2015-12-24 18:03:24 +02:00
yuri
4da13a55cf hasOne link and portal user fields 2015-12-24 18:01:59 +02:00
yuri
8489bca8c0 portal fields 2015-12-24 14:59:01 +02:00
yuri
d620b36dd1 Merge branch 'hotfix/3.9.3' 2015-12-23 12:37:19 +02:00
yuri
89b5daebee fix ua lang 2015-12-23 12:37:05 +02:00
yuri
fdea3231e9 acl and search 2015-12-23 12:09:42 +02:00
yuri
882b74a31f fix acl and relogin issue 2015-12-23 10:43:49 +02:00
yuri
181a680296 acl and export 2015-12-23 10:06:35 +02:00
yuri
d7d93e6a79 role panels 2015-12-22 16:59:52 +02:00
yuri
d6ee607b9d fix email save 2015-12-22 15:57:01 +02:00
yuri
75f26e3ecc navigate in quick view 2 2015-12-22 15:43:35 +02:00
yuri
e959bcb369 trim 2015-12-22 11:28:56 +02:00
yuri
c9eea8796f next prev title 2015-12-21 17:28:38 +02:00
yuri
8d44e0b1ad next prev in preview 2015-12-21 17:26:37 +02:00
yuri
947f47ef25 role add field translte 2015-12-21 16:03:32 +02:00
yuri
27e5df5367 field level acl frontend 2 2015-12-21 15:15:06 +02:00
yuri
b7b64d7b32 duplicate changes 2015-12-21 11:25:23 +02:00
yuri
4f9a6a0dd0 acl table change 2015-12-18 18:00:49 +02:00
yuri
bb5543fc81 role field security detail view 2015-12-18 17:45:42 +02:00
yuri
8b1ffaac3f disable template 2015-12-18 11:46:06 +02:00
yuri
0961ceb203 field level client side 1 2015-12-17 16:44:32 +02:00
yuri
96ca44f91b fix acl table 2015-12-17 15:14:23 +02:00
yuri
869bf46070 attributes instead of fields; server side field level security 2015-12-17 14:58:19 +02:00
yuri
af039971a6 fix acl 2015-12-16 17:44:39 +02:00
yuri
5b614691fd acl table refactor 2015-12-16 17:36:11 +02:00
yuri
39295d2d6f merge 2015-12-16 11:27:24 +02:00
yuri
51952a9283 fix issue that email reply stylesheet was broken 2015-12-16 11:26:16 +02:00
yuri
e88ffc1270 wyywyg full screen button 2015-12-15 18:23:08 +02:00
yuri
c7fccac10c summernote upgrade 2015-12-15 18:18:23 +02:00
yuri
cdb4b4e7bd summernote upgrade 2015-12-15 18:18:02 +02:00
yuri
3fa6ac5042 Merge branch 'master' of https://github.com/espocrm/espocrm 2015-12-15 15:59:04 +02:00
Yuri Kuznetsov
47e52b6670 Merge pull request #73 from ayman-alkom/master
Translate Turkish dates
2015-12-15 15:58:45 +02:00
yuri
461eb480f1 move populate assigned user and assigned teams to view 2015-12-15 14:49:55 +02:00
yuri
b73cbef3d4 Merge branch 'hotfix/3.9.3' 2015-12-15 11:03:16 +02:00
yuri
c6abb0a531 fix stream list 2015-12-15 11:03:03 +02:00
yuri
7227122fd8 Merge branch 'hotfix/3.9.3' 2015-12-15 11:01:18 +02:00
yuri
cf3228466d fix list 2015-12-15 11:01:06 +02:00
yuri
4452db65ed Merge branch 'hotfix/3.9.3' 2015-12-15 10:30:33 +02:00
yuri
635f0d4891 fix remove from list 2015-12-15 10:30:23 +02:00
yuri
3da60c1ada rdb before after methods added 2015-12-14 17:39:43 +02:00
yuri
7187156390 rdb relate methods 2015-12-14 17:34:20 +02:00
yuri
b764fd8da2 fix email select manager 2015-12-14 15:44:04 +02:00
yuri
da6d590cc1 select manager change 2015-12-14 15:43:33 +02:00
Ayman Alkom
3b265056c2 Translate Turkish dates 2015-12-14 15:11:39 +02:00
yuri
7fe08f1669 acl fixes 2015-12-14 11:58:14 +02:00
yuri
dc0a616ec8 select manager changes 2015-12-11 14:43:02 +02:00
yuri
7dc43e5ccc entity class fixes 2015-12-11 12:50:23 +02:00
yuri
9a78cf2389 acl changes 2015-12-11 12:17:15 +02:00
yuri
b0e050ceac email assignedUsers 2015-12-10 18:05:37 +02:00
yuri
90f06fc532 setReadOnly locked 2015-12-10 16:45:13 +02:00
yuri
6d3d922290 hide show field changhe 2015-12-10 16:04:02 +02:00
yuri
3c2bc8871e fix 2015-12-10 16:01:43 +02:00
yuri
16399bf71d acl email 2015-12-10 15:48:11 +02:00
yuri
abf963099c acl load and promises 2015-12-10 12:01:01 +02:00
yuri
b7ab6953cd fixes in record view 2015-12-09 18:53:13 +02:00
yuri
1628821cdd changes in record 2015-12-09 18:46:05 +02:00
yuri
fbf98e9754 frontend client refactor 2015-12-09 17:21:05 +02:00
yuri
b4ec610fc2 record fixes 2015-12-09 17:20:53 +02:00
yuri
e2a63729b6 record view refactor 2015-12-09 12:58:45 +02:00
yuri
b72924c126 panel view disabled check 2015-12-08 17:15:04 +02:00
yuri
115bcc626a Merge branch 'stable' 2015-12-08 17:05:48 +02:00
yuri
083e248f21 fix logo 2 2015-12-08 16:56:14 +02:00
yuri
df422f6365 v 2015-12-08 16:51:10 +02:00
yuri
47a2fee51d fix logo 2015-12-08 16:50:35 +02:00
yuri
3fabdc1d44 Merge branch 'hotfix/3.9.2' 2015-12-08 16:23:20 +02:00
yuri
4b0be0137c fix user detail view 2015-12-08 16:23:12 +02:00
yuri
7fdb40b44e more view refactoring 2015-12-08 16:21:35 +02:00
yuri
929eeddce7 grand record view refactor 2015-12-08 12:59:19 +02:00
yuri
ea5d27a87f detail view refactor 2015-12-07 17:08:17 +02:00
yuri
0da898a242 show hide field method changes 2015-12-04 16:16:10 +02:00
yuri
4a14cb0e8c showPanel hidePanel methods 2015-12-04 15:55:41 +02:00
yuri
509c7f3989 stream acl 2015-12-04 15:22:18 +02:00
yuri
38514941b8 clearfix 2015-12-04 14:24:03 +02:00
yuri
3212f59cf2 fix css 2015-12-04 14:12:59 +02:00
yuri
ad25e13cf0 acl view change 2015-12-04 12:42:36 +02:00
yuri
fadd4ffe42 refactor acl table 2015-12-04 12:02:38 +02:00
yuri
7a3e36c092 notifications suprt parent 2015-12-04 11:10:34 +02:00
yuri
730e8143e7 scope disabled check 2015-12-03 15:37:59 +02:00
yuri
a401c4cd4c set is fetched 2015-12-03 15:34:59 +02:00
yuri
51bf1343c8 notifications and acl 2015-12-03 15:32:35 +02:00
yuri
343986bf83 email notificator acl check 2015-12-03 14:46:46 +02:00
yuri
d0b3ab57de Merge branch 'hotfix/3.9.2' 2015-12-03 14:26:04 +02:00
yuri
d79993ba11 phone field type fix 2015-12-03 14:25:37 +02:00
yuri
6ca6f45b58 stream and acl 2015-12-03 13:54:07 +02:00
yuri
d3b50c077b ability to disable scope 2015-12-03 12:42:25 +02:00
yuri
2c4ba8c1b5 lang 2015-12-03 11:08:29 +02:00
yuri
a8e00dda0b fix main view $el emptyied 2015-12-02 13:22:27 +02:00
yuri
7b88c008de fix naming 2015-12-02 13:09:20 +02:00
yuri
2c251133af naming fix 2015-12-02 13:07:48 +02:00
yuri
c079b256f0 fix naming 2015-12-02 12:40:27 +02:00
yuri
6a9abab7ea refactor settings views 2015-12-02 12:23:10 +02:00
yuri
f59c217053 fields/base small change 2015-12-02 11:18:51 +02:00
yuri
57008f834a Merge branch 'hotfix/3.9.2' 2015-12-02 10:47:36 +02:00
yuri
7b90e74b97 view refactoring 2015-12-02 10:47:28 +02:00
yuri
da62759130 destroy popover on remove 2015-11-30 16:40:01 +02:00
yuri
7cfae284ae remove main.html 2015-11-30 15:25:18 +02:00
yuri
d946eed86a html folder 2015-11-30 15:22:52 +02:00
yuri
030e4ac7ab Merge branch 'hotfix/3.9.2' 2015-11-30 14:23:22 +02:00
yuri
2e04fd5a3b style 2015-11-30 14:14:29 +02:00
yuri
6174245b22 cleanup 2015-11-30 12:22:48 +02:00
yuri
9b9d3d9634 ORM: ability to join children 2015-11-30 11:15:21 +02:00
yuri
f98d5a4ee9 fix typo 2015-11-30 10:26:08 +02:00
yuri
c653d731cc fix readme 2015-11-27 17:14:07 +02:00
yuri
f4582ac3a6 change readme 2015-11-27 17:11:14 +02:00
yuri
5bb7842585 client manager 2015-11-27 16:58:05 +02:00
yuri
e13a722dca cleanup and style fix 2015-11-27 16:03:27 +02:00
yuri
dba325aa61 join conditions and alias 2015-11-27 12:21:40 +02:00
yuri
59dccbedbd fix activities queries 2015-11-27 12:05:48 +02:00
yuri
df32edf85f version 2015-11-27 11:47:15 +02:00
yuri
0385513f0e rename checkPemission and fix calendar 2015-11-27 11:46:52 +02:00
yuri
710fdebbec email account small fixes 2015-11-27 11:02:49 +02:00
yuri
7b707716f9 scheduled jobs ui changes 2015-11-27 10:35:54 +02:00
yuri
8cdb2df433 email template: assignmed user not required 2015-11-27 10:28:58 +02:00
4330 changed files with 251556 additions and 75948 deletions

11
.editorconfig Normal file
View File

@@ -0,0 +1,11 @@
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

10
.gitignore vendored
View File

@@ -6,14 +6,12 @@
/data/config.php
/build
/node_modules
/client
/test.php
/main.html
/frontend/client/css/espo.css
/frontend/client/css/espo-vertical.css
/frontend/client/css/sakura.css
/frontend/client/css/sakura-vertical.css
/tests/testData/cache/*
/tests/unit/testData/cache/*
!/tests/unit/testData/cache/.data
/tests/integration/config.php
composer.phar
vendor/
/custom/Espo/Custom/*

0
.htaccess Executable file → Normal file
View File

9
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,9 @@
## Pull Requests
Before we can merge your pull request you need to accept our CLA [here](https://github.com/espocrm/cla). It's very simple to do.
[Code Style Guidelines](https://github.com/espocrm/espocrm/wiki/Code-Style-Guidelines).
## Issues
We don't provide developer help or any kind of support on github. Please use our [forum](https://forum.espocrm.com) for this.

View File

@@ -2,7 +2,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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
@@ -23,6 +23,7 @@ module.exports = function (grunt) {
var jsFilesToMinify = [
'client/lib/jquery-2.1.4.min.js',
'client/lib/underscore-min.js',
'client/lib/es6-promise.min.js',
'client/lib/backbone-min.js',
'client/lib/handlebars.js',
'client/lib/base64.js',
@@ -33,13 +34,73 @@ module.exports = function (grunt) {
'client/lib/jquery.autocomplete.js',
'client/lib/bootstrap.min.js',
'client/lib/bootstrap-datepicker.js',
'client/lib/bull.min.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'),
@@ -58,62 +119,20 @@ module.exports = function (grunt) {
start: ['build/*'],
final: ['build/tmp'],
},
less: {
espo: {
options: {
yuicompress: true,
},
files: {
'frontend/client/css/espo.css': 'frontend/less/espo/main.less',
},
},
sakura: {
options: {
yuicompress: true,
},
files: {
'frontend/client/css/sakura.css': 'frontend/less/sakura/main.less',
},
},
espoVertical: {
options: {
yuicompress: true,
},
files: {
'frontend/client/css/espo-vertical.css': 'frontend/less/espo-vertical/main.less',
},
},
sakuraVertical: {
options: {
yuicompress: true,
},
files: {
'frontend/client/css/sakura-vertical.css': 'frontend/less/sakura-vertical/main.less',
},
}
},
cssmin: {
minify: {
files: {
'build/tmp/client/css/espo.css': [
'frontend/client/css/espo.css',
]
}
},
},
less: lessData,
uglify: {
options: {
mangle: false,
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
},
'build/tmp/client/espo.min.js': jsFilesToMinify.map(function (item) {
return 'frontend/' + item;
return '' + item;
})
},
copy: {
frontendFolders: {
expand: true,
cwd: 'frontend/client',
cwd: 'client',
src: [
'src/**',
'res/**',
@@ -127,14 +146,10 @@ module.exports = function (grunt) {
],
dest: 'build/tmp/client',
},
frontendHtml: {
src: 'frontend/html/reset.html',
dest: 'build/tmp/reset.html'
},
frontendLib: {
expand: true,
dot: true,
cwd: 'frontend/client/lib',
cwd: 'client/lib',
src: '**',
dest: 'build/tmp/client/lib/',
},
@@ -147,7 +162,9 @@ module.exports = function (grunt) {
'custom/**',
'data/.data',
'install/**',
'portal/**',
'vendor/**',
'html/**',
'bootstrap.php',
'cron.php',
'rebuild.php',
@@ -195,8 +212,11 @@ module.exports = function (grunt) {
},
src: [
'build/EspoCRM-<%= pkg.version %>/install',
'build/EspoCRM-<%= pkg.version %>/portal',
'build/EspoCRM-<%= pkg.version %>/api',
'build/EspoCRM-<%= pkg.version %>/api/v1',
'build/EspoCRM-<%= pkg.version %>/api/v1/portal-access',
'build/EspoCRM-<%= pkg.version %>',
]
}
},
@@ -212,8 +232,12 @@ module.exports = function (grunt) {
},
files: [
{
src: 'frontend/html/main.html',
dest: 'build/tmp/main.html'
src: 'build/tmp/html/main.html',
dest: 'build/tmp/html/main.html'
},
{
src: 'build/tmp/html/portal.html',
dest: 'build/tmp/html/portal.html'
}
]
},
@@ -261,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,14 +8,18 @@ Download the latest release from our [website](http://www.espocrm.com).
### Requirements
* PHP 5.4 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
Create an issue [here](https://github.com/espocrm/espocrm/issues) or post on our [forum](http://forum.espocrm.com/bug-reports?routestring=forum/bug-reports).
Create an issue [here](https://github.com/espocrm/espocrm/issues) or post on our [forum](http://forum.espocrm.com/forum/bug-reports).
### How to get started (for developers)
@@ -26,9 +30,9 @@ Create an issue [here](https://github.com/espocrm/espocrm/issues) or post on our
Never update composer dependencies if you are going to contribute code back.
Now you can build.
Now you can build. Build will create compiled css files.
If your repository is accessible via a web server then you can run EspoCRM by url `http://PROJECT_URL/frontend`. To compose a proper config.php and populate database you can run install by opening `http(s)://{YOUR_CRM_URL}/install` location in a browser. Also you need to run build before to have compiled css.
To compose a proper config.php and populate database you can run install by opening `http(s)://{YOUR_CRM_URL}/install` location in a browser. Then open `data/config.php` file and add `isDeveloperMode => true`.
### How to build

0
api/v1/.htaccess Executable file → Normal file
View File

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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,12 @@
RewriteEngine On
# Some hosts may require you to use the `RewriteBase` directive.
# If you need to use the `RewriteBase` directive, it should be the
# absolute physical path to the directory that contains this htaccess file.
#
# RewriteBase /
RewriteRule .* - [E=HTTP_ESPO_CGI_AUTH:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

View File

@@ -0,0 +1,39 @@
<?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.
************************************************************************/
require_once('../../../bootstrap.php');
if (!empty($_GET['portalId'])) {
$portalId = $_GET['portalId'];
} else {
$portalId = explode('/', $_SERVER['REQUEST_URI'])[count(explode('/', $_SERVER['SCRIPT_NAME'])) - 1];
}
$app = new \Espo\Core\Portal\Application($portalId);
$app->run();

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="rule 1G" stopProcessing="true">
<match url="^" />
<action type="Rewrite" url="index.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

0
api/v1/web.config Executable file → Normal file
View File

View File

@@ -0,0 +1,42 @@
<?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 ActionHistoryRecord extends \Espo\Core\Acl\Base
{
public function checkIsOwner(EntityUser $user, Entity $entity)
{
return $entity->get('userId') === $user->id;
}
}

View File

@@ -0,0 +1,93 @@
<?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 Attachment extends \Espo\Core\Acl\Base
{
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) {
return true;
}
if ($entity->get('parentType') === 'Settings') {
return true;
}
$parent = null;
$hasParent = false;
if ($entity->get('parentId') && $entity->get('parentType')) {
$hasParent = true;
$parent = $this->getEntityManager()->getEntity($entity->get('parentType'), $entity->get('parentId'));
} else if ($entity->get('relatedId') && $entity->get('relatedType')) {
$hasParent = true;
$parent = $this->getEntityManager()->getEntity($entity->get('relatedType'), $entity->get('relatedId'));
}
if ($hasParent) {
if ($parent) {
if ($parent->getEntityType() === 'Note') {
if ($parent->get('parentId') && $parent->get('parentType')) {
$parentOfParent = $this->getEntityManager()->getEntity($parent->get('parentType'), $parent->get('parentId'));
if ($parentOfParent && $this->getAclManager()->checkEntity($user, $parentOfParent)) {
return true;
}
} else {
return true;
}
} else {
if ($this->getAclManager()->checkEntity($user, $parent)) {
return true;
}
}
}
} else {
return true;
}
if ($this->checkEntity($user, $entity, $data, 'read')) {
return true;
}
return false;
}
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($user->id === $entity->get('createdById')) {
return true;
}
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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
@@ -29,13 +29,13 @@
namespace Espo\Acl;
use \Espo\Entities\User;
use \Espo\Entities\User as EntityUser;
use \Espo\ORM\Entity;
class Email extends \Espo\Core\Acl\Base
{
public function checkEntityRead(User $user, Entity $entity, $data)
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
{
if ($this->checkEntity($user, $entity, $data, 'read')) {
return true;
@@ -44,8 +44,8 @@ class Email extends \Espo\Core\Acl\Base
if ($data === false) {
return false;
}
if (is_array($data)) {
if (empty($data['read']) || $data['read'] == 'no') {
if (is_object($data)) {
if ($data->read === false || $data->read === 'no') {
return false;
}
}
@@ -60,20 +60,62 @@ class Email extends \Espo\Core\Acl\Base
return false;
}
public function checkIsOwner(User $user, Entity $entity)
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($entity->has('assignedUserId')) {
if ($user->id === $entity->get('assignedUserId')) {
return true;
}
if ($user->id === $entity->get('assignedUserId')) {
return true;
}
if ($user->id === $entity->get('createdById')) {
return true;
}
if ($entity->hasLinkMultipleId('assignedUsers', $user->id)) {
return true;
}
return false;
}
public function checkEntityDelete(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) {
return true;
}
if ($data === false) {
return false;
}
if ($data->delete === 'own') {
if ($user->id === $entity->get('assignedUserId')) {
return true;
}
if ($user->id === $entity->get('createdById')) {
return true;
}
$assignedUserIdList = $entity->getLinkMultipleIdList('assignedUsers');
if (count($assignedUserIdList) === 1 && $entity->hasLinkMultipleId('assignedUsers', $user->id)) {
return true;
}
return false;
}
if ($this->checkEntity($user, $entity, $data, 'delete')) {
return true;
}
if ($data->edit !== 'no' || $data->create !== 'no') {
if ($entity->get('createdById') === $user->id) {
if ($entity->get('status') !== 'Sent' && $entity->get('status') !== 'Archived') {
return true;
}
}
}
return false;
}
}

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-2015 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
@@ -29,12 +29,12 @@
namespace Espo\Acl;
use \Espo\Entities\User;
use \Espo\Entities\User as EntityUser;
use \Espo\ORM\Entity;
class EmailFilter extends \Espo\Core\Acl\Base
{
public function checkIsOwner(User $user, Entity $entity)
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($entity->has('parentId') && $entity->has('parentType')) {
$parentType = $entity->get('parentType');
@@ -42,11 +42,14 @@ class EmailFilter extends \Espo\Core\Acl\Base
if (!$parentType || !$parentId) return;
$parent = $this->getEntityManager()->getEntity($parentType, $parentId);
if ($parent->getEntityType() === 'User') {
return $parent->id === $user->id;
}
if ($parent && $parent->has('assignedUserId') && $parent->get('assignedUserId') === $user->id) {
return true;
}
}
return;
}
}

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

@@ -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 Notification extends \Espo\Core\Acl\Base
{
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($user->id === $entity->get('userId')) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,63 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-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

@@ -0,0 +1,61 @@
<?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 ScheduledJob extends \Espo\Core\Acl\Base
{
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
{
if ($entity->get('isInternal')) return false;
return $this->checkEntity($user, $entity, $data, 'read');
}
public function checkEntityEdit(EntityUser $user, Entity $entity, $data)
{
if ($entity->get('isInternal')) return false;
return $this->checkEntity($user, $entity, $data, 'edit');
}
public function checkEntityDelete(EntityUser $user, Entity $entity, $data)
{
if ($entity->get('isInternal')) return false;
return $this->checkEntity($user, $entity, $data, 'delete');
}
public function checkEntityCreate(EntityUser $user, Entity $entity, $data)
{
if ($entity->get('isInternal')) return false;
return $this->checkEntity($user, $entity, $data, 'create');
}
}

View File

@@ -0,0 +1,41 @@
<?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\ORM\Entity;
class Team extends \Espo\Core\Acl\Base
{
public function checkInTeam(\Espo\Entities\User $user, Entity $entity)
{
$userTeamIdList = $user->getLinkMultipleIdList('teams');
return in_array($entity->id, $userTeamIdList);
}
}

View File

@@ -0,0 +1,73 @@
<?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\ORM\Entity;
use \Espo\Entities\User as EntityUser;
class User extends \Espo\Core\Acl\Base
{
public function checkIsOwner(\Espo\Entities\User $user, Entity $entity)
{
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

@@ -0,0 +1,93 @@
<?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 Attachment extends \Espo\Core\AclPortal\Base
{
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
{
if ($user->isAdmin()) {
return true;
}
if ($entity->get('parentType') === 'Settings') {
return true;
}
$parent = null;
$hasParent = false;
if ($entity->get('parentId') && $entity->get('parentType')) {
$hasParent = true;
$parent = $this->getEntityManager()->getEntity($entity->get('parentType'), $entity->get('parentId'));
} else if ($entity->get('relatedId') && $entity->get('relatedType')) {
$hasParent = true;
$parent = $this->getEntityManager()->getEntity($entity->get('relatedType'), $entity->get('relatedId'));
}
if ($hasParent) {
if ($parent) {
if ($parent->getEntityType() === 'Note') {
if ($parent->get('parentId') && $parent->get('parentType')) {
$parentOfParent = $this->getEntityManager()->getEntity($parent->get('parentType'), $parent->get('parentId'));
if ($parentOfParent && $this->getAclManager()->checkEntity($user, $parentOfParent)) {
return true;
}
} else {
return true;
}
} else {
if ($this->getAclManager()->checkEntity($user, $parent)) {
return true;
}
}
}
} else {
return true;
}
if ($this->checkEntity($user, $entity, $data, 'read')) {
return true;
}
return false;
}
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($user->id === $entity->get('createdById')) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,71 @@
<?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 Email extends \Espo\Core\AclPortal\Base
{
public function checkEntityRead(EntityUser $user, Entity $entity, $data)
{
if ($this->checkEntity($user, $entity, $data, 'read')) {
return true;
}
if ($data === false) {
return false;
}
if (is_object($data)) {
if ($data->read === false || $data->read === 'no') {
return false;
}
}
if (!$entity->has('usersIds')) {
$entity->loadLinkMultipleField('users');
}
$userIdList = $entity->get('usersIds');
if (is_array($userIdList) && in_array($user->id, $userIdList)) {
return true;
}
return false;
}
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($user->id === $entity->get('createdById')) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,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

@@ -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 Notification extends \Espo\Core\AclPortal\Base
{
public function checkIsOwner(EntityUser $user, Entity $entity)
{
if ($user->id === $entity->get('userId')) {
return true;
}
return false;
}
}

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

@@ -0,0 +1,41 @@
<?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\ORM\Entity;
class User extends \Espo\Core\AclPortal\Base
{
public function checkIsOwner(\Espo\Entities\User $user, Entity $entity)
{
return $user->id === $entity->id;
}
}

View File

@@ -0,0 +1,71 @@
<?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 ActionHistoryRecord extends \Espo\Core\Controllers\Record
{
public function actionUpdate($params, $data, $request)
{
throw new Forbidden();
}
public function actionCreate($params, $data, $request)
{
throw new Forbidden();
}
public function actionListLinked($params, $data, $request)
{
throw new Forbidden();
}
public function actionMassUpdate($params, $data, $request)
{
throw new Forbidden();
}
public function actionCreateLink($params, $data, $request)
{
throw new Forbidden();
}
public function actionRemoveLink($params, $data, $request)
{
throw new Forbidden();
}
public function actionMassDelete($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-2015 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;
@@ -63,7 +63,7 @@ class Admin extends \Espo\Core\Controllers\Base
{
$scheduledJob = $this->getContainer()->get('scheduledJob');
return $scheduledJob->getAllNamesOnly();
return $scheduledJob->getAvailableList();
}
public function postActionUploadUpgradePackage($params, $data)
@@ -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-2015 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,31 +35,16 @@ class App extends \Espo\Core\Controllers\Base
{
public function actionUser()
{
$preferences = $this->getPreferences()->toArray();
unset($preferences['smtpPassword']);
$user = $this->getUser();
if (!$user->has('teamsIds')) {
$user->loadLinkMultipleField('teams');
}
return array(
'user' => $user->toArray(),
'acl' => $this->getAcl()->getMap(),
'preferences' => $preferences,
'token' => $this->getUser()->get('token')
);
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-2015 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,23 +35,4 @@ use \Espo\Core\Exceptions\BadRequest;
class Attachment extends \Espo\Core\Controllers\Record
{
public function actionUpload($params, $data, $request)
{
if (!$request->isPost()) {
throw new BadRequest();
}
list($prefix, $contents) = explode(',', $data);
$contents = base64_decode($contents);
$attachment = $this->getEntityManager()->getEntity('Attachment');
$this->getEntityManager()->saveEntity($attachment);
$this->getContainer()->get('fileManager')->putContents('data/upload/' . $attachment->id, $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-2015 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
@@ -40,34 +40,58 @@ class AuthToken extends \Espo\Core\Controllers\Record
}
}
public function actionUpdate($params, $data)
public function actionUpdate($params, $data, $request)
{
$dataAr = get_object_vars($data);
if (
is_object($data)
&&
isset($data->isActive)
&&
$data->isActive === false
&&
count(array_keys($dataAr)) === 1
) {
return parent::actionUpdate($params, $data, $request);
}
throw new Forbidden();
}
public function actionMassUpdate($params, $data, $request)
{
if (empty($data->attributes)) {
throw new BadRequest();
}
$attributes = $data->attributes;
if (
is_object($attributes)
&&
isset($attributes->isActive)
&&
$attributes->isActive === false
&&
count(array_keys(get_object_vars($attributes))) === 1
) {
return parent::actionMassUpdate($params, $data, $request);
}
throw new Forbidden();
}
public function actionCreate($params, $data, $request)
{
throw new Forbidden();
}
public function actionCreate($params, $data)
public function actionCreateLink($params, $data, $request)
{
throw new Forbidden();
}
public function actionListLinked($params, $data)
{
throw new Forbidden();
}
public function actionMassUpdate($params, $data)
{
throw new Forbidden();
}
public function actionCreateLink($params, $data)
{
throw new Forbidden();
}
public function actionRemoveLink($params, $data)
public function actionRemoveLink($params, $data, $request)
{
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-2015 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
@@ -32,12 +32,16 @@ namespace Espo\Controllers;
use \Espo\Core\Exceptions\BadRequest;
use \Espo\Core\Exceptions\Forbidden;
use \Espo\Core\Exceptions\Error;
use \Espo\Core\Exceptions\NotFound;
class Email extends \Espo\Core\Controllers\Record
{
public function actionGetCopiedAttachments($params, $data, $request)
public function postActionGetCopiedAttachments($params, $data, $request)
{
$id = $request->get('id');
if (empty($data->id)) {
throw new BadRequest();
}
$id = $data->id;
return $this->getRecordService()->getCopiedAttachments($id);
}
@@ -48,54 +52,93 @@ class Email extends \Espo\Core\Controllers\Record
throw new BadRequest();
}
if (is_null($data['password'])) {
if ($data['type'] == 'preferences') {
if (!$this->getUser()->isAdmin() && $data['id'] != $this->getUser()->id) {
if (!$this->getAcl()->checkScope('Email')) {
throw new Forbidden();
}
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 Error();
throw new NotFound();
}
$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') {
if (!$this->getAcl()->checkScope('EmailAccount')) {
throw new Forbidden();
}
if (!empty($data->id)) {
$emailAccount = $this->getEntityManager()->getEntity('EmailAccount', $data->id);
if (!$emailAccount) {
throw new NotFound();
}
if (!$this->getUser()->isAdmin()) {
if ($emailAccount->get('assigniedUserId') !== $this->getUser()->id) {
throw new Forbidden();
}
}
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();
}
$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)
@@ -105,58 +148,90 @@ 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)
{
return $this->getRecordService()->getFoldersNotReadCounts();
}
protected function fetchListParamsFromRequest(&$params, $request, $data)
{
parent::fetchListParamsFromRequest($params, $request, $data);
$folderId = $request->get('folderId');
if ($folderId) {
$params['folderId'] = $request->get('folderId');
}
}
public function postActionMoveToFolder($params, $data)
{
if (!empty($data->ids)) {
$idList = $data->ids;
} else {
if (!empty($data->id)) {
$idList = [$data->id];
} else {
throw new BadRequest();
}
}
if (empty($data->folderId)) {
throw new BadRequest();
}
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-2015 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-2015 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
@@ -25,14 +25,22 @@
*
* 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 EmailAddress extends \Espo\Core\Controllers\Record
{
public function actionSearchInAddressBook($params, $data, $request)
{
if (!$this->getAcl()->checkScope('Email')) {
throw new Forbidden();
}
if (!$this->getAcl()->checkScope('Email', 'create')) {
throw new Forbidden();
}
$q = $request->get('q');
$limit = intval($request->get('limit'));
if (empty($limit) || $limit > 30) {

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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,62 @@
<?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\BadRequest;
class EmailFolder extends \Espo\Core\Controllers\Record
{
public function postActionMoveUp($params, $data, $request)
{
if (empty($data->id)) {
throw new BadRequest();
}
$this->getRecordService()->moveUp($data->id);
return true;
}
public function postActionMoveDown($params, $data, $request)
{
if (empty($data->id)) {
throw new BadRequest();
}
$this->getRecordService()->moveDown($data->id);
return true;
}
public function getActionListAll()
{
return $this->getRecordService()->listAll();
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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
@@ -25,7 +25,7 @@
*
* 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;
@@ -34,17 +34,19 @@ use \Espo\Core\Exceptions\Error;
class EmailTemplate extends \Espo\Core\Controllers\Record
{
public function actionParse($params, $data, $request)
{
{
$id = $request->get('id');
$emailAddress = $request->get('emailAddress');
if (empty($id)) {
throw new Error();
}
return $this->getRecordService()->parse($id, array(
'emailAddress' => $request->get('emailAddress'),
'parentType' => $request->get('parentType'),
'parentId' => $request->get('parentId'),
'relatedType' => $request->get('relatedType'),
'relatedId' => $request->get('relatedId')
), true);
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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();
}
@@ -69,20 +71,40 @@ class EntityManager extends \Espo\Core\Controllers\Base
if (!empty($data['stream'])) {
$params['stream'] = $data['stream'];
}
if (!empty($data['disabled'])) {
$params['disabled'] = $data['disabled'];
}
if (!empty($data['sortBy'])) {
$params['sortBy'] = $data['sortBy'];
}
if (!empty($data['sortDirection'])) {
$params['asc'] = $data['sortDirection'] === 'asc';
}
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);
if ($result) {
$tabList = $this->getConfig()->get('tabList', []);
$tabList[] = $name;
$this->getConfig()->set('tabList', $tabList);
$this->getConfig()->save();
if (!in_array($name, $tabList)) {
$tabList[] = $name;
$this->getConfig()->set('tabList', $tabList);
$this->getConfig()->save();
}
$this->getContainer()->get('dataManager')->rebuild();
} else {
@@ -94,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();
}
@@ -120,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();
}
@@ -151,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();
}
@@ -189,6 +217,13 @@ class EntityManager extends \Espo\Core\Controllers\Base
$params['linkMultipleFieldForeign'] = $data['linkMultipleFieldForeign'];
}
if (array_key_exists('audited', $data)) {
$params['audited'] = $data['audited'];
}
if (array_key_exists('auditedForeign', $data)) {
$params['auditedForeign'] = $data['auditedForeign'];
}
$result = $this->getContainer()->get('entityManagerUtil')->createLink($params);
if ($result) {
@@ -202,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();
}
@@ -219,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) {
@@ -233,6 +272,13 @@ class EntityManager extends \Espo\Core\Controllers\Base
$params['linkMultipleFieldForeign'] = $data['linkMultipleFieldForeign'];
}
if (array_key_exists('audited', $data)) {
$params['audited'] = $data['audited'];
}
if (array_key_exists('auditedForeign', $data)) {
$params['auditedForeign'] = $data['auditedForeign'];
}
$result = $this->getContainer()->get('entityManagerUtil')->updateLink($params);
if ($result) {
@@ -246,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();
}
@@ -269,5 +317,34 @@ class EntityManager extends \Espo\Core\Controllers\Base
return true;
}
}
public function postActionFormula($params, $data, $request)
{
if (empty($data->scope)) {
throw new BadRequest();
}
if (!property_exists($data, 'data')) {
throw new BadRequest();
}
$formulaData = get_object_vars($data->data);
$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-2015 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,21 +90,21 @@ 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;
}
public function actionCreate($params, $data)
public function actionCreate($params, $data, $request)
{
throw new Forbidden();
}
public function actionUpdate($params, $data)
public function actionUpdate($params, $data, $request)
{
throw new Forbidden();
}
public function actionPatch($params, $data)
public function actionPatch($params, $data, $request)
{
throw new Forbidden();
}
@@ -139,14 +139,13 @@ class Extension extends \Espo\Core\Controllers\Record
throw new Forbidden();
}
public function actionCreateLink($params, $data)
public function actionCreateLink($params, $data, $request)
{
throw new Forbidden();
}
public function actionRemoveLink($params, $data)
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-2015 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
@@ -37,6 +37,13 @@ class ExternalAccount extends \Espo\Core\Controllers\Record
{
public static $defaultAction = 'list';
protected function checkControllerAccess()
{
if (!$this->getAcl()->checkScope('ExternalAccount')) {
throw new Forbidden();
}
}
public function actionList($params, $data, $request)
{
$integrations = $this->getEntityManager()->getRepository('Integration')->find();
@@ -58,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();
}
@@ -102,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']);
@@ -119,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);
@@ -132,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-2015 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
@@ -29,9 +29,10 @@
namespace Espo\Controllers;
use \Espo\Core\Exceptions\Error,
\Espo\Core\Exceptions\Forbidden,
\Espo\Core\Exceptions\NotFound;
use Espo\Core\Exceptions\Error;
use Espo\Core\Exceptions\Forbidden;
use Espo\Core\Exceptions\NotFound;
use Espo\Core\Exceptions\BadRequest;
class FieldManager extends \Espo\Core\Controllers\Base
{
@@ -44,38 +45,51 @@ class FieldManager extends \Espo\Core\Controllers\Base
public function actionRead($params, $data)
{
$data = $this->getContainer()->get('fieldManager')->read($params['name'], $params['scope']);
if (empty($params['scope']) || empty($params['name'])) {
throw new BadRequest();
}
$data = $this->getContainer()->get('fieldManager')->read($params['scope'], $params['name']);
if (!isset($data)) {
throw new NotFound();
throw new BadRequest();
}
return $data;
}
public function actionCreate($params, $data)
public function postActionCreate($params, $data)
{
if (empty($data['name'])) {
throw new Error("Field 'name' cannnot be empty");
if (empty($params['scope']) || empty($data->name)) {
throw new BadRequest();
}
$fieldManager = $this->getContainer()->get('fieldManager');
$fieldManager->create($data['name'], $data, $params['scope']);
$fieldManager->create($params['scope'], $data->name, get_object_vars($data));
try {
$this->getContainer()->get('dataManager')->rebuild($params['scope']);
} catch (Error $e) {
$fieldManager->delete($data['name'], $params['scope']);
$fieldManager->delete($params['scope'], $data->name);
throw new Error($e->getMessage());
}
return $fieldManager->read($data['name'], $params['scope']);
return $fieldManager->read($params['scope'], $data->name);
}
public function actionUpdate($params, $data)
public function patchActionUpdate($params, $data)
{
return $this->putActionUpdate($params, $data);
}
public function putActionUpdate($params, $data)
{
if (empty($params['scope']) || empty($params['name'])) {
throw new BadRequest();
}
$fieldManager = $this->getContainer()->get('fieldManager');
$fieldManager->update($params['name'], $data, $params['scope']);
$fieldManager->update($params['scope'], $params['name'], get_object_vars($data));
if ($fieldManager->isChanged()) {
$this->getContainer()->get('dataManager')->rebuild($params['scope']);
@@ -83,17 +97,32 @@ class FieldManager extends \Espo\Core\Controllers\Base
$this->getContainer()->get('dataManager')->clearCache();
}
return $fieldManager->read($params['name'], $params['scope']);
return $fieldManager->read($params['scope'], $params['name']);
}
public function actionDelete($params, $data)
public function deleteActionDelete($params, $data)
{
$res = $this->getContainer()->get('fieldManager')->delete($params['name'], $params['scope']);
if (empty($params['scope']) || empty($params['name'])) {
throw new BadRequest();
}
$result = $this->getContainer()->get('fieldManager')->delete($params['scope'], $params['name']);
$this->getContainer()->get('dataManager')->rebuildMetadata();
return $res;
return $result;
}
}
public function postActionResetToDefault($params, $data)
{
if (empty($data->scope) || empty($data->name)) {
throw new BadRequest();
}
$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-2015 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-2015 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,9 +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-2015 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
@@ -43,12 +43,12 @@ class Import extends \Espo\Core\Controllers\Record
}
}
public function actionPatch($params, $data)
public function actionPatch($params, $data, $request)
{
throw new BadRequest();
}
public function actionUpdate($params, $data)
public function actionUpdate($params, $data, $request)
{
throw new BadRequest();
}
@@ -58,19 +58,19 @@ class Import extends \Espo\Core\Controllers\Record
throw new BadRequest();
}
public function actionCreateLink($params, $data)
public function actionCreateLink($params, $data, $request)
{
throw new BadRequest();
}
public function actionRemoveLink($params, $data)
public function actionRemoveLink($params, $data, $request)
{
throw new BadRequest();
}
protected function getFileManager()
protected function getFileStorageManager()
{
return $this->getContainer()->get('fileManager');
return $this->getContainer()->get('fileStorageManager');
}
protected function getEntityManager()
@@ -92,7 +92,7 @@ class Import extends \Espo\Core\Controllers\Record
$attachment->set('name', 'import-file.csv');
$this->getEntityManager()->saveEntity($attachment);
$this->getFileManager()->putContents('data/upload/' . $attachment->id, $contents);
$this->getFileStorageManager()->putContents($attachment, $contents);
return array(
'attachmentId' => $attachment->id
@@ -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,39 +127,90 @@ class Import extends \Espo\Core\Controllers\Record
throw new BadRequest();
}
$importParams = array(
'headerRow' => $data['headerRow'],
'fieldDelimiter' => $data['fieldDelimiter'],
'textQualifier' => $data['textQualifier'],
'dateFormat' => $data['dateFormat'],
'timeFormat' => $data['timeFormat'],
'personNameFormat' => $data['personNameFormat'],
'decimalMark' => $data['decimalMark'],
'currency' => $data['currency'],
'defaultValues' => $data['defaultValues'],
'action' => $data['action'],
);
if (array_key_exists('updateBy', $data)) {
$importParams['updateBy'] = $data['updateBy'];
if (!isset($data->fieldDelimiter)) {
throw new BadRequest();
}
$attachmentId = $data['attachmentId'];
if (!isset($data->textQualifier)) {
throw new BadRequest();
}
if (!$this->getAcl()->check($data['entityType'], 'edit')) {
if (!isset($data->dateFormat)) {
throw new BadRequest();
}
if (!isset($data->timeFormat)) {
throw new BadRequest();
}
if (!isset($data->personNameFormat)) {
throw new BadRequest();
}
if (!isset($data->decimalMark)) {
throw new BadRequest();
}
if (!isset($data->defaultValues)) {
throw new BadRequest();
}
if (!isset($data->action)) {
throw new BadRequest();
}
if (!isset($data->attachmentId)) {
throw new BadRequest();
}
if (!isset($data->entityType)) {
throw new BadRequest();
}
if (!isset($data->fields)) {
throw new BadRequest();
}
$timezone = 'UTC';
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,
'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)
);
if (property_exists($data, 'updateBy')) {
$importParams['updateBy'] = $data->updateBy;
}
$attachmentId = $data->attachmentId;
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-2015 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-2015 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
@@ -67,6 +67,18 @@ class Integration extends \Espo\Core\Controllers\Record
$entity->set($data);
$this->getEntityManager()->saveEntity($entity);
$integrationsConfigData = $this->getConfig()->get('integrations');
if (!$integrationsConfigData || !($integrationsConfigData instanceof \StdClass)) {
$integrationsConfigData = (object)[];
}
$integrationName = $params['id'];
$integrationsConfigData->$integrationName = $entity->get('enabled');
$this->getConfig()->set('integrations', $integrationsConfigData);
$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-2015 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
@@ -41,17 +41,17 @@ class Job extends \Espo\Core\Controllers\Record
}
}
public function actionCreate($params, $data)
public function actionCreate($params, $data, $request)
{
throw new Forbidden();
}
public function actionUpdate($params, $data)
public function actionUpdate($params, $data, $request)
{
throw new Forbidden();
}
public function actionPatch($params, $data)
public function actionPatch($params, $data, $request)
{
throw new Forbidden();
}
@@ -66,14 +66,13 @@ class Job extends \Espo\Core\Controllers\Record
throw new Forbidden();
}
public function actionCreateLink($params, $data)
public function actionCreateLink($params, $data, $request)
{
throw new Forbidden();
}
public function actionRemoveLink($params, $data)
public function actionRemoveLink($params, $data, $request)
{
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

@@ -0,0 +1,46 @@
<?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 LastViewed extends \Espo\Core\Controllers\Base
{
public function getActionIndex($params, $data, $request)
{
$result = $this->getServiceFactory()->create('LastViewed')->get();
return [
'total' => $result['total'],
'list' => isset($result['collection']) ? $result['collection']->toArray() : $result['list']
];
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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-2015 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
@@ -25,15 +25,27 @@
*
* 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 Metadata extends \Espo\Core\Controllers\Base
{
public function actionRead($params, $data)
{
return $this->getMetadata()->getAll(true);
return $this->getMetadata()->getAllForFrontend();
}
public function getActionGet($params, $data, $request)
{
if (!$this->getUser()->isAdmin()) {
throw new \Forbidden();
}
$key = $request->get('key');
return $this->getMetadata()->get($key, false);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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
@@ -25,7 +25,7 @@
*
* 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;

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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,23 +31,26 @@ namespace Espo\Controllers;
use \Espo\Core\Exceptions\Error;
class Notification extends \Espo\Core\Controllers\Base
class Notification extends \Espo\Core\Controllers\Record
{
public static $defaultAction = 'list';
public function actionList($params, $data, $request)
{
$scope = $params['scope'];
$id = $params['id'];
$userId = $this->getUser()->id;
$offset = intval($request->get('offset'));
$maxSize = intval($request->get('maxSize'));
$after = $request->get('after');
if (empty($maxSize)) {
$maxSize = self::MAX_SIZE_LIMIT;
}
$params = array(
'offset' => $offset,
'maxSize' => $maxSize,
'after' => $after
);
$result = $this->getService('Notification')->getList($userId, $params);
@@ -69,5 +72,30 @@ class Notification extends \Espo\Core\Controllers\Base
$userId = $this->getUser()->id;
return $this->getService('Notification')->markAllRead($userId);
}
public function actionExport($params, $data, $request)
{
throw new Error();
}
public function actionMassUpdate($params, $data, $request)
{
throw new Error();
}
public function actionCreateLink($params, $data, $request)
{
throw new Error();
}
public function actionRemoveLink($params, $data, $request)
{
throw new Error();
}
public function actionMerge($params, $data, $request)
{
throw new Error();
}
}

View File

@@ -0,0 +1,43 @@
<?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 Portal extends \Espo\Core\Controllers\Record
{
protected function checkControllerAccess()
{
$portalPermission = $this->getAcl()->get('portalPermission');
if (!$portalPermission || $portalPermission === 'no') {
throw new Forbidden();
}
}
}

View File

@@ -0,0 +1,34 @@
<?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;
class PortalRole 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-2015 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
@@ -88,8 +88,16 @@ class Preferences extends \Espo\Core\Controllers\Base
throw new BadRequest();
}
if (array_key_exists('smtpPassword', $data)) {
$data['smtpPassword'] = $this->getCrypt()->encrypt($data['smtpPassword']);
if ($this->getAcl()->getLevel('Preferences', 'read') === 'no') {
throw new Forbidden();
}
foreach ($this->getAcl()->getScopeForbiddenAttributeList('Preferences', 'edit') as $attribute) {
unset($data->$attribute);
}
if (property_exists($data, 'smtpPassword')) {
$data->smtpPassword = $this->getCrypt()->encrypt($data->smtpPassword);
}
$user = $this->getEntityManager()->getEntity('User', $userId);
@@ -105,7 +113,7 @@ class Preferences extends \Espo\Core\Controllers\Base
$entity->clear('smtpPassword');
return $entity->toArray();
return $entity->getValueMap();
}
throw new Error();
}
@@ -124,10 +132,15 @@ class Preferences extends \Espo\Core\Controllers\Base
$entity->set('smtpEmailAddress', $user->get('emailAddress'));
$entity->set('name', $user->get('name'));
$entity->set('isPortalUser', $user->get('isPortalUser'));
$entity->clear('smtpPassword');
return $entity->toArray();
foreach ($this->getAcl()->getScopeForbiddenAttributeList('Preferences', 'read') as $attribute) {
$entity->clear($attribute);
}
return $entity->getValueMap();
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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-2015 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-2015 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-2015 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
@@ -28,6 +28,7 @@
************************************************************************/
namespace Espo\Controllers;
use \Espo\Core\Exceptions\Error;
use \Espo\Core\Exceptions\Forbidden;
use \Espo\Core\Exceptions\BadRequest;
@@ -36,15 +37,22 @@ class Settings extends \Espo\Core\Controllers\Base
{
protected function getConfigData()
{
$data = $this->getConfig()->getData($this->getUser()->isAdmin());
if ($this->getUser()->id == 'system') {
$data = $this->getConfig()->getData();
} else {
$data = $this->getConfig()->getData($this->getUser()->isAdmin());
}
$fieldDefs = $this->getMetadata()->get('entityDefs.Settings.fields');
foreach ($fieldDefs as $field => $d) {
if ($d['type'] == 'password') {
if ($d['type'] === 'password') {
unset($data[$field]);
}
}
$data['jsLibs'] = $this->getMetadata()->get('app.jsLibs');
return $data;
}
@@ -68,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();
}
@@ -78,12 +90,31 @@ 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();
}
public function postActionTestLdapConnection($params, $data)
{
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
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);
$ldapClient = new \Espo\Core\Utils\Authentication\LDAP\Client($options);
$ldapClient->bind(); //an exception if no connection
return true;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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-2015 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-2015 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-2015 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
@@ -55,28 +55,22 @@ class User extends \Espo\Core\Controllers\Record
return $this->getAclManager()->getMap($user);
}
public function actionChangeOwnPassword($params, $data, $request)
public function postActionChangeOwnPassword($params, $data, $request)
{
if (!$request->isPost()) {
if (!property_exists($data, 'password') || !property_exists($data, 'currentPassword')) {
throw new BadRequest();
}
if (!array_key_exists('password', $data) || !array_key_exists('currentPassword', $data)) {
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 actionChangePasswordByRequest($params, $data, $request)
public function postActionChangePasswordByRequest($params, $data, $request)
{
if (!$request->isPost()) {
throw new BadRequest();
}
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) {
@@ -89,23 +83,27 @@ class User extends \Espo\Core\Controllers\Record
$this->getEntityManager()->removeEntity($p);
return $this->getService('User')->changePassword($userId, $data['password']);
if ($this->getService('User')->changePassword($userId, $data->password)) {
return array(
'url' => $p->get('url')
);
}
}
public function actionPasswordChangeRequest($params, $data, $request)
public function postActionPasswordChangeRequest($params, $data, $request)
{
if (!$request->isPost()) {
throw new Forbidden();
}
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;
}
return $this->getService('User')->passwordChangeRequest($userName, $emailAddress);
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-2015 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
@@ -69,6 +69,11 @@ class Acl
return $this->getAclManager()->get($this->getUser(), $permission);
}
public function checkReadNo($scope)
{
return $this->getAclManager()->checkReadNo($this->getUser(), $scope);
}
public function checkReadOnlyTeam($scope)
{
return $this->getAclManager()->checkReadOnlyTeam($this->getUser(), $scope);
@@ -79,19 +84,54 @@ class Acl
return $this->getAclManager()->checkReadOnlyOwn($this->getUser(), $scope);
}
public function check($subject, $action = null, $isOwner = null, $inTeam = null)
public function check($subject, $action = null)
{
return $this->getAclManager()->check($this->getUser(), $subject, $action, $isOwner, $inTeam) ;
return $this->getAclManager()->check($this->getUser(), $subject, $action);
}
public function checkScope($scope, $action = null, $isOwner = null, $inTeam = null, $entity = null)
public function checkScope($scope, $action = null)
{
return $this->getAclManager()->checkScope($this->getUser(), $scope, $action, $isOwner, $inTeam, $entity) ;
return $this->getAclManager()->checkScope($this->getUser(), $scope, $action);
}
public function checkPermission($permission, User $entity)
public function checkEntity(Entity $entity, $action = 'read')
{
return $this->getAclManager()->checkPermission($this->getUser(), $permission, $entity);
return $this->getAclManager()->checkEntity($this->getUser(), $entity, $action);
}
public function checkUser($permission, User $entity)
{
return $this->getAclManager()->checkUser($this->getUser(), $permission, $entity);
}
public function checkIsOwner(Entity $entity)
{
return $this->getAclManager()->checkIsOwner($this->getUser(), $entity);
}
public function checkInTeam(Entity $entity)
{
return $this->getAclManager()->checkInTeam($this->getUser(), $entity);
}
public function getScopeForbiddenAttributeList($scope, $action = 'read', $thresholdLevel = 'no')
{
return $this->getAclManager()->getScopeForbiddenAttributeList($this->getUser(), $scope, $action, $thresholdLevel);
}
public function getScopeForbiddenFieldList($scope, $action = 'read', $thresholdLevel = 'no')
{
return $this->getAclManager()->getScopeForbiddenFieldList($this->getUser(), $scope, $action, $thresholdLevel);
}
public function checkUserPermission($target, $permissionType = 'userPermission')
{
return $this->getAclManager()->checkUserPermission($this->getUser(), $target, $permissionType);
}
public function checkAssignmentPermission($target)
{
return $this->getAclManager()->checkAssignmentPermission($this->getUser(), $target);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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,8 @@ class Base implements Injectable
'aclManager'
);
protected $scope;
protected $injections = array();
public function inject($name, $object)
@@ -49,9 +51,10 @@ class Base implements Injectable
$this->injections[$name] = $object;
}
public function __construct()
public function __construct($scope)
{
$this->init();
$this->scope = $scope;
}
protected function init()
@@ -63,6 +66,13 @@ class Base implements Injectable
return $this->injections[$name];
}
protected function addDependencyList(array $list)
{
foreach ($list as $item) {
$this->addDependency($item);
}
}
protected function addDependency($name)
{
$this->dependencies[] = $name;
@@ -90,27 +100,42 @@ class Base implements Injectable
public function checkReadOnlyTeam(User $user, $data)
{
if (empty($data) || !is_array($data) || !isset($data['read'])) {
if (empty($data) || !is_object($data) || !isset($data->read)) {
return false;
}
return $data['read'] === 'team';
return $data->read === 'team';
}
public function checkReadNo(User $user, $data)
{
if (empty($data) || !is_object($data) || !isset($data->read)) {
return false;
}
return $data->read === 'no';
}
public function checkReadOnlyOwn(User $user, $data)
{
if (empty($data) || !is_array($data) || !isset($data['read'])) {
if (empty($data) || !is_object($data) || !isset($data->read)) {
return false;
}
return $data['read'] === 'own';
return $data->read === 'own';
}
public function checkEntity(User $user, Entity $entity, $data, $action)
{
return $this->checkScope($user, $data, $entity->getEntityType(), $action, null, null, $entity);
if ($user->isAdmin()) {
return true;
}
return $this->checkScope($user, $data, $action, $entity);
}
public function checkScope(User $user, $data, $scope, $action = null, $isOwner = null, $inTeam = null, Entity $entity = null)
public function checkScope(User $user, $data, $action = null, Entity $entity = null, $entityAccessData = array())
{
if ($user->isAdmin()) {
return true;
}
if (is_null($data)) {
return false;
}
@@ -120,83 +145,103 @@ class Base implements Injectable
if ($data === true) {
return true;
}
if (is_string($data)) {
return true;
}
if (!is_null($action)) {
if (array_key_exists($action, $data)) {
$value = $data[$action];
$isOwner = null;
if (isset($entityAccessData['isOwner'])) {
$isOwner = $entityAccessData['isOwner'];
}
$inTeam = null;
if (isset($entityAccessData['inTeam'])) {
$inTeam = $entityAccessData['inTeam'];
}
if ($value === 'all' || $value === true) {
return true;
}
if (is_null($action)) {
return true;
}
if (!$value || $value === 'no') {
return false;
}
if (!isset($data->$action)) {
return false;
}
if (is_null($isOwner)) {
if ($entity) {
$isOwner = $this->checkIsOwner($user, $entity);
} else {
return true;
}
}
$value = $data->$action;
if ($isOwner) {
if ($value === 'own' || $value === 'team') {
return true;
}
}
if (is_null($inTeam) && $entity) {
$inTeam = $this->checkInTeam($user, $entity);
}
if ($value === 'all' || $value === 'yes' || $value === true) {
return true;
}
if ($inTeam) {
if ($value === 'team') {
return true;
}
}
return false;
if (!$value || $value === 'no') {
return false;
}
if (is_null($isOwner)) {
if ($entity) {
$isOwner = $this->checkIsOwner($user, $entity);
} else {
return true;
}
}
return true;
if ($isOwner) {
if ($value === 'own' || $value === 'team') {
return true;
}
}
if (is_null($inTeam) && $entity) {
$inTeam = $this->checkInTeam($user, $entity);
}
if ($inTeam) {
if ($value === 'team') {
return true;
}
}
return false;
}
public function checkIsOwner(User $user, Entity $entity)
{
if ($entity->has('assignedUserId')) {
if ($user->id === $entity->get('assignedUserId')) {
return true;
if ($entity->hasAttribute('assignedUserId')) {
if ($entity->has('assignedUserId')) {
if ($user->id === $entity->get('assignedUserId')) {
return true;
}
}
} else {
} else if ($entity->hasAttribute('createdById')) {
if ($entity->has('createdById')) {
if ($user->id === $entity->get('createdById')) {
return true;
}
}
}
if ($entity->hasLinkMultipleField('assignedUsers')) {
if ($entity->hasLinkMultipleId('assignedUsers', $user->id)) {
return true;
}
}
return false;
}
public function checkInTeam(User $user, Entity $entity)
{
$userTeamIds = $user->get('teamsIds');
$userTeamIdList = $user->getLinkMultipleIdList('teams');
if (!$entity->hasRelation('teams') || !$entity->hasField('teamsIds')) {
if (!$entity->hasRelation('teams') || !$entity->hasAttribute('teamsIds')) {
return false;
}
if (!$entity->has('teamsIds')) {
$entity->loadLinkMultipleField('teams');
}
$entityTeamIdList = $entity->getLinkMultipleIdList('teams');
$teamIds = $entity->get('teamsIds');
if (empty($teamIds)) {
if (empty($entityTeamIdList)) {
return false;
}
foreach ($userTeamIds as $id) {
if (in_array($id, $teamIds)) {
foreach ($userTeamIdList as $id) {
if (in_array($id, $entityTeamIdList)) {
return true;
}
}
@@ -205,27 +250,36 @@ class Base implements Injectable
public function checkEntityDelete(User $user, Entity $entity, $data)
{
$result = $this->checkEntity($user, $entity, $data, 'delete');
if (!$result) {
if (is_array($data)) {
if ($data['edit'] != 'no') {
if ($entity->has('createdById') && $entity->get('createdById') == $user->id) {
if (!$entity->has('assignedUserId')) {
if ($user->isAdmin()) {
return true;
}
if ($this->checkEntity($user, $entity, $data, 'delete')) {
return true;
}
if (is_object($data)) {
if ($data->edit !== 'no' || $data->create !== 'no') {
if (
$this->getConfig()->get('aclAllowDeleteCreated')
&&
$entity->has('createdById') && $entity->get('createdById') == $user->id
) {
if (!$entity->has('assignedUserId')) {
return true;
} else {
if (!$entity->get('assignedUserId')) {
return true;
}
if ($entity->get('assignedUserId') == $entity->get('createdById')) {
return true;
} else {
if (!$entity->get('assignedUserId')) {
return true;
}
if ($entity->get('assignedUserId') == $entity->get('createdById')) {
return true;
}
}
}
}
}
}
return $result;
return false;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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
@@ -32,54 +32,116 @@ namespace Espo\Core\Acl;
use \Espo\Core\Exceptions\Error;
use \Espo\ORM\Entity;
use \Espo\Entities\User;
use \Espo\Core\Utils\Config;
use \Espo\Core\Utils\Metadata;
use \Espo\Core\Utils\FieldManagerUtil;
use \Espo\Core\Utils\File\Manager as FileManager;
class Table
{
private $data = array(
'table' => array()
);
protected $type = 'acl';
private $cacheFile;
protected $defaultAclType = 'recordAllTeamOwnNo';
private $actionList = ['read', 'edit', 'delete'];
private $data = null;
private $levelList = ['all', 'team', 'own', 'no'];
protected $cacheFilePath;
protected $fileManager;
protected $actionList = ['read', 'stream', 'edit', 'delete', 'create'];
protected $metadata;
protected $booleanActionList = ['create'];
public function __construct(\Espo\Entities\User $user, $config = null, $fileManager = null, $metadata = null)
protected $levelList = ['yes', 'all', 'team', 'own', 'no'];
protected $fieldActionList = ['read', 'edit'];
protected $fieldLevelList = ['yes', 'no'];
protected $valuePermissionHighestLevels = array();
protected $valuePermissionList = [];
private $fileManager;
private $metadata;
private $fieldManager;
protected $forbiddenAttributesCache = array();
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) [
'table' => (object) [],
'fieldTable' => (object) [],
'fieldTableQuickAccess' => (object) [],
];
if ($this->isStrictModeForced) {
$this->isStrictMode = true;
} else {
$this->isStrictMode = $config->get('aclStrictMode', false);
}
$this->user = $user;
$this->metadata = $metadata;
if (!$this->user->isFetched()) {
throw new Error();
if ($fieldManager) {
$this->fieldManager = $fieldManager;
}
$this->user->loadLinkMultipleField('teams');
if (!$this->user->isFetched()) {
throw new Error('User must be fetched before ACL check.');
}
if ($fileManager) {
$this->fileManager = $fileManager;
}
$this->valuePermissionList = $this->metadata->get(['app', $this->type, 'valuePermissionList'], []);
$this->valuePermissionHighestLevels = $this->metadata->get(['app', $this->type, 'valuePermissionHighestLevels'], array());
$this->cacheFile = 'data/cache/application/acl/' . $user->id . '.php';
$this->initCacheFilePath();
if ($config && $config->get('useCache') && file_exists($this->cacheFile)) {
$cached = include $this->cacheFile;
if ($config && $config->get('useCache') && file_exists($this->cacheFilePath)) {
$cached = include $this->cacheFilePath;
$this->data = $cached;
$this->initSolid();
} else {
$this->load();
$this->initSolid();
if ($config && $fileManager && $config->get('useCache')) {
$this->buildCache();
}
}
}
protected function initCacheFilePath()
{
$this->cacheFilePath = 'data/cache/application/acl/' . $this->getUser()->id . '.php';
}
protected function getUser()
{
return $this->user;
}
protected function getMetadata()
{
return $this->metadata;
}
protected function getFieldManager()
{
return $this->fieldManager;
}
public function getMap()
{
return $this->data;
@@ -87,8 +149,8 @@ class Table
public function getScopeData($scope)
{
if (array_key_exists($scope, $this->data['table'])) {
$data = $this->data['table'][$scope];
if (isset($this->data->table->$scope)) {
$data = $this->data->table->$scope;
if (is_string($data)) {
$data = $this->getScopeData($data);
return $data;
@@ -104,66 +166,406 @@ class Table
return null;
}
if (array_key_exists($permission, $this->data)) {
return $this->data[$permission];
if (isset($this->data->$permission)) {
return $this->data->$permission;
}
return null;
return 'no';
}
public function getLevel($scope, $action)
{
if (array_key_exists($scope, $this->data['table'])) {
if (array_key_exists($action, $this->data['table'][$scope])) {
return $this->data['table'][$scope][$action];
if (isset($this->data->table->$scope)) {
if (isset($this->data->table->$scope->$action)) {
return $this->data->table->$scope->$action;
}
}
return false;
return 'no';
}
private function load()
{
$aclTables = [];
$assignmentPermissionList = [];
$userPermissionList = [];
$userRoles = $this->user->get('roles');
foreach ($userRoles as $role) {
$aclTables[] = $role->get('data');
$assignmentPermissionList[] = $role->get('assignmentPermission');
$userPermissionList[] = $role->get('userPermission');
$valuePermissionLists = (object)[];
foreach ($this->valuePermissionList as $permission) {
$valuePermissionLists->$permission = [];
}
$teams = $this->user->get('teams');
foreach ($teams as $team) {
$teamRoles = $team->get('roles');
foreach ($teamRoles as $role) {
$aclTables[] = $role->get('data');
$assignmentPermissionList[] = $role->get('assignmentPermission');
$userPermissionList[] = $role->get('userPermission');
$aclTableList = [];
$fieldTableList = [];
if (!$this->getUser()->isAdmin()) {
$roleList = $this->getRoleList();
foreach ($roleList as $role) {
$aclTableList[] = $role->get('data');
$fieldTableList[] = $role->get('fieldData');
foreach ($this->valuePermissionList as $permission) {
$valuePermissionLists->{$permission}[] = $role->get($permission);
}
}
$aclTable = $this->mergeTableList($aclTableList);
$fieldTable = $this->mergeFieldTableList($fieldTableList);
$this->applyDefault($aclTable, $fieldTable);
$this->applyDisabled($aclTable, $fieldTable);
$this->applyMandatory($aclTable, $fieldTable);
$this->applyAdditional($aclTable, $fieldTable, $valuePermissionLists);
$this->applyReadOnlyFields($fieldTable);
} else {
$aclTable = (object) [];
foreach ($this->getScopeList() as $scope) {
if ($this->metadata->get("scopes.{$scope}.{$this->type}") === 'boolean') {
$aclTable->$scope = true;
} else {
if ($this->metadata->get("scopes.{$scope}.entity")) {
$aclTable->$scope = (object) [];
foreach ($this->actionList as $action) {
$aclTable->$scope->$action = 'all';
if (in_array($action, $this->booleanActionList)) {
$aclTable->$scope->$action = 'yes';
}
}
}
}
}
$fieldTable = (object) [];
}
foreach ($aclTable as $scope => $data) {
if (is_string($data)) {
if (isset($aclTable->$data)) {
$aclTable->$scope = $aclTable->$data;
}
}
}
$this->data['table'] = $this->merge($aclTables);
$this->data->table = $aclTable;
$this->data->fieldTable = $fieldTable;
$this->data['assignmentPermission'] = $this->mergeValues($assignmentPermissionList, $this->metadata->get('app.acl.valueDefaults.assignmentPermission', 'all'));
$this->data['userPermission'] = $this->mergeValues($userPermissionList, $this->metadata->get('app.acl.valueDefaults.userPermission', 'no'));
$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, $permissionsDefaultsGroupName, $permission, 'yes']));
if ($this->metadata->get('app.'.$this->type.'.mandatory.' . $permission)) {
$this->data->$permission = $this->metadata->get('app.'.$this->type.'.mandatory.' . $permission);
}
}
} else {
foreach ($this->valuePermissionList as $permission) {
if (isset($this->valuePermissionHighestLevels[$permission])) {
$this->data->$permission = $this->valuePermissionHighestLevels[$permission];
continue;
}
$this->data->$permission = 'all';
}
}
}
private function initSolid()
protected function getRoleList()
{
if (!$this->metadata) {
$roleList = [];
$userRoleList = $this->getUser()->get('roles');
if (!(is_array($userRoleList) || $userRoleList instanceof \Traversable)) {
throw new Error();
}
foreach ($userRoleList as $role) {
$roleList[] = $role;
}
$teamList = $this->getUser()->get('teams');
if (!(is_array($teamList) || $teamList instanceof \Traversable)) {
throw new Error();
}
foreach ($teamList as $team) {
$teamRoleList = $team->get('roles');
foreach ($teamRoleList as $role) {
$roleList[] = $role;
}
}
return $roleList;
}
public function getScopeForbiddenAttributeList($scope, $action = 'read', $thresholdLevel = 'no')
{
$key = $scope . '_'. $action . '_' . $thresholdLevel;
if (isset($this->forbiddenAttributesCache[$key])) {
return $this->forbiddenAttributesCache[$key];
}
$fieldTableQuickAccess = $this->data->fieldTableQuickAccess;
if (!isset($fieldTableQuickAccess->$scope) || !isset($fieldTableQuickAccess->$scope->attributes) || !isset($fieldTableQuickAccess->$scope->attributes->$action)) {
$this->forbiddenAttributesCache[$key] = [];
return [];
}
$levelList = [];
foreach ($this->fieldLevelList as $level) {
if (array_search($level, $this->fieldLevelList) >= array_search($thresholdLevel, $this->fieldLevelList)) {
$levelList[] = $level;
}
}
$attributeList = [];
foreach ($levelList as $level) {
if (!isset($fieldTableQuickAccess->$scope->attributes->$action->$level)) continue;
foreach ($fieldTableQuickAccess->$scope->attributes->$action->$level as $attribute) {
if (in_array($attribute, $attributeList)) continue;
$attributeList[] = $attribute;
}
}
$this->forbiddenAttributesCache[$key] = $attributeList;
return $attributeList;
}
public function getScopeForbiddenFieldList($scope, $action = 'read', $thresholdLevel = 'no')
{
$key = $scope . '_'. $action . '_' . $thresholdLevel;
if (isset($this->forbiddenFieldsCache[$key])) {
return $this->forbiddenFieldsCache[$key];
}
$fieldTableQuickAccess = $this->data->fieldTableQuickAccess;
if (!isset($fieldTableQuickAccess->$scope) || !isset($fieldTableQuickAccess->$scope->fields) || !isset($fieldTableQuickAccess->$scope->fields->$action)) {
$this->forbiddenFieldsCache[$key] = [];
return [];
}
$levelList = [];
foreach ($this->fieldLevelList as $level) {
if (array_search($level, $this->fieldLevelList) >= array_search($thresholdLevel, $this->fieldLevelList)) {
$levelList[] = $level;
}
}
$fieldList = [];
foreach ($levelList as $level) {
if (!isset($fieldTableQuickAccess->$scope->fields->$action->$level)) continue;
foreach ($fieldTableQuickAccess->$scope->fields->$action->$level as $field) {
if (in_array($field, $fieldList)) continue;
$fieldList[] = $field;
}
}
$this->forbiddenFieldsCache[$key] = $fieldList;
return $fieldList;
}
protected function fillFieldTableQuickAccess()
{
$fieldTable = $this->data->fieldTable;
$fieldTableQuickAccess = (object) [];
foreach (get_object_vars($fieldTable) as $scope => $scopeData) {
$fieldTableQuickAccess->$scope = (object) [
'attributes' => (object) [],
'fields' => (object) []
];
foreach ($this->fieldActionList as $action) {
$fieldTableQuickAccess->$scope->attributes->$action = (object) [];
$fieldTableQuickAccess->$scope->fields->$action = (object) [];
foreach ($this->fieldLevelList as $level) {
$fieldTableQuickAccess->$scope->attributes->$action->$level = [];
$fieldTableQuickAccess->$scope->fields->$action->$level = [];
}
}
foreach (get_object_vars($scopeData) as $field => $fieldData) {
$attributeList = $this->getFieldManager()->getAttributeList($scope, $field);
foreach ($this->fieldActionList as $action) {
if (!isset($fieldData->$action)) continue;
foreach ($this->fieldLevelList as $level) {
if ($fieldData->$action === $level) {
$fieldTableQuickAccess->$scope->fields->$action->{$level}[] = $field;
foreach ($attributeList as $attribute) {
$fieldTableQuickAccess->$scope->attributes->$action->{$level}[] = $attribute;
}
}
}
}
}
}
$this->data->fieldTableQuickAccess = $fieldTableQuickAccess;
}
protected function applyDefault(&$table, &$fieldTable)
{
if ($this->getUser()->isAdmin()) {
return;
}
$data = $this->metadata->get('app.acl.solid', array());
$defaultsGroupName = 'default';
if ($this->isStrictMode) {
$defaultsGroupName = 'strictDefault';
}
foreach ($data as $entityType => $item) {
$this->data['table'][$entityType] = $item;
$data = $this->metadata->get(['app', $this->type, $defaultsGroupName, 'scopeLevel'], []);
foreach ($data as $scope => $item) {
if (isset($table->$scope)) continue;
$value = $item;
if (is_array($item)) {
$value = (object) $item;
}
$table->$scope = $value;
}
$defaultFieldData = $this->metadata->get(['app', $this->type, $defaultsGroupName, 'fieldLevel'], []);
foreach ($this->getScopeList() as $scope) {
if (isset($table->$scope) && $table->$scope === false) continue;
if (!$this->getMetadata()->get('scopes.' . $scope . '.entity')) continue;
$fieldList = array_keys($this->getMetadata()->get("entityDefs.{$scope}.fields", []));
$defaultScopeFieldData = $this->metadata->get('app.'.$this->type.'.'.$defaultsGroupName.'.scopeFieldLevel.' . $scope, []);
foreach (array_merge($defaultFieldData, $defaultScopeFieldData) as $field => $f) {
if (!in_array($field, $fieldList)) continue;
if (!isset($fieldTable->$scope)) {
$fieldTable->$scope = (object) [];
}
if (isset($fieldTable->$scope->$field)) continue;
$fieldTable->$scope->$field = (object) [];
foreach ($this->fieldActionList as $action) {
$level = 'no';
if ($f === true) {
$level = 'yes';
} else {
if (is_array($f) && isset($f[$action])) {
$level = $f[$action];
}
}
$fieldTable->$scope->$field->$action = $level;
}
}
}
foreach ($this->getScopeWithAclList() as $scope) {
if (!isset($table->$scope)) {
$aclType = $this->metadata->get('scopes.' . $scope . '.' . $this->type);
if ($aclType === true) {
$aclType = $this->defaultAclType;
}
if (!empty($aclType)) {
$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;
}
$table->$scope = $defaultValue;
if (is_object($table->$scope)) {
$actionList = $this->getMetadata()->get(['scopes', $scope, $this->type . 'ActionList']);
if ($actionList) {
foreach (get_object_vars($table->$scope) as $action => $level) {
if (!in_array($action, $actionList)) {
unset($table->$scope->$action);
}
}
}
}
}
}
}
}
private function mergeValues(array $list, $defaultValue)
protected function applyMandatory(&$table, &$fieldTable)
{
if ($this->getUser()->isAdmin()) {
return;
}
$data = $this->metadata->get('app.'.$this->type.'.mandatory.scopeLevel', array());
foreach ($data as $scope => $item) {
$value = $item;
if (is_array($item)) {
$value = (object) $item;
}
$table->$scope = $value;
}
$mandatoryFieldData = $this->metadata->get('app.'.$this->type.'.mandatory.fieldLevel', array());
foreach ($this->getScopeList() as $scope) {
if (isset($table->$scope) && $table->$scope === false) continue;
if (!$this->getMetadata()->get('scopes.' . $scope . '.entity')) continue;
$fieldList = array_keys($this->getMetadata()->get("entityDefs.{$scope}.fields", []));
$mandatoryScopeFieldData = $this->metadata->get('app.'.$this->type.'.mandatory.scopeFieldLevel.' . $scope, array());
foreach (array_merge($mandatoryFieldData, $mandatoryScopeFieldData) as $field => $f) {
if (!in_array($field, $fieldList)) continue;
if (!isset($fieldTable->$scope)) {
$fieldTable->$scope = (object) [];
}
$fieldTable->$scope->$field = (object) [];
foreach ($this->fieldActionList as $action) {
$level = 'no';
if ($f === true) {
$level = 'yes';
} else {
if (is_array($f) && isset($f[$action])) {
$level = $f[$action];
}
}
$fieldTable->$scope->$field->$action = $level;
}
}
}
}
protected function applyDisabled(&$table, &$fieldTable)
{
if ($this->getUser()->isAdmin()) {
return;
}
foreach ($this->getScopeList() as $scope) {
if ($this->getMetadata()->get('scopes.' . $scope . '.disabled')) {
$table->$scope = false;
unset($fieldTable->$scope);
}
}
}
protected function applyAdditional(&$table, &$fieldTable, &$valuePermissionLists)
{
if ($this->getUser()->get('isPortalUser')) {
foreach ($this->getScopeList() as $scope) {
$table->$scope = false;
unset($fieldTable->$scope);
}
foreach ($this->valuePermissionList as $permission) {
$valuePermissionLists->{$permission}[] = 'no';
}
}
}
private function mergeValueList(array $list, $defaultValue)
{
$result = null;
foreach ($list as $level) {
@@ -183,51 +585,76 @@ class Table
return $result;
}
private function getScopeList()
protected function getScopeWithAclList()
{
$scopeList = [];
$scopes = $this->metadata->get('scopes');
foreach ($scopes as $scope => $d) {
if (!empty($d['acl'])) {
$scopeList[] = $scope;
}
if (empty($d['acl'])) continue;
$scopeList[] = $scope;
}
return $scopeList;
}
private function merge($tables)
protected function getScopeList()
{
$data = array();
$scopeList = $this->getScopeList();
$scopeList = [];
$scopes = $this->metadata->get('scopes');
foreach ($scopes as $scope => $d) {
$scopeList[] = $scope;
}
return $scopeList;
}
foreach ($tables as $table) {
private function mergeTableList(array $tableList)
{
$data = (object) [];
$scopeList = $this->getScopeWithAclList();
foreach ($tableList as $table) {
foreach ($scopeList as $scope) {
if (!isset($table->$scope)) {
continue;
}
if (!isset($table->$scope)) continue;
$row = $table->$scope;
if ($row == false) {
if (!isset($data[$scope])) {
$data[$scope] = false;
if (!isset($data->$scope)) {
$data->$scope = false;
}
} else if ($row === true) {
$data[$scope] = true;
$data->$scope = true;
} else {
if (!isset($data[$scope])) {
$data[$scope] = array();
if (!isset($data->$scope)) {
$data->$scope = (object) [];
}
if ($data[$scope] == false) {
$data[$scope] = array();
if ($data->$scope === false) {
$data->$scope = (object) [];
}
if (is_array($row) || $row instanceof \stdClass) {
foreach ($row as $action => $level) {
if (!isset($data[$scope][$action])) {
$data[$scope][$action] = $level;
if (!is_object($row)) continue;
$actionList = $this->getMetadata()->get(['scopes', $scope, $this->type . 'ActionList'], $this->actionList);
foreach ($actionList as $i => $action) {
if (isset($row->$action)) {
$level = $row->$action;
if (!isset($data->$scope->$action)) {
$data->$scope->$action = $level;
} else {
if (array_search($data[$scope][$action], $this->levelList) > array_search($level, $this->levelList)) {
$data[$scope][$action] = $level;
if (array_search($data->$scope->$action, $this->levelList) > array_search($level, $this->levelList)) {
$data->$scope->$action = $level;
}
}
} else {
if ($i > 0) {
// TODO remove it
$previousAction = $this->actionList[$i - 1];
if (in_array($action, $this->booleanActionList)) {
$data->$scope->$action = 'yes';
} else {
if ($action === 'stream' && isset($data->$scope->$previousAction)) {
$data->$scope->$action = $data->$scope->$previousAction;
}
}
}
}
@@ -236,24 +663,80 @@ class Table
}
}
foreach ($scopeList as $scope) {
if (!array_key_exists($scope, $data)) {
$aclType = $this->metadata->get('scopes.' . $scope . '.acl');
if ($aclType === true) {
$aclType = 'recordAllTeamOwnNo';
return $data;
}
private function mergeFieldTableList(array $tableList)
{
$data = (object) [];
$scopeList = $this->getScopeWithAclList();
foreach ($tableList as $table) {
foreach ($scopeList as $scope) {
if (!isset($table->$scope)) continue;
if (!isset($data->$scope)) {
$data->$scope = (object) [];
}
if (!empty($aclType)) {
$data[$scope] = $this->metadata->get('app.acl.defaults.' . $aclType, true);
}
}
if (!is_object($table->$scope)) continue;
$fieldList = array_keys($this->getMetadata()->get("entityDefs.{$scope}.fields", []));
foreach (get_object_vars($table->$scope) as $field => $row) {
if (!is_object($row)) continue;
if (!in_array($field, $fieldList)) continue;
if (!isset($data->$scope->$field)) {
$data->$scope->$field = (object) [];
}
foreach ($this->fieldActionList as $i => $action) {
if (!isset($row->$action)) continue;
$level = $row->$action;
if (!isset($data->$scope->$field->$action)) {
$data->$scope->$field->$action = $level;
} else {
if (array_search($data->$scope->$field->$action, $this->fieldLevelList) > array_search($level, $this->fieldLevelList)) {
$data->$scope->$field->$action = $level;
}
}
}
}
}
}
return $data;
}
private function buildCache()
{
$contents = '<' . '?'. 'php return ' . var_export($this->data, true) . ';';
$this->fileManager->putContents($this->cacheFile, $contents);
$this->fileManager->putPhpContents($this->cacheFilePath, $this->data, true);
}
protected function applyReadOnlyFields(&$fieldTable)
{
// 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';
}
}
}
}
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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
@@ -45,6 +45,10 @@ class AclManager
private $tableHashMap = array();
protected $tableClassName = '\\Espo\\Core\\Acl\\Table';
protected $userAclClassName = '\\Espo\\Core\\Acl';
public function __construct(Container $container)
{
$this->container = $container;
@@ -56,6 +60,11 @@ class AclManager
return $this->container;
}
protected function getMetadata()
{
return $this->metadata;
}
public function getImplementation($scope)
{
if (empty($this->implementationHashMap[$scope])) {
@@ -75,10 +84,10 @@ class AclManager
}
if (class_exists($className)) {
$acl = new $className();
$acl = new $className($scope);
$dependencies = $acl->getDependencyList();
foreach ($dependencies as $name) {
$acl->inject($name, $this->container->get($name));
$acl->inject($name, $this->getContainer()->get($name));
}
$this->implementationHashMap[$scope] = $acl;
} else {
@@ -91,14 +100,18 @@ class AclManager
protected function getTable(User $user)
{
$key = spl_object_hash($user);
$key = $user->id;
if (empty($key)) {
$key = spl_object_hash($user);
}
if (empty($this->tableHashMap[$key])) {
$config = $this->getContainer()->get('config');
$fileManager = $this->getContainer()->get('fileManager');
$metadata = $this->getContainer()->get('metadata');
$fieldManager = $this->getContainer()->get('fieldManagerUtil');
$this->tableHashMap[$key] = new \Espo\Core\Acl\Table($user, $config, $fileManager, $metadata);
$this->tableHashMap[$key] = new $this->tableClassName($user, $config, $fileManager, $metadata, $fieldManager);
}
return $this->tableHashMap[$key];
@@ -119,12 +132,18 @@ class AclManager
public function get(User $user, $permission)
{
if ($user->isAdmin()) {
return true;
}
return $this->getTable($user)->get($permission);
}
public function checkReadNo(User $user, $scope)
{
if ($user->isAdmin()) {
return false;
}
$data = $this->getTable($user)->getScopeData($scope);
return $this->getImplementation($scope)->checkReadNo($user, $data);
}
public function checkReadOnlyTeam(User $user, $scope)
{
if ($user->isAdmin()) {
@@ -143,49 +162,51 @@ class AclManager
return $this->getImplementation($scope)->checkReadOnlyOwn($user, $data);
}
public function check(User $user, $subject, $action = null, $isOwner = null, $inTeam = null)
public function check(User $user, $subject, $action = null)
{
if ($user->isAdmin()) {
return true;
}
if (is_string($subject)) {
return $this->checkScope($user, $subject, $action, $isOwner, $inTeam);
return $this->checkScope($user, $subject, $action);
} else {
$entity = $subject;
if ($entity instanceof Entity) {
$entityType = $entity->getEntityType();
$impl = $this->getImplementation($entityType);
$methodName = 'checkEntity' . ucfirst($action);
if (method_exists($impl, $methodName)) {
$data = $this->getTable($user)->getScopeData($entityType);
return $impl->$methodName($user, $entity, $data);
}
return $this->checkEntity($user, $entity, $action);
}
}
}
public function checkEntity(User $user, Entity $entity, $action)
public function checkEntity(User $user, Entity $entity, $action = 'read')
{
if ($user->isAdmin()) {
return true;
}
$data = $this->getTable($user)->getScopeData($entity->getEntityType());
return $this->getImplementation($entity->getEntityType())->checkEntity($user, $entity, $data, $action);
}
$scope = $entity->getEntityType();
public function checkScope(User $user, $scope, $action = null, $isOwner = null, $inTeam = null, $entity = null)
{
if ($user->isAdmin()) {
return true;
}
$data = $this->getTable($user)->getScopeData($scope);
return $this->getImplementation($scope)->checkScope($user, $data, $scope, $action, $isOwner, $inTeam, $entity);
$impl = $this->getImplementation($scope);
$methodName = 'checkEntity' . ucfirst($action);
if (method_exists($impl, $methodName)) {
return $impl->$methodName($user, $entity, $data);
}
return $impl->checkEntity($user, $entity, $data, $action);
}
public function checkPermission(User $user, $permission, User $entity)
public function checkIsOwner(User $user, Entity $entity)
{
return $this->getImplementation($entity->getEntityType())->checkIsOwner($user, $entity);
}
public function checkInTeam(User $user, Entity $entity)
{
return $this->getImplementation($entity->getEntityType())->checkInTeam($user, $entity);
}
public function checkScope(User $user, $scope, $action = null)
{
$data = $this->getTable($user)->getScopeData($scope);
return $this->getImplementation($scope)->checkScope($user, $data, $action);
}
public function checkUser(User $user, $permission, User $entity)
{
if ($user->isAdmin()) {
return true;
@@ -213,5 +234,58 @@ class AclManager
}
return true;
}
}
public function getScopeForbiddenAttributeList(User $user, $scope, $action = 'read', $thresholdLevel = 'no')
{
if ($user->isAdmin()) return [];
return $this->getTable($user)->getScopeForbiddenAttributeList($scope, $action, $thresholdLevel);
}
public function getScopeForbiddenFieldList(User $user, $scope, $action = 'read', $thresholdLevel = 'no')
{
if ($user->isAdmin()) return [];
return $this->getTable($user)->getScopeForbiddenFieldList($scope, $action, $thresholdLevel);
}
public function checkUserPermission(User $user, $target, $permissionType = 'userPermission')
{
$permission = $this->get($user, $permissionType);
if (is_object($target)) {
$userId = $target->id;
} else {
$userId = $target;
}
if ($user->id === $userId) return true;
if ($permission === 'no') {
return false;
}
if ($permission === 'yes') {
return true;
}
if ($permission === 'team') {
$teamIdList = $user->getLinkMultipleIdList('teams');
if (!$this->getContainer()->get('entityManager')->getRepository('User')->checkBelongsToAnyOfTeams($userId, $teamIdList)) {
return false;
}
}
return true;
}
public function checkAssignmentPermission(User $user, $target)
{
return $this->checkUserPermission($user, $target, 'assignmentPermission');
}
public function createUserAcl(User $user)
{
$className = $this->userAclClassName;
$acl = new $className($this, $user);
return $acl;
}
}

View File

@@ -0,0 +1,212 @@
<?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\Core\AclPortal;
use \Espo\Entities\User;
use \Espo\ORM\Entity;
class Base extends \Espo\Core\Acl\Base
{
public function checkScope(User $user, $data, $action = null, Entity $entity = null, $entityAccessData = array())
{
if ($user->isAdmin()) {
return true;
}
if (is_null($data)) {
return false;
}
if ($data === false) {
return false;
}
if ($data === true) {
return true;
}
if (is_string($data)) {
return true;
}
$isOwner = null;
if (isset($entityAccessData['isOwner'])) {
$isOwner = $entityAccessData['isOwner'];
}
$inAccount = null;
if (isset($entityAccessData['inAccount'])) {
$inAccount = $entityAccessData['inAccount'];
}
$isOwnContact = null;
if (isset($entityAccessData['isOwnContact'])) {
$isOwnContact = $entityAccessData['isOwnContact'];
}
if (is_null($action)) {
return true;
}
if (!isset($data->$action)) {
return false;
}
$value = $data->$action;
if ($value === 'all' || $value === 'yes' || $value === true) {
return true;
}
if (!$value || $value === 'no') {
return false;
}
if (is_null($isOwner)) {
if ($entity) {
$isOwner = $this->checkIsOwner($user, $entity);
} else {
return true;
}
}
if ($isOwner) {
if ($value === 'own' || $value === 'account' || $value === 'contact') {
return true;
}
}
if ($value === 'account') {
if (is_null($inAccount) && $entity) {
$inAccount = $this->checkInAccount($user, $entity);
}
if ($inAccount) {
return true;
}
}
if ($value === 'contact') {
if (is_null($isOwnContact) && $entity) {
$isOwnContact = $this->checkIsOwnContact($user, $entity);
}
if ($isOwnContact) {
return true;
}
}
return false;
}
public function checkReadOnlyAccount(User $user, $data)
{
if (empty($data) || !is_object($data) || !isset($data->read)) {
return false;
}
return $data->read === 'account';
}
public function checkReadOnlyContact(User $user, $data)
{
if (empty($data) || !is_object($data) || !isset($data->read)) {
return false;
}
return $data->read === 'contact';
}
public function checkIsOwner(User $user, Entity $entity)
{
if ($entity->hasAttribute('createdById')) {
if ($entity->has('createdById')) {
if ($user->id === $entity->get('createdById')) {
return true;
}
}
}
return false;
}
public function checkInAccount(User $user, Entity $entity)
{
$accountIdList = $user->getLinkMultipleIdList('accounts');
if (count($accountIdList)) {
if ($entity->hasAttribute('accountId')) {
if (in_array($entity->get('accountId'), $accountIdList)) {
return true;
}
}
if ($entity->hasRelation('accounts')) {
$repository = $this->getEntityManager()->getRepository($entity->getEntityType());
foreach ($accountIdList as $accountId) {
if ($repository->isRelated($entity, 'accounts', $accountId)) {
return true;
}
}
}
if ($entity->hasAttribute('parentId') && $entity->hasRelation('parent')) {
if ($entity->get('parentType') === 'Account') {
if (in_array($entity->get('parentId'), $accountIdList)) {
return true;
}
}
}
}
return false;
}
public function checkIsOwnContact(User $user, Entity $entity)
{
$contactId = $user->get('contactId');
if ($contactId) {
if ($entity->hasAttribute('contactId')) {
if ($entity->get('contactId') === $contactId) {
return true;
}
}
if ($entity->hasRelation('contacts')) {
$repository = $this->getEntityManager()->getRepository($entity->getEntityType());
if ($repository->isRelated($entity, 'contacts', $contactId)) {
return true;
}
}
if ($entity->hasAttribute('parentId') && $entity->hasRelation('parent')) {
if ($entity->get('parentType') === 'Contact') {
if ($entity->get('parentId') === $contactId) {
return true;
}
}
}
}
return false;
}
}

View File

@@ -0,0 +1,135 @@
<?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\Core\AclPortal;
use \Espo\Core\Exceptions\Error;
use \Espo\ORM\Entity;
use \Espo\Entities\User;
use \Espo\Entities\Portal;
use \Espo\Core\Utils\Config;
use \Espo\Core\Utils\Metadata;
use \Espo\Core\Utils\FieldManagerUtil;
use \Espo\Core\Utils\File\Manager as FileManager;
class Table extends \Espo\Core\Acl\Table
{
protected $type = 'aclPortal';
protected $portal;
protected $defaultAclType = 'recordAllOwnNo';
protected $levelList = ['yes', 'all', 'account', 'contact', 'own', 'no'];
protected $isStrictModeForced = true;
public function __construct(User $user, Portal $portal, Config $config = null, FileManager $fileManager = null, Metadata $metadata = null, FieldManagerUtil $fieldManager = null)
{
if (empty($portal)) {
throw new Error("No portal was passed to AclPortal\\Table constructor.");
}
$this->portal = $portal;
parent::__construct($user, $config, $fileManager, $metadata, $fieldManager);
}
protected function getPortal()
{
return $this->portal;
}
protected function initCacheFilePath()
{
$this->cacheFilePath = 'data/cache/application/acl-portal/'.$this->getPortal()->id.'/' . $this->getUser()->id . '.php';
}
protected function getRoleList()
{
$roleList = [];
$userRoleList = $this->getUser()->get('portalRoles');
if (!(is_array($userRoleList) || $userRoleList instanceof \Traversable)) {
throw new Error();
}
foreach ($userRoleList as $role) {
$roleList[] = $role;
}
$portalRoleList = $this->getPortal()->get('portalRoles');
if (!(is_array($portalRoleList) || $portalRoleList instanceof \Traversable)) {
throw new Error();
}
foreach ($portalRoleList as $role) {
$roleList[] = $role;
}
return $roleList;
}
protected function getScopeWithAclList()
{
$scopeList = [];
$scopes = $this->getMetadata()->get('scopes');
foreach ($scopes as $scope => $d) {
if (empty($d['acl'])) continue;
if (empty($d['aclPortal'])) continue;
$scopeList[] = $scope;
}
return $scopeList;
}
protected function applyDefault(&$table, &$fieldTable)
{
parent::applyDefault($table, $fieldTable);
foreach ($this->getScopeList() as $scope) {
if (!isset($table->$scope)) {
$table->$scope = false;
}
}
}
protected function applyDisabled(&$table, &$fieldTable)
{
foreach ($this->getScopeList() as $scope) {
$d = $this->getMetadata()->get('scopes.' . $scope);
if (!empty($d['disabled']) || !empty($d['portalDisabled'])) {
$table->$scope = false;
unset($fieldTable->$scope);
}
}
}
protected function applyAdditional(&$table, &$fieldTable, &$valuePermissionLists)
{
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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
@@ -33,26 +33,28 @@ class Application
{
private $metadata;
private $container;
protected $container;
private $slim;
private $auth;
/**
* Constructor
*/
public function __construct()
{
$this->container = new Container();
date_default_timezone_set('UTC');
$GLOBALS['log'] = $this->container->get('log');
$this->initContainer();
$GLOBALS['log'] = $this->getContainer()->get('log');
$this->initAutoloads();
}
protected function initContainer()
{
$this->container = new Container();
}
public function getSlim()
{
if (empty($this->slim)) {
@@ -69,12 +71,9 @@ class Application
return $this->metadata;
}
protected function getAuth()
protected function createAuth()
{
if (empty($this->auth)) {
$this->auth = new \Espo\Core\Utils\Auth($this->container);
}
return $this->auth;
return new \Espo\Core\Utils\Auth($this->container);
}
public function getContainer()
@@ -91,19 +90,11 @@ class Application
public function runClient()
{
$config = $this->getContainer()->get('config');
$themeManager = $this->getContainer()->get('themeManager');
$html = file_get_contents('main.html');
$html = str_replace('{{cacheTimestamp}}', $config->get('cacheTimestamp', 0), $html);
$html = str_replace('{{useCache}}', $config->get('useCache') ? 'true' : 'false' , $html);
$html = str_replace('{{stylesheet}}', $themeManager->getStylesheet(), $html);
$html = str_replace('{{runScript}}', 'app.start();' , $html);
echo $html;
$this->getContainer()->get('clientManager')->display();
exit;
}
public function runEntryPoint($entryPoint)
public function runEntryPoint($entryPoint, $data = array(), $final = false)
{
if (empty($entryPoint)) {
throw new \Error();
@@ -112,18 +103,27 @@ class Application
$slim = $this->getSlim();
$container = $this->getContainer();
$slim->get('/', function() {});
$slim->post('/', function() {});
$slim->any('.*', function() {});
$entryPointManager = new \Espo\Core\EntryPointManager($container);
try {
$auth = $this->getAuth();
$apiAuth = new \Espo\Core\Utils\Api\Auth($auth, $entryPointManager->checkAuthRequired($entryPoint), true);
$authRequired = $entryPointManager->checkAuthRequired($entryPoint);
$authNotStrict = $entryPointManager->checkNotStrictAuth($entryPoint);
if ($authRequired && !$authNotStrict) {
if (!$final && $portalId = $this->detectedPortalId()) {
$app = new \Espo\Core\Portal\Application($portalId);
$app->setBasePath($this->getBasePath());
$app->runEntryPoint($entryPoint, $data, true);
exit;
}
}
$auth = new \Espo\Core\Utils\Auth($this->container, $authNotStrict);
$apiAuth = new \Espo\Core\Utils\Api\Auth($auth, $authRequired, true);
$slim->add($apiAuth);
$slim->hook('slim.before.dispatch', function () use ($entryPoint, $entryPointManager, $container) {
$entryPointManager->run($entryPoint);
$slim->hook('slim.before.dispatch', function () use ($entryPoint, $entryPointManager, $container, $data) {
$entryPointManager->run($entryPoint, $data);
});
$slim->run();
@@ -134,8 +134,8 @@ class Application
public function runCron()
{
$auth = $this->getAuth();
$auth->useNoAuth(true);
$auth = $this->createAuth();
$auth->useNoAuth();
$cronManager = new \Espo\Core\CronManager($this->container);
$cronManager->run();
@@ -164,20 +164,25 @@ class Application
return false;
}
protected function createApiAuth($auth)
{
return new \Espo\Core\Utils\Api\Auth($auth);
}
protected function routeHooks()
{
$container = $this->getContainer();
$slim = $this->getSlim();
try {
$auth = $this->getAuth();
$auth = $this->createAuth();
} catch (\Exception $e) {
$container->get('output')->processError($e->getMessage(), $e->getCode());
}
$apiAuth = new \Espo\Core\Utils\Api\Auth($auth);
$this->getSlim()->add($apiAuth);
$apiAuth = $this->createApiAuth($auth);
$this->getSlim()->add($apiAuth);
$this->getSlim()->hook('slim.before.dispatch', function () use ($slim, $container) {
$route = $slim->router()->getCurrentRoute();
@@ -218,7 +223,7 @@ class Application
}
try {
$controllerManager = new \Espo\Core\ControllerManager($container);
$controllerManager = $this->getContainer()->get('controllerManager');
$result = $controllerManager->process($controllerName, $actionName, $params, $data, $slim->request());
$container->get('output')->render($result);
} catch (\Exception $e) {
@@ -237,13 +242,19 @@ class Application
});
}
protected function initRoutes()
protected function getRouteList()
{
$routes = new \Espo\Core\Utils\Route($this->getContainer()->get('config'), $this->getMetadata(), $this->getContainer()->get('fileManager'));
$crudList = array_keys( $this->getContainer()->get('config')->get('crud') );
foreach ($routes->getAll() as $route) {
return $routes->getAll();
}
protected function initRoutes()
{
$crudList = array_keys($this->getContainer()->get('config')->get('crud'));
foreach ($this->getRouteList() as $route) {
$method = strtolower($route['method']);
if (!in_array($method, $crudList)) {
$GLOBALS['log']->error('Route: Method ['.$method.'] does not exist. Please check your route ['.$route['route'].']');
@@ -288,5 +299,38 @@ class Application
$classLoader->register(true);
}
public function setBasePath($basePath)
{
$this->getContainer()->get('clientManager')->setBasePath($basePath);
}
public function getBasePath()
{
return $this->getContainer()->get('clientManager')->getBasePath();
}
public function detectedPortalId()
{
if (!empty($_GET['portalId'])) {
return $_GET['portalId'];
}
if (!empty($_COOKIE['auth-token'])) {
$token = $this->getContainer()->get('entityManager')->getRepository('AuthToken')->where(array('token' => $_COOKIE['auth-token']))->findOne();
if ($token && $token->get('portalId')) {
return $token->get('portalId');
}
}
return null;
}
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-2015 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
@@ -28,6 +28,7 @@
************************************************************************/
namespace Espo\Core;
class Container
{
@@ -39,7 +40,6 @@ class Container
*/
public function __construct()
{
}
public function get($name)
@@ -47,7 +47,15 @@ class Container
if (empty($this->data[$name])) {
$this->load($name);
}
return $this->data[$name];
if (isset($this->data[$name])) {
return $this->data[$name];
}
return null;
}
protected function set($name, $obj)
{
$this->data[$name] = $obj;
}
private function load($name)
@@ -85,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');
@@ -110,58 +136,56 @@ class Container
return $log;
}
protected function loadContainer()
{
return $this;
}
private function loadSlim()
{
return new \Espo\Core\Utils\Api\Slim();
}
private function loadFileManager()
protected function loadFileManager()
{
return new \Espo\Core\Utils\File\Manager(
$this->get('config')
);
}
private function loadPreferences()
protected function loadControllerManager()
{
return new \Espo\Core\ControllerManager(
$this
);
}
protected function loadPreferences()
{
return $this->get('entityManager')->getEntity('Preferences', $this->get('user')->id);
}
private function loadConfig()
protected function loadConfig()
{
return new \Espo\Core\Utils\Config(
new \Espo\Core\Utils\File\Manager()
);
}
private function loadHookManager()
protected function loadHookManager()
{
return new \Espo\Core\HookManager(
$this
);
}
private function loadOutput()
protected function loadOutput()
{
return new \Espo\Core\Utils\Api\Output(
$this->get('slim')
);
}
private function loadMailSender()
protected function loadMailSender()
{
$className = $this->getServiceClassName('mailSernder', '\\Espo\\Core\\Mail\\Sender');
return new $className(
$this->get('config')
$this->get('config'),
$this->get('entityManager')
);
}
private function loadDateTime()
protected function loadDateTime()
{
return new \Espo\Core\Utils\DateTime(
$this->get('config')->get('dateFormat'),
@@ -170,48 +194,52 @@ class Container
);
}
private function loadNumber()
protected function loadNumber()
{
return new \Espo\Core\Utils\Number(
return new \Espo\Core\Utils\NumberUtil(
$this->get('config')->get('decimalMark'),
$this->get('config')->get('thousandSeparator')
);
}
private function loadServiceFactory()
protected function loadServiceFactory()
{
return new \Espo\Core\ServiceFactory(
$this
);
}
private function loadSelectManagerFactory()
protected function loadSelectManagerFactory()
{
return new \Espo\Core\SelectManagerFactory(
$this->get('entityManager'),
$this->get('user'),
$this->get('acl'),
$this->get('metadata')
$this->get('aclManager'),
$this->get('metadata'),
$this->get('config'),
$this->get('injectableFactory')
);
}
private function loadMetadata()
protected function loadMetadata()
{
return new \Espo\Core\Utils\Metadata(
$this->get('config'),
$this->get('fileManager')
$this->get('fileManager'),
$this->get('config')->get('useCache')
);
}
private function loadLayout()
protected function loadLayout()
{
return new \Espo\Core\Utils\Layout(
$this->get('fileManager'),
$this->get('metadata')
$this->get('metadata'),
$this->get('user')
);
}
private function loadAclManager()
protected function loadAclManager()
{
$className = $this->getServiceClassName('acl', '\\Espo\\Core\\AclManager');
return new $className(
@@ -219,7 +247,7 @@ class Container
);
}
private function loadAcl()
protected function loadAcl()
{
$className = $this->getServiceClassName('acl', '\\Espo\\Core\\Acl');
return new $className(
@@ -228,18 +256,28 @@ class Container
);
}
private function loadSchema()
protected function loadSchema()
{
return new \Espo\Core\Utils\Database\Schema\Schema(
$this->get('config'),
$this->get('metadata'),
$this->get('fileManager'),
$this->get('entityManager'),
$this->get('classParser')
$this->get('classParser'),
$this->get('ormMetadata')
);
}
private function loadClassParser()
protected function loadOrmMetadata()
{
return new \Espo\Core\Utils\Metadata\OrmMetadata(
$this->get('metadata'),
$this->get('fileManager'),
$this->get('config')->get('useCache')
);
}
protected function loadClassParser()
{
return new \Espo\Core\Utils\File\ClassParser(
$this->get('fileManager'),
@@ -248,46 +286,72 @@ class Container
);
}
private function loadLanguage()
protected function loadLanguage()
{
return new \Espo\Core\Utils\Language(
\Espo\Core\Utils\Language::detectLanguage($this->get('config'), $this->get('preferences')),
$this->get('fileManager'),
$this->get('config'),
$this->get('metadata'),
$this->get('preferences')
$this->get('config')->get('useCache')
);
}
private function loadCrypt()
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(
\Espo\Core\Utils\Language::detectLanguage($this->get('config')),
$this->get('fileManager'),
$this->get('metadata'),
$this->get('useCache')
);
}
protected function loadCrypt()
{
return new \Espo\Core\Utils\Crypt(
$this->get('config')
);
}
private function loadScheduledJob()
protected function loadScheduledJob()
{
return new \Espo\Core\Utils\ScheduledJob(
$this
);
}
private function loadDataManager()
protected function loadDataManager()
{
return new \Espo\Core\DataManager(
$this
);
}
private function loadFieldManager()
protected function loadFieldManager()
{
return new \Espo\Core\Utils\FieldManager(
$this->get('metadata'),
$this->get('language')
$this
);
}
private function loadThemeManager()
protected function loadFieldManagerUtil()
{
return new \Espo\Core\Utils\FieldManagerUtil(
$this->get('metadata')
);
}
protected function loadThemeManager()
{
return new \Espo\Core\Utils\ThemeManager(
$this->get('config'),
@@ -295,9 +359,24 @@ class Container
);
}
public function setUser($user)
protected function loadClientManager()
{
$this->data['user'] = $user;
return new \Espo\Core\Utils\ClientManager(
$this->get('config'),
$this->get('themeManager')
);
}
protected function loadInjectableFactory()
{
return new \Espo\Core\InjectableFactory(
$this
);
}
public function setUser(\Espo\Entities\User $user)
{
$this->set('user', $user);
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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);
}
@@ -119,12 +121,10 @@ class ControllerManager
$controller->$afterMethodName($params, $data, $request);
}
if (is_array($result) || is_bool($result)) {
if (is_array($result) || is_bool($result) || $result instanceof \StdClass) {
return \Espo\Core\Utils\Json::encode($result);
}
return $result;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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-2015 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
@@ -64,16 +64,16 @@ class Record extends Base
return $service;
}
public function actionRead($params)
public function actionRead($params, $data, $request)
{
$id = $params['id'];
$entity = $this->getRecordService()->getEntity($id);
$entity = $this->getRecordService()->readEntity($id);
if (empty($entity)) {
throw new NotFound();
}
return $entity->toArray();
return $entity->getValueMap();
}
public function actionPatch($params, $data, $request)
@@ -87,14 +87,14 @@ class Record extends Base
throw new BadRequest();
}
if (!$this->getAcl()->check($this->name, 'edit')) {
if (!$this->getAcl()->check($this->name, 'create')) {
throw new Forbidden();
}
$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();
@@ -128,12 +128,10 @@ class Record extends Base
$where = $request->get('where');
$offset = $request->get('offset');
$maxSize = $request->get('maxSize');
$asc = $request->get('asc') === 'true';
$asc = $request->get('asc', 'true') === 'true';
$sortBy = $request->get('sortBy');
$q = $request->get('q');
$primaryFilter = $request->get('primaryFilter');
$textFilter = $request->get('textFilter');
$boolFilterList = $request->get('boolFilterList');
if (empty($maxSize)) {
$maxSize = self::MAX_SIZE_LIMIT;
@@ -151,19 +149,70 @@ class Record extends Base
'q' => $q,
'textFilter' => $textFilter
);
$this->fetchListParamsFromRequest($params, $request, $data);
$result = $this->getRecordService()->findEntities($params);
return array(
'total' => $result['total'],
'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')) {
$params['primaryFilter'] = $request->get('primaryFilter');
}
if ($request->get('boolFilterList')) {
$params['boolFilterList'] = $request->get('boolFilterList');
}
$result = $this->getRecordService()->findEntities($params);
return array(
'total' => $result['total'],
'list' => isset($result['collection']) ? $result['collection']->toArray() : $result['list']
);
if ($request->get('filterList')) {
$params['filterList'] = $request->get('filterList');
}
}
public function actionListLinked($params, $data, $request)
@@ -174,7 +223,7 @@ class Record extends Base
$where = $request->get('where');
$offset = $request->get('offset');
$maxSize = $request->get('maxSize');
$asc = $request->get('asc') === 'true';
$asc = $request->get('asc', 'true') === 'true';
$sortBy = $request->get('sortBy');
$q = $request->get('q');
$textFilter = $request->get('textFilter');
@@ -195,18 +244,14 @@ class Record extends Base
'q' => $q,
'textFilter' => $textFilter
);
if ($request->get('primaryFilter')) {
$params['primaryFilter'] = $request->get('primaryFilter');
}
if ($request->get('boolFilterList')) {
$params['boolFilterList'] = $request->get('boolFilterList');
}
$this->fetchListParamsFromRequest($params, $request, $data);
$result = $this->getRecordService()->findLinkedEntities($id, $link, $params);
return array(
'total' => $result['total'],
'list' => isset($result['collection']) ? $result['collection']->toArray() : $result['list']
'list' => isset($result['collection']) ? $result['collection']->getValueMapList() : $result['list']
);
}
@@ -226,25 +271,47 @@ class Record extends Base
public function actionExport($params, $data, $request)
{
if (!$request->isPost()) {
throw new BadRequest();
}
if ($this->getConfig()->get('exportDisabled') && !$this->getUser()->isAdmin()) {
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 = $request->get('ids');
$where = $request->get('where');
$byWhere = $request->get('byWhere');
$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) {
$params['selectData'] = $selectData;
$params['where'] = $where;
} else {
$params['ids'] = $ids;
}
if (isset($data->attributeList)) {
$params['attributeList'] = $data->attributeList;
}
if (isset($data->fieldList)) {
$params['fieldList'] = $data->fieldList;
}
if (isset($data->format)) {
$params['format'] = $data->format;
}
return array(
'id' => $this->getRecordService()->export($params)
);
@@ -259,18 +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);
} else if (array_key_exists('ids', $data)) {
$params['ids'] = $data['ids'];
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 (property_exists($data, 'ids')) {
$params['ids'] = $data->ids;
}
$attributes = $data['attributes'];
$attributes = $data->attributes;
$idsUpdated = $this->getRecordService()->massUpdate($attributes, $params);
@@ -287,18 +357,18 @@ 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 (property_exists($data, 'selectData')) {
$params['selectData'] = json_decode(json_encode($data->selectData), true);
}
}
if (array_key_exists('ids', $data)) {
$where = json_decode(json_encode($data['where']), true);
$params['ids'] = $data['ids'];
if (property_exists($data, 'ids')) {
$params['ids'] = $data->ids;
}
$idsRemoved = $this->getRecordService()->massRemove($params);
return $idsRemoved;
return $this->getRecordService()->massRemove($params);
}
public function actionCreateLink($params, $data, $request)
@@ -314,25 +384,31 @@ 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);
return $this->getRecordService()->linkEntityMass($id, $link, $where);
} else {
$foreignIds = array();
if (isset($data['id'])) {
$foreignIds[] = $data['id'];
$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['ids']) && is_array($data['ids'])) {
foreach ($data['ids'] as $foreignId) {
$foreignIds[] = $foreignId;
return $this->getRecordService()->linkEntityMass($id, $link, $where, $selectData);
} else {
$foreignIdList = array();
if (isset($data->id)) {
$foreignIdList[] = $data->id;
}
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()->linkEntity($id, $link, $foreignId)) {
$result = true;
}
@@ -358,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;
}
@@ -386,7 +462,7 @@ class Record extends Base
if (!$request->isPut()) {
throw new BadRequest();
}
if (!$this->getAcl()->check($this->name, 'read')) {
if (!$this->getAcl()->check($this->name, 'stream')) {
throw new Forbidden();
}
$id = $params['id'];
@@ -411,17 +487,59 @@ class Record extends Base
throw new BadRequest();
}
if (empty($data['targetId']) || empty($data['sourceIds']) || !is_array($data['sourceIds'])) {
if (empty($data->targetId) || empty($data->sourceIds) || !is_array($data->sourceIds) || !($data->attributes instanceof \StdClass)) {
throw new BadRequest();
}
$targetId = $data['targetId'];
$sourceIds = $data['sourceIds'];
$targetId = $data->targetId;
$sourceIds = $data->sourceIds;
$attributes = $data->attributes;
if (!$this->getAcl()->check($this->name, 'edit')) {
throw new Forbidden();
}
return $this->getRecordService()->merge($targetId, $sourceIds);
return $this->getRecordService()->merge($targetId, $sourceIds, $attributes);
}
public function postActionGetDuplicateAttributes($params, $data, $request)
{
if (empty($data->id)) {
throw new BadRequest();
}
if (!$this->getAcl()->check($this->name, 'create')) {
throw new Forbidden();
}
if (!$this->getAcl()->check($this->name, 'read')) {
throw new Forbidden();
}
return $this->getRecordService()->getDuplicateAttributes($data->id);
}
public function postActionMassFollow($params, $data, $request)
{
if (!$this->getAcl()->check($this->name, 'stream')) {
throw new Forbidden();
}
if (property_exists($data, 'ids')) {
$params['ids'] = $data->ids;
}
return $this->getRecordService()->massFollow($params);
}
public function postActionMassUnfollow($params, $data, $request)
{
if (!$this->getAcl()->check($this->name, 'stream')) {
throw new Forbidden();
}
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-2015 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
@@ -37,7 +37,6 @@ use \Espo\Core\Utils\Util;
class RecordTree extends Record
{
public static $defaultAction = 'list';
protected $defaultRecordServiceName = 'RecordTree';
@@ -51,14 +50,26 @@ class RecordTree extends Record
$where = $request->get('where');
$parentId = $request->get('parentId');
$maxDepth = $request->get('maxDepth');
$onlyNotEmpty = $request->get('onlyNotEmpty');
$collection = $this->getRecordService()->getTree($parentId, array(
'where' => $where
'where' => $where,
'onlyNotEmpty' => $onlyNotEmpty
), 0, $maxDepth);
return array(
'list' => $collection->toArray(),
'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-2015 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,15 +35,25 @@ use Espo\Core\Exceptions\NotFound;
class CronManager
{
private $container;
private $config;
private $fileManager;
private $entityManager;
private $scheduledJobUtil;
private $cronJobUtil;
private $cronScheduledJobUtil;
const PENDING = 'Pending';
const RUNNING = 'Running';
const SUCCESS = 'Success';
const FAILED = 'Failed';
protected $lastRunTime = 'data/cache/application/cronLastRunTime.php';
@@ -58,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()
@@ -92,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;
@@ -126,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;
}
@@ -149,63 +160,69 @@ class CronManager
$this->setLastRunTime(time());
$entityManager = $this->getEntityManager();
$cronJob = $this->getCronJob();
$cronScheduledJob = $this->getCronScheduledJob();
//Check scheduled jobs and create related jobs
$this->getCronJobUtil()->markFailedJobs();
$this->getCronJobUtil()->updateFailedJobAttempts();
$this->createJobsFromScheduledJobs();
$this->getCronJobUtil()->removePendingJobDuplicates();
$pendingJobs = $cronJob->getPendingJobs();
$pendingJobList = $this->getCronJobUtil()->getPendingJobList();
foreach ($pendingJobs as $job) {
foreach ($pendingJobList as $job) {
$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;
}
$jobEntity = $entityManager->getEntity('Job', $job['id']);
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);
$entityManager->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);
$entityManager->saveEntity($jobEntity);
$job->set('status', $status);
$this->getEntityManager()->saveEntity($job);
//set status in the schedulerJobLog
if (!empty($job['scheduled_job_id'])) {
$cronScheduledJob->addLogRecord($job['scheduled_job_id'], $status);
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) {
@@ -213,12 +230,18 @@ class CronManager
}
$jobClass = new $className($this->container);
$method = $this->getScheduledJobUtil()->getMethodName();
$method = 'run';
if (!method_exists($jobClass, $method)) {
throw new NotFound();
}
$jobClass->$method();
$data = null;
if ($job->get('data')) {
$data = $job->get('data');
}
$jobClass->$method($data, $job->get('targetId'), $job->get('targetType'));
}
/**
@@ -228,85 +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);
$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()
{
$entityManager = $this->getEntityManager();
$activeScheduledJobList = $this->getCronScheduledJobUtil()->getActiveScheduledJobList();
$activeScheduledJobs = $this->getCronScheduledJob()->getActiveJobs();
$runningScheduledJobIdList = $this->getCronJobUtil()->getRunningScheduledJobIdList();
$cronJob = $this->getCronJob();
$runningScheduledJobs = $cronJob->getActiveJobs('scheduled_job_id', self::RUNNING, PDO::FETCH_COLUMN);
$createdJobs = array();
foreach ($activeScheduledJobs as $scheduledJob) {
if (in_array($scheduledJob['id'], $runningScheduledJobs)) {
continue;
}
$scheduling = $scheduledJob['scheduling'];
$cronExpression = \Cron\CronExpression::factory($scheduling);
$createdJobIdList = array();
foreach ($activeScheduledJobList as $scheduledJob) {
$scheduling = $scheduledJob->get('scheduling');
try {
$prevDate = $cronExpression->getPreviousRunDate()->format('Y-m-d H:i:s');
$cronExpression = \Cron\CronExpression::factory($scheduling);
} catch (\Exception $e) {
$GLOBALS['log']->error('CronManager: ScheduledJob ['.$scheduledJob['id'].']: CronExpression - Impossible CRON expression ['.$scheduling.']');
$GLOBALS['log']->error('CronManager (ScheduledJob ['.$scheduledJob->id.']): Scheduling string error - '. $e->getMessage() . '.');
continue;
}
if ($cronExpression->isDue()) {
$prevDate = date('Y-m-d H:i:s');
try {
$nextDate = $cronExpression->getNextRunDate()->format('Y-m-d H:i:s');
} catch (\Exception $e) {
$GLOBALS['log']->error('CronManager (ScheduledJob ['.$scheduledJob->id.']): Unsupported CRON expression ['.$scheduling.']');
continue;
}
$existsJob = $cronJob->getJobByScheduledJob($scheduledJob['id'], $prevDate);
$existingJob = $this->getCronJobUtil()->getJobByScheduledJob($scheduledJob->id, $nextDate);
if ($existingJob) continue;
if (!isset($existsJob) || empty($existsJob)) {
//create a new job
$jobEntity = $entityManager->getEntity('Job');
$jobEntity->set(array(
'name' => $scheduledJob['name'],
'status' => self::PENDING,
'scheduledJobId' => $scheduledJob['id'],
'executeTime' => $prevDate,
'method' => $scheduledJob['job'],
));
$jobEntityId = $entityManager->saveEntity($jobEntity);
if (!empty($jobEntityId)) {
$createdJobs[] = $jobEntityId;
$className = $this->getScheduledJobUtil()->get($scheduledJob->get('job'));
if ($className) {
if (method_exists($className, 'prepare')) {
$implementation = new $className($this->container);
$implementation->prepare($scheduledJob, $nextDate);
continue;
}
}
}
return $createdJobs;
if (in_array($scheduledJob->id, $runningScheduledJobIdList)) {
continue;
}
$jobEntity = $this->getEntityManager()->getEntity('Job');
$jobEntity->set(array(
'name' => $scheduledJob->get('name'),
'status' => self::PENDING,
'scheduledJobId' => $scheduledJob->id,
'executeTime' => $nextDate
));
$this->getEntityManager()->saveEntity($jobEntity);
}
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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
@@ -28,6 +28,7 @@
************************************************************************/
namespace Espo\Core;
class DataManager
{
private $container;
@@ -58,6 +59,8 @@ class DataManager
$result &= $this->rebuildDatabase($entityList);
$this->rebuildScheduledJobs();
return $result;
}
@@ -113,11 +116,49 @@ class DataManager
$metadata->init(true);
$ormMeta = $metadata->getOrmMetadata(true);
$ormData = $this->getContainer()->get('ormMetadata')->getData(true);
$this->updateCacheTimestamp();
return empty($ormMeta) ? false : true;
return empty($ormData) ? false : true;
}
public function rebuildScheduledJobs()
{
$metadata = $this->getContainer()->get('metadata');
$entityManager = $this->getContainer()->get('entityManager');
$jobs = $metadata->get(['entityDefs', 'ScheduledJob', 'jobs'], array());
foreach ($jobs as $jobName => $defs) {
if ($jobName && !empty($defs['isSystem']) && !empty($defs['scheduling'])) {
if (!$entityManager->getRepository('ScheduledJob')->where(array(
'job' => $jobName,
'status' => 'Active',
'scheduling' => $defs['scheduling']
))->findOne()) {
$job = $entityManager->getRepository('ScheduledJob')->where(array(
'job' => $jobName
))->findOne();
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' => $name
));
$entityManager->saveEntity($job);
}
}
}
}
/**

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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-2015 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-2015 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
@@ -81,7 +81,16 @@ class EntryPointManager
return $className::$authRequired;
}
public function run($name)
public function checkNotStrictAuth($name)
{
$className = $this->getClassName($name);
if (!$className) {
throw new NotFound();
}
return $className::$notStrictAuth;
}
public function run($name, $data = array())
{
$className = $this->getClassName($name);
if (!$className) {
@@ -89,7 +98,7 @@ class EntryPointManager
}
$entryPoint = new $className($this->container);
$entryPoint->run();
$entryPoint->run($data);
}
protected function getClassName($name)

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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
@@ -39,6 +39,8 @@ abstract class Base
public static $authRequired = true;
public static $notStrictAuth = false;
protected function getContainer()
{
return $this->container;
@@ -94,12 +96,15 @@ abstract class Base
return $this->getContainer()->get('language');
}
protected function getClientManager()
{
return $this->getContainer()->get('clientManager');
}
public function __construct(Container $container)
{
$this->container = $container;
}
abstract public function run();
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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-2015 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-2015 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-2015 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-2015 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-2015 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-2015 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,98 @@
<?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\Core\Export;
use \Espo\Core\Exceptions\Error;
use \Espo\Core\ORM\Entity;
class Csv extends \Espo\Core\Injectable
{
protected $dependencyList = [
'config',
'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');
if (empty($delimiter)) {
$delimiter = $this->getInjection('config')->get('exportDelimiter', ';');
}
$fp = fopen('php://temp', 'w');
fputcsv($fp, $attributeList, $delimiter);
foreach ($dataList as $row) {
fputcsv($fp, $row, $delimiter);
}
rewind($fp);
$csv = stream_get_contents($fp);
fclose($fp);
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

@@ -0,0 +1,606 @@
<?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\Core\Export;
use \Espo\ORM\Entity;
use \Espo\Core\Exceptions\Error;
class Xlsx extends \Espo\Core\Injectable
{
protected $dependencyList = [
'language',
'metadata',
'config',
'dateTime',
'entityManager',
'fileStorageManager',
'fileManager'
];
protected function getConfig()
{
return $this->getInjection('config');
}
protected function getMetadata()
{
return $this->getInjection('metadata');
}
protected function getEntityManager()
{
return $this->getInjection('entityManager');
}
public function loadAdditionalFields(Entity $entity, $fieldList)
{
foreach ($entity->getRelationList() as $link) {
if ($entity->getRelationType($link) === 'belongsToParent') {
if (in_array($link, $fieldList)) {
$parent = $entity->get($link);
if ($parent instanceof Entity) {
$entity->set($link . 'Name', $parent->get('name'));
}
}
} else if ($entity->getRelationType($link) === 'belongsTo' && $entity->getRelationParam($link, 'noJoin') && $entity->hasField($link . 'Name')) {
if (in_array($link, $fieldList)) {
$related = $entity->get($link);
if ($related instanceof Entity) {
$entity->set($link . 'Name', $related->get('name'));
}
}
}
}
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)
{
$linkList = [];
if (!in_array('id', $attributeList)) {
$attributeList[] = 'id';
}
$linkDefs = $this->getMetadata()->get(['entityDefs', $entityType, 'links']);
if (is_array($linkDefs)) {
foreach ($linkDefs as $link => $defs) {
if (empty($defs['type'])) continue;
if ($defs['type'] === 'belongsToParent') {
$linkList[] = $link;
} else if ($defs['type'] === 'belongsTo' && !empty($defs['noJoin'])) {
if ($this->getMetadata()->get(['entityDefs', $entityType, 'fields', $link])) {
$linkList[] = $link;
}
}
}
}
foreach ($linkList as $item) {
if (in_array($item, $fieldList) && !in_array($item . 'Name', $attributeList)) {
$attributeList[] = $item . 'Name';
}
}
foreach ($fieldList as $field) {
$type = $this->getMetadata()->get(['entityDefs', $entityType, 'fields', $field, 'type']);
if ($type === 'currencyConverted') {
if (!in_array($field, $attributeList)) {
$attributeList[] = $field;
}
}
}
}
public function process($entityType, $params, $dataList)
{
if (!is_array($params['fieldList'])) {
throw new Error();
}
$phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$sheet = $phpExcel->setActiveSheetIndex(0);
if (isset($params['exportName'])) {
$exportName = $params['exportName'];
} else {
$exportName = $this->getInjection('language')->translate($entityType, 'scopeNamesPlural');
}
$sheetName = mb_substr($exportName, 0, 30, 'utf-8');
$badCharList = ['*', ':', '/', '\\', '?', '[', ']'];
foreach ($badCharList as $badChar) {
$sheetName = str_replace($badCharList, ' ', $sheetName);
}
$sheetName = str_replace('\'', '', $sheetName);
$sheet->setTitle($sheetName);
$fieldList = $params['fieldList'];
$titleStyle = array(
'font' => array(
'bold' => true,
'size' => 12
)
);
$dateStyle = array(
'font' => array(
'size' => 12
)
);
$now = new \DateTime();
$now->setTimezone(new \DateTimeZone($this->getInjection('config')->get('timeZone', 'UTC')));
$sheet->setCellValue('A1', $exportName);
$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);
$sheet->getStyle('B1')->getNumberFormat()
->setFormatCode($this->getInjection('dateTime')->getDateTimeFormat());
$azRange = range('A', 'Z');
$azRangeCopied = $azRange;
foreach ($azRangeCopied as $i => $char1) {
foreach ($azRangeCopied as $j => $char2) {
$azRange[] = $char1 . $char2;
if ($i * count($azRangeCopied) + $j === count($fieldList)) {
break 2;
}
}
}
$rowNumber = 3;
$linkColList = [];
$lastIndex = 0;
foreach ($fieldList as $i => $name) {
$col = $azRange[$i];
$defs = $this->getInjection('metadata')->get(['entityDefs', $entityType, 'fields', $name]);
if (!$defs) {
$defs['type'] = 'base';
}
$label = $name;
if (strpos($name, '_') !== false) {
list($linkName, $foreignField) = explode('_', $name);
$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);
}
$sheet->setCellValue($col . $rowNumber, $label);
$sheet->getColumnDimension($col)->setAutoSize(true);
if (in_array($defs['type'], ['phone', 'email', 'url', 'link', 'linkParent'])) {
$linkColList[] = $col;
} else if ($name == 'name') {
$linkColList[] = $col;
}
$lastIndex = $i;
}
$col = $azRange[$i];
$headerStyle = array(
'font' => array(
'bold' => true,
'size' => 12
)
);
$sheet->getStyle("A$rowNumber:$col$rowNumber")->applyFromArray($headerStyle);
$sheet->setAutoFilter("A$rowNumber:$col$rowNumber");
$typesCache = array();
$rowNumber++;
foreach ($dataList as $row) {
$i = 0;
foreach ($fieldList as $i => $name) {
$col = $azRange[$i];
$defs = $this->getInjection('metadata')->get(['entityDefs', $entityType, 'fields', $name]);
if (!$defs) {
$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 ($type == 'link') {
if (array_key_exists($name.'Name', $row)) {
$sheet->setCellValue("$col$rowNumber", $row[$name.'Name']);
}
} else if ($type == 'linkParent') {
if (array_key_exists($name.'Name', $row)) {
$sheet->setCellValue("$col$rowNumber", $row[$name.'Name']);
}
} else if ($type == 'int') {
$sheet->setCellValue("$col$rowNumber", $row[$name] ?: 0);
} 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'];
$currencySymbol = $this->getMetadata()->get(['app', 'currency', 'symbolMap', $currency], '');
$sheet->getStyle("$col$rowNumber")
->getNumberFormat()
->setFormatCode('[$'.$currencySymbol.'-409]#,##0.00;-[$'.$currencySymbol.'-409]#,##0.00');
}
} else if ($type == 'currencyConverted') {
if (array_key_exists($name, $row)) {
$currency = $this->getConfig()->get('defaultCurrency');
$currencySymbol = $this->getMetadata()->get(['app', 'currency', 'symbolMap', $currency], '');
$sheet->getStyle("$col$rowNumber")
->getNumberFormat()
->setFormatCode('[$'.$currencySymbol.'-409]#,##0.00;-[$'.$currencySymbol.'-409]#,##0.00');
$sheet->setCellValue("$col$rowNumber", $row[$name] ? $row[$name] : '');
}
} else if ($type == 'personName') {
if (!empty($row['name'])) {
$sheet->setCellValue("$col$rowNumber", $row['name']);
} else {
$personName = '';
if (!empty($row['firstName'])) {
$personName .= $row['firstName'];
}
if (!empty($row['lastName'])) {
if (!empty($row['firstName'])) {
$personName .= ' ';
}
$personName .= $row['lastName'];
}
$sheet->setCellValue("$col$rowNumber", $personName);
}
} else if ($type == 'date') {
if (isset($row[$name])) {
$sheet->setCellValue("$col$rowNumber", \PhpOffice\PhpSpreadsheet\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'];
}
}
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 \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$filePath = $this->getInjection('fileStorageManager')->getLocalFilePath($attachment);
if ($filePath && file_exists($filePath)) {
$objDrawing->setPath($filePath);
$objDrawing->setHeight(100);
$objDrawing->setCoordinates("$col$rowNumber");
$objDrawing->setWorksheet($sheet);
$sheet->getRowDimension($rowNumber)->setRowHeight(100);
}
}
}
} else if ($type == 'file') {
if (array_key_exists($name.'Name', $row)) {
$sheet->setCellValue("$col$rowNumber", $row[$name.'Name']);
}
} else if ($type == 'enum') {
if (array_key_exists($name, $row)) {
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]);
}
}
$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 ($type == 'url') {
if (array_key_exists($name, $row) && filter_var($row[$name], FILTER_VALIDATE_URL)) {
$link = $row[$name];
}
} else if ($type == 'link') {
if (array_key_exists($name.'Id', $row)) {
$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 ($type == 'file') {
if (array_key_exists($name.'Id', $row)) {
$link = $this->getConfig()->getSiteUrl() . "/?entryPoint=download&id=" . $row[$name.'Id'];
}
} 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 ($type == 'phone') {
if (array_key_exists($name, $row)) {
$link = "tel:".$row[$name];
}
} else if ($type == 'email' && array_key_exists($name, $row)) {
if (array_key_exists($name, $row)) {
$link = "mailto:".$row[$name];
}
}
if ($link) {
$sheet->getCell("$col$rowNumber")->getHyperlink()->setUrl($link);
$sheet->getCell("$col$rowNumber")->getHyperlink()->setTooltip($link);
}
}
$rowNumber++;
}
$sheet->getStyle("A2:A$rowNumber")
->getNumberFormat()
->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
$startingRowNumber = 4;
foreach ($fieldList as $i => $name) {
$col = $azRange[$i];
if (!array_key_exists($name, $typesCache)) {
break;
}
$type = $typesCache[$name];
switch ($type) {
case 'currency':
case 'currencyConverted': {
} 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;
}
}
$linkStyle = [
'font' => [
'color' => ['rgb' => '345b7c'],
'underline' => 'single'
]
];
foreach ($linkColList as $linkColumn) {
$sheet->getStyle($linkColumn.$startingRowNumber.':'.$linkColumn.$rowNumber)->applyFromArray($linkStyle);
}
$objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
if (!$this->getInjection('fileManager')->isDir('data/cache/')) {
$this->getInjection('fileManager')->mkdir('data/cache/');
}
$tempFileName = 'data/cache/' . 'export_' . substr(md5(rand()), 0, 7);
$objWriter->save($tempFileName);
$fp = fopen($tempFileName, 'r');
$xlsx = stream_get_contents($fp);
$this->getInjection('fileManager')->unlink($tempFileName);
return $xlsx;
}
}

View File

@@ -3,7 +3,7 @@
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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-2015 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-2015 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