Compare commits

...

621 Commits
3.4.2 ... 3.8.0

Author SHA1 Message Date
yuri
67857ef93c fix warning 2 2015-11-09 17:07:56 +02:00
yuri
f93cc5b472 fix warning 2015-11-09 17:06:19 +02:00
yuri
e9df433b27 gruntfile fix 2015-11-09 15:59:37 +02:00
yuri
dc300dbbe0 mass email schedule each hour 2015-11-09 12:20:09 +02:00
yuri
c6b905d503 fix import rn 2015-11-09 11:38:07 +02:00
yuri
73c1cc40eb version 2015-11-06 11:36:53 +02:00
yuri
38cf2d8500 email: change row-action 2015-11-05 17:20:39 +02:00
yuri
747c7742da email improvements: isUsers field 2015-11-05 16:57:08 +02:00
yuri
5365818d82 fix show/hide fields 2015-11-05 16:07:18 +02:00
yuri
eddc32ebd7 fix bad comments 2015-11-05 16:01:40 +02:00
yuri
7ae41e414b email selectManager changes 2015-11-05 15:56:42 +02:00
yuri
6572d2a998 no disconnect for smtp 2015-11-05 11:39:43 +02:00
yuri
6a2314060f force to close sockets for emails 2015-11-05 11:20:24 +02:00
yuri
6a5e22eaa0 cleanup 2015-11-04 17:10:47 +02:00
yuri
98f77041e8 cleanup 2015-11-04 17:09:11 +02:00
yuri
5fb0ddb1d2 fix in export 2015-11-04 16:24:52 +02:00
yuri
7bfedff3c8 export refactor 2015-11-04 16:23:48 +02:00
yuri
cc364bc088 summernote insertText 2015-11-04 15:25:51 +02:00
yuri
81fd286834 trim 2015-11-04 12:05:52 +02:00
yuri
7d3af14f4d date sent for inbound email 2015-11-04 11:41:39 +02:00
yuri
37f5244790 fix warning in language 2015-11-04 11:02:54 +02:00
yuri
61fd827dca email template label fix 2015-11-04 10:58:44 +02:00
yuri
de68abfbb4 license 2015-11-04 10:56:15 +02:00
yuri
03ecfdb805 fix lang 2015-11-04 10:55:22 +02:00
yuri
2061bf68af Merge branch 'master' of https://github.com/espocrm/espocrm 2015-11-03 17:25:09 +02:00
yuri
79f9aae744 Merge branch 'hotfix/3.7.5' 2015-11-03 17:24:43 +02:00
yuri
d6fe7b59eb fix campaign statistics 2015-11-03 17:24:37 +02:00
yuri
7287854cc0 silent and noStream 2015-11-03 15:43:44 +02:00
Yuri Kuznetsov
dd5a395061 Merge pull request #64 from PanuWeb/translateES
Updated Spanish translation
2015-11-03 10:21:33 +02:00
PanuWeb
da1b92fdd4 Complete missing translations. 2015-11-02 18:48:38 -03:00
PanuWeb
f1f23b37c4 Improved some translations. 2015-11-02 18:30:58 -03:00
yuri
fea5669078 improve navigate 2015-10-30 17:57:56 +02:00
yuri
9fb88a6b92 changes for navigation buttons 2015-10-30 17:48:48 +02:00
yuri
3eb6648d2b prevNextButtons in detail view 2015-10-30 17:30:01 +02:00
yuri
7e8f0db610 change lang 2015-10-30 12:26:51 +02:00
yuri
6c57d9c658 fix calendar ratio 2015-10-30 12:24:47 +02:00
yuri
bc3e873ef7 upgrade fullcalendar 2015-10-30 12:00:10 +02:00
yuri
50105087cc stream filters and panel filters 2015-10-30 11:41:29 +02:00
yuri
f3406f1fcd stream filters 2015-10-30 11:17:29 +02:00
yuri
8e105205a4 fix small 2015-10-29 16:43:42 +02:00
yuri
6a496be1fa exportSkipFieldList 2015-10-29 15:50:24 +02:00
yuri
ecc6e9f4ec restrict access to mention 2015-10-29 15:20:55 +02:00
yuri
deee30eb3e entity manager: no stream for user 2015-10-29 11:26:50 +02:00
yuri
c92ba7f8f6 stream tab 2015-10-29 11:20:47 +02:00
yuri
5f46b2f74a user stream 2015-10-29 11:03:32 +02:00
yuri
5c642f93e9 notifications about post to all 2015-10-28 17:33:52 +02:00
yuri
915c58e9ab revert comment 2015-10-28 17:28:19 +02:00
yuri
ff437c204f notifications about post 2015-10-28 17:27:42 +02:00
yuri
e25bfbf1d7 license fix 2015-10-28 16:39:05 +02:00
yuri
ab4e16e9e7 post to users 2015-10-28 16:22:07 +02:00
yuri
d60d8bdcae user stream 2015-10-28 12:19:49 +02:00
yuri
a1f641af7a stream post for user 2015-10-28 11:17:38 +02:00
yuri
5cae8f359a fix installer jquery 2015-10-27 17:39:26 +02:00
yuri
19e10aa748 stream post 2015-10-27 17:12:27 +02:00
yuri
0e24774fb9 stream post 2015-10-27 16:14:46 +02:00
yuri
31d31fca73 fix strem acl 2015-10-27 12:48:59 +02:00
yuri
f874aed44f stream post client 2015-10-27 12:37:58 +02:00
yuri
04ce825191 stream post 2 2015-10-26 17:14:33 +02:00
yuri
516f2218d4 stream post 2015-10-26 12:54:59 +02:00
yuri
3cbf1447c9 Merge branch 'hotfix/3.7.5' 2015-10-26 11:10:22 +02:00
yuri
1c3ca4aa5a fix vertical navbar scroll 2015-10-26 11:09:57 +02:00
yuri
143ab06a74 error messages 2015-10-26 10:44:38 +02:00
yuri
c9609bf707 stream internal posts 3 2015-10-23 16:28:28 +03:00
yuri
291380c6b4 stream internal posts 2 2015-10-23 15:55:49 +03:00
yuri
74edceaf67 stream internal posts 1 2015-10-23 14:59:22 +03:00
yuri
84754077c5 calendar scope list configuranle 2015-10-22 17:12:34 +03:00
yuri
e2dae62fa9 fix panel filters 2015-10-22 15:50:37 +03:00
yuri
e0d475e2da fix panel filters 2015-10-22 15:50:09 +03:00
yuri
02cdf522f6 campaign tooltips 2 2015-10-22 15:01:00 +03:00
yuri
8345307760 campaign tooltips 2015-10-22 14:59:36 +03:00
yuri
888bb9d3db Merge branch 'hotfix/3.7.4' 2015-10-22 11:35:50 +03:00
yuri
0a0f8da2f4 fix auth for 5.5 2015-10-22 10:41:07 +03:00
yuri
bb5d5a0ccf text filter default search by email address 2015-10-21 17:14:57 +03:00
yuri
1bd5eac103 ver 2015-10-21 10:09:21 +03:00
yuri
61957e628b fix optOut 2015-10-21 10:07:15 +03:00
yuri
97aab07d77 merge 2015-10-20 17:55:54 +03:00
yuri
c5296bf906 typo 2015-10-20 17:52:26 +03:00
yuri
707f1a0b5c fix typo 2015-10-20 17:48:41 +03:00
yuri
5ffa68bee1 Merge branch 'hotfix/3.7.4' 2015-10-20 17:38:11 +03:00
yuri
a16919f10b fix typo 2015-10-20 17:38:04 +03:00
yuri
7050757e4e fix campaign type 2015-10-20 17:22:52 +03:00
yuri
cbd7ef4737 merge 2015-10-20 15:48:48 +03:00
yuri
d27e9c91e7 import: dont import if no fields 2015-10-20 15:47:42 +03:00
yuri
5e1c7bce33 leads actual filter 2015-10-20 15:38:25 +03:00
yuri
a23ac54da0 email template: translate enum 2015-10-20 15:32:01 +03:00
yuri
260c050f36 fix email address 2 2015-10-20 13:01:14 +03:00
yuri
fc5c07927f fix email address case 2015-10-20 12:57:42 +03:00
yuri
d321f0d701 email invitees duplicates 2015-10-20 12:32:50 +03:00
yuri
dddedcf088 Merge branch 'hotfix/3.7.4' 2015-10-20 12:27:13 +03:00
yuri
95cbc138f7 meeting/call/task and converted leads 2015-10-20 12:27:05 +03:00
yuri
395063ea35 order global search 2015-10-20 11:42:16 +03:00
yuri
835f95eb52 email template list layout 2015-10-20 11:29:05 +03:00
yuri
c0f6c91a0e fix email draft 2015-10-20 11:26:09 +03:00
yuri
b410d0e66f todays task 2015-10-19 17:43:32 +03:00
yuri
52853a4dc4 Merge branch 'stable' 2015-10-19 16:18:24 +03:00
yuri
d04f72cfd8 vers 2015-10-19 16:14:44 +03:00
yuri
a9203b8e22 fix global search 2015-10-19 16:13:52 +03:00
yuri
31c7fdcfa6 manual merge 2015-10-19 15:37:41 +03:00
yuri
e89c7c9328 email filter improvement 2015-10-19 15:36:22 +03:00
yuri
7808865080 import csv label 2015-10-19 15:27:09 +03:00
yuri
5283d1b6ae Merge branch 'master' of https://github.com/espocrm/espocrm 2015-10-16 17:20:47 +03:00
yuri
da6546779a Merge branch 'hotfix/3.7.3' 2015-10-16 17:20:25 +03:00
yuri
404e2de3b6 fix email isRead 2015-10-16 17:19:51 +03:00
Yuri Kuznetsov
9ba2611f3f Update README.md 2015-10-16 14:22:49 +03:00
yuri
f02dabc540 industry list 2015-10-16 13:50:42 +03:00
yuri
c29da46a97 fix client side access denied 2015-10-16 13:07:37 +03:00
yuri
b7702d2418 order fields in entity manager 2015-10-16 12:40:15 +03:00
yuri
2bc56db4c6 fix edit view link to detail 2015-10-16 12:33:59 +03:00
yuri
dd0ef5455e fix 2015-10-16 10:40:45 +03:00
Yuri Kuznetsov
7cffefff1c Update README.md 2015-10-15 12:50:19 +03:00
yuri
a8396df12a Merge branch 'hotfix/3.7.2' 2015-10-15 12:06:44 +03:00
yuri
901bee6d3f fix campaign 2015-10-15 11:52:25 +03:00
yuri
3375eff719 Merge branch 'hotfix/3.7.2' 2015-10-14 15:13:59 +03:00
yuri
72a0415207 fix orderBy by alias 2015-10-14 13:03:08 +03:00
yuri
de69652137 fix id in model.set 2015-10-14 11:35:21 +03:00
yuri
f6b696aad6 Merge branch 'master' of https://github.com/espocrm/espocrm 2015-10-13 15:57:43 +03:00
yuri
e7018965c9 ajaxCall and Import not Duplicate 2015-10-13 15:57:30 +03:00
Yuri Kuznetsov
126eaed2ca Merge pull request #62 from PanuWeb/translateES
Spanish translations - es_ES (Complete)
2015-10-12 16:40:59 +03:00
yuri
8916b5eca8 Merge branch 'hotfix/3.7.2' 2015-10-12 15:17:43 +03:00
yuri
dda34dce5f notImportable linkMultiple 2015-10-12 10:45:33 +03:00
yuri
1cd2d6b35e target lists field not importable 2015-10-12 10:43:50 +03:00
yuri
9888ec8a6f fix global searct 2015-10-12 10:30:16 +03:00
PanuWeb
e2d5592d0a Spanish translations - es_ES (Complete) 2015-10-10 14:37:31 -03:00
PanuWeb
242d1fcfe5 Spanish translations - es_ES (90/100) 2015-10-10 13:32:46 -03:00
PanuWeb
77b0ebfa76 Spanish translations - es_ES (80/100) 2015-10-09 22:24:24 -03:00
yuri
ea5321577a fix target list import 2015-10-08 17:55:48 +03:00
yuri
89508ccc3e change email labels 2015-10-08 10:54:33 +03:00
yuri
24d80f86e5 Merge branch 'hotfix/3.7.2' 2015-10-07 16:53:34 +03:00
yuri
23c772e029 fix config 2015-10-07 16:53:22 +03:00
yuri
e0b6c2cf6f Merge branch 'hotfix/3.7.2' 2015-10-07 15:00:31 +03:00
yuri
e67387d9ea additionalSelectColumns 2015-10-07 15:00:03 +03:00
yuri
aac356d2a3 Merge branch 'hotfix/3.7.2' 2015-10-07 12:22:21 +03:00
yuri
2156094407 cleanup 2015-10-07 12:21:59 +03:00
yuri
54a6bc9c87 Merge branch 'hotfix/3.7.2' 2015-10-07 12:18:10 +03:00
yuri
03d5bf1ef2 tree impr 2015-10-07 12:18:01 +03:00
yuri
b12b3895ec Merge branch 'hotfix/3.7.2' 2015-10-07 12:08:21 +03:00
yuri
42f57409c8 list tree imp 2015-10-07 12:08:11 +03:00
yuri
69d7ce408d fix preferences layout 2015-10-07 11:24:52 +03:00
yuri
15b3c0440c lead converted panel change 2015-10-07 10:56:56 +03:00
yuri
e1f0715c4d email import: relate to converted entity if lead is converted 2015-10-07 10:35:07 +03:00
yuri
15aec72e97 fix double quick view 2015-10-07 10:33:47 +03:00
yuri
66eade5db7 v 2015-10-07 10:20:37 +03:00
yuri
ea733bb48e versuin 2015-10-07 10:05:31 +03:00
yuri
83d9d1d924 campaign statystic percentage 2015-10-06 13:19:30 +03:00
yuri
5935bb012d stream entity type capitalized 2015-10-06 12:05:34 +03:00
yuri
48139b2be8 fix nl_NL 2015-10-06 11:52:36 +03:00
yuri
415babde64 excluding target list 2015-10-06 11:28:57 +03:00
yuri
f5f5f46c75 unsubscribe entirely 2015-10-05 14:58:45 +03:00
yuri
3d89e25349 label 2015-10-05 14:36:52 +03:00
yuri
1f57a01d5d linkMultiple field for search 2015-10-05 14:34:16 +03:00
yuri
7c890aa83a fix empty tablist 2015-10-02 17:23:02 +03:00
yuri
62a29c86ab fix record controller 2015-10-02 15:27:34 +03:00
yuri
bd57b6bb8e detailLayout param 2 2015-10-02 15:10:13 +03:00
yuri
9ab1d16ea0 detailLayout param 2015-10-02 15:09:39 +03:00
yuri
435aa28ca2 iconHtml for menu items 2015-10-01 13:11:05 +03:00
yuri
4bd375f154 fix notice 2015-09-30 17:22:15 +03:00
yuri
d6521f9176 de_DE 2015-09-30 15:07:20 +03:00
yuri
f8e0e4955a fix meeting onlymy 2015-09-30 15:06:34 +03:00
yuri
7957359c15 fix prev 2015-09-30 11:41:53 +03:00
yuri
bdc3731b9a fix select manager 2015-09-30 11:39:11 +03:00
yuri
6b8af1220b opp lost filter 2015-09-30 10:24:39 +03:00
yuri
58fffeaa84 fix typo 2015-09-29 17:56:35 +03:00
yuri
5806785286 fix email notification dups 2015-09-29 11:56:15 +03:00
yuri
2f2d9b5f6f fix roles 2015-09-29 10:27:02 +03:00
yuri
5af20c1ee0 merge targetLists 2015-09-28 16:41:28 +03:00
yuri
7620be3b40 ve 2015-09-28 14:26:20 +03:00
yuri
86f591b409 trim emails when search 2015-09-28 11:18:12 +03:00
yuri
533dfe24d0 default dashlet options 2015-09-28 11:08:13 +03:00
yuri
10c51dc46e target lists panels 2015-09-28 10:55:58 +03:00
yuri
a9d24a1e09 fix mass update 2015-09-28 10:45:30 +03:00
yuri
0cfe093701 fix german language 2015-09-28 10:29:50 +03:00
yuri
11ec99fe6a duplicate email template 2015-09-28 10:26:59 +03:00
yuri
b07e5a6da2 campaign list layout 2015-09-28 10:24:10 +03:00
yuri
151738f896 fix tracking img 2015-09-28 10:23:20 +03:00
yuri
075a370e7a fix log opened 2015-09-25 16:46:55 +03:00
yuri
e7aa147b90 fix import 2015-09-25 15:41:38 +03:00
yuri
2e988fab6d css fiux 2015-09-25 14:51:56 +03:00
yuri
b38e03a53a cleanup 2015-09-25 11:32:17 +03:00
yuri
68e01f9e6f fix backbone id 2015-09-25 11:25:24 +03:00
yuri
4d32955e28 wysywyg field 2015-09-24 17:30:39 +03:00
yuri
13a2aa7f03 decrease wysywyg height 2015-09-24 17:17:17 +03:00
yuri
ac91087b82 header menu improvements 2015-09-24 12:55:47 +03:00
yuri
57a4a30402 updade history panel on activities changes 2015-09-24 12:26:27 +03:00
yuri
dd3ee8d69a update backbone and improve list view listening 2015-09-24 12:05:22 +03:00
yuri
accbc9582e add email settings 2015-09-24 10:47:26 +03:00
yuri
4a2845d7a5 showNewRecords stream panel 2015-09-23 15:41:13 +03:00
yuri
9b2ae8992f stream fetch new 2015-09-23 15:26:20 +03:00
yuri
1bb0038be8 dont reset filters if primary filter changed 2015-09-23 11:32:38 +03:00
yuri
6c4e73f1c4 created by field in export 2015-09-23 09:53:02 +03:00
yuri
72f5dbea87 created fields in export 2015-09-23 09:52:10 +03:00
yuri
aeb8411695 de_DE 2015-09-23 09:49:47 +03:00
yuri
df6db9bd47 changes in mass email 2015-09-22 16:26:13 +03:00
yuri
ab17044da9 grunt 2015-09-22 15:41:38 +03:00
yuri
7356bd98ab fix filter 2015-09-22 13:23:44 +03:00
yuri
a631e52f63 fix usubscribe email link 2015-09-22 12:50:23 +03:00
yuri
b925100df7 fix importer 2015-09-22 12:49:47 +03:00
yuri
eeba65440c email template info 2015-09-22 11:46:02 +03:00
yuri
95f72933a4 fix header menu 2015-09-22 11:28:20 +03:00
yuri
4b03e74662 update zend 2015-09-22 10:27:20 +03:00
yuri
b316eeb3eb fix attachment download 2015-09-21 18:44:03 +03:00
yuri
53e6904ce1 fix campaign 2015-09-21 12:38:26 +03:00
yuri
e2b9647cf1 not render list after sync if modal is opened 2015-09-21 12:02:50 +03:00
yuri
1145406531 remove queue after mass email remove 2015-09-21 11:41:14 +03:00
yuri
9ce65c9a2b fix email account 2015-09-18 17:20:43 +03:00
yuri
2ec1db8379 refactor select manager 2 2015-09-18 17:19:23 +03:00
yuri
8074baef56 activities dashlet 2015-09-18 15:44:19 +03:00
yuri
4584211c04 select manager refactoring 2015-09-18 13:51:00 +03:00
yuri
290099641b dont show declined meetings/calls in only my 2015-09-18 12:00:49 +03:00
yuri
d0c3044e8e dont show declined in calendar 2015-09-18 11:58:44 +03:00
yuri
4e983ff440 user calendar 2015-09-17 17:38:48 +03:00
yuri
9aba8b0d8f format address in js 2015-09-17 15:26:08 +03:00
yuri
ee6ef6694f custom tab list 2015-09-17 15:01:11 +03:00
yuri
8330137c4e fixes with assignment in mass update and autopopulate 2015-09-17 13:18:05 +03:00
yuri
bd420ad963 clear roles cache on team change 2015-09-17 12:18:12 +03:00
yuri
e03bedf439 job improvement 2015-09-17 11:46:05 +03:00
yuri
5cba246bb2 improve link 2 2015-09-17 11:21:26 +03:00
yuri
3490c16285 link select improvements 2015-09-17 11:19:33 +03:00
yuri
957fda9e8e clear cache if user changed roles 2015-09-17 11:00:21 +03:00
yuri
b940adc341 clear roles cache after role change 2015-09-17 10:46:18 +03:00
yuri
f44a093ea9 acl for activities 2015-09-16 15:53:21 +03:00
yuri
0b6dc1ff5f acl attendees 2015-09-16 15:41:28 +03:00
yuri
907eb5feb5 opted out remove 2015-09-16 15:17:14 +03:00
yuri
17a339c318 target list no remove 2015-09-16 14:24:49 +03:00
yuri
3bea161618 tooltip 2015-09-16 12:50:57 +03:00
yuri
b39a4a3624 track opened 2015-09-16 12:46:28 +03:00
yuri
2530d13d25 mass email test send 2015-09-16 12:26:19 +03:00
yuri
67e152c923 mass email dev 2015-09-15 15:38:58 +03:00
yuri
4934d4ad95 cleanup 2015-09-15 15:17:34 +03:00
yuri
9a072949fd lead listSmall change 2015-09-15 15:15:55 +03:00
yuri
6e5f8676a1 campaign dev 2015-09-15 14:59:03 +03:00
yuri
5a52484295 panel filters 2015-09-15 12:41:30 +03:00
yuri
a3338b0db7 mass email dev 2015-09-15 11:40:27 +03:00
yuri
d212d4a193 dev 2015-09-11 17:45:49 +03:00
yuri
e3f9a0f607 dev 2015-09-11 17:02:01 +03:00
yuri
91b7635d26 dev 2015-09-11 16:47:50 +03:00
yuri
532581cb50 small change 2015-09-11 11:47:19 +03:00
yuri
9b4a3a8ca9 fix lang 2015-09-11 11:43:01 +03:00
yuri
564c397258 Merge branch 'hotfix/3.6.3' 2015-09-11 11:27:45 +03:00
yuri
22e81898c0 fix external account 2015-09-11 11:27:30 +03:00
yuri
ec863fe09a dev 2015-09-11 11:25:11 +03:00
yuri
cb9a1d31d8 email account readOnl 2015-09-11 11:05:00 +03:00
yuri
0e8d0495a9 dev 2015-09-10 17:58:03 +03:00
yuri
fa19e5ebce dev 2015-09-10 17:27:27 +03:00
yuri
b67e8960fa Merge branch 'hotfix/3.6.3' 2015-09-10 11:02:06 +03:00
yuri
6efd697a1e fix email import counter 2015-09-10 10:57:48 +03:00
yuri
a9379dcf0a Merge branch 'hotfix/3.6.3' 2015-09-10 10:41:44 +03:00
yuri
9798f399bd fix import time 2015-09-10 10:41:37 +03:00
yuri
a520510f9b Merge branch 'hotfix/3.6.3' 2015-09-10 10:36:21 +03:00
yuri
fbfe82870f fix import dates 2015-09-10 10:36:00 +03:00
yuri
3b668f4dbd dev 2015-09-10 10:22:19 +03:00
yuri
62eb54d853 dev 2015-09-09 17:03:37 +03:00
yuri
81335454fd fix insert template 2015-09-09 17:03:32 +03:00
yuri
1b33221fc1 autoincrement field change 2015-09-09 09:49:01 +03:00
yuri
152c96838f detailSmall layouts changes 2015-09-09 09:42:18 +03:00
yuri
f78af9b204 dev 2015-09-08 17:51:00 +03:00
yuri
302b9e759f campaign log acl 2015-09-08 17:29:00 +03:00
yuri
dab7e329df dev 2015-09-08 17:22:36 +03:00
yuri
6a93fe77ca dev 2015-09-08 15:56:00 +03:00
yuri
0e21a9bf91 dev 2015-09-08 15:18:44 +03:00
yuri
723f504a56 dev 2015-09-08 12:21:49 +03:00
yuri
121b324532 add activities and tasks actions 2015-09-07 11:21:56 +03:00
yuri
c54a4eee95 varchar trim and system emails 2015-09-04 17:17:41 +03:00
yuri
2a03797436 return list fix 2015-09-04 16:11:49 +03:00
yuri
55dc4d1e77 loader change 2015-09-04 15:14:39 +03:00
yuri
cb51feef48 fix email importer 2015-09-04 13:24:28 +03:00
yuri
e75c957aad Merge branch 'hotfix/3.6.3' 2015-09-04 12:42:27 +03:00
yuri
e08624fae3 fix preferences controler 2015-09-04 12:42:09 +03:00
yuri
e8ac486d4a default select filters 2015-09-04 12:34:30 +03:00
yuri
1ded65b85d fix selectRelatedFilters 2015-09-04 12:14:23 +03:00
yuri
35b2f0e57e fix removeButton 2015-09-04 11:57:58 +03:00
yuri
d6ef8e1b33 fix list view return 2015-09-04 11:36:19 +03:00
yuri
118025f646 fix currency 2015-09-03 16:31:41 +03:00
yuri
0888752e2a range fields 2015-09-03 15:59:13 +03:00
yuri
df5177a565 activities panel change 2015-09-03 12:15:45 +03:00
yuri
3f03770b6e refactor activities service 2015-09-03 11:59:19 +03:00
yuri
27ebac0722 app status styles 2015-09-03 11:25:09 +03:00
yuri
e5b46bc547 email replyTo 2015-09-03 11:05:20 +03:00
yuri
468a236ce1 fix edit layout column 2015-09-02 15:40:18 +03:00
yuri
6fda3dd147 mass update layout fix 2015-09-02 15:17:09 +03:00
yuri
9f0705c82d pass event obj to actions 2015-09-02 14:02:48 +03:00
yuri
0ab0de2371 fix linkMultipeCategoryTree 2015-09-02 13:18:47 +03:00
yuri
ba7d79ef39 Merge branch 'master' of https://github.com/espocrm/espocrm 2015-09-02 11:56:39 +03:00
yuri
c0e51d85b5 vertical theme width 2015-09-02 11:56:30 +03:00
yuri
80334d59ff back route and isReturn 2015-09-02 11:20:00 +03:00
yuri
759ad1a8d3 rename scheduled job 2015-09-02 10:05:44 +03:00
yuri
7c569d3880 fix global search padding 2015-09-02 10:03:14 +03:00
yuri
7b21b82a2e email to case fix 2015-09-02 10:00:15 +03:00
yuri
5e86c5da8c list view return imporovement 2015-09-02 09:40:17 +03:00
Yuri Kuznetsov
9998f82596 Update README.md 2015-09-01 21:42:29 +03:00
Yuri Kuznetsov
9cb3f5fb3a Update README.md 2015-09-01 21:40:40 +03:00
yuri
dcce3335cd returnDispatchParams 2015-09-01 16:30:41 +03:00
yuri
5f9b4d99f3 list view stored 2015-09-01 16:02:39 +03:00
yuri
a6f4111383 automatically accept meeting/call for current user 2015-09-01 12:58:37 +03:00
yuri
569180ed86 email important 2015-09-01 12:31:08 +03:00
yuri
f9cc21a06d import update 2015-08-31 15:19:09 +03:00
yuri
e5ad31a965 prevent loop 2015-08-31 12:24:46 +03:00
yuri
5252d63260 lastXDays and nextXDays filters 2015-08-31 12:10:44 +03:00
yuri
a9fea0b9f5 change default jobs 2015-08-31 11:27:45 +03:00
yuri
cee91eb6af email replied 2015-08-31 11:23:39 +03:00
yuri
c61765cc31 Merge branch 'hotfix/3.6.3' 2015-08-28 15:50:28 +03:00
yuri
03d3884bf4 follow fix 2015-08-28 15:50:09 +03:00
yuri
cb01caddd3 Merge branch 'hotfix/3.6.2' 2015-08-28 14:30:56 +03:00
yuri
725a2be959 fix resize 3 2015-08-28 14:30:17 +03:00
yuri
45d2cec423 Merge branch 'hotfix/3.6.2' 2015-08-28 14:24:41 +03:00
yuri
08b576105c fix nav resize 2 2015-08-28 14:24:27 +03:00
yuri
6d86c65ea6 Merge branch 'hotfix/3.6.2' 2015-08-27 17:13:01 +03:00
yuri
0e19fe087b fix email restricted appearance 2015-08-27 17:12:42 +03:00
yuri
2571f967b7 displayTotalCount option 2015-08-27 16:04:21 +03:00
yuri
a93d5a0678 change email filter descriptipon 2015-08-27 16:00:21 +03:00
yuri
be1647548a email filters final 2015-08-27 15:50:49 +03:00
yuri
91571fa47c fix readOnly and create 2015-08-27 15:43:05 +03:00
yuri
cf3220581f Merge branch 'hotfix/3.6.2' 2015-08-27 15:29:37 +03:00
yuri
44ddf9b400 fix acl manager 2015-08-27 15:29:30 +03:00
yuri
99b4f7eb5c email filters dev 2015-08-27 15:28:36 +03:00
yuri
803111b12f Merge branch 'hotfix/3.6.2' 2015-08-27 12:17:35 +03:00
yuri
9509d00fd4 readOnlyDisabled option 2015-08-27 12:16:53 +03:00
yuri
70eb562400 fix user limit 2015-08-27 12:04:10 +03:00
yuri
2ceb686198 Merge branch 'hotfix/3.6.2' 2015-08-27 10:29:33 +03:00
yuri
6f89a01c50 convert lead improvements 2015-08-27 10:29:07 +03:00
yuri
2d85106a1f dont error 500 if try to follow entity w/o stream 2015-08-27 10:10:41 +03:00
yuri
cefe304c2f filters 2 2015-08-26 16:30:45 +03:00
yuri
cbe4f0009b Merge branch 'hotfix/3.6.2' 2015-08-26 12:09:12 +03:00
yuri
a9cad90a02 hack issue with user theme and not rendered css 2015-08-26 12:07:53 +03:00
yuri
597d83c6f7 version 2015-08-25 16:18:16 +03:00
yuri
cbc3c3e921 fix theme 2015-08-25 16:17:03 +03:00
yuri
2d1aa77ddc email filter 2 2015-08-25 16:16:12 +03:00
yuri
5357061d52 campaign lead created change 2015-08-25 10:30:52 +03:00
yuri
13b7db63d0 add createdBy filters 2015-08-25 09:40:22 +03:00
yuri
62b0020c67 email filters dev 2015-08-24 17:33:43 +03:00
yuri
4512dfd420 refactor acl and assigmnent permissions, email filter entity 2015-08-24 16:50:54 +03:00
yuri
b1303cb50e rename hasAttachments 2015-08-24 15:07:47 +03:00
yuri
3facbc782b Merge branch 'hotfix/3.6.2' 2015-08-24 14:50:05 +03:00
yuri
cdcaf7cd24 fix auth tokens 2015-08-24 14:49:53 +03:00
yuri
dae249e4b2 Merge branch 'hotfix/3.6.2' 2015-08-24 12:10:29 +03:00
yuri
ce782ab8bd de_DE 2015-08-24 12:10:18 +03:00
yuri
2497ab6a5e hasAttachments icon 2015-08-24 12:03:40 +03:00
yuri
2d00b27fb6 translatedOptions param 2015-08-24 11:48:45 +03:00
yuri
8d179aa719 version 2015-08-20 15:36:41 +03:00
yuri
6688e19789 fix integration 2015-08-20 15:23:52 +03:00
yuri
1db8b94ea7 remove sticked panel 2015-08-20 14:40:16 +03:00
yuri
63a61349ea job name 3 2015-08-20 13:28:37 +03:00
yuri
811066a201 job name 2015-08-20 13:27:47 +03:00
yuri
0b547c26a2 fix jobs 2015-08-20 13:17:30 +03:00
yuri
15497b96d1 change colors 2015-08-20 12:11:14 +03:00
yuri
9c3cf0b8dd rename theme 2015-08-20 12:00:30 +03:00
yuri
eeaff7ac9d css fix 2015-08-20 11:54:35 +03:00
yuri
17e48c4e9f fix create 2015-08-20 11:02:23 +03:00
yuri
4a878c73be lang 2015-08-20 10:49:59 +03:00
yuri
f05e41afb6 global search margin 2015-08-18 15:27:24 +03:00
yuri
ba8e63c40b fix user 2015-08-18 12:47:42 +03:00
yuri
5d6b9b4785 fix email import 2015-08-18 12:32:45 +03:00
yuri
06c0a59632 fix hookManager 2 2015-08-18 11:19:03 +03:00
yuri
f6df48278c fix hookManager 2015-08-18 11:14:51 +03:00
yuri
8207684193 fix grantfile 2015-08-18 10:45:07 +03:00
yuri
49ac186f80 disable isReturn 2015-08-17 17:48:25 +03:00
yuri
4325e1591c return to list and edit attributes fix 2015-08-17 17:43:05 +03:00
yuri
16eb1e0b6d back button 2015-08-17 17:25:32 +03:00
yuri
68668acf57 fix calendar dashlet 2015-08-17 15:42:48 +03:00
yuri
5e5e82d6b6 lang 2015-08-17 15:35:19 +03:00
yuri
8e23ef59a3 lang 2015-08-17 15:34:44 +03:00
yuri
0213064217 fix preset filters dropdown 2015-08-17 12:55:06 +03:00
yuri
d360cbcb4b fix restrictedMode check 2015-08-17 11:22:06 +03:00
yuri
d1dea478f7 fix email notifications 2015-08-17 10:54:03 +03:00
yuri
778e7b335e request check fixes 2015-08-14 16:54:50 +03:00
yuri
5fc502c6a2 fix install css 2015-08-14 16:40:27 +03:00
yuri
ba5bd60931 fix xss in link multiple with role 2015-08-14 16:28:50 +03:00
yuri
dfb72bb3e1 lang change 2015-08-14 15:04:20 +03:00
yuri
c4880b77e6 layout reset to default 2015-08-14 15:02:32 +03:00
yuri
8aab9d17b1 controller action changes 2015-08-14 13:33:17 +03:00
yuri
205beb068c fix layouts 2015-08-14 12:26:55 +03:00
yuri
80cf2f2e10 fix mavbar css 2015-08-14 12:25:13 +03:00
yuri
5982b27b90 last 7 days filter 2015-08-14 12:12:38 +03:00
yuri
d696ca3013 returnUrl for list-edit 2015-08-14 11:46:16 +03:00
yuri
9d10218487 cleanup 2015-08-14 11:42:14 +03:00
yuri
b41ef6094a returnUrl for quick edit 2015-08-14 11:40:21 +03:00
yuri
9a9a69ace4 improve navbar for mobile view 2015-08-14 11:28:48 +03:00
yuri
1000139d01 dont fit modal height if window height is small 2015-08-14 09:47:10 +03:00
yuri
129984f4c6 unique joins 2015-08-13 17:42:03 +03:00
yuri
d665bc54e0 fix acl 2015-08-13 17:28:21 +03:00
yuri
69b027698d acl global search 2015-08-13 17:24:49 +03:00
yuri
6ffff16f06 global search pagination 2015-08-13 17:22:29 +03:00
yuri
79393f16d3 importove global search 2015-08-13 17:15:07 +03:00
yuri
5821a06f9e fix case 2015-08-13 15:02:28 +03:00
yuri
3eb4cf27f2 case - contact many-to-many 2015-08-13 14:54:31 +03:00
yuri
94c345c386 -sticked 2015-08-13 12:56:33 +03:00
yuri
6fe7853eb7 added new noification type message 2015-08-13 09:44:55 +03:00
yuri
c45ea08ab2 cleanup 2015-08-12 17:56:06 +03:00
yuri
04d41e9c86 fix iinsert image 2015-08-12 17:55:19 +03:00
yuri
2850cffc6a audited param 2015-08-12 16:28:12 +03:00
yuri
0cdc15ecaf rel panels filx 2015-08-12 15:13:22 +03:00
yuri
ee85ee369b select document filter 2015-08-12 15:08:57 +03:00
yuri
738e56cc63 field manager change 2015-08-12 14:43:11 +03:00
yuri
6b38e1561b fix pre 2015-08-11 16:55:22 +03:00
yuri
a56d8b7d1c default layoutSmall change 2015-08-11 16:53:37 +03:00
yuri
db6e5ee778 remove sticked from history panel 2015-08-11 15:46:03 +03:00
yuri
a0bf1af3d3 mass update for emails 2015-08-11 12:23:44 +03:00
yuri
5b47178162 createDisabled 2 2015-08-11 12:13:57 +03:00
yuri
3f0684c1ea createDisabled 2015-08-11 12:07:19 +03:00
yuri
d2bc49755d email address autocomplete 2 2015-08-11 11:52:07 +03:00
yuri
0502c1768b auto complete search by email address 2015-08-11 11:49:14 +03:00
yuri
cf7d21db32 keep emails unread 2015-08-11 11:15:16 +03:00
yuri
977fb47efb version 2015-08-10 17:03:31 +03:00
yuri
6c7a3adcdd email fix 2015-08-10 16:45:47 +03:00
yuri
3b22e08840 fix users activities 2015-08-10 16:34:18 +03:00
yuri
8d79524c62 extension.php 2015-08-10 15:37:32 +03:00
yuri
3c70f28dc0 ability to use standartizized view name 2015-08-10 15:00:50 +03:00
yuri
79b37e7047 dashlet row actions 2015-08-10 14:56:06 +03:00
yuri
3050d8b5b5 account history fix 2015-08-10 13:57:44 +03:00
yuri
231a40e4a8 notification entityRemoved 2015-08-10 13:45:01 +03:00
yuri
1f1c87513b set defaults 2015-08-10 12:26:51 +03:00
yuri
910822334e group email accounts 2015-08-10 10:56:51 +03:00
yuri
af02d721c3 try catch getMessage 2015-08-10 10:45:08 +03:00
yuri
faf7cb9acd lang 2015-08-10 10:33:56 +03:00
yuri
73869d5674 fix link multiple 2015-08-07 17:05:13 +03:00
yuri
f60732170e ability to disable field param in entity manager 2015-08-07 16:00:54 +03:00
yuri
aecf04a4f8 fix theme and user change 2015-08-07 15:41:06 +03:00
yuri
7a383912c8 system notification 2015-08-07 15:30:50 +03:00
yuri
21c288badf fix theme 2015-08-07 13:26:29 +03:00
yuri
65492ea1dc lead convertion follow 2015-08-07 12:08:58 +03:00
yuri
7fd10104cc task dashlet dont show deferred 2015-08-07 11:39:59 +03:00
yuri
ad85c6fa3f lang 2015-08-07 11:18:14 +03:00
yuri
e32bf06e4d lang typo 2015-08-07 10:56:26 +03:00
yuri
f363d77cb7 max size error message 2015-08-06 17:21:40 +03:00
yuri
8986b6f426 campaign budget 2015-08-06 16:24:48 +03:00
yuri
8b35c064c8 sacura vertical theme 2015-08-06 15:05:49 +03:00
yuri
da5ea180ab fix login 2015-08-06 14:55:33 +03:00
yuri
3aca557420 fix enum 2015-08-06 13:10:42 +03:00
yuri
ea723742c7 theme change 2015-08-06 12:55:32 +03:00
yuri
d85675f540 vertical theme 2015-08-06 12:21:00 +03:00
yuri
9b4aeb8e4c vertival theme dev 2015-08-05 18:23:20 +03:00
yuri
2c539b1fe6 jobs link 2015-08-05 16:05:33 +03:00
yuri
5f31e7e148 modal change var names 2015-08-05 15:53:25 +03:00
yuri
cc9227910f jobs 2015-08-05 15:49:23 +03:00
yuri
85d8dfe885 change diff 2015-08-05 14:06:33 +03:00
yuri
563179bec7 vertical theme mobile 2015-08-05 13:18:33 +03:00
yuri
386ada05d6 cleanup 2015-08-05 13:02:57 +03:00
yuri
70c2992282 theme in preferences 2015-08-05 12:35:57 +03:00
yuri
36d6483a51 ability to create custom note types 2015-08-05 10:36:27 +03:00
yuri
01039b9881 attachment multiple field 2015-08-05 10:25:45 +03:00
yuri
bbd1297302 attachment block 2015-08-05 09:38:41 +03:00
yuri
88c0d8810c css changes 2015-08-05 09:35:19 +03:00
yuri
b365bc17db fix record.base 2015-08-05 09:35:12 +03:00
yuri
3f24e64988 fix enum translation 2015-08-04 17:25:23 +03:00
yuri
7a5ce2f4ee fix theme 2015-08-04 17:11:37 +03:00
yuri
a410fb903a theme fixes 2015-08-04 16:21:27 +03:00
yuri
ba4004d720 theme fix 2015-08-04 16:07:51 +03:00
yuri
cdc980c2b6 theme fixes 2015-08-04 15:53:38 +03:00
yuri
3578cc9523 vertical theme 2015-08-04 15:49:35 +03:00
yuri
09ff1d1e5a mobile view collapse fix 2015-08-04 11:29:34 +03:00
yuri
8e4a6ef183 stick panels 2015-08-04 11:13:02 +03:00
yuri
0d111a6bd8 Opportunity listForAccount 2015-08-04 11:08:41 +03:00
yuri
3e503852db translate links 2015-08-04 10:55:23 +03:00
yuri
d3fe435115 theme changes 2015-08-04 09:51:07 +03:00
yuri
e6a0080c0e vertical theme 2015-08-03 17:06:12 +03:00
yuri
b8ddb72d3b color change 2015-08-03 14:45:49 +03:00
yuri
58953ca009 show total count 2015-08-03 14:43:21 +03:00
yuri
d4e98155d0 gitignore 2015-08-03 12:28:21 +03:00
yuri
86fabe3352 email: get rid of assigned user 2015-08-03 12:00:06 +03:00
yuri
c5ccf8e6da Enum is Sorted 2015-08-03 11:43:49 +03:00
yuri
b7e0a0de23 Merge branch 'hotfix/3.5.3' 2015-08-03 11:12:34 +03:00
yuri
9c2a18f0aa indestry options added 2015-08-03 11:11:50 +03:00
yuri
aa95f2cf88 change currency field 2015-08-03 11:00:27 +03:00
yuri
8dd7f262a2 color change 2015-07-31 17:22:46 +03:00
yuri
b76feba080 remove css 2015-07-31 17:18:57 +03:00
yuri
1b5aea85ba themes 2015-07-31 17:18:24 +03:00
yuri
c89c7f5e0e stylesheet 2015-07-31 11:25:58 +03:00
yuri
bcaaf539be remove fields from settings 2015-07-31 11:23:06 +03:00
yuri
48f0988373 stylesheet 2015-07-31 11:17:22 +03:00
yuri
a0c0d37bfd navbar fix 2015-07-31 10:44:03 +03:00
yuri
9c696fe8d6 navbar fix 2015-07-31 10:43:38 +03:00
yuri
224e3475d8 Merge branch 'hotfix/3.5.3' 2015-07-30 17:05:29 +03:00
yuri
841c5f85bd fix email import 2015-07-30 14:38:23 +03:00
yuri
6745419a4f install lang fix 2015-07-30 11:40:21 +03:00
yuri
6bf9bb875a email address search improvement 2015-07-30 11:12:49 +03:00
yuri
d6e1322775 Merge branch 'hotfix/3.5.3' 2015-07-30 10:07:41 +03:00
yuri
bb0e97160c fix task layout 2015-07-30 10:00:48 +03:00
yuri
8124ceea6b email import fix 2015-07-29 16:48:53 +03:00
yuri
b5cb0c0881 email import fix 2015-07-29 16:43:46 +03:00
yuri
8747ccc105 show error message reason 2015-07-29 15:06:03 +03:00
yuri
8b0147484c userLimit 2015-07-29 13:56:18 +03:00
yuri
233037a1eb adminPanelIframeUrl 2015-07-29 11:16:19 +03:00
yuri
11446ef857 dashlet actions 2015-07-29 10:21:04 +03:00
Taras Machyshyn
4403131235 Merge branch 'hotfix/3.5.3' 2015-07-29 09:47:43 +03:00
Taras Machyshyn
9dde3d0645 Fixed a bug for module orders 2015-07-29 09:46:49 +03:00
yuri
2fcf00ef4f Merge branch 'stable' 2015-07-28 17:52:43 +03:00
yuri
1139cb242b fix dashboard 2015-07-28 17:13:33 +03:00
yuri
796e1894ac added test 2015-07-28 16:03:05 +03:00
yuri
8d15bdab3c fix call layout 2015-07-28 15:11:00 +03:00
yuri
e94564b5e7 Merge branch 'hotfix/3.5.2' 2015-07-28 14:38:49 +03:00
yuri
67b56345e6 fix email iOS 2015-07-28 14:36:25 +03:00
yuri
9ac2fe1534 version 2015-07-27 16:39:00 +03:00
yuri
08cf619807 fix attachment acl and bad requests 2015-07-27 16:37:11 +03:00
yuri
380aad2f4d fix import phone 2015-07-27 12:28:33 +03:00
yuri
d3a8e57fdf fix loader 2015-07-27 11:58:35 +03:00
yuri
c6542c0698 restrictedMode 2015-07-27 11:02:42 +03:00
yuri
f74959ab00 fix user layout 2015-07-27 10:48:42 +03:00
yuri
2bb28ac270 Merge branch 'stable' 2015-07-24 17:04:59 +03:00
yuri
faf3350aab vesrion 2015-07-24 16:56:28 +03:00
yuri
9fc4e0b06e fix import 2015-07-24 14:58:00 +03:00
yuri
4c3ecf0b3a fix target list 2015-07-24 14:13:43 +03:00
yuri
b1a345963d fix email address field 2015-07-24 12:49:44 +03:00
yuri
ca64d7c8ec Merge branch 'hotfix/3.5.1' 2015-07-23 16:10:25 +03:00
yuri
f62db8b943 fix list 2015-07-23 16:09:51 +03:00
yuri
ce2a2a03a3 list changes 2015-07-23 14:50:15 +03:00
yuri
d947223b9b fix wysiwyg 2015-07-23 14:41:51 +03:00
yuri
b1aea34137 de_DE 2015-07-23 10:45:25 +03:00
yuri
ae6d03ce2b update summernote 2015-07-22 14:50:42 +03:00
yuri
fa4b459d58 update jquery 2015-07-22 10:52:58 +03:00
yuri
372a8d0d69 upgrade link change 2015-07-21 12:18:25 +03:00
yuri
bd413a75a0 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2015-07-20 14:37:42 +03:00
Taras Machyshyn
9bb0d123d3 Improved russian translation 2015-07-20 12:20:41 +03:00
yuri
59240fb090 entity list editable 2015-07-20 10:42:41 +03:00
yuri
598852484b change email to contact 2015-07-17 16:49:17 +03:00
yuri
18548c515e email address to contact change 2015-07-17 16:43:44 +03:00
yuri
6190017919 cleanup 2015-07-17 12:53:15 +03:00
yuri
e49cbcad3f search select text 2015-07-17 11:48:19 +03:00
yuri
2a22b94b95 bull update 2015-07-17 11:41:29 +03:00
yuri
739374de59 improve email address 2015-07-17 11:02:36 +03:00
yuri
03b8041acb email to contact 2 2015-07-16 17:59:26 +03:00
yuri
a31df6f2af from email to contact 2015-07-16 17:15:19 +03:00
yuri
64317389a8 clearnup 2015-07-16 15:51:58 +03:00
yuri
ab4552d064 fix task panel tabs 2015-07-16 11:46:00 +03:00
yuri
20281f8cbb cleanup 2015-07-16 11:35:55 +03:00
yuri
fb7db0f91d fix confirm leaveout 2015-07-15 15:19:02 +03:00
yuri
b3b0e9254f task attachments 2015-07-14 16:49:00 +03:00
yuri
03ffc7727d template fields 2015-07-14 13:04:34 +03:00
yuri
59a4f88eeb Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2015-07-13 17:38:45 +03:00
yuri
d504ab8f54 fix email template 2015-07-13 17:38:26 +03:00
Taras Machyshyn
627c167ef7 Added title tranlation for Integration Entity 2015-07-13 17:10:45 +03:00
yuri
656c9b1eee pdf font 2015-07-13 16:57:03 +03:00
yuri
92f319a2d9 template 2015-07-13 15:22:48 +03:00
yuri
da1f96595f entity manager fix 2015-07-13 11:25:36 +03:00
yuri
21568efa2c hide template entity 2015-07-13 10:07:14 +03:00
yuri
8a75a5a71b es_ES fix 2015-07-13 10:05:37 +03:00
yuri
012e4d609d fix select related 2015-07-13 10:03:42 +03:00
yuri
5e66d2e2c1 fix save issue 2015-07-10 18:37:58 +03:00
yuri
49ae22e048 public load addition fields 2015-07-10 17:31:42 +03:00
yuri
5d92d14125 fix 2015-07-10 17:19:58 +03:00
yuri
b6d52d3c97 template 2015-07-10 17:19:14 +03:00
yuri
7e2d445db8 pdf 2015-07-10 15:59:15 +03:00
yuri
2325ad695f cleanup 2015-07-10 15:55:59 +03:00
yuri
c499b06baa Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2015-07-10 15:48:35 +03:00
yuri
a03a512846 remove pdf from lead 2015-07-10 15:48:20 +03:00
yuri
1e6062bd10 update timezone 2015-07-10 14:51:34 +03:00
yuri
2c90558785 fix category loop 2015-07-10 14:40:29 +03:00
Taras Machyshyn
f6071bad41 Merge branch 'hotfix/3.4.3' 2015-07-10 12:44:43 +03:00
Taras Machyshyn
a09120f39e Merge branch 'hotfix/3.4.3' of ssh://172.20.0.1/var/git/espo/backend into hotfix/3.4.3 2015-07-10 12:42:40 +03:00
Taras Machyshyn
8fb7cbdfcf Espo installation, message error fixes 2015-07-10 12:42:09 +03:00
yuri
3e8da12410 pdf 2015-07-10 12:01:23 +03:00
yuri
d60213e93f pdf 2015-07-10 11:45:32 +03:00
yuri
0864f7d604 pdf 2015-07-09 17:57:16 +03:00
yuri
6fb2112e40 pdf 2015-07-09 17:18:27 +03:00
yuri
65bb063c2c fix email template 2015-07-09 16:06:31 +03:00
yuri
75b2c91baa object 2015-07-09 15:49:01 +03:00
yuri
530be71fdd acl: no access if scope is not in acl table 2015-07-09 15:17:07 +03:00
yuri
c064b8fa80 template 2015-07-09 14:55:34 +03:00
yuri
b2b0ed82e5 test addition 2015-07-09 11:33:36 +03:00
yuri
71a5e1ab22 number 2015-07-09 11:30:56 +03:00
yuri
371b140056 htmlizer\ 2015-07-08 15:40:52 +03:00
yuri
5555383b1e template fix 2015-07-07 16:40:46 +03:00
yuri
ffe824e405 remove sent storing from layout 2015-07-07 14:57:42 +03:00
yuri
6586785415 imap sent storing 2015-07-07 13:55:02 +03:00
yuri
8a2554ef28 fix preferences layout 2015-07-07 12:15:28 +03:00
yuri
ec2ddc429a version 2015-07-06 10:55:37 +03:00
yuri
1754b8e7b9 fix layouts 2015-07-03 11:16:40 +03:00
yuri
2e20b24d04 fix layouts 2015-07-03 11:14:39 +03:00
yuri
5da3df3cd2 format number fields 2015-07-03 11:02:04 +03:00
yuri
61d428a4a5 int field none 2015-07-03 10:46:45 +03:00
yuri
a941f0c5da fix wysiwyg 2015-07-03 10:01:26 +03:00
yuri
199d0a956a detail small 2 columns 2015-07-02 17:25:38 +03:00
yuri
105ec0f441 rename delete 2015-07-02 16:52:50 +03:00
yuri
062effd39a fix imap 2015-07-02 15:57:04 +03:00
yuri
3ac5c71736 update zend 2015-07-02 15:34:12 +03:00
yuri
97d7796f9d improve password change 2015-07-02 15:10:01 +03:00
yuri
8cd4fe5891 stream filter 2015-07-02 12:32:14 +03:00
yuri
77df445c03 signature with template 2015-07-02 10:18:16 +03:00
yuri
a510bb4ea0 ddefine 2015-07-01 16:12:24 +03:00
yuri
48883211ee email templates link 2015-07-01 15:58:29 +03:00
yuri
8b77f181da define 2015-07-01 15:51:58 +03:00
yuri
88dbc988ca minified js change 2015-07-01 15:07:44 +03:00
yuri
0ecd387ef8 version 2015-07-01 14:54:56 +03:00
yuri
2c4cc20005 fix shared email 2015-07-01 12:48:04 +03:00
yuri
b25c115913 define 2015-07-01 10:34:12 +03:00
yuri
e46921ac33 define 2015-06-30 17:10:19 +03:00
yuri
dab213ea01 define 2015-06-30 17:01:59 +03:00
yuri
7f058b8591 define 2015-06-30 16:48:49 +03:00
yuri
76cf945d40 define 2015-06-30 14:44:09 +03:00
yuri
c5850d18da define changes 2015-06-30 14:39:50 +03:00
yuri
645cdc440c define 2015-06-30 11:41:59 +03:00
yuri
6e910e002e define 2015-06-30 11:26:14 +03:00
yuri
cc4de320fd define 2015-06-30 11:14:42 +03:00
yuri
7565492666 define 2015-06-29 16:21:45 +03:00
yuri
878d74bfa5 fix tests 2015-06-29 12:42:48 +03:00
yuri
ee2d8b3f00 Merge branch 'hotfix/3.4.3' 2015-06-26 15:31:31 +03:00
yuri
ebd35638b2 create/select relation panel hooks 2015-06-26 15:31:02 +03:00
yuri
6372c7a22e panel events fix 2015-06-26 15:25:34 +03:00
yuri
a404f7f196 Merge branch 'hotfix/3.4.3' 2015-06-24 12:38:20 +03:00
yuri
0013ca382a fix translateOption 2015-06-24 12:38:11 +03:00
yuri
a9c904afa7 Merge branch 'hotfix/3.4.3' 2015-06-24 11:41:31 +03:00
yuri
a0be338676 fix variable 2015-06-24 11:41:02 +03:00
yuri
58d0f2bd98 fix followers 2015-06-23 18:12:22 +03:00
yuri
4c92d54119 Merge branch 'hotfix/3.4.3' 2015-06-23 16:17:08 +03:00
yuri
711b2df143 Merge branch 'hotfix/3.4.3' of ssh://172.20.0.1/var/git/espo/backend into hotfix/3.4.3 2015-06-23 16:16:51 +03:00
yuri
0307900942 acl dashlet 2015-06-23 16:14:43 +03:00
yuri
4c60898002 cleanup 2015-06-23 14:41:38 +03:00
yuri
4d350b256b fix fatal 2015-06-23 14:36:40 +03:00
yuri
d41704f1b1 Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend 2015-06-23 11:37:06 +03:00
yuri
5bbb5ee937 fix test connection error msg 2015-06-23 11:36:01 +03:00
yuri
50e825b7a0 layout change 2015-06-23 11:31:40 +03:00
yuri
dc036225be fix view helper 2015-06-23 11:29:52 +03:00
Taras Machyshyn
c5a8df84f7 Merge branch 'hotfix/3.4.3' 2015-06-23 11:16:41 +03:00
Taras Machyshyn
7ad6c495a6 Improvements 2015-06-23 11:13:21 +03:00
yuri
e8c217e468 followed bool filter 2015-06-18 17:17:52 +03:00
yuri
9e32298d42 css 2015-06-17 16:38:00 +03:00
yuri
e4d833e49f css 2015-06-17 11:39:49 +03:00
yuri
8505f583f4 css 2015-06-17 11:38:24 +03:00
yuri
c1de2d9bd5 fix css 2015-06-16 11:34:11 +03:00
yuri
d192e0aabf fix css 2015-06-16 11:25:08 +03:00
yuri
fb5b464bf6 fix enum 2015-06-15 12:25:17 +03:00
yuri
eb71379562 fix unicode and multi enum storing 2015-06-15 12:17:49 +03:00
yuri
b603543537 layouts 2015-06-15 10:22:43 +03:00
1433 changed files with 30220 additions and 6532 deletions

5
.gitignore vendored
View File

@@ -9,7 +9,10 @@
/client
/test.php
/main.html
/frontend/client/css/bootstrap.css
/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/*
composer.phar
vendor/

View File

@@ -15,6 +15,7 @@ DirectoryIndex index.php index.html
RewriteRule ^/?data/logs/ - [F]
RewriteRule ^/?data/cache/ - [F]
RewriteRule ^/?data/upload/ - [F]
RewriteRule ^/?data/\.backup/ - [F]
RewriteRule ^/?application/ - [F]
RewriteRule ^/?custom/ - [F]
RewriteRule ^/?vendor/ - [F]

View File

@@ -21,7 +21,7 @@
module.exports = function (grunt) {
var jsFilesToMinify = [
'client/lib/jquery-2.0.2.min.js',
'client/lib/jquery-2.1.4.min.js',
'client/lib/underscore-min.js',
'client/lib/backbone-min.js',
'client/lib/handlebars.js',
@@ -36,34 +36,8 @@ module.exports = function (grunt) {
'client/lib/bull.min.js',
'client/src/namespace.js',
'client/src/exceptions.js',
'client/src/app.js',
'client/src/utils.js',
'client/src/storage.js',
'client/src/loader.js',
'client/src/pre-loader.js',
'client/src/ui.js',
'client/src/acl.js',
'client/src/model.js',
'client/src/model-offline.js',
'client/src/metadata.js',
'client/src/language.js',
'client/src/cache.js',
'client/src/controller.js',
'client/src/router.js',
'client/src/date-time.js',
'client/src/field-manager.js',
'client/src/search-manager.js',
'client/src/collection.js',
'client/src/multi-collection.js',
'client/src/view-helper.js',
'client/src/layout-manager.js',
'client/src/model-factory.js',
'client/src/collection-factory.js',
'client/src/models/settings.js',
'client/src/models/user.js',
'client/src/models/preferences.js',
'client/src/controllers/base.js',
'client/src/view.js',
'client/src/utils.js'
];
grunt.initConfig({
@@ -72,7 +46,7 @@ module.exports = function (grunt) {
mkdir: {
tmp: {
options: {
mode: 0775,
mode: 0755,
create: [
'build/tmp',
]
@@ -85,22 +59,44 @@ module.exports = function (grunt) {
final: ['build/tmp'],
},
less: {
bootstrap: {
espo: {
options: {
yuicompress: true,
},
files: {
'frontend/client/css/bootstrap.css': 'frontend/less/espo/main.less',
'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.min.css': [
'frontend/client/css/bootstrap.css',
'frontend/client/css/datepicker.css',
'frontend/client/css/jquery.timepicker.css',
'build/tmp/client/css/espo.css': [
'frontend/client/css/espo.css',
]
}
},
@@ -157,6 +153,7 @@ module.exports = function (grunt) {
'rebuild.php',
'clear_cache.php',
'upgrade.php',
'extension.php',
'index.php',
'LICENSE.txt',
'.htaccess',
@@ -191,6 +188,16 @@ module.exports = function (grunt) {
'build/EspoCRM-<%= pkg.version %>/**/*.html',
'build/EspoCRM-<%= pkg.version %>/**/*.txt',
]
},
folders: {
options: {
mode: '755'
},
src: [
'build/EspoCRM-<%= pkg.version %>/install',
'build/EspoCRM-<%= pkg.version %>/api',
'build/EspoCRM-<%= pkg.version %>/api/v1',
]
}
},
replace: {

View File

@@ -631,29 +631,29 @@ to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
EspoCRM - Open Source CRM
Copyright (C) 2014 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
EspoCRM is free software: you can redistribute it and/or modify
This program 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,
This program 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/>.
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
EspoCRM Copyright (C) 2014 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
EspoCRM comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.

View File

@@ -40,20 +40,24 @@ You need to have nodejs and Grunt CLI installed.
The build will be created in the `build` directory.
### How to make translation
### How to contribute
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.
### How to make a translation
Build po file with command:
`node po.js en_EN`
(specify needed language instead of en_EN)
After that tranlate the generated po file.
After that translate the generated po file.
Build json files from the translated po file:
1. Put your po file espocrm-en_EN.po to the `build` directory
1. Put your po file espocrm-en_EN.po into `build` directory
2. Run `node lang.js en_EN`
The files will be created in build directory.
Json files will be created in build directory grouped by folders.
### License

View File

@@ -18,6 +18,13 @@
*
* 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');

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -0,0 +1,53 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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;
use \Espo\ORM\Entity;
class EmailFilter extends \Espo\Core\Acl\Base
{
public function checkIsOwner(User $user, Entity $entity)
{
if ($entity->has('parentId') && $entity->has('parentType')) {
$parentType = $entity->get('parentType');
$parentId = $entity->get('parentId');
if (!$parentType || !$parentId) return;
$parent = $this->getEntityManager()->getEntity($parentType, $parentId);
if ($parent && $parent->has('assignedUserId') && $parent->get('assignedUserId') === $user->id) {
return true;
}
}
return;
}
}

View File

@@ -18,12 +18,21 @@
*
* 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,
\Espo\Core\Exceptions\Forbidden;
use \Espo\Core\Exceptions\NotFound;
use \Espo\Core\Exceptions\Error;
use \Espo\Core\Exceptions\Forbidden;
use \Espo\Core\Exceptions\BadRequest;
class Admin extends \Espo\Core\Controllers\Base
{
@@ -34,17 +43,19 @@ class Admin extends \Espo\Core\Controllers\Base
}
}
public function actionRebuild($params, $data)
public function postActionRebuild($params, $data, $request)
{
if (!$request->isPost()) {
throw new BadRequest();
}
$result = $this->getContainer()->get('dataManager')->rebuild();
return $result;
}
public function actionClearCache($params, $data)
public function postActionClearCache($params, $data)
{
$result = $this->getContainer()->get('dataManager')->clearCache();
return $result;
}
@@ -55,8 +66,13 @@ class Admin extends \Espo\Core\Controllers\Base
return $scheduledJob->getAllNamesOnly();
}
public function actionUploadUpgradePackage($params, $data)
public function postActionUploadUpgradePackage($params, $data)
{
if ($this->getConfig()->get('restrictedMode')) {
if (!$this->getUser()->get('isSuperAdmin')) {
throw new Forbidden();
}
}
$upgradeManager = new \Espo\Core\UpgradeManager($this->getContainer());
$upgradeId = $upgradeManager->upload($data);
@@ -68,10 +84,15 @@ class Admin extends \Espo\Core\Controllers\Base
);
}
public function actionRunUpgrade($params, $data)
public function postActionRunUpgrade($params, $data)
{
$upgradeManager = new \Espo\Core\UpgradeManager($this->getContainer());
if ($this->getConfig()->get('restrictedMode')) {
if (!$this->getUser()->get('isSuperAdmin')) {
throw new Forbidden();
}
}
$upgradeManager = new \Espo\Core\UpgradeManager($this->getContainer());
$upgradeManager->install($data);
return true;

View File

@@ -18,6 +18,13 @@
*
* 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;
@@ -44,7 +51,7 @@ class App extends \Espo\Core\Controllers\Base
);
}
public function actionDestroyAuthToken($params, $data)
public function postActionDestroyAuthToken($params, $data)
{
$token = $data['token'];
if (empty($token)) {

View File

@@ -18,25 +18,39 @@
*
* 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;
use \Espo\Core\Exceptions\BadRequest;
class Attachment extends \Espo\Core\Controllers\Record
{
public function actionUpload($params, $data)
{
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->getEntityManager()->saveEntity($attachment);
$this->getContainer()->get('fileManager')->putContents('data/upload/' . $attachment->id, $contents);
return array(
'attachmentId' => $attachment->id
);
);
}
}

View File

@@ -18,49 +18,56 @@
*
* 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 AuthToken extends \Espo\Core\Controllers\Record
{
{
protected function checkControllerAccess()
{
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
}
public function actionUpdate($params, $data)
{
throw new Forbidden();
}
}
public function actionCreate($params, $data)
{
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)
{
throw new Forbidden();
}
}
}

View File

@@ -18,6 +18,13 @@
*
* 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;
@@ -63,25 +70,65 @@ class Email extends \Espo\Core\Controllers\Record
return $this->getRecordService()->sendTestEmail($data);
}
public function actionMarkAsRead($params, $data, $request)
public function postActionMarkAsRead($params, $data, $request)
{
if (!$request->isPost()) {
throw new BadRequest();
if (!empty($data['ids'])) {
$ids = $data['ids'];
} else {
if (!empty($data['id'])) {
$ids = [$data['id']];
} else {
throw new BadRequest();
}
}
if (empty($data['ids']) || !is_array($data['ids'])) {
throw new BadRequest();
}
$ids = $data['ids'];
return $this->getRecordService()->markAsReadByIds($ids);
}
public function actionMarkAllAsRead($params, $data, $request)
public function postActionMarkAsNotRead($params, $data, $request)
{
if (!$request->isPost()) {
throw new BadRequest();
if (!empty($data['ids'])) {
$ids = $data['ids'];
} else {
if (!empty($data['id'])) {
$ids = [$data['id']];
} else {
throw new BadRequest();
}
}
return $this->getRecordService()->markAsNotReadByIds($ids);
}
public function postActionMarkAllAsRead($params, $data, $request)
{
return $this->getRecordService()->markAllAsRead();
}
public function postActionMarkAsImportant($params, $data, $request)
{
if (!empty($data['ids'])) {
$ids = $data['ids'];
} else {
if (!empty($data['id'])) {
$ids = [$data['id']];
} else {
throw new BadRequest();
}
}
return $this->getRecordService()->markAsImportantByIds($ids);
}
public function postActionMarkAsNotImportant($params, $data, $request)
{
if (!empty($data['ids'])) {
$ids = $data['ids'];
} else {
if (!empty($data['id'])) {
$ids = [$data['id']];
} else {
throw new BadRequest();
}
}
return $this->getRecordService()->markAsNotImportantByIds($ids);
}
}

View File

@@ -18,11 +18,19 @@
*
* 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;
use \Espo\Core\Exceptions\BadRequest;
class EmailAccount extends \Espo\Core\Controllers\Record
{

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -0,0 +1,36 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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 EmailFilter extends \Espo\Core\Controllers\Record
{
}

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -18,6 +18,13 @@
*
* 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;
@@ -58,6 +65,11 @@ class Extension extends \Espo\Core\Controllers\Record
if (!$request->isPost()) {
throw new Forbidden();
}
if ($this->getConfig()->get('restrictedMode')) {
if (!$this->getUser()->get('isSuperAdmin')) {
throw new Forbidden();
}
}
$manager = new \Espo\Core\ExtensionManager($this->getContainer());
@@ -71,11 +83,14 @@ class Extension extends \Espo\Core\Controllers\Record
if (!$request->isPost()) {
throw new Forbidden();
}
if ($this->getConfig()->get('restrictedMode')) {
if (!$this->getUser()->get('isSuperAdmin')) {
throw new Forbidden();
}
}
$manager = new \Espo\Core\ExtensionManager($this->getContainer());
$manager->uninstall($data);
return true;
}
@@ -99,12 +114,18 @@ class Extension extends \Espo\Core\Controllers\Record
throw new Forbidden();
}
public function actionDelete($params)
public function actionDelete($params, $data, $request)
{
if (!$request->isDelete()) {
throw BadRequest();
}
if ($this->getConfig()->get('restrictedMode')) {
if (!$this->getUser()->get('isSuperAdmin')) {
throw new Forbidden();
}
}
$manager = new \Espo\Core\ExtensionManager($this->getContainer());
$manager->delete($params);
return true;
}

View File

@@ -18,12 +18,20 @@
*
* 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\BadRequest;
class ExternalAccount extends \Espo\Core\Controllers\Record
{
@@ -34,7 +42,7 @@ class ExternalAccount extends \Espo\Core\Controllers\Record
$integrations = $this->getEntityManager()->getRepository('Integration')->find();
$arr = array();
foreach ($integrations as $entity) {
if ($entity->get('enabled') && $this->getMetadata()->get('integrations.' . $entity->id .'.allowUserAccounts')) {
if ($entity->get('enabled') && $this->getMetadata()->get('integrations.' . $entity->id .'.allowUserAccounts')) {
$arr[] = array(
'id' => $entity->id
);
@@ -77,15 +85,18 @@ class ExternalAccount extends \Espo\Core\Controllers\Record
return $entity->toArray();
}
public function actionUpdate($params, $data)
public function actionUpdate($params, $data, $request)
{
return $this->actionPatch($params, $data);
return $this->actionPatch($params, $data, $request);
}
public function actionPatch($params, $data)
public function actionPatch($params, $data, $request)
{
list($integration, $userId) = explode('__', $params['id']);
if (!$request->isPut() && !$request->isPost() && !$request->isPatch()) {
throw new BadRequest();
}
list($integration, $userId) = explode('__', $params['id']);
if ($this->getUser()->id != $userId) {
throw new Forbidden();

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -18,7 +18,14 @@
*
* 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;
@@ -29,11 +36,11 @@ class GlobalSearch extends \Espo\Core\Controllers\Base
{
public function actionSearch($params, $data, $request)
{
$query = $params['query'];
$offset = $request->get('offset');
$maxSize = $request->get('maxSize');
$query = $request->get('q');
$offset = intval($request->get('offset'));
$maxSize = intval($request->get('maxSize'));
return $this->getService('GlobalSearch')->find($query, $offset, $maxSize);
}
}

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -18,6 +18,13 @@
*
* 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;
@@ -71,10 +78,14 @@ class Import extends \Espo\Core\Controllers\Record
return $this->getContainer()->get('entityManager');
}
public function actionUploadFile($params, $data)
public function actionUploadFile($params, $data, $request)
{
$contents = $data;
if (!$request->isPost()) {
throw new BadRequest();
}
$attachment = $this->getEntityManager()->getEntity('Attachment');
$attachment->set('type', 'text/csv');
$attachment->set('role', 'Import File');
@@ -88,24 +99,34 @@ class Import extends \Espo\Core\Controllers\Record
);
}
public function actionRevert($params, $data)
public function actionRevert($params, $data, $request)
{
if (empty($data['id'])) {
throw new BadRequest();
}
if (!$request->isPost()) {
throw new BadRequest();
}
return $this->getService('Import')->revert($data['id']);
}
public function actionRemoveDuplicates($params, $data)
public function actionRemoveDuplicates($params, $data, $request)
{
if (empty($data['id'])) {
throw new BadRequest();
}
if (!$request->isPost()) {
throw new BadRequest();
}
return $this->getService('Import')->removeDuplicates($data['id']);
}
public function actionCreate($params, $data)
public function actionCreate($params, $data, $request)
{
if (!$request->isPost() && !$request->isPut()) {
throw new BadRequest();
}
$importParams = array(
'headerRow' => $data['headerRow'],
'fieldDelimiter' => $data['fieldDelimiter'],
@@ -119,6 +140,10 @@ class Import extends \Espo\Core\Controllers\Record
'action' => $data['action'],
);
if (array_key_exists('updateBy', $data)) {
$importParams['updateBy'] = $data['updateBy'];
}
$attachmentId = $data['attachmentId'];
if (!$this->getAcl()->check($data['entityType'], 'edit')) {
@@ -127,5 +152,14 @@ class Import extends \Espo\Core\Controllers\Record
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'])) {
throw new BadRequest();
}
$this->getService('Import')->unmarkAsDuplicate($data['id'], $data['entityType'], $data['entityId']);
return true;
}
}

View File

@@ -18,10 +18,20 @@
*
* 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;
use \Espo\Core\Exceptions\BadRequest;
class InboundEmail extends \Espo\Core\Controllers\Record
{
protected function checkControllerAccess()

View File

@@ -18,21 +18,30 @@
*
* 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\BadRequest;
class Integration extends \Espo\Core\Controllers\Record
{
{
protected function checkControllerAccess()
{
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
}
public function actionIndex($params, $data, $request)
{
return false;
@@ -40,22 +49,25 @@ class Integration extends \Espo\Core\Controllers\Record
public function actionRead($params, $data, $request)
{
$entity = $this->getEntityManager()->getEntity('Integration', $params['id']);
$entity = $this->getEntityManager()->getEntity('Integration', $params['id']);
return $entity->toArray();
}
public function actionUpdate($params, $data)
public function actionUpdate($params, $data, $request)
{
return $this->actionPatch($params, $data);
return $this->actionPatch($params, $data, $request);
}
public function actionPatch($params, $data)
public function actionPatch($params, $data, $request)
{
if (!$request->isPut() && !$request->isPatch()) {
throw new BadRequest();
}
$entity = $this->getEntityManager()->getEntity('Integration', $params['id']);
$entity->set($data);
$this->getEntityManager()->saveEntity($entity);
return $entity->toArray();
return $entity->toArray();
}
}

View File

@@ -0,0 +1,79 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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;
class Job extends \Espo\Core\Controllers\Record
{
protected function checkControllerAccess()
{
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
}
public function actionCreate($params, $data)
{
throw new Forbidden();
}
public function actionUpdate($params, $data)
{
throw new Forbidden();
}
public function actionPatch($params, $data)
{
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)
{
throw new Forbidden();
}
public function actionRemoveLink($params, $data)
{
throw new Forbidden();
}
}

View File

@@ -18,6 +18,13 @@
*
* 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;
@@ -26,6 +33,7 @@ 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 Layout extends \Espo\Core\Controllers\Base
{
@@ -38,12 +46,16 @@ class Layout extends \Espo\Core\Controllers\Base
return $data;
}
public function actionUpdate($params, $data)
public function actionUpdate($params, $data, $request)
{
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
if (!$request->isPut() && !$request->isPatch()) {
throw new BadRequest();
}
$layoutManager = $this->getContainer()->get('layout');
$layoutManager->set($data, $params['scope'], $params['name']);
$result = $layoutManager->save();
@@ -57,8 +69,20 @@ class Layout extends \Espo\Core\Controllers\Base
return $layoutManager->get($params['scope'], $params['name']);
}
public function actionPatch($params, $data)
public function actionPatch($params, $data, $request)
{
return $this->actionUpdate($params, $data);
return $this->actionUpdate($params, $data, $request);
}
public function actionResetToDefault($params, $data, $request)
{
if (!$request->isPost()) {
throw new BadRequest();
}
if (empty($data['scope']) || empty($data['name'])) {
throw new BadRequest();
}
return $this->getContainer()->get('layout')->resetToDefault($data['scope'], $data['name']);
}
}

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -18,7 +18,14 @@
*
* 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;
@@ -32,32 +39,32 @@ class Notification extends \Espo\Core\Controllers\Base
{
$scope = $params['scope'];
$id = $params['id'];
$userId = $this->getUser()->id;
$offset = intval($request->get('offset'));
$maxSize = intval($request->get('maxSize'));
$maxSize = intval($request->get('maxSize'));
$params = array(
'offset' => $offset,
'maxSize' => $maxSize,
);
$result = $this->getService('Notification')->getList($userId, $params);
$result = $this->getService('Notification')->getList($userId, $params);
return array(
'total' => $result['total'],
'list' => $result['collection']->toArray()
);
}
public function actionNotReadCount()
{
$userId = $this->getUser()->id;
return $this->getService('Notification')->getNotReadCount($userId);
}
public function actionMarkAllRead($params, $data, $request)
public function postActionMarkAllRead($params, $data, $request)
{
$userId = $this->getUser()->id;
return $this->getService('Notification')->markAllRead($userId);

View File

@@ -18,6 +18,13 @@
*
* 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;
@@ -53,27 +60,34 @@ class Preferences extends \Espo\Core\Controllers\Base
}
}
public function actionDelete($params, $data)
public function actionDelete($params, $data, $request)
{
$userId = $params['id'];
if (empty($userId)) {
throw new BadRequest();
}
if (!$request->isDelete()) {
throw new BadRequest();
}
$this->handleUserAccess($userId);
return $this->getEntityManager()->getRepository('Preferences')->resetToDefaults($userId);
}
public function actionPatch($params, $data)
public function actionPatch($params, $data, $request)
{
return $this->actionUpdate($params, $data);
return $this->actionUpdate($params, $data, $request);
}
public function actionUpdate($params, $data)
public function actionUpdate($params, $data, $request)
{
$userId = $params['id'];
$this->handleUserAccess($userId);
if (!$request->isPost() && !$request->isPatch() && !$request->isPut()) {
throw new BadRequest();
}
if (array_key_exists('smtpPassword', $data)) {
$data['smtpPassword'] = $this->getCrypt()->encrypt($data['smtpPassword']);
}

View File

@@ -18,12 +18,17 @@
*
* 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 Role extends \Espo\Core\Controllers\Record
{
}

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -18,12 +18,19 @@
*
* 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\BadRequest;
class Settings extends \Espo\Core\Controllers\Base
{
@@ -46,17 +53,21 @@ class Settings extends \Espo\Core\Controllers\Base
return $this->getConfigData();
}
public function actionUpdate($params, $data)
public function actionUpdate($params, $data, $request)
{
return $this->actionPatch($params, $data);
return $this->actionPatch($params, $data, $request);
}
public function actionPatch($params, $data)
public function actionPatch($params, $data, $request)
{
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
if (!$request->isPut() && !$request->isPatch()) {
throw new BadRequest();
}
if (isset($data['useCache']) && $data['useCache'] != $this->getConfig()->get('useCache')) {
$this->getContainer()->get('dataManager')->clearCache();
}

View File

@@ -18,6 +18,13 @@
*
* 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;
@@ -26,7 +33,7 @@ use \Espo\Core\Exceptions\Error;
class Stream extends \Espo\Core\Controllers\Base
{
const MAX_SIZE_LIMIT = 400;
const MAX_SIZE_LIMIT = 200;
public static $defaultAction = 'list';
@@ -38,6 +45,7 @@ class Stream extends \Espo\Core\Controllers\Base
$offset = intval($request->get('offset'));
$maxSize = intval($request->get('maxSize'));
$after = $request->get('after');
$filter = $request->get('filter');
$service = $this->getService('Stream');
@@ -52,6 +60,7 @@ class Stream extends \Espo\Core\Controllers\Base
'offset' => $offset,
'maxSize' => $maxSize,
'after' => $after,
'filter' => $filter
));
return array(

View File

@@ -18,12 +18,19 @@
*
* 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 Team extends \Espo\Core\Controllers\Record
{
}

View File

@@ -0,0 +1,38 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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;
class Template extends \Espo\Core\Controllers\Record
{
}

View File

@@ -18,6 +18,13 @@
*
* 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;
@@ -53,7 +60,10 @@ class User extends \Espo\Core\Controllers\Record
if (!$request->isPost()) {
throw new BadRequest();
}
return $this->getService('User')->changePassword($this->getUser()->id, $data['password']);
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']);
}
public function actionChangePasswordByRequest($params, $data, $request)

View File

@@ -18,17 +18,27 @@
*
* 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;
use \Espo\ORM\Entity;
use \Espo\Entities\User;
class Acl
{
private $user;
private $aclManager;
public function __construct(AclManager $aclManager, \Espo\Entities\User $user)
public function __construct(AclManager $aclManager, User $user)
{
$this->aclManager = $aclManager;
$this->user = $user;
@@ -76,7 +86,12 @@ class Acl
public function checkScope($scope, $action = null, $isOwner = null, $inTeam = null, $entity = null)
{
return $this->getAclManager()->checkScope($this->getUser(), $subject, $action, $isOwner, $inTeam, $entity) ;
return $this->getAclManager()->checkScope($this->getUser(), $scope, $action, $isOwner, $inTeam, $entity) ;
}
public function checkPermission($permission, User $entity)
{
return $this->getAclManager()->checkPermission($this->getUser(), $permission, $entity);
}
}

View File

@@ -18,6 +18,13 @@
*
* 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\Acl;
@@ -81,7 +88,7 @@ class Base implements Injectable
return $this->getInjection('aclManager');
}
public function checkReadOnlyTeam(User $user, $scope, $data)
public function checkReadOnlyTeam(User $user, $data)
{
if (empty($data) || !is_array($data) || !isset($data['read'])) {
return false;
@@ -89,7 +96,7 @@ class Base implements Injectable
return $data['read'] === 'team';
}
public function checkReadOnlyOwn(User $user, $scope, $data)
public function checkReadOnlyOwn(User $user, $data)
{
if (empty($data) || !is_array($data) || !isset($data['read'])) {
return false;
@@ -105,7 +112,7 @@ class Base implements Injectable
public function checkScope(User $user, $data, $scope, $action = null, $isOwner = null, $inTeam = null, Entity $entity = null)
{
if (is_null($data)) {
return true;
return false;
}
if ($data === false) {
return false;
@@ -160,10 +167,11 @@ class Base implements Injectable
if ($user->id === $entity->get('assignedUserId')) {
return true;
}
}
if ($entity->has('createdById')) {
if ($user->id === $entity->get('createdById')) {
return true;
} else {
if ($entity->has('createdById')) {
if ($user->id === $entity->get('createdById')) {
return true;
}
}
}
return false;

View File

@@ -18,6 +18,13 @@
*
* 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\Acl;
@@ -81,7 +88,12 @@ class Table
public function getScopeData($scope)
{
if (array_key_exists($scope, $this->data['table'])) {
return $this->data['table'][$scope];
$data = $this->data['table'][$scope];
if (is_string($data)) {
$data = $this->getScopeData($data);
return $data;
}
return $data;
}
return null;
}

View File

@@ -18,6 +18,13 @@
*
* 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;
@@ -124,7 +131,7 @@ class AclManager
return false;
}
$data = $this->getTable($user)->getScopeData($scope);
return $this->getImplementation($scope)->checkReadOnlyTeam($user, $scope, $data);
return $this->getImplementation($scope)->checkReadOnlyTeam($user, $data);
}
public function checkReadOnlyOwn(User $user, $scope)
@@ -133,7 +140,7 @@ class AclManager
return false;
}
$data = $this->getTable($user)->getScopeData($scope);
return $this->getImplementation($scope)->checkReadOnlyOwn($user, $scope, $data);
return $this->getImplementation($scope)->checkReadOnlyOwn($user, $data);
}
public function check(User $user, $subject, $action = null, $isOwner = null, $inTeam = null)
@@ -166,7 +173,7 @@ class AclManager
return true;
}
$data = $this->getTable($user)->getScopeData($entity->getEntityType());
return $this->getImplementation($scope)->checkEntity($user, $entity, $data, $action);
return $this->getImplementation($entity->getEntityType())->checkEntity($user, $entity, $data, $action);
}
public function checkScope(User $user, $scope, $action = null, $isOwner = null, $inTeam = null, $entity = null)
@@ -177,5 +184,34 @@ class AclManager
$data = $this->getTable($user)->getScopeData($scope);
return $this->getImplementation($scope)->checkScope($user, $data, $scope, $action, $isOwner, $inTeam, $entity);
}
public function checkPermission(User $user, $permission, User $entity)
{
if ($user->isAdmin()) {
return true;
}
if ($this->get($user, $permission) === 'no') {
if ($entity->id !== $user->id) {
return false;
}
} else if ($this->get($user, $permission) === 'team') {
if ($entity->id != $user->id) {
$teamIdList1 = $user->getTeamIdList();
$teamIdList2 = $entity->getTeamIdList();
$inTeam = false;
foreach ($teamIdList1 as $id) {
if (in_array($id, $teamIdList2)) {
$inTeam = true;
break;
}
}
if (!$inTeam) {
return false;
}
}
}
return true;
}
}

View File

@@ -18,11 +18,17 @@
*
* 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;
class Application
{
private $metadata;
@@ -86,10 +92,12 @@ 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;
exit;

View File

@@ -18,10 +18,16 @@
*
* 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;
class Container
{
@@ -161,6 +167,14 @@ class Container
);
}
private function loadNumber()
{
return new \Espo\Core\Utils\Number(
$this->get('config')->get('decimalMark'),
$this->get('config')->get('thousandSeparator')
);
}
private function loadServiceFactory()
{
return new \Espo\Core\ServiceFactory(
@@ -270,6 +284,14 @@ class Container
);
}
private function loadThemeManager()
{
return new \Espo\Core\Utils\ThemeManager(
$this->get('config'),
$this->get('metadata')
);
}
public function setUser($user)
{
$this->data['user'] = $user;

View File

@@ -18,6 +18,13 @@
*
* 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;
@@ -87,18 +94,27 @@ class ControllerManager
$actionNameUcfirst = ucfirst($actionName);
$beforeMethodName = 'before' . $actionNameUcfirst;
$actionMethodName = 'action' . $actionNameUcfirst;
$afterMethodName = 'after' . $actionNameUcfirst;
$fullActionMethodName = strtolower($request->getMethod()) . ucfirst($actionMethodName);
if (method_exists($controller, $fullActionMethodName)) {
$primaryActionMethodName = $fullActionMethodName;
} else {
$primaryActionMethodName = $actionMethodName;
}
if (!method_exists($controller, $primaryActionMethodName)) {
throw new NotFound("Action '$actionName' (".$request->getMethod().") does not exist in controller '$controllerName'");
}
if (method_exists($controller, $beforeMethodName)) {
$controller->$beforeMethodName($params, $data, $request);
}
$actionMethodName = 'action' . $actionNameUcfirst;
if (!method_exists($controller, $actionMethodName)) {
throw new NotFound("Action '$actionMethodName' does not exist in controller '$controller'");
}
$result = $controller->$primaryActionMethodName($params, $data, $request);
$result = $controller->$actionMethodName($params, $data, $request);
$afterMethodName = 'after' . $actionNameUcfirst;
if (method_exists($controller, $afterMethodName)) {
$controller->$afterMethodName($params, $data, $request);
}

View File

@@ -18,10 +18,16 @@
*
* 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\Controllers;
use \Espo\Core\Container;
use \Espo\Core\ServiceFactory;
use \Espo\Core\Utils\Util;

View File

@@ -18,6 +18,13 @@
*
* 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\Controllers;
@@ -77,7 +84,7 @@ class Record extends Base
public function actionCreate($params, $data, $request)
{
if (!$request->isPost()) {
throw BadRequest();
throw new BadRequest();
}
if (!$this->getAcl()->check($this->name, 'edit')) {
@@ -96,7 +103,7 @@ class Record extends Base
public function actionUpdate($params, $data, $request)
{
if (!$request->isPut() && !$request->isPatch()) {
throw BadRequest();
throw new BadRequest();
}
if (!$this->getAcl()->check($this->name, 'edit')) {
@@ -124,22 +131,34 @@ class Record extends Base
$asc = $request->get('asc') === '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;
}
if (!empty($maxSize) && $maxSize > self::MAX_SIZE_LIMIT) {
throw new Forbidden();
throw new Forbidden("Max should should not exceed " . self::MAX_SIZE_LIMIT . ". Use pagination (offset, limit).");
}
$result = $this->getRecordService()->findEntities(array(
$params = array(
'where' => $where,
'offset' => $offset,
'maxSize' => $maxSize,
'asc' => $asc,
'sortBy' => $sortBy,
'q' => $q,
));
'textFilter' => $textFilter
);
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'],
@@ -158,6 +177,7 @@ class Record extends Base
$asc = $request->get('asc') === 'true';
$sortBy = $request->get('sortBy');
$q = $request->get('q');
$textFilter = $request->get('textFilter');
if (empty($maxSize)) {
$maxSize = self::MAX_SIZE_LIMIT;
@@ -166,15 +186,23 @@ class Record extends Base
throw new Forbidden();
}
$result = $this->getRecordService()->findLinkedEntities($id, $link, array(
$params = array(
'where' => $where,
'offset' => $offset,
'maxSize' => $maxSize,
'asc' => $asc,
'sortBy' => $sortBy,
'q' => $q,
));
'textFilter' => $textFilter
);
if ($request->get('primaryFilter')) {
$params['primaryFilter'] = $request->get('primaryFilter');
}
if ($request->get('boolFilterList')) {
$params['boolFilterList'] = $request->get('boolFilterList');
}
$result = $this->getRecordService()->findLinkedEntities($id, $link, $params);
return array(
'total' => $result['total'],
@@ -185,7 +213,7 @@ class Record extends Base
public function actionDelete($params, $data, $request)
{
if (!$request->isDelete()) {
throw BadRequest();
throw new BadRequest();
}
$id = $params['id'];
@@ -198,7 +226,7 @@ class Record extends Base
public function actionExport($params, $data, $request)
{
if ($this->getConfig()->get('disableExport') && !$this->getUser()->isAdmin()) {
if ($this->getConfig()->get('exportDisabled') && !$this->getUser()->isAdmin()) {
throw new Forbidden();
}

View File

@@ -18,6 +18,13 @@
*
* 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\Controllers;

View File

@@ -18,10 +18,16 @@
*
* 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;
use \PDO;
use Espo\Core\Utils\Json;
use Espo\Core\Exceptions\NotFound;

View File

@@ -18,10 +18,16 @@
*
* 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;
class DataManager
{
private $container;

View File

@@ -18,6 +18,13 @@
*
* 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\Entities;

View File

@@ -18,6 +18,13 @@
*
* 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\Entities;

View File

@@ -18,10 +18,16 @@
*
* 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;
use \Espo\Core\Exceptions\NotFound,
\Espo\Core\Utils\Util;

View File

@@ -18,6 +18,13 @@
*
* 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\EntryPoints;
@@ -67,6 +74,26 @@ abstract class Base
return $this->getContainer()->get('metadata');
}
protected function getDateTime()
{
return $this->getContainer()->get('dateTime');
}
protected function getNumber()
{
return $this->getContainer()->get('number');
}
protected function getFileManager()
{
return $this->getContainer()->get('fileManager');
}
protected function getLanguage()
{
return $this->getContainer()->get('language');
}
public function __construct(Container $container)
{
$this->container = $container;

View File

@@ -18,6 +18,13 @@
*
* 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\Exceptions;

View File

@@ -18,6 +18,13 @@
*
* 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\Exceptions;

View File

@@ -18,6 +18,13 @@
*
* 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\Exceptions;

View File

@@ -18,6 +18,13 @@
*
* 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\Exceptions;

View File

@@ -18,6 +18,13 @@
*
* 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\Exceptions;

View File

@@ -18,6 +18,13 @@
*
* 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\Exceptions;

View File

@@ -18,6 +18,13 @@
*
* 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\Exceptions;

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -18,6 +18,13 @@
*
* 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\ExternalAccount;

View File

@@ -18,6 +18,13 @@
*
* 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\ExternalAccount\Clients;

View File

@@ -18,6 +18,13 @@
*
* 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\ExternalAccount\Clients;

View File

@@ -18,6 +18,13 @@
*
* 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\ExternalAccount\Clients;

View File

@@ -18,6 +18,13 @@
*
* 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\ExternalAccount\OAuth2;

View File

@@ -18,10 +18,16 @@
*
* 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;
use \Espo\Core\Exceptions\Error,
\Espo\Core\Utils\Util;
@@ -104,6 +110,9 @@ class HookManager
foreach ($this->data[$scope][$hookName] as $className) {
if (empty($this->hooks[$className])) {
$this->hooks[$className] = $this->createHookByClassName($className);
if (empty($this->hooks[$className])) {
continue;
}
}
$hook = $this->hooks[$className];
$hook->$hookName($injection, $options);
@@ -122,7 +131,7 @@ class HookManager
}
return $hook;
}
throw new Error("Class '$className' does not exist");
$GLOBALS['log']->error("Hook class '{$name}' does not exist.");
}
/**

View File

@@ -18,6 +18,13 @@
*
* 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\Hooks;

View File

@@ -0,0 +1,147 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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\Htmlizer;
use Espo\ORM\Entity;
use Espo\Core\Exceptions\Error;
use Espo\Core\Utils\File\Manager as FileManager;
use Espo\Core\Utils\DateTime;
use Espo\Core\Utils\Number;
require('vendor/zordius/lightncandy/src/lightncandy.php');
class Htmlizer
{
protected $fileManager;
protected $dateTime;
protected $config;
public function __construct(FileManager $fileManager, DateTime $dateTime, Number $number)
{
$this->fileManager = $fileManager;
$this->dateTime = $dateTime;
$this->number = $number;
}
protected function formatNumber($value)
{
return $this->number->format($value);
}
protected function format($value)
{
if (is_float($value) || is_int($value)) {
$value = $this->formatNumber($value);
} else if (is_string($value)) {
$value = nl2br($value);
}
return $value;
}
protected function getDataFromEntity(Entity $entity)
{
$data = $entity->toArray();
$fieldDefs = $entity->getFields();
$fieldList = array_keys($fieldDefs);
foreach ($fieldList as $field) {
$type = null;
if (!empty($fieldDefs[$field]['type'])) {
$type = $fieldDefs[$field]['type'];
}
if ($type == Entity::DATETIME) {
if (!empty($data[$field])) {
$data[$field] = $this->dateTime->convertSystemDateTime($data[$field]);
}
} else if ($type == Entity::DATE) {
if (!empty($data[$field])) {
$data[$field] = $this->dateTime->convertSystemDate($data[$field]);
}
} else if ($type == Entity::JSON_ARRAY) {
if (!empty($data[$field])) {
$list = $data[$field];
$newList = [];
foreach ($list as $item) {
$v = $item;
if ($item instanceof \StdClass) {
$v = get_object_vars($v);
}
foreach ($v as $k => $w) {
$v[$k] = $this->format($v[$k]);
}
$newList[] = $v;
}
$data[$field] = $newList;
}
} else if ($type == Entity::JSON_OBJECT) {
if (!empty($data[$field])) {
$value = $data[$field];
if ($value instanceof \StdClass) {
$data[$field] = get_object_vars($value);
}
foreach ($data[$field] as $k => $w) {
$data[$field][$k] = $this->format($data[$field][$k]);
}
}
}
if (array_key_exists($field, $data)) {
$data[$field] = $this->format($data[$field]);
}
}
return $data;
}
public function render(Entity $entity, $template)
{
$code = \LightnCandy::compile($template);
$id = uniqid('', true);
$fileName = 'data/cache/template-' . $id;
$this->fileManager->putContents($fileName, $code);
$renderer = include($fileName);
$this->fileManager->removeFile($fileName);
$data = $this->getDataFromEntity($entity);
$html = $renderer($data);
$html = str_replace('?entryPoint=attachment&amp;', '?entryPoint=attachment&', $html);
$html = preg_replace('/\?entryPoint=attachment\&id=(.*)/', 'data/upload/$1', $html);
return $html;
}
}

View File

@@ -18,6 +18,13 @@
*
* 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\Interfaces;

View File

@@ -18,6 +18,13 @@
*
* 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\Interfaces;

View File

@@ -18,6 +18,13 @@
*
* 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\Jobs;

View File

@@ -18,6 +18,13 @@
*
* 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\Loaders;

View File

@@ -18,6 +18,13 @@
*
* 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\Loaders;

View File

@@ -18,6 +18,13 @@
*
* 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\Loaders;

View File

@@ -0,0 +1,101 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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\Mail;
use \Espo\Entities\Email;
class FiltersMatcher
{
public function __construct()
{
}
public function match(Email $email, $filterList = [])
{
foreach ($filterList as $filter) {
if ($filter->get('from')) {
if ($this->matchString(strtolower($filter->get('from')), strtolower($email->get('from')))) {
return true;
}
}
if ($filter->get('to')) {
if ($email->get('to')) {
$toArr = explode(';', $email->get('to'));
foreach ($toArr as $to) {
if ($this->matchString(strtolower($filter->get('to')), strtolower($to))) {
return true;
}
}
}
}
if ($filter->get('subject')) {
if ($this->matchString($filter->get('subject'), $email->get('name'))) {
return true;
}
}
}
return false;
}
public function matchBody(Email $email, $filterList = [])
{
foreach ($filterList as $filter) {
if ($filter->get('bodyContains')) {
$phraseList = $filter->get('bodyContains');
$body = $email->get('body');
$bodyPlain = $email->get('bodyPlain');
foreach ($phraseList as $phrase) {
if (stripos($bodyPlain, $phrase) !== false) {
return true;
}
if (stripos($body, $phrase) !== false) {
return true;
}
}
}
}
return false;
}
protected function matchString($pattern, $value)
{
if ($pattern == $value) {
return true;
}
$pattern = preg_quote($pattern, '#');
$pattern = str_replace('\*', '.*', $pattern).'\z';
if (preg_match('#^'.$pattern.'#', $value)) {
return true;
}
return false;
}
}

View File

@@ -18,6 +18,13 @@
*
* 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\Mail;
@@ -25,6 +32,7 @@ namespace Espo\Core\Mail;
use \Zend\Mime\Mime as Mime;
use \Espo\ORM\Entity;
use \Espo\ORM\Email;
class Importer
{
@@ -34,11 +42,14 @@ class Importer
private $config;
private $filtersMatcher;
public function __construct($entityManager, $fileManager, $config)
{
$this->entityManager = $entityManager;
$this->fileManager = $fileManager;
$this->config = $config;
$this->filtersMatcher = new FiltersMatcher();
}
protected function getEntityManager()
@@ -55,7 +66,12 @@ class Importer
return $this->fileManager;
}
public function importMessage($message, $userId, $teamsIds = array())
protected function getFiltersMatcher()
{
return $this->filtersMatcher;
}
public function importMessage($message, $userId, $teamsIds = [], $filterList = [])
{
try {
$email = $this->getEntityManager()->getEntity('Email');
@@ -82,16 +98,26 @@ class Importer
$toArr = $this->getAddressListFromMessage($message, 'to');
$ccArr = $this->getAddressListFromMessage($message, 'cc');
$replyToArr = $this->getAddressListFromMessage($message, 'replyTo');
$email->set('from', $fromArr[0]);
$email->set('to', implode(';', $toArr));
$email->set('cc', implode(';', $ccArr));
$email->set('replyTo', implode(';', $replyToArr));
if ($this->getFiltersMatcher()->match($email, $filterList)) {
return false;
}
if (isset($message->messageId) && !empty($message->messageId)) {
$email->set('messageId', $message->messageId);
if (isset($message->deliveredTo)) {
$email->set('messageIdInternal', $message->messageId . '-' . $message->deliveredTo);
}
if (stripos($message->messageId, '@espo-system') !== false) {
return;
}
}
if ($duplicate = $this->findDuplicate($email)) {
@@ -99,6 +125,7 @@ class Importer
$usersIds = $duplicate->get('usersIds');
$usersIds[] = $userId;
$duplicate->set('usersIds', $usersIds);
$this->getEntityManager()->saveEntity($duplicate);
if (!empty($teamsIds)) {
@@ -136,6 +163,10 @@ class Importer
$this->importPartDataToEmail($email, $message, $inlineIds, 'text/plain');
}
if (!$email->get('body') && $email->get('bodyPlain')) {
$email->set('body', $email->get('bodyPlain'));
}
$body = $email->get('body');
if (!empty($body)) {
foreach ($inlineIds as $cid => $attachmentId) {
@@ -144,15 +175,54 @@ class Importer
$email->set('body', $body);
}
if ($this->getFiltersMatcher()->matchBody($email, $filterList)) {
return false;
}
$parentFound = false;
if (isset($message->inReplyTo) && !empty($message->inReplyTo)) {
$arr = explode(' ', $message->inReplyTo);
$inReplyTo = $arr[0];
$replied = $this->getEntityManager()->getRepository('Email')->where(array(
'messageId' => $inReplyTo
))->findOne();
if ($replied) {
$email->set('repliedId', $replied->id);
}
}
if (isset($message->references) && !empty($message->references)) {
$reference = str_replace(array('/', '@'), " ", trim($message->references, '<>'));
$arr = explode(' ', $message->references);
$reference = $arr[0];
$reference = str_replace(array('/', '@'), " ", trim($reference, '<>'));
$parentType = $parentId = null;
$emailSent = PHP_INT_MAX;
$n = sscanf($reference, '%s %s %d %d espo', $parentType, $parentId, $emailSent, $number);
if ($n == 4 && $emailSent < time()) {
if (!empty($parentType) && !empty($parentId)) {
if ($parentType == 'Lead') {
$parent = $this->getEntityManager()->getEntity('Lead', $parentId);
if ($parent && $parent->get('status') == 'Converted') {
if ($parent->get('createdAccountId')) {
$account = $this->getEntityManager()->getEntity('Account', $parent->get('createdAccountId'));
if ($account) {
$parentType = 'Account';
$parentId = $account->id;
}
} else {
if ($this->getConfig()->get('b2cMode')) {
if ($parent->get('createdContactId')) {
$contact = $this->getEntityManager()->getEntity('Contact', $parent->get('createdContactId'));
if ($contact) {
$parentType = 'Contact';
$parentId = $contact->id;
}
}
}
}
}
}
$email->set('parentType', $parentType);
$email->set('parentId', $parentId);
$parentFound = true;
@@ -165,10 +235,15 @@ class Importer
if ($from) {
$parentFound = $this->findParent($email, $from);
}
if (!$parentFound) {
if (!empty($toArr)) {
$parentFound = $this->findParent($email, $toArr[0]);
}
}
if (!$parentFound) {
if (!empty($replyToArr)) {
$parentFound = $this->findParent($email, $replyToArr[0]);
}
}
if (!$parentFound) {
if (!empty($toArr)) {
$parentFound = $this->findParent($email, $toArr[0]);
}
}
@@ -229,12 +304,20 @@ class Importer
}
}
protected function normilizeHeader($header)
{
if (is_a($header, 'ArrayIterator')) {
return $header->current();
} else {
return $header;
}
}
protected function getAddressListFromMessage($message, $type)
{
$addressList = array();
if (isset($message->$type)) {
$list = $message->getHeader($type)->getAddressList();
$list = $this->normilizeHeader($message->getHeader($type))->getAddressList();
foreach ($list as $address) {
$addressList[] = $address->getEmail();
}
@@ -251,6 +334,15 @@ class Importer
$type = strtok($part->contentType, ';');
}
$contentDisposition = false;
if (isset($part->ContentDisposition)) {
if (strpos(strtolower($part->ContentDisposition), 'attachment') === 0) {
$contentDisposition = 'attachment';
} else if (strpos(strtolower($part->ContentDisposition), 'inline') === 0) {
$contentDisposition = 'inline';
}
}
if (empty($type)) {
if (!empty($defaultContentType)) {
$type = $defaultContentType;
@@ -260,28 +352,26 @@ class Importer
}
$encoding = null;
$isAttachment = true;
if ($type == 'text/plain' || $type == 'text/html') {
$isAttachment = false;
$content = $this->getContentFromPart($part);
if ($type == 'text/plain') {
if ($email->get('bodyPlain')) {
$isAttachment = true;
} else {
$email->set('bodyPlain', $content);
if (!$email->get('body')) {
$email->set('body', $content);
if ($contentDisposition !== 'attachment') {
$isAttachment = false;
$content = $this->getContentFromPart($part);
if ($type == 'text/plain') {
$bodyPlain = '';
if ($email->get('bodyPlain')) {
$bodyPlain .= $email->get('bodyPlain') . "\n";
}
}
} else if ($type == 'text/html') {
if ($email->get('isHtml')) {
$isAttachment = true;
} else {
$email->set('body', $content);
$bodyPlain .= $content;
$email->set('bodyPlain', $bodyPlain);
} else if ($type == 'text/html') {
$body = '';
if ($email->get('body')) {
$body .= $email->get('body') . "<br>";
}
$body .= $content;
$email->set('isHtml', true);
$email->set('body', $body);
}
}
}
@@ -293,21 +383,31 @@ class Importer
$fileName = null;
$contentId = null;
if (isset($part->ContentDisposition)) {
if (strpos($part->ContentDisposition, 'attachment') === 0) {
if ($contentDisposition) {
if ($contentDisposition === 'attachment') {
if (preg_match('/filename="?([^"]+)"?/i', $part->ContentDisposition, $m)) {
$fileName = $m[1];
$disposition = 'attachment';
}
} else if (strpos($part->ContentDisposition, 'inline') === 0) {
$contentId = trim($part->contentID, '<>');
$fileName = $contentId;
$disposition = 'inline';
} else if ($contentDisposition === 'inline') {
if (isset($part->contentID)) {
$contentId = trim($part->contentID, '<>');
$fileName = $contentId;
$disposition = 'inline';
} else {
// hack for iOS not proper attachments
if (empty($fileName)) {
if (preg_match('/filename="?([^"]+)"?/i', $part->ContentDisposition, $m)) {
$fileName = $m[1];
$disposition = 'attachment';
}
}
}
}
}
if (isset($part->contentTransferEncoding)) {
$encoding = strtolower($part->getHeader('Content-Transfer-Encoding')->getTransferEncoding());
$encoding = strtolower($this->normilizeHeader($part->getHeader('Content-Transfer-Encoding'))->getTransferEncoding());
}
$attachment = $this->getEntityManager()->getEntity('Attachment');
@@ -355,7 +455,7 @@ class Importer
$encoding = null;
if (isset($part->contentTransferEncoding)) {
$cteHeader = $part->getHeader('Content-Transfer-Encoding');
$cteHeader = $this->normilizeHeader($part->getHeader('Content-Transfer-Encoding'));
$encoding = strtolower($cteHeader->getTransferEncoding());
}
@@ -366,7 +466,7 @@ class Importer
$charset = 'UTF-8';
if (isset($part->contentType)) {
$ctHeader = $part->getHeader('Content-Type');
$ctHeader = $this->normilizeHeader($part->getHeader('Content-Type'));
$charsetParamValue = $ctHeader->getParameter('charset');
if (!empty($charsetParamValue)) {
$charset = strtoupper($charsetParamValue);
@@ -374,7 +474,7 @@ class Importer
}
if (isset($part->contentTransferEncoding)) {
$cteHeader = $part->getHeader('Content-Transfer-Encoding');
$cteHeader = $this->normilizeHeader($part->getHeader('Content-Transfer-Encoding'));
if ($cteHeader->getTransferEncoding() == 'quoted-printable') {
$content = quoted_printable_decode($content);
}

View File

@@ -0,0 +1,102 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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.
*
* 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.
************************************************************************/
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Espo\Core\Mail\Mail\Header;
use \Zend\Mail\Header;
use Zend\Mime\Mime;
class XQueueItemId implements Header\HeaderInterface
{
protected $fieldName = 'X-QueueItemId';
protected $id = null;
public static function fromString($headerLine)
{
list($name, $value) = Header\GenericHeader::splitHeaderLine($headerLine);
$value = Header\HeaderWrap::mimeDecodeValue($value);
if (strtolower($name) !== 'x-queue-item-id') {
throw new Header\Exception\InvalidArgumentException('Invalid header line for Message-ID string');
}
$header = new static();
$header->setId($value);
return $header;
}
public function getFieldName()
{
return $this->fieldName;
}
public function setFieldName($value)
{
}
public function setEncoding($encoding)
{
return $this;
}
public function setId($id)
{
$this->id = $id;
}
public function getEncoding()
{
return 'ASCII';
}
public function toString()
{
return $this->fieldName . ': ' . $this->getFieldValue();
}
public function getFieldValue($format = Header\HeaderInterface::FORMAT_RAW)
{
return $this->id;
}
}

View File

@@ -1,4 +1,38 @@
<?php
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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.
*
* 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\Mail\Mail;
@@ -10,37 +44,5 @@ use Zend\Loader\PluginClassLocator;
class Headers extends \Zend\Mail\Headers
{
public static function fromString($string, $EOL = self::EOL)
{
$headers = new static();
$currentLine = '';
// iterate the header lines, some might be continuations
foreach (explode($EOL, $string) as $line) {
// check if a header name is present
if (preg_match('/^(?P<name>[\x21-\x39\x3B-\x7E]+):.*$/', $line, $matches)) {
if ($currentLine) {
// a header name was present, then store the current complete line
$headers->addHeaderLine($currentLine);
}
$currentLine = trim($line);
} elseif (preg_match('/^\s+.*$/', $line, $matches)) {
// continuation: append to current line
$currentLine .= $line;
} elseif (preg_match('/^\s*$/', $line)) {
// empty line indicates end of headers
break;
} else {
// Line does not match header format!
throw new Exception\RuntimeException(sprintf(
'Line "%s"does not match header format!',
$line
));
}
}
if ($currentLine) {
$headers->addHeaderLine($currentLine);
}
return $headers;
}
}

View File

@@ -18,6 +18,13 @@
*
* 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\Mail\Mail\Storage;

View File

@@ -18,6 +18,13 @@
*
* 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\Mail\Mail\Storage;

View File

@@ -18,6 +18,13 @@
*
* 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\Mail;
@@ -131,9 +138,11 @@ class Sender
return $this;
}
public function send(Email $email, $params = array())
public function send(Email $email, $params = array(), &$message = null, $attachmetList = [])
{
$message = new Message();
if (!$message) {
$message = new Message();
}
$config = $this->config;
$params = $this->params + $params;
@@ -206,10 +215,24 @@ class Sender
}
}
$value = $email->get('replyTo');
if ($value) {
$arr = explode(';', $value);
if (is_array($arr)) {
foreach ($arr as $address) {
$message->addReplyTo(trim($address));
}
}
}
$attachmentPartList = array();
$attachmentCollection = $email->get('attachments');
$attachmentInlineCollection = $email->getInlineAttachments();
foreach ($attachmetList as $attachment) {
$attachmentCollection[] = $attachment;
}
if (!empty($attachmentCollection)) {
foreach ($attachmentCollection as $a) {
$fileName = 'data/upload/' . $a->id;
@@ -311,6 +334,9 @@ class Sender
} else {
$messageId = '' . md5($email->get('name')) . '/' . time() . '/' . $rand . '@espo';
}
if ($email->get('isSystem')) {
$messageId .= '-system';
}
$messageIdHeader = new \Zend\Mail\Header\MessageId();
$messageIdHeader->setId($messageId);

View File

@@ -18,6 +18,13 @@
*
* 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\Notificators;

View File

@@ -18,6 +18,13 @@
*
* 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\ORM;
@@ -37,6 +44,7 @@ class Entity extends \Espo\ORM\Entity
$collection = $this->get($field, $defs);
$ids = array();
$names = new \stdClass();
$types = new \stdClass();
if (!empty($columns)) {
$columnsData = new \stdClass();
}
@@ -46,6 +54,7 @@ class Entity extends \Espo\ORM\Entity
$id = $e->id;
$ids[] = $id;
$names->$id = $e->get('name');
$types->$id = $e->get('type');
if (!empty($columns)) {
$columnsData->$id = new \stdClass();
foreach ($columns as $column => $f) {
@@ -57,6 +66,7 @@ class Entity extends \Espo\ORM\Entity
$this->set($field . 'Ids', $ids);
$this->set($field . 'Names', $names);
$this->set($field . 'Types', $types);
if (!empty($columns)) {
$this->set($field . 'Columns', $columnsData);
}

View File

@@ -18,6 +18,13 @@
*
* 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\ORM;

View File

@@ -18,6 +18,13 @@
*
* 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\ORM\Repositories;

View File

@@ -18,6 +18,13 @@
*
* 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\ORM;

View File

@@ -18,6 +18,13 @@
*
* 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\ORM;

View File

@@ -0,0 +1,57 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2015 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\Pdf;
require "vendor/tecnick.com/tcpdf/tcpdf.php";
class Tcpdf extends \TCPDF
{
protected $footerHtml = '';
protected $footerPosition = 15;
public function setFooterHtml($html)
{
$this->footerHtml = $html;
}
public function setFooterPosition($position)
{
$this->footerPosition = $position;
}
public function Footer() {
$this->SetY((-1) * $this->footerPosition);
$html = str_replace('{pageNumber}', '{:pnp:}', $this->footerHtml);
$this->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, '', 0, false, 'T');
}
}

View File

@@ -18,6 +18,13 @@
*
* 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\Repositories;

View File

@@ -18,6 +18,13 @@
*
* 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;

View File

@@ -18,6 +18,13 @@
*
* 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\SelectManagers;
@@ -65,6 +72,11 @@ class Base
return $this->user;
}
protected function getAcl()
{
return $this->acl;
}
public function setEntityType($entityType)
{
$this->entityType = $entityType;
@@ -75,20 +87,20 @@ class Base
return $this->entityType;
}
protected function limit($params, &$result)
protected function limit($offset = null, $maxSize = null, &$result)
{
if (isset($params['offset']) && !is_null($params['offset'])) {
$result['offset'] = $params['offset'];
if (!is_null($offset)) {
$result['offset'] = $offset;
}
if (isset($params['maxSize']) && !is_null($params['maxSize'])) {
$result['limit'] = $params['maxSize'];
if (!is_null($maxSize)) {
$result['limit'] = $maxSize;
}
}
protected function order($params, &$result)
protected function order($sortBy, $asc, &$result)
{
if (!empty($params['sortBy'])) {
$result['orderBy'] = $params['sortBy'];
if (!empty($sortBy)) {
$result['orderBy'] = $sortBy;
$type = $this->metadata->get("entityDefs.{$this->entityType}.fields." . $result['orderBy'] . ".type");
if ($type == 'link') {
$result['orderBy'] .= 'Name';
@@ -96,12 +108,10 @@ class Base
$result['orderBy'] .= 'Type';
}
}
if (isset($params['asc'])) {
if ($params['asc']) {
$result['order'] = 'ASC';
} else {
$result['order'] = 'DESC';
}
if ($asc) {
$result['order'] = 'ASC';
} else {
$result['order'] = 'DESC';
}
}
@@ -118,78 +128,61 @@ class Base
return $this->seed;
}
protected function textFilter($value, &$result)
public function applyWhere($where, &$result)
{
$fieldDefs = $this->getSeed()->getFields();
$fieldList = $this->getTextFilterFields();
$d = array();
foreach ($fieldList as $field) {
if (
strlen($item['value']) >= self::MIN_LENGTH_FOR_CONTENT_SEARCH
&&
!empty($fieldDefs[$field]['type']) && $fieldDefs[$field]['type'] == 'text'
) {
$d[$field . '*'] = '%' . $value . '%';
} else {
$d[$field . '*'] = $value . '%';
}
}
$result['whereClause'][] = array(
'OR' => $d
);
$this->prepareResult($result);
$this->where($where, $result);
}
protected function where($params, &$result)
protected function where($where, &$result)
{
if (!empty($params['where']) && is_array($params['where'])) {
$where = array();
$this->prepareResult($result);
foreach ($params['where'] as $item) {
if ($item['type'] == 'bool' && !empty($item['value']) && is_array($item['value'])) {
foreach ($item['value'] as $filter) {
$p = $this->getBoolFilterWhere($filter);
if (!empty($p)) {
$params['where'][] = $p;
}
$this->boolFilter($filter, $result);
$whereClause = array();
foreach ($where as $item) {
if ($item['type'] == 'bool' && !empty($item['value']) && is_array($item['value'])) {
foreach ($item['value'] as $filter) {
$p = $this->getBoolFilterWhere($filter);
if (!empty($p)) {
$where[] = $p;
}
} else if ($item['type'] == 'textFilter' && !empty($item['value'])) {
if (!empty($item['value'])) {
$this->textFilter($item['value'], $result);
}
} else if ($item['type'] == 'primary' && !empty($item['value'])) {
$this->primaryFilter($item['value'], $result);
$this->applyBoolFilter($filter, $result);
}
} else if ($item['type'] == 'textFilter' && !empty($item['value'])) {
if (!empty($item['value'])) {
$this->textFilter($item['value'], $result);
}
} else if ($item['type'] == 'primary' && !empty($item['value'])) {
$this->applyPrimaryFilter($item['value'], $result);
}
}
$linkedWith = array();
$inCategory = array();
$ignoreList = ['linkedWith', 'inCategory', 'bool', 'primary'];
foreach ($where as $item) {
if (!in_array($item['type'], $ignoreList)) {
$part = $this->getWherePart($item);
if (!empty($part)) {
$whereClause[] = $part;
}
} else {
if ($item['type'] == 'linkedWith' && !empty($item['value'])) {
$linkedWith[$item['field']] = $item['value'];
} else if ($item['type'] == 'inCategory' && !empty($item['value'])) {
$inCategory[$item['field']] = $item['value'];
}
}
}
$linkedWith = array();
$inCategory = array();
$result['whereClause'] = array_merge($result['whereClause'], $whereClause);
$ignoreList = ['linkedWith', 'inCategory', 'bool', 'primary'];
foreach ($params['where'] as $item) {
if (!in_array($item['type'], $ignoreList)) {
$part = $this->getWherePart($item);
if (!empty($part)) {
$where[] = $part;
}
} else {
if ($item['type'] == 'linkedWith' && !empty($item['value'])) {
$linkedWith[$item['field']] = $item['value'];
} else if ($item['type'] == 'inCategory' && !empty($item['value'])) {
$inCategory[$item['field']] = $item['value'];
}
}
}
$result['whereClause'] = array_merge($result['whereClause'], $where);
if (!empty($linkedWith)) {
$this->handleLinkedWith($linkedWith, $result);
}
if (!empty($inCategory)) {
$this->handleInCategory($inCategory, $result);
}
if (!empty($linkedWith)) {
$this->handleLinkedWith($linkedWith, $result);
}
if (!empty($inCategory)) {
$this->handleInCategory($inCategory, $result);
}
}
@@ -226,6 +219,7 @@ class Base
$result['whereClause'][] = $part;
}
$result['joins'] = array_merge($result['joins'], $joins);
$result['joins'] = array_unique($result['joins']);
$result['distinct'] = true;
}
@@ -255,15 +249,15 @@ class Base
if ($defs['type'] == 'manyMany') {
if (!empty($defs['relationName']) && !empty($defs['midKeys'])) {
if (!empty($defs['midKeys'])) {
$result['distinct'] = true;
$result['joins'][] = $link;
$key = $defs['midKeys'][1];
$relationName = lcfirst($defs['relationName']);
$middleName = $link . 'Middle';
$result['customJoin'] .= "
JOIN " . $query->toDb($pathName) . " AS `{$pathName}` ON {$pathName}.descendor_id = ".$query->sanitize($relationName) . "." . $query->toDb($key) . "
JOIN " . $query->toDb($pathName) . " AS `{$pathName}` ON {$pathName}.descendor_id = ".$query->sanitize($middleName) . "." . $query->toDb($key) . "
";
$part[$pathName . '.ascendorId'] = $val;
}
@@ -289,27 +283,44 @@ class Base
protected function q($params, &$result)
{
if (!empty($params['q'])) {
$fieldDefs = $this->getSeed()->getFields();
$this->textFilter($params['q'], $result);
}
}
$value = $params['q'];
public function manageAccess(&$result)
{
$this->prepareResult($result);
$this->applyAccess($result);
}
$fieldList = $this->getTextFilterFields();
$d = array();
foreach ($fieldList as $field) {
if (
strlen($value) >= self::MIN_LENGTH_FOR_CONTENT_SEARCH
&&
!empty($fieldDefs[$field]['type']) && $fieldDefs[$field]['type'] == 'text'
) {
$d[$field . '*'] = '%' . $value . '%';
} else {
$d[$field . '*'] = $value . '%';
}
}
public function manageTextFilter($textFilter, &$result)
{
$this->prepareResult($result);
$this->q(array('q' => $textFilter), $result);
}
$result['whereClause'][] = array(
'OR' => $d
);
protected function prepareResult(&$result)
{
if (empty($result)) {
$result = array();
}
if (empty($result['joins'])) {
$result['joins'] = [];
}
if (empty($result['leftJoins'])) {
$result['leftJoins'] = [];
}
if (empty($result['whereClause'])) {
$result['whereClause'] = array();
}
if (empty($result['customJoin'])) {
$result['customJoin'] = '';
}
if (empty($result['additionalSelectColumns'])) {
$result['additionalSelectColumns'] = array();
}
if (empty($result['joinConditions'])) {
$result['joinConditions'] = array();
}
}
@@ -317,20 +328,28 @@ class Base
{
if ($this->acl->checkReadOnlyOwn($this->entityType)) {
$this->accessOnlyOwn($result);
}
if (!$this->user->isAdmin() && $this->acl->checkReadOnlyTeam($this->entityType)) {
$this->accessOnlyTeam($result);
} else {
if (!$this->user->isAdmin() && $this->acl->checkReadOnlyTeam($this->entityType)) {
$this->accessOnlyTeam($result);
}
}
}
protected function accessOnlyOwn(&$result)
{
if (!$this->getSeed()->hasField('assignedUserId')) {
if ($this->getSeed()->hasField('assignedUserId')) {
$result['whereClause'][] = array(
'assignedUserId' => $this->getUser()->id
);
return;
}
if ($this->getSeed()->hasField('createdById')) {
$result['whereClause'][] = array(
'createdById' => $this->getUser()->id
);
return;
}
$result['whereClause'][] = array(
'assignedUserId' => $this->getUser()->id
);
}
protected function accessOnlyTeam(&$result)
@@ -353,22 +372,48 @@ class Base
public function getAclParams()
{
$result = array();
$this->access($result);
$this->applyAccess($result);
return $result;
}
public function getSelectParams(array $params, $withAcl = false)
{
$result = array(
'joins' => [],
'leftJoins' => [],
'whereClause' => [],
'customJoin' => ''
);
$result = array();
$this->prepareResult($result);
if (!empty($params['sortBy'])) {
if (!array_key_exists('asc', $params)) {
$params['asc'] = true;
}
$this->order($params['sortBy'], $params['asc'], $result);
}
if (!isset($params['offset'])) {
$params['offset'] = null;
}
if (!isset($params['maxSize'])) {
$params['maxSize'] = null;
}
$this->limit($params['offset'], $params['maxSize'], $result);
if (!empty($params['primaryFilter'])) {
$this->applyPrimaryFilter($params['primaryFilter'], $result);
}
if (!empty($params['boolFilterList']) && is_array($params['boolFilterList'])) {
foreach ($params['boolFilterList'] as $filterName) {
$this->applyBoolFilter($filterName, $result);
}
}
if (!empty($params['where']) && is_array($params['where'])) {
$this->where($params['where'], $result);
}
if (!empty($params['textFilter'])) {
$this->textFilter($params['textFilter'], $result);
}
$this->order($params, $result);
$this->limit($params, $result);
$this->where($params, $result);
$this->q($params, $result);
if ($withAcl) {
@@ -439,6 +484,60 @@ class Base
$where['type'] = 'after';
$dt->setTimezone(new \DateTimeZone('UTC'));
$where['value'] = $dt->format($format);
break;
case 'lastSevenDays':
$where['type'] = 'between';
$dtFrom = clone $dt;
$dt->setTimezone(new \DateTimeZone('UTC'));
$to = $dt->format($format);
$dtFrom->modify('-7 day');
$dtFrom->setTime(0, 0, 0);
$dtFrom->setTimezone(new \DateTimeZone('UTC'));
$from = $dtFrom->format($format);
$where['value'] = [$from, $to];
break;
case 'lastXDays':
$where['type'] = 'between';
$dtFrom = clone $dt;
$dt->setTimezone(new \DateTimeZone('UTC'));
$to = $dt->format($format);
$number = strval(intval($item['value']));
$dtFrom->modify('-'.$number.' day');
$dtFrom->setTime(0, 0, 0);
$dtFrom->setTimezone(new \DateTimeZone('UTC'));
$from = $dtFrom->format($format);
$where['value'] = [$from, $to];
break;
case 'nextXDays':
$where['type'] = 'between';
$dtTo = clone $dt;
$dt->setTimezone(new \DateTimeZone('UTC'));
$from = $dt->format($format);
$number = strval(intval($item['value']));
$dtTo->modify('+'.$number.' day');
$dtTo->setTime(24, 59, 59);
$dtTo->setTimezone(new \DateTimeZone('UTC'));
$to = $dtTo->format($format);
$where['value'] = [$from, $to];
break;
case 'on':
$where['type'] = 'between';
@@ -568,6 +667,36 @@ class Base
case 'future':
$part[$item['field'] . '>='] = date('Y-m-d');
break;
case 'lastSevenDays':
$dt1 = new \DateTime();
$dt2 = clone $dt1;
$dt2->modify('-7 days');
$part['AND'] = array(
$item['field'] . '>=' => $dt2->format('Y-m-d'),
$item['field'] . '<=' => $dt1->format('Y-m-d'),
);
break;
case 'lastXDays':
$dt1 = new \DateTime();
$dt2 = clone $dt1;
$number = strval(intval($item['value']));
$dt2->modify('-'.$number.' days');
$part['AND'] = array(
$item['field'] . '>=' => $dt2->format('Y-m-d'),
$item['field'] . '<=' => $dt1->format('Y-m-d'),
);
break;
case 'nextXDays':
$dt1 = new \DateTime();
$dt2 = clone $dt1;
$number = strval(intval($item['value']));
$dt2->modify('+'.$number.' days');
$part['AND'] = array(
$item['field'] . '>=' => $dt1->format('Y-m-d'),
$item['field'] . '<=' => $dt2->format('Y-m-d'),
);
break;
case 'currentMonth':
$dt = new \DateTime();
$part['AND'] = array(
@@ -633,19 +762,78 @@ class Base
return $part;
}
protected function boolFilter($filterName, &$result)
public function applyOrder($sortBy, $asc, &$result)
{
$this->prepareResult($result);
$this->order($sortBy, $asc, $result);
}
public function applyLimit($offset, $maxSize, &$result)
{
$this->prepareResult($result);
$this->limit($offset, $maxSize, $result);
}
public function applyPrimaryFilter($filterName, &$result)
{
$this->prepareResult($result);
$method = 'filter' . ucfirst($filterName);
if (method_exists($this, $method)) {
$this->$method($result);
}
}
public function applyBoolFilter($filterName, &$result)
{
$this->prepareResult($result);
$method = 'boolFilter' . ucfirst($filterName);
if (method_exists($this, $method)) {
$this->$method($result);
}
}
protected function primaryFilter($filterName, &$result)
public function applyTextFilter($textFilter, &$result)
{
$method = 'filter' . ucfirst($filterName);
if (method_exists($this, $method)) {
$this->$method($result);
$this->prepareResult($result);
$this->textFilter($textFilter, $result);
}
protected function textFilter($textFilter, &$result)
{
$fieldDefs = $this->getSeed()->getFields();
$fieldList = $this->getTextFilterFields();
$d = array();
foreach ($fieldList as $field) {
if (
strlen($textFilter) >= self::MIN_LENGTH_FOR_CONTENT_SEARCH
&&
!empty($fieldDefs[$field]['type']) && $fieldDefs[$field]['type'] == 'text'
) {
$d[$field . '*'] = '%' . $textFilter . '%';
} else {
$d[$field . '*'] = $textFilter . '%';
}
}
$result['whereClause'][] = array(
'OR' => $d
);
}
public function applyAccess(&$result)
{
$this->prepareResult($result);
$this->access($result);
}
protected function boolFilters($params, &$result)
{
if (!empty($params['boolFilterList']) && is_array($params['boolFilterList'])) {
foreach ($params['boolFilterList'] as $filterName) {
$this->applyBoolFilter($filterName, $result);
}
}
}

View File

@@ -18,10 +18,16 @@
*
* 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;
use \Espo\Core\Exceptions\Error;
use \Espo\Core\Utils\Util;

View File

@@ -18,6 +18,13 @@
*
* 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\Services;

View File

@@ -18,6 +18,13 @@
*
* 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\Templates\Controllers;

View File

@@ -18,6 +18,13 @@
*
* 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\Templates\Controllers;

View File

@@ -18,6 +18,13 @@
*
* 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\Templates\Controllers;

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