Compare commits

...

2762 Commits
2.1.0 ... 5.0.0

Author SHA1 Message Date
Martin Edenhofer
d288b48b0a Updated to 5.0.0 2021-10-05 04:02:08 +02:00
Mantas Masalskis
94011846d6 Fixes #3773 - Inconstant alignment in the listing of attachments/submit button in new article area
Fixes #3774 - Broken dialog whiling uploading oversized attachment
2021-10-04 21:06:21 +02:00
Rolf Schmidt
09fc94cf72 Fixes #3779 - Core Workflow: Add organization condition attributes for object User. 2021-10-04 15:47:54 +02:00
Mantas Masalskis
c34452f65e Fixes #3783 - Improve contrasts in answer search for articles 2021-10-04 15:43:18 +02:00
Rolf Schmidt
2b77711150 Maintenance: Add another reload to setup new js for core workflow. 2021-10-04 15:26:07 +02:00
Rolf Schmidt
57945692cc Follow up 5f2181d8a3 - Fixes #3757 - escaped 'Set fixed' workflows don't refresh set values on active ticket sessions. 2021-10-04 15:26:06 +02:00
Martin Gruner
dfb2abe380 Maintenance: Specify a certain PostgreSQL version for the build process that still works with older platforms. 2021-10-04 14:57:48 +02:00
Rolf Schmidt
07c6bdacfb Fixes #3781 - ObjectManager Attribute without screen attribute causes CoreWorkflows migration to fail 2021-10-01 16:54:05 +02:00
benrubson
ff03e664db Fixes #2674, closes #3775 - Zammad preflight check warning output causes Syntax-Error in postinstall.sh and failing installation. 2021-10-01 16:54:05 +02:00
Romit Choudhary
c72006216e Fixes #2780 - Shared Organisation issue create your first ticket 2021-10-01 16:54:04 +02:00
Rolf Schmidt
6efafd37ae Fixes #3776 - Force users to reload after system migration. 2021-10-01 16:54:03 +02:00
Dominik Klein
35f45f690f Maintenance: Port customer ticket create fields test to capybara. 2021-10-01 16:54:03 +02:00
Romit Choudhary
23c8db7e58 Fixes #2351 - Unable to cancel attachment upload 2021-10-01 16:54:02 +02:00
Martin Gruner
8382a71813 Maintenance: Port admin_calendar_sla_test.rb to Capybara. 2021-10-01 16:54:01 +02:00
Thorsten Eckel
9bb1cf6d00 Fixes #3777 - misspelled KnowledgeBase constant breaks update. 2021-10-01 16:54:01 +02:00
Mantas
2bba743dc3 Fixes #2619 - KB header and footer link-color not changeable 2021-10-01 16:54:00 +02:00
Mantas
d7b0c639c4 Fixes #3028 - Syntax errors break scheduler job for good 2021-10-01 16:53:49 +02:00
Martin Edenhofer
13668dfc8b Fixes #3365 - No script content (e. g. JavaScript) in emails 2021-09-29 10:14:34 +02:00
Mantas Masalskis
1e70665d1a Fixes #3772 - Existing tickets: New article modal with padding-left: 0; padding-right: 0; 2021-09-29 10:09:47 +02:00
Rolf Schmidt
4b0d4f798f Fixes #3757 - escaped 'Set fixed' workflows don't refresh set values on active ticket sessions. 2021-09-29 10:03:34 +02:00
Thorsten Eckel
9ad7c43cd5 Maintenance: Pluralize admin navigation entry name for Core Workflows. 2021-09-29 09:59:56 +02:00
Martin Gruner
ab9fa3d23d Maintenance: Bump nokogiri to v1.12.5. 2021-09-28 08:52:18 +02:00
Dominik Klein
5222f4ba6d Maintenance: Port agent ticket update tests to capybara. 2021-09-27 12:50:50 +02:00
Martin Gruner
9689d3d97e Maintenance: Stabilize System > Objects test (another try). 2021-09-27 11:59:17 +02:00
Martin Gruner
6a10308f29 Maintenance: Stabilize System > Objects test. 2021-09-25 06:29:14 +02:00
Martin Gruner
ab3cede8ef Maintenance: Port System > Translations test to capybara. 2021-09-24 16:20:00 +02:00
Martin Gruner
fa3cb1925d Fixes: #3765 - Possible race condition causing OTRS import to fail 2021-09-24 09:28:28 +02:00
Mantas
a7def1d62d Fixes #3746 - Incorrect alignment in the listing of attachments when creating a ticket 2021-09-23 16:35:28 +02:00
Rolf Schmidt
a3df6b8581 Fixes #3758 - Saved conditions break on selections without reloading. 2021-09-23 15:51:18 +02:00
Romit Choudhary
dd201db791 Fixes #3075 - Misleading view of user icons which are on vacation and disabled 2021-09-23 15:48:24 +02:00
Martin Gruner
60c0b08d21 Maintenance: Work around timeouts caused by the sanitizer in slow CI environments. 2021-09-23 15:15:24 +02:00
Martin Gruner
95571b70c9 Maintenance: Improve template rendering. 2021-09-23 12:02:18 +00:00
Dominik Klein
678161be2e Maintenance: Refactoring of Avatar storage logic. 2021-09-23 12:02:18 +00:00
Rolf Schmidt
008053f730 Maintenance: Add assets level to have different data sets based on permissions 2021-09-23 12:02:18 +00:00
Thorsten Eckel
ed1782fafc Maintenance: Enhance attachment preview capabilities 2021-09-23 12:02:18 +00:00
Rolf Schmidt
72f39d0d9d Maintenance: Remove while loop user check login. 2021-09-23 12:02:18 +00:00
Dominik Klein
7a156c5d48 Maintenance: Improve package installation. 2021-09-23 12:02:18 +00:00
Thorsten Eckel
f31aeec8db Maintenance: Improve application boot time by reducing initial asset payload 2021-09-23 12:02:18 +00:00
Dominik Klein
f67cf3ab1e Maintenance: Increase performance of ticket creation via form. 2021-09-23 12:02:18 +00:00
Thorsten Eckel
b125b3603e Maintenance: Improve clipboard handling of website chat 2021-09-23 12:02:18 +00:00
Martin Gruner
b1e8b3afae Maintenance: Improved updating of user records in the front end. 2021-09-23 12:02:18 +00:00
Rolf Schmidt
573c975bad Maintenance: Enhanced GitHub and GitLab GraphQL endpoint check 2021-09-23 12:02:18 +00:00
Martin Gruner
25155eb6a3 Maintenance: Improved updating of user records. 2021-09-23 12:02:18 +00:00
Romit Choudhary
d98445d1fe Fixes #3755 - User with user_id 1 is show in admin interface (which should not) 2021-09-23 14:01:09 +02:00
Dominik Klein
9beb793e3b Maintenance: Try to improve the stabilzation of the security settings selenium test. 2021-09-23 10:21:15 +02:00
Rolf Schmidt
041c0d61ef Follow up fa4577d463 - Fixes #3710 - Unable to close tickets in certran cases if core workflow is used. 2021-09-23 09:52:08 +02:00
Rolf Schmidt
8da05162ee Fixes #3759 - Login failed after upgrade to zammad 5.0. 2021-09-23 07:13:23 +00:00
Martin Gruner
3de9fc84aa Maintenance: Bump twilio-ruby from 5.58.2 to 5.58.3
Bumps [twilio-ruby](https://github.com/twilio/twilio-ruby) from 5.58.2 to 5.58.3.
- [Release notes](https://github.com/twilio/twilio-ruby/releases)
- [Changelog](https://github.com/twilio/twilio-ruby/blob/main/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-ruby/compare/5.58.2...5.58.3)
2021-09-23 03:05:19 +02:00
Dominik Klein
2d8780c269 Maintenance: Try to improve the stabilzation of the manage groups selenium test. 2021-09-22 22:01:39 +02:00
Rolf Schmidt
f9ffa3ef51 Fixes #3762 - Unable to create a ticket in web app if default for additional boolean value is FALSE. 2021-09-22 13:57:53 +01:00
Bola Ahmed Buari
775709f7f2 Fixes #3696 - User search / selection does not always work if you want to correct your search 2021-09-22 07:58:18 +00:00
Bola Ahmed Buari
2ee3fcf345 Maintenance: Port old preferences token access tests to capybara. 2021-09-22 09:57:23 +02:00
Bola Ahmed Buari
289187238f Maintenance: Port old preferences permission check tests to capybara. 2021-09-22 07:52:35 +00:00
Martin Gruner
183f89f810 Maintenance: Bump rubocop-rspec from 2.4.0 to 2.5.0 2021-09-22 08:53:16 +02:00
Martin Gruner
afd8557427 Maintenance: Stabilize Manage > Calendars test. 2021-09-21 16:45:14 +02:00
Rolf Schmidt
f5fe735594 Fixes #3751 - Unable to create new organization. 2021-09-21 16:39:02 +02:00
Martin Gruner
1431a3d8e7 Maintenance: Stabilize System > Objects test. 2021-09-21 11:29:52 +00:00
Rolf Schmidt
b51ae211b3 Fixes #3752 - Core Workflow "is not" operator is working unexpected. 2021-09-21 09:22:13 +01:00
Martin Gruner
3be8f6d032 Refactoring: Port System > Objects browser tests to capybara. 2021-09-21 09:29:59 +02:00
Martin Gruner
f520667489 Maintenance: Bump bootsnap from 1.9.0 to 1.9.1
Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.9.0 to 1.9.1.
- [Release notes](https://github.com/Shopify/bootsnap/releases)
- [Changelog](https://github.com/Shopify/bootsnap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Shopify/bootsnap/compare/v1.9.0...v1.9.1)
2021-09-21 03:05:41 +02:00
Rolf Schmidt
d5d5b3b7b8 Fixes #2102 - Read-only custom objects. 2021-09-20 18:12:33 +02:00
Rolf Schmidt
85cee64c73 Fixes #3736 - scrollPageHeader disappears when answering via email. 2021-09-20 16:10:31 +00:00
Rolf Schmidt
2f72ac96d0 Fixes #3684 - Scheduler ignores "disable notifications == no". 2021-09-20 18:09:38 +02:00
Rolf Schmidt
ac5fcedc6a Fixes #3194 - Granular admin permission for google channel is missing. 2021-09-20 18:03:47 +02:00
Rolf Schmidt
61406365f0 Fixes #3088 - Notes on existing ticks are discarded by editing profile settings. 2021-09-20 18:02:10 +02:00
Rolf Schmidt
3b18f7feaf Fixes #3743 - Owner selection empty or pending reminder data picker not shown if customer field has content but no customer is selected (in ticket create screen). 2021-09-20 17:57:51 +02:00
Martin Gruner
a389b8f07c Maintenance: Replace rand() where possible 2021-09-20 12:47:05 +02:00
Rolf Schmidt
ff28e17672 Maintenance: Add rubocop to check if a db_strategy is required in your spec test. 2021-09-20 09:14:27 +02:00
Martin Gruner
8d10872c5d Maintenance: Bump bootsnap from 1.8.1 to 1.9.0
Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.8.1 to 1.9.0.
- [Release notes](https://github.com/Shopify/bootsnap/releases)
- [Changelog](https://github.com/Shopify/bootsnap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Shopify/bootsnap/compare/v1.8.1...v1.9.0)
2021-09-17 03:10:08 +02:00
Martin Gruner
770c1271a5 Maintenance: Fix unhandled race condidtions in file locking of the web socket server. 2021-09-16 14:33:28 +02:00
Dominik Klein
2d31b6ced4 Fixes #3741 - Removal of Microsoft365-Channel not possible via UI when having no email address relation. 2021-09-16 07:53:41 +00:00
Rolf Schmidt
f8240e85e0 Maintenance: Fix missing db_strategy reset for core workflow test. 2021-09-16 07:51:23 +00:00
Dominik Klein
05fa609eb5 Fixes #3203 - Removal of Google-Channel not possible via UI when having a normal email channel of same account. 2021-09-16 07:49:50 +00:00
Bola Ahmed Buari
bbbb923119 Maintenance: Port old reporting profile tests to capybara. 2021-09-16 07:40:46 +00:00
Martin Gruner
a4fb56400e Maintenance: Stabilize capybara test Manage > Calendars. 2021-09-16 06:19:27 +00:00
Dominik Klein
91e5392a83 Maintenance: Switch geo calendar integration test from http to https. 2021-09-15 18:07:30 +00:00
Rolf Schmidt
81e71de5c1 Fixes #3740 - Core-Workflow: Option manipulation of boolean attributes not possible. 2021-09-15 17:46:27 +00:00
Rolf Schmidt
1a3ecd91f4 Fixes #3739 - Core Workflow: Show hidden attributes on group selection (ticket edit). 2021-09-15 17:46:04 +00:00
Rolf Schmidt
03a831b53b Maintenance: Improve core workflow working only on last request to reduce form blocking and more checks on websocket connection. 2021-09-15 17:42:49 +00:00
Dominik Klein
83eb5fc0b1 Fixes #3235 - OTRS migration doesn't import article creation time. 2021-09-15 15:10:20 +00:00
Dominik Klein
cc29107ef7 Maintenance: Try to improve the stabilzation of the ticket zoom selenium test. 2021-09-15 11:45:30 +00:00
Dominik Klein
37e01cab84 Fixes #3378 - Spaces stay URL-encoded when going back to search results on KB for agents. 2021-09-15 06:32:34 +00:00
Martin Gruner
7597d147c1 Maintenance: Bump test-unit from 3.4.6 to 3.4.7
Bumps [test-unit](https://github.com/test-unit/test-unit) from 3.4.6 to 3.4.7.
- [Release notes](https://github.com/test-unit/test-unit/releases)
- [Commits](https://github.com/test-unit/test-unit/compare/3.4.6...3.4.7)
2021-09-15 06:09:51 +00:00
Martin Gruner
2d494ae4ce Follow-up: d57dadb2 - Maintenance: Fix issue with locale handling in tests. 2021-09-15 07:29:36 +02:00
Bola Ahmed Buari
34cf62fc10 Maintenance: Ported old setting tests to capybara. 2021-09-14 22:53:57 +02:00
Dominik Klein
c6b924acd7 Fixes #3705, fixes #3704 - Not working unpack of mail body if decrypted body is in signed-data attachment. 2021-09-14 11:48:16 +00:00
Martin Gruner
d57dadb2fb Maintenance: Fix issue with locale handling in tests. 2021-09-14 12:24:37 +02:00
Martin Gruner
f4c06f088e Maintenance: Add note about upcoming changes to translation management. 2021-09-14 10:48:17 +02:00
Martin Gruner
3e2ad0e19c Maintenance: Bump rubocop from 1.20.0 to 1.21.0 2021-09-14 09:46:08 +02:00
Dominik Klein
53d68b12ae Fixes #3574 - Use country codes (e.g. DE or ES) for knowledgebase answer selection. 2021-09-13 19:21:03 +02:00
Martin Gruner
6636af8d34 Maintenance: Fix a crash in the error handler of Zammad's file cache. 2021-09-13 14:45:48 +02:00
Mantas Masalskis
16ce1d6eb0 Maintenance: Transaction::Notification spec runs fine at any time of the day 2021-09-13 11:10:06 +02:00
Gleb Ostrowski
0c80232a27 Closes #3137 - New email account expert view cannot be opened without filling in all fields 2021-09-13 10:30:28 +02:00
Martin Gruner
ab39b3a3f1 Maintenance: Bump test-unit from 3.4.5 to 3.4.6
Bumps [test-unit](https://github.com/test-unit/test-unit) from 3.4.5 to 3.4.6.
- [Release notes](https://github.com/test-unit/test-unit/releases)
- [Commits](https://github.com/test-unit/test-unit/compare/3.4.5...3.4.6)
2021-09-13 05:30:01 +00:00
Martin Gruner
6150d9abf9 Maintenance: Bump rubocop-rails from 2.12.1 to 2.12.2
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.12.1 to 2.12.2.
- [Release notes](https://github.com/rubocop/rubocop-rails/releases)
- [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.12.1...v2.12.2)
2021-09-12 03:05:51 +02:00
Rolf Schmidt
28636727cc Fixes #3168 - Don't provide option to create API-Token if authentication via API token is disabled. 2021-09-10 17:26:17 +02:00
Rolf Schmidt
179b87ffe0 Maintenance: Improve core workflow order and fix naming for admin dialog. 2021-09-10 15:23:02 +00:00
Rolf Schmidt
854b936f0d Follow up c5659600f3 - Fixes #3726 - It should be possible to show attributes which are configured shown false. 2021-09-10 14:53:31 +00:00
Rolf Schmidt
f1cbb9a0c7 Fixes #3732 - admin.core_workflow permission is missing. 2021-09-10 12:31:10 +00:00
Martin Gruner
f32b184f7b Maintenance: Slice RSpec tests for faster test turnaround times. 2021-09-10 11:48:31 +02:00
Martin Gruner
58028f7081 Maintenance: Bump rubocop-rails from 2.11.3 to 2.12.1 2021-09-10 10:03:59 +02:00
Romit Choudhary
3b0a373de0 Fixes #3271 - AttributeManager doesn't display boolean default values within the UI 2021-09-09 14:40:53 +02:00
Rolf Schmidt
41691e9846 Fixes #257 - Define default "stay on tab" / "close tab" behavior. 2021-09-09 14:35:00 +02:00
Rolf Schmidt
b3bfe71ab8 Follow up bf41a7ac81 - Fixes #3717 - Spaces in front of mentions can cause partly content removal. 2021-09-09 14:16:10 +02:00
Rolf Schmidt
c5659600f3 Fixes #3726 - It should be possible to show attributes which are configured shown false. 2021-09-09 14:08:00 +02:00
Martin Gruner
5be743aee6 Maintenance: Bump zendesk_api from 1.32.0 to 1.33.0
Bumps [zendesk_api](https://github.com/zendesk/zendesk_api_client_rb) from 1.32.0 to 1.33.0.
- [Release notes](https://github.com/zendesk/zendesk_api_client_rb/releases)
- [Changelog](https://github.com/zendesk/zendesk_api_client_rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zendesk/zendesk_api_client_rb/compare/v1.32.0...v1.33.0)
2021-09-09 06:51:27 +00:00
Martin Gruner
3d4894fa7a Maintenance: Bump spring from 2.1.1 to 3.0.0
Bumps [spring](https://github.com/rails/spring) from 2.1.1 to 3.0.0.
- [Release notes](https://github.com/rails/spring/releases)
- [Changelog](https://github.com/rails/spring/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rails/spring/compare/v2.1.1...v3.0.0)
2021-09-09 06:49:23 +00:00
Martin Gruner
b05f1d1cf0 Maintenance: Bump twilio-ruby from 5.58.1 to 5.58.2
Bumps [twilio-ruby](https://github.com/twilio/twilio-ruby) from 5.58.1 to 5.58.2.
- [Release notes](https://github.com/twilio/twilio-ruby/releases)
- [Changelog](https://github.com/twilio/twilio-ruby/blob/main/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-ruby/compare/5.58.1...5.58.2)
2021-09-09 03:05:41 +02:00
Martin Gruner
92b2f72fb8 Maintenance: Fix race condition in ticket number generator tests. 2021-09-07 14:28:00 +02:00
Dominik Klein
ae4f400713 Maintenance: Moved pagination controller concern to the proper place. 2021-09-07 12:34:10 +02:00
Romit Choudhary
2a429af5af Fixes #3725 - Drop files here not disappearing after dropping a file 2021-09-07 10:31:51 +00:00
Romit Choudhary
7726693dfb Fixes #2528 - Manage -> Calendars -> Edit: "Subscribe to public holidays in" sorted wrong 2021-09-07 11:16:01 +02:00
Mantas
ece077a503 Maintenance: remove unnecessary calls to await_empty_ajax_queue 2021-09-07 07:10:14 +00:00
Mantas Masalskis
5a47caab33 Fixes #2931 - Pending reminder notifications are not sent if ticket is opened in tab 2021-09-06 17:43:29 +02:00
Mantas Masalskis
380aa01643 Maintenance: improves "Article ID URL / link" test performance 2021-09-06 16:56:07 +02:00
Martin Gruner
c976a07557 Maintenance: Bump test-unit from 3.4.4 to 3.4.5
Bumps [test-unit](https://github.com/test-unit/test-unit) from 3.4.4 to 3.4.5.
- [Release notes](https://github.com/test-unit/test-unit/releases)
- [Commits](https://github.com/test-unit/test-unit/compare/3.4.4...3.4.5)
2021-09-03 23:06:10 +02:00
Rolf Schmidt
b4e6c3d0f2 Fixes #3721 - Fields are falsey displayed as mandatory if they contain historic screen values. 2021-09-03 15:16:34 +02:00
Martin Gruner
b43bcc4983 Maintenance: Bump autoprefixer-rails from 10.3.1.0 to 10.3.3.0
Bumps [autoprefixer-rails](https://github.com/ai/autoprefixer-rails) from 10.3.1.0 to 10.3.3.0.
- [Release notes](https://github.com/ai/autoprefixer-rails/releases)
- [Changelog](https://github.com/ai/autoprefixer-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ai/autoprefixer-rails/commits)
2021-09-02 23:05:37 +02:00
Romit Choudhary
04fcebbb71 Fixes #3265 - Space after ticket hook in ticket/zoom 2021-09-02 18:06:06 +00:00
Martin Gruner
0faf0a0759 Maintenance: Remove obsolete CSP header unsafe_inline configuration exception. 2021-09-02 16:35:29 +02:00
Martin Gruner
ce4ca035d6 Maintenance: Add missing gem 'csv' to gemfile, and only load it when it's actuallly used. 2021-09-02 09:24:58 +02:00
Rolf Schmidt
60c9c45c96 Fixes #3717 - Spaces in front of mentions can cause partly content removal. 2021-09-02 08:55:30 +02:00
Rolf Schmidt
fa4577d463 Follow up 7de423517e - Fixes #3710 - Unable to close tickets in certran cases if core workflow is used. 2021-09-01 14:44:30 +02:00
Rolf Schmidt
871d9609e1 Fixes #3503 - ticket.customer_id is current_user breaks email fetching. 2021-09-01 11:46:34 +02:00
Dominik Klein
decf868823 Maintenance: Ported maintenance mode test to capybara to increase the test stabilization. 2021-09-01 07:24:22 +00:00
Dominik Klein
edcb483b85 Maintenance: Ported chat test to capybara to increase the test stabilization. 2021-09-01 09:22:36 +02:00
Mantas
423fafb701 Fixes #3329 - Scheduler jobs don't ensure current ticket information if they're running a long time 2021-08-31 10:05:12 +00:00
Rolf Schmidt
080ccc4a66 Fixes #3713 - Core workflows breaks groups selection for customer panel 2021-08-30 15:26:24 +02:00
Mantas Masalskis
4a9f448de7 Fixes #457 - Scheduler Time offset 2021-08-30 14:25:48 +02:00
Mantas
6be39c9625 Fixes #2366 - "Warten auf Erinnerung" - Inconsistent timestamps 2021-08-30 07:50:30 +00:00
Mantas
c305ff89be Fixes #2157 - Ical escaltion update the calendar entry to 2:00 am 2021-08-30 07:44:49 +00:00
Martin Gruner
f8a231f59c Maintenance: Bump bootsnap from 1.8.0 to 1.8.1
Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.8.0 to 1.8.1.
- [Release notes](https://github.com/Shopify/bootsnap/releases)
- [Changelog](https://github.com/Shopify/bootsnap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Shopify/bootsnap/compare/v1.8.0...v1.8.1)
2021-08-27 23:05:22 +02:00
Rolf Schmidt
87f77338be Fixes #3694 - Inheritance of out of office settings. 2021-08-27 17:09:11 +02:00
Rolf Schmidt
7de423517e Fixes #3710 - Unable to close tickets in certran cases if core workflow is used. 2021-08-27 15:03:52 +00:00
Rolf Schmidt
96c126aca3 Fixes #3712 - Core worflow perform action "select" should not make multiple values selectable. 2021-08-27 14:57:17 +00:00
Rolf Schmidt
e359dd75bb Fixes #3707 - Setting for CheckMK not saved in zammad. 2021-08-27 12:40:14 +01:00
Martin Gruner
33e3b807f3 Maintenance: Bump rubocop from 1.19.1 to 1.20.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.19.1 to 1.20.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.19.1...v1.20.0)
2021-08-27 06:11:05 +00:00
Martin Gruner
601cbf8ea0 Maintenance: Bump bootsnap from 1.7.7 to 1.8.0
Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.7.7 to 1.8.0.
- [Release notes](https://github.com/Shopify/bootsnap/releases)
- [Changelog](https://github.com/Shopify/bootsnap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Shopify/bootsnap/compare/v1.7.7...v1.8.0)
2021-08-27 06:09:26 +00:00
Martin Gruner
e313b90872 Maintenance: Bump daemons from 1.4.0 to 1.4.1
Bumps [daemons](https://github.com/thuehlinger/daemons) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/thuehlinger/daemons/releases)
- [Changelog](https://github.com/thuehlinger/daemons/blob/master/Releases)
- [Commits](https://github.com/thuehlinger/daemons/compare/v1.4.0...v1.4.1)
2021-08-26 23:05:49 +02:00
Rolf Schmidt
78edf31976 Maintenance: Add missing options for tree select perform actions. 2021-08-26 14:16:04 +01:00
Mantas Masalskis
6b8655856e Maintenance: Refactor Zendesk import tests 2021-08-26 14:14:40 +02:00
Martin Gruner
294e6ba361 Maintenance: Bump twilio-ruby from 5.58.0 to 5.58.1
Bumps [twilio-ruby](https://github.com/twilio/twilio-ruby) from 5.58.0 to 5.58.1.
- [Release notes](https://github.com/twilio/twilio-ruby/releases)
- [Changelog](https://github.com/twilio/twilio-ruby/blob/main/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-ruby/compare/5.58.0...5.58.1)
2021-08-25 23:05:39 +02:00
Rolf Schmidt
d0689778dc Fixes #2293 - Any user can be set as a replacement for out of office. 2021-08-25 15:08:05 +02:00
Rolf Schmidt
05a471f90d Fixes #3709, #Fixes 1262 - Core Workflow implementation 2021-08-25 14:24:42 +02:00
Rolf Schmidt
60a3758d38 Fixes #2544 - Can't remove auto assignment timeout. 2021-08-24 16:37:19 +02:00
Rolf Schmidt
f862f7ac5d Fixes #2455 - Assign Follow ups has no affect. 2021-08-24 15:57:50 +02:00
Thorsten Eckel
25178b27b8 Follow up - 467bc03224 - Fixes #2389 - Broken Setting structure for Auth::Backend adapters. 2021-08-24 10:35:55 +02:00
Martin Gruner
a7f8855cea Maintenance: Do not preload lib/. 2021-08-24 09:56:12 +02:00
Martin Gruner
66805cc6de Maintenance: Bump faker from 2.18.0 to 2.19.0
Bumps [faker](https://github.com/faker-ruby/faker) from 2.18.0 to 2.19.0.
- [Release notes](https://github.com/faker-ruby/faker/releases)
- [Changelog](https://github.com/faker-ruby/faker/blob/master/CHANGELOG.md)
- [Commits](https://github.com/faker-ruby/faker/compare/v2.18.0...v2.19.0)
2021-08-23 23:05:25 +02:00
Mantas
9933922eb9 Fixes #3706 - The calendar shows Chilean holidays one day in advance 2021-08-23 14:50:05 +00:00
Martin Gruner
271a9e746d Maintenance: Allow patch level updates for Rails. 2021-08-23 12:22:41 +02:00
Mantas
13f1aa8003 Maintenance: Bumped Rails to 6.0.4.1 (CVE-2021-22942) 2021-08-23 09:18:40 +03:00
Rolf Schmidt
ac5b0b85ce Fixes #3703 - Organization removal does not clear organization_id from Tickets. 2021-08-20 11:11:20 +01:00
Martin Gruner
506c6aef8c Follow-up - 26db9dbc2 - Maintenance: More changes for inclusive language. 2021-08-20 10:56:23 +02:00
Martin Gruner
757de71bd8 Maintenance: Bump rubocop from 1.19.0 to 1.19.1 2021-08-20 07:47:29 +02:00
Mantas Masalskis
f3464cc4ac Fixes #2634 - Merge not possible with not set, required attributes 2021-08-20 05:36:30 +02:00
Mantas Masalskis
c8e2c7473c Fixes #3105 - Merging tickets doesn’t trigger notification for target ticket 2021-08-19 19:31:15 +02:00
Mantas Masalskis
2573723269 Fixes #3702 - One of DB migrations timestamp breaks migrations queue 2021-08-19 16:42:36 +02:00
Mantas
64f1b0c75b Fixes #3701 - Tags in ticket create screen displayed wrong 2021-08-19 12:33:43 +00:00
Mantas Masalskis
2632d9fc6b Refactoring: Moved Job#timeplan calculations into dedicated class 2021-08-19 14:29:28 +02:00
Rolf Schmidt
58c685f833 Fixes #3663 - Custom date attributes provide inconsistent sorting within grouping. 2021-08-19 09:42:56 +02:00
Martin Gruner
b238e695eb Maintenance: Bump rubocop-performance from 1.11.4 to 1.11.5
Bumps [rubocop-performance](https://github.com/rubocop/rubocop-performance) from 1.11.4 to 1.11.5.
- [Release notes](https://github.com/rubocop/rubocop-performance/releases)
- [Changelog](https://github.com/rubocop/rubocop-performance/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-performance/compare/v1.11.4...v1.11.5)
2021-08-18 23:05:29 +02:00
Rolf Schmidt
4e12a682f3 Follow up 7e6e751d69 - Fixes #3695 - Detect Jira follow-ups. 2021-08-18 12:52:41 +00:00
Mantas
8b5596647a Fixes #3697 - Mix of binary encoded ISO-8859-1 data in header fields (e.g. to) fails mail processing 2021-08-18 12:49:23 +00:00
Rolf Schmidt
2d6d15f9be Fixes #3514 - csv import example file download (organizations) is empty. 2021-08-18 14:38:34 +02:00
Martin Gruner
e5d9fb37dd Maintenance: Fix email tests by avoiding an unreliable external host. 2021-08-18 11:07:37 +02:00
Bola Ahmed Buari
db0229e629 Fixes #445 - Add bulk option to extended search 2021-08-18 10:47:40 +02:00
Romit Choudhary
3486390843 Fixes #3554 - Zammad sends mails even though there is no email address visible in TO or CC fields (any more) 2021-08-18 09:49:45 +02:00
Martin Gruner
28bbd774c2 Maintenance: Fix branch used for testing zammad-api-client-ruby. 2021-08-18 09:19:38 +02:00
Mantas Masalskis
92822b6713 Fixes #3647 - Error 500 / zammad {"error":" 123456 is out of range for ActiveModel::Type::Integer with limit 4 bytes"} 2021-08-18 06:48:16 +02:00
Mantas Masalskis
0668e17d18 Fixes #1653 - Default value not set for attributes of type input, select,... 2021-08-17 18:37:16 +02:00
Romit Choudhary
86d65a571b Fixes #3539 - When replying, quote article content only 2021-08-17 14:13:41 +02:00
Martin Gruner
26db9dbc24 Maintenance: Inclusive language 2021-08-17 14:10:02 +02:00
Dominik Klein
f80ac0e707 Fixes #3428 - Trigger ignores changes on some Ticket attributes. 2021-08-17 14:06:31 +02:00
Martin Gruner
bf7f993a7a Maintenance: Bump messagebird-rest from 2.0.0 to 3.0.0
Bumps [messagebird-rest](https://github.com/messagebird/ruby-rest-api) from 2.0.0 to 3.0.0.
- [Release notes](https://github.com/messagebird/ruby-rest-api/releases)
- [Commits](https://github.com/messagebird/ruby-rest-api/compare/v2.0.0...3.0.0)
2021-08-17 10:10:24 +00:00
Martin Gruner
6ad01206b2 Maintenance: Bump rspec-rails from 5.0.1 to 5.0.2
Bumps [rspec-rails](https://github.com/rspec/rspec-rails) from 5.0.1 to 5.0.2.
- [Release notes](https://github.com/rspec/rspec-rails/releases)
- [Changelog](https://github.com/rspec/rspec-rails/blob/main/Changelog.md)
- [Commits](https://github.com/rspec/rspec-rails/compare/v5.0.1...v5.0.2)
2021-08-17 05:47:23 +00:00
Mantas Masalskis
310846b8b4 Fixes #3068 - KB search does not allow pagination on endpoint 2021-08-17 07:44:54 +02:00
Rolf Schmidt
2fcf42dc0a Maintenance: Remove obsolete dev script for message bird. 2021-08-16 16:06:52 +01:00
Rolf Schmidt
1cf8ec8969 Fixes #3672 - MessageBird integration 2021-08-16 16:52:36 +02:00
Mantas Masalskis
0402c755de Fixes #3053 - “You have not created a ticket yet” shown but I already have closed tickets 2021-08-16 16:17:20 +02:00
Bola Ahmed Buari
cc2c5678f0 Fixes #2485: Add attachment via Trigger and scheduler if wanted by admin 2021-08-16 13:34:05 +02:00
Martin Gruner
0b394f6baf Maintenance: Activate reviewers setting for dependabot as upstream bug was fixed. 2021-08-16 13:21:15 +02:00
Bola Ahmed Buari
853519253e Closes #1890 - Support HTML5 'required' attribute in forms 2021-08-16 10:37:14 +02:00
Mantas Masalskis
dde8046470 Fixes #2612 - Tag KB Answers 2021-08-16 10:20:07 +02:00
Dominik Klein
467bc03224 Fixes #2389 - Enhance LDAP login to not affect "failed logins". 2021-08-16 08:49:32 +02:00
Mantas Masalskis
28829c334b Maintenance: Added methods to get list of tagged objects or references to them in backend code. 2021-08-16 07:57:44 +02:00
Martin Gruner
cb5a9dfb14 Maintenance: Bump pundit from 2.1.0 to 2.1.1
Bumps [pundit](https://github.com/varvet/pundit) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/varvet/pundit/releases)
- [Changelog](https://github.com/varvet/pundit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/varvet/pundit/compare/v2.1.0...v2.1.1)
2021-08-16 05:47:20 +00:00
Dominik Klein
7502c230d3 Maintenance: Stabilize hidden chat button selenium test case. 2021-08-14 00:05:18 +02:00
Rolf Schmidt
7e6e751d69 Fixes #3695 - Detect Jira follow-ups. 2021-08-13 14:39:09 +02:00
Martin Gruner
86e18abd00 Maintenance: Bump rubocop from 1.18.4 to 1.19.0 2021-08-13 08:03:57 +02:00
Dominik Klein
b564860989 Follow up - c89ed949 - Fixes #3681 - Freshdesk import works not with more then 30_000 tickets. 2021-08-12 22:01:45 +02:00
Dominik Klein
36be0a1d0c Maintenance: Enable rubocop policy 'Rails/Output' also for specs. 2021-08-12 21:22:12 +02:00
Thorsten Eckel
c89ed949de Fixes #3681 - Freshdesk import works not with more then 30_000 tickets. 2021-08-12 14:04:45 +02:00
Mantas Masalskis
29f98be91f Fixes #3660 - Pagination for knowledge base answer sorting breaks sorting 2021-08-12 12:08:50 +02:00
Martin Gruner
0239bc14ab Maintenance: Bump twilio-ruby from 5.57.1 to 5.58.0
Bumps [twilio-ruby](https://github.com/twilio/twilio-ruby) from 5.57.1 to 5.58.0.
- [Release notes](https://github.com/twilio/twilio-ruby/releases)
- [Changelog](https://github.com/twilio/twilio-ruby/blob/main/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-ruby/compare/5.57.1...5.58.0)
2021-08-11 23:06:50 +02:00
Martin Gruner
bc015d759b Maintenance: Remove forked dependency with official one in newer version. 2021-08-11 19:11:54 +00:00
Martin Gruner
35135d78a5 Maintenance: Simplify handling of Redis and Memcached variables in GitLab CI configuration to remove redundancy. 2021-08-11 13:29:38 +02:00
Mantas Masalskis
f270b20b4f Fixes #3583 - Zendesk-Import Connection reset by peer cancels import 2021-08-11 13:11:14 +02:00
Martin Gruner
4770e80f03 Maintenance: Switch to official Selenium docker images. 2021-08-11 11:29:56 +02:00
Rolf Schmidt
55ed75cfd7 Fixes #3113 - Prefer HTTP standard header "From" over custom "X-On-Behalf-Of" for impersonation. 2021-08-10 14:20:20 +00:00
Rolf Schmidt
884b5c6455 Fixes #3669 - Do not send domain and migrate domain out of Google and Microsoft 365 channels. 2021-08-10 14:42:56 +02:00
Rolf Schmidt
b8aeabce94 Fixes #3648 - high organization user count relates to bad performance. 2021-08-10 10:14:30 +02:00
Rolf Schmidt
dc734791c4 Fixes #3688 - Removing organizations removes user and ticket as well. 2021-08-09 09:47:42 +01:00
Dominik Klein
d11d1d4106 Fixes #3556 - Backtrace lines pollute log. 2021-08-06 17:16:20 +02:00
Martin Gruner
7700a25ca6 Maintenance: Bump webmock from 3.13.0 to 3.14.0
Bumps [webmock](https://github.com/bblimke/webmock) from 3.13.0 to 3.14.0.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.13.0...v3.14.0)
2021-08-05 23:09:56 +02:00
Mantas Masalskis
f7c53b1a20 Fixes #2851 - Wrong user is used when "X-On-Behalf-Of” header value is an email that starts with digits 2021-08-05 15:57:00 +02:00
Mantas
32be22113a Fixes #3590 - Allow out of office for one day without setting two days 2021-08-05 12:47:08 +00:00
Martin Gruner
d8f16b68ef Maintenance: Bump zendesk_api from 1.31.0 to 1.32.0
Bumps [zendesk_api](https://github.com/zendesk/zendesk_api_client_rb) from 1.31.0 to 1.32.0.
- [Release notes](https://github.com/zendesk/zendesk_api_client_rb/releases)
- [Changelog](https://github.com/zendesk/zendesk_api_client_rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zendesk/zendesk_api_client_rb/compare/v1.31.0...v1.32.0)
2021-08-05 10:14:36 +00:00
Martin Gruner
cb5bf53b45 Maintenance: Bump bootsnap from 1.7.6 to 1.7.7
Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.7.6 to 1.7.7.
- [Release notes](https://github.com/Shopify/bootsnap/releases)
- [Changelog](https://github.com/Shopify/bootsnap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Shopify/bootsnap/compare/v1.7.6...v1.7.7)
2021-08-05 10:13:19 +00:00
Dominik Klein
da12a36264 Fixes #3687 - FreshDesk Import doesn't pull in auto-assign domain(s) for organizations. 2021-08-05 08:40:31 +00:00
Dominik Klein
6a89d716be Fixes #3689 - FreshDesk Import brings in all users as inactive. 2021-08-05 08:39:05 +00:00
Martin Gruner
0b522cfe17 Maintenance: Bump autoprefixer-rails from 10.2.5.1 to 10.3.1.0
Bumps [autoprefixer-rails](https://github.com/ai/autoprefixer-rails) from 10.2.5.1 to 10.3.1.0.
- [Release notes](https://github.com/ai/autoprefixer-rails/releases)
- [Changelog](https://github.com/ai/autoprefixer-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ai/autoprefixer-rails/compare/10.2.5.1...10.3.1.0)
2021-08-05 08:26:12 +00:00
Dominik Klein
0dc650b5d8 Fixes #2565 - Visualise locked users in UI and make them unlock-able for admin 2021-08-05 10:11:35 +02:00
Mantas
9b1cc57202 Fixes #3680 - KB Public UI icons are misspaced 2021-08-05 07:53:03 +00:00
Martin Gruner
3b8ff4d178 Maintenance: Bump redis from 4.3.1 to 4.4.0
Bumps [redis](https://github.com/redis/redis-rb) from 4.3.1 to 4.4.0.
- [Release notes](https://github.com/redis/redis-rb/releases)
- [Changelog](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/redis/redis-rb/compare/v4.3.1...v4.4.0)
2021-07-29 06:40:39 +00:00
Martin Gruner
0ccf5e9f7f Maintenance: Bump twilio-ruby from 5.57.0 to 5.57.1
Bumps [twilio-ruby](https://github.com/twilio/twilio-ruby) from 5.57.0 to 5.57.1.
- [Release notes](https://github.com/twilio/twilio-ruby/releases)
- [Changelog](https://github.com/twilio/twilio-ruby/blob/main/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-ruby/compare/5.57.0...5.57.1)
2021-07-28 23:06:04 +02:00
Dominik Klein
0ded6e542b Fixes #3661 - FreshDesk Import Error - undefined method `body' for 10:Integer. 2021-07-28 16:40:08 +02:00
Dominik Klein
7f9c477cf4 Fixes #3302 - Representation of inactive customers and orgnizations. 2021-07-28 16:21:23 +02:00
Romit Choudhary
8a42ec4f7b Fixes #3449 - Cannot select multiple tickets in ticket overview with shift+click in Firefox 2021-07-28 16:05:34 +02:00
Romit Choudhary
cfa3f27dc4 Fixes #3460 - Drop files here drag area not always hidden 2021-07-28 15:59:53 +02:00
Romit Choudhary
520d834c1c Fixes #2930 - CTI Callerlog signaling hides "+" for new ticket if more than one user is found 2021-07-28 15:57:23 +02:00
Thorsten Eckel
e9a442160b Fixes #3679 - Zendesk URL check fails with Net::HTTPForbidden 403 error. 2021-07-28 08:53:18 +02:00
Mantas
f50016b008 Fixes #2407, Fixes #3003 - Mac Mail inline PDF destroys E-Mail-Body 2021-07-27 08:53:15 +02:00
Martin Gruner
66b14aa274 Maintenance: Bump bootsnap from 1.7.5 to 1.7.6
Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.7.5 to 1.7.6.
- [Release notes](https://github.com/Shopify/bootsnap/releases)
- [Changelog](https://github.com/Shopify/bootsnap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Shopify/bootsnap/compare/v1.7.5...v1.7.6)
2021-07-26 23:07:45 +02:00
Dominik Klein
1723d57cdd Fixes #3627 - Outdated urls on security page (third-party logins). 2021-07-26 11:01:05 +00:00
Dominik Klein
8b83bd4c1c Fixes #3568 - Duplicated article after bulk action was executed for newly created tickets without a browser refresh in between. 2021-07-26 12:58:42 +02:00
Dominik Klein
c346d8b66b Fixes #3667 - No possibility to enforce auto response if one of the blocking auto response mail header exists. 2021-07-26 12:30:56 +02:00
Martin Gruner
65db0d6dd3 Maintenance: Bump rubocop from 1.18.3 to 1.18.4
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.18.3 to 1.18.4.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.18.3...v1.18.4)
2021-07-26 07:10:12 +00:00
Dominik Klein
7e488ad134 Fixes #2886 - Text Editor deletes text unrecoverably if quicktext was canceled with Ctrl+Backspace. 2021-07-23 21:44:18 +00:00
Dominik Klein
6da7f50f9b Maintenance: Stabilize user profile popover selenium test case. 2021-07-23 16:41:52 +02:00
Ryan Lue
c23e174ee0 Refactoring: Migrate user permission handling to Pundit policies. 2021-07-23 13:07:16 +00:00
Thorsten Eckel
dc18e883ce Refactoring: Move all RSpec configurations to dedicated support files. 2021-07-22 18:52:09 +02:00
Thorsten Eckel
9c7ddb7a9d Maintenance: Removed unneeded authenticated: true meta attribute for system tests which is the default. 2021-07-22 16:24:18 +00:00
Rolf Schmidt
eea67c1774 Performance: Added mysql helper to do strategy: reset manually for mysql. 2021-07-22 14:01:34 +00:00
Dominik Klein
ea30bf80bf Fixes #3668 - The defined ignored attributes in the popover context are not working. 2021-07-22 12:45:40 +00:00
Dominik Klein
4ab01e3638 Fixes #3579 - Ensure Upload Cache files are removed after grace period. 2021-07-22 12:35:13 +00:00
Thorsten Eckel
14393c7a7a Maintenance: Removed obsolete line that removed build time dependencies in the past. 2021-07-22 11:04:29 +02:00
Thorsten Eckel
219f6c0c62 Fixes #3666 - Package installation fails because of too long file names. 2021-07-22 11:04:28 +02:00
Ryan Lue
d2efdb547d Refactoring: Use ticket scope policies more consistently, various small optimizations. 2021-07-21 14:04:17 +00:00
Martin Gruner
602308801e Maintenance: Fix badges in Readme. 2021-07-21 12:09:53 +00:00
Thorsten Eckel
887b779b40 Follow up - ca56de3648 - Maintenance: Updated to Rails 6.0.4 and the new Zeitwerk autoloader: Fixed deprecation of autoloading in initializers causing namespace lookup errors. 2021-07-21 12:00:13 +00:00
Martin Gruner
3d946cf362 Maintenance: Remove outdated and obsolete coveralls badge. 2021-07-21 10:58:24 +02:00
Martin Gruner
09fa75d121 Maintenance: Also perform browser-based OTRS import test via docker containers... 2021-07-21 08:16:29 +00:00
Martin Gruner
d2f4a410ab Maintenance: Bump brakeman from 5.0.4 to 5.1.1
Bumps [brakeman](https://github.com/presidentbeef/brakeman) from 5.0.4 to 5.1.1.
- [Release notes](https://github.com/presidentbeef/brakeman/releases)
- [Changelog](https://github.com/presidentbeef/brakeman/blob/main/CHANGES.md)
- [Commits](https://github.com/presidentbeef/brakeman/compare/v5.0.4...v5.1.1)
2021-07-20 21:05:41 +00:00
Ryan Lue
276c45b2e9 Refactoring: Drop Ticket.access_condition in favor of using Pundit scopes. 2021-07-20 17:35:02 +00:00
Martin Gruner
9f7bec8942 Maintenance: Add Brakeman for static security analysis. 2021-07-20 13:31:46 +00:00
Martin Gruner
fa7c4210bb Follow-up - 28d1594956 - Fixes #3580 - Add description to package manager GUI. 2021-07-20 13:11:38 +02:00
Martin Gruner
28d1594956 Follow-up - 51bf33d - Fixes #3580 - Add description to package manager GUI. 2021-07-20 09:38:58 +00:00
Martin Gruner
d4e26f878c Maintenance: Bump activerecord-import from 1.1.0 to 1.2.0
Bumps [activerecord-import](https://github.com/zdennis/activerecord-import) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/zdennis/activerecord-import/releases)
- [Changelog](https://github.com/zdennis/activerecord-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zdennis/activerecord-import/compare/v1.1.0...v1.2.0)
2021-07-20 06:17:15 +00:00
Martin Gruner
1440e9879c Maintenance: Bump guard from 2.17.0 to 2.18.0
Bumps [guard](https://github.com/guard/guard) from 2.17.0 to 2.18.0.
- [Release notes](https://github.com/guard/guard/releases)
- [Commits](https://github.com/guard/guard/compare/v2.17.0...v2.18.0)
2021-07-19 21:05:33 +00:00
Rolf Schmidt
5675887ebe Fixes #2973 - saving Boolean field with empty values. 2021-07-19 17:02:34 +00:00
Rolf Schmidt
b3da6d31ff Fixes #3247 - CTI-API should handle doubled requests better. 2021-07-19 16:54:01 +00:00
Thorsten Eckel
b8b57781b7 Maintenance: Activated rubocop Layout/LeadingCommentSpace. 2021-07-19 15:43:33 +02:00
Thorsten Eckel
916bb77066 Maintenance: Activated rubocop Layout/SpaceInsideParens. 2021-07-19 15:36:48 +02:00
Thorsten Eckel
5243efbc25 Maintenance: Activated rubocop Style/MethodCallWithoutArgsParentheses. 2021-07-19 15:31:14 +02:00
Thorsten Eckel
814f7e997b Maintenance: Activated rubocop Style/SelfAssignment. 2021-07-19 15:27:47 +02:00
Thorsten Eckel
e52b79a2f0 Maintenance: Removed unnecessary rubocop enables. 2021-07-19 13:23:20 +00:00
Thorsten Eckel
5217384162 Maintenance: Activated rubocop Style/MethodDefParentheses. 2021-07-19 13:20:19 +00:00
Thorsten Eckel
d4732f7d9a Maintenance: Activated rubocop Layout/SpaceAfterMethodName. 2021-07-19 13:17:06 +00:00
Martin Gruner
e63510c4d0 Maintenance: Apply Rubocop also to files in .gitlab, .github, .rubocop and to RSpec support files. 2021-07-19 12:24:09 +00:00
Martin Gruner
365b3eaf1f Follow-up 1eef2a0e0 - Websocket session store back end 'File' does not clean up spool messages correctly. 2021-07-16 13:41:57 +00:00
Dominik Klein
aaa17d72e0 Fixes #2258 - In some situations the chat button is visible without a active websocket connection. 2021-07-16 13:00:49 +00:00
olafbuitelaar
fc393e452e PR #3658 - Fixes mistypes in article_view.coffee 2021-07-16 10:01:20 +00:00
Rolf Schmidt
ca15d3ef40 Follow up cb3dced002 - Fixes #3617 - Reduce amount of migrated users to increase performance. 2021-07-16 09:06:53 +00:00
Martin Gruner
76f613d9ea Maintenance: Sync the database preflight check versions with what is actually required. 2021-07-15 13:09:08 +00:00
Mantas Masalskis
25e12c7f5b Maintenance: Update Ruby to 2.7.4 2021-07-15 12:15:29 +00:00
Martin Gruner
c9a58d5580 Maintenance: Bump twilio-ruby from 5.56.0 to 5.57.0
Bumps [twilio-ruby](https://github.com/twilio/twilio-ruby) from 5.56.0 to 5.57.0.
- [Release notes](https://github.com/twilio/twilio-ruby/releases)
- [Changelog](https://github.com/twilio/twilio-ruby/blob/main/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-ruby/compare/5.56.0...5.57.0)
2021-07-15 06:16:19 +00:00
Martin Gruner
838e5fb48d Maintenance: Bump telephone_number from 1.4.11 to 1.4.12
Bumps [telephone_number](https://github.com/mobi/telephone_number) from 1.4.11 to 1.4.12.
- [Release notes](https://github.com/mobi/telephone_number/releases)
- [Changelog](https://github.com/mobi/telephone_number/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mobi/telephone_number/compare/v1.4.11...v1.4.12)
2021-07-14 21:06:54 +00:00
Martin Gruner
718899da18 Fixes #3653 - Freshdesk import fails with timeout error. 2021-07-14 18:55:57 +00:00
Dominik Klein
ee62e47a87 Maintenance: Added general VCR cassette BasicAuth mask handling for Freshdesk. 2021-07-14 16:19:46 +00:00
Mantas
7dda3cdaf9 Fixes #3654 - Chat widget cannot load CSS on (sub)domains that contain "ws" characters 2021-07-14 16:30:30 +02:00
Mantas Masalskis
9a71ac98d5 Follow up - a99f87a - Fixes #2085 - timezone issue with elasticsearch: Added tests. 2021-07-14 14:07:07 +00:00
Mantas Masalskis
fd5be086ec Maintenance: ElasticSearch 7.8+ supported 2021-07-14 14:04:54 +00:00
Rolf Schmidt
869a9a5632 Follow up 85856cbd40 - Fixes #3571 - Invalid html signature detection for exchange warning boxes. 2021-07-14 13:47:26 +00:00
Dominik Klein
07a0864989 Maintenance: Stabilize maintenance mode selenium test. 2021-07-14 05:58:26 +00:00
Martin Gruner
498bd201fd Maintenance: Bump zendesk_api from 1.30.0 to 1.31.0
Bumps [zendesk_api](https://github.com/zendesk/zendesk_api_client_rb) from 1.30.0 to 1.31.0.
- [Release notes](https://github.com/zendesk/zendesk_api_client_rb/releases)
- [Changelog](https://github.com/zendesk/zendesk_api_client_rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zendesk/zendesk_api_client_rb/compare/v1.30.0...v1.31.0)
2021-07-13 21:08:02 +00:00
Thorsten Eckel
84b654ea0f Follow up - ca56de3648 - Maintenance: Updated to Rails 6.0.4 and the new Zeitwerk autoloader: Removed workaround/backport of ActiveJob time serialization which is shipped with Rails 6. 2021-07-13 19:30:10 +00:00
Martin Gruner
fed5016d86 Maintenance: Bump shoulda-matchers from 4.5.1 to 5.0.0
Bumps [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers) from 4.5.1 to 5.0.0.
- [Release notes](https://github.com/thoughtbot/shoulda-matchers/releases)
- [Changelog](https://github.com/thoughtbot/shoulda-matchers/blob/master/CHANGELOG.md)
- [Commits](https://github.com/thoughtbot/shoulda-matchers/compare/v4.5.1...v5.0.0)
2021-07-13 11:27:20 +00:00
Martin Gruner
a52cee0d0c Maintenance: Bump rubocop-rails from 2.11.2 to 2.11.3
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.11.2 to 2.11.3.
- [Release notes](https://github.com/rubocop/rubocop-rails/releases)
- [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.11.2...v2.11.3)
2021-07-13 08:41:11 +00:00
Martin Gruner
fe93104a07 Maintenance: Remove obsolete gem from Gemfile.lock. 2021-07-13 10:33:39 +02:00
Martin Gruner
3fae5a027f Maintenance: Load asset processing gems only at build time. 2021-07-13 08:11:20 +00:00
Martin Gruner
6145fb93f8 Maintenance: Bump addressable gem from 2.7.0 to 2.8.0. 2021-07-13 08:18:05 +02:00
Dominik Klein
d7728b23f3 Switched from pre-commit to overcommit. 2021-07-12 13:36:23 +00:00
Thorsten Eckel
32a3e31db8 Maintenance: Bump rubocop from 1.16.0 to 1.18.3. 2021-07-12 13:18:31 +00:00
Martin Gruner
d70d74450b Maintenance: Specify minimum PostgreSQL 9.3 version requirement for CentOS 7. 2021-07-12 11:27:36 +00:00
Dominik Klein
0fe81f4e0b Fixed 3578 - Can't create custom fields with name "type". 2021-07-12 08:31:37 +00:00
Rolf Schmidt
382291d0ae Fixes #3599 - Searching for integer fields does not work as expected. 2021-07-12 08:18:46 +00:00
Rolf Schmidt
2770f0a370 Follow up 697661cbf2 - Missing gem loadings for Twilio SMS channel driver causes application to break. 2021-07-12 08:09:02 +00:00
Martin Gruner
ce5fa9def9 Fixes: #3628 - FreshDesk import fails on certain custom field types. 2021-07-12 07:51:07 +00:00
Ryan Lue
a8f028164d Refactoring: Migrate store_test to RSpec. 2021-07-09 16:38:23 +00:00
Martin Gruner
7e1732e6b9 Don't look at minitest files in rspec cop. 2021-07-09 14:38:44 +00:00
Martin Gruner
1ab185543f Revert "Applied rubocop suggestions."
This reverts commit 1903a0b3c480369875df416bbf1299cec428bc6a.
2021-07-09 14:38:44 +00:00
Martin Gruner
2b6b268eb9 Applied rubocop suggestions. 2021-07-09 14:38:44 +00:00
Thorsten Eckel
e7fe3f827f Maintenance: Bump rubocop-rspec from 2.3.0 to 2.4.0
Bumps [rubocop-rspec](https://github.com/rubocop/rubocop-rspec) from 2.3.0 to 2.4.0.
- [Release notes](https://github.com/rubocop/rubocop-rspec/releases)
- [Changelog](https://github.com/rubocop/rubocop-rspec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rspec/compare/v2.3.0...v2.4.0)
2021-07-09 14:38:44 +00:00
Martin Gruner
0d7cd1e808 Maintenance: Switch CI to use internal redis and memcached images to avoid rate limit errors from docker hub. 2021-07-09 15:47:43 +02:00
Martin Gruner
fb7173a7b9 Applied rubocop suggestions. 2021-07-09 13:00:45 +00:00
Thorsten Eckel
1346c60095 Maintenance: Bump rubocop-rails from 2.10.1 to 2.11.2
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.10.1 to 2.11.2.
- [Release notes](https://github.com/rubocop/rubocop-rails/releases)
- [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.10.1...v2.11.2)
2021-07-09 13:00:45 +00:00
Thorsten Eckel
cd39f86eb4 Maintenance: Bump rubocop-performance from 1.11.3 to 1.11.4
Bumps [rubocop-performance](https://github.com/rubocop/rubocop-performance) from 1.11.3 to 1.11.4.
- [Release notes](https://github.com/rubocop/rubocop-performance/releases)
- [Changelog](https://github.com/rubocop/rubocop-performance/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-performance/compare/v1.11.3...v1.11.4)
2021-07-09 10:05:25 +00:00
Martin Gruner
cefee1e256 Improved dependabot commit message. 2021-07-09 10:57:14 +02:00
Thorsten Eckel
e54cb15493 Bump pundit-matchers from 1.6.0 to 1.7.0
Bumps [pundit-matchers](https://github.com/chrisalley/pundit-matchers) from 1.6.0 to 1.7.0.
- [Release notes](https://github.com/chrisalley/pundit-matchers/releases)
- [Changelog](https://github.com/chrisalley/pundit-matchers/blob/master/CHANGELOG.md)
- [Commits](https://github.com/chrisalley/pundit-matchers/compare/v1.6.0...v1.7.0)
2021-07-09 06:23:24 +00:00
Thorsten Eckel
4aba70037d Bump twilio-ruby from 5.55.0 to 5.56.0
Bumps [twilio-ruby](https://github.com/twilio/twilio-ruby) from 5.55.0 to 5.56.0.
- [Release notes](https://github.com/twilio/twilio-ruby/releases)
- [Changelog](https://github.com/twilio/twilio-ruby/blob/main/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-ruby/compare/5.55.0...5.56.0)
2021-07-09 06:21:54 +00:00
Thorsten Eckel
ac5644d323 Bump valid_email2 from 3.6.1 to 4.0.0
Bumps [valid_email2](https://github.com/micke/valid_email2) from 3.6.1 to 4.0.0.
- [Release notes](https://github.com/micke/valid_email2/releases)
- [Changelog](https://github.com/micke/valid_email2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micke/valid_email2/compare/v3.6.1...v4.0.0)
2021-07-09 06:20:06 +00:00
Thorsten Eckel
652a92ee3f Bump redis from 4.2.5 to 4.3.1
Bumps [redis](https://github.com/redis/redis-rb) from 4.2.5 to 4.3.1.
- [Release notes](https://github.com/redis/redis-rb/releases)
- [Changelog](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/redis/redis-rb/compare/v4.2.5...v4.3.1)
2021-07-08 13:26:31 +00:00
Martin Gruner
7cfc0ebf83 Improved dependabot config. 2021-07-08 13:21:38 +00:00
Martin Gruner
6b783cb303 Add dependabot config file. 2021-07-08 14:55:16 +02:00
Dominik Klein
c3cc0e68ef Follow up - d0d00bf6 - Fixes #3631, fixes #3645 - Freshdesk import subdomain selection fails. 2021-07-07 17:19:01 +02:00
Rolf Schmidt
6cbce23c54 Maintenance: Fix failing database cleanup for custom development. 2021-07-07 13:46:21 +00:00
Thorsten Eckel
605f5f6fa2 Maintenance: Run further integration tests only in non-private branches. 2021-07-07 09:29:04 +00:00
Thorsten Eckel
05e1ae82ff Maintenance: Adjust integration test case to new Zendesk API User result. 2021-07-07 09:29:04 +00:00
Mantas Masalskis
a99f87abe6 Fixes #2085 - timezone issue with elasticsearch 2021-07-06 18:40:09 +00:00
Dominik Klein
d0d00bf62c Fixes #3631, fixes #3645 - Freshdesk import subdomain selection fails. 2021-07-06 17:43:56 +00:00
Rolf Schmidt
1bf188d7ac Fixes #3598 - Search results missing for users with two names within lastname. 2021-07-06 17:36:27 +00:00
Dominik Klein
6cbe99704f Fixes #3611 - New location notification with X-On-Behalf. 2021-07-06 17:13:51 +00:00
Bola Ahmed Buari
00169d67a9 Follow up - fb917979 - Fixes #3635 - REST doc of Online Notification controler is outdated/wrong and expand param is missing 2021-07-06 08:03:38 +00:00
Martin Gruner
33a5f470e0 Maintenance: Treat Ruby deprecation warnings as test errors. 2021-07-06 07:52:22 +00:00
Martin Gruner
697661cbf2 Maintenance: Only load gems when they are needed to save memory otherwise. 2021-07-05 13:38:40 +00:00
Martin Gruner
f37cf21092 Maintenance: Fix clearbit tests. 2021-07-05 12:25:39 +00:00
Martin Gruner
f05f8e2d3c Maintenance: Add support for memcached (via the 'dalli' gem) as Rails cache store.
To activate this, simply specify MEMCACHE_SERVERS=your.server and Zammad will use that as Rails cache store.

See also https://github.com/zammad/zammad/issues/1601
2021-07-02 11:46:37 +00:00
Martin Gruner
2c59c60adb Maintenance: Switch to the correct CI image tag 2.7.3. 2021-07-02 10:24:01 +00:00
Felix Niklas
3b98e003f4 Form: refactor backdrop resizing – no more js needed; also resizes when textarea resizes 2021-07-02 07:18:07 +00:00
Felix Niklas
1ddb63f02e Form.css: fix overflowing inputs (border-box) 2021-07-02 07:18:07 +00:00
Felix Niklas
a5da54ff45 Form preview: add viewport tag to test it on mobile 2021-07-02 07:18:07 +00:00
Felix Niklas
61975af672 Form: make it scrollable when the its bigger than the viewport
fixes #978
2021-07-02 07:18:07 +00:00
Romit Choudhary
26b9eb0281 Fixes #3335 - State list of tickets ignore locale for their sorting 2021-07-02 07:17:11 +00:00
Romit Choudhary
30654f8d7d Fixes #3050 - newly created users are only shown in the admin interface after reload 2021-07-02 07:11:05 +00:00
Mantas Masalskis
d09a3c5b85 Fixes #3641 - Migration 3.6.1 to 4.1 : No configured business hours found! 2021-07-02 06:57:00 +00:00
Mantas Masalskis
f85d2adff5 Fixes #3116 - Verification tokens questionable behavior in developer mode 2021-07-02 06:54:23 +00:00
Bola Ahmed Buari
fb91797934 Fixes #3635 - REST doc of Online Notification controler is outdated/wrong and expand param is missing 2021-07-02 06:30:09 +00:00
Rolf Schmidt
cfa3981ef6 Fixes #3636 - Replacing a mention with a new leads to mentioning both agents. 2021-07-02 06:25:39 +00:00
Rolf Schmidt
c8660b6d6f Followup #3584 - Fix order to DESC. 2021-07-02 06:23:07 +00:00
Rolf Schmidt
651f4e819e Fixes #3614 - Log if a active user (in UI) has been logged out due to SessionTimeout. 2021-07-02 06:22:43 +00:00
Bola Ahmed Buari
d2e1229335 Fixes #2559 - When disconnecting a Chat, customer can still continue posting messages 2021-07-02 06:10:13 +00:00
Martin Gruner
a7e1b64b95 Maintenance: Unpin twitter gem. 2021-07-01 15:21:03 +02:00
Martin Gruner
0f61a7e6ca Maintenance: Updated all non-pinned gems.
Special thanks to @thorsteneckel for fixing the VCR/Twitter problems!
2021-07-01 11:23:52 +00:00
Martin Gruner
3b518cfa00 Maintenance: Activate the new Node.js 12 for CI. 2021-07-01 11:26:08 +02:00
Bola Ahmed Buari
5d4b9d5a0d Fixes #3359 - Some macros are hidden in the drag & drop overview with a small screen size 2021-07-01 09:03:41 +00:00
Rolf Schmidt
cb3dced002 Fixes #3617 - Creating and editing users via office 365 fails with image source is invalid. 2021-07-01 08:58:09 +00:00
Martin Gruner
7feca73300 Maintenance: Deprecate mini_racer dependency, use external Node.js binary instead by default. 2021-07-01 05:30:14 +00:00
Martin Gruner
1b217645cc Maintenance: Use the 'hiredis' gem for increased performance. 2021-06-30 14:13:34 +02:00
Martin Honermeyer
1eef2a0e0f Closes #3450 - Add support for Redis as an optional web socket session store back end. 2021-06-30 10:24:58 +02:00
Rolf Schmidt
9415484441 Fixes #3584 - Attachment order is wrong. 2021-06-30 07:15:41 +00:00
Rolf Schmidt
cd8f74729b Fixes #3637 - Text Module widget is broken/hidden after pressing backspace (once). 2021-06-29 14:19:09 +00:00
Rolf Schmidt
ed74a78b99 Fixes #3639 - Mention widget show same users several times (if rest requests will return in different order). 2021-06-29 08:01:40 +01:00
Martin Gruner
5b3e19170c Maintenance: Changed search hook comment to match the current Ruby version again. 2021-06-28 10:45:19 +02:00
Martin Gruner
cc14e1f210 Maintenance: Removed duplicate Zeitwerk job definition. 2021-06-25 14:42:37 +02:00
Rolf Schmidt
5af09d73c7 Fixes #3633 - The rebuild of the index is failing. 2021-06-24 15:39:08 +00:00
Rolf Schmidt
548ab91398 Fixes #3632 - Monitoring endpoint complains about Failed to run SessionTimeoutJob.perform_now after 10 tries #<NoMethodError: undefined method id' for nil:NilClass`. 2021-06-24 15:37:59 +00:00
Martin Edenhofer
0d5655cedd Prepared for 5.0. 2021-06-24 07:13:58 +00:00
Martin Gruner
22e0fc5520 Maintenance: Updated to Ruby 2.7.3. 2021-06-24 07:05:39 +00:00
Thorsten Eckel
ca56de3648 Maintenance: Updated to Rails 6.0.4 and the new Zeitwerk autoloader.
This changes the minimum supported version of PostgreSQL to 9.3.
2021-06-23 11:35:27 +00:00
Martin Gruner
341bdd6eb9 Maintenance: Activate ShellCheck also for 'function' files without '.sh' extension. 2021-06-21 14:17:53 +02:00
Martin Gruner
064181815e Fixes #3629: Updating package-based installations can break the front end. 2021-06-21 11:47:56 +00:00
Mantas
0f3cd3922f Maintenance: Rubocop ExistsResetColumnInformation exclusions moved from todo to default 2021-06-21 11:05:42 +00:00
Martin Gruner
89f44eec6d Maintenance: Improve backup and restore handling.
* Made parsing of database configuration more robust.
* Improved PostgreSQL handling for better password handling and to support remote databases.
* Other small fixes.
* Closes #3352, closes #3561, closes: #3621.

Special thanks to Alexander (7adietri) and Michal Čihař (nijel) for their PRs on this.
2021-06-21 10:11:10 +00:00
Mantas
2cab5742b2 Fixes #2551 - Reply-to header ignored if from contains a system address 2021-06-19 21:44:23 +03:00
Martin Gruner
f7a17b6be8 Maintenance: Closes #3626 - Fix handling of test that require secrets to not run them for Github PRs. 2021-06-18 13:06:22 +00:00
Thorsten Eckel
52a8ad7db0 Maintenance: Remove deprecated and unmaintained script. 2021-06-18 12:49:42 +00:00
Martin Gruner
d881558e6c Maintenance: (now really) make shellcheck stricter to fail on 'warning' messages. 2021-06-18 11:11:57 +02:00
Martin Gruner
63825b012d Maintenance: make shellcheck stricter to fail on 'warning' messages, and remove lint-bash-scripts from Github CI. 2021-06-18 10:44:24 +02:00
Martin Gruner
333d4aef8c Maintenance: Added ShellCheck for linting of shell scripts. 2021-06-17 14:19:07 +00:00
svnr-dvnkln
837a9bd45c Maintenance: Closes #3570 - Make deletion of old backup more precise. 2021-06-17 10:48:22 +02:00
Mantas
64f72916cb Fixes #3618 - Ensure to migrate old calendar URLs for google calendar sources 2021-06-17 07:59:39 +00:00
Rolf Schmidt
bc898f7bea Fixes #3615 - Mentions/Subscribe with read permissions. 2021-06-17 07:47:53 +00:00
Rolf Schmidt
c7ea22abf2 Maintenance: Fix CI race condition in test and improve performance by dropping obsolete code which will be updated by ticket full as well. 2021-06-16 15:37:22 +01:00
Thorsten Eckel
88c5e0e10b Maintenance: Enable allow_reload for Capybara find methods to avoid Selenium::WebDriver::Error::StaleElementReferenceError exceptions. 2021-06-16 12:07:32 +00:00
Martin Gruner
1cb5b04d96 Maintenance: switch to Docker based OTRS import testing rather than using external services. 2021-06-16 10:12:40 +00:00
Martin Gruner
c446bed0da Maintenance: disabled CodeClimate plugins that are actually used in the CI toolchain (brakeman to be added later). 2021-06-16 09:47:07 +00:00
Rolf Schmidt
a5c386cbb2 Fixes #3610 - Chat-Message references not cleared with data privacy task. 2021-06-15 14:06:44 +01:00
Martin Gruner
dba3689711 Maintenance: updated codeclimate config to v2 and added exclude_patterns. 2021-06-15 06:44:58 +00:00
Rolf Schmidt
c44196d7ab Maintenance: Stabilize tests with general wait_for_ajax_empty approach and some fixed tests. 2021-06-15 06:26:52 +00:00
Bola Ahmed Buari
1242121de7 Fixes #3500 - Overview names are hidden in mobile view for RTL languages 2021-06-15 06:18:23 +00:00
Martin Gruner
4be28be6c3 Maintenance: update codeclimate to a newer version of rubocop. 2021-06-14 13:40:40 +00:00
Rolf Schmidt
c3468d3c39 Fixes #2991 - SMTP-Attachments missing when using the API under high load. 2021-06-11 14:50:58 +00:00
Romit Choudhary
408af2dae4 Fixes #3538 - inline image conversion from jpeg to png causes huge overhead 2021-06-11 13:26:05 +00:00
Rolf Schmidt
129646e760 Fixes #3605 - session timeout does regulary logout active users before timeout because of dead old sessions. 2021-06-11 12:17:25 +00:00
Martin Gruner
2261a4fd48 Fixes #3593 - Zendesk import creates new ticket numbers rather than using the Zendesk ticket IDs also as ticket numbers in Zammad. 2021-06-11 09:43:09 +00:00
Thorsten Eckel
76ed276556 Workaround: Allow OTRS jobs to fail until host is reachable again. 2021-06-10 15:47:32 +02:00
Martin Edenhofer
275c32a35f Maintenance: Prepared 4.2. 2021-06-09 16:47:19 +02:00
Martin Gruner
77bc04d862 Fixes #3606 - The rake task zammad:package:migrate does not execute migrations for linked packages. 2021-06-09 12:58:03 +00:00
Rolf Schmidt
c49da0a4c9 Fixes #3600 - wrong behaviour for the disabled option in session timeout. 2021-06-09 12:08:32 +00:00
Thorsten Eckel
c9774c8b45 Maintenance: Ensure Content-Type 'text/html' for error pages. 2021-06-07 13:35:50 +00:00
Thorsten Eckel
4f6aed1856 Maintenance: Improved test coverage of link requests. 2021-06-07 13:35:50 +00:00
Thorsten Eckel
b49046c597 Maintenance: Move User avatar logic into dedicated concern to slim down model file. 2021-06-07 13:35:50 +00:00
Thorsten Eckel
e90dd791f0 Maintenance: Rework stored 'from' attribute for web and phone articles. 2021-06-07 13:35:50 +00:00
Thorsten Eckel
d32ea5e0d3 Maintenance: Add note attribute sanitization to not yet checked models. 2021-06-07 13:35:50 +00:00
Thorsten Eckel
5e4084d908 Refactoring: Remove unused table 'chat_topics'. 2021-06-07 13:35:50 +00:00
Thorsten Eckel
a59043303e Maintenance: Decrese log level for mail probing. 2021-06-07 13:35:50 +00:00
Mantas
8522a752db Fixes #3133 - Header links are not responsive 2021-06-07 09:30:24 +00:00
Rolf Schmidt
f1ade018fc Fixes #3597 - Update description of the session timeout setting. 2021-06-07 08:20:18 +00:00
Rolf Schmidt
ae9b197a9f Fixes #3588 - Escalation calculation breaks data privacy ticket deletion. 2021-06-07 07:59:06 +00:00
André Glüpker
18f14d1720 Fixes #3573 - Accept 2xx as response for requests in UserAgent 2021-06-07 07:29:04 +00:00
Mantas
c3247e98ff Maintenance: Form widget recommends jQuery 3.6.0 2021-06-07 07:27:17 +00:00
Rolf Schmidt
313bd65212 Fixes #3586 - SessionTimeoutJob.perform_now fails if user no longer exists. 2021-06-06 13:07:48 +00:00
Mantas
b9d170f1e4 Follow up - 9e4fae - Fixes #3164 - Robots.txt should allow indexing Knowledge Base on custom URLs 2021-06-03 00:29:45 +03:00
Thorsten Eckel
11c023e9be Maintenance: Loosen RSpec/NestedGroups to find balance between readable code and current state of the codebase. 2021-06-02 17:16:04 +02:00
Rolf Schmidt
23b05e1f20 Fixes #3536 - Don't fail job is deletable_id is no longer available. 2021-06-02 13:40:52 +00:00
Rolf Schmidt
649dff172e Fixes #3585 - DataPrivacy may fail to clear user relations. 2021-06-02 11:25:12 +01:00
Mantas Masalskis
9e4fae6360 Fixes #3164 - Robots.txt should allow indexing Knowledge Base on custom URLs 2021-06-01 15:57:06 +00:00
Rolf Schmidt
29ecba88aa Fixes #3581 - SessionTimeoutJob.perform_now scheduler job fails on update if scheduler process wasn't restarted 2021-06-01 12:47:45 +00:00
Martin Gruner
c4d2d7fd3b Maintenance: Updated rubocop(-* gems) to latest version (1.16.0). 2021-06-01 14:24:22 +02:00
Martin Gruner
5df98684da Maintenance: Update copyright information and add a new rubocop cop to watch over it. 2021-06-01 12:20:20 +00:00
Martin Gruner
18b88920e7 Fixes #3582 - Freshdesk import attribute ID mapping lookup constants fail application boot in systems with changed default names. 2021-06-01 09:44:33 +00:00
Rolf Schmidt
8d01fdd7cc Fixes #3562 - Add console output for searchindex rebuild status. 2021-06-01 08:44:48 +00:00
Mantas
41efbf41f5 Refactoring: Transaction more readable and ensures cleanup even if block exits early 2021-05-31 14:11:55 +00:00
Martin Gruner
c9ab28b81f Fixes #3580 - Modify Package.link and Package.install to not execute package migrations any more. 2021-05-31 13:51:29 +00:00
Mantas Masalskis
c45b5ac51f Refactoring: Deprecate custom Cache implementation and wrap native Rails cache instead. 2021-05-31 13:05:54 +00:00
Rolf Schmidt
328845c283 Fixes #3559 - mentioned KB entries with the same title in different categories can not distinguished. 2021-05-31 12:59:49 +00:00
Martin Gruner
205c717f4d Maintenance: Updated rubocop(-* gems) to latest version (1.15.0). 2021-05-31 09:56:36 +00:00
Rolf Schmidt
8ca12c1685 Fixes #3567 - Invalid auto assignment conditions may break ticket view for unassigned tickets. 2021-05-31 08:36:31 +00:00
Rolf Schmidt
01b414f9fc Fixes #3575 - Display minutes for session timeouts instead of seconds. 2021-05-28 11:28:06 +00:00
Mantas Masalskis
dc0813ba28 Fixes #3569 - Adds Greek translation for chat 2021-05-28 08:48:18 +00:00
Thorsten Eckel
77619212d6 Follow up - 8790e389be - Fixes issue #865 - Freshdesk import - Import last login date as such and not as image source. 2021-05-26 17:15:58 +02:00
Rolf Schmidt
85856cbd40 Fixes #3571 - Invalid html signature detection for exchange warning boxes. 2021-05-26 08:46:59 +00:00
Bola Ahmed Buari
a1187c218a Fixes #3431: Old JQuery version delivered 2021-05-25 20:06:15 +00:00
Thorsten Eckel
d85ce751dc Follow up - 8790e389be - Fixes issue #865 - Freshdesk import - Resolved remaining TODOs. 2021-05-25 14:33:51 +02:00
Thorsten Eckel
8790e389be Fixes issue #865 - Freshdesk import 2021-05-25 12:30:12 +00:00
Bola Ahmed Buari
a1d17ac45b Fixes #3534: Chat on iOS only shows parts after typing 2021-05-21 09:39:29 +00:00
Romit Choudhary
628089c2cd Fixes #3335 - state list of tickets ignore locale for their sorting. 2021-05-21 09:38:54 +00:00
Thorsten Eckel
ff8723d4ca Maintenance: Bumped nokogiri to 1.11.5 (CVE-2019-20388, CVE-2020-24977, CVE-2021-3517, CVE-2021-3518, CVE-2021-3537, CVE-2021-3541). 2021-05-20 09:06:35 +02:00
Martin Gruner
fdbf501be0 Maintenance: Refactor the remaining observers to concerns and drop the rails-observers dependency. 2021-05-20 06:59:02 +00:00
Rolf Schmidt
b72c01234a Fixes #3529 - Attachments sent by Zammad not shown in Outlook. 2021-05-20 06:29:44 +00:00
Mantas Masalskis
3330fe9ce7 Fixes #3551 - First response doesn't get solved after answering and state change to pending reminder. 2021-05-19 15:10:36 +00:00
Thorsten Eckel
bde3452f9b Maintenance: Reduce logging (disable info) of ActiveJob. 2021-05-19 13:59:17 +00:00
Mantas Masalskis
c69b691699 Followup #3515 - Allow single tenant only application in microsoft 2021-05-19 07:59:10 +00:00
Thorsten Eckel
0a89d39da6 Maintenance: Bumped puma to 4.3.8 (CVE-2021-29509). 2021-05-19 07:58:30 +00:00
Thorsten Eckel
f06dc08502 Maintenance: Perform SearchIndexJob and SearchIndexAssociationsJob actions to reduce job numbers. 2021-05-18 10:25:58 +02:00
Boris Manojlovic
85d6e19892 Fixes #3515 - Allow single tenant only application in microsoft 2021-05-17 15:18:01 +00:00
Mantas Masalskis
2001ac6968 Fixes #2669 - Pressing "Cancel" in a new ticket dialog doesn't close it's tab 2021-05-17 15:12:45 +00:00
Romit Choudhary
17f457cb58 Fixes #3546 - Dont display profile link if user has no user_preferences.* permissions at all 2021-05-17 15:09:58 +00:00
Rolf Schmidt
992aa6d837 Fixes #563, Closes #3273 - Sidebar - Customer - Open tickets should be clickable and open advanced search. 2021-05-17 14:39:33 +00:00
Bola Ahmed Buari
cacfb4b909 Fixes #2383: No error message on failed uploads 2021-05-12 13:48:43 +00:00
Mantas Masalskis
96f6376461 Maintenance: Improves reliability of TicketZoom Capybara/Rspec test 2021-05-12 13:21:39 +00:00
Mantas Masalskis
041bf51b52 Maintenance: Rubocop enforces %r{} regular expression style 2021-05-12 14:37:44 +03:00
Rolf Schmidt
be115dbb5c Fixes #3550 - CTI Log performance bad because of reformatting of the phone number. 2021-05-12 10:31:00 +00:00
Rolf Schmidt
be64e3ff0c Revert "Fixes #3529 - Attachments sent by Zammad not shown in Outlook."
This reverts commit a862a44bfc.
2021-05-11 08:32:49 +01:00
Thorsten Eckel
d5e1db2059 Fixes #3397: S/MIME email address lookup does not support RFC822 in SAN. 2021-05-10 18:21:48 +00:00
Bola Ahmed Buari
5a8adbed3f Fixes #3467: Sending and forwarding internal email messages 2021-05-10 17:30:12 +00:00
Mantas Masalskis
085fdfc939 Fixes #3494 - Status code 500 when trying to sort by groups in text module management 2021-05-10 15:06:42 +00:00
Romit Choudhary
36b0137968 Fixes #3495 - Selecting Textmodules, Knowledge Base Articles and the Mentions Feature are not working for mobile devices 2021-05-10 14:34:14 +00:00
Rolf Schmidt
1ffcbd9a4d Maintenance: Reduce log output by switching log level of serveral places. 2021-05-10 14:18:43 +00:00
Mantas Masalskis
8b6a00d73f Fixes #3548 - Can't add (or run) DataPrivacyTask if the to remove user has too many ticket relations. 2021-05-10 14:13:39 +00:00
Rolf Schmidt
2858a85050 Fixes #3525 - Show modal infomation 30 seconds before a session expires. 2021-05-10 13:43:50 +00:00
Martin Edenhofer
bd8af1c402 Maintenance: Reduced logging information of performed and matching postmaster filters. 2021-05-10 13:41:55 +00:00
Rolf Schmidt
396ed5d9f4 Fixes #2769 - Wrong Variable-Reference for Tags (Trigger, Scheduler). 2021-05-10 13:34:50 +00:00
Bola Ahmed Buari
37d7528221 Fixes #3499: Broken UI - Create Reporting profile 2021-05-07 14:25:31 +00:00
Rolf Schmidt
fb1df924ae Fixes #3544 - Increase text modules box height for high resolutions. 2021-05-07 12:34:26 +00:00
Rolf Schmidt
89418cd717 Fixes #3547 - Ticket selector for first_response_escalation_at, update_escalation_at, close_escalation_at missing. 2021-05-07 12:33:05 +00:00
Rolf Schmidt
1c4524de81 Fixes #3508 - new _plugin dir introduces auth:login events which will never get triggered. 2021-05-07 11:52:45 +00:00
Martin Gruner
236420da75 Maintenance: Make 'mini_racer' gem dependency for generating assets optional in scenarios where node.js should get used instead. 2021-05-07 08:08:38 +00:00
Martin Gruner
6f0d975c15 Optimize the way some large strings are created to speed up ticket_spec.rb. 2021-05-06 13:32:21 +00:00
Rolf Schmidt
7de5ec9037 Follow up #3543 - Translate link text of link template in organisation sidebar in ticket zoom. 2021-05-06 12:11:53 +00:00
Thorsten Eckel
bd10f8d134 Bumped rails to 5.2.4.6 (CVE-2021-22904). 2021-05-06 08:38:42 +02:00
Mantas Masalskis
5e7399d7b4 Follow up #3545 - Ensure Google Calendars are fetched via HTTPS 2021-05-05 18:35:38 +03:00
Mantas Masalskis
00decb0923 Fixes #3545 - Ensure Google Calendars are fetched via HTTPS 2021-05-05 16:55:59 +03:00
Martin Gruner
d1f039f21a Added precompiled assets and yarn.lock files to .gitignore. 2021-05-05 09:51:09 +00:00
Rolf Schmidt
12ad55279a Fixes #3543 - Translate link text of link template in organization sidebar in ticket zoom. 2021-05-05 07:53:01 +00:00
Rolf Schmidt
a862a44bfc Fixes #3529 - Attachments sent by Zammad not shown in Outlook. 2021-05-05 07:48:59 +00:00
Martin Edenhofer
49e43aadc7 Fixes #3541 - Opening user edit dialog with admin.user causes WebApp freeze for 10-20 sec. with 100+ roles. 2021-05-04 14:39:25 +00:00
Mantas
6c9148b45b Fixes #3370 - "canonical"-tag is missing in knowledge base 2021-05-04 08:15:21 +00:00
Dusan Vuckovic
2a61be02be Fixes #3012 - Don't display "article type" selection for customers within UI. 2021-05-03 13:05:55 +03:00
Marcel Herrguth
d9f4483075 Maintenance: Drop elasticsearch.conf for nginx (contrib)
Elasticsearch does support various authentication methods (not just for paying customers). 

The configuration file causes overhead and actually is invalid. Port 9200 is being used already which causes either nginx or elasticsearch to fail.
2021-04-30 13:38:38 +00:00
Mantas Masalskis
a3fe217ac6 Fixes #3492 - POST /api/v1/users/avatar with empty input causes "undefined method `substr' for nil:NilClass" 2021-04-30 13:36:23 +00:00
Thorsten Eckel
7e54afcd25 Maintenance: Run RSpec integration tests only if ENV is set. 2021-04-30 11:35:39 +02:00
Azertooth
e43abf2a96 Fixes #3531 - Nginx SSL configuration improvement to prevent "CSRF token verification failed!" error 2021-04-29 19:08:46 +03:00
Rolf Schmidt
1e35eaf770 Fixes #3523 - Escalation overview and all escalation related triggers/schedulers broken in Zammad 4.0. 2021-04-29 15:34:27 +00:00
Rolf Schmidt
34bcc21296 Fixes #3479 - Customer overview doesn't load on change. 2021-04-29 09:59:54 +00:00
Thorsten Eckel
7bd2334bea Bumped rexml to 3.2.5 (CVE-2021-28965). 2021-04-29 08:47:51 +02:00
Bola Ahmed Buari
ac64f4a156 Fixes #3506: Outgoing emails with tables have borders (do not contain design elements in email reset css). 2021-04-28 14:08:42 +00:00
Rolf Schmidt
7125e54b13 Fixes #3522 - Google and Microsoft 365 are missing filter & signature page content. 2021-04-28 12:15:47 +00:00
Rolf Schmidt
9bc1d212ce Fixes #3528 - Allow to add S/MIME certificate chains from single file. 2021-04-28 06:57:52 +00:00
Thorsten Eckel
3b7909ed5c Fixes #3517 - Unable to verify S/MIME mail signature signed with certificate chain. 2021-04-27 06:53:36 +00:00
Rolf Schmidt
f46b8712a1 Fixes #3526 - Default session timeout verification on backend only once a hour. 2021-04-27 06:40:19 +00:00
Rolf Schmidt
af461e11dd Fixes #3524 - Default session timeouts to 4 weeks. 2021-04-26 13:17:44 +01:00
Thorsten Eckel
2df6731627 Maintenance: Bumped oauth to 0.5.6 to resolve CVE-2016-11086. 2021-04-23 12:55:50 +00:00
Mantas
7e064ee35b Maintenance: Zendesk changed response for not existing instances. 2021-04-23 11:45:22 +02:00
Rolf Schmidt
8dc68ca1e4 Fixes #3520 - Make session TTL configurable. 2021-04-22 07:17:01 +00:00
Lorenzo Milesi
062f19df3c Fixes #3371 - Listen to both IPv4 and IPv6 2021-04-21 12:34:25 +03:00
jan-wi
a5de91064a Fixes #3512 - allow http for local gitlab or github enterprise instance 2021-04-21 07:21:01 +00:00
Bola Ahmed Buari
0fb4c1234e Fixes #3018: Times in ticket history are displayed in UTC 2021-04-21 07:17:25 +00:00
Lorenzo Milesi
3d86eb8543 Fixes #3516 - Use -delete instead of -exec 2021-04-20 16:05:32 +01:00
Martin Edenhofer
3baec9c606 Improved file name detection. 2021-04-14 15:20:28 +02:00
Rolf Schmidt
950b828a22 Maintenance: Fix env setting for microsoft 365 refresh token. 2021-04-13 09:17:23 +01:00
Bola Ahmed Buari
c04f268ec7 Maintenance: Updated failing test clearbit data 2021-04-09 15:52:53 +01:00
Bola Ahmed Buari
7ea27276b7 Fixes #3445: Admin sidebar scrolls up on click on translations menu 2021-04-07 09:34:05 +00:00
Bola Ahmed Buari
fc61d799d5 Fixes #3444: Caller Log: Incoming calls move tabs out of Browser context 2021-04-07 09:20:21 +00:00
Mantas
b26fdfd216 Fixes ##3486 - KB Edit / Save entries results in JS errors and unsaved articles 2021-04-07 08:54:34 +00:00
Mantas Masalskis
e73a45a30a Fixes #2629 - Full quote shows "<agent> wrote:" instead of "<customer> wrote" when agent toggled article visibility 2021-04-07 08:30:07 +00:00
Mantas
9085ef3465 Maintenance: User factory randomizes names 2021-04-07 08:23:41 +00:00
Martin Edenhofer
e7b0486b5b Maintenance: Add also count of taskbar objects to status endpoint.. 2021-04-05 16:30:05 +02:00
Mantas
276d9281cf Fixes #3490 - Error 500:{"error":"undefined method `+' for nil:NilClass"} - Creating Overview 2021-04-02 08:48:57 +03:00
Thorsten Eckel
a56245defa Fixes #3468: Not authorized error using Im X-On-Behalf-Of. 2021-04-01 15:14:25 +00:00
Rolf Schmidt
d2a0997475 Fixes #3488 - Invalid null value for user's last name. 2021-04-01 14:54:11 +00:00
Rolf Schmidt
ae4c601d1c Fixes #3489 - mention in email body breaks email parsing. 2021-04-01 08:20:00 +01:00
Rolf Schmidt
32b30ced5e Fixes #3482 - read permission is not enough to display subscribed tickets in overviews. 2021-03-30 13:14:22 +00:00
Felix Niklas
76bb7f920e Fixes #3473 - Macros are not displayed within the Mobile View
- hides avatars for now (using bootstrap utility class .hidden-xs)
- for a future mobile placement of the avatars in for example the sidebar, use .visible-xs to only show them on mobile)
- reference: https://getbootstrap.com/docs/3.3/css/#responsive-utilities
2021-03-30 10:15:27 +00:00
Felix Niklas
6e17591f27 Bulk actions: add mobile layout 2021-03-30 09:25:16 +00:00
Martin Edenhofer
b91ffc4213 Fixes #3480 - UX problem with scheduler and postmaster condition filter is user selection is used. 2021-03-29 11:43:29 +02:00
Rolf Schmidt
6ed3445207 Fixes #3471 - Mention does not notify users without full permission on group. 2021-03-27 04:43:33 +00:00
Martin Edenhofer
7d881b7253 Fixes #3472 - Mentions migration fails because of unexpected User notification_config matrix state. 2021-03-25 22:34:32 +00:00
Thorsten Eckel
fb3a43b80a Follow up - bc356b4c0f - packager.io build needs shared-mime-info as a declared build dependency. 2021-03-25 22:07:07 +01:00
Thorsten Eckel
bc356b4c0f Maintenance: Updated mimemagic gem dependency to 0.3.7.
Gem got un-deprecated again and version 0.3.6 was yanked. 0.3.7 reverted the introduced licensing change. But now requires shared-mime-info as a system dependency.
2021-03-25 17:02:00 +01:00
Thorsten Eckel
5949f06a0c Fixes #3470: Invalid elasticsearch(-oss) alternative dependency format breaks package installation/update for RPM based installations. 2021-03-25 14:51:37 +00:00
Thorsten Eckel
e5383fdfbb Maintenance: Updated mimemagic gem dependency to 0.3.6.
Gem got deprecated and version 0.3.5 was yanked. 0.3.6 only introduced a licensing change.
2021-03-25 14:07:06 +01:00
Thorsten Eckel
c463ee0e9d Fixes #3469: Startup fails with "Circular dependency detected while autoloading constant Tag::WritesToTicketHistory (RuntimeError)". 2021-03-25 08:33:28 +00:00
Martin Edenhofer
c4ecbb7553 Prepared for 4.1 2021-03-25 07:37:08 +01:00
Martin Edenhofer
4841f2b723 Prepared for 4.0.0 2021-03-24 23:13:34 +00:00
Rolf Schmidt
1d2a1a1163 - Fixes #3455: Gitlab and Github integration cause application reload when using [Enter]
- Fixes #3456: Wrong API-Key for Gitlab does not throw error message
- Fixes #3458: Gitlab and Github integration should provide visual feedback during adding issue.
- Fixes #3459: Provide error message if user provided wrong information for Github and Gitlab
- Refactoring: Multiple loads of GitLab/GitHub GraphQL schema causes Memory leak.
2021-03-24 16:41:05 +00:00
Bola Ahmed Buari
92eea19f8a Fixes #3466: elasticsearch index rebuild will log warnings to log/production.log 2021-03-24 15:20:15 +00:00
Rolf Schmidt
0b09063197 Maintenance: Improve performance for db_strategy reset on postgresql. 2021-03-24 15:16:24 +00:00
Rolf Schmidt
beee44522b Fixes #3454 - No indication in ticket sidebar when a subscribed user no longer has access to a ticket. 2021-03-24 15:12:45 +00:00
Mantas
89c3a5e9c9 Fixes #3453 - Removal of referenced webhooks does not provide error toast within UI 2021-03-24 15:43:54 +01:00
Mantas Masalskis
95a6625f05 Fixes #3463 - After calling the delete or clone dialog three times, two modal dialogs appear in succession 2021-03-24 08:39:07 +00:00
Mantas Masalskis
c80ea0bbc6 - Maintenance: Ticket Macro QUnit test works regardless of upcoming DST changes.
- Maintenance: Added SinonJS library for standalone test spies, stubs, time travel and mocks.
2021-03-24 08:02:54 +00:00
Martin Edenhofer
d25e53fdfb Fixes #3465 - Migration of webhooks stop unexpectedly. 2021-03-24 03:55:09 +01:00
Martin Edenhofer
2e8415d5d0 Maintenance: Do table related bindings only on table - not whold @el to get them destroyed on replaceing/re-render table. 2021-03-23 05:01:21 +00:00
Bola Ahmed Buari
dadb564d1f Fixes #3451: New created overviews should be at the end of the overview list 2021-03-22 13:37:10 +00:00
Martin Edenhofer
8e85508fa4 Maintenance: Increase speed of storage usage calculation. 2021-03-22 13:35:01 +00:00
Martin Edenhofer
602c8137b4 Fixes #3462 - Mixed naming regarding mentioned and subscribed in UI 2021-03-22 13:25:43 +00:00
Rolf Schmidt
cfa02c9038 Follow up #435, #1575: Fix RTL CSS issue for Git* zoom sidebar view tab. 2021-03-22 11:56:37 +01:00
Martin Edenhofer
68d815da27 Fixes #3461 - Dashboard stats widgets are sometimes lost/empty 2021-03-21 15:02:32 +00:00
Martin Edenhofer
53ceb9de9d Fixes #3457 - Ticket Zoom is not working correctly with iPhone 2021-03-19 15:41:34 +01:00
Rolf Schmidt
3599319ea6 Fixes #3452 - Able to select agents in @@mention feature which do not have access to tickets. 2021-03-19 13:32:03 +00:00
Marcel Herrguth
bb5caae10e Maintenance: Change API-Token fields to type password. 2021-03-18 18:17:17 +01:00
Thorsten Eckel
fdd3a7388d Follow up #435, #1575: Issues that have no assigned milestone can't be linked to Ticket. 2021-03-18 17:03:32 +00:00
Thorsten Eckel
cf2a122217 Maintenance: Removed deprecated Observers that have already been migrated to ActiveJob. 2021-03-18 08:34:51 +01:00
Thorsten Eckel
08ff2b12e8 Fixes #2951 - Generic oAuth2 login provider is unusable. 2021-03-17 15:33:19 +00:00
Martin Edenhofer
d6436b1f48 Maintenance: Removed obsolet markup. 2021-03-17 14:08:06 +01:00
Mantas Masalskis
6ab04260ea Fixes #3256, closes #3080: Updated scopes to Facebook API versions > 6 (removes deprecated Facebook user wall functionality). 2021-03-16 16:53:40 +01:00
Bola Ahmed Buari
017a0b1d96 Fixes #3448: Webhook http log overflows out of browser borders 2021-03-16 15:17:25 +00:00
Martin Edenhofer
d9f4b93f48 Fixes #3436 - Unable to sync Exchange contracts (if one contact is unable to process). 2021-03-16 15:04:38 +00:00
Rolf Schmidt
2354b5f53f Fixes #208 - Notify / Mention other agents / Subscribe to Tickets. 2021-03-16 08:59:32 +00:00
Mantas Masalskis
d0dcae4776 Refactoring: Use Rails validation callback to ensure valid Webhook endpoint and extended test coverage. 2021-03-16 07:50:12 +00:00
Mantas Masalskis
9a9c2ed719 Follow up 20d3c5027f - Fixes #342 - prevent deletion of Webhooks that are used by Job/Macro/Trigger 2021-03-16 07:25:55 +00:00
Thorsten Eckel
78da2d5062 Maintenance: Updated activerecord-session_store gem dependency to 2.0.0. 2021-03-16 00:16:27 +00:00
Bola Ahmed Buari
b1ec8941d4 Fixes #3421: Webhook action should display hint in Scheduler and Trigger. 2021-03-15 08:55:33 +00:00
Thorsten Eckel
07c9541350 Follow up - 12a5e9dba3 - Apply changes to tests now that GitHub integration is merged into develop. 2021-03-15 09:35:31 +01:00
Thorsten Eckel
de76fb9a27 Maintenance: Run special GitLab CI jobs only if previous stage completes successfully. 2021-03-15 09:22:35 +01:00
Thorsten Eckel
12a5e9dba3 Fixes #1575 - GitHub integration. 2021-03-10 16:25:26 +00:00
Rolf Schmidt
97c9d541e9 Fixes #435 - GitLab integration. 2021-03-10 16:11:14 +00:00
Bola Ahmed Buari
20d3c5027f Fixes #3421: Webhook action should display hint in Scheduler and Trigger 2021-03-09 13:19:22 +00:00
Bola Ahmed Buari
3efacf186c Refactoring: Improve test to prefer helper macro over CSS selector and 'let' helper method over hardcoded string 2021-03-08 18:01:27 +01:00
Bola Ahmed Buari
e716a555d9 Fixes #3362: Cannot configure proxy. 2021-03-03 09:54:59 +00:00
Mantas Masalskis
6457ca5430 Follow up - dc3f5dde1b - Fixes #3414 - Click on time part of date time element in the test is pointing to the date part in some browsers/OS and therefore fails on CI. 2021-03-03 07:27:06 +00:00
Rolf Schmidt
050315bac9 Fixes #3402 - DataPrivacy Task fails in some situations. 2021-03-02 11:03:21 +00:00
Thorsten Eckel
a256d443ab Maintenance: Test for Zoom not loosing attachment on message forward is flaky and causes CI to fail. 2021-03-02 07:33:18 +00:00
Martin Edenhofer
0313f8ee21 Fixes #3419 - Unable to close sidebar in ticket create screen after ticket split. 2021-03-02 07:32:23 +00:00
Thorsten Eckel
e5dc99deea Maintenance: Updated rubocop(-* gems) to latest version (1.11.0). 2021-03-02 07:26:51 +00:00
Martin Edenhofer
06be90f038 Fixes #3435 - Broken counter check for attributes examples causes exchange integration wizard to check all entries instead of 50. 2021-03-01 14:23:03 +00:00
Martin Edenhofer
b1780388fb Fixes #3434 - "Go back" button in mapping wizard screen in exchnage integrations leads to wrong screen (folder selection should be shown, access information)\ 2021-03-01 10:47:38 +00:00
Martin Edenhofer
96b67c3e3a Fixes #3433 - Unable to see full folder name in Exchange integration. Folder names are longer as space in display area. 2021-03-01 10:46:41 +00:00
Mantas Masalskis
dc3f5dde1b Fixes #3414 - Cursor locked in and can't leave date select field in Safari. 2021-03-01 09:10:33 +00:00
Martin Edenhofer
5ef3ef42cd Fixes issue #3276 - Software error when Elasticsearch is not configured and rake searchindex:rebuild 2021-03-01 08:50:07 +00:00
Thorsten Eckel
cb2286fae4 Refactoring: Migrate Rails Observers to Concerns. 2021-03-01 08:18:40 +00:00
Felix Niklas
5b6f0327c6 Settings entry: fix overflow cut-off
Fixes #334, a regression from the mobile UI changes
2021-03-01 06:58:31 +00:00
Bola Ahmed Buari
3fecb53915 Fixes #3415: Unable to process ticket bulk action from overview. 2021-02-26 13:46:47 +00:00
Thorsten Eckel
2db2f3407d Maintenance: Not yet arrived email in inbox of email integration tests causes flaky results on CI. 2021-02-26 13:17:00 +00:00
Thorsten Eckel
585bc5e0ea Follow up bfcca2fe79 - Fixes #3372 - build-docker-image GitHub action builds from wrong (debug) branch. 2021-02-26 11:33:05 +01:00
Thorsten Eckel
bfcca2fe79 Follow up - a86b288f4c - Fixes #3411: Missing 'dotenv' gem in production causes rake tasks to fail. 2021-02-26 09:36:11 +01:00
Thorsten Eckel
78eda936e0 Maintenance: Resolved rack-livereload issue with Rails CSP (https://github.com/johnbintz/rack-livereload/issues/71). 2021-02-25 19:46:46 +01:00
Rolf Schmidt
a86b288f4c Fixes #3411 - Microsoft 365: The refresh token has expired due to inactivity. The token was issued on 2020-11-17T13:30:55.3656422Z and was inactive for 90.00:00:00. 2021-02-25 17:46:39 +00:00
Martin Edenhofer
c505851e4c Fixes #2266 - Login always redirected to dashboard after third party / OAuth2 login (e.g. Google) 2021-02-25 16:27:17 +00:00
Thorsten Eckel
3b601ac16c Maintenance: 'slack-api' Ruby gem and 'channels.*' Slack API commands are deprecated and break CI. 2021-02-25 16:30:17 +01:00
Bola Ahmed Buari
6b370aa45b Fixes #3262 - Remove dots next to icons in tables 2021-02-25 14:58:51 +01:00
Marcel Herrguth
0b3b731321 Fixes #3238 - Editing login message difficult with invisible text 2021-02-25 12:20:47 +00:00
Thorsten Eckel
53a738f6e4 Maintenance: Slack CI test requires manual start for private branches for now. The branches develop and stable will be tested as usual. 2021-02-24 17:03:51 +01:00
Bola Ahmed Buari
4c86015074 Fixes #3162 - Backslash "\" causes tree select to disappear during selection. 2021-02-24 14:04:38 +00:00
Martin Edenhofer
be39f619e5 Fixes #3420 - Forms are not well displayed (width is to small) if firefox 86 (latest stable) is used. 2021-02-24 13:59:21 +00:00
Felix Niklas
bf00f29a61 Resolves #223 - Support for Tablets/Mobile (Responsive). 2021-02-24 07:44:58 +00:00
Martin Edenhofer
96c5267559 Fixes issue #3276 - Software error when Elasticsearch is not configured and rake searchindex:rebuild 2021-02-24 05:48:01 +00:00
Thorsten Eckel
9e8f85477d Follow up 02417225f7d3060cddda062cc1bd51b32e75deaf- Fixes #3372 - Applied missing Trigger condition changes to Tests introduced by fixing #3416. 2021-02-23 17:01:02 +01:00
Martin Edenhofer
02417225f7 Fixes #3372 - Reasoning about Webhooks activity. 2021-02-23 15:52:16 +01:00
Thorsten Eckel
1ac83882f7 Fixes #3416: Scheduler dies if Trigger, Ticket or Article of a Webhook job got deleted before job got executed. 2021-02-23 15:22:22 +01:00
Mantas
b05edf1915 Follow up - 5ee6418c18 - UI Refactoring: Dashbboard item texts get rendered below actual item. 2021-02-21 10:04:09 +01:00
Rolf Schmidt
c11c0e7513 Maintenance: Frozen time makes History entry order unpredictable in MySQL environment tests. 2021-02-18 19:06:04 +01:00
Rolf Schmidt
bcd805134d Maintenance: Make CI browser tests more stable by being more generous when facing/retrying exceptions. 2021-02-18 19:06:03 +01:00
Thorsten Eckel
027a1d4d63 Maintenance: Updated rubocop(-* gems) to latest version (1.10.0). 2021-02-18 17:23:33 +01:00
Mantas Masalskis
1aa4e68c6c Refactoring: SLA and Escalation logic. Fixes #3410, fixes #3140, fixes #2579. 2021-02-15 14:55:00 +01:00
Thorsten Eckel
161dd525ac Maintenance: Add support for visit-ing external URLs in Capybara system tests. 2021-02-12 14:58:00 +01:00
Thorsten Eckel
c3b1b4413f Maintenance: Updated Rails to 5.2.4.5 because of CVE-2021-22880. 2021-02-11 09:53:13 +01:00
Rolf Schmidt
5aabd5c308 Followup d0b5cbfe4b - Fixes #3243 - Relational report filters do not work (ticket.organization.*, ticket.article.*, ticket.customer.*). 2021-02-11 08:56:22 +01:00
Mantas Masalskis
215801ef95 Fixes #3393 - HTML structure that is not parseable by jQuery causes JavaScript error that breaks Ticket Zoom view. 2021-02-11 08:51:52 +01:00
Mantas
b706c86fde Fixes #3165 - Drag&Drop from Outlook to Zammad removes message from Outlook 2021-02-11 08:48:22 +01:00
Mantas
e438b3b6f9 Fixes #3401 - French "see more / see less" escaped apostrophe 2021-02-11 08:18:59 +01:00
Mantas Masalskis
057f08f4e7 Fixes #3274 - Button link attribute too wide (ticket articles) 2021-02-10 13:36:35 +01:00
Thorsten Eckel
1e9cec8827 Refactoring: Check error handling for Agent and Admin user accounts. 2021-02-10 09:11:44 +01:00
Martin Edenhofer
0160e20427 Fixes #3389 - Trigger based notifications are not sent (Send no trigger based notification to bob.smith@example.com because email is marked as mail_delivery_failed for -157 days). 2021-02-09 18:37:35 +01:00
Martin Edenhofer
5e2520fc5e Follow #3333 - Tree select has no mutli select on ticket selector for overview, triggers, ... - clone original attributes/do not overwrite original attributes. 2021-02-09 15:10:32 +01:00
Mantas
020f33d0cd Fixes #3403 - Channel distribution widget in Dashboard sometimes borken 2021-02-09 14:54:27 +02:00
Henrik Steffens
720d32e30b Maintenance: Update license to original text to make GitHub recognize it - closes #3398. 2021-02-09 08:26:39 +01:00
Martin Edenhofer
b9a9cd611b Fixes #3391 - Unable to open object manager select field modal if options contains invalid data (like undefined or null). 2021-02-04 15:57:21 +01:00
Mantas
ff00eb07fb Fixes #3344 - Allow mailto links in knowledge base (KB) and email signatures 2021-02-04 11:06:26 +01:00
Thorsten Eckel
876c0b18fd Fixes issue #2983 - HTTP 401 responses causing issues with Basic Authentication. 2021-02-04 09:28:41 +01:00
1resu
5a65e5bfcf Maintenance: Added elasticsearch-oss as an alternative package dependency in addition to elasticsearch due to the license change to SSPL (https://www.elastic.co/blog/licensing-change). Closes #3355. 2021-02-02 16:22:33 +01:00
Thorsten Eckel
4a48fe3bf6 Maintenance: Updated rubocop(-* gems) to latest version (1.9.1). 2021-02-01 13:42:44 +01:00
Rolf Schmidt
c4a237a203 Refactoring: Move SearchIndex logic out of rake task file into SearchIndex class. 2021-02-01 11:36:53 +01:00
Martin Edenhofer
f3fb482992 Fixes #3333 - Tree select has no multi select on ticket selector for overview, triggers,... 2021-02-01 11:28:18 +01:00
Mantas
415486361d Fixes #2536 - Long tag list in manage overviews/SLAs/triggers/report profiles/time accounting doesn't wrap 2021-02-01 09:10:34 +02:00
Martin Edenhofer
5ee6418c18 Refactoring: Bindings and namespaces improves memory usage and resolved ghost bindings.
* Renamed controllers `@bind` and `@unbind` to `@controllerBind` and `@controllerUnbind` to not overwrite spine's methods to take advantage of spine's binding/unbinding and cleanup features.

* Cleanup of controller namespaces `App.ObserverController` -> `App.ControllerObserver`, `App.ObserverActionRow` -> `App.ControllerObserverActionRow` and `App.WizardModal` -> `App.ControllerWizardModal`

* Moved to named local controller names to have better trace backs/debugging (e. g. `class Index` to `class UserIndex`).

* Splited `app/assets/javascripts/app/controllers/_application_controller.coffee` into separate files under `app/assets/javascripts/app/controllers/_application_controller/*.coffee` to have better trace backs/debugging.

* Moved classes with executed code from `app/assets/javascripts/app/controllers/widget/*.coffee` into `app/assets/javascripts/app/controllers/_plugin/` from now `app/assets/javascripts/app/controllers/widget/*.coffee` will only contain UI widgets like popovers.

* Refactored second argument of `@navigate`. Old version was only `true` to hide `@navigate` redirect from browser back list. Now we introduced params instant of boolean argument. Now we support:
  * `hideCurrentLocationFromHistory: true` -> hide redirect from browser back list (old `true` argument)
  * `emptyEl: true` -> will empty `@el` before redirect to new location
  * `removeEl: true` -> will remove `@el` before redirect to new location
2021-01-29 13:22:19 +01:00
Rolf Schmidt
0eac6f0fd9 Fixes #3234 - Renaming a Group should trigger reindexing. 2021-01-27 13:55:22 +01:00
Rolf Schmidt
d0b5cbfe4b Fixes #3243 - Relational report filters do not work (ticket.organization.*, ticket.article.*, ticket.customer.*). 2021-01-27 10:58:35 +01:00
Mantas
90a67e9d94 #3368 - Japanese character is garbled 2021-01-25 15:09:50 +01:00
Martin Edenhofer
045e3751a6 Fixes issue #3276 - Software error when Elasticsearch is not configured and rake searchindex:rebuild 2021-01-25 08:34:01 +01:00
Martin Edenhofer
2ad41b639e Followup of #2694 - Zendesk import doesn't consider all tickets. 2021-01-21 16:21:39 +01:00
Thorsten Eckel
cb58c7ed6d Fixes issue #3381 - Execution timeout while performing request to Zendesk API fails import for current resource. 2021-01-21 11:58:23 +01:00
Thorsten Eckel
4393064893 Maintenance: Speed up Zendesk import spec by mocking retry cycle sleep. 2021-01-21 11:58:23 +01:00
Martin Edenhofer
b50326fb20 Fixes #3382 - Logging of email postmaster filter is to extensive with many more than 10 filters. 2021-01-21 10:48:05 +01:00
Martin Edenhofer
708b953d81 Fixes #2694 - Zendesk import doesn't consider all tickets. 2021-01-21 08:22:17 +01:00
Martin Edenhofer
b8ea658495 Fixes #3377 - chat-no-jquery(.min).js is logging an javascript exception (Uncaught ReferenceError: node is not defined) 2021-01-19 13:03:23 +01:00
Rolf Schmidt
3ace03d79b Followup 3657278da2 - Fixes #3257 - Data in DB and elasticsearch (e.g. ticket. 2021-01-19 12:07:42 +01:00
Martin Edenhofer
fdfb042398 Fixed issue #3375 - chat-no-jquery.js is dropping click binds/event listener after from web page 2021-01-18 22:21:03 +01:00
Thorsten Eckel
c6fb3370e2 Fixes #3373 - LDAP users marked as inactive. 2021-01-18 16:33:54 +01:00
Thorsten Eckel
6c3d8b8b36 Maintenance: Cleanup of unused Sequencer Unit after refactoring to Import::Common::Model::Skip::MissingMandatory::Base. 2021-01-13 15:59:23 +01:00
Thorsten Eckel
944affe2a2 Fixes #3360 - Unclear why entities are skipped in import(s). 2021-01-13 15:59:23 +01:00
Thorsten Eckel
f2c52f10e5 Fixes #3346 - Initial configure step after adding XOAUTH account not functional. 2021-01-12 15:04:08 +01:00
Thorsten Eckel
3c4f46a886 Maintenance: ApplicationHandleInfo.current = 'application_server' leaks into following test on raised exceptions while processing Controller action. 2021-01-12 15:04:08 +01:00
Rolf Schmidt
375b6242ad Fixes #3052 - Ticket follow ups does not always provide "see more" link on new articles. 2021-01-12 08:45:34 +01:00
Thorsten Eckel
71ff497dfc Maintenance: Migrated to consistent Docker stable naming schema to limit divergence in CD packages. 2021-01-11 10:06:39 +01:00
Thorsten Eckel
707c1670e7 Maintenance: Bumped Nokogiri to 1.11.0 to resolve CVE-2020-26247. 2021-01-08 16:02:19 +01:00
Martin Edenhofer
f6f1b37250 Fixes issue #3336 - High system load, "StatusCode: 500 - execution expired", ActiveRecord::Deadlocked issues, and scheduler problems prevent Zammad from working well/quickly. 2021-01-05 12:35:56 +01:00
Martin Edenhofer
2a6036fb6e Fixes issue #3344 - Allow mailto links in knowledge base (KB) and email signatures. 2021-01-04 15:31:27 +01:00
Gildas NOEL
92e57e1ac2 Closes #3354 - Added missing and enhanced existing French mail template translations. 2021-01-04 15:29:27 +01:00
Martin Edenhofer
b85566c530 Fixes #3345 - Allow font colors in articles (not only in tables). 2021-01-04 13:57:57 +01:00
Martin Edenhofer
a03edd31a6 Maintenance: Fixed test, timestamp issue with 2021 (Fixes #3356). 2021-01-04 10:18:47 +01:00
Mantas
88d4e534b2 Fixes #3096 - Japanese emails incorrectly converted 2020-12-31 08:36:40 +01:00
Marcel Herrguth
8c6ac52ef6 Fixes #3253 - Remove ServerTokens from apache configurations 2020-12-30 16:55:31 +01:00
Mantas
893acd2656 Fixes #2063 - parses emails with empty msgid. Thanks to @dsukhin ❤️ 2020-12-24 00:12:06 +01:00
Martin Edenhofer
0756b7ac23 Fixes issue #3276 - Software error when Elasticsearch is not configured and rake searchindex:rebuild 2020-12-24 00:04:54 +01:00
Mantas
e2e9ebffaf Fixes #3341 - Reports do not show week 53 2020-12-18 15:56:29 +01:00
Rolf Schmidt
e5cd8467d4 Fixes #2751 - Group by selection field has wrong counters if no value. 2020-12-17 16:03:01 +01:00
Mantas Masalskis
9ea4ce9d2f Fixes #3315 - nested "view from user perspective" yield to only being able to return to last viewed session 2020-12-17 07:14:17 +01:00
Thorsten Eckel
f75e18ab36 Fixes #3331 - Direct Article URL / Link in Zoom. 2020-12-15 15:31:26 +01:00
Thorsten Eckel
24e46c9ddf Fixes #3330 - Scrolling to Article by passing ID to URL is broken. 2020-12-15 15:31:26 +01:00
Thorsten Eckel
c39ef4a3ea Maintenance: Non-eleasticsearch Capybara system tests fail because of active elasticsearch configuration. 2020-12-15 15:31:26 +01:00
Thorsten Eckel
1b08b84f92 Maintenance: Ensure that the window of the different browsers has the same and consistent size to avoid diverging behavior. 2020-12-15 15:31:26 +01:00
Thorsten Eckel
e6379bc2ab Maintenance: Ensure that FQDN Setting has correct host and port value in Capybara system test context. 2020-12-15 15:31:26 +01:00
Abel Luck
c35c00fa57 Fixes #2929 - Consistently handle the 'disabled' attribute of input elements. 2020-12-15 11:49:05 +01:00
Rolf Schmidt
183df7c78a Followup a5438ff149 - Fixes #3334 - Trigger-conditions 'Tel' requires full phone number format for 'contains' match. 2020-12-15 10:50:47 +01:00
Rolf Schmidt
a5438ff149 Fixes #3334 - Trigger-conditions 'Email' required the @ sign. 2020-12-14 11:24:53 +01:00
Rolf Schmidt
72c1cab71b Fixes #738 - Object Manager: Max length attribute has no impact on the validation in the browser. 2020-12-11 13:59:40 +01:00
Thorsten Eckel
b88d051dec Maintenance: Use Model#search_index_update_backend for reflecting relevant Model#search_index_attribute_lookup when indexing record. 2020-12-10 16:14:14 +01:00
Thorsten Eckel
f97a1d9211 Maintenance: Updated rubocop(-* gems) to latest version (1.6.1). 2020-12-10 10:13:57 +01:00
Marcel Herrguth
51df6d458d Fixes #2651 - "Getting Started" setup wizard removes custom port from FQDN. 2020-12-08 15:12:36 +01:00
Mantas Masalskis
7bfe6dac31 Fixes #2793 - CSV-Export contains Tags twice. 2020-12-08 15:06:41 +01:00
Rolf Schmidt
a0dc877e33 Revert "Fixes #2605 - Deletion via API impossible when user logged in at some point."
This reverts commit 0242c05165.
2020-12-08 14:23:33 +01:00
Rolf Schmidt
0242c05165 Fixes #2605 - Deletion via API impossible when user logged in at some point. 2020-12-08 13:32:52 +01:00
Mantas
149e622a1a Fixes #3322 - Quotation marks are encoded when displayed 2020-12-08 10:26:17 +01:00
Rolf Schmidt
3530ea7787 Fixes #2925 - Macros with notes not working on overview "drop bar". 2020-12-08 10:17:21 +01:00
Thorsten Eckel
d3ffac279a Maintenance: Fixes issue with Firefox Capybara tests where (mouse) actions are not released and cleared properly and leak into following tests causing them to fail. 2020-12-07 14:54:44 +01:00
Rolf Schmidt
aa9d896069 Fixes #2980 - Article Notes added via Macro are not HTML formatted. 2020-12-07 14:09:37 +01:00
Rolf Schmidt
a2e3d8c7b4 Fixes #3007 - Customer invitation doesn't work if "customer" role is name wise missing. 2020-12-07 09:29:54 +01:00
Raoul Schmitt
f09b82b427 PR #3277 - Improve French translation for chat 2020-12-04 12:42:41 +01:00
Martin von Wittich
b112ea68a9 PR #2590 - Fixes #2589 Detail mode in ticket article view is incorrectly triggered when single-click de-selecting a text selection 2020-12-04 12:38:53 +01:00
Rolf Schmidt
615c4b4c64 Fixes #3320 - Problem with Adding new Rows in Tree-Select. 2020-12-04 11:35:56 +01:00
Thorsten Eckel
24d15d7bd4 Fixes #3324 - Migrating to another host causes Login to fail. 2020-12-03 10:16:06 +01:00
Thorsten Eckel
ca49afe270 Maintenance: Fixed typos. 2020-12-03 10:15:53 +01:00
Rolf Schmidt
22e0741f03 Fixes #3316 - X-On-Behalf-Of does not downcase input. 2020-12-03 09:07:15 +01:00
Rolf Schmidt
e5ddf28be0 Followup 6810bc5548 - Fixes #3270 - Ticket selector "within last (relative)" and "within next (relative)" not working correctly. 2020-12-02 12:20:49 +01:00
Thorsten Eckel
991bfa4f7e Fixes #3323 - Closing bracket in Ticket Selector preview is displayed wrong / when it shouldn't. 2020-12-02 11:54:04 +01:00
Thorsten Eckel
b90292513d Maintenance: Updated rubocop(-* gems) to latest version (1.5.0). 2020-12-02 11:49:45 +01:00
Mike Raunsbæk
a4b82a6634 Fixes #3319, Closes #2496 - Make it possible to only send with agent name. 2020-12-02 11:47:30 +01:00
Martin Edenhofer
d684ffa7ba Fixed issue #3293 - Unable to process email (because of very long meta headers) 2020-12-02 09:44:49 +01:00
Martin Edenhofer
025cc8b12f Fixed #3321 - Unable to unassign owner via macro or trigger. 2020-12-02 09:35:59 +01:00
stefanomarty
b3b7a84683 PR 3305, 3306, 3308 - Improves Italian translation 2020-12-01 18:48:03 +01:00
Thorsten Eckel
09688f03e1 Fixes #878 - Added remark for Mattermost and RocketChat support. 2020-12-01 16:02:22 +01:00
Mantas
ad66cd9c1f Fixes #3309 - No icon / thumbnail for attached files when added via API 2020-12-01 15:37:23 +01:00
Mantas Masalskis
03b56b8fc8 Fixes #3213 - Relative fields get copied on macro 2020-12-01 13:35:32 +01:00
Mantas
a557a52c12 Fixes #3300 - macro button the text cropped in RTL lang 2020-12-01 13:33:59 +01:00
Thorsten Eckel
313081e677 Fixes #3314 - Zendesk import fails if not supported field types are present. 2020-12-01 10:42:09 +01:00
Thorsten Eckel
9c8cfd83dd Fixes #3310 - Zendesk import fails if fields with unsupported chars in its name are present. 2020-12-01 10:42:03 +01:00
Marcel Herrguth
eaa1f1f92b Fixes #3307 - Zendesk migration of textareas fails 2020-11-30 13:18:04 +01:00
Mantas
e2c4e6316d Fixes #3281 - Removing image in text field with backspaces causes browser to go back 2020-11-27 14:39:22 +01:00
Thorsten Eckel
dccd4aa012 Fixes #3299 - Having more active Agents using the Chat decreases performance linearly. 2020-11-27 14:08:30 +01:00
Mantas
aaa30b2b90 Fixes #2671 - Pending till can be changed by customer via web interface 2020-11-27 12:48:41 +01:00
Rolf Schmidt
cb111a15df Followup 40c3e68924 - Fixes #3135 - Fixed arrow for values. 2020-11-27 12:44:53 +01:00
Thorsten Eckel
5d62cb21da Maintenance: Migrated not existing log level notice to info. 2020-11-27 10:49:36 +01:00
Thorsten Eckel
dd192ed572 Fixes #3304: Sessions::Node don't do any work if ZAMMAD_SESSION_JOBS_CONCURRENT was higher and got lowered. 2020-11-27 09:38:55 +01:00
Mantas
f0fa4a6f9b Fixes #3291 - Date and Datetime widgets can not be disabled 2020-11-25 14:32:06 +01:00
Marcel Herrguth
a9a7b97e7a Maintenance: Fix Google & Microsoft 365 Channel documentation links 2020-11-25 14:26:42 +01:00
Thorsten Eckel
21d02f7b6e Maintenance: Run XOAUTH2 Gmail and Microsoft365 integration tests in dedicated job and only for develop/stable because of extreme throtteling and fail rate of the providers. 2020-11-25 14:15:08 +01:00
Thorsten Eckel
e474539f55 Maintenance: Fixed data leaking test by migrating to db_strategy: :reset from use_transactional_tests. 2020-11-25 14:15:08 +01:00
Thorsten Eckel
b930827b77 Fixes #3240 - Allow reauthentication of Google / Microsoft365 accounts. 2020-11-25 14:15:08 +01:00
Thorsten Eckel
b7a4cc6d6a - Fixes #3292: Unable to manage Microsoft365/Google Channel accounts if XOAUTH2 token can't get refreshed.
- Fixes #3294: Failing XOAUTH2 Channel (Gmail / Office365) token refresh causes following Channels not to be fetched.
2020-11-25 14:15:08 +01:00
Thorsten Eckel
21708969fd Refactoring: Unified Gmail and Microsoft365 channel examples in proper Channel model spec. 2020-11-25 14:15:08 +01:00
Thorsten Eckel
a90423cc88 Maintenance: Fixed typo (refresh_xoaut2 -> refresh_xoauth2). 2020-11-25 14:15:08 +01:00
Thorsten Eckel
85573432c0 Maintenance: Updated rubocop(-* gems) to latest version (1.4.1). 2020-11-24 17:20:57 +01:00
Mantas
cca33e4b5e Fixes #2853 regression - Deletion of notes impossible if internal and communication = true 2020-11-24 10:49:08 +01:00
Mantas Masalskis
492eb1c883 Fixes #2942 - Attachments get lost on forward in specific conditions 2020-11-24 10:46:56 +01:00
Mantas Masalskis
4088d6e74c Fixes #2560 - Setting used objects (overviews, triggers, scheduler) to inactive works 2020-11-24 10:32:07 +01:00
Mantas
5f2bc303c7 Fixes #3171 - HTML chars in message visible 2020-11-24 10:24:22 +01:00
Mantas
024000b98a Fixes #3297 - Videos embedded in Knowledge Base do not allow full screen mode 2020-11-24 10:22:11 +01:00
Thorsten Eckel
f851b58062 Fixes #3296 - Channel::EmailParser.process_unprocessable_mails doesn't find matching Group because of key insensitive mismatch in email address. 2020-11-23 16:16:11 +01:00
Rolf Schmidt
34ed189881 Maintenance: Fix matching of zammad cops for addons and do not check create_table for reset column information. 2020-11-23 10:08:28 +01:00
Thorsten Eckel
0e6cab4329 Maintenance: GitHub actions set-env directive is deprecated and causes docker builds to fail. 2020-11-17 15:38:58 +01:00
Thorsten Eckel
c46b689405 Fixes #3287 - Can't delete Applications (OAuth Authentication). 2020-11-17 15:05:03 +01:00
Thorsten Eckel
97526c121c Follow up - bb26438c1c - Fixes #3260: Race condition in changed URL check causes instable specs. 2020-11-17 11:52:09 +01:00
Thorsten Eckel
0a85b079ca Maintenance: Use dedicated docker mail server for email integration tests to prevent race condition between different CI jobs. 2020-11-17 09:31:24 +01:00
Rolf Schmidt
81d804576b Fixes #3282 - Unable to upgrade from Zammad 3.3 to 3.6. 2020-11-16 14:17:12 +01:00
Thorsten Eckel
eda100425b Maintenance: Fixed rebase issue leftover causing syntax error. 2020-11-16 10:40:08 +01:00
Mantas
498e5ba487 Fixes #3267 - Issue opened in overview doesn't have previous/next buttons if it was opened before 2020-11-16 10:28:26 +01:00
Mantas Masalskis
e85f80aa2c Fixes #3279 - "Next ticket in overview" is clickable for the last ticket in the overview 2020-11-16 10:27:35 +01:00
Mantas
bb26438c1c Fixes #3260 - "Next in overview" doesn't update the URL 2020-11-16 10:22:50 +01:00
Rolf Schmidt
68fb6bc541 Maintenance: Renamed role signup test correctly. 2020-11-16 09:14:33 +01:00
Rolf Schmidt
317c7b7e7f Maintenance: Redo column allow signup with reset column information to make the migration work. Removed old migration because of missing column information reset there was a quite crash. 2020-11-16 09:14:24 +01:00
Rolf Schmidt
cf5a5e3960 Maintenance: Improved article view for agent customer. 2020-11-16 09:08:52 +01:00
Rolf Schmidt
28944de180 Maintenance: Sync Article REST API capabilities with the ones of the frontend. 2020-11-16 09:08:52 +01:00
Rolf Schmidt
f0462d4c20 Maintenance: Provide allow_signup column to define the signup permissions for roles and disable new permissions by default as signup permission. 2020-11-16 09:08:51 +01:00
Martin Edenhofer
5e94f786fd Updated to 3.7.0. 2020-11-16 03:02:56 +01:00
Marcel Herrguth
afa963b0ff Maintenance: Correct email channel archive function wording
The wording of the archive function is miss leading.
Timestamps are not removed, but the original ones of the mail you're archive-importing will be used.

The new string reflects that.
2020-11-13 16:12:47 +01:00
Rolf Schmidt
386ed0f4f8 Fixes #2568 - Change-Right allows creation of new tickets. 2020-11-13 15:10:24 +01:00
Rolf Schmidt
e7039d7046 Maintenance: Added rubocop to make sure that migration reset their column information if needed. 2020-11-13 09:02:02 +01:00
Thorsten Eckel
09d2d4df58 Follow up - c3fce714dc - Running Scheduler has outdated column information and disables Stats.generate job. 2020-11-12 14:53:29 +01:00
Thorsten Eckel
b72a15a017 Maintenance: Updated rubocop(-* gems) to latest version (1.3.0). 2020-11-12 12:42:44 +01:00
Thorsten Eckel
acd98bd214 Maintenance: Removed incomplete/obsolete TextModules and Templates references implementation to single User. 2020-11-11 14:54:39 +01:00
Rolf Schmidt
f766dc7164 Maintenance: Removed updating of member ids for organization and moved assosciation deletion to own hook. 2020-11-11 11:07:41 +01:00
Thorsten Eckel
ca88877bc8 Fixes #290, Closes #3185 - Webhooks. 2020-11-10 11:31:13 +01:00
Martin Edenhofer
d7ba83681e Fixes issue #3276 - Software error when Elasticsearch is not configured and rake searchindex:rebuild 2020-11-10 08:47:16 +01:00
Mantas
8e7abc45fb Fixes #3266 - Factual Macro title shown in ticket update dropdown 2020-11-09 11:35:43 +01:00
Rolf Schmidt
6810bc5548 Fixes #3270 - Ticket selector "within last (relative)" and "within next (relative)" not working correctly. 2020-11-09 09:36:07 +01:00
Rolf Schmidt
053429bb79 Fixes #3042 - Timeaccounting ignores tags in conditions. 2020-11-06 10:49:32 +01:00
Rolf Schmidt
f132225b2f Fixes #2347 - Merging two Tickets with link to same other Ticket fails. 2020-11-06 10:46:48 +01:00
Mantas Masalskis
7e9ce7e3ed Fixes #3180 - Calendar counts 24/7 business hours as closed for 1 minute at midnight 2020-11-06 10:43:12 +01:00
Mantas
54c694689f Fixes #3233 - ProtonMail Bridge error: Can’t use Channel::Driver::Imap 2020-11-06 10:39:32 +01:00
Thorsten Eckel
43b6374d16 Updated rubocop(-* gems) to latest version (1.2.0). 2020-11-05 17:31:00 +01:00
devNan0
0655b370ed Fixes #3263 - apple-touch-icon.png 404 Not Found 2020-11-05 11:43:01 +02:00
Rolf Schmidt
f305b70c95 Maintenance: Fixed random error in time accountings test because of invalid 0 value for column time_unit (which is not allowed). 2020-10-30 15:18:40 +01:00
Rolf Schmidt
40c3e68924 Fixes #3135 - history entries of ObjectManager::Attribute changes display wrong change information when value is removed. 2020-10-30 09:20:21 +01:00
Rolf Schmidt
3fd0609f61 Fixes #2337 - Zammad stops Organization pagination after 500 entries. 2020-10-30 08:59:32 +01:00
Thorsten Eckel
5b4c7ab886 Enhancement: Added functionality to send X-Hub-Signature header with outgoing UserAgent requests to enable recipient to verify the integrity of the request body. 2020-10-29 18:40:36 +01:00
Thorsten Eckel
33b682400d Enhancement: Add :verify_ssl boolean options to UserAgent request methods. 2020-10-29 18:40:36 +01:00
Thorsten Eckel
b52e49e6e6 Refactoring: Use duck-typing for first argument of Ticket#perform_changes to enhance feature/implementation/extension capabilities. 2020-10-29 18:40:36 +01:00
Thorsten Eckel
ffe5948699 Enhancement: Added header support for UserAgent requests. 2020-10-29 18:40:36 +01:00
Rolf Schmidt
e65c8b1399 Fixes #3142 - Import archive mailbox. 2020-10-29 15:58:36 +01:00
Ross Crawford-d'Heureuse
89f99e52dd Fixes #2716 Closes #3225 - Triggered note with variables do not replace variable with content. 2020-10-29 12:18:55 +01:00
Rolf Schmidt
fc987d7bcb Fixes #3204 - Limit Groups in Notification settings should be in alphabetical order. 2020-10-29 09:49:56 +01:00
Rolf Schmidt
360ab528e4 Fixes #3163 - Individual objects in format "select": No reset to empty in trigger possible. 2020-10-29 09:48:58 +01:00
Rolf Schmidt
40936da562 Fixes #3124 - Nested Tree Select value not translatable. 2020-10-28 16:58:55 +01:00
MrGeneration
8e479ef4ee Follow up - a9984adbc5 - Fixes #3215: Channel attribute name does not exist and should be area instead. 2020-10-28 11:33:20 +01:00
Thorsten Eckel
a9984adbc5 Fixes #3215 - Migrate existing Office365 Channel and ExternalSync to new Microsoft365 name. 2020-10-28 11:04:45 +01:00
Rolf Schmidt
a07e587586 Follow up - db3f553140 / 5f06c8c6b4 - Fixes #2866 #3215 - Added missing Channel permissions for G-Suite/Google Workspaces and Office365/Microsoft365. 2020-10-28 10:52:30 +01:00
Thorsten Eckel
e972d0be89 Follow up - db3f553140 - Fixes #3215 - Renamed Office365 to Microsoft365. 2020-10-28 10:49:06 +01:00
Thorsten Eckel
5f3a8dc581 Refactoring: Migrated last Delayed::Job classes to ActiveJob. 2020-10-27 16:36:38 +01:00
Thorsten Eckel
3033002ae5 Maintenance: Naming conflict between RSpec HasTicketCreateScreenImpact generic and user concern examples. 2020-10-27 10:45:47 +01:00
Rolf Schmidt
3657278da2 Fixes #3257 - Data in DB and elasticsearch (e.g. ticket overview) out of sync. 2020-10-27 10:37:21 +01:00
Rolf Schmidt
164bf0068b Fixes #2620 - Deleting articles with accounted time to not affect accounted time. 2020-10-27 10:32:25 +01:00
Rolf Schmidt
607c221b39 Fixes #3145 - EmailParser (process_unprocessable_mail) ignores group routings. 2020-10-27 10:30:05 +01:00
Martin Edenhofer
16872c3c89 Fixes issue #3255 - In certain cases not all content of an html email is shown (HTML sanitizer will remove to much) 2020-10-27 08:14:20 +01:00
Thorsten Eckel
0b9e6676f8 Maintenance: Updated rubocop(-* gems) to latest version (1.0.0). 2020-10-22 15:57:01 +02:00
Mantas
2ffa821d65 Maintenance: Applied workaround to Ticket Macro QUnit test to avoid failure leading up to DST switch. 2020-10-22 15:53:29 +02:00
Thorsten Eckel
0c15baee7f Fixes #895, Closes #3252 - OTRS import control on thread, offset and limit. 2020-10-22 15:38:34 +02:00
Mantas
66c0c4f513 Fixes #3115 - Zammad can't import specific ISO-2022-JP mails 2020-10-21 19:28:26 +03:00
Martin Edenhofer
ed6258f738 Fixes issue #3254 - Remove not needed package install dependencies (imlib2-devel & libimlib2-dev) 2020-10-21 12:56:54 +02:00
Martin Edenhofer
d478bc8ef2 Fixes issue #3250 - Migration from OTRS error - could not find a valid input encoding (EncodingError) 2020-10-19 16:45:10 +02:00
Mantas
02159c1873 Fixes #3148 - Knowledge Base search crashes if (parent) category is missing translation to the locale of the found object 2020-10-19 08:38:54 +03:00
Martin Edenhofer
971ece82e4 Fixes #3228 - Improve Data Privacy - task list UI of completed tasks with common UI behavior 2020-10-19 05:26:13 +02:00
Rolf Schmidt
dd2bc1eca8 Follow up - 45f56b0d7c - Fixed missing html 5 checks for generic create and edit dialogs. 2020-10-16 16:53:24 +02:00
Rolf Schmidt
45f56b0d7c Fixes #3214 - link_template for ticket no longer shows a button after update to 3.5. 2020-10-15 10:58:45 +02:00
Rolf Schmidt
835787ee69 Maintenance: Fixed not translated strings in data privacy admin area. 2020-10-15 08:40:01 +02:00
Rolf Schmidt
275a97cc4f Fixed issue #3220 - DataPrivacyTask - Can't remove user if still referenced in Overview(s). 2020-10-15 08:37:21 +02:00
Rolf Schmidt
87d55bdfed Fixes #3242 - Reporting does not update ticket list when the ticket count is the same (frontend cache bug). 2020-10-08 15:45:29 +02:00
Mantas
b9755a4956 Fixes #3246 - Knowldge Base internal answer view goes out of screen if previous or next answer title is very long 2020-10-08 15:33:18 +02:00
Rolf Schmidt
72dd0c0316 Fixes #2517 - Elasticsearch throws error 500 when filtering for owner or custom dropdown-fields inside of report profiles. 2020-10-08 14:13:16 +02:00
Marcel Herrguth
73f08e8f77 Fixes #3132 - Powered by footer blocks Logins. 2020-10-07 17:09:25 +02:00
Rolf Schmidt
ab6b68942c Follow up - db3f553140 - Office365 and Google channel:
- Enhancement: Refresh Google and Office365 page every 30 seconds to display possible errors.
- Refactoring: Removed unused method `ExternalCredentials::Office365.user_aliases`.
- Fixes: Technical incompatibility between Google and Office365 causes Google view to break.
- Fixes: Broken duplicate Email detection.
2020-10-07 15:21:21 +02:00
Marcel Herrguth
1a3650f730 Fixes #3195 - Inconsistent granular agent permissions for chat. 2020-10-07 09:04:48 +02:00
Mantas
7937f7b39e Fixes #3231 - KnowledgeBase Broken 500 2020-10-06 21:05:25 +03:00
Thorsten Eckel
c3fce714dc Refactoring: Converted StatsStore to polymorphic association. 2020-10-06 15:13:50 +02:00
Ryan Lue
49d104a11c Refactoring: Migrate ticket_trigger_extended_recursive_disabled_test to RSpec. 2020-10-06 15:03:30 +02:00
Mantas
138edc437b Fixes #3189 - Unable to create inital admin user via web installer 2020-10-06 14:02:24 +02:00
Rolf Schmidt
1a42d9ada3 Fixes #3226 - In the role settings a role can not be agent and customer at the same time. 2020-10-06 13:58:02 +02:00
Thorsten Eckel
93550ad494 Maintenance: Resolved rubocop Style/AccessModifierDeclarations violations. 2020-10-05 16:26:25 +02:00
Thorsten Eckel
9269385acd Follow up - 85bb77c551 - Maintenance: Improved debugging experience of EmailHelper::Probe by adding more logs. 2020-10-05 14:27:23 +02:00
Thorsten Eckel
205105fd47 Follow up - ba0111c4a4 - Fixes #3230 - Hybrid Office-Accounts can't authenticate via Office 365 login. 2020-10-05 14:18:09 +02:00
Thorsten Eckel
ba0111c4a4 Fixes #3230 - Hybrid Office-Accounts can't authenticate via Office 365 login. 2020-10-05 13:47:25 +02:00
Rolf Schmidt
db3f553140 Fixes #3215 - Outlook/Office365/Exchange Online MFA for IMAP & SMTP. 2020-10-02 14:46:19 +02:00
Thorsten Eckel
85bb77c551 Maintenance: Improved debugging experience of EmailHelper::Probe by adding more logs. 2020-10-02 09:28:00 +02:00
Thorsten Eckel
623b17be6b Maintenance: Updated rubocop(-* gems) to latest version (0.92.0). 2020-09-30 11:07:01 +02:00
Martin Edenhofer
9922f5b54f Fixed issue #3223 - Error: Kb locales is too long (maximum is 1 character) 2020-09-30 08:32:13 +02:00
Thorsten Eckel
10062a95e8 Maintenance: Migration of Docker CI image to CentOS 7. 2020-09-25 14:53:55 +02:00
Rolf Schmidt
ae642683f5 Refactoring: Migrated JS core tests to promise bases approach. 2020-09-24 19:05:18 +02:00
Thorsten Eckel
f80725ed62 Maintenance: Added Capybara tests helper to retry on/handle Selenium::WebDriver::Error::StaleElementReferenceError exception. 2020-09-24 18:34:51 +02:00
Rolf Schmidt
a49ff87ef2 Fixes #3190 - Finding a user by email address not possible. 2020-09-24 13:34:04 +02:00
Thorsten Eckel
d41643a568 Refactoring: Removed old browser tests which are now covered by Capybara. 2020-09-23 19:20:00 +02:00
Thorsten Eckel
6885ae9e6b Maintenance: Run rubocop in parallel on CI to increase performance. 2020-09-23 16:48:26 +02:00
Mantas Masalskis
5bb948d87f Maintenance: Search works if multiple KBs are present in database. 2020-09-23 16:10:50 +02:00
Thorsten Eckel
c6e11f3f4e Maintenance: until_constant browser test helper method does not actually performs a Timout and can't handle nil as a result. 2020-09-23 12:07:46 +02:00
Marcel Herrguth
e6bc9280bd Fixes #3184 - System proxy UI shows password. 2020-09-23 11:45:13 +02:00
MrGeneration
4fc95196de Maintenance: Remove Debian 8 (EOL)
Debian 8 is end of life since 2020-06-30 (LTS) which is why we'll be dropping Debian 8 as supported OS.
2020-09-23 11:20:01 +02:00
Thorsten Eckel
3533339e7b Maintenance: Leaking DB changes of tests cause following tests to fail. 2020-09-23 09:48:34 +02:00
Thorsten Eckel
f5dc00e6d5 Refactoring: Use more explicit methods to reason about code. 2020-09-22 15:55:25 +02:00
Thorsten Eckel
a7607f574e Maintenance: Ensured HTTP request verbs according to REST paradigm. 2020-09-22 15:55:25 +02:00
Mantas Masalskis
f63577633f Fixes #2943 (raise default password security) + #2907 (Password strength settings are ignored when creating new customer accounts) 2020-09-22 15:55:25 +02:00
Marcel Herrguth
8d140037e4 Fixes #3128 - Add SSO login button to login page. 2020-09-22 15:55:25 +02:00
Thorsten Eckel
f6c2d810bc Refactoring: Reverted unneeded HTML option customization of bootstrap-tokenfield.js. 2020-09-22 15:55:25 +02:00
Thorsten Eckel
4696a85cd4 Maintenance: Improve logging of failures when sending SMS via Massenversand.de. 2020-09-22 15:55:25 +02:00
Mantas Masalskis
9dd2b59037 Maintenance: Show less error details to non-admin users 2020-09-22 15:55:25 +02:00
Mantas Masalskis
1c96163ada Maintenance: Enhance KB global search result scope. 2020-09-22 15:55:25 +02:00
Martin Edenhofer
2823afd77b Prepared for 3.6 release. 2020-09-22 08:50:11 +02:00
Martin Edenhofer
36610edd30 Fixed issue #3198 - Unable to open ticket/content not loading. 2020-09-17 09:59:49 +02:00
Thorsten Eckel
058272dc82 Maintenance: Split RSpec db_strategy:reset specs into dedicated CI Job to decrease overall runtime. 2020-09-16 14:43:04 +02:00
Mantas
36a0fc98a6 Follow up - f54df50 - Fixes #3040: Prevent race condition between different focus events that are opening and instantly closing the reply input field. 2020-09-16 08:57:37 +02:00
Rolf Schmidt
b310ee519d Fixes #3191 - data privacy obsolete column name. 2020-09-15 09:35:49 +02:00
Mantas
5dde117a14 Fixes #3186 - Endpoint api/v1/ticket_articles/by_ticket ignores X-On-Behalf-Of 2020-09-15 09:12:09 +02:00
Rolf Schmidt
3af0e35821 Peformance - Fixed missing ignored attributes for data privacy feature. 2020-09-14 17:19:51 +02:00
Mantas
08ef240843 Maintenance: Capybara S/Mime tests improvements 2020-09-11 09:38:49 +02:00
Mantas Masalskis
97fc711370 Fixes #2922 - Replying on newly created phone notes to agent customers sets wrong TO-address. 2020-09-11 09:25:47 +02:00
Mantas
1b3d2417e2 Follow up - 518230e6c - Maintenance: Disable VCR for local IP connects 2020-09-10 16:17:35 +03:00
Mantas
6c49446d5a CVE-2020-15169 2020-09-10 16:12:32 +03:00
Thorsten Eckel
2161d624f2 Maintenance: Ensure Chrome requests en-US translated UI in Capybara context. 2020-09-09 10:12:14 +02:00
Rolf Schmidt
518230e6cf Maintenance: Disable VCR for local IP connects e.g. Selenium server in Windows development environment. 2020-09-09 10:12:14 +02:00
Rolf Schmidt
3fb9b05027 Fixes #2074 - Ability of deleting customers and / or all ticket at once. 2020-09-09 09:50:24 +02:00
Thorsten Eckel
8749190a51 Revert "Follow up - f54df50 - Fixes #3040: Use focusout instead of click event to stabilize tests."
This reverts commit b828c7bda0.

It introduced a bug in the behavior of the reply input field. E.g. toggling the article type was no longer possible.
2020-09-08 16:55:16 +02:00
Mantas
4d0707a938 Fixes #2776 - incomplete and curious view of the calendar 2020-09-07 15:29:37 +03:00
Cédric Barthe
65d6c71b80 PR #3176 - adds List-Unsubscribe tag to identify newsletters 2020-09-03 08:55:53 +03:00
Mantas
08f840b1dc Fixes #3169 - Logo image ratio goes wrong when resizing to specific height 2020-08-31 06:27:54 +02:00
Mantas Masalskis
52a44abc2d Fixes #2672 - Changing article visibility will not update ticket view for customers 2020-08-31 06:27:27 +02:00
Thorsten Eckel
b6ae957ac2 Fixes #3167: Active Google channels cause Email channels to loose email addresses. 2020-08-28 11:46:20 +02:00
w1n5l0w
3d192af3d0 PR #3041 - adds groupOfNames objectClass support to LDAP client 2020-08-27 13:25:46 +03:00
Mantas
ab43ff94c8 Refactoring: In idiomatic Ruby loops are exited early by return-ing instead of break-ing. 2020-08-26 16:30:37 +02:00
MrGeneration
3b27e6cb8b Maintenance: Enhance postgres dumps to be owner less
This commit removes owner ship information for upcoming database dumps. With this step the dumps are fully compatible between hosted & selfhosted.

Plus, if you use another use for restoration for whatever reason, the desired restoration may get easier.

In restoration terms this was covered by commit 764062907fd46c81b7dda03197d209408d443ae9
2020-08-26 14:45:14 +02:00
MrGeneration
ec7790748f Fixes #3139 - Restore script uses postgres user and nukes restoration of hosted dumps
Previously restoring Zammad dumps (like those from a Hosted setup) couldn't be imported successfully, because the "owner" information is not provided by the dump. If that's the case, postgre SQL will use the current user you're importing with. If that's postgres and not Zammad, you can't read and use the database as Zammad user.
2020-08-26 14:45:14 +02:00
MrGeneration
b1e75841f4 Maintenance: explicitly expect zammad user and exit if not found
As the restoration script expects specific users and all package installation and source code documentation is talking about "zammad" as a user, we expect this user to be present.

If needed users that want to use different user names may have to adjust the scripts. This still should cover over 90% of Zammad installations.

This is a preparation commit for Issue #3139.
2020-08-26 14:45:14 +02:00
MrGeneration
43702a7045 Fixes #3160 - Backup script restoration order causes issues if version difference causes ruby version differences
This commit ensures that the restore script will restore the database **before** restoring the file system of Zammad.

This solves ruby errors for environments that don't have old ruby versions installed (because they shouldn't be required during restorations).

This commit provides a compromise and behaves the old way for docker and source code installations. This is because it may be a source code installation is restored right away and was not installed before.

Hints for this are prepared for the documentation over at: https://github.com/zammad/zammad-documentation/pull/140
2020-08-26 14:45:14 +02:00
Mantas Masalskis
8b70f5703c Maintenance: Cop to replace .not_to have_ to .to have_no_ 2020-08-26 14:31:33 +02:00
Thorsten Eckel
8886d7bada Maintenance: Fixed typo 'in_fixed_postion' => 'in_fixed_position'. 2020-08-24 15:40:28 +02:00
Thorsten Eckel
3bcd5e71a1 Maintenance: Custom method Capybara::Node::Element#in_fixed_postion is error prone due to a race condition because first check is performed without a sleep. 2020-08-24 15:38:58 +02:00
Mantas
b58225a19a Fixes #2887 - Entering pending till time for Waiting status is difficult to enter with Firefox 2020-08-24 13:06:10 +02:00
Rolf Schmidt
b828c7bda0 Follow up - f54df50 - Fixes #3040: Use focusout instead of click event to stabilize tests. 2020-08-24 12:58:20 +02:00
Ryan Lue
fa9242dea1 Fixes #2736 - Retweet conversion setting not working
=== Background

Zammad's Twitter integration creates new articles
whenever certain kinds of tweets are created
(normally, whenever someone @mentions you
or a tweet includes a word you're watching for).

But if someone @mentions you and then a million people RT that,
you might not want a separate article for every single one of those RTs.
That's why the Twitter integration config has a "track retweets" setting
which is enabled by default.

=== Problem

In #2736[0], @GreXXL points out that
Zammad does not honor the "track retweets" setting.
Actually, it does--but only in Channel::Driver::Twitter#fetch,
which is not where Zammad gets new tweets from.

Rather, new tweets come from Twitter's webhook API,
which hits Zammad's callback URL (POST /api/v1/channels_twitter_webhook)
whenever the relevant tweets are created on Twitter's servers.
These webhook events are turned into Zammad articles
in the TwitterSync#process_webhook method,
which previously had no logic for checking the "track retweets" setting.

=== Fix

This commit adds the appropriate logic
to Zammad's Twitter webhook handler.

[0]: https://github.com/zammad/zammad/issues/2736
2020-08-24 12:53:43 +02:00
Mantas
cbca1f376a Fixes #3159 - greyed out Avatar is not displayed correctly in the caller log 2020-08-21 16:05:40 +03:00
Thorsten Eckel
de22f60826 Maintenance: Added Zammad/NoToSymOnString cop to prevent .to_sym on Strings. 2020-08-21 14:52:41 +02:00
Thorsten Eckel
0918e4f53a Maintenance: Applied Zammad/PreferNegatedIfOverUnless on custom cops. 2020-08-21 14:52:41 +02:00
Thorsten Eckel
52f5605310 Maintenance: Custom rubocops should inherit from Base not Cop (as other core rubocops). 2020-08-21 14:52:41 +02:00
Florian Schmid
7f54f05c1a PR #3157 - fixes accessing inactiveClass in chat widget 2020-08-21 08:08:55 +03:00
Thorsten Eckel
06b717bbda Maintenance: Updated Ruby dependency to 2.6.6. 2020-08-20 10:00:39 +02:00
Rolf Schmidt
4a07c783a3 Fixes #967 - Access to my own Tickets (where I'm customer of) in a Group im not Agent. 2020-08-20 09:10:08 +02:00
Mantas Masalskis
59c787bacb Maintenance: Reduce HasBackends overhead by autoloading backends on initialisation. 2020-08-19 17:24:19 +02:00
Thorsten Eckel
9df575060a Follow up - a782b494cf - Maintenance: CI DB created from schema already contains tables of CD packages that should get created via migration files of the Package. 2020-08-19 11:03:56 +02:00
Rolf Schmidt
a782b494cf Maintenance: Also execute package migrations for db strategy reset. 2020-08-18 15:02:33 +02:00
Mantas Masalskis
563bcfbefd Maintenance: Custom Rubocop matcher for making sure "unless" conditional is not used in Ruby 2020-08-18 15:01:18 +02:00
Thorsten Eckel
65d72b9bba Follow up - 9d3c0e3984 - Fixes #3040: CoffeeScript generates broken JS because of misplaced brackets. 2020-08-18 10:50:46 +02:00
Martin Edenhofer
25c7e81667 Fixes #3107 - Improve CTI / open user profile or new ticket screen based on last customer activity. 2020-08-17 15:37:55 +02:00
Rolf Schmidt
9d3c0e3984 Follow up - f54df501 - Fixes #3040: Make event handling more stable to stabilize browser tests. 2020-08-17 15:28:15 +02:00
Ryan Lue
03a6077e76 Refactoring: Rearrange CanCreatesAndUpdates concern 2020-08-14 13:32:25 +02:00
Ryan Lue
134dde5567 Refactoring: Clean up CanCreatesAndUpdates concern 2020-08-14 13:32:25 +02:00
Ryan Lue
7700817143 Refactoring: Migrate db_auto_increment to RSpec 2020-08-14 13:32:25 +02:00
Ryan Lue
dde7208ebc Fixes #3111 - admin.user token permission doesn't allow fetching details of specific user 2020-08-14 13:12:41 +02:00
Rolf Schmidt
900d8fcd44 Fixes #3147 - S/MIME signing fails because of message encoding. 2020-08-13 13:32:52 +02:00
Thorsten Eckel
ed4f593c8b Maintenance: Ensure synchronousness between ActiveRecord Model column information and actual DB after resetting DB in tests. 2020-08-13 13:12:12 +02:00
Martin Edenhofer
8a3be0488d Improved error message for SSO if REMOTE_USER is blank. 2020-08-13 12:46:27 +02:00
Mantas Masalskis
806cd7def6 Fixes #3093 - Inline images are cut during forward and reply (quotation) 2020-08-13 11:17:14 +02:00
Rolf Schmidt
9a5be2ae00 Fixes #3151 - knowledge base public interface does not get crawled by search engines. 2020-08-13 09:54:42 +02:00
Rolf Schmidt
1e8616151c Fixes #3150 - Make channels trusted. 2020-08-12 13:09:07 +02:00
Mantas
ff5f175640 Fixes #3058 - Search details sidebar name shows URL-encoded gibberish 2020-08-10 13:47:29 +02:00
Thorsten Eckel
d6f5baa87e Fixes #3109 - Race condition between #lookup and .update causes caching of obsolete data. 2020-08-10 13:41:11 +02:00
Mantas
2d861508f4 Maintenance: ticket/zoom_spec improvements 2020-08-10 10:32:29 +02:00
Mantas
e5ffb9e840 Fixes #3102 - RTL in CTI page log 2020-08-10 08:21:52 +02:00
Thorsten Eckel
e874b9ac78 Maintenance: Updated Clearbit marketing claim in test. 2020-08-04 11:49:24 +02:00
Rolf Schmidt
abfb34dc7e Fixes #2609 - Zammad shows Customers in Owner-Selection on IE (root cause: App.ControllerForm returns no params on IE 11). 2020-08-04 11:48:25 +02:00
Mantas Masalskis
57176aedbb Fixes #3143 - unprocessible mail "FrozenError: can't modify frozen String" 2020-08-04 10:08:28 +02:00
Thorsten Eckel
f5841a2fe3 Maintenance: Introduced custom Rubocop Zammad/ExistsConditions to check for .find_by in conditions and replace it with .exists? to increase performance and reduce memory cost. 2020-08-03 17:08:08 +02:00
Felix Niklas
5239c83e71 Admin Chat Preview: fix for widescreen & add animation
Turns out that the chat preview was broken on big screens. The website screenshot didn’t span the whole width and the chat was getting cut off.

Fixes:
- preserve 16:10 browser aspect ratio
- rename zoom to 1:1
- hide 1:1 mode on big screens that don’t need it
- scale the website screenshot to the full width
- scale the website screenshot in 1:1 mode with the chat
- make color picker work with changes
- use dynamic height in the form preview
2020-08-03 15:09:12 +02:00
Mantas
577bb5f723 Fixes #3146 - IMAP channel improvements to handle ProtonMail (bridge) and Office 365. 2020-08-03 13:38:34 +02:00
Mantas Masalskis
92152743d7 Fixes #2960 - Ticket removal of merged / linked tickets doesn't remove references 2020-08-03 13:36:53 +02:00
Thorsten Eckel
cdbcb5d853 Fixed test: Ensure action is performed by current Ticket Owner to mark it as seen. 2020-08-03 08:49:38 +02:00
Thorsten Eckel
b81d31a42f Fixed issue #3136 - Attribute changes remove Owner of closed Ticket. 2020-08-01 18:40:58 +02:00
Thorsten Eckel
9a65f79d89 Maintenance: Removed unneeded empty method brackets (not stlye guide conform) from pod. 2020-07-30 15:38:37 +02:00
Rolf Schmidt
fe2174f0a8 Fixes #3138 - Article body gets updated/re-sanitized when updating other Article attribute. 2020-07-30 15:35:04 +02:00
André Bauer
3376037561 Maintenance: Replaced build badges of CircleCI (obsolete) with the ones of GitHub Actions. 2020-07-28 18:04:41 +02:00
Austin Snoeyink
01dedd818e PR #3126 - changes Opps to Oops to be more gramatically correct 2020-07-23 09:00:48 +03:00
Thorsten Eckel
f83fe46c91 Maintenance: Introduce dedicated .rubocop directory (without '.rubocop'-prefixed file names) to make excludes relative to the calling directort (custom development). 2020-07-21 15:07:57 +02:00
Thorsten Eckel
b49802a161 Fixes #3123: Merging Tickets/Users/... does not update ExternalSync references. 2020-07-20 08:19:51 +02:00
Mantas
543b552298 Fixes #3121 - Object lookup by text attribute fails if symbol is given 2020-07-16 20:50:27 +03:00
Thorsten Eckel
a8cdb6a4cc Maintenance: Go back to using latest Selenium version (browser issues seem to be resolved). 2020-07-16 15:52:46 +02:00
Mantas
1f76712933 Fixes #3091 - Enhanced/reworked message header of forwarded mails. 2020-07-15 14:08:23 +02:00
Mantas Masalskis
41bba5dda3 Fixes #2985 - Adding a note during bulk operation only works for one ticket 2020-07-15 13:51:13 +02:00
Thorsten Eckel
73f6a98e29 Updated rubocop(-* gems) to latest version (0.88.0). 2020-07-14 08:22:48 +02:00
Mantas
829fc6e5c5 Maintenance: S/Mime Capybara tests performance improvement 2020-07-14 08:22:06 +02:00
Mantas Masalskis
b5c067b05a Fixes #3083 - KB answer search in ticket is broken 2020-07-14 08:20:25 +02:00
Mantas Masalskis
236ef88d93 Fixes #3106 - improve weak password error on initial user creation 2020-07-13 13:27:44 +02:00
Thorsten Eckel
dc69141877 Follow up - 0da00041a5 - Maintenance: Limited rubocop TODOs to explicit files to ensure checks for new files. 2020-07-13 11:31:05 +02:00
Mantas Masalskis
5c5c69a785 Fixes #3086 - Deletion of communication article works for admins 2020-07-13 11:14:15 +02:00
Marcel Herrguth
7f14332fe0 Maintenance: Check_MK changed its name to Checkmk. 2020-07-13 10:44:33 +02:00
Martin Edenhofer
dc743a7662 Fixes #2494 - Plus characters are stripped from email addresses and urls in ticket body 2020-07-13 08:38:11 +02:00
Rolf Schmidt
a476d4697c Fixes #1326 - Can't add attributes manually to LDAP sync. 2020-07-10 17:00:34 +02:00
Rolf Schmidt
fe5a9cfcc1 Fixes #2107 - Too large article body fails imports. 2020-07-10 16:54:04 +02:00
Thorsten Eckel
6bf588dd0c Fixes #3077: Empty "issues" attribute of Monitoring / HealthCheck result causes errors in Zabbix. 2020-07-10 16:43:39 +02:00
Mantas
c4f4deabde Maintenance: S/MIME RSpec test reliance improvement. 2020-07-10 16:32:25 +02:00
Mantas Masalskis
ce91b8f181 Fixed #3039 - Embedding Youtube Videos in KB containing "-" does not work 2020-07-10 16:28:53 +02:00
Mantas
cbf5359589 Fixes #3089 - Domain based assignment can be enabled without domain being filled in 2020-07-10 16:26:19 +02:00
Rolf Schmidt
37a6a748c9 Fixes #3108 - Allow uploaded S/MIME certificates to download in admin interface (like in other certificate managers). 2020-07-10 16:18:48 +02:00
Martin Edenhofer
71dcde5876 Fixes #3095 - Not all attributes if chats are indexed by elasticsearch (chat.name and tags are missing) 2020-07-10 15:30:44 +02:00
Thorsten Eckel
5d9ecee99c Follow up - 6309eacc55 - Fixes #3110 - ServiceNow mails from other service providers are not detected: Enhanced handling of key insensitive ServiceNow sender address. 2020-07-09 17:06:20 +02:00
Rolf Schmidt
6309eacc55 Fixes #3110 - ServiceNow mails from other service providers are not detected. 2020-07-09 16:43:36 +02:00
Ryan Lue
80b330d73f Refactoring: Clarify complex Permission queries
This commit was prepared to facilitate a larger refactoring assignment
as part of the Pundit migration.

As a bonus, it includes some SQL query optimizations!

=== Why was this refactoring necessary?

It's not, strictly speaking.
But the Pundit migration involves taking complex querying logic
and moving it into Scope classes as appropriate,
and deciding where things belong is really difficult
when you can't see what they're doing.

=== So how does this refactoring fix the problem?

* It replaces raw SQL queries with Ruby-esque ActiveRecord queries.
* It replaces complex, procedural code
  that's full of loops and obscure local variable assignment
  with compact, cleanly-formatted code
  that follows Ruby idioms and uses meaningful variable names.

In my opinion, it's much faster and easier
to understand what the code does this way.

=== What kinds of SQL query optimizations are included?

* n+1 query: user_access_token#index instantiated all active permissions
  and then called current_user.permissions? on _every single one._
  A fresh installation of Zammad contains 57 permissions,
  so this was a lot of unnecessary queries.

  The method has been rewritten to make only one query instead.

* User#permissions? used to query the DB once
  for each argument it was given.
  Now, it only queries the DB once, even when given many arguments.

* We had a couple SQL queries that used both #select and #pluck.
  (When using #pluck, #select is redundant.)
  Removing #select from these calls did not improve performance,
  but it did clean up unnecessary code.
2020-07-07 13:14:58 +02:00
Thorsten Eckel
b37e80df9a Updated rubocop(-* gems) to latest version (0.87.0). 2020-07-07 08:30:20 +02:00
Mantas
6931fece7a Followup #2862 - Time field width in ticket_perform_action element. 2020-07-06 17:14:39 +02:00
Mantas Masalskis
22fe0a2a97 Fixes #864 - Added relative pending_time to Macro/Trigger/Scheduler functionality. Based on the Pull Request #2862 by @fleverest – huge thanks ❤️ 2020-07-06 17:03:28 +02:00
Thorsten Eckel
e48f49a1a9 Fixes #3100 - Avoid unnecessary error message: Unable to get asset for 'customer'. 2020-07-06 11:34:12 +02:00
Thorsten Eckel
0da00041a5 Maintenance: Limited rubocop TODOs to explicit files to ensure checks for new files. 2020-06-22 13:08:47 +02:00
Thorsten Eckel
9d4aff5eb0 Maintenance: Activated rubocop rule Layout/ExtraSpacing. 2020-06-22 13:08:37 +02:00
Thorsten Eckel
0eedc58558 Maintenance: Activated rubocop rule Style/RescueStandardError. 2020-06-22 12:09:39 +02:00
Thorsten Eckel
f7e82bb3f9 Updated rubocop(-* gems) to latest version (0.86.0). 2020-06-22 12:09:39 +02:00
Thorsten Eckel
83239518d0 Refactoring: Restore consistency by replacing *_user suffix factories with just customer, admin and agent factory name. 2020-06-20 11:15:52 +02:00
Thorsten Eckel
6839d6e3e0 Enhancement: Skip CTI log update when import_mode is active. 2020-06-19 18:17:34 +02:00
Mantas
da7cffd7bc Maintenance: Make login message system spec more stable by using default wait time to prevent WS event race condition. 2020-06-19 07:37:21 +02:00
Mantas
05fb40a3f8 Maintenance: Make S/MIME system spec more stable by applying temporary "Setting.set before authenticated" workaround. 2020-06-18 14:20:06 +02:00
Mantas
0f5b102533 Maintenance: Tags capybara test performance improvement 2020-06-18 15:12:09 +03:00
Mantas Masalskis
ddfbf6139e Maintenance: Unified :authenticated and :authenticated_as helpers to just :authenticated_as in system and request specs. 2020-06-18 13:51:25 +02:00
Thorsten Eckel
ae22dfcded Fixes #3090: Failed to run import backend 'Import::Exchange'. Cause: Missing implementation of 'mapping' method for 'Sequencer::Unit::Import::Exchange::FolderContact::Mapping::Login'. 2020-06-18 10:41:58 +02:00
Thorsten Eckel
ee1c4677ea Fixes #3087: Search taskbars cause DeadLocks. 2020-06-17 17:41:45 +02:00
Mantas
899a4d887f Fixes #3023 - KB within Zammad UI (as agent) breaks words 2020-06-16 13:18:25 +02:00
Mantas
27b3fb4546 Fixes #3070 - KB search bar doesn't find indexed attachments 2020-06-16 12:19:42 +02:00
Thorsten Eckel
9ef0a368c0 Follow up - b9b3a73474 - Fixes #3085 - Required Doorkeeper scope is missing and fails authentication. 2020-06-16 11:39:30 +02:00
Mantas
767239733c CVE-2020-8184 2020-06-16 08:37:59 +03:00
Rolf Schmidt
6e56aee254 Enhancement: Added authorization checks for ticket controller actions: ticket_customer ticket_history ticket_related ticket_recent ticket_merge ticket_split. 2020-06-10 13:39:54 +02:00
Rolf Schmidt
4014839242 Fixes issue #2907 - Password strength settings are ignored when creating new customer accounts. Make login available to verified users only. 2020-06-10 13:39:53 +02:00
Thorsten Eckel
a336d5232d Follow up - 2ffca390a9 - Fixes #1961 - S/MIME integration: Encryption and Sign buttons can be clicked even if disabled. 2020-06-10 12:24:27 +02:00
Thorsten Eckel
4bb4f7d542 Maintenance: Fixed trailing whitespaces. 2020-06-10 12:07:04 +02:00
Thorsten Eckel
72bb320fb0 Updated rubocop(-* gems) to latest version (0.85.1). 2020-06-08 17:01:40 +02:00
Mantas Masalskis
90f1442dc8 PR #3073 - adds Portuguese Brazilian translation to chat. Thank you @ jhenriquejrc! 2020-06-08 14:24:46 +02:00
Rolf Schmidt
dc4d61ca49 Follow up - 5f06c8c6b4 - Added last run to prevent conflict with missing function after migration. 2020-06-08 09:58:57 +02:00
Thorsten Eckel
1cca1870bf Maintenance: Removed duplicate "sles-12" entry in packager.io configuration. 2020-06-08 09:21:42 +02:00
MrGeneration
3a3d036a7b Maintenance: Enabled support for Ubuntu 20.04 LTS package building on packager.io. 2020-06-08 09:21:42 +02:00
Mantas
b16b78e46a Bumped Websocket-Extensions to 0.1.5 (CVE-2020-7663) 2020-06-06 13:37:15 +03:00
Mantas
c78652867b Follow up - 2ffca390a9 - Fixes #1961 - S/MIME integration: S/MIME manage view not update after adding certificate or key. 2020-06-05 13:56:37 +02:00
Thorsten Eckel
47a46fb6fb Maintenance: GMail skip without present ENVs does not work because channel is created before. 2020-06-05 08:58:02 +02:00
Thorsten Eckel
2ffca390a9 Fixes #1961 - S/MIME integration. 2020-06-02 13:01:16 +02:00
Mantas Masalskis
d64ea29efb Fixes #2498 - Japanese encoding 7-bit iso-2022-jp is processed incorrectly 2020-06-02 11:30:19 +02:00
Thorsten Eckel
09268cc09c Maintenance: Maintenance message change spec checks for wrong message. 2020-05-28 16:06:28 +02:00
Thorsten Eckel
5f06c8c6b4 Fixes #2866 - G Suite accounts will only allow access to apps using OAuth. Password-based access will no longer be supported. 2020-05-28 15:28:07 +02:00
Thorsten Eckel
f14607e265 Maintenance: Unpredictable JS parsing and App boot up time causes race condition for JS Core interval (timing) tests. 2020-05-28 15:22:09 +02:00
Thorsten Eckel
a7ee192c9d Enhancement: Increase number of Capybara puma threads from 4 to 16 to make tests more stable by handling more parallel requests. 2020-05-28 15:22:09 +02:00
Thorsten Eckel
8a20892a8d Enhancement: Log executed RSpec example name to reason about related log lines. 2020-05-28 15:22:09 +02:00
Mantas Masalskis
1da20d3f90 Fixed #3060 - Loading KB-Answers doesn't work for contained images 2020-05-28 10:02:07 +02:00
Ryan Lue
09a808162d Bugfix: Add missing authorization check for tickets#create 2020-05-27 17:21:45 +08:00
Mantas Masalskis
ea395db5c6 Fixes #3065 - Updating KB answers throws error 500 for agents without edit rights 2020-05-26 16:35:54 +02:00
Ryan Lue
95de420a35 Fixes #3064: Double-render error on HTTP Basic auth
This commit fixes a regression[0]
introduced in becbdb1ba (the Pundit migration).

Specifically, `CalendarSubscriptionsController` appears to be
the only controller that supports HTTP Basic authentication
(for calendar clients like Thunderbird Lightning or Calendar.app),
and the migration changed the control flow
for HTTP Basic authentication + authorization:

    # before
    authentication_check({ basic_auth_promt: true, permission: 'user_preferences.calendar' })

    # after
    authentication_check(basic_auth_promt: true) && authorize!

After this change, `#authentication_check` is expected
to communicate success or failure through its return value,
but prior to this bugfix, its return value was always truthy.
This led to a double-render error,
where a response code and message were set twice,
upon the failures of both authentication and authorization.

This fix adds a `return false` in the authorization failure case,
short-circuiting the `#authorize!` call and eliminating the error.

[0]: https://github.com/zammad/zammad/issues/3064
2020-05-26 16:33:11 +02:00
Martin Edenhofer
acd28480b0 Maintenance: Removed deprecate warnings. 2020-05-26 13:44:46 +02:00
Mantas Masalskis
9b459556cd Fixes #3014 - Fullquote Header for forwarded mails. Thanks to @drbw ❤️ 2020-05-25 13:44:18 +02:00
Mantas Masalskis
5d51eb68f6 Fixes #2282 - SLA GUI - inconsistency when no checkmark is set and other SLA form element improvements 2020-05-25 12:01:49 +02:00
Thorsten Eckel
8690916936 Updated rubocop(-* gems) to latest version (0.84.0). 2020-05-25 10:19:53 +02:00
Mantas Masalskis
e037b6015e Fixes #2990 - Backward compatibility of deleting own notes 2020-05-25 09:42:48 +02:00
Mantas Masalskis
222e8c0dd3 Fixes #2853 - Deletion of notes impossible if internal and communication = true 2020-05-25 09:42:48 +02:00
Mantas
4b487dbfab Maintenance: updates Puma due to CVE-2020-11076 2020-05-23 10:39:24 +03:00
Mantas Masalskis
cc2bc4f188 Fixes #2867 - KB links are in the header and footer of the public KB, Fixes #2834 - unclear meaning of "Public Menu" tab in KB admin 2020-05-20 16:06:04 +02:00
Mantas Masalskis
a69aebcd0c Fixes #2964 - Ensure email channel authentication to be ASCII-8Bit 2020-05-20 16:04:45 +02:00
Mantas Masalskis
c4c372c976 Maintenance: Ruby on Rails bump to 5.2.4.3 due to several CVEs 2020-05-19 01:00:37 +03:00
Mantas Masalskis
87987ac71d Specs enhancement: avoids showing clues modal 2020-05-15 09:38:03 +02:00
Mantas Masalskis
fa143749e4 Specs enhancement: reusable websocket status check 2020-05-15 00:26:15 +03:00
Mantas Masalskis
ed830f61b2 PR #3055 - adds Hungarian translation to chat. Thank you @bartfaics! 2020-05-14 16:34:40 +02:00
Mantas Masalskis
e953090dc7 Maintenance: update <time> tag rendering to match HTML specs 2020-05-14 15:32:20 +02:00
Mantas Masalskis
4d17b78181 Fixes #3054 - "Get latest translations" update all but latest locales 2020-05-14 15:30:36 +02:00
Thorsten Eckel
163dbc4e9e Updated rubocop(-* gems) to latest version (0.83.0). 2020-05-11 14:49:22 +02:00
Mantas Masalskis
1c160abf7a Maintenance: removes legacy MAILBOX_AUTO and MAILBOX_MANUAL tests 2020-05-10 00:59:58 +03:00
Mantas Masalskis
23a438ec03 Fixes #3044 - resets attribute position if custom object is being updated 2020-05-08 11:19:54 +02:00
Martin Edenhofer
35329d9d1d Maintenance: Fixed user agent test by utilising new dedicated test server. 2020-05-06 13:15:16 +02:00
Thorsten Eckel
d99c596ab8 Follow up - 7aeeb6ed1a - removed unnecessary TODO. 2020-05-06 11:42:40 +02:00
Denny Korsukéwitz
7aeeb6ed1a Refactoring: Reorganise GitLab CI definition by splitting it up in dedicated, logical parts. Also introduce SINGLETESTNAME ENV to run single test 🚀 2020-05-06 11:32:26 +02:00
Thorsten Eckel
d146919a07 Maintenance: Applied required updates for GeoIP service update. 2020-05-06 09:33:54 +02:00
Rolf Schmidt
b9b3a73474 Bumped doorkeeper to 5.3.2 (CVE-2020-10187). 2020-05-05 11:00:55 +02:00
Thorsten Eckel
e98ebb7b3e Maintenance: Wrong log level (error) for debug line. 2020-05-04 08:45:12 +02:00
Thorsten Eckel
7ebd7a731d - Refactoring: Ticket create capybara system test is not idiomatic.
- DX: Extract Ticket create view template selection into dedicated common action capybara helper.
2020-04-30 17:41:24 +02:00
Thorsten Eckel
215cfb7990 Follow up - 9402699a42 - DX: Developer should not need to add a password for each created user that should login. Therefore create one if non is set yet. 2020-04-30 17:41:24 +02:00
Mantas Masalskis
49b21b147f Fixes #2548 - Do not sort tables by (click on) header names if sortable by dnd is enabled 2020-04-28 23:47:45 +03:00
Ryan Lue
b7afa91cc0 Refactoring: Remove unused method 2020-04-28 13:40:16 +02:00
Ryan Lue
29670cd05a Testing: Fix false positive and cover edge case for Channel::Driver::Twitter#fetch
Originally, a spec for race condition handling
in Channel::Driver::Twitter#fetch
used a `travel_back` call in the wrong place:
it needed to be called _after_ `subject!(:channel)` was created,
but since it was placed in an `around` block,
it ran before all preceding setup blocks.

Moving it to a `before` block changed the order in which it was called,
thus fixing a false positive in the test.

An additional expectation was added
to prevent this false positive in the future,
and a new test case was added to capture yet another edge case.
2020-04-28 13:40:16 +02:00
Ryan Lue
3f28c5f54e Bugfix: Add nil handling to CommunicateTwitter::BackgroundJob 2020-04-28 13:40:16 +02:00
Ryan Lue
284e504bcd Testing: Add coverage for CommunicateTwitter::BackgroundJob 2020-04-28 13:40:16 +02:00
Ryan Lue
f55f4b8874 Testing: Add coverage for Observer::Ticket::Article::CommunicateTwitter 2020-04-28 13:40:15 +02:00
Ryan Lue
ad5bc765fd Bugfix: Fix nested error messages from faulty rescue clause 2020-04-28 13:40:15 +02:00
Ryan Lue
64e08dfc48 Bugfix: Improve error messaging in Twitter app configuration flow 2020-04-28 13:40:15 +02:00
Ryan Lue
bdec29179d Testing: Add coverage for ExternalCredential::Twitter 2020-04-28 13:40:15 +02:00
Ryan Lue
847cf02b49 Testing: Enhance authenticated_as spec helper
Originally, the `authenticated_as` spec helper
made it impossible to persist session state in request specs.
This made it impossible to test external_credentials#callback
or any other controller actions that rely on session state.

This commit fixes that.

=== How exactly was `authenticated_as` broken?

`authenticated_as` passes user credentials via request headers.
In practice, this auth method is for API requests by machine clients,
since they don't have cookies or store session state.

Because machine clients don't use cookies or session state anyway,
Zammad disables them for this auth method:

    # app/controllers/application_controller/authenticates.rb
     1 module ApplicationController::Authenticates
    42 def authentication_check_only(auth_param = {})
    57     request.session_options[:skip] = true

As a result, in tests using `authenticated_as`,
session data is discarded between every single request.
Some controller actions will not work without session data,
so this limitation made testing these actions impossible.

=== Why couldn't we just set the session values directly in test setup?

This is possible in controller tests,
but the Rails & RSpec team soft-deprecated controller tests
in favor of integration tests (request specs) a long time ago.

For more details, consider the following comments:

> The session is an internal structure for the controller.
> Integration test is more black box than controller tests were.
> I don't think we should be testing internals of the controller like this.
> I would rework the test to test something visible in the UI instead.
>
> --@dhh via https://github.com/rails/rails/issues/23386

> Integration tests doesn't allow you to set session.
>
> --@rafaelfranca via https://github.com/rails/rails/issues/25394

=== Solution

This commit adds a `via: :browser` option to the spec helper
which simply prepends a valid sign-in request to the spec example.
2020-04-28 13:40:15 +02:00
Ryan Lue
494474f11a Testing: Add cases for Channel::Driver::Twitter#fetchable? 2020-04-28 13:40:15 +02:00
Ryan Lue
c290a89a8b Testing: Add convenience option to Channel factory 2020-04-28 13:40:15 +02:00
Ryan Lue
227b2b25b3 Testing: Speed up Twitter tests by paring down VCR cassette content
This commit reduces the execution time of the specs for
Channel::Driver::Twitter#fetch by a little over 50%.

The #fetch method calls out to the Twitter API
and receives a list of tweets (serialized as JSON),
then converts them to tickets and articles.
Even with HTTP caching (via VCR), this is an expensive operation:
each transaction may contain dozens of tweets to be processed.

This commit reduces the processing burden
by manually editing the tests' VCR cassettes,
removing the vast majority of incoming tweets
and keeping only those necessary to run meaningful tests.

The result is a set of tests for the #fetch method that,
on a given machine, now take 65 seconds instead of 140.
As an ancillary benefit, the file size of the associated
VCR cassette directory has been reduced from 16MB to under 5MB.
2020-04-28 13:40:15 +02:00
Ryan Lue
2c0b858312 Testing: Complete coverage for Channel::Driver::Twitter#fetch 2020-04-28 13:40:14 +02:00
Ryan Lue
165c44c056 Testing: Prevent synchronization issues with VCR
=== Background: What is VCR?

VCR caches HTTP network traffic for tests
that call out to third-party services (e.g., the Twitter REST API).
It "records" to a YAML file the first time a test is run,
and we save those files to the repo so they can be "replayed" later.

=== The problem & the naive approach

The ways Zammad uses third-party services can be time-sensitive.
For instance, Zammad assumes that when it fetches new tweets,
it's getting an up-to-date response from the Twitter API,
and ignores all tweets 15+ days old.

Of course, if we're using VCR, that's not the case--
in the test, Zammad receives a listing of tweets that's frozen in time.
Thus, 15 days after the test was first run,
it won't import any tweets at all.

Initially, the fix was to add the following to the spec file:

    before { travel_to '2020-02-06 13:37 +0100' }

This hardcodes the date when the tests were first written,
and it has significant drawbacks:

1. It leads to hard-to-diagnose bugs when adding new test cases.

   Your new test case will not have a VCR cassette associated with it;
   the first time you run it, it will travel way back in time
   and try to interact with the Twitter REST API.

   The Twitter REST API requires an OAuth signature
   based on a current timestamp,
   and will reject the one generated during the test:

       Twitter::Error::Unauthorized: Timestamp out of bounds.

   Because RSpec, VCR, and Channel#fetch all suppress error output in
   different ways, this error message takes some work to find.

2. If you succeed in adding new test cases,
   they won't match the timestamp above.

=== A better solution

This commit adds a new option to the :use_vcr metadata tag:

    it 'does something', use_vcr: :time_sensitive

Examples tagged in this way will automatically travel back to exactly
when a VCR cassette was recorded prior to using it.

=== Discussion

You may notice that the VCR auto-record logic was moved
from a helper module to a simple block.

The helper module was intended to improve organization and clean up the
config code, but due to context/binding issues, it was not possible to
call `travel_to` from inside the helper module.
2020-04-28 13:40:14 +02:00
Ryan Lue
71dad38129 Testing: Migrate Channel specs to channel-driver spec file 2020-04-28 13:40:14 +02:00
Ryan Lue
a6ee25e15e Testing: Spec Channel::Driver::Twitter#send
This commit is part of a larger effort to overhaul test coverage
for Twitter-related logic throughout the application.

The logic tested in this commit _could_ have been tested
at other interfaces:

* Channel#deliver
  (higher abstraction; calls Channel::Driver::Twitter#send)

* TwitterSync#from_article
  (lower abstraction; is called from Channel::Driver::Twitter#send)

So why did we choose to test at the channel driver level?

Channel#deliver accepts many different adapters
(of which Channel::Driver::Twitter is just one).
Testing Channel#deliver with every possible combination of inputs
would quickly lead to a single, unmanageably large test file
with an explosion of context blocks.
Testing each adapter in isolation seemed the wiser approach.

TwitterSync is a helper class without a cohesive single responsibility,
and thus is strong candidate for refactoring.
It is safer to change its interface than the channel driver's.
2020-04-28 13:40:14 +02:00
Ryan Lue
3df00e7e1b Testing: Expand factories for Twitter API testing 2020-04-28 13:40:14 +02:00
Ryan Lue
5ffad2a7e7 Testing: Fix bug in VCR helper from a5d4cd8
In our test suite config, we have a helper
to enable HTTP caching ("VCR cassettes")
via RSpec metadata tags (from 1ebddff).

This helper can potentially lead to confusing test failures,
so we added an error message,
hooking into RSpec::Support.notify_failure (from a5d4cd8).

This error message logic did not take the same exact arguments
that RSpec::Support.notify_failure does,
which led to errors like the one below:

    ArgumentError:
      wrong number of arguments (given 2, expected 1)
    # ./spec/support/vcr.rb:78:in `inject_advisory'
    # ./spec/support/vcr.rb:60:in `inject_advisory'
    # ./spec/support/vcr.rb:36:in `block in auto_record'
    # ./spec/support/vcr.rb:35:in `auto_record'

This commit fixes the above error.
2020-04-28 13:40:14 +02:00
Ryan Lue
f69d7a0962 Refactoring: Utilize existing channel driver pattern for Twitter
The Channel model is built around a "driver" pattern,
where records may invoke a method (e.g., #fetch)
and that method call then delegates to the same method
in a given driver class (e.g., Channel::Driver::Twitter).

Originally, the controller that handles incoming Twitter webhook events
ignored this interface, directly instantiating the driver class
and invoking the desired method.

This commit hides this invocation behind the appropriate interface
(i.e., Channel#process vs. Channel::Driver::Twitter#process).
2020-04-28 13:40:14 +02:00
Ryan Lue
917de2a417 Refactoring: Prep refactoring of Twitter webhook processing logic
This commit rescopes test coverage added in 9678b1857
from TwitterSync#process_webhook to Channel::Driver::Twitter#process.

When Zammad processes an incoming webhook event from Twitter, it enters:

* ChannelsTwitterController#webhook_incoming, which thinly wraps
* Channel::Driver::Twitter#process, which thinly wraps
* TwitterSync#process_webhook

The core logic for webhook processing is contained in this last method,
so that's the method that test coverage was written around.

After examining the classes more carefully,
it seems that this logic doesn't quite belong in the TwitterSync class,
which is principally for outbound communication to the Twitter API.
Rather, it is more analogous to Channel::EmailParser#process
(which takes an incoming email and converts it into the appropriate
Zammad assets; i.e., users, tickets, and articles),
and so will be migrated upstream into Channel::Driver::Twitter#process.

This refactoring will be undertaken in subsequent commits.
2020-04-28 13:40:14 +02:00
Ryan Lue
8ffd593616 Refactoring: Fix bugs discovered in preceding commit 2020-04-28 13:40:14 +02:00
Ryan Lue
64c882b090 Refactoring: Add coverage for TwitterSync#process_webhook
Prior to this commit,
the TwitterSync#process_webhook method had only partial test coverage
(in `spec/requests/integration/twitter_webhook_spec.rb`).
This commit replaces the existing, incomplete tests
with a direct spec of the TwitterSync class,
giving individual test cases for all reasonable edge cases
of the #process_webhook method.

Since this method is responsible for a lot of complex behavior,
there are a _lot_ of such test cases.
Putting them all in the same spec file makes it hard to read through,
so a future goal is to break them up into smaller methods
and move some of these methods into other, more appropriate classes.

This could not be achieved with a request spec,
since they enforce testing at a single interface /
level of abstraction (i.e., HTTP requests).

=== Note: This commit will not pass CI.

Some bugs in the existing code were uncovered
in the process of adding comprehensive test coverage
for the #process_webhook method.

In the interest of isolating changes into discrete chunks, fixes for
these bugs have been reserved for the next commit.
2020-04-28 13:40:14 +02:00
Ryan Lue
b990145875 Refactoring: DRY up TwitterSync.preferences_cleanup spec 2020-04-28 13:40:14 +02:00
Ryan Lue
e26fe9cc50 Refactoring: Remove test redundancies (from 9409d17de)
9409d17de added test coverage that
turned out to overlap with existing tests.
This commit removes the old test cases to eliminate redundancy,
and polishes some of the language in the new test case descriptions.
2020-04-28 13:40:13 +02:00
Ryan Lue
b23a6ae6ff Maintenance: Fix outdated code comment 2020-04-28 13:40:13 +02:00
Mantas Masalskis
8c7ac9143f Fixes #2995 - Sorting overviews sometimes causes columns to jump 2020-04-28 11:45:32 +02:00
Thorsten Eckel
f54df50154 Fixes #3040: Reply Article box closes when replying multiple times and placeholder covers input. 2020-04-27 15:43:41 +02:00
Thorsten Eckel
9402699a42 DX:
- Add `password_plain` method to all `User` records created by FactoryBot to access the plain password for reuse to avoid variable spaming.
- Enable Capybara system test meta attribute `:authenticate` to handle a user as lambda return value which will be used for authentication instead of default `master@example.com`.
2020-04-27 15:43:41 +02:00
Thorsten Eckel
d9bda79385 Maintenance: Make login clue check Capybara system tests more robust in local environments. 2020-04-27 15:42:47 +02:00
Marcel Herrguth
57f40539f2 Restoring Zammad from backup: Workaround for missing DROP TABLE IF EXISTS statement in DB dumps created with an older pgdump version. 2020-04-24 09:47:25 +02:00
Mantas Masalskis
62a6d5e2ca Maintenance: improves Websocket stability in CI 2020-04-24 08:56:17 +03:00
Mantas Masalskis
c59a627383 Fixes #304 - more stable calendar test 2020-04-24 08:55:59 +03:00
Mantas Masalskis
db9f0eb772 Fixes #2698 - Custom ordering of Macros impossible (ordered by time added). 2020-04-20 14:22:11 +02:00
Mantas Masalskis
5bcb650b54 Fixes #2598 - RTL writing system support in Public KB 2020-04-20 13:28:53 +02:00
Mantas Masalskis
880f1d5e3a Fixes #2644 - Including Knowledge Base Answers into Ticket Articles doesn't attach Attachments 2020-04-20 11:47:45 +02:00
Mantas Masalskis
3306de2d1f Maintenance: Resolve RSpec should_not deprecation warning. 2020-04-17 10:00:31 +02:00
Mantas Masalskis
57b1defd8d Refactoring: Set wait timeout to 0 for modal element checks to improve lookup performance. 2020-04-17 10:00:31 +02:00
Rolf Schmidt
afa6b9984a Fixes #3022 - Detect ServiceNow follow-ups 2020-04-17 09:24:57 +02:00
Thorsten Eckel
3f453c31e9 Updated rubocop(-* gems) to latest version (0.82.0). 2020-04-16 12:37:53 +02:00
Thorsten Eckel
562c842c8a Updated rubocop(-* gems) to latest version (0.81.0). 2020-04-14 15:26:50 +02:00
Mantas Masalskis
dd5ca52e18 Fixes #2941 - Zendesk import error 2020-04-08 08:23:58 +02:00
Martin Edenhofer
16b876e3e8 Closes #3004 - Enhance Check_MK integration to set ticket attributes (e. g. for SLAs) and improve code snippeds for integration 2020-04-02 13:28:18 +02:00
Mantas Masalskis
2843a92de0 PR #2979: Fixes #2977 Resize overview fields in RTL language 2020-04-01 16:22:53 +02:00
Martin Edenhofer
9b191a5541 Follow up for #2999 - Customer chat widget translation in Norwegian (no & nb) is missing 2020-04-01 13:33:26 +02:00
Martin Edenhofer
5e6769e6f5 Closes #2999 - Customer chat widget translation in Norwegian is missing 2020-04-01 06:03:33 +02:00
Mantas Masalskis
c30796aaca PR #2965 Hebrew translation added to chat widget. Thanks to @YosefAdPro ❤️ 2020-03-26 08:37:43 +01:00
Rolf Schmidt
58e18b4f27 Follow up - 13ddd3af38 - Fixed issue #2981 - OTRS migration priority color wrong for 3 normal. 2020-03-25 13:11:59 +01:00
Rolf Schmidt
39e6dbe05a Fixes #2640 - Signup view broken after logout. 2020-03-25 11:46:19 +01:00
Rolf Schmidt
13ddd3af38 Fixed issue #2981 - OTRS migration priority color wrong for 3 normal. 2020-03-24 18:54:45 +01:00
Rolf Schmidt
1ab179f22f Fixed issue #2923 - Zammad should not inform himself. 2020-03-24 17:15:34 +01:00
Mantas Masalskis
92f7d9307c Fixes #2982 - Trigger with current_user.id as precondition is executed correctly 2020-03-24 16:40:53 +01:00
Rolf Schmidt
eabc924230 Fixed issue #2971 - Mails with voicemails attached not being added (#<ActiveRecord::ValueTooLong: PG::StringDataRightTruncation: ERROR: value too long for type character varying(2500) (RuntimeError)). 2020-03-23 00:38:28 +01:00
Thorsten Eckel
0004c72624 Refactoring: Improved error logging
- Remove unnecessary "ERROR" prefix
- Log missing ES index as WARN instead of INFO
- Log actual JSON ES payload in cases of an error (for e.g. manual cURL replaying) if possible
2020-03-20 14:01:58 +01:00
Martin Edenhofer
16fec3d888 Fixed issue #2976 - Not possible to copy inline images text from article to article (copy text and image image - via clipboard ctrl+c/ctrl+v). 2020-03-20 14:01:06 +01:00
Thorsten Eckel
1aeb0a9ba5 Performance: Parallelize Session.jobs if ENV 'ZAMMAD_SESSION_JOBS_CONCURRENT' is provided with number of dedicated worker node processes to spawn. 2020-03-20 06:11:50 +01:00
Martin Edenhofer
1061803fba Updated rails to 5.2.4.2 (CVE-2020-5267) and json (CVE-2020-10663). 2020-03-19 23:19:19 +01:00
Ryan Lue
becbdb1baa Refactoring: Replaced home-rolled authorization logic in Controllers with Pundit. 2020-03-19 10:39:51 +01:00
Martin Edenhofer
706e51d27b Maintenance: Browsers get slower and so is our CI browser test stage. Added necessary sleep-s to make it more reliable. 2020-03-19 09:17:49 +01:00
Thorsten Eckel
33a20f2cf2 Follow up - af10e5d1d2 - Fixes #535: Send Trigger and Scheduler Notification Email/SMS to single user. Job/Trigger#perform notification.* recipient User Assets are not resolved. 2020-03-18 18:25:24 +01:00
Thorsten Eckel
bf874d77c6 Enhancement: Add support for optional Sequencer Unit attributes. 2020-03-18 10:56:37 +01:00
Mantas Masalskis
e865826810 Maintenance: Updated Ruby dependency to 2.6.5. 2020-03-18 09:09:12 +01:00
Rolf Schmidt
af10e5d1d2 Fixes #535: Send Trigger and Scheduler Notification Email/SMS to single user. 2020-03-17 08:52:57 +01:00
Mantas Masalskis
b644a571fb Fixes #2714 - Roles and Users selection in Overview administration UI ambiguous. 2020-03-12 14:48:52 +01:00
Rolf Schmidt
355b6d5f84 Performance: selector2sql for operator "contains one" of tags generates heavy CPU load on database server. 2020-03-12 14:45:10 +01:00
Felix Niklas
5bfe289811 ColumnSelect: hide group labels when filtering 2020-03-11 17:58:10 +01:00
Felix Niklas
eeadee2d5e Trigger: group and label the perform action inputs 2020-03-11 17:58:10 +01:00
Felix Niklas
a3e4691a72 ColumnSelect: add support for grouping
Similar to html’s select, options can be put into groups:

[
  { label: "Germany", group: [{ value: 0, name: "Bavaria" }, { value: 1, name: "Berlin"}],
  { label: "USA", group: [{ value: 0, name: "New York" }, { value: 1, name: "California"}]
]
2020-03-11 17:58:10 +01:00
Felix Niklas
136937b7db Generic Controller: forward modal size small and veryLarge 2020-03-11 17:58:10 +01:00
Felix Niklas
1df24fe354 Modal: only add scrollbar spacing when there is a scrollbar 2020-03-11 17:58:10 +01:00
Rolf Schmidt
664d433d3a Enhancement: Increased read timeout for SearchIndexBackend and changed total timeout passed to UserAgent to not overwrite (lower) open- or read timeouts for handling larger payloads. 2020-03-11 16:45:39 +01:00
Thorsten Eckel
dd96c57f48 Follow up - 0798e7d47e - moved from circle ci to github actions. Fixed bug: GITHUB_ACTOR is the user initiating the commit not the repository owner. Applied workaround to extract the repository owner from the GitHub Actions GITHUB_REPOSITORY ENV instead because there is no dedicated ENV for that. 2020-03-11 09:44:26 +01:00
Thorsten Eckel
51ce176c2d Follow up - 0798e7d47e - moved from circle ci to github actions. Fixed bug: Can't use GitHub repository secret as GitHub Actions ENV for git checkout command. Migrated to given GITHUB_ACTOR GitHub Action ENV and aliased it to have the possibility to change it in the corresponding workflow YAML (e.g. for testing purposes). There is a workaround needed because aliasing an ENV is not possible. 2020-03-11 09:18:44 +01:00
Thorsten Eckel
bb7950255e Follow up - bca16dee16 - Enhancement: Provide unique error code for technical errors to make it easy to find them in the logs.
- Show all error messages if `current_user` has `admin` permission(s) right away.
- Pass messages of `ActionController::RoutingError`, `ActiveRecord::RecordNotFound`, `Exceptions::UnprocessableEntity` and `Exceptions::NotAuthorized` exceptions to user.
- Fix regression: 'Not authorized' errors lack of cause.
- Remove diverged behavior for different environments.
2020-03-10 19:18:03 +01:00
André Bauer
584680e7e4 Follow up - 0798e7d47e - moved from circle ci to github actions. Extract REPO_USER to GitHub secret to make it reusable in Zammad Docker Omnibus and Compose repository. 2020-03-06 14:12:06 +01:00
Thorsten Eckel
231a7aaf65 Follow up - 0798e7d47e - moved from circle ci to github actions. (Re-)enable rubocop. 2020-03-06 09:54:05 +01:00
Mantas Masalskis
3c73022272 Follow up for #2713 - Content Security Policy allows embedded content from Youtube and Vimeo. 2020-03-06 09:27:42 +01:00
Alex S
77e096e211 Pull Request #2940 - fixes typo in IntegrationClearBit
Thanks to @sabatale ❤️
2020-03-06 09:34:41 +02:00
Martin Edenhofer
e08f4d180c Fixed issue# 2957 - Inline images are note shown on split or forward 2020-03-06 07:56:58 +01:00
Thorsten Eckel
312820379b Follow up - 0798e7d47e - moved from circle ci to github actions. Add ShellCheck disable for externally provided ENV DOCKER_IMAGES. 2020-03-05 19:49:58 +01:00
Thorsten Eckel
ea1bff6c54 Follow up - 0798e7d47e - moved from circle ci to github actions. Migrated CircleCI tests to GitHub Actions for testing Pull Requests. 2020-03-05 19:43:50 +01:00
Thorsten Eckel
99cc3c4b22 Follow up - 0798e7d47e - moved from circle ci to github actions. Fixed bug: Wrong tags for zammad-docker omnibus image. 2020-03-05 12:56:53 +01:00
Thorsten Eckel
1ab4518775 Follow up - 0798e7d47e - moved from circle ci to github actions. Fixed syntax errors. Thanks ShellCheck! 2020-03-05 12:05:28 +01:00
Thorsten Eckel
2440dc6a00 Follow up - 0798e7d47e - moved from circle ci to github actions. Used ENV GITHUB_REPOSITORY collides with GitHub actions ENV and gets overwritten. Ref: https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables 2020-03-05 11:55:11 +01:00
Thorsten Eckel
48f639ab52 Follow up - 0798e7d47e - moved from circle ci to github actions. Can't use tags in shallow clone of repository. Ref: https://github.com/actions/checkout#fetch-all-history-for-all-tags-and-branches 2020-03-05 11:43:50 +01:00
André Bauer
0798e7d47e moved from circle ci to github actions
Signed-off-by: André Bauer <monotek23@gmail.com>
2020-03-04 21:23:02 +01:00
Rolf Schmidt
e61fa6795e Enhancement: Reduce shown messages after password reset/verify to one single version. 2020-03-04 10:00:55 +01:00
Rolf Schmidt
bca16dee16 Enhancement: Provide unique error code for technical errors to make it easy to find them in the logs. 2020-03-04 10:00:55 +01:00
Thorsten Eckel
b0c4c0cb3f Enhancement: Reflect current_user in ticket_customer lookup. 2020-03-04 10:00:55 +01:00
Rolf Schmidt
1cbb139476 Enhancement: Made CORS Preflight Check specification conform. 2020-03-04 10:00:55 +01:00
Thorsten Eckel
49b0ca4d58 Maintenance: Add Content Security Policy. 2020-03-04 10:00:55 +01:00
Rolf Schmidt
33498bac91 Feature: Chat origin whitelisting functionality. 2020-03-04 10:00:55 +01:00
Thorsten Eckel
eb830a2e15 Enhancement: Improve handling of Ticket number in frontend. 2020-03-04 10:00:55 +01:00
Thorsten Eckel
e78af42b3c Enhancement: Limit data send back to the browser for valid session. 2020-03-04 10:00:55 +01:00
Rolf Schmidt
7a78645e3b Enhancement: Harden default reverse proxy configuration to not send it's name and version number to the client. 2020-03-04 10:00:55 +01:00
Rolf Schmidt
deaac071cb Enhancement: Requests should never be cached by the browser. 2020-03-04 10:00:55 +01:00
Rolf Schmidt
2236cd0367 Enhancement: Ensure added HTML is converted back to its original format when identifying signature. 2020-03-04 10:00:55 +01:00
Martin Edenhofer
f4084fb011 Prepared for 3.4.x. 2020-03-03 15:24:32 +01:00
Rolf Schmidt
2b9f5c85c6 Fix. 2020-03-03 10:39:16 +01:00
Rolf Schmidt
eafb6dd236 Follow up - ed8a152f28 - Fixes #2911 - Performance: Improved touching assets of users, organizations and tickets. Rollback of indexed data behavior change (structure instead of name). 2020-03-02 15:25:33 +01:00
Thorsten Eckel
5b262c75b0 Follow up - ed8a152f28 - Fixes #2911 - Performance: Improved touching assets of users, organizations and tickets. Touching of Organization causes endless SearchIndexJob creation / Organization touch loop. 2020-03-02 10:33:37 +01:00
Thorsten Eckel
5bacbadf2f Bumped puma to 3.12.4 (CVE-2020-5247). 2020-03-01 15:16:07 +01:00
Thorsten Eckel
a6285f6566 Refactoring: Extract ActiveJob logic into concern to prevent/avoid fat class. 2020-02-27 16:41:35 +01:00
Thorsten Eckel
754231cfbf Bumped nokogiri to 1.10.8 (CVE-2020-7595). 2020-02-25 08:15:33 +01:00
Thorsten Eckel
be1898120f Follow up: Removed RSpec tests that got added by accident. 2020-02-20 17:46:24 +01:00
Thorsten Eckel
082cbed915 Follow up: Applied required rubocop changes to newly introduced specs. 2020-02-20 14:56:52 +01:00
Martin Edenhofer
22911f8616 Refactoring: Improve performance by pushing Ticket create screen information on demand to the client instead of checking every X seconds via the Scheduler. 2020-02-20 14:34:03 +01:00
Rolf Schmidt
ec23915bd0 Fixes #1553: Calendar as filter condition for Trigger/Automatization. 2020-02-20 13:34:16 +01:00
Thorsten Eckel
ddd49271e2 Refactoring: Migrated Capybara system tests to folder structure that matches JS app URL path. 2020-02-20 13:15:03 +01:00
Mantas Masalskis
82149f463a Fixes #2920 - Link-Template attributes within Organizations and user cause Organization and user creation to fail within UI 2020-02-20 09:44:50 +01:00
Mantas Masalskis
0a70711695 Fixes #2713 - Knowledge Base does't support animated GIFs and embedded Video (Youtube/Vimeo) content. 2020-02-19 18:07:52 +01:00
Mantas Masalskis
695d05689b Fixes #2810 - Attachments of Knowledge Base Answers don't get added to Elasticsearch 2020-02-19 17:41:25 +01:00
Mantas Masalskis
6c60021196 Fixes #2641 - Can't use HEX/HSL color value in KB Admin color picker. 2020-02-19 16:02:28 +01:00
Martin Edenhofer
bcce8c51f9 Fixed issue #2904 - Error when changing passwords for users without email. 2020-02-19 15:57:32 +01:00
Mantas Masalskis
116606416c Fixes #2918 - Editing of KB article not possible if long text is pasted. 2020-02-19 12:56:27 +01:00
Rolf Schmidt
047a3aba87 Enhancement: Ticket#number should be read only for API requests. 2020-02-19 12:54:06 +01:00
Mantas Masalskis
c7ab3e1fe2 Github PR #2935 - Fixes #2781 - Users can't remove their Sessions from Device list. 2020-02-19 12:43:58 +01:00
Mantas Masalskis
55db5688f1 Fixes #2890 - Auto-Complete on Typing for Tags is hidden behind Pop-Up Windows. 2020-02-19 10:25:00 +01:00
Mantas Masalskis
d7ca9d7484 Fixes #2505 - Wrong language on login screen. 2020-02-19 10:15:11 +01:00
Mantas Masalskis
95e5a46d4b Github PR #2934 - Fixes #2764 - Removing last condition or action in Trigger/Automatization/Postmaster breaks dialogues. 2020-02-19 09:56:55 +01:00
Thorsten Eckel
a976b9fb43 Maintenance: Updated rubocop(-* gems) to latest version (0.80.0). 2020-02-18 20:51:31 +01:00
Rolf Schmidt
ed8a152f28 Fixes #2911 - Performance: Improved touching assets of users, organizations and tickets. 2020-02-18 15:49:52 +01:00
Mantas Masalskis
a01a2f3c91 Fixes #2628: KB link to public interface loses HTTP type. 2020-02-18 15:36:47 +01:00
Ryan Lue
212e07e322 Refactoring: developer_mode should not be active in test environment
The `rails zammad:bootstrap:{init,reset}` rake tasks
worked for RAILS_ENV=development (default), but not RAILS_ENV=test.

The problem was that the DB seed data would set

    Setting.get('developer_mode')  # false

but then `contrib/auto_wizard_test.json` would re-set it to `true`.
This caused some tests to fail (e.g., spec/models/channel/driver/sms)
where application behavior varied based on the "developer_mode" setting.

This commit ensures that "developer_mode" is only set to `true`
in development by setting it dynamically during DB seeding,
and leaving it alone during the auto-wizard.
2020-02-18 15:06:02 +01:00
Mantas Masalskis
52baaea5a8 Fixes #2782 - Trigger/Automatization infos visible for Customer Ticket detail view. 2020-02-18 11:28:44 +01:00
Thorsten Eckel
03164b26a7 Fixes issue #2937: Bumped omniauth-github to 1.4.0 (Please use the Authorization HTTP header instead as using the access_token query parameter is deprecated and will be removed July 1st, 2020.). 2020-02-18 11:19:04 +01:00
Mantas Masalskis
f15226301a Refactoring: Migrate maintenance message browser test to Capybara and make it more robust. 2020-02-18 11:17:49 +01:00
Ryan Lue
355b54654d Follow up: Fix CI failure introduced in 0b8b6148b
The previous commit introduced a CI failure which was caused by a test depending on the execution time. The Twitter channel implementation ignores tweets older than 15 days.
Therefore we need to travel to the time when the VCR snapshot was recorded to fix it.
2020-02-17 17:42:12 +01:00
Ryan Lue
0b8b6148b7 Improve Twitter-related factories
The Channel & ExternalCredential factories used for Twitter-related
tests originally contained attributes that did not reflect those created
during actual use (e.g., the Channel#options hash does not store a
consumer key or secret in practice, but the factory for it did).

This commit makes tests more realistic by amending the factories so that
the attributes/data they hold matches the format found in actual use.
2020-02-17 11:37:36 +01:00
Mantas Masalskis
1579bebad4 Maintenance: Send checked CTI checkboxes AJAX calls via queue to avoid race conditions in updating the UI. 2020-02-14 16:08:45 +01:00
Thorsten Eckel
4b6839cd82 Refactoring: Error request specs are not in RSpec format. 2020-02-12 15:50:18 +01:00
Martin Edenhofer
ddb4bb5150 Fixed issue #2924 - Unable to paste from clipboard in note field in ticket zoom. 2020-02-10 09:06:39 +01:00
Martin Edenhofer
343415d6e8 Maintenance: Migrate email tests to new host. 2020-02-05 13:50:49 +01:00
Ryan Lue
e42d62d1c6 Fix broken references to Zammad documentation pages
Recent changes to the file structure of Zammad's official
documentation[0] (commit 2717255) have broken some web links in the
Zammad application.

This commit fixes those broken links.

[0]: 271725591c
2020-02-05 16:54:39 +08:00
Thorsten Eckel
f4ef3636ff Maintenance: Wait for modal to be ready/disappeared in Twitter system test to make it more stable. 2020-02-02 16:45:25 +01:00
Thorsten Eckel
201027d23c Maintenance: Update selenium to latest compatible version. Current issue with latest: Chrome crashes in chat test when reloading page. 2020-02-02 16:40:13 +01:00
Thorsten Eckel
fbbc50f24a Maintenance: Invalid email error message is not expressive. 2020-01-31 22:40:55 +01:00
Thorsten Eckel
090fcb5408 Maintenance: Make browser tests more robust by waiting for search to stop loading. 2020-01-30 08:13:22 +01:00
Thorsten Eckel
208c0b0211 Maintenance: Processing of checked CTI Log entries via Scheduler and pushing of new information to the JS App takes longer than 6 seconds which fails CI browser test. 2020-01-30 08:13:22 +01:00
Mantas Masalskis
85c03460aa Pull Request #2905 - broken px handling in no-jQuery version of Chat. Thanks to @ma-jahn ❤️ 2020-01-29 17:01:38 +01:00
Rolf Schmidt
a7bd3f7135 Fixed issue #2910 - Ticket split does reference article inline images instead of copying them 2020-01-28 13:48:21 +01:00
Mantas Masalskis
6692869dd8 Fixes issue #2894 - Emails with binary body (attachment as body) get handled as if they were text messages which breaks the attachment. 2020-01-28 10:42:40 +01:00
Mantas Masalskis
264853dcbe Pull Request #2908 - Fix storage log message typo. Thanks to @saz ❤️
https://github.com/zammad/zammad/pull/2908
2020-01-28 01:44:03 +01:00
Mantas Masalskis
ca6f5faf12 Fixes issue #2837 - ?? and :: Ticket article composing shortcuts added to Keyboard Shortcuts helper. 2020-01-27 10:32:00 +01:00
Mantas Masalskis
7fab92d074 Fixes issue #2169 - Time format always english if generated from system. 2020-01-27 10:28:17 +01:00
Mantas Masalskis
b294708ec0 Fixes issue #2906 - Missing Content-Type header of parsed email fails processing. 2020-01-27 10:07:55 +01:00
Thorsten Eckel
fa2ff2138b Follow up - 4c9919a23e - Scheduler fails to execute ActiveJobLock cleanup job before application restart and deactivates it. 2020-01-23 12:45:58 +01:00
Martin Edenhofer
dd54f8a787 Improved perforamnce of global search (reduced throttle of search queries, ony start queries if query has changed). 2020-01-22 09:25:54 +01:00
Denny Korsukéwitz
ab6634bcfe Issue #2897 - StatsTicketChannelDistribution - set channel.overal_percentage to 0 if the calculation produces no result. 2020-01-21 09:09:34 +01:00
Thorsten Eckel
965218ac8c Feature #2888: Added Chat JS callback hooks: onReady, onCloseAnimationEnd, onError, onOpenAnimationEnd, onConnectionReestablished, onSessionClosed, onConnectionEstablished, onCssLoaded. Thanks to @ma-jahn ❤️ 2020-01-18 17:51:20 +01:00
Rolf Schmidt
9472af70f1 Fixed issue #2893 - Granted field access gets redacted by a later (alphabetically) permission. 2020-01-18 12:01:51 +01:00
Rolf Schmidt
f9a26d7254 Performance: User preference store YAML parsing for notification settings is slow. 2020-01-17 17:13:30 +01:00
Rolf Schmidt
b468134e93 Performance: Existing Notification type History lookup should be done on DB level. 2020-01-17 17:08:43 +01:00
Rolf Schmidt
22a25f266d Performance: Cache DB transaction locking of Karma::ActivityLog.add. 2020-01-17 14:49:42 +01:00
Mantas Masalskis
e0dc13949a Fixes #2895 - moving from Manage Knowledge base view to another Manage view requires multiple clicks 2020-01-16 10:42:36 +01:00
Thorsten Eckel
44806e79e5 Fixes #2881: Chat button is no longer optional in no jQuery version. Thanks to @ma-jahn ❤️ 2020-01-13 10:58:16 +01:00
Thorsten Eckel
3bd3eeb163 Add apple-touch-icon to HTML head for improved homescreen bookmark icon. Thanks to @xf- ❤️ 2020-01-13 09:49:06 +01:00
Mantas Masalskis
ceb9bf6e14 Fixes #2406 - Forwarding: Attachment of original content gets removed starting from the second forward without reloading per ticket 2020-01-10 13:01:33 +01:00
Thorsten Eckel
1772e9f1e4 Maintenance: Error message about existing user with same email address is not expressive. 2020-01-10 11:43:36 +01:00
Thorsten Eckel
87be5318c3 Fixed bug: ActiveJobLock is no actual ApplicationModel and don't need to inherit Model logic and capabilities. 2020-01-08 15:57:17 +01:00
Thorsten Eckel
3d69f66898 Maintenance: Make OmniAuth print it's log to the application log. 2020-01-08 12:06:21 +01:00
Martin Edenhofer
a1f2346a24 Fixed issue #2860 - "Enter answer" textual change 2019-12-23 12:11:08 +01:00
Mantas Masalskis
14dfdb4db9 Allows to define custom class name in CoffeeScript when frontend and backend class names don't match 2019-12-23 11:10:16 +01:00
Mantas Masalskis
ebe4746ace Improves stability of a failing test in FF 1 2019-12-23 10:37:47 +01:00
Martin Edenhofer
34704cd2ba Fixed issue #2873 - Tweet which is containing * will not send out, Twitter::Error::Unauthorized: Could not authenticate you. 2019-12-23 08:26:43 +01:00
Thorsten Eckel
8696c62de8 Updated rake to 2.0.8 (CVE-2019-16782) and rails to 5.2.4.1. 2019-12-20 16:47:00 +01:00
Thorsten Eckel
84c1d21279 Closes #2869 - Added Swedish chat translation - thanks to @pitah81 ❤️ 2019-12-18 17:12:20 +01:00
Thorsten Eckel
e9d416582b Fixed typo in translation of french user_invite email template - thanks to @Pelt10 ! 2019-12-17 17:39:02 +01:00
Ryan Lue
25cd644951 Fixes #2715 - Twitter status URLs are broken
This commit is a complement of its parent:
the parent fixes broken links to Twitter DMs,
while this one fixes broken links to Twitter statuses.

When importing tweets (articles of type "twitter status"),
Zammad generates a source link URL using the following format:

    https://twitter.com/statuses/:id

and then stores that URL under `article.preferences[:links]`.

This URL template worked until as recently as 2017[0],
but currently fails for users actively logged in to Twitter.
Now, the correct URL template appears to be

    https://twitter.com/:user_id/status/:id

where `:user_id` is not strict, and may be any word (\w+) <= 20 chars.
Try it yourself:

    $ curl https://twitter.com/elonmusk/status/1069382411899817990
    <html><body>You are being <a href="https://twitter.com/medenhofer/status/1069382411899817990">redirected</a>.</body></html>

In this commit, we replace `:user_id` with a single underscore (`_`).
This behavior is not officially documented anywhere (as far as I know),
but it works (for now).

This commit also extends the previous commit's DB migration/bg job
to rectify existing, broken tweet URLs stored in the database.
For performance purposes, this migration is performed in the background
and limited to the latest 10,000 Twitter articles.

[0]: https://stackoverflow.com/questions/41786123
GitHub: https://github.com/zammad/zammad/issues/2715
2019-12-17 16:03:05 +01:00
Ryan Lue
147cbc29b8 Fixes #2715 - Twitter DM URLs are broken
When importing Twitter DMs (articles of type "twitter direct-message"),
Zammad generates a source link URL of an incorrect format:

    https://twitter.com/statuses/:id

This format is for statuses (or "tweets").
The appropriate URL scheme for direct messages is:

    https://twitter.com/messages/:recipient_id-:current_user_id

This commit adds conditional logic for setting Twitter link URLs
based on message type.
It also provides a DB migration to rectify existing, broken DM URLs.
For performance purposes, this migration is performed in the background
and limited to the latest 10,000 DMs.

GitHub: https://github.com/zammad/zammad/issues/2715
2019-12-17 16:03:05 +01:00
Ryan Lue
9409d17de6 Request-spec controller actions for Twitter API webhook
This is the first of many commits
to add missing test coverage for Zammad's Twitter functionality.
The testing process begins from the broadest scope possible,
and will proceed in future commits
to more granular, fine-grained behaviors.

(Request specs provide integration testing at the controller level,
and webhook controller actions are the main point of entry
for incoming Twitter API functionality.)
2019-12-17 11:59:20 +01:00
Ryan Lue
889dd92aea Maintenance: Migrate Twitter browser test to RSpec
This commit migrates `test/integration/twitter_browser_test.rb` to RSpec
as directly as possible.
2019-12-17 11:59:20 +01:00
Ryan Lue
65d1ba133d Refactor .csv_import 2019-12-17 10:37:13 +01:00
Ryan Lue
7a7ab6a95a Follow up - 045902351 - fixes #2754
045902351 adds a `rescue` clause
to fix a bug in which IMAP parsing errors
cause the entire email import process to fail.[0]

This bugfix contains an error:
we're still not sure why,
but the `next` inside the `rescue` clause
does not act like the `next`s outside of it
(execution of the containing `.each` block continues,
even after passing `next`).

This commit puts `next` in the right place,
so that the method will skip processing of the current message
and move onto the next one.

[0]: https://github.com/zammad/zammad/issues/2754
2019-12-17 09:47:15 +01:00
Thorsten Eckel
5f861c566d Added options for external database server
Database config file has allowed only localhost database server. If you
want to use a database on a different host, you need the ability to set
hostname and port
- for MySQL see:
"https://stackoverflow.com/questions/5872264/correct-mysql-configuration-for-ruby-on-rails-database-yml-file"
- for PostgreSQL see:
"https://gist.github.com/jwo/4512764#file-postgres-database-yml"
2019-12-16 15:17:08 +01:00
Thorsten Eckel
aa6c647187 Bumped puma to 13.12.2 (CVE-2019-16770). 2019-12-06 10:15:37 +01:00
Thorsten Eckel
5ee0d0b31f Follow up - ff6b4256e1 - Fixes #2826: Call of private method #blank? on Twitter client instance blocks migration. 2019-12-05 15:05:46 +01:00
Thorsten Eckel
2317537f0e Added CentOS 8 support for packager.io 2019-12-05 08:17:51 +01:00
Thorsten Eckel
4c9919a23e ActiveJobLock enhancements (cleanup and Delayed::Job destroy sync) 2019-12-04 15:29:43 +01:00
Thorsten Eckel
ff6b4256e1 Fixes #2826 - Invalid stored Twitter credentials block migration. 2019-12-04 11:30:26 +01:00
Martin Edenhofer
3921820ae8 Fixes #2824 - Elasticsearch 7.5.x support. 2019-12-04 10:52:54 +01:00
Martin Edenhofer
209951b19b Fixed issue #2823 - Unable to open notifications (if chat is enabled). 2019-12-03 12:49:41 +01:00
Martin Edenhofer
1340d26501 Prepared for 3.3.x. 2019-12-03 08:07:19 +01:00
Martin Edenhofer
133b570fba Implemented feature to transfer chat sessions to another chat topic. 2019-12-03 07:29:02 +01:00
Martin Edenhofer
3c788ca426 Fixed browser unit test. 2019-12-02 14:42:35 +01:00
Thorsten Eckel
96d300b912 Maintenance: authentication_check Controller callback runs after CSRF token check which leads to failing POST/PUT, non-Session authenticated requests. 2019-12-02 14:17:57 +01:00
Thorsten Eckel
47778f2d2f Follow up - 2c8825b387 - ActiveJobLock lock update fails due to ActiveRecord::Deadlocked "Mysql2::Error: Deadlock found when trying to get lock; try restarting transaction" exception. 2019-11-29 16:48:21 +01:00
Martin Edenhofer
4e8cf209ca Performance: Observing every Overview of each Agent Session doesn't scale well on larger systems (60 Overviews per Agent). With this change only the last 5 used Overviews are checked on every iteration. A full check is still performed ever 60 seconds. This reduces the overall load. 2019-11-28 07:59:22 +01:00
Mantas Masalskis
f41aa097ce Fixes Javascript crash when plain text is pasted as html (e. g. a phone number without html tags) into rich text field. Follow up for #2645. 2019-11-27 14:40:30 +01:00
Marcel Herrguth
a9dd937968 Fixes #2400 - Local Elasticsearch is recognized as remote installation. 2019-11-27 10:23:05 +01:00
Martin Edenhofer
8c27cbb05e Fixed issue #2692 - ticket auto assignment is not working if only one excluded user is defined. 2019-11-26 16:22:04 +01:00
Martin Edenhofer
8996134214 Fixed issue #542 - Cant add new articles via Macro. 2019-11-26 11:40:23 +01:00
Ryan Lue
0459023514 Fixes issue #2754: Unparseable IMAP responses block email import from inbox
Some users experienced an error while fetching emails over IMAP (see
GitHub issue below for complete traceback). This error was caused by
certain unparseable character sequences in the responses Zammad received
from users' configured IMAP servers. The Zammad dev team was not able to
reproduce this issue when fetching identical emails from its own
servers.

Details remain unclear, but we have tracebacks from two distinct
occurrences of this issue, and the problematic strings followed the same
format:

  * "\"Jetzt"
  * "\"RE:"

This commit rescues the error in question, records details to the
application log, and allows IMAP fetch to proceed to the next message.
2019-11-25 09:02:10 +01:00
Martin Edenhofer
7225899cf9 Fixed issue #2813 - Useless display of delete icon below note. 2019-11-25 07:59:48 +01:00
Thorsten Eckel
3d00f4d25b Follow up - 2c8825b387 - ActiveJobLock PG::TRSerializationFailure exception is actually ActiveRecord::SerializationFailure. 2019-11-23 10:44:23 +01:00
Thorsten Eckel
5c6bc72d1b Follow up - 7e4b46b65c - avoid possible spam. 2019-11-21 17:39:24 +01:00
Jens Pfeifer
7e4b46b65c Refactoring: Added consistent email address validation to backend. 2019-11-21 16:49:14 +01:00
Martin Edenhofer
2beb1b4506 Fixed issue #2818 - TimeAccounting modal dialog input not focused. 2019-11-21 14:40:59 +01:00
Jens Pfeifer
9478c49fcd Fixed typos and name generation in user unit test. 2019-11-21 14:36:42 +01:00
Mantas Masalskis
377f8995a9 Enhancement: Allow selection of multiple values in Trigger custom select attribute filter. Closes #1559. 2019-11-21 14:18:23 +01:00
Martin Edenhofer
e9adb2adc2 Fixes issue #2291 - Chat enhancement: Option to set Agent display name. 2019-11-21 08:47:05 +01:00
Mantas Masalskis
149a086aab Fixes issue #2274 - Datepicker in bulk action not usable in bulk action if ticket list is longer the one page. 2019-11-20 15:53:24 +01:00
Mantas Masalskis
265d60a65f Fixes #2645 - Insertion of inline pictures does not work, if you copy an image in your Browser 2019-11-20 12:34:41 +01:00
Ryan Lue
a5d4cd80b2 Maintenance: Enhance VCR helper with better failure messages
1ebddff95 added an RSpec metadata flag to simplify the use of VCR:

    describe 'super cool feature', :use_vcr do
      it 'totally works' { ... }
    end

Under the hood, this option automatically generates filenames
for the VCR cassettes it uses on each example it's applied to.
These filenames are based on the example descriptions;
for the sample block above, the resulting filename would be

    super_cool_feature_totally_works.yml

This introduces the risk of test regressions
that could be extremely confusing and hard to debug,
simply because someone changed the example description.

This commit injects custom error messages into RSpec
to elucidate this problem and avoid needless debugging.

=== Design challenges

This error message injection uses Ruby's Module#prepend
to monkey-patch methods defined in RSpec,
meaning that the changes are coupled to RSpec's implementation.
In short, if the implementation changes,
this custom error messaging could break.

Specifically, there are two different modes of failure in RSpec,
and the custom error was thus injected in two corresponding places:

* `.notify_failure` for normal test failure
  (i.e., when an expectation is not met); and
* `.handle_matcher` for exceptions raised during a test.
2019-11-20 10:37:24 +01:00
Thorsten Eckel
9ce331be14 Follow up - f35cd7fbe9 - Race condition in (wrong) test fails CI. 2019-11-19 15:49:53 +01:00
Thorsten Eckel
2c8825b387 Follow up - 5ca41c8389 - ActiveJobLock lock update fails due to PG::TRSerializationFailure, 'Could not serialize access due to concurrent update' exception
It indicates that the UPDATE or DELETE statement was queued behind another UPDATE/DELETE statement on the same row. That other statement finished, and due to the guarantees of the Serializable isolation level, the statement in this session was canceled.

The PostgreSQL states that the transaction should automatically retry the UPDATE or DELETE when seeing this error message, whilst taking the updated state of the row into account.

See 'Serializable Isolation Level' section of https://www.postgresql.org/docs/10/transaction-iso.html
2019-11-19 15:21:50 +01:00
Thorsten Eckel
7ca577ab82 Maintenance: UserAgent integration test fails because previously non but now existing host URL 'existing.host'. 2019-11-19 15:20:47 +01:00
Thorsten Eckel
4cc3ed640b Follow up - 848175a290 - Can't access session information for User ObjectManager::Attribute in fields URL template. 2019-11-19 10:17:06 +01:00
Martin Edenhofer
94fd8c2957 Fixed issue #2809 - Array values (e.g. several states) nuke reporting profiles. 2019-11-19 09:03:46 +01:00
Mantas Masalskis
c448587eda CI maintenance for (not only) tests that fail right after midnight in user's timezone 2019-11-18 20:20:42 +01:00
Thorsten Eckel
20c7cf9502 Performance: Don't check record associations if record is already present in assets structure. 2019-11-18 20:19:35 +01:00
Thorsten Eckel
cccec58c2e Fixed bug: OTRS import - User queue/group permissions are not transfered depending on export data type. 2019-11-18 16:49:22 +01:00
Martin Edenhofer
2b92d28b89 Fixed issue #2808 - Unprocessable mail if follow up search is enabled for attachments with contains invalid charsets (postmaster_follow_up_search_in with attachment). 2019-11-18 16:16:49 +01:00
Martin Edenhofer
3b63fbeca0 Maintenance: Updated nokogiri gem - CVE-2019-13117 2019-11-18 14:23:52 +01:00
Ryan Lue
1ebddff95f Refactoring: Automatic RSpec VCR cassette name helper
This commit was prepared to support upcoming additions to the test suite
(specifically, better coverage for existing Twitter functionality).

These upcoming changes will depend heavily on VCR.[0]
(VCR is a Ruby gem that makes it easier to write and run tests
that call out to external services over HTTP
by "recording" HTTP transactions to a YAML file
and "replaying" them later.)

VCR is widely-used (4600 GitHub stars), but its API is a little clumsy--
You have to manually specify the name of a "cassette" file every time:

    it 'does something' do
      VCR.use_cassette('path/to/cassette') do
        ...
      end
    end

This commit adds an RSpec metadata config option
as a shorthand for the syntax above:

    it 'does something', :use_vcr do
      ...
    end

This config option automatically generates a cassette filename
based on the description of the example it's applied to.

=== Analysis of alternative approaches

Ideally, these auto-generated cassette filenames should be unique:
if filenames collide, multiple examples will share the same cassette.

A first attempt generated names based on `example.full_description`,
but that led to errors:

    Errno::ENAMETOOLONG:
      File name too long @ rb_sysopen - /opt/zammad/test/data/vcr_cassettes/models/ticket/article/ticket_article_callbacks_observers_async_transactions_-_auto-setting_of_outgoing_twitter_article_attributes_via_bg_jobs_when_the_original_channel_specified_in_ticket_preferences_was_deleted_but_a_new_one_with_the_same_screen_name_exists_sets_appropriate_status_attributes_on_the_new_channel.yml

Another idea was to use MD5 digests of the above,
but in fact both of these approaches share another problem:
even minor changes to the description could break tests
(unless the committer remembers to rename the cassette file to match):
an altered description means VCR will record a new cassette file
instead of replaying from the original.

(Normally, this would only slow down the test instead of breaking it,
but sometimes we modify tests and cassettes after recording them
to hide sensitive data like API keys or login credentials.)

The approach taken by this commit was to use partial descriptions,
combining the parent `describe`/`context` label with the `it` label.
This does not guarantee uniqueness--
even in the present refactoring, it produced a filename collision--
but it's a good middle ground.

[0]: https://relishapp.com/vcr/vcr/docs
2019-11-13 15:18:18 +01:00
Mantas Masalskis
6d684c74cf Fixes #2784 - new Knowledge Base modal in settings is removed properly when moving to another setting tab 2019-11-13 11:30:16 +01:00
Thorsten Eckel
5ca41c8389 Feature: Added centralized ActiveJob locking based on lock key. This prevents unnecessary executing/queuing of unique jobs multiple times. 2019-11-13 08:03:47 +01:00
Martin Edenhofer
8a5552c9f8 Fixes issue #2441 - Zammad ignores disabled Chat-Topics for agents. 2019-11-12 17:06:42 +01:00
Mantas Masalskis
d24a7c5584 Fixes #2777: Knowledge Base - Attachments not working for internal readers. 2019-11-12 15:08:00 +01:00
Ryan Lue
86a90d287c Fix issue #2460 - corrupted IDs on Twitter channels break Direct Message functionality
In some cases, editing a Twitter account via the admin panel
would cause new DMs to stop coming in. Why?

All Twitter usernames correspond to a numeric user ID
(see https://tweeterid.com/).
Zammad stores this ID on Twitter channels
(under `channel.options['user']['id']`)
and uses it to monitor incoming DMs.

Zammad was storing these user IDs to the DB as integers,
then passing those values to the frontend (JS) for account editing.
Some user IDs are longer than JavaScript's `Number.MAX_SAFE_INTEGER`,
and so got truncated on their way back to the update endpoint
(e.g., 984608854112718800 instead of 984608854112718848).

This commit enforces string storage of Twitter user IDs on new channels,
and includes a migration to verify and stringify IDs on existing ones.

Zammad Community: https://community.zammad.org/t/1799/34
GitHub: https://github.com/zammad/zammad/issues/2460
2019-11-12 14:58:02 +01:00
Mantas Masalskis
ea3522c7a2 Maintenance: Local history log consistency bugfix 2019-11-12 13:54:55 +01:00
Denny Korsukéwitz
f35cd7fbe9 Fixes #2687 - Article deletion for agents limited to 10 minutes after article creation. 2019-11-11 16:47:51 +01:00
Denny Korsukéwitz
a9dbe2d555 CSS Bug 2019-11-11 09:08:59 +01:00
Thorsten Eckel
1287e9968e Fixed bug: Regular Model list imports (e.g. Tickets) sequences fail import because of attribute that is not required and can't be provided. 2019-11-07 12:09:46 +01:00
Mantas Masalskis
022efe7921 Follow up - a883bbadb3 - UserAgent interface unification is reflected in tests 2019-11-06 11:57:08 +02:00
Mantas Masalskis
6c569e5085 Maintenance: Replaced not used list method by introducing keys method of App.LocalStorage to support deleting all keys for a certain user only. 2019-11-05 18:32:07 +01:00
Martin Edenhofer
70619f29ea Maintenance: Changed modal size of ldap wizard to get more readable information viewable. 2019-11-05 17:33:33 +01:00
Martin Edenhofer
d58233d0ce Fixed issue #2796 - Image/attachment preview is to small, need to download image and open it locally. 2019-11-05 15:46:13 +01:00
Mantas
0a5c3f4f8a Follow up - a883bbadb3 - UserAgent sends SearchIndexBackend DELETE request options as parameters. Fixed by unifying UserAgent interface to support parameters as other request methods do. 2019-11-05 15:40:58 +01:00
Mantas Masalskis
6e6285aedd Maintenance: Race condition after Knowledge Base creation modifies configuration and pushed it to frontend fails CI. 2019-11-05 15:40:01 +01:00
Martin Edenhofer
232c7b9bb4 Fixed issue #2797 - Allow direct or extention numbers in answeringNumber of CTI API. 2019-11-05 15:32:49 +01:00
MrGeneration
cc1268a8b6 Fixes #2508: Change into backup directory
This fix ensures that the backup-script will change into the backup directory before running.

Users backup via root user will no longer get a warning, that the script couldn't change into '/root'
2019-10-30 17:05:58 +01:00
Ryan Lue
54d590491e Fixes issue #2608 - missing default permission ("admin.trigger")
Zammad's permission model supports fine-grained permissions
so that, e.g, a user may be allowed to modify triggers but not channels.
Permissions are assigned to roles, which are then assigned to users.

A set of default permissions is provided in `db/seeds/permissions.rb`;
these are the permissions that appear in the admin interface
when creating a new role and selecting which permissions it grants.

Somehow, we forgot to include the "admin.trigger" permission in this
default set, and no one noticed until earlier this year.

Zammad Community: https://community.zammad.org/t/2584
2019-10-30 14:28:21 +01:00
Martin Edenhofer
f204b89fe3 Fixes issue #2785 - Reporting does not return all tickets when using values with that "divide" values (e. g. some_value).
* Fixed SearchIndexBackend.selectors() in case if value if condition containing e. g. ::, _ or spaces.
* Moved to standard elasticsearch field naming .keyword to save raw strings (in previous we used .raw which in not common)
* Reindexing of elasticsearch is needed (zammad run rake searchindex:rebuild)
2019-10-30 08:45:31 +01:00
Thorsten Eckel
a343fb4f7a Maintenance: Enabled support for Debian 10 buster package building on packager.io. 2019-10-29 19:34:35 +01:00
Thorsten Eckel
def0525c6d Maintenance: Reduce memory consumption by setting MALLOC_ARENA_MAX.
The Zammad environment variable `MALLOC_ARENA_MAX` will now default to `2`. This environment variable was previously unset.

The goal of setting this value is to decrease memory usage for the majority of Zammad installations - especially the Worker and Puma processes. To understand more about the relationship between this value and memory please see the following external resources:

- https://www.speedshop.co/2017/12/04/malloc-doubles-ruby-memory.html
- https://www.mikeperham.com/2018/04/25/taming-rails-memory-bloat/

Heroku also maintains a [documentation on tuning the memory behavior of glibc by setting this environment variable](https://devcenter.heroku.com/articles/tuning-glibc-memory-behavior).

The default as specified by the [linux man page](http://man7.org/linux/man-pages/man3/mallopt.3.html) is 8 times the number of (virtual) cores on the system.
2019-10-29 14:49:03 +01:00
Mantas Masalskis
d4afb0e867 Fixes issue #2789: not possible to search or link KB-answer within ticket. 2019-10-28 16:38:14 +01:00
Mantas
f17c181427 Fixed bug: ExcelSheet timezone conversion doesn't take DST into account. 2019-10-28 14:20:07 +01:00
Mantas
d2912ff25f Maintenance: Disable Rails default caching behavior because in memory cache leads to diverging cache state in multiple processes and no-cache is usually not a desired behavior. 2019-10-28 11:22:19 +01:00
Jens Pfeifer
67d3f35b05 Refactoring: Resolved vendor/lib/* path by moving OmniAuth custom authentication backends to lib/omniauth/. 2019-10-28 08:51:22 +01:00
Thorsten Eckel
8d45328d32 Bumped loofah to 2.3.1 (CVE-2019-15587). 2019-10-24 08:45:02 +02:00
Mantas Masalskis
8386a07a7b Refactoring: Prefer RSpec matchers over selectors for expressive output and isolated scope. 2019-10-22 11:40:35 +02:00
Denny Korsukéwitz
7c935655d5 Telegram refactoring:
- Fixes #2289 - Added Telegram video support.
- Improved error handling via raise Exceptions.
- Removed unused methods.
- Fixed typos.
- Improved messages to client - return status: :ok even if the message could not be processed. This stops the Webhook loop for these message.
2019-10-21 16:50:45 +02:00
Mantas Masalskis
8d16bcbfdd Fixes #2229 - Wrong dates on synced calendars. 2019-10-21 13:03:54 +02:00
Mantas
a883bbadb3 Refactoring: DRYing up HTTP calls in SearchIndexBackend. 2019-10-21 12:53:28 +02:00
Ryan Lue
dbe13c2ed6 - Fixes #2658 - CSV-Import doesn't lookup records by "name" field.
- Fixes #2659 - CSV-Import doesn't (always) handle database errors correctly.

Attention: This introduces a behavior change: Before (other) data was still imported on errors, now data only will get imported when no error occurs.
2019-10-21 12:44:52 +02:00
Thorsten Eckel
1d0d227575 Maintenance: StatsStore column related_o_id is never used. 2019-10-15 12:17:53 +02:00
Thorsten Eckel
b9c82a4c7f Maintenance: All models should inherit from ApplicationModel. 2019-10-15 12:15:58 +02:00
Thorsten Eckel
e2af543016 Refactoring: Prefer ActiveJob helpers instead of quering job processing backend (Delayed::Job) directly. 2019-10-11 22:51:48 +02:00
Thorsten Eckel
3667cacab0 Refactoring: SLA id paramater for SlaTicketRebuildEscalationJob is never used. 2019-10-11 22:48:40 +02:00
Thorsten Eckel
c8d19fc0af Maintenance: Completely disable Metrics/AbcSize rubocop for now. A list of files would be prefered but is currently not available. 2019-10-11 17:16:47 +02:00
Ryan Lue
3107d684b5 Fixes #2740 - Signature detection fails if no signature range could be found. 2019-10-11 17:10:41 +02:00
Ryan Lue
adf4442648 Fixes #2701 - Can't forward articles containing a <img> tag without src attribute. 2019-10-11 17:04:01 +02:00
Martin Edenhofer
1afa52f5f7 Maintenance: Added logging of scheduler jobs execution time to identify long running tasks. 2019-10-10 13:51:35 +02:00
Martin Edenhofer
2ab17db3e4 Fixes #2768 - Unable to process email where group has option follow_up_possible: 'new_ticket' and arriving email has no subject header. 2019-10-08 15:13:27 +02:00
Olivier Sallou
69600b0b7c Fix typos in Unprocessable Entity error message
🎉🎉🎉 Big thanks to Olivier Sallou (@osallou) for this contribution!
2019-10-08 17:42:22 +08:00
Martin Edenhofer
886c718e12 No timestamp of unprocessable mail to prevent double import of mails. Follow up if issue #2092. 2019-10-08 09:19:04 +02:00
Martin Edenhofer
f57f0486a3 Performance: When many tickets have reached the reminder or are escalated (more than 1400) processing of those causes a high CPU load and long blocking of background processing. Caching Group permission lookup for users reduces this load. 2019-10-04 11:42:44 +02:00
Martin Edenhofer
4182b0b567 Improved History.list to only retrive history entries of last 2 days (by generic condition as method argument) to save scheduler resources. 2019-10-03 14:41:07 +02:00
Martin Edenhofer
d01dfce8cb Removed unused sla get of ticket in Ticket.process_escalation to save system ressources of scheduler. 2019-10-03 13:43:41 +02:00
Martin Edenhofer
6018d864db Performance: Sessions::Backend::TicketOverivewList check whether data has to be sent to the client was wrong. The correct check now compares the list of tickets instead of comparing the whole hash structure including assets. 2019-10-02 15:57:08 +02:00
Thorsten Eckel
d1ed72a071 Existing user session when requesting SSO session create endpoint will fail device check because of missing fingerprint param (which is required as soon as a user/session is present). 2019-09-30 19:34:13 +02:00
Martin Edenhofer
817cc72194 Updated rubyzip / CVE-2019-16892 2019-09-30 13:45:39 +02:00
Thorsten Eckel
d354dee74c Refactoring: Move Ruby class definitions to dedicated files to improve orientation and expressiveness. 2019-09-27 09:22:16 +02:00
Thorsten Eckel
f0fdf7e7f3 Maintenance: Disable execution of ES RSpec tests in CircleCI env. 2019-09-26 14:08:17 +02:00
Martin Edenhofer
f806ac3611 Fixed issue #2742 - Removing a record drops whole index on Elasticsearch 6 and later. 2019-09-26 13:41:20 +02:00
Mantas Masalskis
c33bd9c7e3 Maintenance: Added test coverage for Knowledge Base initial data loading and translation update. 2019-09-24 17:44:32 +02:00
Mantas Masalskis
21c3b31c97 Maintenance: Added test coverage for public Knowledge Base search. 2019-09-24 15:04:42 +02:00
Martin Edenhofer
5e38ca46fc Fixed issue #2750 - Can't change Ticket attributes of "Shared Organization" Ticket. 2019-09-20 08:48:57 +02:00
Mantas Masalskis
6606aa29cd Don't use stubs for UserInfo.current_user_id because it blocks the use case where UserInfo.current_user_id is changed at runtime. 2019-09-18 19:25:04 +02:00
Thorsten Eckel
8096ee0892 Fixed bug: ApplicationModel.lookup returns invalid cache entries. 2019-09-18 18:22:15 +02:00
Thorsten Eckel
2d70134d72 Fixed bug: Empty ActiveRecord::AttributeMethods::Dirty#saved_changes in cache invalidation callback (ApplicationModel::HasCache) leads to wrong cache entries if record is a ticket. 2019-09-18 18:22:15 +02:00
MrGeneration
f01d71d73b fix typos in html tags
This will satsify issue https://github.com/zammad/zammad/issues/2747 found by abeluck.

Earlier the two patched files did not correctly close divs, which caused broken Mails to be generated.
2019-09-18 14:10:00 +02:00
Mantas
dabb415b8b test added to JS unit test runner 2019-09-18 12:09:31 +03:00
Mantas
e4bd02e4d3 Fixes deleting LocalStorage item with user-id prefix 2019-09-18 11:02:17 +02:00
Mantas
296a024c4b TaskManager#ensureWorker method guarantees worker is up and running. Helps to mitigate race condition on UI launch 2019-09-18 11:01:06 +02:00
Thorsten Eckel
dfb2b1bc8a Follow-up #2741: Authenticate users via SAML. Missing setting for new systems. 2019-09-18 10:07:46 +02:00
Martin Edenhofer
ba2afc0c16 Fixes #2699 - Excel export of report or time accounting drops additional fields in row if integer field contain null/nil/undefined. 2019-09-16 22:36:03 +02:00
Mantas Masalskis
2e3b7e07ad Bumps [rubocop-rspec](https://github.com/rubocop-hq/rubocop-rspec) from 1.33.0 to 1.35.0.
- [Release notes](https://github.com/rubocop-hq/rubocop-rspec/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop-rspec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop-rspec/compare/v1.33.0...v1.35.0)
2019-09-16 17:04:17 +02:00
Thorsten Eckel
a93250e210 Fixes issue #2741: Authenticate users via SAML. 2019-09-16 15:03:21 +02:00
Thorsten Eckel
128e8dea72 Revert "Fixes issue #2734 - Enhance postmaster filters to be able ignoring vacation mails (out of office)."
This reverts commit 568ed22074.
2019-09-16 14:40:01 +02:00
Thorsten Eckel
250bf2abcf Fixes #2726: System mail notification subjects ending with =0A. 2019-09-16 14:20:59 +02:00
Thorsten Eckel
568ed22074 Fixes issue #2734 - Enhance postmaster filters to be able ignoring vacation mails (out of office). 2019-09-16 14:19:18 +02:00
Mantas Masalskis
89c74ba829 Maintenance: Prefer selector from used variable over hardcoded string. 2019-09-16 12:34:26 +02:00
Mantas Masalskis
6000b9f5c1 Maintenance: Improved stability of the CI by gracefully stoping the websocket server instead of killing the thread which results in a blocked port sometimes. 2019-09-16 12:29:04 +02:00
Thorsten Eckel
1c63e96675 Bumps [rubocop-performance](https://github.com/rubocop-hq/rubocop-performance) from 1.1.0 to 1.4.1.
- [Release notes](https://github.com/rubocop-hq/rubocop-performance/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop-performance/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop-performance/compare/v1.1.0...v1.4.1)
2019-09-16 11:21:10 +02:00
Thorsten Eckel
429b95e65d Maintenance: Make ES connection establishment more stable by:
- performing a retry when Net::OpenTimeout exceptions occur
- cache the result of ES version check
2019-09-16 11:15:12 +02:00
Mantas Masalskis
256e7513b3 Maintenance: Improves CI reliability of browser:core tests in batch 2 by adding delay before performing ticket zoom secondary button action to avoid accessing stale element. 2019-09-16 11:08:44 +02:00
Thorsten Eckel
01729584f0 Revert "Fixed issue #1653: Default value not set for attributes of type input, select, tree_select, richtext, textarea, checkbox."
This reverts commit 93c5708ba8 and c2bdbe62d8.
2019-09-12 13:34:37 +02:00
Martin Edenhofer
37687e32a1 Fixed mail delivery postmaster to sender test. 2019-09-09 14:45:44 +02:00
Ryan Lue
33bef7123d Feature: Single sign-on (SSO). 2019-09-05 16:02:31 +02:00
Thorsten Eckel
0afb105dd7 Refactoring: Removed unnecessary OnlineNotification.seen method. 2019-09-05 15:52:25 +02:00
Thorsten Eckel
9c76def19d Maintenance: Applied rubocop Performance/Casecmp. 2019-09-05 15:51:13 +02:00
Thorsten Eckel
f50c079df9 Maintenance: SQLite dependency is obsolete. 2019-09-05 13:55:46 +02:00
Denny Korsukéwitz
20ee2e87ca Fixes #1010 - display only used channels in dashboard 2019-09-04 11:30:46 +02:00
Denny Korsukéwitz
feac4bb938 Removed macro event for TicketCreateFormHandler. This is not needed, because there are no macros when creating tickets. 2019-09-04 09:42:50 +02:00
Thorsten Eckel
7e2f55d91f Fixed issue #2595: GitLab OAuth2 provider URL misses api/v4/ suffix. 2019-09-04 08:38:28 +02:00
Thorsten Eckel
39c78662d0 Fixed issue #2730: Registering of Twitter App fails for Twitter App with existing webhooks. 2019-09-03 20:23:29 +02:00
Denny Bresch
1c730e9154 Fixes #2702 - Use assignee_id to set the ticket owner. 2019-09-03 17:04:47 +02:00
Denny Bresch
781ffa3209 Maintenance: Improve handling of Zendesk API to get the correct count of objects while import. 2019-09-03 17:04:47 +02:00
Denny Bresch
fb027c514b Maintenance: Improve handling of Zendesk API hickups/temporary errors. 2019-09-03 17:04:47 +02:00
Denny Bresch
f1eee78381 Fixes #2694 - Zendesk import doesn't consider all tickets. 2019-09-03 17:04:47 +02:00
Denny Bresch
f1f93b773e Follow-up - #1161 - Zendesk import fails for deleted tickets. 2019-09-03 17:04:47 +02:00
Denny Bresch
371a4638ec Fixes #2538 - Zendesk import fails due import of (too long) ticket description as (unused) note 2019-09-03 17:04:47 +02:00
Thorsten Eckel
c2bdbe62d8 Follow-up: Fixed issue #1653: Default value not set for attributes of type input, select, tree_select, richtext, textarea, checkbox. 2019-09-03 16:06:04 +02:00
Martin Edenhofer
f79555ecc6 Fixed issue #2728 - Put _type, _doc and _id to reserved words for object managaer becasue of elasticssearch internal use. 2019-09-02 18:20:32 +02:00
Martin Edenhofer
180502d03b - Prefer oversized_preferences naming prefix for consistency reasons.
- DRYed up code by using yield.
- Idiomatic ruby: Use ?-suffix for true/false methods.
2019-09-02 18:03:10 +02:00
Martin Edenhofer
77256c99b9 Follow up for issue #2720 - makes Model.search_index_reload more robust - Sometimes elasticsearch takes longer as expected and will raise timeout in Zammad. 2019-09-02 17:32:54 +02:00
Denny Korsukéwitz
c88739cde8 Fixes #2710 - ignore 'new line' between trigger chars. 2019-09-02 15:28:39 +02:00
Thorsten Eckel
40dcb0e132 Updated rubocop to latest version (0.74). 2019-09-02 13:52:11 +02:00
Martin Edenhofer
366a0b32e3 Improved wording. 2019-09-02 09:55:10 +02:00
Martin Edenhofer
c8ef769829 Fized issue #2723 - Unable to process mail with enabled follow up detection in content of attachments. 2019-08-30 15:09:31 +02:00
Martin Edenhofer
7f1d30e089 Fixed issue #2722 - mail processing impossible: invalid byte sequence in UTF-8. 2019-08-29 18:05:17 +02:00
Martin Edenhofer
d57ac5338e Fixed issue #2720 - Sometimes es takes longer as expected and will raise timeout in Zammad. 2019-08-28 11:41:04 +02:00
Martin Edenhofer
bea44638d5 Martin Edenhofer's avatar Fixed issue #2719 - Unable to set owner via X-Zammad-Ticket-owner header. 2019-08-26 22:14:33 +02:00
Thorsten Eckel
ffa2b61087 Maintenance: Not having an active Email::Notification is a valid use case. 2019-08-21 14:55:26 +02:00
Denny Bresch
08a98efca4 Fixes #2647 - Enhance CTI-Caller-Log to "mark as seen" all unread entries at once 2019-08-17 00:24:50 +02:00
Billy Zhou
ebe053efca PR2597: Fixed issue #2596 by correcting chat header's height 2019-08-16 17:44:43 +02:00
Denny Bresch
832b2ec28a Fixes #2661 - Inconsistency in "follow up" strings 2019-08-16 17:39:31 +02:00
Thorsten Eckel
6a5c5a3e2a Maintenance: Improved HTML sanitization timeout handling. 2019-08-16 15:15:07 +02:00
Martin Edenhofer
b0a806e886 Implemented issue #2703 - Added new placetel outbound support for call logging. 2019-08-16 14:10:36 +02:00
Thorsten Eckel
93c5708ba8 Fixed issue #1653: Default value not set for attributes of type input, select, tree_select, richtext, textarea, checkbox. 2019-08-16 11:14:29 +02:00
Martin Edenhofer
f165cbfbc2 Fixes issue #2696 - Limit on copy and paste in note box for new articles 2019-08-16 08:47:32 +02:00
Denny Bresch
7f0fd8b346 Fixed typo 'form_active'. 2019-08-14 10:15:36 +02:00
Thorsten Eckel
7cb550bfdf Bumped nokogiri to 1.10.4 (CVE-2019-5477). 2019-08-13 18:37:03 +02:00
Denny Bresch
92b38dcb75 Fixes #2695 - Telegram not possible to close ticket via '/end'. 2019-08-12 17:25:32 +02:00
Martin Edenhofer
848175a290 Fixes issue #2103 - clickable URL (template) for ObjectManager Attribute. 2019-08-12 09:53:24 +02:00
Denny Bresch
29c9d3546b Fixes obsolete texts or add translations. Fixes #813 2019-08-12 09:49:48 +02:00
Martin Edenhofer
19ca528635 Follow up for issue #2697 - Time zone incorrectly calculated in ticket list. 2019-08-11 21:52:54 +02:00
Martin Edenhofer
31cd45d0a4 Fixed issue #2697 - Time zone incorrectly calculated in ticket list. 2019-08-09 13:16:44 +02:00
Martin Edenhofer
b7bcc2aeff Improved subject in oversized mail template. 2019-08-09 12:47:21 +02:00
Denny Bresch
77d0b2d5c9 Maintenance: Improve RSpec 'text modules group dependency examples' 2019-08-07 14:55:54 +02:00
Billy Zhou
fae194918e Implemented issue #2092 - Send postmaster email to sender if email is too big 2019-08-06 17:26:29 +02:00
Denny Bresch
bc38f1c1ae Maintenance: Fixed typos in inline comments. 2019-07-31 10:23:48 +02:00
Denny Bresch
106bfd56da Fixes #2664 - ObjectManager::Attribute names collide with reserved application words ( e.g. url) and break functionalities 2019-07-31 09:45:27 +02:00
Denny Bresch
59f9f1a1b6 Follow up - ec8b7b5be1 - Fixes #2325 - remove blockquote blocks before checking if attachment is referenced in message. 2019-07-30 15:52:14 +02:00
Denny Bresch
1db27646d5 Fixes #2379 - Zammad ignores group mapping on Telegram if same sending user. 2019-07-30 15:47:53 +02:00
Ryan Lue
68c56c7b87 Maintenance: Added support for Cookie secure-Flag. 2019-07-30 15:43:27 +02:00
Thorsten Eckel
0cdc3ffb7b Fixed bug #2675: Follow up to 9503ff20ce - Linking auth provider account from profile fails. 2019-07-29 13:46:50 +02:00
Denny Bresch
ec8b7b5be1 Fixes #2325 - remove blockquote blocks before checking if attachment is referenced in message. 2019-07-26 16:44:30 +02:00
Ryan Lue
1b7140bb1d Prevent extreme import delays by skipping image preview generation 2019-07-26 16:36:23 +02:00
Ryan Lue
a9144638a9 Maintenance: Introduced 'deprecation_toolkit' to handle deprecation of internal Zammad APIs and those of dependencies. 2019-07-26 16:33:26 +02:00
Martin Edenhofer
2d7846e7af Fixed issue #2685 - Scheduler/Job with current_user in condition is not working. 2019-07-26 16:31:24 +02:00
Denny Bresch
c57a320d8d Added 'dropdown' buttons and dropdown-menu to layout_ref/button. 2019-07-26 16:18:55 +02:00
Martin Edenhofer
595dd01c4e Cleanup - moved from file based ttl checks to object based ttl checks. 2019-07-25 08:55:56 +02:00
Denny Bresch
0d8a7b7155 Changed 'Create User' to 'New User' to reduces the number of similar translations. 2019-07-23 17:31:33 +02:00
Denny Bresch
f756aed7a5 Revert "Tidied scss."
This reverts commit dcf8a2ba25c2e11f2837f1700dd897d6974bef09.
2019-07-23 12:17:31 +02:00
Thorsten Eckel
3424416809 Fixed issue #2663: DB migration blocks update when records with 'current_user.id' in selector of Job or Trigger exist. 2019-07-12 16:02:22 +02:00
Thorsten Eckel
b361c422f8 Refactoring UserInfo:
- Pass return value of given block back to caller.
- Ensure that exceptions don't cause the temporary UserInfo.current_user_id to leak.
2019-07-12 15:59:18 +02:00
Denny Bresch
b60dc34b1f Fixes article icons for 'twitter status', 'twitter direct-message', 'facebook feed post', 'facebook feed comment', 'telegram personal-message'. 2019-07-12 12:55:53 +02:00
Denny Bresch
51865bf78e Maintenance: Improves layout_ref/ui. 2019-07-12 12:55:11 +02:00
MrGeneration
272344ae35 Unset RAILS_LOG_TO_STDOUT by default
This will solve issue #2660 and ensure that we're not changing the logging by default.

Set RAILS_LOG_TO_STDOUT=true to enable logging to STDOUT.
2019-07-12 12:08:24 +02:00
Ryan Lue
3f20b05469 Support NullDB adapter (used in Docker packaging) in DBPreflightCheck initializer 2019-07-12 12:05:41 +02:00
Felix Niklas
d8242181a4 See more: make last row of text selectable
fixes #2654
2019-07-11 16:20:58 +02:00
Thorsten Eckel
c09e698709 Applied workaround for issue #2656: Disable new Rails database connection reaping functionality until the Thread-Zombie issue is resolved: https://github.com/rails/rails/issues/33600 . 2019-07-10 13:58:51 +02:00
Denny Bresch
eafe412d87 Fixed Version typo. 2019-07-10 08:25:32 +02:00
Martin Edenhofer
76959f1919 Prepared files. 2019-07-10 01:22:28 +02:00
Martin Edenhofer
7faa4c310d Implemented CTI ticket create screen popup on answering call. 2019-07-10 00:07:32 +02:00
Thorsten Eckel
9503ff20ce Maintenance: Applied required changes to resolve 'omniauth' CVE-2015-9284
While Zammad was not affected it was using GET requests. These are now prohibited because they enable the attack vector (in other scenarios).
Since it's not a general 'rails' or 'omnniauth' issue but an issue affecting scenarios where both are combined. It is required to use the 'omniauth-rails_csrf_protection' gem instead of 'omniauth' for those scenarios.

More information can be found here:
https://github.com/omniauth/omniauth/pull/809
https://github.com/omniauth/omniauth/pull/809#issuecomment-497376674
https://nvd.nist.gov/vuln/detail/CVE-2015-9284
https://github.com/cookpad/omniauth-rails_csrf_protection
https://github.com/rubysec/ruby-advisory-db/pull/390#issuecomment-509108186
2019-07-08 17:18:14 +02:00
Denny Bresch
5e0e6bb8ea Fixed core.js test. 2019-07-05 17:49:42 +02:00
Denny Bresch
0a819f8d3c Fixes obsolete texts or descriptions - which are no longer in use 2019-07-04 15:50:05 +02:00
Thorsten Eckel
183a893883 Maintenance: Improved explicitness of CSRF token check logic. 2019-07-04 15:43:49 +02:00
Thorsten Eckel
51ccc23307 Maintenance: Removed unneeded 'Special exceptions' of rubocop cops. 2019-07-04 15:43:49 +02:00
Denny Bresch
c60e1c0780 Fixed issue #2611 - SearchIndexBackend.remove() (ES) is not removing entries 2019-07-04 15:23:58 +02:00
Thorsten Eckel
5745fa46bd Bumps [rails](https://github.com/rails/rails) from 5.1.7 to 5.2.3.
- [Release notes](https://github.com/rails/rails/releases)
- [Changelog](https://github.com/rails/rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rails/rails/compare/v5.1.7...v5.2.3)
2019-07-04 13:16:55 +02:00
Denny Bresch
c788c3e053 Added migration for group_dependent_text_modules - renamed table text_modules_groups to groups_text_modules. 2019-07-03 18:14:28 +02:00
Ryan Lue
a295a84771 Refactoring: Migrate ticket_article_communicate_test to RSpec 2019-07-03 18:12:05 +02:00
Ryan Lue
52f5b33484 Refactoring: Migrate tag_test to RSpec 2019-07-03 18:02:29 +02:00
Billy Zhou
7dce5315e1 Added Enhancement #2569 - Enhance tag search to use fulltext search 2019-07-03 17:50:47 +02:00
Thorsten Eckel
811c0cc744 Exclude tmp dir from backups 2019-07-01 17:13:19 +02:00
Thorsten Eckel
7a965d7385 Pull Request #2637 - Add Rails 5 log to STDOUT env variable support (RAILS_LOG_TO_STDOUT). Huge thanks to @thegcat. 2019-07-01 17:10:17 +02:00
Lorenzo Milesi
fd21a49a41 Removed duplicate Mailing-List tag from postmaster match ui element, fixes #2639 2019-07-01 16:03:38 +02:00
Ryan Lue
4a1477b1ff Refactoring: Migrate history_test to RSpec 2019-06-28 15:07:14 +02:00
Ryan Lue
a1da3a27f9 Enable Lint/UselessAssignment cop. 2019-06-28 13:38:49 +02:00
Ryan Lue
7930ffdf03 Refactoring: Migrate session_basic_ticket_test to RSpec. 2019-06-28 11:10:05 +02:00
Thorsten Eckel
5c71350eb6 Bump spring from 2.0.2 to 2.1.0
Bumps [spring](https://github.com/rails/spring) from 2.0.2 to 2.1.0.
- [Release notes](https://github.com/rails/spring/releases)
- [Changelog](https://github.com/rails/spring/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rails/spring/compare/v2.0.2...v2.1.0)
2019-06-27 20:26:44 +02:00
Thorsten Eckel
83c77a4a35 Applied required changes to install and use PHP 5.6 for testing the Zammad PHP API client - until @jepf adds PHP 7 support (for tests). 2019-06-27 20:26:28 +02:00
Billy Zhou
29f96527a7 Fixed #2339 - Integer minimal is ignored. 2019-06-27 13:53:17 +02:00
Thorsten Eckel
7e113870a7 Bump rszr from 0.4.0 to 0.5.2
Bumps [rszr](https://github.com/mtgrosser/rszr) from 0.4.0 to 0.5.2.
- [Release notes](https://github.com/mtgrosser/rszr/releases)
- [Changelog](https://github.com/mtgrosser/rszr/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mtgrosser/rszr/compare/v0.4.0...v0.5.2)
2019-06-27 13:52:28 +02:00
Thorsten Eckel
1e54645223 Fixed issue #462 - Password hashing: upgrade to argon2 2.x (argon2id), fix non-unique salt bug - huge thanks to @martinvonwittich ! 2019-06-27 13:51:29 +02:00
Denny Bresch
4a142f307b Fixed #2624 - Concern 'CanLatestChange' returns wrong updated_at 2019-06-27 12:01:40 +02:00
Denny Bresch
812266b80e Fixed wrong score (range) for karma level Evangelist. 2019-06-27 11:01:11 +02:00
Billy Zhou
4d0c618baa Contributed by Lorenzo Milesi <maxxer@ufficyo.com>:
Fixed typo in timezone.coffee
2019-06-27 10:55:33 +02:00
Denny Bresch
5555043dbf Fixes #1561 - fix translation strings. 2019-06-25 14:16:45 +02:00
Denny Bresch
df657a3e96 Added DashboardStatsWidget help description. 2019-06-24 16:34:04 +02:00
Denny Bresch
95404e0fd8 Fixed typo in file and class name - form_handler_dependencies. 2019-06-24 16:31:05 +02:00
Denny Bresch
2d08316e36 Fixed issue #2615 - Misleading 'Escalation' ticket attribute name in SLAs, Scheduler and Trigger should be named 'Escalation_at'. 2019-06-24 16:29:47 +02:00
Felix Niklas
bc061bdf55 Contain tag-field inside sidebar, add max-height
Fixes #2570
2019-06-24 16:18:14 +02:00
Felix Niklas
a7a2a8b1f0 KB public: fix IE11 layout bug
It adds a wrapper element around the contents inside the body  to workaround the wrong height calculation bug in IE11 : https://github.com/philipwalton/flexbugs#flexbug-3
Additionally it fixes a text overflow bug in grid elements.
Fixes #2600
2019-06-24 16:15:38 +02:00
Billy Zhou
96f6d5e0e5 Contributed by Silsha Fux <hallo@silsha.me>
Update "Attached Files" string in knowledge base to use existing translation.
2019-06-24 11:32:43 +02:00
Ryan Lue
3ed8463e3e Refactoring: Clean up Ticket::Number & Ticket::Number::Increment classes 2019-06-24 11:30:02 +02:00
Ryan Lue
37393b26de Refactoring: Migrate ticket_number_test to RSpec 2019-06-24 11:30:02 +02:00
Ryan Lue
03b2456dd9 Fix migration (Nov 2018) which set a hash value on a boolean Setting 2019-06-24 11:30:02 +02:00
Billy Zhou
1bdab1c4aa Fixed issue #2593 - missing OTRS.png asset in Import Wizard 2019-06-24 10:08:27 +02:00
Martin Edenhofer
04d829c7e9 Fixes #2594 - Wrong date format in Excel Exports of reporting download. 2019-06-24 09:28:34 +02:00
Martin Edenhofer
bd5170b731 Fixes #2614 - Tree Select shows empty value in ticket zoom after submit when value contains trailing spaces. 2019-06-24 01:15:27 +02:00
Martin Edenhofer
af9fcf4565 Added support for elasticsearch 6 and 7. Fixes #1688. 2019-06-20 12:45:27 +02:00
Thorsten Eckel
9949dd18dc Fixed issue #2604 - Broken Edit-button in public KB interface for KB editors. 2019-06-13 13:56:42 +02:00
Denny Bresch
8b435e2295 Fixed issue #2599 - Activation of Knowledgebase is impossible on IE11 - agent interface 2019-06-13 11:27:32 +02:00
Martin Edenhofer
80294b0b51 Added knowledge base categories and answers to status monitoring. 2019-06-13 03:52:23 +02:00
Martin Edenhofer
84feacd816 Followup for issue #2541 - only update active jobs and triggers. 2019-06-13 02:07:09 +02:00
Thorsten Eckel
757af308a8 Maintenance: Use corresponding ES docker image tag. 2019-06-12 17:02:36 +02:00
Martin Edenhofer
7f8e268ae0 Cleanup of redirect to admin interface if user is only admin and no agent or customer (only one central place). 2019-06-07 23:00:25 +02:00
Martin Edenhofer
db531e66b3 Fixes issue #2516 - trigger email notification UI defective on removal of recipient. 2019-06-07 13:28:58 +02:00
Felix Niklas
c7d1b9d8d7 KB public UI: fix list layout - prevent icon from shrinking 2019-06-06 10:35:32 +02:00
Felix Niklas
a4bbe09a8c KB public UI: add overflow-ellipsis to placeholder 2019-06-06 10:30:45 +02:00
Felix Niklas
f34ce5c292 KB public UI: fix viewport size
- add viewport header
- adjust headline sizes for mobile
2019-06-06 10:26:42 +02:00
Felix Niklas
986285c216 Improved layout op public Knowledge Base:
- fix bug where search result title has to much spacing around (its a h3)
- remove border from h2
- size & spacing finetuning
- bigger spacing around hr
- add hr between categories and answers
2019-06-06 08:26:15 +02:00
Martin Edenhofer
b4dcfcc009 Updated changes to 3.1.0. 2019-06-06 03:59:38 +02:00
Martin Edenhofer
048ec05195 Updated version information. 2019-06-06 03:48:16 +02:00
Mantas Masalskis
97e3d0b4f0 Added KB icon modifiers to categories and answers in editor mode. 2019-06-06 03:23:45 +02:00
Martin Edenhofer
0244ac9a87 Small improvement to wording. 2019-06-06 02:13:49 +02:00
Mantas
19c222e7f3 KB answer-to-answer link slug wrong locale bugfix 2019-06-05 22:08:27 +03:00
Martin Edenhofer
110d60dd30 Improved wording. 2019-06-05 17:44:29 +02:00
Martin Edenhofer
97d14a93b3 Initial knowledge base support. 2019-06-04 05:40:48 +02:00
Felix Niklas
5d2398a3aa Fixes issue #2518 - Add missing icon file-text
The icon file-text is referenced from https://github.com/zammad/zammad/blob/develop/app/assets/javascripts/app/lib/mixins/view_helpers.coffee#L187 but didn't actually exist so far. It's grey version of the word icon.
2019-06-03 08:47:36 +02:00
Mantas Masalskis
48766c7db9 Maintenance: Fixed caching issue in authenticate_as spec helper and enhanced capabilities. 2019-05-31 09:54:38 +02:00
Thorsten Eckel
4767aa0771 Bump zendesk_api from 1.17.0 to 1.19.0
Bumps [zendesk_api](https://github.com/zendesk/zendesk_api_client_rb) from 1.17.0 to 1.19.0.
- [Release notes](https://github.com/zendesk/zendesk_api_client_rb/releases)
- [Changelog](https://github.com/zendesk/zendesk_api_client_rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zendesk/zendesk_api_client_rb/compare/v1.17.0...v1.19.0)
2019-05-29 14:43:16 +02:00
Thorsten Eckel
20f0e36741 Bump rubocop-rspec from 1.32.0 to 1.33.0
Bumps [rubocop-rspec](https://github.com/rubocop-hq/rubocop-rspec) from 1.32.0 to 1.33.0.
- [Release notes](https://github.com/rubocop-hq/rubocop-rspec/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop-rspec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop-rspec/compare/v1.32.0...v1.33.0)
2019-05-29 14:21:36 +02:00
Thorsten Eckel
5cd906a6c9 Bump twilio-ruby from 5.22.2 to 5.23.0
Bumps [twilio-ruby](https://github.com/twilio/twilio-ruby) from 5.22.2 to 5.23.0.
- [Release notes](https://github.com/twilio/twilio-ruby/releases)
- [Changelog](https://github.com/twilio/twilio-ruby/blob/master/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-ruby/compare/5.22.2...5.23.0)
2019-05-29 14:06:46 +02:00
Thorsten Eckel
d42a588d9e Bump coveralls from 0.8.22 to 0.8.23
Bumps [coveralls](https://coveralls.io) from 0.8.22 to 0.8.23.
2019-05-29 14:06:05 +02:00
Thorsten Eckel
cb4e45478c Bump test-unit from 3.3.2 to 3.3.3
Bumps [test-unit](https://github.com/test-unit/test-unit) from 3.3.2 to 3.3.3.
- [Release notes](https://github.com/test-unit/test-unit/releases)
- [Commits](https://github.com/test-unit/test-unit/compare/3.3.2...3.3.3)
2019-05-29 14:00:22 +02:00
Thorsten Eckel
005e88afbe Bump selenium-webdriver from 3.142.0 to 3.142.3
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 3.142.0 to 3.142.3.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/master/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/commits)
2019-05-29 10:06:50 +02:00
Billy Zhou
4f44edcd8f Fixed #2510 - Zammad Customers shown as Agents in IE. 2019-05-29 10:03:55 +02:00
Thorsten Eckel
e27079f0a0 Bump capybara from 2.18.0 to 3.21.0
Bumps [capybara](https://github.com/teamcapybara/capybara) from 2.18.0 to 3.21.0.
- [Release notes](https://github.com/teamcapybara/capybara/releases)
- [Changelog](https://github.com/teamcapybara/capybara/blob/master/History.md)
- [Commits](https://github.com/teamcapybara/capybara/compare/2.18.0...3.21.0)
2019-05-28 18:57:15 +02:00
Ryan Lue
2ac28bf906 Fix auto-correctable rubocop offenses in test suite 2019-05-28 15:07:19 +08:00
Billy Zhou
e907c13cbe Ticket zoom: increased double-click/metaToggle timeout (fixes #2586) 2019-05-24 15:34:39 +02:00
Billy Zhou
5caaaeb2bd Use $server_name instead of hardcoded domain. 2019-05-24 11:48:43 +02:00
Martin Edenhofer
cd896bc6e1 Skip user ticket counter background jobs on import. 2019-05-23 15:34:01 +02:00
Ryan Lue
73472484a9 Rephrase GitLab MR template to encourage more complete reporting 2019-05-23 14:23:11 +02:00
Martin Edenhofer
b209b0ca57 Delay search index background jobs on error. 2019-05-23 14:03:42 +02:00
Martin Edenhofer
049adbe469 Improved spine stopListeningTo() - In certain cases (e. g. http://localhost:3000/#knowledge_base/1/locale/en-us/edit just change the title and submit) a Uncaught TypeError: Cannot read property 'obj' of undefined is raised. The reason is that listeningToOnce is an empty array. 2019-05-20 16:12:40 +02:00
Martin Edenhofer
dd1a6c30fc Fixed issue #2574 - Every night tickets are updated (system need to use SLAs). 2019-05-20 14:18:15 +02:00
Thorsten Eckel
1fd0e82254 Maintenance: Increased encoding detection timeout because of ZombieLoad CPU limitating mitigations. 2019-05-20 11:42:25 +02:00
Thorsten Eckel
f3862de9fc Fixed bug: received_merge Ticket history entry has timestamp of previous history entry. 2019-05-20 11:41:28 +02:00
Thorsten Eckel
d44b5afd19 Fixed bug:
- Migration gets executed unnecessarily on newly installed systems.
- Migration looks for `changed_at` column which should be `updated_at` instead.
- Migration removes `limit: 3` on `created_at` timestamp colums (MySQL millisecond support).
2019-05-20 11:37:34 +02:00
Martin Edenhofer
9775af5e98 Improved error handling if proposed calendar is not valid. 2019-05-20 11:22:36 +02:00
Martin Edenhofer
6ae6ee44ba Let tests work correctly even if calendar based escalations is calculated over midnight. 2019-05-14 15:34:41 +02:00
Ryan Lue
2ca17b913f Refactoring: Migrate email_process_follow_up_test to RSpec 2019-05-13 11:29:49 +02:00
Ryan Lue
7a79f97bb9 Refactoring: Migrate email_process_out_of_office_test to RSpec 2019-05-13 11:23:20 +02:00
Ryan Lue
3b1e51c789 Refactoring: Migrate email_process_state_open_test to RSpec 2019-05-13 11:10:36 +02:00
Billy Zhou
d4b0d953d0 Fixed CI failures on Circle CI introduced by commit 8f04e32. This is a follow-up to original issue #2534 - Agents should always be able to re-open closed tickets, regardless of group.follow_up_possible. 2019-05-06 07:46:47 +02:00
Martin Edenhofer
c16c86e99e Skip overview in list if overview was deleted in the meantime (race condition). 2019-05-02 11:08:25 +02:00
Martin Edenhofer
1e745f00d8 Fixes issue #2554 - Downloading of emails via IMAP takes longer as one minute. E-Mail seems to be lost. 2019-04-30 15:45:01 +02:00
Martin Edenhofer
5e522f4276 Improved logging - do not log article.body and body. 2019-04-30 09:47:02 +02:00
Martin Edenhofer
34037219b7 Fixed issue #2552 - Apply changes (updated or if channel is deleted) to email channel even if channel is already fetching emails. 2019-04-30 09:27:32 +02:00
Thorsten Eckel
44adbd03b9 Bump twilio-ruby from 5.22.1 to 5.22.2
Bumps [twilio-ruby](https://github.com/twilio/twilio-ruby) from 5.22.1 to 5.22.2.
- [Release notes](https://github.com/twilio/twilio-ruby/releases)
- [Changelog](https://github.com/twilio/twilio-ruby/blob/master/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-ruby/compare/5.22.1...5.22.2)
2019-04-25 12:24:34 +02:00
Thorsten Eckel
802e5f88ad Bump selenium-webdriver from 3.141.5926 to 3.142.0
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 3.141.5926 to 3.142.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/master/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/commits)
2019-04-24 16:39:36 +02:00
Thorsten Eckel
013b0d82e9 Bump sassc-rails from 2.1.0 to 2.1.1
Bumps [sassc-rails](https://github.com/sass/sassc-rails) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/sass/sassc-rails/releases)
- [Commits](https://github.com/sass/sassc-rails/compare/v2.1.0...v2.1.1)
2019-04-24 14:15:22 +02:00
Rolf Schmidt
60715c36c6 Updated nokogiri gem (CVE-2019-11068). 2019-04-23 16:54:04 +02:00
Thorsten Eckel
dd2c602cff Bump selenium-webdriver from 3.141.0 to 3.141.5926
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 3.141.0 to 3.141.5926.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/master/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/commits)
2019-04-18 15:48:24 +02:00
Billy Zhou
8f04e32079 Closes #2531 which fixes #2534 - Agents should always be able to re-open closed tickets, regardless of group.follow_up_possible - huge thanks to @martinvonwittich! 2019-04-18 15:01:21 +02:00
Thorsten Eckel
7919f341ff Maintenance: Don't sync dependabot CI MR branches to GitHub. 2019-04-18 10:21:10 +02:00
Thorsten Eckel
f2592cb632 Bump telephone_number from 1.3.4 to 1.4.0
Bumps [telephone_number](https://github.com/mobi/telephone_number) from 1.3.4 to 1.4.0.
- [Release notes](https://github.com/mobi/telephone_number/releases)
- [Commits](https://github.com/mobi/telephone_number/compare/v1.3.4...v1.4.0)
2019-04-18 09:05:17 +02:00
Thorsten Eckel
b6f277c97b Follow up - 6839f040e0 - Fixed bug: Failed jobs get executed more times than configured. 2019-04-18 08:19:58 +02:00
Ryan Lue
093d8e4722 KB Prep: Backport changes that generalize implementation of Links in FE 2019-04-17 20:45:51 +02:00
Ryan Lue
b96fb53a71 Refactoring: Migrate ticket_xss_test to RSpec 2019-04-17 11:22:32 +02:00
Martin Edenhofer
8a6ffc23cb Fixed issue #2059 - Incorrect display count of a report profile if tree_select is used. 2019-04-17 08:26:26 +02:00
Ryan Lue
4cd36cb200 Refactoring: Migrate auto_wizard_test to RSpec 2019-04-16 16:35:23 +02:00
Thorsten Eckel
5283da9f4f Bump rubocop-performance from 1.0.0 to 1.1.0
Bumps [rubocop-performance](https://github.com/rubocop-hq/rubocop-performance) from 1.0.0 to 1.1.0.
- [Release notes](https://github.com/rubocop-hq/rubocop-performance/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop-performance/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop-performance/compare/v1.0.0...v1.1.0)
2019-04-16 13:21:18 +02:00
Thorsten Eckel
864a7c6cf2 Bump test-unit from 3.3.0 to 3.3.2
Bumps [test-unit](https://github.com/test-unit/test-unit) from 3.3.0 to 3.3.2.
- [Release notes](https://github.com/test-unit/test-unit/releases)
- [Commits](https://github.com/test-unit/test-unit/compare/3.3.0...3.3.2)
2019-04-16 13:15:43 +02:00
Thorsten Eckel
a2243693a7 Bump rails from 5.1.6.2 to 5.1.7
Bumps [rails](https://github.com/rails/rails) from 5.1.6.2 to 5.1.7.
- [Release notes](https://github.com/rails/rails/releases)
- [Commits](https://github.com/rails/rails/compare/v5.1.6.2...v5.1.7)
2019-04-16 13:14:32 +02:00
Thorsten Eckel
4f125ff747 Bump factory_bot_rails from 5.0.1 to 5.0.2
Bumps [factory_bot_rails](https://github.com/thoughtbot/factory_bot_rails) from 5.0.1 to 5.0.2.
- [Release notes](https://github.com/thoughtbot/factory_bot_rails/releases)
- [Changelog](https://github.com/thoughtbot/factory_bot_rails/blob/master/NEWS.md)
- [Commits](https://github.com/thoughtbot/factory_bot_rails/compare/v5.0.1...v5.0.2)
2019-04-16 13:12:33 +02:00
Thorsten Eckel
d562eb860b Bump twilio-ruby from 5.21.2 to 5.22.1
Bumps [twilio-ruby](https://github.com/twilio/twilio-ruby) from 5.21.2 to 5.22.1.
- [Release notes](https://github.com/twilio/twilio-ruby/releases)
- [Changelog](https://github.com/twilio/twilio-ruby/blob/master/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-ruby/compare/5.21.2...5.22.1)
2019-04-16 13:11:04 +02:00
Thorsten Eckel
a355f776d7 Bump autoprefixer-rails from 9.5.0 to 9.5.1
Bumps [autoprefixer-rails](https://github.com/ai/autoprefixer-rails) from 9.5.0 to 9.5.1.
- [Release notes](https://github.com/ai/autoprefixer-rails/releases)
- [Changelog](https://github.com/ai/autoprefixer-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ai/autoprefixer-rails/compare/9.5.0...9.5.1)
2019-04-16 12:16:54 +02:00
Ryan Lue
c4ea7cdae6 Refactoring: Migrate user_device_test to RSpec 2019-04-16 11:20:41 +02:00
Billy Zhou
3c5d274575 Fixed #2539 - search pagination broken in users_controller.rb 2019-04-16 11:14:19 +02:00
Thorsten Eckel
9373a42944 Maintenance: After server change IPv6 is enabled on test host which will cause a different error to be thrown. 2019-04-12 15:43:28 +02:00
Ryan Lue
cc33feee40 👮 Crack down on style violations with rubocop-rspec 🚓 2019-04-12 12:58:15 +02:00
Ryan Lue
6613b07143 Refactoring: Migrate ticket_article_dos_test to RSpec 2019-04-11 17:12:59 +02:00
Ryan Lue
545339fe8e Replace :application_handle spec helper with ApplicationHandleInfo.use method 2019-04-11 17:12:59 +02:00
MrGeneration
e6697cdd21 Make sure that restoration script sets correct rights on files
These changes ensure that, no matter if migrating from a online instance or importing some other Zammad-Export, that the filesystem rights on the Zammad-Directory are always correct.

We're using fixed user "zammad" here, the Backup-Documentation needs enhancement and will hold a warning for this to ensure, other users don't crash here.
2019-04-11 09:36:24 +02:00
Martin Edenhofer
e26db17d75 Table: add no-side-padding class
used in priority column to make the column slimmer
2019-04-11 07:23:35 +02:00
Ryan Lue
a32f5bb01c Refactoring: Migrate job_test to RSpec 2019-04-10 17:50:01 +02:00
Ryan Lue
cdf4eaf92a Fix Issue 2541 migration spec (prevent leaky test setup) 2019-04-10 17:50:00 +02:00
Ryan Lue
00934ef4f4 Refactoring: Clean up SignatureDetection class 2019-04-10 14:39:13 +02:00
Ryan Lue
eb97516bfc Refactoring: Migrate signature_detection_test to RSpec 2019-04-10 14:39:13 +02:00
Jens Pfeifer
4b97d9e5d0 Added .editorconfig file 2019-04-10 11:05:51 +02:00
Felix Niklas
6f67f417ee Clock widget: render sharp on retina (support devicePixelRatio) 2019-04-09 15:54:12 +02:00
Ryan Lue
74e1fa8722 Refactoring: Migrate ticket_escalation_test to RSpec 2019-04-09 14:17:27 +02:00
Martin Edenhofer
48cccd186b Removed unless code. 2019-04-09 12:18:59 +02:00
Martin Edenhofer
668e272cfd Fixed issue #2541 - Existing scheduler email notification without body will raise an exception. 2019-04-09 11:30:43 +02:00
Ryan Lue
9a0df2729b Refactoring: Migrate {ticker,user}_ref_object_touch_test to RSpec 2019-04-08 13:48:19 +08:00
Martin Edenhofer
a11fb318d4 Use image preview in sidebar attachments list. 2019-04-08 02:19:05 +02:00
Martin Edenhofer
04c1cf2fb9 Followup for commit b1b137bb0d - verify if object manager attribute exists for user only (not locale for any other object). 2019-04-08 00:11:11 +02:00
Martin Edenhofer
ffd7ae99b1 Fixes issue #2530 - Not used SQL index with PostgreSQL in certain cases on very large setups. 2019-04-07 17:23:03 +02:00
Thorsten Eckel
44e9e04949 Maintenance: Updated rubocop to latest version (0.67.2). 2019-04-07 15:45:46 +02:00
Thorsten Eckel
fcd0708e9a Fixed bug: Auto reloading in development Rails env is broken. 2019-04-07 14:10:09 +02:00
Thorsten Eckel
55bbda9969 Refactoring: Unused code from development phase slipped into final merge. 2019-04-07 14:10:09 +02:00
Martin Edenhofer
57b17f7b81 Small memory footprint improvements. 2019-04-07 07:46:29 +02:00
Martin Edenhofer
13854f7fa7 Improved message_id generation (more random). 2019-04-05 18:18:34 +02:00
Martin Edenhofer
b6093930e3 Improved error handling. 2019-04-05 18:13:37 +02:00
Martin Edenhofer
8e25338a11 Improved inline documentation. 2019-04-05 18:12:10 +02:00
Mantas Masalskis
15687b8609 Fixed bug; Popover getting rendered multiple times and/or stuck. 2019-04-05 14:18:55 +02:00
Ryan Lue
6393e398c1 Refactoring: Migrate email_process_customer_selection_based_on_sender_recipient_test to RSpec 2019-04-05 14:13:59 +02:00
Ryan Lue
f702b34891 Refactoring: Migrate ticket_owner_reset_on_follow_up_test to RSpec 2019-04-04 20:54:41 +08:00
Ryan Lue
b65a84f95e Refactoring: Migrate email_process_follow_up_possible_test to RSpec 2019-04-03 16:15:55 +08:00
Ryan Lue
d3bbdd3b00 Refactoring: Migrate organization_ref_object_touch_test to RSpec 2019-04-02 22:43:11 +08:00
Ryan Lue
6fd6af9e75 GitLab: Add "Default" Merge Request template 2019-04-01 16:04:12 +02:00
Ryan Lue
b1b137bb0d KB Prep: Refactor & backport User#locale method 2019-04-01 09:22:29 +02:00
Mantas
b3f636a5d1 SearchableSelect retains visible text to indicate that value wasn't cleared 2019-04-01 09:48:35 +03:00
Ryan Lue
914f2f313f Refactoring: Migrate ticket_state_change to RSpec 2019-04-01 08:39:38 +02:00
Thorsten Eckel
153032e82f Follow up - 444e48e377 - Obsolete ObjectManager::Attribute data_option missing :diff option fails migration. 2019-03-28 15:03:55 +01:00
Ryan Lue
969012584a Refactoring: Migrate permission_test to RSpec 2019-03-28 08:22:40 +01:00
Felix Niklas
1870081022 Refactor ticket list
- user ticket list popover: ticket → customer → tickets
- ticket link list
- user & organization profile

now use: `generic/ticket_list.jst.eco` instead of copies of it.

Template options:
- tickets: list of tickets
- (optional) object: for example ‘Ticket’ or ‘KnowledgeBase:Answer’; needed for deletion; activates the delete UI
- (optional) linkType: defaults to ‘normal’; is additional info for deletion
2019-03-27 17:04:36 +01:00
Billy Zhou
30d3ce2b88 Upgrade mail gem from 2.6.6 to 2.7-stable to solve 4 issues:
#2362 - Attached text files get prepended on e-mail reply instead of appended
#2507 - PDF Attachments are corrupted into blank pages
#2458 - Zammad fails to parse filename\* in Content-Disposition header of attachment
#2499 - eml-File Attachments will be destroyed by zammad
2019-03-27 13:02:56 +01:00
Martin Edenhofer
3acfa4a277 Fixed issue #2089 - timezone issue with report graphs not displaying or displaying $timezone hours out of step. 2019-03-27 10:01:36 +01:00
Thorsten Eckel
8f30c37ddf users_controller.rb: removed useless Ticket.search from def search
The Ticket.search block was accidentally copypasted here in
cf16264940 and serves no purpose; its return
value isn't actually used anywhere afterwards.
2019-03-27 08:34:56 +01:00
Ryan Lue
296f37ef23 Refactoring: Clean up User.authenticate spec 2019-03-26 15:43:31 +01:00
Ryan Lue
33c44d3486 Refactoring: Migrate auth_test to RSpec 2019-03-26 15:43:31 +01:00
Ryan Lue
a2148ecc68 Knowledge Base Prep: Backport bugfix for cache key writing race condition in SearchableAjaxSelect 2019-03-26 15:41:03 +01:00
Ryan Lue
48352ece6d Extract CoffeeScript view helper methods into their own mixin 2019-03-26 15:39:45 +01:00
Ryan Lue
17fd53f175 Refactoring: Migrate email_process_sender_name_update_if_needed to RSpec 2019-03-26 15:37:38 +01:00
Ryan Lue
5b06840b33 Refactoring: Migrate user_out_of_office_test to RSpec 2019-03-26 15:29:42 +01:00
Ryan Lue
97530e0d78 Refactoring: Migrate stats_ticket_waiting_time_test to RSpec 2019-03-26 15:27:11 +01:00
Thorsten Eckel
9d7485bf71 Maintenance: Run more tests with random DB services to increase overall CI speed and ensure independence of DB layer. 2019-03-26 10:56:21 +01:00
Thorsten Eckel
c7f8045569 Refactoring: Created generic UploadCache class, controller and routes to handle attachment upload. 2019-03-26 08:37:15 +01:00
Martin Edenhofer
f5b671729d Fixed issue #2089 - timezone issue with report graphs not displaying or displaying $timezone hours out of step. 2019-03-26 01:46:09 +01:00
Thorsten Eckel
50ca3cde9c Maintenance: Run browser tests for random DB service. 2019-03-26 01:26:59 +01:00
Martin Edenhofer
f72b44234e Fixed issue #2089 - timezone issue with report graphs not displaying or displaying $timezone hours out of step. 2019-03-26 01:17:17 +01:00
Thorsten Eckel
a1bb61bf56 Maintenance: Fixed cache test that is error prone to timezone DST changes. 2019-03-25 18:41:40 +01:00
Felix Niklas
eb9767278d Common style for radios & checkboxes 2019-03-25 13:58:52 +01:00
Thorsten Eckel
d998f36f11 Updated rubocop to latest version (0.66). 2019-03-18 10:37:45 +01:00
Thorsten Eckel
e75419d40b Bugfix: Missing brackets causes calendar_subscriptions layout_ref to not render properly. 2019-03-15 12:10:37 +01:00
Thorsten Eckel
e3d2192210 Refactoring: Prefer Rails fixture_file_upload helper method instead of using Rack::Test::UploadedFile (directly). 2019-03-15 11:48:09 +01:00
Thorsten Eckel
d5bf8a533c Fixed regression: Newly created ObjectManager::Attribute::Validation breaks Spring because of already/auto loaded constants. 2019-03-15 11:04:57 +01:00
Thorsten Eckel
4e07079056 Follow up - 444e48e377 - Removed future and past data_options of Date ObjectManager::Attribute because they are not determinable due to time zones. 2019-03-15 11:04:57 +01:00
Martin Edenhofer
2ccda12cc2 Added ObjectManager::Attribute count to monitoring status result. 2019-03-14 16:31:56 +01:00
Martin Edenhofer
124d979e44 Fixes issue #2514 - Zammad Webcam-Avatar-Feature broken. 2019-03-14 15:24:44 +01:00
Ryan Lue
17ed0a13f6 Refactoring: Migrate user_mail_delivery_failed to RSpec 2019-03-14 14:01:29 +01:00
Thorsten Eckel
444e48e377 Fixed issues #1259 and #1598 by adding ObjectManager::Attribute validations. 2019-03-14 00:51:22 +01:00
Martin Edenhofer
e579c809e0 Update to rails 5.1.6.2 - CVE-2019-5419. 2019-03-13 22:42:47 +01:00
Billy Zhou
f080a144e0 Fixed #2483 - #{article.body_as_html} now includes attachments (e.g. PDFs). Fixes #2487 - Forwarding: Attachment is missing if original HTML Mail contains an image. 2019-03-11 18:17:08 +01:00
Thorsten Eckel
2f0f01a0d0 Maintenance: Fixed inconsistent usage of Setting html_email_css_font. 2019-03-11 14:35:12 +01:00
Ryan Lue
b19ac485bf Refactoring: Migrate email-process unit sub-tests to RSpec. 2019-03-11 08:28:18 +01:00
Ryan Lue
92d7ee95e0 Knowledge Base Prep: Reduce priority of Organizations in search results (so KB results appear above them) 2019-03-07 11:56:17 +01:00
Martin Edenhofer
160b521116 Fixes issue #2497 - Missing business hours validation for calendars creates infinitive loop (also for background jobs). 2019-03-07 10:00:56 +01:00
Ryan Lue
2367e1e31c KB Prep: Added App.Utils.baseUrl() and .joinUrlComponents() helper functions. 2019-03-07 09:39:16 +01:00
Thorsten Eckel
30361f1bb1 Maintenance: Go back to Selenium version 3.14.0-p19 because of failing CI jobs until https://github.com/elgalu/docker-selenium/issues/296 is resolved. 2019-03-07 09:31:55 +01:00
Ryan Lue
bb20ca6d92 Knowledge Base Prep: Prevent potential conflict from HTML elements with identical IDs 2019-03-06 22:27:44 +08:00
Martin Edenhofer
9ebf4697bb Do not log base64 encoded attachments in logfile. 2019-03-05 13:42:34 +01:00
Martin Edenhofer
cdb4042961 Fixes issue ##2504 - Login into Zammad not possible, application server puma will raise 100% or more cpu. 2019-03-05 03:52:54 +01:00
Ryan Lue
909f4b7eaf Refactoring: Migrate email_regex_test to RSpec 2019-03-04 15:32:34 +01:00
Ryan Lue
365e8db792 Knowledge Base Prep: Rescue DeleteRestrictionError with 422 Unprocessable Entity 2019-03-01 05:26:53 +01:00
Ryan Lue
bf4e1c19c6 Knowledge Base Prep: Fix name attr on tag name input field 2019-03-01 03:02:18 +01:00
Martin Edenhofer
922309b2b5 Improved after_callbacks and skip_callback behaviour on bulk changes (e. g. CSV import). 2019-02-28 15:21:59 +01:00
Ryan Lue
5b64aeb14d Implement @current method in App.User, and replace throughout codebase where appropriate. 2019-02-28 12:42:05 +01:00
Ryan Lue
9e0d535483 Update App.Session.get() method to use direct pointer to current user record 2019-02-28 09:04:56 +01:00
Martin Edenhofer
94513f4f38 Updated puma and unicorn gem to use current stable version. 2019-02-27 16:03:29 +01:00
Martin Edenhofer
a3ed795e09 Fixed import test. 2019-02-27 15:14:38 +01:00
Martin Edenhofer
ace7cea315 Refactoring: Applied factory best practices (only required attributes and values, proc based attribute assignment, sequence attribute). 2019-02-27 14:02:16 +01:00
Martin Edenhofer
d36c88d441 Fixed flanky job test. 2019-02-26 15:49:05 +01:00
Thorsten Eckel
a679c713a8 Maintenance: Gem dependency psych update causes encoding issue to be fixed. Changed test case to ensure special unicode chars are handled properly. 2019-02-26 14:42:46 +01:00
Thorsten Eckel
0fe24ab1b7 Maintenance: Updated delayed_job and delayed_job_active_record gem dependency because of usage of deprecated method which breaks rails after rubocop update - see https://github.com/rails/rails/issues/30522 and https://github.com/collectiveidea/delayed_job/pull/996 . 2019-02-26 14:42:46 +01:00
Thorsten Eckel
d2b6bff74d Maintenance: Updated rubocop to latest version (0.65). 2019-02-26 14:42:46 +01:00
Billy Zhou
399fef668d Refactoring: Simplyfied if statement and removed reference to issue #2431 because it's more of a byproduct than an actual fix. 2019-02-26 14:28:11 +01:00
Thorsten Eckel
fa0ed8c0ba Refactoring: Improve browser test suite speed by starting ruby/rails context only once for all tests by using Rails build in test running rake task. 2019-02-26 13:01:27 +01:00
Ryan Lue
ca73fdd9b7 Refactoring: Migrate *_assets_test.rb to RSpec 2019-02-26 12:00:46 +01:00
Jens Pfeifer
e48256c130 Refactoring: Removed use of unnecessary exception wrapper method response_access_deny. 2019-02-26 11:37:31 +01:00
Ryan Lue
4f494b57ac Extract renderScreen* methods into their own mixin 2019-02-26 11:27:48 +01:00
Billy Zhou
c9f3641cad pr2480 - Added Finnish translation to the chat UI. Huge thanks to @ismism48! 2019-02-25 15:53:02 +01:00
Martin Edenhofer
8831b57b9b Remove model-open class if App.ControllerModalLoading class is used without container. 2019-02-25 13:04:45 +01:00
Martin Edenhofer
12eb5381b0 Fixes #2491 - Email is not processed if attachement as "space" as filename like Content-Disposition: inline; filename="=?utf-8?b??=". 2019-02-24 15:53:58 +01:00
Thorsten Eckel
d10df2b03b Update pkgr.yml for consensisty with Ubuntu 18.04
This patch updates pkgr.yml as it seems to be inconsistent.
Ubuntu 18.04 is currently the only system missing "- libimlib2-dev" for installation dependency and "- libimlib2" for build dependency.
This looks wrong.

If you don't install libimlib2-dev manually, zammad will not start cleanly.
2019-02-24 12:15:43 +01:00
Martin Edenhofer
43d2418377 Fixes #2486 - Unable to process email on CentOS with large images but only 1px height. 2019-02-22 08:22:52 +01:00
Billy Zhou
6d7480ab3f Added new feature from issue #2469 - Add information "Ticket merged" to History 2019-02-21 06:32:21 +01:00
Ryan Lue
89385aaca6 Refactoring: Migrate search_index_backend_test to RSpec 2019-02-20 14:04:42 +01:00
Ryan Lue
c5afbaba00 Refactoring: Migrate Cti::Log test cases in cti_caller_id_test.rb 2019-02-20 14:02:18 +01:00
Ryan Lue
2dd4c74be4 Refactoring: Migrate seventh test case in cti_caller_id_test.rb 2019-02-20 14:02:18 +01:00
Ryan Lue
84d0bf605b Refactoring: Migrate sixth test case in cti_caller_id_test.rb 2019-02-20 14:02:18 +01:00
Ryan Lue
a95c4e988d Refactoring: Migrate fifth test case in cti_caller_id_test.rb 2019-02-20 14:02:18 +01:00
Ryan Lue
d425b0fd19 Refactoring: Migrate fourth test case in cti_caller_id_test.rb 2019-02-20 14:02:18 +01:00
Ryan Lue
768a350160 Refactoring: Clean up ticket/article_spec.rb 2019-02-20 14:02:18 +01:00
Ryan Lue
c02d7f2159 Refactoring: Clean up user_spec.rb 2019-02-20 14:02:18 +01:00
Ryan Lue
590a8f7614 Refactoring: Migrate third test case in cti_caller_test.rb 2019-02-20 14:02:18 +01:00
Ryan Lue
39f769aa13 Refactoring: Migrate second test case in cti_caller_test.rb 2019-02-20 14:02:18 +01:00
Ryan Lue
9bb1edea69 Refactoring: Migrate first test case in cti_caller_test.rb 2019-02-20 14:02:18 +01:00
Ryan Lue
44822d5483 Refactoring: Add example descriptions to existing Cti::CallerId spec 2019-02-20 14:02:18 +01:00
Rolf Schmidt
6839f040e0 Refactoring: Migrated Observer::Ticket::Article::CommunicateEmail::BackgroundJob (Delayed::Job) to TicketArticleCommunicateEmailJob (ActiveJob). 2019-02-20 12:18:47 +01:00
Thorsten Eckel
ff0330d5c7 Fixes issue #2464: Mails send by older mailers with x-uuencode Content-Transfer-Encoding of attachments are not processable. 2019-02-20 12:07:09 +01:00
Ryan Lue
755c8afb6e Refactoring: Migrate notification_factory_slack_template_test to RSpec 2019-02-20 12:05:35 +01:00
Ryan Lue
d281c1b177 Refactoring: Migrate ticket_customer_organization_update_test to RSpec 2019-02-20 09:30:10 +01:00
Ryan Lue
b045381d2d Remove debugging cruft (call to console.log) 2019-02-20 16:06:38 +08:00
Ryan Lue
93d2a6a76f Refactoring: Migrate migration_ror_42_to50_store_test to RSpec 2019-02-20 00:34:45 +01:00
Ryan Lue
45effb93fb Refactoring: Migrate token_test to RSpec 2019-02-19 22:03:23 +01:00
Ryan Lue
31adff6a42 Refactoring: Migrate ticket_article_time_accounting_test to RSpec 2019-02-19 22:02:44 +01:00
André Bauer
94536705e6 Merge pull request #2480 from ismism48/patch-1
Finnish translation to the chat
2019-02-19 15:25:29 +01:00
ismism48
64b015c1a5 Finnish translation to the chat
Added Finnish translation of the chat UI
2019-02-19 15:01:23 +02:00
Ryan Lue
0ab78d9f1c Refactoring: Migrate ticket_state_test to RSpec 2019-02-19 08:59:10 +01:00
Martin Edenhofer
9637d1200e Improved error handling for assets if recored got deleted in meantime. 2019-02-19 07:04:46 +01:00
Martin Edenhofer
3e50a06306 Improved content type detection for image preview of attachments. 2019-02-19 07:03:48 +01:00
Martin Edenhofer
5b24e7beaf Fixed typo. 2019-02-18 17:03:54 +01:00
Martin Edenhofer
10c47b6898 Fixed test result. 2019-02-18 15:34:13 +01:00
Martin Edenhofer
4dcc82a01a Improved error handling if ticket got deleted in the meantime. 2019-02-18 11:46:36 +01:00
André Bauer
6aa189ee09 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2019-02-15 17:34:51 +01:00
André Bauer
9005dc3463 use develop branch for build badge 2019-02-15 17:34:07 +01:00
Martin Edenhofer
76a4b66417 Fixes issue #2478 - Unable to update ticket with IE11. 2019-02-15 16:45:48 +01:00
Martin Edenhofer
20104e9b2e Updated to 2.10.0. 2019-02-14 08:40:32 +01:00
Martin Edenhofer
a2447fe4e3 Enabled debian 8 for packager.io again. 2019-02-14 06:57:28 +01:00
Martin Edenhofer
5dedd6ecfc Implemented preview feature as default feature. 2019-02-14 06:42:41 +01:00
André Bauer
11b0d4d286 fixed docker image build hook path 2019-02-13 10:52:33 +01:00
André Bauer
17acd8f992 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2019-02-12 12:39:38 +01:00
André Bauer
413d8eb03b fixed docker repo
Signed-off-by: André Bauer <andre.bauer@kiwigrid.com>
2019-02-12 12:39:03 +01:00
Thorsten Eckel
f106ad0ef0 Improved header handling. 2019-02-12 11:23:55 +01:00
André Bauer
de15ce2cdf Merge remote-tracking branch 'monotek/develop' into develop 2019-02-12 11:19:24 +01:00
Martin Edenhofer
dabce01ec2 Sanitize html for note fields of tickets, users and organizations. 2019-02-12 08:38:59 +01:00
Ryan Lue
f28cd627f8 Refactoring: Migrate notification_factory_template_test.rb to RSpec 2019-02-12 07:46:04 +01:00
André Bauer
06e1bb94dd removed exit 0 from install.sh
Signed-off-by: André Bauer <monotek23@gmail.com>
2019-02-11 23:23:25 +01:00
André Bauer
7e93c1969f fixed build badge
Signed-off-by: André Bauer <monotek23@gmail.com>
2019-02-11 22:16:41 +01:00
André Bauer
d16a5a98bd removed travis ci
Signed-off-by: André Bauer <monotek23@gmail.com>
2019-02-11 22:11:38 +01:00
André Bauer
6dc34f4f76 added circle ci
Signed-off-by: André Bauer <monotek23@gmail.com>
2019-02-11 22:05:28 +01:00
Thorsten Eckel
575606981b Updated rubocop to latest version (0.64). 2019-02-11 17:55:20 +01:00
Rolf Schmidt
b370975a01 Refactoring: Migrated Observer::Sla::TicketRebuildEscalation::BackgroundJob from Delayed::Job to Active Job. 2019-02-11 14:54:22 +01:00
Ryan Lue
b3cb67836d Refactoring: Migrate email_address_test.rb to RSpec 2019-02-11 08:46:48 +01:00
Ryan Lue
7639ef46d3 Refactoring: Migrate object_type_lookup_test.rb to RSpec 2019-02-11 08:46:26 +01:00
Ryan Lue
107fd5e995 Refactoring: Migrate ticket_article_store_empty to RSpec 2019-02-10 13:24:22 +01:00
Martin Edenhofer
63214c9327 Fixes #1589 - No localised time displayed in trigger (autoreply/slack/...) notifications. 2019-02-10 12:01:38 +01:00
Billy Zhou
487f36a5a5 Fixed #2399 - Attached images are broken on trigger reply with #{article.body_as_html} 2019-02-10 09:40:55 +01:00
Billy Zhou
f7a59c6bbd Fixed #2242, required attribute not being enforeced, for the frontend only. 2019-02-06 10:56:15 +08:00
Ryan Lue
8e52cb52a8 Remove unneeded options on ApplicationModel shared examples 2019-02-05 09:45:56 +01:00
Mantas
8d84bbb0a6 ControllerModal gets method for displaying inline alerts 2019-02-05 06:36:33 +01:00
Billy Zhou
0b472fae67 Follow up to #2456 - removed unnessary call to Mail::Encodings.value_decode and corrected test cases 2019-02-05 12:13:02 +08:00
Martin Edenhofer
d6d4b6bee4 Fixed test results with new rspec factories behaviour (now groups will have email addresses which will generate auto responder per default now). 2019-02-04 17:43:56 +01:00
Billy Zhou
d09c9c606d Fixed browser CI tests by downgrading selenium docker image to use older Firefox 64 2019-02-04 19:04:57 +08:00
Ryan Lue
a4281154d1 Fix CI failure in Ticket::Article request spec caused by limiting agent_user groups 2019-02-04 17:44:36 +08:00
Ryan Lue
9f33ca5c0a Fix EmailAddress dependency issue in Ticket factory 2019-02-04 07:56:18 +01:00
Ryan Lue
85d6d78eea Fix test failures caused by faulty id generator in ChecksImport examples 2019-02-04 07:54:39 +01:00
André Bauer
27d027773e removed travis ci addon postgres 9.4 2019-02-01 23:07:15 +01:00
André Bauer
5d044ee3b8 final travis ci mysql fix
Signed-off-by: André Bauer <monotek23@gmail.com>
2019-02-01 22:30:43 +01:00
André Bauer
82c080263f next try to fix travsi mysql
Signed-off-by: André Bauer <monotek23@gmail.com>
2019-02-01 21:10:07 +01:00
André Bauer
7c6b7d1ec5 fixed travis mysql-server install
Signed-off-by: André Bauer <monotek23@gmail.com>
2019-02-01 20:54:38 +01:00
Chikachi
2d5fc012cb Added Danish translations to chat. Huge thanks to @Chikachi! 2019-01-30 19:23:31 +08:00
Martin Edenhofer
18978ee7fe Fixed typo in ticket perform widget. 2019-01-30 11:19:46 +01:00
Thorsten Eckel
1e25d2804d Merge branch 'develop' of https://github.com/zammad/zammad into develop 2019-01-30 10:42:11 +01:00
anuzhin
1dada055ce Fixed issue #2439 - Import 'On-hold' status 2019-01-30 10:38:48 +01:00
Billy Zhou
a68f307a23 Revert "Added Danish translations to Chat (#2450)" (#2459)
This reverts commit 016e74b058.
2019-01-30 14:49:26 +08:00
Chikachi
016e74b058 Added Danish translations to Chat (#2450)
Thanks a lot to @Chikachi 😍!
2019-01-30 14:26:58 +08:00
Billy Zhou
84ff625257 Fixed #2456 - parsing utf8 encoded email subject 2019-01-30 07:12:12 +01:00
Martin Edenhofer
4a67fcd10b Fixes #2422 - Browser resize for pasted images is not resizing the image in edit view. 2019-01-30 00:34:09 +01:00
Martin Edenhofer
a17137c4a5 Improved email processing - added error/timeout handling. 2019-01-29 21:35:22 +01:00
Martin Edenhofer
295e67cb6f Fixes #2454 - Missing validation for trigger.notification.* at Model/API/REST level. 2019-01-29 15:04:47 +01:00
Martin Edenhofer
37d4abc6dd Improved error handling and performance of escalation rebuild_all. 2019-01-29 12:01:56 +01:00
Martin Edenhofer
233198ffd6 WIP. 2019-01-29 08:32:43 +01:00
Martin Edenhofer
3e0f5caffe Improved error handling if ticket already got deleted in the meantime. 2019-01-29 08:22:35 +01:00
Ryan Lue
8275b56d54 Wrap ChecksImport spec examples in a single describe block (for clearer spec report output) 2019-01-29 08:09:29 +01:00
Ryan Lue
205a99c56a Fix checks_import_examples.rb when applied to non-importable classes 2019-01-29 08:09:29 +01:00
Martin Edenhofer
2cf614d302 Fixes #2452 - Slow UI with over 150 ticket attributes. 2019-01-29 08:06:47 +01:00
Ryan Lue
46615333f9 Refactoring: Eliminate explicit coupling of classes in ChecksImport concern 2019-01-28 21:57:58 +08:00
Billy Zhou
7df5c18182 Fixed #2437 - square brackets are deleted in links 2019-01-27 15:39:37 +08:00
Ryan Lue
db69e55158 Prevent CI failure caused by factories using duplicate #name attributes 2019-01-25 14:28:15 +01:00
Ryan Lue
a97e959119 Prevent namespace collisions for let/subject in shared examples
When referencing shared example groups in specs,
use it_behaves_like instead of include_examples.
This runs shared examples in their own, nested context,
so that any top-level let/subject methods in the spec
do not leak into the shared example groups.
2019-01-25 15:51:03 +08:00
Denny Bresch
39bdbf22db Refactoring: Migrated static dashboard widgets to extendable backend structure. 2019-01-24 09:58:58 +01:00
Billy Zhou
9d8ce06948 Merged PR #2440 - Request timeout while importing large attachments from Zendesk (thanks a lot to @anuzhin 😍). 2019-01-24 08:38:53 +01:00
Ryan Lue
175db6f123 Refactoring: Migrate setting_test.rb to RSpec 2019-01-23 12:53:11 +01:00
Thorsten Eckel
a7e2f9092f Updated rubocop to latest version (0.63.1). 2019-01-22 18:10:55 +01:00
Ryan Lue
a546e7c6fd Refactoring: Migrate organization_domain_based_assignment_test.rb to RSpec 2019-01-22 17:42:39 +01:00
Ryan Lue
1d1e75c743 Refactoring: Migrate ApplicationModel::ChecksImport part of db_auto_increment_test.rb to RSpec 2019-01-22 17:35:01 +01:00
Ryan Lue
14614244cb Refactoring: Migrate ticket_priority_test.rb to RSpec 2019-01-22 09:55:39 +01:00
Mantas
1694094ea5 Allows to abort all ajax calls in the controller without releasing whole controller. 2019-01-22 08:57:47 +01:00
Felix Niklas
9e5318fdb5 Private fn chat no jquery 2019-01-22 07:12:32 +01:00
Billy Zhou
74ec8912bd Fixed #2424 - Unavailable ticket template attributes get applied 2019-01-21 18:17:18 +01:00
Marcel Herrguth
a159eaf882 Corrected facebook channel documentation link 2019-01-21 09:33:05 +01:00
Martin Edenhofer
50d85a1429 Improved monitoring amount_check, no state if no limit params are used. 2019-01-21 08:01:51 +01:00
Thorsten Eckel
d28086af95 Refactoring: On premise CI infrastructure doesn't scale. 2019-01-20 15:36:34 +01:00
Thorsten Eckel
ae5ccc11df Merge branch 'develop' into private-te-refactoring-constantize 2019-01-19 18:16:34 +01:00
Martin Edenhofer
9300fd732c Unable to open customer chat widget via separate open button. Fixes #2435 2019-01-19 16:20:31 +01:00
Billy Zhou
1c55fc0a56 Fixed #2416 - HTML sanitizer blocks email processing because of an endless loop. 2019-01-18 16:33:07 +01:00
Thorsten Eckel
cfc1bdbb45 Refactoring: NO_RESET_BEFORE_SUITE is not practical for the general use case of running RSpec multiple times and slows down/decreases DX. 2019-01-18 14:59:15 +01:00
Thorsten Eckel
a211d20db9 Refactoring: Migrated BackgroundJobSearchIndex (Delayed::Job) to SearchIndexJob (ActiveJob).
Refactoring: Enable MonitoringController to handle ActiveJob background jobs.
2019-01-18 14:58:28 +01:00
Thorsten Eckel
a84edbe764 Refactoring: Infered spec type from file location applies unwanted support files which cause tests (ApplicationJob) to fail. 2019-01-18 14:58:28 +01:00
Thorsten Eckel
3a5d597ab9 Adding ActiveJob RSpec helper for using Test queue adapter. 2019-01-18 14:58:28 +01:00
Thorsten Eckel
10110e03cb Refactoring: Rails/SkipsModelValidations cop is unnecessarily active for RSpec files. 2019-01-18 14:58:28 +01:00
Thorsten Eckel
6870c11103 Updated omniauth-google-oauth2 gem - due to Google Plus (G+) sunsetting in Q1 2019 (https://github.com/zquestz/omniauth-google-oauth2/issues/340). 2019-01-18 14:29:11 +01:00
Thorsten Eckel
f0caad9725 Stabilize tests: Unstable tests require recurring examination. 2019-01-18 11:57:16 +01:00
Thorsten Eckel
eb559755eb Stabilize tests: JS AJAX UnitTest is flanky in single process Capybara test. 2019-01-18 11:57:16 +01:00
Thorsten Eckel
5c10c2c859 Merge branch 'develop' into private-te-refactoring-constantize 2019-01-18 11:56:01 +01:00
Ryan Lue
2d5ec5d485 Add test case for removed edge case handling in Cache.clear 2019-01-18 10:25:35 +01:00
Ryan Lue
f84408dfc3 Support clearer layout of '.and change(...).to(...)' in RSpec files 2019-01-18 10:25:35 +01:00
Ryan Lue
0e6a6ff1fd Remove outdated edge case handling from Cache class 2019-01-18 10:25:35 +01:00
Ryan Lue
dbf24b2f6c Refactoring: Migrate cache_test.rb to RSpec 2019-01-18 10:25:35 +01:00
Ryan Lue
043a0af9f2 Add Null email driver (support workaround for #224) 2019-01-15 14:11:57 +01:00
Ryan Lue
7006d573b4 Refactoring: Migrate role_test.rb to RSpec. 2019-01-15 13:55:59 +01:00
Thorsten Eckel
87c3163e46 Merge branch 'develop' into private-te-refactoring-constantize 2019-01-15 13:40:09 +01:00
Thorsten Eckel
5356c9f9f1 Refactoring: Make asset fetch more robust for records referring to deleted records. 2019-01-15 13:11:07 +01:00
Ryan Lue
ce27170434 Refactoring: Capybara tests use wrong route check method. 2019-01-14 16:31:31 +01:00
Martin Edenhofer
6faaee3a97 Fixed issue #2423 - Unable to update already configured email channel, verify email will not arrive. 2019-01-14 15:53:26 +01:00
Martin Edenhofer
dadb8e207b Follow up for issue #2419 - Zammad Icon (Bird) on page top left disappears and does not come back - fixed test. 2019-01-08 23:14:47 +01:00
Thorsten Eckel
e43154c373 Refactoring: Removed unneeded screenshot taking (to speed up tests). 2019-01-07 10:22:00 +01:00
Thorsten Eckel
b2c065812f Refactoring: Migrated Kernel.const_get to Rails .constantize. 2019-01-06 19:41:29 +01:00
Thorsten Eckel
8df6e3c33b Refactoring: Use GitLab CI cache functionality to cache gem dependencies between pipelines/jobs/runners and replace obsolete zammad-application with zammad-ruby docker image. 2019-01-05 23:43:22 +01:00
Thorsten Eckel
4d0130810f Refactoring - Delayed::Job to ActiveJob migration: Allow tracking of ActiveJob#executions via Delayed::Job#attempts sync workaround. 2019-01-05 16:41:07 +01:00
Ryan Lue
50c1cfcb0a Refactoring: Migrate ticket_null_byte_test.rb to RSpec. 2019-01-04 16:29:56 +01:00
Thorsten Eckel
27b9bbd401 Updated rubocop to latest version (0.62.0) and applied required changes. 2019-01-04 15:54:33 +01:00
Martin Edenhofer
1e08fd7350 Fixed issue #2419 - Zammad Icon (Bird) on page top left disappears and does not come back. 2019-01-04 14:36:51 +01:00
Ryan Lue
caa5c96260 Refactoring: Migrate Calendar unit test to RSpec. 2019-01-04 08:37:30 +01:00
Thorsten Eckel
f289d99fbf Fixed failing CI: Date comparison checks for hour format 'HH' (as described in all comments) while App.PrettyDate.humanTime generates hour format 'H' for absolute type date strings. 2019-01-03 11:39:50 +01:00
Thorsten Eckel
0f484d0ed5 Fixed bug: App.PrettyDate.humanTime generates broken HTML markup if escalation flag is true. 2019-01-03 11:39:50 +01:00
Thorsten Eckel
178f0dfa17 Refactoring: Stopping of scheduler worker process (via SIGTERM) isn't handled gracefully and prints Error (with Backtrace). 2019-01-03 11:39:49 +01:00
Martin Edenhofer
ed448c7f50 Fixed issue #2420 - Unable to show ticket history. 2018-12-31 20:15:17 +01:00
Thorsten Eckel
3d45432f78 Fixed issue #2418 - Missing table name quoting causes MySQL 8 incompatibility. 2018-12-29 23:07:11 +01:00
Thorsten Eckel
b361b43836 Refactoring: Improving performance by memorizing app_model string generation. 2018-12-24 08:30:07 +01:00
Thorsten Eckel
197ecade07 Working around failing RSpec tests on Travis CI by skipping system tests. 2018-12-22 16:56:02 +01:00
André Bauer
75b5cba8e9 fixed travis dependencies 2018-12-22 16:39:23 +01:00
André Bauer
7bdbda0175 use xenial in travis build 2018-12-22 16:12:49 +01:00
Jens Pfeifer
21f1841f5b Refactoring: Migrated TicketUserTicketCounterJob from Delayed::Job to Active Job. 2018-12-21 17:35:15 +01:00
Jens Pfeifer
953d902a74 Refactoring: Migrated TicketOnlineNotificationSeenJob from Delayed::Job to Active Job. 2018-12-21 17:33:45 +01:00
Thorsten Eckel
4044394139 Fixed issue #2412 - i-doit version >= 1.12 integration requests fail with 'Can’t fetch objects from...' due to missing payload attribute 'id'. 2018-12-20 15:54:03 +01:00
Thorsten Eckel
76dfdbaf83 Merge branch 'develop' into private-te_rubocop_update 2018-12-20 09:16:35 +01:00
Thorsten Eckel
5491b1b910 Invited Capybara to the party 🎉 Taking browser tests to the next level 🚀. 2018-12-19 19:11:41 +01:00
Thorsten Eckel
e8a57517f4 Updated rubocop - applied custom Layout/AlignHash style. 2018-12-19 18:33:22 +01:00
Thorsten Eckel
0fd2efa0cf Refactoring: Exctracted Websocket Server logic from script file into lib backend class for better encapsulation, easier testing and reusage possibilities (e.g. Capybara). 2018-12-19 15:31:06 +01:00
Thorsten Eckel
fdfb1ca972 Refactoring: Splitted Rake CI Test start task up and created new prepare job which can be re-used. 2018-12-19 15:26:50 +01:00
Thorsten Eckel
030f80e3eb Refactoring: Allow re-usage of existing DB connection instead of creating/resetting existing one. 2018-12-19 15:26:30 +01:00
Thorsten Eckel
7ffa03731e Refactoring: Make sure Puma environment matches RAILS_ENV ENV. 2018-12-19 15:26:22 +01:00
Thorsten Eckel
b5a44ee0d0 Refactoring: Make Scheduler more robust against job deletion while processing. 2018-12-19 15:26:11 +01:00
Billy Zhou
1be60c91db Fixed #2367 - cannot sort by pending til 2018-12-19 06:40:32 +01:00
Billy Zhou
77794e0b26 Fixed #2390 - Add a filter to not show emails with potential issue - Display a… 2018-12-19 03:54:03 +01:00
Billy Zhou
0c97a66d6a Fixed #2382 - Added Option to switch the Full-Quote-Header on and off 2018-12-18 12:15:32 +01:00
Ryan Lue
2077fac218 Refactoring: Twitter webhook spec. 2018-12-18 11:40:56 +01:00
Martin Edenhofer
7326122e28 Fixed issue #2405 - Unable to load Zammad in web browser, because of online notification of ticket which was already deleted in the meantime. 2018-12-18 08:33:54 +01:00
Thorsten Eckel
5e05fadbb8 Applied required changes to run in GitLab docker CI env 🐳. 2018-12-15 00:07:21 +01:00
Thorsten Eckel
f34de820ac Test stabilization: Creation of and communication to remote Selenium browser instance fails in load intense CI scenarios. 2018-12-14 18:57:02 +01:00
Thorsten Eckel
5eed9c7506 Refactoring: Improving logging of remote browser instance creation errors by logging earlier and adding exception to log. 2018-12-14 18:54:54 +01:00
Thorsten Eckel
955608a427 Marked flanky browser tests for further investigation. 2018-12-14 18:43:10 +01:00
Thorsten Eckel
6dbb6d316a Test stabilization: Timout for maintainance message to dissappear is too low and causes test to be flanky. 2018-12-14 18:38:30 +01:00
Thorsten Eckel
8f713a96a2 Test stabilization: Reduced range of random number because to large numbers will cause the test to be flanky on CI env. 2018-12-14 18:33:29 +01:00
Thorsten Eckel
ab4e03f0ab Test stabilization:
- Use standard way to navigate to manage view.
- Use standard way to wait for closing modal dialog.
- Selected user is not system state agnostic.
- Take screenshot if group selection fails.
2018-12-14 18:29:31 +01:00
Thorsten Eckel
b2b2afb333 Test stabilization: Non standard way to wait for modal close causes flanky test. 2018-12-14 18:24:47 +01:00
Billy Zhou
3ca697dab7 Fixed #2398 - Missing custom object in database causes error on export in time_accounting 2018-12-14 22:20:06 +08:00
Martin Edenhofer
805bbcb542 Updated doc links for new structured admin documentation. 2018-12-14 10:48:39 +01:00
Ryan Lue
30beecd3e7 Improve Zendesk import when DNS resolution fails etc. 2018-12-14 02:59:19 +01:00
Thorsten Eckel
fb612f34d1 Merge branch 'develop' of https://github.com/zammad/zammad into develop 2018-12-13 16:18:46 +01:00
Jens Pfeifer
a92f7b2153 Migrated AppVersionRestartJob to Active Job. 2018-12-13 15:40:22 +01:00
André Bauer
8f999e6100 Merge pull request #2404 from kevin-olbrich/patch-1
Fix detection of local elasticsearch service
2018-12-13 14:23:28 +01:00
Ryan Lue
6e3f32825f Refactor External credentials request spec 2018-12-13 12:04:47 +01:00
Kevin Olbrich
fb8f02fa61 Fix detection of local elasticsearch service
If elasticsearch is local and the URL was set via rake cli to "localhost" instead of "127.0.0.1", the service is not restarted.
This results in a broken state (search does not work, background tasks fail, etc.) if zammad is updated together with elasticsearch.
2018-12-13 11:05:07 +01:00
Ryan Lue
ad19b532a9 Refactor user_spec.rb 2018-12-13 10:10:32 +01:00
Ryan Lue
d056feae94 Rewrite twitter_spec.rb 2018-12-13 10:06:44 +01:00
Thorsten Eckel
eed5fe1459 Refactoring: Improved logging of exceptions by using standardized way. 2018-12-13 09:42:51 +01:00
Jens Pfeifer
d7401b6a57 Refactoring: Migrated UserDeviceLogJob from Delayed::Job to Active Job. 2018-12-12 13:51:29 +01:00
André Bauer
6854ad0903 bettter license description 2018-12-12 12:44:06 +01:00
Felix Niklas
2fae7d478a Modal: position backdrop absolute instead of fixed to..
a) improve the scroll performance
b) prevent that touch/mousewheel scrolling doesn’t work in some cases
c) prevent that scrolling using the scrollbar closes the modal
2018-12-11 16:57:20 +01:00
MrGeneration
26648e3752 Update Webserver configs (apache2 and nginx)
This fixes issue 2365 and simply changes config files to ipv4-connects to the Zammad-Backend.
2018-12-11 16:13:55 +01:00
Felix Niklas
2140134ebe Avatars: support transparent avatars (png)
fixes #1807
2018-12-11 10:38:52 +01:00
Martin Edenhofer
3fb7e5bee3 Fixed issue #2397 - Unable to process emails without From (but with Sender) header. 2018-12-11 09:36:16 +01:00
Martin Edenhofer
23059d7c90 Implemented issue #2395 - Search term is deleted after I opened a object/ticket. 2018-12-07 20:48:36 +01:00
Martin Edenhofer
ecad97f5ef Fixed issue #2394 - Jump to bottom after article has been created to show that the article has been saved. 2018-12-07 15:20:47 +01:00
Martin Edenhofer
d105bc4c60 Fixed/ improved test. 2018-12-07 13:11:08 +01:00
Rolf Schmidt
079c4c9593 Fixed issue #2391 - Wrong file size calculation in monitoring controller (postgres only) 2018-12-06 15:35:00 +01:00
Ryan Lue
ffb64d65d3 Convert aaa_string_test to RSpec 2018-12-06 12:39:16 +01:00
Ryan Lue
2af6392172 Migrate email_process_identify_sender_max_test to RSpec 2018-12-06 12:35:14 +01:00
Felix Niklas
80c7dec624 lock-open icon: make it more distinguishable
- turn lock-open in a wide open lock, fixes #945
- add small-search and mood-sad icons to the sketch file (they got lost in previous merges)
2018-12-06 09:33:54 +01:00
Rolf Schmidt
14437f92f9 Migrated remaining Minitest controller tests to RSpec. 2018-12-05 11:43:53 +01:00
Billy Zhou
6ff974e6ec Fix #2344 - Missing translation for quote header timestamp 2018-12-04 18:01:44 +08:00
Felix Niklas
be7767468a RTL language: mirror arrow icon direction, fix alert icon spacing 2018-12-03 17:12:24 +01:00
Martin Edenhofer
4b4e3f67ae Updated to 2.9. 2018-12-03 15:36:23 +01:00
Martin Edenhofer
6e061ab894 Implemented issue #2023 - Twitter Account Activity API support. 2018-12-03 15:10:36 +01:00
Martin Edenhofer
6f4d584fae Improved browser unit test. 2018-12-03 13:07:07 +01:00
Martin Edenhofer
947744e502 Fixed/improved tests. 2018-12-03 09:02:04 +01:00
Ryan Lue
12fe223664 Add DB indices to histories and tickets tables (fixes #2368) 2018-12-01 13:02:06 +01:00
Thorsten Eckel
8c1ae9fe9d Test stabilization: MX check for example.com mail address should be false but it true sometimes which causes test to be flanky. 2018-11-30 08:45:13 +01:00
Thorsten Eckel
4b2630e713 Updated rails gem (CVE-2018-16476). 2018-11-28 14:43:02 +01:00
Thorsten Eckel
87b49f402a Improve reasoning of log lines in threaded processes. 2018-11-27 10:35:18 +01:00
Thorsten Eckel
f1dfbafdcd Refactoring: config.log_formatter is for all environments the same but configured in each. 2018-11-27 10:35:18 +01:00
Thorsten Eckel
19ec7fe5f1 Refactoring: Added missing _spec.rb filename suffix. 2018-11-27 10:33:39 +01:00
Thorsten Eckel
1e512f6cd0 Follow up #2345: Default value for Setting 'es_attachment_max_size_in_mb' is not in sync and to high. 2018-11-27 10:33:39 +01:00
Martin Edenhofer
6be530bb1c Improved performance of utf8_encode!() and html2text() (issue #2374). 2018-11-27 10:27:40 +01:00
Thorsten Eckel
af1781ff2a Improve performance by fetching 'fqdn' Setting in HTML sanitization only once instead for each link found (issue #2374). 2018-11-27 10:27:39 +01:00
Thorsten Eckel
4e024291a4 Improve performance by not checking empty strings or strings not containing ':' for URLs (issue #2374). 2018-11-27 10:27:39 +01:00
Thorsten Eckel
0711953beb Improved performance by checking in memory Cache TTL with integers instead of TimeZone objects (issue #2374). 2018-11-27 10:27:39 +01:00
Ryan Lue
2537dbeceb Switch to sassc-rails for faster SASS compilation 2018-11-26 10:30:21 +01:00
Martin Edenhofer
50c2a8540e Only do resizing of columns if table is shown. Followup for issue #2031. 2018-11-26 07:50:41 +01:00
Ryan Lue
aa6dd3f2ca Add Guard to Procfile (to simplify using livereload plugins) 2018-11-23 13:51:32 +01:00
Ryan Lue
2618a51f1b Fix Zendesk import failure on lowest subscription tier, aka "Essential" (fixes #2262) 2018-11-22 02:33:02 +01:00
Ryan Lue
a780745349 Hide autosaved article drafts from server logs (fixes #2363) 2018-11-21 11:37:09 +01:00
Martin Edenhofer
4ae5e656d4 Fixed typo. 2018-11-20 12:37:53 +01:00
Martin Edenhofer
ce38a6c9ab Do not set max-width to regular .dropdown-menu like delete or clone (only to shortcuts). Followup for issue #2335. 2018-11-20 11:00:34 +01:00
Martin Edenhofer
c6411fd914 Fixed resizing of table by browser window resize. Related to issue #2031. 2018-11-19 18:43:44 +01:00
Felix Niklas
f2644cd622 Textmodule widget: dynamically increase width
Only use as much space as needed but allow the dropdown to grow as big as possible (textarea width) to show as much as possible of the text module name.
2018-11-19 15:09:19 +01:00
Martin Edenhofer
1f36b5b65f Updated Italian translations in .js files. Follow for issue #2359. 2018-11-19 15:01:30 +01:00
Martin Edenhofer
ba4e3231a4 Fixed issue #2031 - Column width is resized to a non readable minimum. 2018-11-19 09:41:39 +01:00
André Bauer
9c712d2d89 Merge pull request #2359 from itbabu/patch-1
Update italian translations for chat messages
2018-11-17 21:47:29 +01:00
Martin Edenhofer
d0a36c36a8 Fixed issue #2353 - Chat does not work due to errors in WebSocket (Database connection). Credits to @d--j for providing the solution. 2018-11-17 07:34:45 +01:00
Marco Badan
ae7ef13278 Update italian translations for chat messages 2018-11-16 21:08:56 +01:00
Martin Edenhofer
ff60c57f3e Followup for issue #2330 - selecting the overviews on the I Pad does not work. 2018-11-16 00:13:05 +01:00
Martin Edenhofer
2329a1c007 Fixed issue #2345 - Elasticsearch payload is going too big if a ticket has more then 9000 articles. 2018-11-15 10:52:42 +01:00
Thorsten Eckel
fa60f25185 Fixed informal/formal mix of language in customer facing notification templates texts to formal language - as discussed in #2348 and #2350. Thanks to @Charburner who did the actual change! 2018-11-14 16:14:25 +01:00
Thorsten Eckel
db9e2800a8 Added temporary workaround for issue #2343 - Lost DB connection causes jobs to not be processed anymore. 2018-11-13 14:45:02 +01:00
Billy Zhou
5796f78c4f Fixed #2332 - Role-Filter shows inactive Roles 2018-11-12 19:56:26 +08:00
Martin Edenhofer
5bfe56b476 Follow up #2321 - In certain cases the timeout for IMAP actions isn't sufficient (e. g. expunge for 20k E-Mails takes longer than 1 minute). 2018-11-12 08:47:56 +01:00
Billy Zhou
cd65dcdb40 Fixed #2333 - Object country already exists
by adding the corresponding country attribute to the existing country column
2018-11-09 13:29:47 +01:00
Billy Zhou
f711e1019e Fix #2318 - migration 20180220171219 CheckForObjectAttributes failed 2018-11-09 13:28:14 +01:00
Martin Edenhofer
4c90a87f5b Fixed issue #2330 - selecting the overviews on the I Pad does not work.
Dropdown menus should have been on top of their backdrop because when the dropdown is triggered via the button the backdrop is inserted before after the button and before the dropdown menu. So the backdrop is behind the menu in the DOM and they could be on the same z-index but the menu would still be in front of the backdrop because of the order.

When triggering the dropdown via javascript the backdrop gets inserted behind the backdrop. Now the backdrop is overlaying the dropdown menu making its items unclickable. This only happens on touch devices because only there the backdrop gets inserted.

Change: we increase the z-index of the dropdown menu (lvl 5 to lvl 6) to be always on top of the backdrop, no matter how the elements are ordered. At the same time we increased the z-index of the elements laying on z-index lvl 6 to lvl7 which was previousely unused. This applies to the global search, modal clues and popovers.
2018-11-09 12:18:44 +01:00
Felix Niklas
0db8c28bd5 Some search enhancements and fixes. 2018-11-06 22:24:29 +01:00
Martin Edenhofer
c2f4755a6c Search query extension refactoring to use params and not arguments. 2018-11-06 17:11:10 +01:00
Thorsten Eckel
9ef3cb62c0 Updated rack gem (CVE-2018-16470, CVE-2018-16471). 2018-11-06 13:14:29 +01:00
Thorsten Eckel
ea318fb695 Fixed issue #2321 - IMAP fetch stops because of request timeout 2018-11-06 09:43:14 +01:00
Martin Edenhofer
13b3b841d5 Fixed issue #2329 - Unable to import (update) users with email addresses als lookup index written in upper letters. 2018-11-06 06:42:52 +01:00
Martin Edenhofer
27dfeacf1d Fixed calendar test with timezones. 2018-11-05 06:03:04 +01:00
Martin Edenhofer
75230c3db3 Fixed issue #2327 - Websocket messages are not working correctly via Ajax long polling (e. g. multiple browser tabs can get opened with one session). 2018-11-02 18:42:57 +01:00
Martin Edenhofer
764d262cff Implemented issue 2326 - Add AccountedTime to tag selection for text modules or triggers. 2018-11-02 08:39:22 +01:00
Martin Edenhofer
a97e261ac7 Improved monitoring controller with amount_check (e. g. monitoring will alert about unusual amount of ticket creation). 2018-11-02 07:35:28 +01:00
Martin Edenhofer
385d6e69da Stabilised test. 2018-11-01 08:18:50 +01:00
Martin Edenhofer
41ef5fa789 Follow up for issue #2324 - improved comments and test - Improved error handling of invalid tag for text modules and add current time format (to not use 2018-10-31T08:02:21.917Z format). 2018-11-01 07:33:12 +01:00
Martin Edenhofer
9bed6c8a9b Fixed issue #2324 - Improved error handling of invalid tag for text modules and add current time format (to not use 2018-10-31T08:02:21.917Z format). 2018-10-31 17:41:35 +01:00
Martin Edenhofer
d53a848331 Updated loofah gem (CVE-2018-16468). 2018-10-31 06:54:03 +01:00
Billy Zhou
a960cdf422 Fixed issue #2042 - incorrect notification when closing a tab after setting up an object (fixes #2042) 2018-10-30 22:51:20 +01:00
Martin Edenhofer
a2c52538be Enabled Placetel integration. Added user info via Placetel API lookup (optional). 2018-10-30 17:00:33 +01:00
Ryan Lue
66e8d58f29 Show list of customer/org tickets in created_at order (fixes #2296) 2018-10-30 13:28:37 +01:00
Billy Zhou
bbabae7c2c Fixed issue #1568 - select attribute in trigger shows internal id (fixes #1568)
This alternative approach does not use the database_cleaner gem.
2018-10-30 08:37:53 +01:00
Martin Edenhofer
aa363ee130 Define max attempts for elasticsearch background job (to not endless queue not indexable items). 2018-10-29 16:21:25 +01:00
Martin Edenhofer
9fc841d7a1 Merge branch 'develop' into private-rl_2278_email_display_name 2018-10-29 13:59:36 +01:00
Martin Edenhofer
cefe250c8f Fixed admin calendar sla test (time zone adjustment). 2018-10-29 13:58:20 +01:00
Martin Edenhofer
0cf674dd15 Updated germany translation. 2018-10-29 11:32:38 +01:00
Ryan Lue
fc9b8de922 Ignore <img src="cid:..."> in forward-email text field (fixes #2305) 2018-10-29 16:18:03 +08:00
Denny Bresch
96eaac4771 Fixed typo 'Mai' to 'May'. 2018-10-26 09:31:46 +02:00
Martin Edenhofer
195e264cb8 Added article to placeholder options. 2018-10-25 10:30:26 +02:00
Martin Edenhofer
004d3c1cbb Updated for 2.8.0. 2018-10-25 07:29:39 +02:00
Martin Edenhofer
dd583d753c Fixed mysql/mariadb issue (Mysql2::Error: Invalid default value for 'initialized_at'). 2018-10-25 03:03:01 +02:00
Martin Edenhofer
f074c0c734 Followup for issue #1394 - Reindex elastic search not possible because of <null>/Twitter::NullObject. 2018-10-25 01:46:43 +02:00
Thorsten Eckel
e0fd1e52ec Fixed usage of wrong assert (which resulted in always true/success by checking hard coded values). 2018-10-24 10:07:53 +02:00
Felix Niklas
a3e531af21 Avatars: replace image with initials when printing 2018-10-23 15:38:43 +02:00
Billy Zhou
47120f0585 Fixed regression introduced by 8fb46b0448 where replying to a phone ticket no longer works 2018-10-23 05:27:18 +02:00
Martin Edenhofer
5492f4f24f Followup for issue #1394 - Reindex elastic search not possible because of <null>/Twitter::NullObject. 2018-10-23 05:03:26 +02:00
yasirazgar
2f0171b6db change real name to display name in email account add 2018-10-19 20:23:00 +05:30
Ryan Lue
8b554e9d66 Use zammad-deps github repos for custom-patched dependencies 2018-10-19 08:59:50 +02:00
Thorsten Eckel
3d49bf32c8 Fixed bug: Application is in undefined state while using spring because of usage of 'require' instead of 'require_dependency' to track dependencies. 2018-10-19 08:58:12 +02:00
Thorsten Eckel
b538b05209 Switched over to DB reset strategy in tests and removed DatabaseCleaner because it can't guarantee a clean DB state for all test scenarios. 2018-10-19 08:58:12 +02:00
Thorsten Eckel
7d9c087a84 Fixed bug: RSpec tests are broken because of not using RSpec hooks and structures. 2018-10-19 08:58:12 +02:00
Thorsten Eckel
f3e20bca29 Improved ObjectManager::Attribute factory defaults. 2018-10-19 08:58:12 +02:00
Thorsten Eckel
28793f1338 Fixed bug: Tests are not ID agnostic. 2018-10-19 08:58:12 +02:00
Thorsten Eckel
b80cfda86e Added ENV NO_RESET_BEFORE_SUITE to allow RSpec test suite start without DB reset (for e.g. running single tests where no DB reset is needed). 2018-10-19 08:58:12 +02:00
Martin Edenhofer
c8ab4275d6 Fixed issue #2297 - rake searchindex:rebuild is not working after Elasticsearch 2.4 upgrade to Elasticsearch 5.6 "Limit of total fields [1000] in index" 2018-10-19 00:40:57 +02:00
Thorsten
e8e0bf93b9 Merge pull request #2295 from maysam/patch-1
Fixed link to Telegram Bot registration documentation.
2018-10-18 15:31:33 +02:00
Maysam Torabi
21617f7c2f Update bot_add.jst.eco 2018-10-18 16:55:31 +03:30
Martin Edenhofer
bca9312ce0 Follow up for issue #2292 - improved migration. 2018-10-18 13:20:39 +02:00
Denny Bresch
cdb0895984 Added new stylesheets directory 'addons' to store all addon css files. 2018-10-18 11:44:39 +02:00
Martin Edenhofer
86c2df69ad Fixed issue #2292 - CTI Log: duration_talking_time is incorrect and after update initialized_at is a string (not timestamp) 2018-10-18 11:42:37 +02:00
Billy Zhou
fb24de11cc Fixed issue #2279 - performance issue in bulk action selection in overview (fixes #2279) 2018-10-17 10:19:19 +02:00
Martin Edenhofer
5b38c9e546 Improved migration. 2018-10-16 16:44:19 +02:00
Martin Edenhofer
c35e2a0aab Removed debug information. 2018-10-16 16:43:58 +02:00
Martin Edenhofer
a160c518e1 Merge branch 'develop' into private-me-several_enhancements 2018-10-16 16:42:31 +02:00
Martin Edenhofer
3f284003eb Improved doc. 2018-10-16 16:38:20 +02:00
Martin Edenhofer
23f499dffc Improved test. 2018-10-16 16:37:46 +02:00
Martin Edenhofer
d0bafea5e7 Improved test. 2018-10-16 16:35:31 +02:00
Martin Edenhofer
7972ec9b6c Added twilio test jobs. 2018-10-16 16:33:30 +02:00
Thorsten Eckel
0cca58f0b7 Missing GitLab CI browser tag causes job to run on non-browser CI server and fail. 2018-10-16 13:11:27 +02:00
Thorsten Eckel
2ad28ecfcc Fixed unstable tests: ObjectManager Attribute creation/migration fails on fast/slow systems. 2018-10-16 13:11:27 +02:00
Thorsten Eckel
18cec289b6 Fixed bug: Having multiple associations to different attributes of one Model lead to invalid association data. 2018-10-16 13:11:27 +02:00
Billy Zhou
ea12b0f676 Fixed issue #2277 - note is not shown for customer/organisations if it's empty (fixes #2277) 2018-10-16 10:57:58 +02:00
Martin Edenhofer
22b2f44ba0 Initial SMS integration for trigger notifications and additional channel. Thanks to sys4 AG! 2018-10-16 10:45:15 +02:00
Martin Edenhofer
271102057d Initial Placetel integration. 2018-10-15 11:47:59 +02:00
Martin Edenhofer
402b28b3e7 Fixed issue #2285 - Permission issue: response templates only usable when admin is also agent. 2018-10-12 13:05:37 +02:00
Billy Zhou
b1caed65f5 Fixed issue #2273 - Bulk Form javascript error when checking item (fixes #2273) 2018-10-12 16:28:37 +08:00
Martin Edenhofer
6439203900 Fixed issue #2281 - O365/Office365 authentication missing given- and surname. 2018-10-11 14:40:12 +02:00
Martin Edenhofer
7dd6675552 Implemented issue #2223 - Callback issue when Zammad if internal and external FQDN differ. 2018-10-10 15:26:32 +02:00
Billy Zhou
5ff371f51b Fixed issue #2246 - Records in Reporting not updated when single ActiveRecord can not be found (fixes #2246) 2018-10-10 09:12:48 +02:00
Ryan Lue
58a8c047bb Prevent LDAP sync from needlessly deactivating inactive users (fixes #2256) 2018-10-10 08:23:45 +02:00
Billy Zhou
bfccecc012 Fixed issue #2195 - Search with id:123 does not work anymore (fixes #2195) 2018-10-09 09:46:28 +02:00
Thorsten Eckel
f15ac3be7e Follow up - 9af50f2a4e: Fixed Layout/EmptyLineAfterGuardClause rubocop complain. 2018-10-09 08:22:20 +02:00
Thorsten Eckel
9af50f2a4e Updated rubocop to latest version (0.59.2) and applied required changes. 2018-10-09 08:17:41 +02:00
Thorsten Eckel
3d4d5414f1 Fixed stuck CI env: Organization search results in endless loop while creating a user because ES is not ready yet. 2018-10-08 15:51:58 +02:00
Martin Edenhofer
3a5cd0bce5 Implemented issue #2270 - Italian and Spanish translations for notifications. 2018-10-08 14:04:55 +02:00
André Bauer
e2deedef28 Merge pull request #2269 from vaibhavgeek/develop
Update zammad_ssl.conf
2018-10-07 22:39:34 +02:00
Vaibhav Maheshwari
f19b14f31f Update zammad_ssl.conf
Use return 301 instead of rewrite.
2018-10-08 02:04:32 +05:30
Thorsten
f74bcdda5b Merge pull request #2268 from zammad/te-travisci_fix
Fix failing Travis CI build
2018-10-07 20:51:14 +02:00
Thorsten
fbc167944c Update .travis.yml 2018-10-07 20:16:35 +02:00
Thorsten Eckel
22ba8f8fcb Fixed bug: Form request spec is not testing ES search (DB only). 2018-10-07 14:24:55 +02:00
Thorsten Eckel
02ba0e455e Added db_strategy (:truncaction) meta helper to switch to DB cleanup via truncation (from transaction) for single examples. We choose to stick to Rails/RSpec transactional cleanup over DatabaseCleaner transaction strategy because of performance reasons. Rails default performs between 30 and 50% better. 2018-10-07 14:24:55 +02:00
Thorsten Eckel
44e89271fe Refactoring: Momorize result and more idiomatic ruby. 2018-10-07 14:24:55 +02:00
Thorsten Eckel
e006684c83 Added RSpec support file to initialize database into clean state before running suite. 2018-10-07 14:24:55 +02:00
Thorsten Eckel
50162cc250 Refactoring: Split up RSpec rails_helper into separate support files. 2018-10-07 14:24:55 +02:00
Thorsten Eckel
a00f3c51a8 Improved RSpec suite by having dedicated last_admin_check meta attribute instead of polluting the whole suite (and adding side effects by being to assumtious). 2018-10-07 14:24:55 +02:00
Thorsten Eckel
86bab028a4 Fixed bug: Setting change_id is always nil after re-initializing of app in test env and prevents (re-)loading of Settings. 2018-10-07 14:24:55 +02:00
Thorsten Eckel
83ed53d245 Fixed bug: Re-seed-ing not possible in same process because require_relative loads file only once. 2018-10-07 14:24:55 +02:00
Thorsten Eckel
8d078e7398 Fixed bug: Argon2 secret differs after app-reinitialization in test env. 2018-10-07 14:24:55 +02:00
Thorsten Eckel
dbcac7083c Made spec indenpenent of user id. 2018-10-07 14:24:55 +02:00
Thorsten Eckel
1897e3a76c Fixed filename typo. 2018-10-07 14:24:55 +02:00
Martin Edenhofer
e42725246f Updated nokogiri gem (CVE-2018-14404). 2018-10-05 07:12:46 +02:00
Thorsten Eckel
a3444472ea Fixed issue #742: IPs in Sessions list are all 'localhost'. 2018-10-04 11:57:56 +02:00
Martin Edenhofer
f5c588be0b Implemented issue #2261 - Make stats store and cti log searchable via elastichsearch & destroy stats store if user got deleted. 2018-10-03 08:23:22 +02:00
Billy Zhou
8fb46b0448 Fixed issue #2184 - Reply does not work as expected (fixes #2184) 2018-10-02 06:50:04 +02:00
Billy Zhou
381e00b74f Fixed issue #2173 - Invalid date causes errors (fixes #2173) 2018-10-02 06:45:52 +02:00
Thorsten Eckel
6718d2eb7c Invited spring to the party 🎉 Taking development speed to the next level 🚀- Enable via ENV 'ENABLE_SPRING'. 2018-10-01 22:00:26 +02:00
Thorsten Eckel
e4d7dc449f Refactoring: DRYed up .gitlab-ci.yml. 2018-10-01 19:41:17 +02:00
Ryan Lue
97b17caea4 Test and fix time accounting API endpoint bug (replaces #2243) 2018-09-28 08:49:06 +02:00
Martin Edenhofer
8e99a010ca Improved external credential managment via rest controller. 2018-09-26 11:51:53 +02:00
Martin Edenhofer
6c82931245 Improved error handling if file already exists in file store (verify if file is corrupt in filesystem and remove it in case). 2018-09-26 10:06:48 +02:00
Martin Edenhofer
ce9ebe828f Fixed issue #2255 - CTI: Limit used caller log states and prevent race conditions (if callback comes later). 2018-09-25 16:52:46 +02:00
Martin Edenhofer
cff3dba0a8 Improved quote line, reduced length by removing email address. 2018-09-25 15:27:54 +02:00
Billy Zhou
280ab7471f Extended the fix for issue #2233 to cover User objects as well. Also added hiding of empty string attribute fields. 2018-09-25 14:59:32 +02:00
Billy Zhou
9c02d2e02b Added signatureIdentifyByHtml to detect signatures and blockquotes through HTML nodes. 2018-09-25 11:43:52 +02:00
Martin Edenhofer
e31d2751cf Fixed issue #2254 - Unable to process spam email "ERROR: #<Exceptions::UnprocessableEntity: Invalid email>". 2018-09-24 20:16:28 +02:00
Martin Edenhofer
567daf0053 Fixed issue #2253 - Unable to index elasticsearch if article.preferences[:delivery_status_message] has no utf8 charset. 2018-09-24 15:21:21 +02:00
Martin Edenhofer
1568909afb Fixed issue #2252 - Unable to process email "ERROR: #<NoMethodError: undefined method match' for nil:NilClass>"`. 2018-09-24 11:21:30 +02:00
Thorsten
e6f434328d Merge pull request #2251 from mbeijen/404
Fixed typo in 404: Ressource -> resource
2018-09-24 08:22:46 +02:00
Michiel Beijen
818f88c352 Fixed typo in 404: Ressource -> resource 2018-09-24 08:15:02 +02:00
Billy Zhou
8bf3ab24d5 Fixed issue #2233 - Boolean object set to false is not visible (fixes #2233) 2018-09-21 16:21:55 +02:00
Martin Edenhofer
9a7118123d Fixed issue #2245 - Unable to process spam mail with invalid date field. 2018-09-20 18:54:54 +02:00
Billy Zhou
45fee1b752 Fixed issue #2026 by checking for change permission before showing bulk action form (fixes #2026) 2018-09-20 08:24:00 +02:00
Billy Zhou
dc8748896d Fixed #2236 by adding instance_method_already_implemented? check for invalid attribute names (fixes #2236) 2018-09-19 17:08:31 +02:00
Martin Edenhofer
dd848ad135 Added new pretty_date_format option "timestamp" to show only the timestamp e. g. "2018-09-19 15:25". 2018-09-19 16:49:27 +02:00
Rolf Schmidt
208ed18fdd Removed obsolete test exeuction of controller tests in travis (because they are migrated to rspec now). 2018-09-19 16:46:30 +02:00
Billy Zhou
1efcb9d89f Fixed issue #2235 - Overview setting isn't applied on submit (fixes #2235) 2018-09-19 16:42:52 +02:00
Rolf Schmidt
29b616d61d Refactored all controller mini tests and migrated them to rspec request specs 2018-09-19 15:54:49 +02:00
Martin Edenhofer
769fb19064 Added missing admin.time_accounting permission entry. 2018-09-19 09:22:08 +02:00
Felix Niklas
46db068a65 Print: support modals
if a modal is open the whole modal gets printed, hiding the content behind, the close x and the modal footer.
2018-09-18 14:57:11 +02:00
Billy Zhou
ccf97ee077 Issue #2232 hide inactive report profiles 2018-09-17 09:01:17 +02:00
Mantas
9d5b83169d Popovers refactoring 2018-09-13 15:08:39 +02:00
Martin Edenhofer
254c8c1e4b Improved error handling of system_agent_limit setting it the number was supplied as string. 2018-09-13 11:38:12 +02:00
Martin Edenhofer
54e65e5156 Implemented issue #2228 - Global Bcc for all outgoing emails for external archive options. 2018-09-13 09:09:05 +02:00
Martin Edenhofer
cd93bccfed Updated rubyzip to v1.2.2. 2018-09-12 06:26:09 +02:00
Ryan Lue
68861cab31 Update RSpec to 3.8.0 2018-09-12 02:48:06 +02:00
Ryan Lue
e07f41ed16 Automate clearing of broken LDAP configurations (fixes #2140) 2018-09-12 02:48:06 +02:00
Billy Zhou
4f6503593e Fixed #1690 - renaming tags will break overviews condition 2018-09-11 16:57:48 +02:00
Ryan Lue
3c1e8ba123 Modify SQL in RecentView factory to support MySQL 2018-09-11 12:58:17 +02:00
Ryan Lue
d51d22213f Refactor RecentView 2018-09-11 12:58:17 +02:00
Ryan Lue
768788da7e Order results of RecentView.list (fixes #2194) 2018-09-11 12:58:17 +02:00
Ryan Lue
6bc72e6b46 Migrate RecentView test from Minitest to RSpec 2018-09-11 12:58:17 +02:00
Martin Edenhofer
dd722f94c9 Improved UX if ticket title is ''. 2018-09-11 08:44:51 +02:00
Thorsten Eckel
ccbf10cb7a Fixed Rails namespace lookup issue and removed remaining foreign key records in Token table when deleting a user. 2018-09-10 14:35:12 +02:00
Martin Edenhofer
9d860fbc03 Fixed issue #2227 - Unprocessable email ERROR: #<ArgumentError: invalid byte sequence in UTF-8> and improved email parser tests to also verify attachments. 2018-09-07 14:20:11 +02:00
Martin Edenhofer
33346ddea9 Do not display article meta links text at all (because it's not important to know that there is a raw download link if you want to print it). 2018-09-06 19:06:09 +02:00
Felix Niklas
7236e2e703 Print: prevent chrome from displaying urls when printing links 2018-09-06 18:18:52 +02:00
Felix Niklas
2733581551 Overview print: remove padding 2018-09-06 15:21:17 +02:00
Felix Niklas
83da6332da Overviews: fix table width when printing 2018-09-06 15:20:04 +02:00
Felix Niklas
d2a5a32954 Overview: optimize layout for print 2018-09-06 08:48:59 +02:00
Ryan Lue
fa678f938a Support processing of emails with Windows-1258 encoding (fixes #2224) 2018-09-06 04:07:30 +02:00
Felix Niklas
d9528438bc Ticket print: remove empty scrollbar 2018-09-05 13:12:14 +02:00
Felix Niklas
000c188d0c Ticket print: Firefox multi-page fix, remove colors, show meta
Incorporates the Firefox multi-page fixes (display: flex print bug) from @MrGeneration

see #2162
2018-09-05 12:33:28 +02:00
Martin Edenhofer
cc4ce92072 Only allow 1800 loops in a thread, to prevent email IMAP fetch stops working if mailserver is once unreachable. Fixes issue#1861. 2018-09-05 07:14:39 +02:00
Martin Edenhofer
15d8cb213d Enable Rack::LiveReload via environment variable RAKE_LIVE_RELOAD. 2018-09-04 16:54:38 +02:00
Martin Edenhofer
5bfa535b62 Improved initial import and sync of translations (about 5-8 times faster). 2018-09-04 13:37:51 +02:00
Ryan Lue
b58fcbb5fc Really fix regression introduced in 23879bc (fixes #2220) 2018-09-04 11:49:44 +02:00
Ryan Lue
19319d9d83 Fix nil handling regression from #2152 fix 2018-09-03 15:20:00 +08:00
Martin Edenhofer
9e124593b6 Merge branch 'develop' of github.com:zammad/zammad into develop
# Conflicts:
#	app/assets/stylesheets/print.scss
2018-09-02 13:18:24 +02:00
Felix Niklas
752a65e9ba Print layout: fix cut off when printing a ticket
+ show full articles (disable show more) when printing.

fixes #2162
2018-09-02 10:20:57 +02:00
Mr.Generation
a370d01e29 Fix printview for browsers (Issue#2162)
This patch fixes the currently broken view of ticket zoom (when you try to print a ticket). All "read more" tags will be "open" so that you get the full artcle content. The scrollbar is now hidden and you can also print all pages. 

Verified on current Chrome and Firefox. In case this brakes the print overview within the browser, I'll fix that on Monday - promise!
2018-08-31 20:12:27 +02:00
Ryan Lue
81a6fc3d97 Stop converting binary user attributes to text during LDAP setup (fixes #2140) 2018-08-31 17:27:57 +02:00
Martin Edenhofer
925ff56066 Private me issue2219 reopen delivery delay message 2018-08-31 17:17:59 +02:00
Martin Edenhofer
2774bc207d Fixed issue #2218 - CTI Caller Log blocks user deletion/destroy and fails 2018-08-31 12:25:06 +02:00
Ryan Lue
ec74d56b77 Improve handling of emails from addresses with spaces (fixes #2198) 2018-08-30 10:39:50 +02:00
Thorsten Eckel
7c1a4d413c Added new FactoryBot factories for SLA and Calendar. 2018-08-30 08:27:20 +02:00
Thorsten Eckel
ee176d3761 Moved RSpec Webmock configuration in own support file and allowed requests to Google for Calendar setup. 2018-08-30 08:27:20 +02:00
Ryan Lue
2d8badcb8c Added TCR dependency for replaying TCP connections in tests. 2018-08-29 08:54:14 +02:00
Ryan Lue
f046c80c79 Improve 'URL' parsing in Avatar model (fixes #2199) 2018-08-28 14:51:01 +02:00
Thorsten Eckel
f0690f8754 Added dependency vulerability check exclusion for CVE-2018-1000544 (https://github.com/rubyzip/rubyzip/issues/369) which only affects test env (selenium-webdriver dependency) until it's resolved (https://github.com/rubyzip/rubyzip/pull/376). 2018-08-27 14:43:31 +02:00
Ryan Lue
a25d094d5f Ensure CTI Log caller ID entries include user organization names (fixes #2075) 2018-08-27 03:24:21 +02:00
Ryan Lue
902300e840 Refactor NotificationFactory and support custom templates (replaces #2081) 2018-08-24 11:55:36 +02:00
Thorsten Eckel
fb697f6ae7 Test stabilization: Fixed timing issue in time comparsion by allowing 1 second off. 2018-08-24 11:32:41 +02:00
Thorsten Eckel
04e1dc78bd Fixed issue #2197: Chat-Widget disappears after close. 2018-08-24 11:30:37 +02:00
Ryan Lue
ae8fa91260 Remove quotation marks from email addresses (fixes #2154) 2018-08-24 14:45:34 +08:00
Ryan Lue
f848f8d151 Refactor validations and callbacks on ObjectManager::Attribute (fixes #2159) 2018-08-24 03:39:17 +02:00
Martin Edenhofer
1bc9f245e6 Fixed issue #2209 - Order of relation select fields (Group, State etc.) values is broken. 2018-08-23 22:23:05 +02:00
Thorsten Eckel
2c86e2cae1 Don't sync cherry-pick branches over to Github. 2018-08-23 15:43:37 +02:00
Billy Zhou
9be7269646 Fixed issue #2206 and #2207 by limiting historical_options to only select attributes 2018-08-23 15:24:45 +02:00
Ryan Lue
fddc165d86 Clarify RSpec example cases 2018-08-23 10:54:24 +02:00
Ryan Lue
28db7f1434 Add happy path test cases to Exchange folder encoding fix 2018-08-23 10:54:24 +02:00
Ryan Lue
b902fe10ae Revert changes from previous commit 2018-08-23 10:54:24 +02:00
Ryan Lue
5888f1ba44 Preliminary fix per code review [skip ci] 2018-08-23 10:54:24 +02:00
Ryan Lue
7d63868996 Force UTF-8 encoding for Exchange folders (fixes #2152) 2018-08-23 10:54:24 +02:00
Billy Zhou
2656ee965c Corrected mistake in reply creation time (article.created_at) and removed extra <br> from quote header formatting 2018-08-23 10:49:44 +02:00
Martin Edenhofer
61b1a8733f Fixed issue #2204 - Max size of tabs is not recognised 2018-08-23 02:13:00 +02:00
Thorsten Eckel
4dec6209dc Test stabilization: Extended user creation browser helper by phone and active attribute. 2018-08-22 21:24:28 +02:00
Thorsten Eckel
79ff7a66fc Fixed broken test: Check of wrong result order. Default is newest first but test checks oldest first. 2018-08-22 20:44:39 +02:00
Thorsten Eckel
6682037e3c Test stabilization: Travel back after each test to avoid missing cleanup of stubbed Time objects. 2018-08-22 20:44:31 +02:00
Ryan Lue
b0c53fe925 Private rl 2056 autorefresh translation list 2018-08-22 12:45:11 +02:00
Martin Edenhofer
64c6d706c6 Fixed issue #2200 - Unable to process email EncodingError: could not find a valid input encoding. Needed to downgrade mail gem because of parsing issues of valid mime issues. 2018-08-22 12:05:14 +02:00
Billy Zhou
35a2e991a6 Fixed issue #1426 by adding full time format string to Email quotes (fixes #1426) 2018-08-22 09:55:39 +02:00
Billy Zhou
10007e6409 Fixed issue #1864 - Bulk-Action: Not possible to change owner (fixes #1864)
See merge request zammad/zammad!8
2018-08-22 02:59:08 +02:00
Billy Zhou
16a4c2dcd1 Renamed alternative_user_options to possible_groups_owners 2018-08-21 16:22:04 +08:00
Martin Edenhofer
d22164631d Improved regex to also match host without new line at the end. 2018-08-21 08:03:51 +02:00
Billy Zhou
d42d0ff469 Addressed QA comments on merge request 8 2018-08-21 12:58:54 +08:00
Billy Zhou
54055bcc5d Switch to overview_open 2018-08-20 19:53:44 +08:00
Billy Zhou
943c793232 Fixed issue #2020 by checking against past select attribute options (fixes #2020) 2018-08-20 15:12:23 +08:00
Martin Edenhofer
a8642d3ed0 Follow up for issue #2193 - re-enabled shown anonymous if no caller is exists. Fixed triggering event of new/changed caller log items. 2018-08-17 16:12:28 +02:00
Billy Zhou
1f7841340c Fixed issue #2020 by checking against past select attribute options (fixes #2020) 2018-08-17 17:45:58 +08:00
Martin Edenhofer
c60be2140e Fixed issue #2193 - Puma performance is going worst if users with phone attribute are updated or new tickets are created. 2018-08-17 09:48:12 +02:00
Martin Edenhofer
a284421ed7 Fixed issue #2191 - Sometimes automatisation is not executed. 2018-08-16 15:12:55 +02:00
Martin Edenhofer
6cd63bde54 Added api doc to controller (and also to docs repo). 2018-08-16 13:13:20 +02:00
Thorsten Eckel
e619fceb28 Follow up: Fixed issue #2183 - Mysql2::Error: Invalid default value for 'start_at'. 2018-08-16 09:32:58 +02:00
Ryan Lue
1f3da97cc9 Avoid saving users during LDAP import if unchanged (fixes #2187) 2018-08-16 09:53:46 +08:00
Thorsten Eckel
c6e6423dd0 Fixed issue #2183 - Mysql2::Error: Invalid default value for 'start_at'. 2018-08-15 21:43:38 +02:00
Martin Edenhofer
cc326ad93b Follow up for issue #2171 - Overview not showing unassigned tickets "if not defined" (e. g. for owner but also for select or input fields). 2018-08-15 17:16:41 +02:00
Martin Edenhofer
1306ca16a9 Implemented issue #2188 - WebApp (monitoring section) claims scheduler not running, if delayed jobs get too many. 2018-08-15 09:11:48 +02:00
Billy Zhou
9c600bbfe5 Fixed issue #1864 - Bulk-Action: Not possible to change owner (fixes #1864) 2018-08-14 12:41:59 +08:00
Ryan Lue
88938024cd Adjust Channel::EmailParser#parse to try charset supplied in header (fixes #2167) 2018-08-13 16:01:23 +08:00
Ryan Lue
4ec3f1324d Change call log to display inactive users with strikethrough (fixes #2096) 2018-08-10 17:43:54 +08:00
Martin Edenhofer
abd3332524 Improved migration. 2018-08-10 08:09:03 +02:00
Martin Edenhofer
e36bf7ef53 UpdatedUpdated CHANGES. 2018-08-10 02:36:07 +02:00
Martin Edenhofer
101d7d975c Use rake script for elasticsearch index deletion. 2018-08-10 02:14:51 +02:00
Martin Edenhofer
72792fadd6 Improved data structure of cti caller log to get better statistics. 2018-08-09 23:58:01 +02:00
Ryan Lue
a93f81e20b Make String#utf8_encode more robust (fixes #2176) 2018-08-09 18:54:51 +08:00
Martin Edenhofer
be11e9a1d5 Added headless support for ff and chrome. 2018-08-09 06:05:41 +02:00
Martin Edenhofer
e9c26a5f7c Enabled cti integration for RPM installations. 2018-08-09 06:04:33 +02:00
Martin Edenhofer
c73d48485b Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-08-09 06:03:50 +02:00
Billy Zhou
428c68d06a Fixed issue #2170 by moving channel setting to the model 2018-08-08 20:34:49 +08:00
Martin Edenhofer
a7d21e416b Improved notification logging for better support/debugging. 2018-08-07 14:49:32 +02:00
Martin Edenhofer
768fdf08a0 Follow up for issue #1267 - added Russian translation. 2018-08-07 12:38:20 +02:00
Martin Edenhofer
1755163c00 Fixed issue #2172 - Do not allow to create pre existing attributes like updated_at via object manager. 2018-08-06 20:44:37 +02:00
Martin Edenhofer
0c7c33b64c Fixed issue #2171 - Overview not showing unassigned tickets "if not defined". 2018-08-06 19:36:27 +02:00
Martin Edenhofer
ce5f5a035e Fixed issue #2108 - 30 concurrent agents + each of them 30 overviews - script/scheduler.rb takes 100% CPU time - background jobs cannot be processed. 2018-08-06 12:57:24 +02:00
Billy Zhou
fb0ef19e7d Fixed issue #1616 by adding adding observe active: true to org profile 2018-08-03 23:00:06 +08:00
Ryan Lue
9b495847d2 Restore missing email parser test cases 2018-08-03 14:07:01 +08:00
Martin Edenhofer
e5cd5ce845 Fixed issue #2164 - i-doit: Double click needed to select object after searching (w/o category). Fixed issue #2165 - i-doit: Setting object before filling in the ticket information removed the i-doit objects. 2018-08-02 23:21:13 +02:00
Billy Zhou
b358374ff5 Fixed issue #2141 by switching to strict_decode64 for validating base64 content 2018-08-02 18:04:09 +08:00
Ryan Lue
e341d07d6b Stop wrapping <a> tags around URLs without a scheme/protocol (fixes #2139) 2018-08-02 16:21:59 +08:00
Billy Zhou
4479e180bd Fixed issue #2141 by switching to strict_decode64 for decoding base64 2018-08-02 10:43:18 +08:00
André Bauer
59b8ccde1f get elasticsearch index from settings too 2018-07-31 12:01:02 +02:00
André Bauer
4a610346cc some additions for external elasticsearch servers 2018-07-31 10:06:20 +02:00
André Bauer
0dec2e5045 fix elasticsearch setting on update 2018-07-31 08:29:04 +02:00
Felix Niklas
fbf6133dfd Searchable Select: prevent modal closes when closing a autocompletion dropdown 2018-07-29 16:37:17 +02:00
Felix Niklas
9a09532718 Searchable Select: fix tab-back bug
make the shadow input non-tabable via tabindex=“-1” to prevent it from accepting tabs, fixes #1958
2018-07-29 16:36:52 +02:00
Felix Niklas
7d5d2626c2 Attachment: add focus style so that it gets highlighted when tabbing through inputs
- also, usability: use a <label> for “select attachment…” and connect it to the <input type=“file”>
2018-07-29 15:20:40 +02:00
Felix Niklas
23dd56feb1 Revert "Search: loading indicator, no result screen, extended search on enter"
This reverts commit 2639df5a97.
2018-07-28 15:33:53 +02:00
Felix Niklas
b411cabe5b Revert "Icons: add mood-sad"
This reverts commit 0445b4ee49.
2018-07-28 15:33:39 +02:00
Felix Niklas
0445b4ee49 Icons: add mood-sad
message smilie with a sad face and changeable color
2018-07-28 12:32:22 +02:00
Felix Niklas
2639df5a97 Search: loading indicator, no result screen, extended search on enter
- open extended search on enter, solves #560
- show searching indicator, requested in https://community.zammad.org/t/delay-after-querying-a-search/405
- show no result screen, solves #788
- fix bug: when on ‘#search’, ‘show search results’ in the search sidebar was highlighted as active too because it links to #search
- clear search when entering a search result
2018-07-28 12:15:30 +02:00
Felix Niklas
dc884fc604 TicketZoom: don’t show scroll-header when its not needed
fixes the bug mentioned here: https://community.zammad.org/t/chrome-min-height-101/1004
2018-07-27 18:09:39 +02:00
Felix Niklas
5ac5932320 Better sidebar scrollbar spacing
With the sidebar tabs overlapping the main content there needs to be a gap between the sidebar and the tabs for the scrollbar. The most elegant solution would be to only open up this gap when a scrollbar is visible. But the tabs are part of the sidebar and thus life in a different controller. For now a cleaner solution that to force a scrollbar is to show an empty scrollbar.
2018-07-27 18:08:38 +02:00
Martin Edenhofer
52bfa30bac Improved i-doit browser test. 2018-07-27 12:02:52 +02:00
Martin Edenhofer
16fdc8ee10 Added sort tests for select, checkbox and radio element. 2018-07-27 11:32:10 +02:00
Martin Edenhofer
093c9e7621 Fixed #2132 by putting the I-doit objects in ticket preferences by creating the ticket. 2018-07-26 16:24:31 +02:00
Martin Edenhofer
525086d09c Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-07-26 09:06:29 +02:00
Martin Edenhofer
0cc00bfbea Added comments for icon methods. 2018-07-26 09:05:57 +02:00
Martin Edenhofer
d48e2ffd0f Small improvement to test. 2018-07-26 09:04:03 +02:00
Martin Edenhofer
699804f945 Added logger if ticket got deleted via trigger. 2018-07-26 09:02:34 +02:00
Thorsten Eckel
cab0d43d5e Test stabilization: Applied required changes for HTTPS migration of VZ 'test' server. 2018-07-25 13:48:57 +02:00
Thorsten Eckel
7a40517cb4 Test stabilization: Improved handling of modal dialogs. 2018-07-25 13:48:32 +02:00
Thorsten Eckel
5727c571ff Test stabilization: Unjoined threads lead to stuck test suite. 2018-07-25 13:47:15 +02:00
Thorsten Eckel
14afe747f9 Test stabilization: Macro execution and result checking lead to race condition. 2018-07-25 13:47:09 +02:00
Thorsten Eckel
31af83e9e6 Test stabilization: Input fields in modal get filled before modal is faded into view and while focus is set to a different field. 2018-07-25 13:45:50 +02:00
Thorsten Eckel
1795ffdb9e Improved modal_ready browser test helper to check for actual css class. 2018-07-25 13:45:36 +02:00
Thorsten Eckel
53db2cfc8e Test stabilization: Race condition between clicking and receiving a new article causes click to fail. 2018-07-25 13:45:29 +02:00
Thorsten Eckel
6998eb9be2 Test stabilization: The combination of sleep and exists_not is slow and prone to timing issues. 2018-07-25 13:45:19 +02:00
Thorsten Eckel
5e4958e7ac Test stabilization: Upload is sometimes faster than the button can be checked. 2018-07-25 13:45:14 +02:00
Thorsten Eckel
364f74f558 Test stabilization: Updated overview push via the Scheduler to the frontend might take a bit longer. 2018-07-25 13:45:04 +02:00
Thorsten Eckel
6b50097f95 Added browser test helper to navigate to overview by name or link. 2018-07-25 13:44:50 +02:00
Ryan Lue
1819941989 Add example for User callback spec (for #2057 fix) 2018-07-23 23:33:35 +08:00
Billy Zhou
a6fea45bcf Fixed issue #1564 by using proper localeCompare for string comparisons 2018-07-23 22:15:09 +08:00
Ryan Lue
9cfeec86be Update CallerId table when user phone numbers change (partially fixes #2057) 2018-07-23 16:28:21 +08:00
Ryan Lue
0afd2ba741 Make new CallerId records adopt matching call logs (partially fixes #2057) 2018-07-23 16:27:07 +08:00
Ryan Lue
8c02483334 Add ActiveJob configuration / base class 2018-07-23 16:23:01 +08:00
Martin Edenhofer
902b5aca32 Enhancement to issue #2117 - added generic approach with callback methods for submit disable/enable of attachment uploading. 2018-07-23 08:50:26 +02:00
Martin Edenhofer
0fd7dde63e Enabled elasticsearch 2.4 support by using type string. 2018-07-22 20:24:06 +02:00
Billy Zhou
b4bbe26313 Fixed #1564 by using proper localeCompare for string comparisons 2018-07-20 22:16:06 +08:00
Billy Zhou
eebec0aebb Fixed failing tests in test/integration/elasticsearch_active_test.rb 2018-07-20 21:20:21 +08:00
Billy Zhou
719b80f98b For Elasticsearch, sort by active flag first before everything else 2018-07-20 19:32:22 +08:00
Billy Zhou
01717bcc7f For Elasticsearch, sort by active flag first before everything else 2018-07-20 19:29:40 +08:00
Ryan Lue
a7749d663f Handle race condition when calling ActivityStream#assets (fixes #2066) 2018-07-20 17:51:18 +08:00
Martin Edenhofer
45ed1b3638 Follow up for issue #641 - make macro working also on slower network connections (close tab if macro is executed sucessfully). And disable update button until macro is executed. 2018-07-20 10:31:03 +02:00
Ryan Lue
c61dd3eab4 Specify updated_by_id in LDAP deactivation sequencer unit (fixes #2111) 2018-07-20 09:12:03 +08:00
Muhammad Nuzaihan
903777588a Add option for body to be searchable for new triggers (fixes #1989)
add tests for new body field in trigger condition
2018-07-20 09:10:49 +08:00
Ryan Lue
3800db6386 Add nil handling to Associations::Assign sequencer unit (fixes #2110) 2018-07-20 09:10:49 +08:00
Billy Zhou
1a6e58ac8f Fixed #2117 by disabling the create/update button during file uploading 2018-07-20 08:55:53 +08:00
Martin Edenhofer
96e31cd8ae Moved tests into organizations_controller_test.rb. 2018-07-20 02:08:50 +02:00
Martin Edenhofer
d2d6fa981c Resolved merge conflict. 2018-07-19 19:19:30 +02:00
Martin Edenhofer
86c79c3dba Follwup for issue #2031 - restored original default sort_by updated_at attribute and unified names of controller tests. 2018-07-19 18:54:12 +02:00
Martin Edenhofer
29c61f0586 Implemented issue #2136 - Improve admin -> user -> default shown users are sometimes different with and/or without search text -> unify search. 2018-07-19 16:28:08 +02:00
Billy Zhou
166e1e04f1 Added fix for #2117 by disabling the create/update button during file uploading 2018-07-19 15:07:25 +08:00
Thorsten Eckel
f2ff8ee532 Merge branch 'develop' of https://github.com/zammad/zammad into develop 2018-07-19 08:24:21 +02:00
Ryan Lue
156d837573 Update doorkeeper gem (security issue) 2018-07-19 11:37:08 +08:00
André Bauer
1912e56534 made examples ssl config mor letsencrypt specific 2018-07-18 16:39:11 +02:00
Martin Edenhofer
ef8e08b270 Merge branch 'develop' of github.com:zammad/zammad into develop 2018-07-18 16:01:20 +02:00
Martin Edenhofer
597cd01b5a Implemented issue #2073 - Allow sort_by and order_by for tickets, users and organisations search REST API. 2018-07-18 16:00:06 +02:00
Ryan Lue
e64c2f3c9d Add spec for #2019 migration (and fix Trigger factory) 2018-07-18 18:52:08 +08:00
André Bauer
9a74975fba renamed ssl_trusted_certificate 2018-07-18 09:43:42 +02:00
André Bauer
486c1635dd Merge pull request #2072 from Impyus/Impyus-NGINX-SSL-Template-1
Update zammad_ssl.conf
2018-07-18 09:40:13 +02:00
Ryan Lue
0b39137cd7 Add sanitize duplicated domains in rich text form input (fixes #2019) 2018-07-18 10:17:21 +08:00
Thorsten Eckel
02d0802099 Test stabilization: Clearbit return value varies for APIHub Organization. 2018-07-17 17:41:32 +02:00
Martin Edenhofer
213f2d153f Fixed issue #2128 - Route for /auth/failure is missing to show login failure messages form oauth provider (if request was technical ok - only login was not possible by oauth provider). 2018-07-17 10:35:51 +02:00
Martin Edenhofer
ef179bf67b Improved email processing and cleaning up firstname/lastname detection. 2018-07-16 17:07:23 +02:00
Martin Edenhofer
673b7c3d65 Fixed issue #2125 - Auto responder is not set from correct group. 2018-07-13 19:50:10 +02:00
Billy Zhou
bc489aecef Fixed issue #2104 - image modal not closed when opening new ticket 2018-07-13 11:07:55 +08:00
Billy Zhou
e6fd81b5b4 Fixed #2104 image modal not closed when opening new ticket 2018-07-12 23:14:25 +08:00
Billy Zhou
4685f147e6 Merge branch 'private-bz_2105_update_button_unusable_after_modal_dialog_is_gone_rebased' into develop 2018-07-12 21:43:04 +08:00
Billy Zhou
f1b7639467 Merge branch 'develop' of https://git.znuny.com/zammad/zammad into develop 2018-07-12 15:19:52 +08:00
Billy Zhou
09313ed326 Revert "Revert "Added group by direction feature to Overviews""
This reverts commit d02edbfc3b.
2018-07-12 15:18:39 +08:00
Ryan Lue
f041fef7ff Add migration to retroactively convert HttpLogs to UTF8 2018-07-12 13:52:33 +08:00
Ryan Lue
680a560c06 Convert HttpLog request/response attrs to UTF8 before saving (fixes #2100) 2018-07-12 13:49:25 +08:00
Ryan Lue
2e4b7128f1 Add autodiscovery exception handling to ExchangeController 2018-07-12 13:24:16 +08:00
Billy Zhou
d02edbfc3b Revert "Added group by direction feature to Overviews"
This reverts commit 817f39e8c6.
2018-07-12 11:32:12 +08:00
Billy Zhou
817f39e8c6 Added group by direction feature to Overviews 2018-07-12 11:11:26 +08:00
Martin Edenhofer
ae3e2141b1 Refactoring of perform/set attributes in trigger and postmaster filter ui (now use clean template - not side effects regarding autocompletion and tags). 2018-07-11 09:40:23 +02:00
Billy Zhou
730ed13b7b Fixed issue #2105 update button unusable after modal dialog is gone 2018-07-11 15:08:32 +08:00
Ryan Lue
370b1a2645 Refactor Import::Exchange::Folder#children 2018-07-11 09:52:43 +08:00
Ryan Lue
97f55bcd83 Add error check if Exchange config gives empty folder list (fixes #1802) 2018-07-11 09:52:38 +08:00
Ryan Lue
a6d554cfb3 Organize gitignore 2018-07-10 11:54:43 +08:00
Thorsten Eckel
7750f4cdca Migrated RSpec UserController test to request test because controller tests are soft deprecated. 2018-07-09 13:00:52 +02:00
Thorsten Eckel
348429940d - Skip CSRF validation if config.action_controller.allow_forgery_protection is disabled (Rails standard).
- Improved CSRF request method check (inspired by Rails).
2018-07-09 13:00:43 +02:00
Thorsten Eckel
b96de74964 Fixed bug: Setting changes in RSpec test are leaking. 2018-07-09 13:00:38 +02:00
Thorsten Eckel
132a88005f Test stabilization: Increase read timeout of Elasticsearch index creation to avoid index_already_exists_exception because of retry. 2018-07-07 11:12:03 +02:00
Thorsten Eckel
8172b17733 Test stabilization: Once in a while uploads take longer than expected. 2018-07-07 11:11:55 +02:00
Thorsten Eckel
12ea65f84f Ordered failed background jobs by number of entries which also stabilizes test. 2018-07-07 11:09:31 +02:00
Thorsten Eckel
7e9728b970 Test stabilization: Application reboot might take some time after ObjectManager Attribute change. 2018-07-07 11:09:20 +02:00
Thorsten Eckel
821415a916 Test stabilization: Freezed time to avoid timing issue while decimal minutes block changes. 2018-07-07 11:09:05 +02:00
Mantas
7bb7e7a438 Fixes #1123 Attachments get doubled when suspending a draft 2018-07-06 15:14:20 +02:00
Mantas
3545893c3d Fixes #1693 pending till date issue 2018-07-06 15:10:03 +02:00
Mantas
ada6efa3bc Fixes #1730 When forwarding a message, prefix FWD is added 2018-07-06 15:07:10 +02:00
Mantas
9cdb0d5ce4 Fixes #2088 User doesn't appear in drag&drop overlay in a group if access is via roles 2018-07-06 15:02:41 +02:00
Martin Edenhofer
468b5bf12e Fixed issue #2118 - A ticket created by customer via web with state new is set to open on second update by customer. 2018-07-06 14:30:12 +02:00
Martin Edenhofer
dd48e4dae5 Updated nokogiri gem - CVE-2018-8048. 2018-07-06 08:13:26 +02:00
Ryan Lue
113d13c3ad Rename CanLookup RSpec shared example group to follow existing pattern 2018-07-05 23:43:52 +08:00
Ryan Lue
6ca5054d03 Add RSpec for newly refactored CanLookup 2018-07-05 22:20:51 +08:00
Ryan Lue
901cc3fadf Improve NULL handling to Ticket#selector2sql (fixes #1316) 2018-07-05 21:26:24 +08:00
Thorsten Eckel
aeb5dbc4b1 Devs are responsible for their ENV management themselves. 2018-07-05 15:22:13 +02:00
Ryan Lue
743bbcd794 Refactor CanLookup concern 2018-07-05 15:43:15 +08:00
Martin Edenhofer
2b31311bea Fixes #1847 - Report profiles - ticket.tags conditions are not working. 2018-07-04 18:24:51 +02:00
Martin Edenhofer
7bdec55960 Follow up for issue #2087 - improved tests - No mime_type on nil message (no message body) / email will not be processed. 2018-07-04 17:03:04 +02:00
Felix Niklas
3186d5e4d7 autocomplete: also indicate inactive organizations 2018-07-04 14:58:40 +02:00
Felix Niklas
f4c50ae0fa autocomplete: indicate inactive users and make them non-selectable 2018-07-04 14:58:40 +02:00
Felix Niklas
690843fcf1 icons.svg: remove non-existing icons 2018-07-04 14:58:22 +02:00
Martin Edenhofer
3b107f0a31 Fixes issue #2087 - No mime_type on nil message (no message body) / email will not be processed. 2018-07-04 13:59:05 +02:00
Martin Edenhofer
5bbff10764 Fixes issue#2098 - Report profiles: "before(relative)" and friends broken. 2018-07-03 16:39:42 +02:00
Thorsten Eckel
35771d6ab6 Fixed bug: Icons in /public/assets/images/icons are ignored but shouldn't. 2018-07-03 10:18:42 +02:00
Billy Zhou
cf327a09a1 Fixed issue #2058 - Autocomplete hangs on dot in the new user form 2018-07-03 15:18:55 +08:00
Thorsten Eckel
866c31587e Fixed bug: Outdated data is used for Websocket session data gathering and is send to the frontend in some cases. 2018-07-02 10:19:16 +02:00
Thorsten Eckel
e9bbff97a9 Fixed duplicate code that causes additional SQL queries. 2018-07-02 09:38:20 +02:00
Thorsten Eckel
2f5ce86d28 Reordered git excludes to have all env management tools in one place and added byebug history to list of excluded files. 2018-07-01 17:41:53 +02:00
Martin Edenhofer
40a663198c Fixed issue #2099 - Changing data type of new object attributes will lead to errors. 2018-06-29 08:14:18 +02:00
Martin Edenhofer
4bae98e55a Fixed typo. 2018-06-28 18:44:47 +02:00
Martin Edenhofer
5980b7ab59 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-06-28 17:17:36 +02:00
Martin Edenhofer
39d57f3428 Follow up for issue #1394 - added Twitter::Geo as object to convert - Reindex elastic search not possible because of <null>/Twitter::NullObject. 2018-06-28 17:17:27 +02:00
Thorsten Eckel
f1296f6500 Stablized tests: Organization select in user create modal is stale. 2018-06-28 13:48:02 +02:00
Thorsten Eckel
295844c72e Fixed race condition: AJAX data fetch requests re-set sessions that should get deleted by logout request. 2018-06-28 13:39:06 +02:00
Thorsten Eckel
967105b97f - Reduced Sequencer logging to debug.
- Added Setting to change sequencer log level for various actions.
2018-06-28 13:32:14 +02:00
Martin Edenhofer
5c4c41db6f Fixed follow up for issue #2090 with order/group overviews - Unable to create an overview with a new ticket file which is starting with number like "1_test". 2018-06-28 13:26:27 +02:00
Thorsten Eckel
05adf9a534 Enable Rack::LiveReload on demand to avoid JS errors. 2018-06-27 18:44:15 +02:00
Thorsten Eckel
48ff43aaed Replaced system_agent_limit Setting MiniTest with RSpec. 2018-06-27 18:42:40 +02:00
Martin Edenhofer
baa7b97d07 Fixed issue #2101 - Inline images are lost on forward or quoted reply. 2018-06-27 15:38:25 +02:00
Thorsten Eckel
82feb10fce Allow taking screenshots in selenium session without the need of providing parameters. 2018-06-27 11:45:13 +02:00
Thorsten Eckel
d4ac9302d8 Refactored failing Macro browser test. 2018-06-27 11:44:13 +02:00
Thorsten Eckel
fb397822be Added browser test helper to create and perfom Macros. 2018-06-27 11:43:50 +02:00
Thorsten Eckel
a9239997ef Fixed race condition: Running AJAX requests after logout was performed cause side effects. 2018-06-26 09:01:02 +02:00
Thorsten Eckel
a70153106a Fixed race condition: Scheduler job pushes outdated data to the client. 2018-06-26 08:59:46 +02:00
Thorsten Eckel
20ea94d34b Fixed regression: Escalation logic is not active. 2018-06-25 16:20:45 +02:00
Thorsten Eckel
5865d94339 Fixed cache invalidation bug race condition: Changes to group relation participant are not reflected to the other side and FE updates will be incomplete/outdated. 2018-06-25 15:24:23 +02:00
Thorsten Eckel
e5d05349db Invited pry-rescue and pry-stack_explorer to the party 🎉 Taking debugging to the next level 🚀. 2018-06-25 15:24:23 +02:00
Thorsten Eckel
cde033f8f7 Fixed bug: RSpec tests get stuck in time 👽 2018-06-25 15:24:23 +02:00
Martin Edenhofer
f80fbf4744 Small code cleanup. 2018-06-25 13:11:42 +02:00
Martin Edenhofer
24a30ad26c Improved cleaning up migrations later and applied ux_flow_next_up = 'next_task' for default "Close & tag as spam" macro. 2018-06-25 13:08:26 +02:00
Martin Edenhofer
76f3a2876b Review of correct test helper for integration tests. 2018-06-25 13:07:47 +02:00
Martin Edenhofer
4120afb131 Fixed issue #1246 - Filename of images (c&p) downloaded via lightbox is invalid. 2018-06-25 11:25:30 +02:00
Martin Edenhofer
d19f8c2b66 Improved test to match use case/settings of issue #2038. 2018-06-25 00:11:10 +02:00
Thorsten Eckel
cda05285f3 Invited byebug to the party 🎉 Taking debugging to the next level 🚀. 2018-06-24 18:57:13 +02:00
Ryan Lue
d6f1c3d9ec Fix word boundary check in Ticket::Number::{Date,Increment}#check 2018-06-23 19:49:06 +08:00
Thorsten Eckel
df0b213691 Stablized tests: Delayed::Job entries added in previous tests cause failing tests. 2018-06-23 08:18:41 +02:00
Thorsten Eckel
6a1eb1fef4 - Test stabilization: Overview prio rearrangement fails in the case that an Overview with the same prio as the one changed to exists.
- Migrated Overview MiniTest to RSpec.
2018-06-22 14:59:19 +02:00
Thorsten Eckel
b4ffbc963c Fixed bug: New model record won't get refreshed in current function call as it should be if param 'later' is given. 2018-06-22 14:55:15 +02:00
Thorsten Eckel
4f6b0f7384 Improved logging of restart command. 2018-06-22 14:53:53 +02:00
Thorsten Eckel
6ff324094c Fixed race condition and improved performance: Refresh models after all new records of _all_ types were added instead of current model only. 2018-06-22 14:53:29 +02:00
Thorsten Eckel
798add3642 Test stabilization: Limited window for possible race condition between server restart and availability check. 2018-06-22 14:52:24 +02:00
Thorsten Eckel
db1378244c Test stabilization: Test expects that Setting 'system_id' has different initial value than ID 999 but hasn't because of other tests storing ID 999 before in some scenarios. 2018-06-22 14:39:32 +02:00
Thorsten Eckel
e57707336c Test stabilization: Disconnect connected chats only
There is a race condition between clients exiting the chat session and disconnecting via a click. In cases where the client disconnects first the disconnect button is already hidden (not clickable) and Selenium will fail.
2018-06-22 14:32:51 +02:00
Thorsten Eckel
bfd560ab49 Test stabilization: Unexpected order if Tags get created in same ms. 2018-06-22 14:29:04 +02:00
Thorsten Eckel
789f2b4807 Refactored code layout and prefer pluck over select to avoid unnecessary memory allocation. 2018-06-22 14:27:54 +02:00
Thorsten Eckel
c3105bb804 Add response body to result of client errors because there might be information provided by the server. 2018-06-22 14:27:32 +02:00
Thorsten Eckel
21d8862988 Test stabilization: Check Clearbit address against list of possible result values. 2018-06-22 14:25:01 +02:00
Thorsten Eckel
f34f0d14de Test stabilization: Make ES indexes more unique and remove delete indexes only if necessary. 2018-06-22 14:23:23 +02:00
Thorsten Eckel
c25a55457b Increase waiting time for app-restart after adding OM attributes. 2018-06-22 14:08:47 +02:00
Thorsten Eckel
b03576f617 Fixed unstable test caused by not being able to click on Avatar at the top of the zoom view. 2018-06-22 14:07:42 +02:00
Martin Edenhofer
2c654404ce Follow up fix for issue #2082 - escalation_at are not updated correctly. 2018-06-22 12:51:42 +02:00
Ryan Lue
adda2dfa5e Refine email followup search logic (fixes #2038) 2018-06-22 14:10:07 +08:00
Ryan Lue
2da68fa177 Add minimal test for existing followup search feature 2018-06-22 14:10:07 +08:00
Ryan Lue
77ae51c914 Refactor frontend ticket navigation with TicketNavigable mixin 2018-06-22 14:06:07 +08:00
Ryan Lue
14fb64ba0a Implement ux_flow_next_up feature for macros (soft fix for #641) 2018-06-22 14:06:07 +08:00
Martin Edenhofer
82acddc420 Fixed issue #2046 - Special characters get HTML encoded when displayed in overviews. Improved PR #2049. 2018-06-21 00:33:44 +02:00
Martin Edenhofer
947d2bcc25 Follow up for issue #1991 - improved browser unit test. 2018-06-20 20:15:44 +02:00
Muhammad Nuzaihan
0442efe8c8 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-06-20 20:13:52 +08:00
Muhammad Nuzaihan
9f559276e4 improve email filters by adding a tag option - closes #1991 2018-06-20 20:13:35 +08:00
Martin Edenhofer
2ec4c965de Fixed issue #2016 - Scheduler will stop after removing own ticket attribute but overview with condition which is including attribute git dropped. Merge pull request #2033. 2018-06-20 13:39:41 +02:00
Martin Edenhofer
577776c324 Improved stability of test. 2018-06-19 23:43:40 +02:00
Martin Edenhofer
1aeb5b3f12 Updated sprockets gem. 2018-06-19 20:11:19 +02:00
Martin Edenhofer
0dbfcd0edf Fixed issue #2090 - Unable to create an overview with a new ticket file which is starting with number like "1_test". 2018-06-19 19:32:28 +02:00
Martin Edenhofer
db82816f87 Follow up for issue #2082 - improved tests - escalation_at are not updated correctly. 2018-06-15 15:08:10 +02:00
Martin Edenhofer
28a1bbe4c6 Fixed issue #2082 - escalation_at are not updated correctly. 2018-06-15 13:54:07 +02:00
Thorsten Eckel
a4d000cda5 Fixed issue #1531: Inserting space character in translations (in Overviews menu item and User menu) not possible. 2018-06-14 16:07:30 +02:00
Liam Sullivan
f50bd63c41 Update zammad_ssl.conf
Indentation corrected
2018-06-13 11:07:21 +01:00
Liam Sullivan
0a619bc3f7 Update zammad_ssl.conf 2018-06-13 10:22:48 +01:00
Martin Edenhofer
8af6e2b9eb Implemented issue #2064 - Add delete existing records to CSV import feature. 2018-06-12 22:58:59 +02:00
Martin Edenhofer
4b8e615640 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-06-12 15:03:31 +02:00
Martin Edenhofer
8d0c0c634a Fixed issue #2069 - Cannot close tickets when you reply to an email at the same time. 2018-06-12 15:03:06 +02:00
Ryan Lue
23f30921dc Fix regression in HtmlSanitizer::cleanup_target (whitespace deletion) 2018-06-12 15:39:17 +08:00
Ryan Lue
5583369d8b Render umlauts and other multi-byte characters correctly in HtmlSanitizer::strict 2018-06-08 13:25:15 +08:00
Ryan Lue
c17a29cd0f Refactor Channel::EmailParser#parse method 2018-06-08 11:45:22 +08:00
Ryan Lue
8951d3f1bd Refactor email parser test &c. 2018-06-08 11:45:22 +08:00
Ryan Lue
dfebe8d767 Relocate test data files from test/fixtures to test/data 2018-06-08 11:45:22 +08:00
Ryan Lue
13ef5d4246 Rewrite Encode::conv as String#utf8_encode 2018-06-08 11:45:18 +08:00
Ryan Lue
2233cded7f Add type coercion to fix #2054 2018-06-06 23:55:23 +08:00
Martin Edenhofer
0693420fa1 Update for 2.6.0. 2018-06-06 03:35:42 +02:00
Martin Edenhofer
b58ac7e1be Improved issue #675 - Added web UI for import of users and organisations via csv files. 2018-06-06 03:30:17 +02:00
Martin Edenhofer
52ab76d7a7 Implemented issue# 376. Added more headers to match. 2018-06-05 20:46:46 +02:00
Martin Edenhofer
492f6f994c Updated lables. 2018-06-05 16:48:57 +02:00
Martin Edenhofer
7338b91a31 Improved monitoring controller to get storage usage. 2018-06-05 16:11:44 +02:00
Thorsten Eckel
9d972f9efd - Revert "Fixed/stabilized User access browser test." 61aa8fb84a.
- Removed dead comments.
- Simple code cleanup without changing behavior.
2018-06-05 14:30:52 +02:00
Thorsten Eckel
c50d6a49ed Centralized Elasticsearch and searchindex logic into single support helper module. This fixes an issue on the CI env that is caused by not removed ES indexes. 2018-06-05 12:38:16 +02:00
Thorsten Eckel
7f4c540fa0 Retry on stale element reference to avoid race conditions while interface is not ready yet. 2018-06-05 12:38:16 +02:00
Thorsten Eckel
ba9845cb68 Moved coverage logic into support folder to increase clarity and only include on TravisCI runs to reduce test runtime. 2018-06-05 12:38:16 +02:00
Thorsten Eckel
11e63fe21a Migrated after_* callbacks to after_commit to avoid race conditions between cache creation and database insert/update. See: http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html\#module-ActiveRecord::Transactions::ClassMethods-label-Callbacks . 2018-06-05 12:37:52 +02:00
Thorsten Eckel
809a698c03 Fixed bug: Organization search queries don't find case insensitive results. 2018-06-05 12:37:09 +02:00
Thorsten Eckel
61aa8fb84a Fixed/stabilized User access browser test. 2018-06-05 12:37:09 +02:00
Martin Edenhofer
9a9e37c1a6 Improved CTI tests, removed removed potential race condition. 2018-06-05 10:31:59 +02:00
Martin Edenhofer
89a46cf045 Follow up for issue #2029 - fixed check if sipgate_config already is filled. 2018-06-04 16:41:00 +02:00
Martin Edenhofer
58ec1cbc8e Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-06-04 15:01:25 +02:00
Martin Edenhofer
3fa9ca8001 Improved logging messages. 2018-06-04 14:59:16 +02:00
Martin Edenhofer
fd120eda96 Improved UI for ignore certains agents to not use auto assignment - follow up for issue #1825. 2018-06-04 14:57:53 +02:00
Ryan Lue
e7caca5854 Update mail gem 2018-06-04 14:41:48 +08:00
Ryan Lue
312278c2d6 Prettify phone numbers displayed in Call Log 2018-06-01 18:13:12 +08:00
Mantas
7fd539359d Fixes #1339 deny ticket creation over web 2018-05-31 08:24:00 +03:00
Martin Edenhofer
8f708b75ea Implemented #1865 - Date of last contact (customer) - make behaviour configurable. 2018-05-30 10:49:54 +02:00
Martin Edenhofer
b403432c76 Initial support of recursive triggers for tickets - issue #2035. 2018-05-29 17:42:14 +02:00
Martin Edenhofer
53fb7e6b0b Renamed to integration_sipgate_notify_not_clearing_on_leftside_test.rb. 2018-05-29 02:46:11 +02:00
Martin Edenhofer
29a0336809 Implemented issue #2044 - Generic CTI integration. 2018-05-29 01:45:29 +02:00
Felix Niklas
7966bb3b16 icons: update icons.svg & svg-dimensions.css 2018-05-28 14:22:25 +02:00
Ryan Lue
67e8b0a2d2 Add max_allowed_packet check to MySQL initializer (fixes #2034) 2018-05-25 19:36:43 +08:00
Ryan Lue
5eb5720df3 Change default option to overwrite config/database.yml in bs:init rake task 2018-05-25 17:55:20 +08:00
Martin Edenhofer
659a288d09 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-05-25 08:00:32 +02:00
Martin Edenhofer
de36ffcd8a Fixed issue #1957 - "Create new Customer" form delayed display. 2018-05-25 07:59:20 +02:00
Ryan Lue
5dd699ce6f Fix sequential execution of multiple email notification triggers 2018-05-25 08:49:56 +08:00
Mantas
3a645d1c6e Fixes #2017 phone notify not clearing 2018-05-25 00:31:31 +03:00
Martin Edenhofer
c46cf246b9 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-05-24 19:22:35 +02:00
Thorsten Eckel
ad3362e94c Fixed issue #2040: Zendesk import: To/From extraction for system comments fails. 2018-05-24 14:49:45 +02:00
Thorsten Eckel
c21be6e928 Fixed issue #2039: Import fails for ObjectManager Attribute with non-ASCII name. 2018-05-24 14:49:38 +02:00
Thorsten Eckel
4b98c61698 Improved handling of disposition URL parameter for local URLs. 2018-05-24 14:46:22 +02:00
Thorsten Eckel
c4ea22470a Fixes #2014 - Import job (LDAP/Exchange) hangs on scheduler restart. 2018-05-23 18:58:40 +02:00
Thorsten Eckel
163a5f2f26 Refactoring - DRYing up code. Use existing .backends method. 2018-05-23 18:58:32 +02:00
Ryan Lue
3034ff7e97 REALLY revert last fix 2018-05-23 19:19:49 +08:00
Ryan Lue
77c2dc7705 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-05-23 19:17:54 +08:00
Ryan Lue
461505545a Revert previous fix (pending specs) 2018-05-23 19:17:05 +08:00
Ryan Lue
03c586e7fc Fix sequential execution of multiple email notification triggers 2018-05-23 19:04:51 +08:00
Ryan Lue
b057155832 Update error message in bootstrap.rake 2018-05-23 18:49:11 +08:00
Thorsten Eckel
0deedf3fea Fixed failing browsertest: Mysql2::Error: Incorrect datetime value
https://dev.mysql.com/doc/refman/5.7/en/datetime.html
The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.
2018-05-23 10:23:09 +02:00
Thorsten Eckel
53ca6bd4c1 Fixed issue #2037: Restart of processes form application context fails. 2018-05-23 10:22:54 +02:00
Martin Edenhofer
ff11f7f3d3 Improved error handling of of invalid setting attributes. 2018-05-22 08:14:13 +02:00
Martin Edenhofer
ebebfef8b1 Fixed test (updated with new reference data). 2018-05-22 01:07:44 +02:00
Martin Edenhofer
d2446531a1 Just create screenshots of failed selenium actions (increase speed of tests too). 2018-05-22 00:58:50 +02:00
Martin Edenhofer
5b0b10ce59 Fixed issue #1930 - bulk action is not executed for a pending-state. 2018-05-22 00:57:26 +02:00
Ryan Lue
c0e02c3d89 Add LDAP user_filter to Ldap::Group#group_user_dns_memberuid search 2018-05-18 16:45:19 +08:00
Martin Edenhofer
401923c738 Fixed issue #2029 - Make sipgate.io integration working by just enable it. 2018-05-18 09:06:31 +02:00
Ryan Lue
74597ba566 Comment out default postgres credentials in database.yml 2018-05-17 11:42:44 +08:00
Ryan Lue
441def375f Update Gemfile.lock for telegramAPI v1.4.1 2018-05-17 09:37:30 +08:00
Ryan Lue
739f8e9c99 Reformat ticket_spec to avoid calling rubocop:disable/enable 2018-05-16 16:13:18 +08:00
Ryan Lue
f086b30957 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-05-16 16:08:10 +08:00
Ryan Lue
690b9b78a5 Fix regression from refactoring NotificationFactory::Template#to_s 2018-05-16 16:07:51 +08:00
Mantas
db2eb161b1 Fixes #2012 granular and full group permissions 2018-05-16 10:07:58 +03:00
Mantas
264ab24aed Fixes #2011 user with granular permissions is shown only once in overlay 2018-05-16 10:07:51 +03:00
Mantas
498980b52c Fixes #1591 Drag&Drop groups empty 2018-05-16 10:07:45 +03:00
Ryan Lue
c3ad7e307b Fix #2001 (Use non-bang gsub in NotificationFactory:Template) 2018-05-16 13:04:25 +08:00
Ryan Lue
ca454dd461 Add /doc to .gitignore 2018-05-15 08:09:15 +08:00
Mantas
bd5e63801e Follow up for #1990 fixed test 2018-05-14 15:18:30 +03:00
Martin Edenhofer
d044219cf9 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-05-14 11:14:15 +02:00
Martin Edenhofer
cabb1c89d1 Improved error messages for type attributes. 2018-05-14 11:09:23 +02:00
Martin Edenhofer
91bdf9f814 Allow to access origin sender if postmaster_sender_based_on_reply_to is used (is available in mail['origin_from_*']). 2018-05-14 10:50:18 +02:00
Thorsten Eckel
9d71bb2a57 Improved logging for failed cache creation. 2018-05-11 14:21:07 +02:00
Mantas
896e4f0492 Fixes #1987 makes ticket create types configurable 2018-05-11 14:22:10 +03:00
Ryan Lue
e7ce4b9d68 Clarify Gemfile.local instructions in Gemfile 2018-05-11 19:00:25 +08:00
Ryan Lue
07411d6efa Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-05-11 16:56:24 +08:00
Ryan Lue
1a8221f4f0 Add pry-rails and pry-remote to Gemfile (dev/test) 2018-05-11 16:48:07 +08:00
Martin Edenhofer
f2c7ced74d Log search backend errors also to application log. 2018-05-11 10:16:18 +02:00
Martin Edenhofer
6263762ac4 Fixes issue #1971 - Admin UI does not allow to select Timezone in "Calendars" options. 2018-05-11 10:09:24 +02:00
Ryan Lue
011b3cd139 Revert accidental change to dev environment log_level 2018-05-11 13:15:13 +08:00
Muhammad Nuzaihan
813ed09d5f improve on the range selection - resolves #1956 2018-05-11 13:13:36 +08:00
Ryan Lue
3558f9a0ec Update bs:init rake task with new database.yml location 2018-05-10 19:11:31 +08:00
André Bauer
b359e2624c Merge remote-tracking branch 'github/develop' into develop 2018-05-10 13:04:47 +02:00
André Bauer
436783703b fixed typos 2018-05-10 12:55:40 +02:00
André Bauer
378bf007b7 set execute bit on before.sh 2018-05-10 12:54:29 +02:00
André Bauer
45854246da some rework on database config, packager.io & cleanup scripts 2018-05-10 12:51:19 +02:00
André Bauer
24aa7d396c Merge pull request #2006 from lr1980/optimize_backup_script
suppress tar warning
2018-05-09 17:13:48 +02:00
André Bauer
7667b98d05 Update functions 2018-05-09 17:13:08 +02:00
Mantas
54a72907a7 Follow up for #1990 improves test by using watch_for 2018-05-09 18:01:04 +03:00
Ryan Lue
2662c17bad Avoid running websocket server spec on Travis (lacks IPv6 support) 2018-05-09 18:26:17 +08:00
Ryan Lue
8a8e775a95 Disable websocket server spec IPv6 example on systems without IPv6 support 2018-05-09 16:42:32 +08:00
Ryan Lue
f5880d537b Set RAILS_ENV in websocket server spec 2018-05-09 15:17:14 +08:00
Lutz Reinhardt
aa8f6aadd5 suppress tar warning
suppress "tar: Removing leading `/' from member names" warning
2018-05-09 09:11:40 +02:00
Ryan Lue
7faed507cf Really fix port assignment issue in websocket spec 2018-05-09 14:10:08 +08:00
Thorsten Eckel
81f958a18a Improved wording and removed unnecessary comment/dead code. 2018-05-08 17:31:04 +02:00
Thorsten Eckel
ccbf1d4a71 Removed unnecessary info text for already completed import jobs. 2018-05-08 17:27:19 +02:00
Martin Edenhofer
cd0a6fe596 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-05-08 16:24:08 +02:00
Martin Edenhofer
7ed98af7ee Folllow up for issue #1977 - recent_views fk already exists (no test needed). 2018-05-08 16:19:34 +02:00
Mantas
662032aa13 Fixes #1990 missing CC autocomplete 2018-05-08 16:00:52 +03:00
Martin Edenhofer
6e899948c1 Follow up for issue #1995 - Missing DB index on article columns queried by ticket waiting time report backend - limit the max. ticket count to 20_000 each day. 2018-05-08 14:37:36 +02:00
Martin Edenhofer
9379d7afe6 Follow up for issue #1977 - recent_views fk already exists, reconnect on postgres to be able to execute further sql statements. 2018-05-08 14:34:40 +02:00
Martin Edenhofer
b764e7b3e5 Fixes issue #1995 - Missing DB index on article columns queried by ticket waiting time report backend. 2018-05-08 14:18:15 +02:00
Martin Edenhofer
f75986af52 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-05-08 13:45:19 +02:00
Martin Edenhofer
156abbbcf9 Folllow up for issue #1977 - recent_views fk already exists. 2018-05-08 13:29:43 +02:00
Ryan Lue
f1c1a16c7f Hotfix for CI build broken by 297d9bb 2018-05-08 19:16:28 +08:00
Ryan Lue
121c06e4be Hotfix for websocket-server spec (port assignment) 2018-05-08 18:31:43 +08:00
Ryan Lue
edee264e38 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-05-08 18:27:37 +08:00
Ryan Lue
1960136b5e Hotfix for moved database.yml.pkgr file 2018-05-08 18:27:05 +08:00
Martin Edenhofer
cf88f53095 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-05-08 12:22:59 +02:00
Ryan Lue
297d9bb044 Clean up database.yml files 2018-05-08 18:18:29 +08:00
Martin Edenhofer
cb56a53a07 Fixed issue #1977 - Remove online notifications too if user is deleted. 2018-05-08 12:10:19 +02:00
Muhammad Nuzaihan
cd4dc311ae Refactor and test IPv6 support in websocket server 2018-05-08 18:10:04 +08:00
Martin Edenhofer
d19d49fea4 Let's click text module on every area (also on keyword). 2018-05-08 11:50:52 +02:00
Martin Edenhofer
45c4488b7d Improved error handling. 2018-05-08 11:50:11 +02:00
Mantas Masalskis
57c1124a42 Fixed issue #1770 - Owner reset after group selection (#1926) 2018-05-08 08:46:28 +02:00
Mantas
ee20aa2a12 Merge branch 'private-issue1996-reply-recipient' into develop 2018-05-07 16:17:02 +03:00
Martin Edenhofer
7b01f6e538 Fixes issue #1996 - Use of wrong recipient if sender is also an agent (verify all recipient in to of article of there is a local address somewhere - not only the first one). 2018-05-07 14:30:39 +02:00
André Bauer
d596389c15 added ubuntu 18.04 on packager.io 2018-05-06 16:38:31 +02:00
Thorsten Eckel
ddd7cb315a Fixed rubocop complains by restoring the deactivation of Rails/InverseOf. 2018-05-05 19:03:14 +02:00
Ryan Lue
04055f7095 Replace unless with if ! (project-wide) 2018-05-04 22:05:10 +08:00
Ryan Lue
b79a76d6f8 Add nil-check to fix failing browser test 2018-05-04 17:31:20 +08:00
Ryan Lue
79d4284365 Fix rubocop violations 2018-05-04 14:04:18 +08:00
Ryan Lue
1c386bc0b1 Setup & test zh-tw locale fix for 2.5.0 release 2018-05-03 21:59:37 +08:00
Thorsten Eckel
8f07ac70f4 Fixed URL required for mocking X-On-Behalf-Of header. 2018-05-03 10:09:53 +02:00
Martin Edenhofer
b48a8c9b42 Improved sleep of ci tests (groups test jobs). 2018-04-30 14:51:18 +02:00
Ryan Lue
18dee9e6c9 Use existing config values in LDAP wizard
Fixes #1854
2018-04-30 16:05:59 +08:00
Ryan Lue
4465fbeb63 Use existing config values in LDAP wizard
Fixes #1854
2018-04-30 15:54:42 +08:00
Thorsten Eckel
db48e92ace Fixed flanky test by using same value for check as for stored instead of dynamic. 2018-04-30 09:28:03 +02:00
Muhammad Nuzaihan
162b1ac093 include custom attributes when generating reports and time accounting data. Closes #1894 #1964 2018-04-27 21:35:20 +08:00
Martin Edenhofer
a541e6194c Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-04-27 13:41:32 +02:00
Martin Edenhofer
e49fa1cbbc Improved order of overviews if prio is equal (use also name). 2018-04-27 13:40:55 +02:00
Thorsten Eckel
68682b3607 Refactoring: Improved test performance and stability by sleeping only in production env. 2018-04-27 11:52:04 +02:00
Martin Edenhofer
12fb3c9126 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-04-26 23:23:58 +02:00
Martin Edenhofer
f023a5ad59 Fixes issue #1980 - ObjectManager: New select attributes with empty selection will lead block UI. 2018-04-26 23:18:37 +02:00
Thorsten Eckel
845c9d105b Improved logging for delayed job cleanup logic to reason about left over jobs scheduler restart issue. 2018-04-26 13:00:25 +02:00
Thorsten Eckel
8db4ff31cf Follow up #1814 and #1822: LDAP sync BaseDN detection is broken because of ambiguously Coffescript syntax statement evaluation. 2018-04-26 12:58:22 +02:00
Ryan Lue
56a8481b64 Revert changes to RuboCop style guide, refactor bootstrap rake task 2018-04-26 17:38:46 +08:00
Thorsten Eckel
f541694225 Fixed bug: Setting 'system_init_done' has to be set before Zammad allows the login. 2018-04-26 11:30:43 +02:00
Thorsten Eckel
b66adbaba7 Refactoring: Execute AutoWizard.setup instead of starting a new process since we are already in the Rails application context. 2018-04-26 11:29:47 +02:00
Thorsten Eckel
ee0b51b670 Fixed bug: Missing file extension causes flushing of wrong file. 2018-04-26 11:28:23 +02:00
Thorsten Eckel
20f69f3cc1 Changed the order to don't have the setup output in the log files. 2018-04-26 11:27:37 +02:00
Thorsten Eckel
5f3c793f37 Refactoring: Fixed autoloading issues and workarounds by doing dependency requirement the "Rails Way".
- Removed unneeded `require`s
- Replaced needed `require`s with `require_dependency`
- Replaced `load` with Concers
- Kept gem and core `require`s

Read more about ``nrequire_dependency here: http://guides.rubyonrails.org/autoloading_and_reloading_constants.html#require-dependency

Read more about Concerns here: http://api.rubyonrails.org/v5.1/classes/ActiveSupport/Concern.html
2018-04-26 10:58:16 +02:00
Ryan Lue
7c3a289103 Add bootstrapping rake tasks (bs:init & bs:reset) 2018-04-26 16:21:43 +08:00
Thorsten Eckel
8d4b4a0152 Fixed issue #1891: Missing identifier attribute on LDAP entry causes Sync to fail. 2018-04-26 09:07:41 +02:00
Martin Edenhofer
43c38dcd97 Follow up to #1963 - changed default behaviour back to only disable ssl if ssl param is explicit false to keep backward compatibility of old channel settings. 2018-04-25 22:27:23 +02:00
Martin Edenhofer
54eab60f6e Updated test with new realtime data. 2018-04-25 15:04:47 +02:00
Martin Edenhofer
fc43615554 Fixes #1974 - If fingerprint is an integer background job for verifying will fail. 2018-04-25 14:50:36 +02:00
Martin Edenhofer
3779ccc919 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-04-25 14:24:34 +02:00
Martin Edenhofer
11639e2d33 Added test for model binding after relogin. 2018-04-25 14:24:06 +02:00
Ryan Lue
856666db63 Merge pull request #1822 from sscholl/develop
Check for LDAP `namingcontexts` before calling it (fixes #1814)
2018-04-25 17:54:33 +08:00
Martin Edenhofer
5aee0b7d4b Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-04-25 01:51:01 +02:00
Thorsten Eckel
f2bf4cbd02 Refactored Channel::Filter RSpec test and added helper. 2018-04-24 15:26:09 +02:00
Martin Edenhofer
3160efc1d9 Removed duplicate test file (it's no located under test/controllers/integration_sipgate_controller_test.rb). 2018-04-24 14:48:30 +02:00
Ryan Lue
cd40b8754a Revamp Travis CI build (add RSpec, rm integrations) 2018-04-24 20:36:17 +08:00
Thorsten Eckel
3d565458b2 Fixed issue #1972: 'Host unreachable' is shown when configuring an IMAP email inbox with SSL on port 993. 2018-04-24 09:40:00 +02:00
Martin Edenhofer
12c26bcc88 Merged sipgate controller tests into regular controllers tests to increase total speed of tests (no extra job needed). Removed duplicate calendar subscription tickets controller. 2018-04-23 15:33:29 +02:00
Martin Edenhofer
33f0082da6 Fixed issue #1669 - Ticket templates disappear after logout/login in same browser session. 2018-04-23 15:12:19 +02:00
Martin Edenhofer
59d20eb30a Merged auto wizard test into unit tests to increase total speed of tests. 2018-04-23 11:52:08 +02:00
Thorsten Eckel
4a4deff2a7 Fixed issue #1969: Password reset: No such file or directory @ rb_sysopen - app/views/mailer/application_wrapper.html.erb . 2018-04-23 08:59:49 +02:00
Thorsten Eckel
c2042d0595 Fixed issue #1332: CalendarimportSync-Errors in Outlook 2016:
As described in https://github.com/icalendar/icalendar/issues/116
2018-04-22 20:15:21 +02:00
Thorsten Eckel
74dd1b21ec Fixed issue #1966: Paginated search results on Organizations can never be empty for queries that have at least one result (on an earlier page). 2018-04-20 18:28:01 +02:00
Thorsten Eckel
fd96ac58e6 Merge branch 'develop' of https://github.com/zammad/zammad into develop 2018-04-20 13:49:30 +02:00
Thorsten Eckel
050fdca64b Fixed issue of unnecessary "Unable to get asset for 'article':..." logging. 2018-04-20 13:49:10 +02:00
Martin Koppehel
e4c233a710 Implement STARTTLS for IMAP (#1963)
Fixes #769 - Imap + STARTTLS.
2018-04-20 13:46:09 +02:00
Thorsten Eckel
7a1acbe101 Fixed issue #1642: Incorrect redirect_uri during OAuth2 access token request breaks integrations. 2018-04-20 11:18:31 +02:00
Ryan Lue
5f728f20c3 Merge branch 'develop' of github.com:zammad/zammad into develop 2018-04-19 17:40:44 +08:00
Ryan Lue
a04edeb7ff Add wait before retrying failed jobs (Fix #1950) 2018-04-19 16:18:39 +08:00
Jochen Hepp
0afa283a20 Slack::Notifier::post (slack-notifier-2.3.1) returns an array of UserAgent::Result (#1878) 2018-04-19 14:04:23 +08:00
Martin Edenhofer
2f7f9bb183 Adopted test with new live api behaviour. 2018-04-18 11:20:27 +02:00
Martin Edenhofer
c5e794d37b Implemented issue #1954 - Allow to automatically linking of existing user by initial login via third party authentication provider. 2018-04-18 11:17:29 +02:00
Muhammad Nuzaihan
c02393399a improve on detection of mime-type via Store object. fixes #1919 2018-04-16 17:58:03 +08:00
Martin Edenhofer
7fac7501f7 Follow up fix for issue #1952 - New ticket attributes is also show for customers (which should not). 2018-04-16 02:43:30 +02:00
Martin Edenhofer
6b2e43baef Fixed issue #1952 - New ticket attributes is also show for customers (which should not). 2018-04-14 09:49:44 +02:00
Martin Edenhofer
221c8a0538 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-04-13 16:26:11 +02:00
Muhammad Nuzaihan
28b789c47b improves twitter outgoing direct message, fixes #1931 2018-04-13 22:19:48 +08:00
Martin Edenhofer
1088a30086 Code cleanup. 2018-04-13 16:10:21 +02:00
Martin Edenhofer
711a704602 Fixed javascript runtime error of no icon name is given. 2018-04-13 15:37:07 +02:00
Thorsten Eckel
16795605e4 Fixed bug: Changes to Setting 'html_email_css_font' are only reflected after restarting Zammad. 2018-04-13 13:43:18 +02:00
Felix Niklas
edc39d801e Chat: prevent clicking onto the status from closing the chat
Users might accidentally close the chat because they click on the online status of the agent since it looks a bit like a button

fixes #1826, thanks to @silsha for the request
2018-04-13 13:24:18 +02:00
Martin Edenhofer
cf16264940 Implemented issue #1951 - Allow pagination in search result with more then 100 results. 2018-04-13 09:22:55 +02:00
Martin Edenhofer
9791c6b72c Fixed issue #1933 - Can't find organization anymore after index rebuild. 2018-04-13 09:11:48 +02:00
Thorsten Eckel
fbeccbc85c Updated to latest rubocop version. 2018-04-12 16:59:07 +02:00
Felix Niklas
777fe192eb CSS refactor: clickable areas now inherit base css from %clickable
- adds touch-action: manipulation that improves the click latency for touch input
2018-04-12 16:52:26 +02:00
Felix Niklas
b585f46ac6 Datetime: add rtl support (correct arrows & positioning), fixes #1842 2018-04-12 16:52:25 +02:00
Felix Niklas
d8faaebbc7 Icon: support rtl {helpers} in icon names
Some arrows have to change their direction in an right-to-left layout. Based on the idea in css that start means left in ltr and right in rtl for now the icon method supports the {start} and {end} helpers that get turned into left and right depending on the directionality.
2018-04-12 16:52:25 +02:00
André Bauer
cdf0dd9d11 Merge pull request #1948 from MrGeneration/patch-1
Addition to zammad_ssl.conf
2018-04-12 13:43:24 +02:00
Martin Edenhofer
1247425310 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-04-12 13:23:56 +02:00
Martin Edenhofer
e2addae80a Fixed issue #1337 - "Signin detected from a new device" Spam. 2018-04-12 13:23:48 +02:00
Mr.Generation
cc61015062 Addition to zammad_ssl.conf
Added commented-out Proxy-Pass-settings that make the options work on openSuse and maybe other systems too. My apache 2.4 did not proxy without " "retry=1 acque=3000 timeout=600 keepalive=On" " and just threw 404. Might need testing if this is new in general. I know Ubuntu systems that work the same way.
2018-04-12 12:20:32 +02:00
Felix Niklas
d0202d73d3 Timepicker: fix highlight minutes & parse hour
- fix highlight minutes when typing in the hour, fixes #1928
- parse hour when a column gets typed
2018-04-12 12:18:28 +02:00
Martin Edenhofer
ec905e160f Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-04-12 11:28:19 +02:00
Martin Edenhofer
46d9fad169 Updated md5 sum of delivered avatar images. 2018-04-12 11:28:08 +02:00
Felix Niklas
88e53e18da Action Dropdown: make sure that the action-icon is white 2018-04-12 11:02:59 +02:00
Felix Niklas
3d93443b01 Table: fix that actions in inactive rows are shown correctly
fixes #1941
2018-04-12 11:02:41 +02:00
Muhammad Nuzaihan
d98f78e50d improve on icinga detection of recovery alerts for autoclose function #1907 2018-04-12 00:44:04 +08:00
Thorsten Eckel
b60775627d Merge branch 'develop' of https://github.com/zammad/zammad into develop 2018-04-10 11:58:44 +02:00
Thorsten Eckel
577e2b1204 Fixed issue #1936: Generated chat widget code misses required option chatId. 2018-04-10 11:56:49 +02:00
Thorsten Eckel
d4519e3444 Improved gitignore file to ignore automatically and dynamically generated files when running Zammad. 2018-04-10 11:56:49 +02:00
Thorsten
53f6118e2c Merge pull request #1898 from mbeijen/812-descriptions
Fix descriptions on calendar, overview, twitter
2018-04-09 09:04:46 +02:00
Muhammad Nuzaihan
96bd39d861 improve on tests to count attachment and check attachment size 2018-04-09 14:49:32 +08:00
Muhammad Nuzaihan
f8adf31ec6 make sure any attachments should be attached with a content-id 2018-04-07 13:01:57 +08:00
Martin Edenhofer
7dc66a14f4 Log message if of every processed email (to have a better debugging possibility in general). 2018-04-06 10:58:00 +02:00
Thorsten Eckel
79a652b917 Fixed dependency issue: composite_primary_keys 10.0.1 is not compatible with Rails 5.1.5 due to the following change: 1a723c65bb 2018-04-05 15:30:17 +02:00
Martin Edenhofer
7e91e3ca4a Fixed issue #1923 - Pulldowns are not sorted currently. 2018-04-05 06:13:04 +02:00
Martin Edenhofer
49d2b040de Allow postmaster filter and signatures to clone. 2018-04-05 04:59:46 +02:00
Martin Edenhofer
f710f8f7ad Improved code layout. 2018-04-05 04:58:53 +02:00
Martin Edenhofer
050f5527e6 Fixed issue #1920 - Sometimes notifications are note marked as seen if somebody else already closed the ticketed. 2018-04-05 04:53:07 +02:00
Martin Edenhofer
20e0784c34 Fixed issue #1917. Only images in new note are lost on submit. 2018-04-04 10:52:29 +02:00
Martin Edenhofer
cef84ef74f Improved UX for destroy confirm dialog. 2018-04-04 10:32:26 +02:00
Thorsten Eckel
0c917e13aa Fixed issue #1902 - Spaces in link URLs are removed. 2018-04-03 17:46:45 +02:00
Thorsten Eckel
e48ca057fd Fixed issue #1913 and #1914: Given template parameters for rendering ticket create view are not displayed. 2018-04-03 17:08:42 +02:00
Thorsten Eckel
7954ee0dce Follow up 8c5f87c9d4: Improved detection of ES attachment plugin error and output message. 2018-04-03 16:23:01 +02:00
Thorsten Eckel
525de8413c Follow up: Removed validation code since Selenium tests work in the PRODUCTION environment while the test code runs in TEST environment. That's why you can't access the DB from within a browser test. 2018-04-03 11:01:28 +02:00
Martin Edenhofer
213ec47696 Update gem --system to work on travis environment. 2018-04-03 01:40:49 +02:00
Martin Edenhofer
5ec7293212 Update gem to work on travis environment. 2018-04-03 01:29:19 +02:00
Martin Edenhofer
cea06831df Updated travis to ruby 2.4.4. 2018-04-03 01:10:30 +02:00
Martin Edenhofer
822db47014 Upgrade to rails 5.1.5 and ruby 2.4.2. 2018-04-03 00:23:39 +02:00
Martin Edenhofer
2688c23d9a Implemented config setting to show total number of objects in a grouping in a table view. 2018-03-30 13:09:57 +02:00
Thorsten Eckel
76df6d32f9 Fixed issue #1905: Stored Exchange remote_id in login causes sync to update wrong user. 2018-03-29 16:26:57 +02:00
Thorsten Eckel
50fa66fdd7 Refactoring: Provide of :mapped is already handled in ::Sequencer::Unit::Import::Common::Mapping::Mixin::ProvideMapped. 2018-03-29 16:26:47 +02:00
Thorsten Eckel
7680c51624 Fixed issue #1660 - ObjectManager Attribute of type Tree-Select mixes up children. 2018-03-29 16:22:52 +02:00
Thorsten Eckel
1e04b35d5a Improved RSpec system_init_done helper for DB migrations
Since DB migrations usually always check for system_init_done this is the new default behavior for all examples in a `type: :db_migration` spec. The default state is that Zammad is already initialized. This can be changed by passing `false` as a value to the meta tag `system_init_done`. See `spec/support/db_migration.rb` for more information.
2018-03-29 16:22:47 +02:00
Thorsten Eckel
2eaae8e5c4 Follow up - Fixed issue #1838 - Follow up issue #1752: Unable to migrate old object manager attribute fields. 2018-03-29 13:46:15 +02:00
Martin Edenhofer
a088321498 Followup fix for issue #1752 - tree got lost after update. 2018-03-29 03:07:13 +02:00
Martin Edenhofer
968074d8ef Prepared for 2.5.0. 2018-03-29 00:23:54 +02:00
Martin Edenhofer
7c23e2a2d0 Fixed issue 1882 - Clearing the entered value in a not required ticket field. 2018-03-28 12:24:57 +02:00
Martin Edenhofer
3b27a22364 Follow up for issue #1133 - use correct constructor name to work also in precompiled environments. 2018-03-28 10:02:06 +02:00
Martin Edenhofer
d52634701d Fixed issue #1794 - Admin users can be disabled by Agents. 2018-03-28 07:33:41 +02:00
André Bauer
46ed7a053b more travis-ci trigger name fixes 2018-03-26 21:21:30 +02:00
André Bauer
fc50ad600a fixed travis trigger names
# Do not touch the line above.
# Everything below will be removed.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Auf Branch develop
# Ihr Branch ist auf dem selben Stand wie 'origin/develop'.
#
# zum Commit vorgemerkte Änderungen:
#
# 	geändert:       .travis.yml
2018-03-26 20:46:11 +02:00
André Bauer
9e38a2ee82 fixed travis trigger scripts names 2018-03-26 20:43:14 +02:00
Thorsten Eckel
81dfe88d99 @muhammadn fixed issue #1866 - Failing Scheduler Delayed::Job - jobs are not listed in the monitoring result. 2018-03-26 17:43:52 +02:00
Martin Edenhofer
c300fdd4af Removed race condition in App.Collection.loadAssets() - sometimes shown online notifications was without title. 2018-03-26 12:03:45 +02:00
André Bauer
434c154d57 Merge pull request #1901 from rlue/bugfix/travis-build
Switch to container environment for Travis CI (really this time)
2018-03-26 08:54:28 +02:00
Ryan Lue
1a8054c1a4 Switch to container environment for Travis CI (really this time) 2018-03-25 11:39:46 +08:00
André Bauer
8978e74355 Merge pull request #1900 from zammad/revert-1899-bugfix/travis-build
Revert "Fix Travis CI build failures (by switching to containerized CI environment)"
2018-03-25 00:13:23 +01:00
André Bauer
59eb5c17ec Revert "Fix Travis CI build failures (by switching to containerized CI environment)" 2018-03-25 00:13:05 +01:00
André Bauer
d5e66d2c73 Merge pull request #1899 from rlue/bugfix/travis-build
Fix Travis CI build failures (by switching to containerized CI environment)
2018-03-24 17:30:10 +01:00
Ryan Lue
5f66ac73b2 Switch to containerized environment for Travis CI
Original (virtualized) environment led to a test failure not
reproducible in development. Containerized CI builds permit debugging
and troubleshooting on local development machines via Docker.
2018-03-24 23:06:18 +08:00
Michiel Beijen
d26d75fbbd Fix descriptions on calendar, overview, twitter
Closes #812.
2018-03-23 21:12:21 +01:00
luto
0cfaaab9cd fix typo in email settings: differenct=>different (#1897) 2018-03-23 17:26:21 +01:00
Thorsten Eckel
fd0e6d1b36 Fixed issue #1838 - Follow up issue #1752: Unable to migrate old object manager attribute fields. 2018-03-23 15:26:21 +01:00
Martin Edenhofer
4302da264d Updated gem for security reasons (CVE-2018-3741). 2018-03-23 07:39:04 +01:00
Thorsten Eckel
bf6192113a Improved overall performance by using logger.debug { ... } instead of logger.debug(...). This decreases the LDAP import dry runtime by ~33%. 2018-03-22 10:39:32 +01:00
Thorsten Eckel
307ce2f506 @muhammadn fixed issue #1716 - 'absolute' time formatting setting is not reflected on pending tickets. 2018-03-21 15:13:41 +01:00
Martin Edenhofer
6c90628944 Merge branch 'develop' of github.com:zammad/zammad into develop 2018-03-21 14:36:09 +01:00
Martin Edenhofer
2a39321959 Upgrade to rails 5.1.4 (upgrade will happen later). 2018-03-21 14:35:49 +01:00
Thorsten
23f13f7d8b Merge pull request #1885 from mbeijen/organisationen
Related to #812 and #556 - Admin object descriptions are in german an not translateable.
2018-03-21 14:33:48 +01:00
Martin Edenhofer
80b535df0f Fixed issue #1859 - Login fails after fast logout right after previous login. 2018-03-21 11:28:52 +01:00
Michiel Beijen
251e039255 Organisations: fix description
It was auf Deutsch. Fixes second bullet of #1867.
2018-03-20 20:44:09 +01:00
André Bauer
b103ffb9fb Merge pull request #1884 from mbeijen/do-you-to
User permissions: fix typo in popup
2018-03-20 20:37:26 +01:00
Michiel Beijen
6a7228aa82 User permissions: fix typo in popup 2018-03-20 20:25:57 +01:00
Michiel Beijen
626bf02a08 Device mails: make profile link clickable (#1883) 2018-03-20 20:04:50 +01:00
Martin Edenhofer
70847f2b41 Improved fetching activity stream, online notifications and recent viewed items. Improved REST API with full and expaned attributes. 2018-03-20 13:16:17 +01:00
Martin Edenhofer
2df0ddc248 Updated gem loofah to 2.2.1. 2018-03-20 11:31:44 +01:00
Martin Edenhofer
ee7319ab1f Follow up for issue #338 behaviour reply behaviour. 2018-03-19 11:33:47 +01:00
Martin Edenhofer
cc5a5fb9ae Implemented issue #338 - Autocomplete Email-Address-Fields. 2018-03-19 01:19:42 +01:00
André Bauer
55c45b15c4 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-03-16 22:20:20 +01:00
André Bauer
46fed0810a use ES_CONNECTION env var to delete old es index 2018-03-16 22:19:29 +01:00
Thorsten Eckel
6a0784ab4f Minor refactoring: Removed duplicate code. 2018-03-15 10:11:39 +01:00
André Bauer
15a280b449 delete old es index if mapper attachments plugin is found 2018-03-14 13:51:57 +01:00
Martin Edenhofer
e7c6f7413c Allow message id as selectable field in postmaster filter. 2018-03-12 12:06:39 +01:00
Felix Niklas
fadcf25060 Table: fix checkbox background 2018-03-09 13:50:56 +01:00
Thorsten Eckel
dc00c7703b Fixed issue #1856 as a follow up of issue #949: Unpermitted customer field in customer create ticket view. 2018-03-09 08:56:35 +01:00
Thorsten Eckel
c479fba664 Added check for supported elasticsearch version. 2018-03-09 08:55:25 +01:00
Thorsten Eckel
8c5f87c9d4 Humanized error messages created by failing elasticsearch requests. 2018-03-09 08:55:19 +01:00
Thorsten Eckel
ee5983cb03 Fixed issue #1857 - Direct access to organization tickets possible even though shared is deactivated. 2018-03-09 08:53:11 +01:00
Thorsten Eckel
68881113e4 Refactored FactoryBot User factory. 2018-03-08 15:32:59 +01:00
Thorsten Eckel
d00f82b63a Added FactoryBot Organization factory. 2018-03-08 15:32:59 +01:00
Martin Edenhofer
0f884b5342 Improved new "one" click to ticket create screen feature. Allow relogin without permanent changes to navigation registration. 2018-03-07 22:58:03 +01:00
Martin Edenhofer
5e62e3b2e5 Skip Zendesk tests. Some network outages. 2018-03-07 20:23:20 +01:00
Martin Edenhofer
e05c0f6064 Added probing for modal dialog to prevent conflicts of more modal dialogs at same time. 2018-03-07 16:04:36 +01:00
Thorsten Eckel
a553e4c118 Fixed typo and removed old comment about purpose of the now relevant block for catching race conditions. 2018-03-06 17:07:48 +01:00
Thorsten Eckel
6b73ff3c24 Fixed broken browser test. 2018-03-06 16:09:07 +01:00
Martin Edenhofer
d830f0eb2d UI improvement: Show only real attachments in attachment list. Move original formatted message into footer of article (beside donwload raw message). 2018-03-06 15:07:40 +01:00
Thorsten Eckel
4d7db317cc Added browser test to verify the fix. 2018-03-06 13:49:30 +01:00
Thorsten Eckel
2ecc60f22a Added Setting to define custom HTML Email CSS font. 2018-03-06 13:28:21 +01:00
Thorsten Eckel
414d739ff8 Fixed issue #1856 as a follow up of issue #949: Unpermitted customer field in customer create ticket view. 2018-03-06 12:25:48 +01:00
Martin Edenhofer
95e5eb57a8 Implemented issue #1133 - Added generic clone method for admin features. 2018-03-06 11:44:38 +01:00
Martin Edenhofer
0d644ea7c7 Show overview options in overview screen also if permissions are available. 2018-03-06 10:37:16 +01:00
Martin Edenhofer
e5f732f1e1 User user order attributes based on object attribute manager. 2018-03-06 08:10:33 +01:00
Martin Edenhofer
e64ec3fa67 Improved memory food print by using pluck in large select. 2018-03-06 08:10:19 +01:00
Martin Edenhofer
008cfeea69 Fixed issue #1857 - Missing To and Cc field when forwarding an article of a customer without an email address. 2018-03-06 06:31:53 +01:00
Martin Edenhofer
7e1b25468f Use direct click in personal navigation area if only one entry exists. 2018-03-06 06:30:12 +01:00
Martin Edenhofer
b91fceff08 Removed debugging. 2018-03-04 05:57:58 +01:00
Martin Edenhofer
3bd0642b50 Moved from full to change permissions to merge tickets. Added controller tests. 2018-03-04 05:11:04 +01:00
Martin Edenhofer
d76facd0d5 Fixed missing form dependency function in bulk action. 2018-03-04 03:25:35 +01:00
Thorsten Eckel
b1af9b8050 Improved readability of HTML parser error message and backtrace. 2018-03-02 20:27:13 +01:00
Thorsten Eckel
1e9ed11126 Fixed issue #1852: Can't configure local MTA after SMTP was configured as outbound server. 2018-03-02 20:26:49 +01:00
Thorsten Eckel
8bc0237a06 Fixed issue #1852: Can't configure local MTA after SMTP was configured as outbound server. 2018-03-01 20:25:11 +01:00
Thorsten Eckel
afb78f2200 Fixed issue #1488 - Role - Group can't be unchecked. 2018-02-28 15:02:06 +01:00
Thorsten Eckel
16d89b1fa7 Fixed bug: Empty given parameter overwrites/removes group access structure. 2018-02-28 12:58:10 +01:00
Martin Edenhofer
56c9d87ac9 Improved css for attachment list and attachment list with preview. 2018-02-28 02:04:23 +01:00
Martin Edenhofer
c4c96d0f2b Generate list for overview group by based on current ticket attributes. 2018-02-28 01:11:23 +01:00
Thorsten Eckel
3c1744af0b Fixed issue #1733: Can't un-link i-doit Objects in a Ticket. 2018-02-27 16:52:58 +01:00
Thorsten Eckel
77ec399fe9 Further refactoring and bugfixing. 2018-02-27 16:52:30 +01:00
Thorsten Eckel
db9d0a0eae Follow up: Fixed issue #1810 - Reset notification receiving to 'full' again to avoid unwanted spamming to users that have no direct permissions to the ticket. This needs a broader refactoring. 2018-02-27 11:41:59 +01:00
Thorsten Eckel
196672c50e Fixed issue #1810: To high permissions required to move Ticket into Group (change) and receive notification about changes (full). 2018-02-27 10:48:56 +01:00
Martin Edenhofer
8005d3aee5 Added plugin mechanism to configure plugins if a form field in ticket create or ticket zoom has changed (ported group based signature and form dependencies to plugins). 2018-02-27 09:54:50 +01:00
Rolf Schmidt
1e311034a0 Fixed issue #949 - Sometimes pending time is show as first ticket attribute. 2018-02-26 11:40:57 +01:00
Martin Edenhofer
8d725040a9 Show also roles based groups in profile notification settings. 2018-02-26 11:36:19 +01:00
Thorsten Eckel
5aa0d5b184 Fixed bug: There is nothing like console.notice. 2018-02-23 08:41:36 +01:00
Martin Edenhofer
8ed2bdd234 Improved preview detection for attachment. 2018-02-22 14:51:59 +01:00
Martin Edenhofer
8a2579139e Unique Avatar: Follow up fix randomness. 2018-02-21 10:54:47 +01:00
Felix Niklas
3bd83e7cba Unique Avatar: fix randomness 2018-02-21 10:40:09 +01:00
Thorsten Eckel
0f28d1f0b6 WIP TE. 2018-02-20 16:29:31 +01:00
Martin Edenhofer
077d631ef2 Added config option to display email in result of user organization selector widget. 2018-02-20 13:26:07 +01:00
Martin Edenhofer
327749c29b Improved attachment preview api, introduced @canPreview(). 2018-02-20 12:40:14 +01:00
Martin Edenhofer
b0597ad04d Implemented attachment preview in ticket zoom and optional an dedicated sidebar to show all attachments if whole ticket. Thanks to @mrflix. 2018-02-20 07:47:32 +01:00
Martin Edenhofer
fa53eeb33a Merge branch 'private-richtext-object-resizing-shim' into develop 2018-02-20 06:03:02 +01:00
Martin Edenhofer
38a7995c05 Improved test for activity stream. 2018-02-20 05:30:46 +01:00
Martin Edenhofer
6a0f5d4c25 Initial generic csv based import of text modules, users, organizations and tickets for model and controller. 2018-02-20 05:29:30 +01:00
Martin Edenhofer
4537a281a3 Performance improvement to generate faster assets (just lookup groups once). 2018-02-20 04:52:52 +01:00
Thorsten Eckel
f25815b31d Fixed issue #1841: Taskbar item race condition causes JS exception. 2018-02-19 18:00:45 +01:00
Martin Edenhofer
313e0c3ee9 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-02-19 11:16:18 +01:00
Martin Edenhofer
a43d7a7aa7 Fixed typo. 2018-02-19 11:16:09 +01:00
Martin Edenhofer
ab9e503b2b Do not validate owner id in import mode (needed for historical reasons). 2018-02-19 11:15:47 +01:00
Martin Edenhofer
a6b61f31c5 Increased body size of trigger email message. 2018-02-19 11:13:12 +01:00
Felix Niklas
30b995a58c TicketMerge: use veryLarge modal size
might fix #1266
2018-02-17 23:11:59 +01:00
Felix Niklas
73160c25d1 Modal: add support for size veryLarge (990px)
Largest so far was ‘large’ with a max-width of 740px.
2018-02-17 23:11:31 +01:00
Thorsten Eckel
ef1236b3ab Added .active? to Import backends default API for e.g. monitoring checks. 2018-02-17 12:40:14 +01:00
Felix Niklas
fa449de9ed enableObjectResizingShim: fix deselect & allow delete
- fix deselect when clicking somewhere else
- allow to delete the image via backspace
2018-02-16 14:08:32 +01:00
Martin Edenhofer
7dc2875a49 Enhancement to issue #1816 - also reset owner if agent isn't agent anymore. 2018-02-16 14:05:02 +01:00
Martin Edenhofer
a1391a5cd3 VIP. 2018-02-16 12:18:44 +01:00
Martin Edenhofer
faad5f9ebd WIP. 2018-02-16 11:19:26 +01:00
Martin Edenhofer
894afeeb42 WIP. 2018-02-16 10:35:50 +01:00
Martin Edenhofer
db8b54f64c WIP. 2018-02-16 09:41:50 +01:00
Martin Edenhofer
347dd95c2f Extended tests for checkbox and radio element. 2018-02-16 09:08:08 +01:00
Felix Niklas
15e9fe7186 enableObjectResizing shim 1. step
open bugs: the blur event doesn’t fire. so when clicking into the text after the controls appeared the controls don’t disappear as they should. also when clicking onto another image when the controls of one image are visible first the controls of the active image dissapear and the controls of the current image don’t directly disappear
2018-02-15 19:13:21 +01:00
Thorsten Eckel
506fe55608 Follow up 6f87ebf7c7: Fixed wrong permission key. 2018-02-15 19:01:39 +01:00
Felix Niklas
76f261ecb3 contenteditable & textmodule: refactor bindEvents 2018-02-15 17:08:04 +01:00
Martin Edenhofer
47c079d5d7 Improved logging for used backeds. 2018-02-15 12:25:47 +01:00
Martin Edenhofer
7dbc69549d Improved shown open ticket color indicator. 2018-02-15 12:24:37 +01:00
Martin Edenhofer
5f5e97bb40 Improved token copy dialog. 2018-02-15 12:23:44 +01:00
Felix Niklas
888e0e79b8 Scheduler: prevent filter value from shrinking
fixes #1765
2018-02-15 08:42:53 +01:00
Felix Niklas
9860f9e121 LTR text in a RTL profile: prepare css #1835 2018-02-14 16:26:06 +01:00
Felix Niklas
c6f1ab7074 Dropdown menu: contain the scroll - prevent window scroll
see https://developers.google.com/web/updates/2017/11/overscroll-behavior
2018-02-14 15:47:12 +01:00
Felix Niklas
cb51a91b61 Textmodule dropdown: correctly limit the width 2018-02-14 15:46:25 +01:00
Felix Niklas
6d4b039811 fix RTL profile, wrong place for Text modules pop-up windows after pressing
#1832
2018-02-14 15:45:55 +01:00
Felix Niklas
e40209f3f6 fix #1831 Close search button at the wrong side when using RTL language 2018-02-14 14:49:26 +01:00
Felix Niklas
55421ba912 Unique avatars: fix position for bigger avatars 2018-02-14 14:46:19 +01:00
Rolf Schmidt
6daaecb5fd Fixed issue #1805 - API: Ticket creation - wrong user in notifcations, activity stream. 2018-02-13 17:19:22 +01:00
Martin Edenhofer
bc0777274f Fixed issue #1829 - The column widths of a table are shifted after manual change and use of pagination. 2018-02-13 17:13:31 +01:00
Martin Edenhofer
2432b852b2 Implemented issue #1825 - Auto assignment of unassigned tickets at first open time. 2018-02-12 17:31:02 +01:00
Thorsten Eckel
3fd1c2de7a Added monitoring check for stuck ImportJob backends. 2018-02-12 15:04:24 +01:00
Martin Edenhofer
bc11d4c2b0 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-02-12 09:44:20 +01:00
Martin Edenhofer
a987c10051 Improved usage (autoset) of origin_by of article model. 2018-02-12 09:35:54 +01:00
Muhammad Nuzaihan
8718745a81 Fix a problem with default value not being shown #1792 2018-02-12 16:16:27 +08:00
Muhammad Nuzaihan
315f1fcc57 Merge branch 'develop' of https://github.com/zammad/zammad into develop 2018-02-10 18:44:21 +08:00
Muhammad Nuzaihan
09caba6aed Improve auto assignment for inactive agents or agents in inactive groups to default "-" user for issue #1816 2018-02-10 18:42:05 +08:00
Muhammad Nuzaihan
5940a9f6de Improve auto assignment for inactive agents or agents in inactive groups to default "-" user 2018-02-10 18:40:57 +08:00
Simon Eric Scholl
858f259b96 avoid null pointer exception
fixes #1814
2018-02-09 16:50:39 +01:00
Rolf Schmidt
4bd9dcf518 Fixed issue #1769 - Ticket shown multiple times in overview. 2018-02-09 16:46:55 +01:00
Martin Edenhofer
351b0dec66 Fixed issue #1813 - JS error on creating new customer. 2018-02-09 14:21:02 +01:00
Martin Edenhofer
4b99614503 Revert "Fixed issue #1769 - Ticket shown multiple times in overview."
This reverts commit 371a0494b7.
2018-02-08 06:37:15 +01:00
Martin Edenhofer
d0e25f2e5b Do not auto probe avatars in import mode (to increase import speed). 2018-02-08 06:35:02 +01:00
Martin Edenhofer
3328641834 If no content type is set for attachment, use application/octet-stream as fallback. 2018-02-08 06:33:23 +01:00
Rolf Schmidt
0f539febdd Merge branch 'develop' into private-bugfix-1769-rs-develop 2018-02-07 11:51:29 +01:00
Rolf Schmidt
bfd89995f4 Allow clearbit failure. 2018-02-07 11:50:19 +01:00
Rolf Schmidt
2f0f704ddf Fixed issue #1322 - Customer response via note does not trigger escalation. 2018-02-07 11:46:17 +01:00
Rolf Schmidt
371a0494b7 Fixed issue #1769 - Ticket shown multiple times in overview. 2018-02-07 11:44:38 +01:00
Muhammad Nuzaihan
d33c80bbaa Fixes and improves reporting in #1809 by not showing merge but still use user's input 2018-02-07 17:15:00 +08:00
Martin Edenhofer
261ef6f368 Updated nokogiri to verion 1.8.2. 2018-02-07 05:32:35 +01:00
Muhammad Nuzaihan
76ceb4e9b3 #1617 make code conform to the style used, add tests for false boolean to improve coverage 2018-02-06 16:57:17 +08:00
Thorsten Eckel
c63e6e5be3 Fixed issue #1795 - Forcing samaccountname as login attribute is not suitable and causes issues in divergent setups. 2018-02-05 14:43:14 +01:00
Thorsten Eckel
fc6220600f Fixes an issue introduced with commit 1ec2b514bb which causes the functionality of the Sequencer Unit Import::Ldap::User::Lookup::Attributes to change. New attribute dependencies are introduced that the Exchange Sequence can not fulfill. The original functionality was moved to the more generic Sequencer Unit namespace Import::Common::Model::FindBy::UserAttributes. This should be used for the Exchange FolderContact Sequence. 2018-02-05 14:43:09 +01:00
Muhammad Nuzaihan
6d814d535a Merge branch 'develop' of https://github.com/zammad/zammad into develop 2018-02-05 21:36:32 +08:00
Muhammad Nuzaihan
8de1064c24 Merge branch 'private-pull-request-1617' into develop 2018-02-05 21:32:36 +08:00
Muhammad Nuzaihan Bin Kamal Luddin
97a9991609 Merge pull request #1617 from umarsheikh/cast-boolean-object-attribute
cast 'true' to true and 'false' to false in case of boolean column ad…
2018-02-05 21:31:58 +08:00
Muhammad Nuzaihan
4a31f32e45 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-02-05 21:00:50 +08:00
Muhammad Nuzaihan
4c38d7a719 Improved checks on 'Follow Up Possible' on frontend/backend API if set in user group 2018-02-05 21:00:30 +08:00
Umar Sheikh
c45e826551 rubocop fix 2018-02-04 20:54:24 +05:00
Umar Sheikh
49223a51c7 Merge branch 'develop' into cast-boolean-object-attribute 2018-02-04 20:11:09 +05:00
Martin Edenhofer
9cc1c471a3 Small code improvement for lookup of existing customer. 2018-02-02 21:06:55 +01:00
Martin Edenhofer
026a153ebb Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-02-02 21:05:33 +01:00
Martin Edenhofer
5b65107619 Removed platform list. 2018-02-02 21:05:16 +01:00
Martin Edenhofer
06404c74eb Fixed use of new namespace for App.Utils.parseAddressListLocal(). 2018-02-02 21:04:16 +01:00
André Bauer
956525fd55 Merge branch 'backup' into develop 2018-02-02 14:28:44 +01:00
Martin Edenhofer
d2d597b05c Added possibility to create customer at ticket create with customer hash. 2018-02-02 13:10:52 +01:00
Muhammad Nuzaihan
7f45bf69fc Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-02-02 18:55:11 +08:00
Muhammad Nuzaihan
10dc56c7b8 #1522 improve on adding option to add new customer when changing ticket owners 2018-02-02 18:54:48 +08:00
Martin Edenhofer
17aa655dcc Improved html markup. 2018-02-02 07:45:42 +01:00
Martin Edenhofer
f67dce2266 Refactoring of sidebar and sidebar tabs backends. Added config option to show sidebar customer ticket indicator colored. 2018-02-02 07:34:57 +01:00
André Bauer
228b800df9 changed shebang in backup scripts 2018-02-01 07:09:32 +01:00
Martin Edenhofer
0d62ee7b9a Fixed typo. 2018-01-31 18:57:23 +01:00
Muhammad Nuzaihan Bin Kamal Luddin
be71c6c37d Merge pull request #1762 from menthol/develop
Add french email template
2018-01-31 23:52:11 +08:00
Martin Edenhofer
a0c04ed190 Fixed issue# 1790 - On reply of an email, the recipient will not be set if sender header contains invalid email addresses. 2018-01-31 14:13:23 +01:00
pebosi
6f08071c3d Fix typo to fix chat (#1791) 2018-01-31 14:04:53 +01:00
Martin Edenhofer
789afc592a Extended editable() method to parse requested permission type as argument. 2018-01-31 10:26:41 +01:00
Martin Edenhofer
3ad13472d8 Improved error handling. 2018-01-31 10:25:31 +01:00
Muhammad Nuzaihan
93b527ad85 Merge branch 'develop' of https://github.com/zammad/zammad into develop 2018-01-31 16:02:25 +08:00
Muhammad Nuzaihan
54d6f4a680 Merge branch 'private-pull-request-1718' into develop 2018-01-31 16:01:29 +08:00
Muhammad Nuzaihan Bin Kamal Luddin
52e34e82fe Merge pull request #1718 from umarsheikh/add-integer-and-tree-select-in-conditions
fixes #1706, add integer and tree_select types to Triggers Management(New Trigger)…
2018-01-31 15:55:01 +08:00
Martin Edenhofer
5415e3462e Increased overview limit from 500 to 1000. 2018-01-30 15:06:28 +01:00
Martin Edenhofer
402300c848 Added helper method to process unprocessable mails again (Channel::EmailParser.process_unprocessable_mails). 2018-01-30 15:05:52 +01:00
Martin Edenhofer
5514023ac9 Updated for Zammad 2.4. 2018-01-30 14:59:45 +01:00
Martin Edenhofer
eb43369754 Added tests for CanCleanupParam concern. 2018-01-30 01:19:23 +01:00
Martin Edenhofer
90f4b03e07 Only linkify http urls, not mailto urls. 2018-01-30 00:34:58 +01:00
Martin Edenhofer
5e3f854cca Improved client ticket editable check. 2018-01-29 04:04:00 +01:00
Martin Edenhofer
724879c6c8 Implemented issue #422 - Convert Chat into Ticket. 2018-01-29 03:44:50 +01:00
Martin Edenhofer
5fb6bfed7d Added feature to restrict chat by ip or/and country. 2018-01-29 00:52:02 +01:00
Never
b7d949bf38 Fixed #1783 - Dixed otrs migration plugin download links / unified host names (#1784) 2018-01-28 20:25:21 +01:00
Martin Edenhofer
4c70e9e677 Merge branch 'develop' of github.com:zammad/zammad into develop 2018-01-28 19:10:47 +01:00
Martin Edenhofer
a324553072 Added counter support for sidebar tab (per default show open tickets of customer). 2018-01-28 19:10:22 +01:00
Never
5451c75846 Fixed #1781 - added OTRS 6 download link. 2018-01-28 19:07:15 +01:00
Martin Edenhofer
cc1d38f506 Added ability to add custom notes to ticket create screen. 2018-01-28 01:24:54 +01:00
Martin Edenhofer
b1c57552d3 Improved wording. 2018-01-28 01:01:45 +01:00
Muhammad Nuzaihan
eb8d23ba75 Fixes #1758 disallow assigning admin/admin.*/ticket.agent if default_at_signup is set to true 2018-01-27 02:57:27 +08:00
Martin Edenhofer
95779712b5 Improved shown idoit information. Moved title of object to foreground (title is more important then the id). 2018-01-25 14:30:21 +01:00
Martin Edenhofer
8895e878f0 Fixed issue #1778 - Attachments with content-id header but not shown as inline part are note taken for forward action. 2018-01-25 13:13:57 +01:00
Martin Edenhofer
de9058e704 Support correct article sender if sender address is system email address (needed to us correct reply recipients in ui). 2018-01-25 11:09:29 +01:00
Muhammad Nuzaihan
f3e5412de4 Fixes issue again for #1752 #1742 with object manager 2018-01-25 16:33:30 +08:00
Martin Edenhofer
2a6abbabee Improved CPU usage. 2018-01-25 06:42:12 +01:00
Thorsten Eckel
a67299d7fe Added failed Import::Job backend results to the monitoring endpoint. 2018-01-24 17:16:26 +01:00
Thorsten Eckel
57294646a9 Improved performance by caching the result process wide instead of globing and accessing the database multiple times. 2018-01-24 17:01:33 +01:00
Thorsten Eckel
38d757c65b Fixed issue #1771 - LDAP sync should keep local role assignments if no LDAP Group <-> Zammad Role map is configured. 2018-01-24 15:07:35 +01:00
Martin Edenhofer
7f3d889bed Added support for short year format. 2018-01-24 09:24:34 +01:00
Martin Edenhofer
4fa67c3d0c Set mask for password if email wizard is opened again. 2018-01-24 09:24:10 +01:00
Martin Edenhofer
b059549d88 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-01-23 16:44:07 +01:00
Thorsten Eckel
361ee96b3b Follow up - Fixed bug: OTRS import - User queue/group permissions are not transfered. 2018-01-23 15:48:16 +01:00
Martin Edenhofer
27265b0596 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-01-23 13:48:47 +01:00
Martin Edenhofer
85b9875714 Improved wording. 2018-01-23 11:25:54 +01:00
Thorsten Eckel
225cf81ce2 Fixed bug: OTRS import - User queue/group permissions are not transfered. 2018-01-23 10:09:20 +01:00
Thorsten Eckel
bef740612a Fixed bug: OTRS import fails for Roles without users assigned. 2018-01-23 10:08:07 +01:00
Martin Edenhofer
ff93c7f22c Improved closing modal dialog, ask user if form has changed. 2018-01-23 06:48:25 +01:00
Thorsten Eckel
c66e22bef9 Fixed issue #1764 - LDAP login not possible since change to objectguid. 2018-01-22 16:54:07 +01:00
Muhammad Nuzaihan
4b8f1b9452 fixes #1756 with security issue of content injection in excel generated data 2018-01-22 22:37:42 +08:00
nath
12726b8aaa Add french email template 2018-01-19 20:47:14 +01:00
Martin Edenhofer
8104d7756a Improved email processing with corrupt from headers. 2018-01-18 13:48:57 +01:00
Thorsten Eckel
33c09ee2e5 Follow up: Fixed issue #1709 - Use 'samaccountname' as login default. 2018-01-17 19:26:23 +01:00
Muhammad Nuzaihan
a316df0829 Fixes issue #1752 #1742 with object manager 2018-01-17 22:24:49 +08:00
Thorsten Eckel
119783d48d Fixed issue #1751 - Loss of LDAP group assignment is not reflected in Zammad role assignment. 2018-01-17 11:26:41 +01:00
Thorsten Eckel
2a71c6104b Fixed issue #1753 - Ticket search fails for limit exceeding 100 with internal server error. 2018-01-16 17:14:08 +01:00
Thorsten Eckel
5f3f2e4e45 Added generic Sequencer Unit to have a statistics diff with a custom key. 2018-01-16 09:16:27 +01:00
Thorsten Eckel
5208d3212a Improved code layout: Made method internal. 2018-01-16 09:16:27 +01:00
Martin Edenhofer
b4ec936db0 Fixed test. 2018-01-16 09:06:26 +01:00
Martin Edenhofer
a7b65d473a Improved past in from word/excel (also allow border-style in backend). 2018-01-16 08:39:28 +01:00
Martin Edenhofer
cef163fcc0 Added support to ignore system id for follow up checks. 2018-01-16 07:41:30 +01:00
Martin Edenhofer
4c703fb38e Improved past in from word/excel. 2018-01-16 00:29:48 +01:00
Muhammad Nuzaihan
7c19f175ff fix conflicts 2018-01-16 01:19:12 +08:00
Muhammad Nuzaihan
62b3d7ddcb #1683 fix trigger with "contains one not" not ignoring the tag(s) set 2018-01-16 00:49:46 +08:00
Martin Edenhofer
22c5b24fb7 Fixed issue #1749 - Unable to send auto reply if from contains 2 or more senders with invalid email address. 2018-01-15 16:22:52 +01:00
Muhammad Nuzaihan
c2a5c3d9e2 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-01-15 19:55:07 +08:00
Muhammad Nuzaihan
84121e9fda #1741 do not show merged issues in reports 2018-01-15 19:54:26 +08:00
Thorsten Eckel
1ec2b514bb Fixed issue #1746 - Multiple LDAP users with same samaccountname cause repeatedly update of local user. 2018-01-15 11:29:36 +01:00
Thorsten Eckel
132a9997eb Fixed issue #1709 - LDAP User uid attribute is not reliable. 2018-01-15 10:09:50 +01:00
Martin Edenhofer
df33dc1d71 Implemented issue #1745 - article.body support for triggers. 2018-01-12 14:59:25 +01:00
Martin Edenhofer
6f87ebf7c7 Improved performance of ticket zoom and reduced cpu load scheduler. 2018-01-12 13:44:02 +01:00
Thorsten Eckel
686f56828d Improved error logging in case of failing ImportJob. 2018-01-12 12:54:47 +01:00
Thorsten Eckel
21421f0695 Follow up: Revoked commit 50215b0b8e which fixes issue 1663 - remote_id-s case sensitivity and storage format should be decided per remote_id / remote. 2018-01-12 09:38:48 +01:00
Thorsten Eckel
50215b0b8e Fixed issue #1663 - Sequencer ExternalSync lookup and storage is affected by ID collisions. 2018-01-10 15:26:34 +01:00
Thorsten Eckel
0ea8dd7c45 Fixed issue #1740 - Exchange is limited to 1000 entries and wont sync more. 2018-01-10 14:24:36 +01:00
Thorsten Eckel
8300887bae Added advanced thread logging for better reasoning and error handling of Scheduler threads. 2018-01-10 11:56:24 +01:00
Thorsten Eckel
405a8ce77b Improved handling of non StandardError exceptions in Scheduler Threads for better debugging, reasoning and error handling of Scheduler threads. 2018-01-10 11:56:24 +01:00
Martin Edenhofer
48f3a7efe5 Fixed table width in admin interface if delete col. is shown. 2018-01-10 11:28:56 +01:00
Thorsten Eckel
23018aa603 Follow up: Fixes issue #1664 - Missing support for groupOfUniqueNames / uniquemember in LDAP sync. 2018-01-09 20:08:46 +01:00
Thorsten Eckel
7e22b9bd29 Merge branch 'private-pull-request-1677' into develop 2018-01-09 19:26:41 +01:00
Thorsten Eckel
a8e11c50f3 Follow up: Fixes issue #1664 - Missing support for groupOfUniqueNames / uniquemember in LDAP sync. 2018-01-09 14:58:41 +01:00
Martin Edenhofer
26800ad02f Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2018-01-09 14:15:17 +01:00
Martin Edenhofer
be751c8176 Added backlisting for certain css properties. 2018-01-09 14:15:06 +01:00
Thorsten Eckel
8272ae2bb5 Fixes issue #1664 - Missing support for groupOfUniqueNames / uniquemember in LDAP sync. 2018-01-09 12:45:50 +01:00
Thorsten Eckel
66988facc1 Ensures resolved issue #1665 - Added RSpec test to ensure LDAP attributes get reset if no value is provided from remote. 2018-01-09 12:20:04 +01:00
Thorsten Eckel
13b763bfad Fixed wrong file location. 2018-01-09 11:50:52 +01:00
Martin Edenhofer
c6cb0e5531 Small SQL improvement to overview generation. 2018-01-09 08:39:50 +01:00
Thorsten Eckel
49e444d1f6 Added Delayed::Jobs plugin to reset Settings before each job execution to prevent loading of obsolete Setting values from cache. 2018-01-08 16:30:26 +01:00
Thorsten Eckel
540eab58e3 Fixed bug: Missing extend causes wrong delegate method to get called. 2018-01-08 16:30:20 +01:00
Thorsten Eckel
e37328d201 Refactoring: Migrated LDAP and Excachange statistics to new sum/total structure for clearer results and better performance. 2018-01-08 16:30:09 +01:00
Thorsten Eckel
f0cf7c3605 Replaced old Zendesk import with refactored Sequencer based version 🚀. 2018-01-08 16:29:34 +01:00
Thorsten Eckel
fc1b66d646 Refactoring: Changed attribute name instance_action to more re-useable and generic name action. 2018-01-08 16:28:53 +01:00
Thorsten Eckel
a42531ce46 Removed obsolete import structures which were used for the LDAP import which was migrated to the Sequencer. 2018-01-08 16:28:49 +01:00
Thorsten Eckel
1821c97506 Intoduced new generic model class structure based on simple provider structure and DRYed up LDAP and Exchange sequences. 2018-01-08 16:28:45 +01:00
Thorsten Eckel
c3255f0018 Migrated multi-purpose Units (antipattern) to new simple provider structure. 2018-01-08 16:28:40 +01:00
Thorsten Eckel
5a6f3f1a38 Migrated custom LDAP import_job.dry_run Unit to shared Unit based on new simple provider structure and delegation pattern. 2018-01-08 16:28:30 +01:00
Thorsten Eckel
de6d8c54ae Introduced new simple provider structure to DRY up Units and enforce sanitized naming. 2018-01-08 16:27:59 +01:00
Thorsten Eckel
59d642faa5 Fixed bug: Using alias causes error for inheriting Units because the old method is called instead of the one of the sub-class. 2018-01-08 16:27:48 +01:00
Thorsten Eckel
0ce0a9c06e Fixed bug: Calling .shift on class variables provides leads to errors when Unit class is used multiple times. 2018-01-08 16:27:43 +01:00
Thorsten Eckel
eb00d57bac Improved output to show real content of variable via inspect instead of calling .to_s on it. 2018-01-08 16:27:38 +01:00
Thorsten Eckel
8a2e117995 Fixed typo. 2018-01-08 16:27:31 +01:00
Thorsten Eckel
12a63ac17f Replaced old LDAP sync with refactored Sequencer based version 🚀. 2018-01-08 16:27:23 +01:00
Thorsten Eckel
e73f75c458 Introduced Sequencer Unit base class Sequencer::Unit::Common::FallbackProvider to handle simple setting fallback values of state attributes if not already present. 2018-01-08 16:26:58 +01:00
Thorsten Eckel
598d7b2060 Added LDAP sync Sequencer Sequences and Units. 2018-01-08 16:26:50 +01:00
Thorsten Eckel
4a8650b132 Added Mixin for skipping entities with missing mandatory attributes in mapped structure. 2018-01-08 16:26:33 +01:00
Thorsten Eckel
3b16ae8ab9 Added Mixin to disable rails Model callbacks via block for e.g. creating a User but not fetching the avatar. 2018-01-08 16:26:29 +01:00
Thorsten Eckel
9677e1aee7 Refactoring: Use each_with_object if possible. 2018-01-08 16:26:24 +01:00
Thorsten Eckel
eaf097c262 Refactoring: Splitted ExternalSync and Lookup namespaces. 2018-01-08 16:26:15 +01:00
Thorsten Eckel
b1f1dc2e12 Refactoring: Unified and improved SubSequence handling. 2018-01-08 16:24:57 +01:00
Thorsten Eckel
92930a0e8f Refactoring: Namespace cleanup. Mixins should be placed the most specific path possible. 2018-01-08 16:24:52 +01:00
Thorsten Eckel
e47b366d6a Refactoring: Replaced custom implementation with Ruby core Delegator classes. 2018-01-08 16:24:45 +01:00
Thorsten Eckel
b23f0d21d5 Refactoring: Improved naming. 2018-01-08 16:24:35 +01:00
Thorsten Eckel
ab0e64d3a9 Refactoring: Splitted up instance_action statistics diff for different usages. 2018-01-08 16:24:11 +01:00
Thorsten Eckel
00f0bd8212 Refactoring: Improved and unified instance_action skipping possiblities into one Mixin. 2018-01-08 16:24:07 +01:00
Thorsten Eckel
90c1a0faef Refactoring: Improved folder structure for Mixins. 2018-01-08 16:24:01 +01:00
Thorsten Eckel
702b792eb9 Refactoring: Improved ExternalSync source name for Exchange. 2018-01-08 16:22:06 +01:00
Thorsten Eckel
4abd20a49f Fixed bug: Inconsistent data state for instance attribute on failed save! attempt. 2018-01-08 16:10:55 +01:00
Thorsten Eckel
6812c581c6 - Fixed bug: Pluralization of association name is inverted.
- Refactoring: Usage of each_with_object to cleanup code.
- Refactoring: Improved logging for association extraction.
2018-01-08 16:10:22 +01:00
Thorsten Eckel
4aae89b2b0 Fixed bug: Wrong method name. 2018-01-08 16:10:15 +01:00
Thorsten Eckel
b01bf8a723 Refactoring: Prefer using attr_accessor over direct instance variable access. 2018-01-08 16:10:10 +01:00
Thorsten Eckel
2fd72b673d Added functionality to use Mixin::RailsLogger as singleton class method. 2018-01-08 16:10:00 +01:00
Thorsten Eckel
5f0bb91481 Added OTRS 6 migration tests. 2018-01-05 15:43:58 +01:00
Muhammad Nuzaihan
b82dfc0d21 #1727 fix telegram channel issues 2018-01-05 16:02:51 +08:00
Felix Niklas
93c7ffbfdb Datepicker: scroll into view
fixes #1021
2018-01-03 16:26:57 +01:00
Martin Edenhofer
24bfb7d5bf Improved error handling of invalid emails. 2018-01-02 17:00:51 +01:00
Martin Edenhofer
e376a0f872 Improved error handling of invalid emails. 2018-01-02 14:28:34 +01:00
Martin Edenhofer
56846b2fe9 Allow a href for paste, images and text link with different content. 2018-01-02 01:36:05 +01:00
André Bauer
b03ea68d49 switched to certbot command in nginx & apache ssl example configs 2017-12-22 16:51:31 +01:00
André Bauer
4a0a3abd0a added apache ssl config example 2017-12-22 14:48:36 +01:00
André Bauer
6a288edc3f changed issue template 2017-12-22 10:21:39 +01:00
Martin Edenhofer
e9f4b5af08 Improved error handling of email processing with invalid email addresses. 2017-12-20 17:15:40 +01:00
Martin Edenhofer
aef865a916 Fixed issue #1723 - Wrong ticket number count in preview. 2017-12-20 10:55:54 +01:00
Martin Edenhofer
9805fa176a Enabled tests, Zendesk infrastructure is working again. 2017-12-19 09:08:58 +01:00
Umar Sheikh
b7a33ea0e3 Merge branch 'develop' into add-integer-and-tree-select-in-conditions 2017-12-18 15:37:23 +05:00
Martin Edenhofer
fe2c77df9f Just update chat window title if title exists. 2017-12-18 04:49:08 +01:00
Martin Edenhofer
9c54b3382d Added support to search for chat sessions. Added set name and tags for chats. 2017-12-18 04:36:56 +01:00
Felix Niklas
69ccf09906 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2017-12-16 13:57:15 +01:00
Felix Niklas
6cd203a050 Chat: fix open/close icon and status alignment 2017-12-16 13:57:12 +01:00
Martin Edenhofer
8ac7356184 Small refactoring of search index backend. 2017-12-15 14:58:41 +01:00
Umar Sheikh
db650b9fbb add integer and tree_select types to Triggers Management(New Trigger) form under conditions for effected objects 2017-12-15 17:57:15 +05:00
Martin Edenhofer
34c14a22b5 Push users.preferences to elasticsearch to enable searches for certain features. 2017-12-14 21:05:59 +01:00
Martin Edenhofer
e460c99cad Introduced REST expand=true/false/1/0, full=true/false/1/0 and all=true/false/1/0 options. Improved controller tests. @hanneshal 2017-12-14 14:19:24 +01:00
Martin Edenhofer
5ebeb51e2e Fixed issue #1711 - Zammad Api for idoit.object_ids broken. 2017-12-14 08:37:20 +01:00
Martin Edenhofer
504bc58d47 Fixed issue #1710 - Unable to login with Office365. 2017-12-13 18:38:21 +01:00
Martin Edenhofer
97a5cd3cf5 Improved max. agent limit check. 2017-12-13 12:17:57 +01:00
Martin Edenhofer
d0a0dc7d37 Show ticket edit form as disable if agent has read only permission. 2017-12-12 12:18:17 +01:00
Martin Edenhofer
09af88a578 Fixed usage to twitter initials setting. 2017-12-12 10:15:07 +01:00
Martin Edenhofer
95e8aa2dce Improved reload and table rendering of report screens. 2017-12-12 07:19:44 +01:00
André Bauer
0064a5bb6a moved elasticsearch index rebuild process to background 2017-12-09 14:48:45 +01:00
André Bauer
4b54642fcc added elasticsearch plugin update 2017-12-09 14:31:30 +01:00
André Bauer
c36c288be3 added database & elasticsearch fields to github issue template 2017-12-09 11:04:51 +01:00
André Bauer
aa596e4ab7 added executable bit to travis bash script 2017-12-07 18:00:01 +01:00
Martin Edenhofer
b42b7cf6ee Fixed issue #1699 - No user preference for out-of-office available. 2017-12-07 16:42:39 +01:00
André Bauer
5da4d8f466 added univention docker image build trigger for travis-ci 2017-12-07 15:55:44 +01:00
Martin Edenhofer
82b5b6af2f Improved config input validation for issue #1698 - SipgateController - undefined method `each' for nil:NilClass (NoMethodError). 2017-12-07 15:34:47 +01:00
Martin Edenhofer
4108c78722 Improved wording. 2017-12-07 09:29:48 +01:00
Martin Edenhofer
de1e62e79f Updated to ruby 2.4.2. 2017-12-07 05:08:11 +01:00
Martin Edenhofer
95a8f95af8 Prepared for 2.3.0. 2017-12-06 17:10:05 +01:00
Martin Edenhofer
648a4c2522 Improved storing locale_default at initial setup. 2017-12-06 16:49:20 +01:00
Martin Edenhofer
6c0f7fc1e7 Set locale_default at initial admin creation too. 2017-12-06 15:31:27 +01:00
Martin Edenhofer
fd8511e44c Applied new forward icon. 2017-12-06 09:37:09 +01:00
Felix Niklas
c74e0dac46 forward icon, adjust ticket action icons height
# Conflicts:
#	public/assets/images/icons.svg

- prettify svg output
2017-12-06 09:16:40 +01:00
Martin Edenhofer
18329a1379 Applied rubocop. 2017-12-06 00:53:00 +01:00
Felix Niklas
63ff844f38 Code cleanup. 2017-12-06 00:50:28 +01:00
Martin Edenhofer
712acdfe2a Fixed issue #573 - email forward of article (like regular email client forward - e. g. forward customers message to third party contact). 2017-12-05 16:12:52 +01:00
Martin Edenhofer
75ac4252f3 Implemented issue #195 - Take over attachment on ticket split. 2017-12-05 15:49:59 +01:00
Martin Edenhofer
de55dbeb33 Fixed issue #1604 - Webform isn´t available | 401 Unauthorized. 2017-12-04 16:17:40 +01:00
Martin Edenhofer
84ed5ee451 Improved issue #1591 - Improved js snipped for form channel (use div, not button for non modal forms). 2017-12-04 16:17:32 +01:00
Martin Edenhofer
bb2537b49b Implemented issue #1689 - Enable state "merged" for admin overviews, triggers and jobs. 2017-12-04 09:52:05 +01:00
Martin Edenhofer
3bdb3dacb2 Applied rubocop. 2017-12-04 08:05:31 +01:00
Martin Edenhofer
486802770b Added option to use multiple session instances. 2017-12-04 08:00:00 +01:00
Martin Edenhofer
a08d5f1b51 Improved error handling. 2017-12-04 02:12:55 +01:00
Martin Edenhofer
f3cbe7f10e Added ability to delete elasticsearch processors first (for cleanup). 2017-12-04 01:48:41 +01:00
Martin Edenhofer
68b85efc24 Applied rubocop. 2017-12-04 01:34:27 +01:00
Martin Edenhofer
0d1d86511f Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2017-12-04 01:25:50 +01:00
Martin Edenhofer
5ba83da6f5 Fixed issue #599 - Elasticsearchs mapper-attachments plugin has been deprecated, use ingest-attachment now. 2017-12-04 01:24:58 +01:00
Martin Edenhofer
f62225dbde Improved white listing for mail probing. 2017-12-03 17:32:33 +01:00
André Bauer
88da94e80d changed servername in nginx config 2017-12-03 14:33:31 +01:00
Martin Edenhofer
adc2564fa6 Removed debug log. 2017-11-30 11:33:47 +01:00
Martin Edenhofer
122c7167b1 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2017-11-30 11:13:14 +01:00
Martin Edenhofer
b61e98206b Fixed issue #1571 - Improve i-doit filtering (without type). 2017-11-30 11:12:58 +01:00
Thorsten Eckel
eebe7ccdc4 Fixed bug: Exchange sync does not show current import state statistic. 2017-11-30 10:12:51 +01:00
Thorsten Eckel
8b3b90b9d0 Improved Sequencer logging of removed unneeded attributes to show inspect dump instead of .to_s 2017-11-30 10:12:51 +01:00
Martin Edenhofer
d3062592ea Fixed issue #1513 - TimeAccounting ticket condition prevents submit of Zoom. 2017-11-30 09:29:18 +01:00
Martin Edenhofer
7599e8e17a Fixed issue #1681 - Unable to re-order overviews in admin interface with over 100 overviews. 2017-11-27 11:50:57 +01:00
Muhammad Nuzaihan
1a9a23ce0e #1674 make sure login data is downcased. included tests to check as well 2017-11-25 00:49:40 +08:00
Martin Edenhofer
ce1135a55c Fixed issue #1670 - Reset customer selection in ticket create screen if input field cleared. 2017-11-24 16:54:56 +01:00
Martin Edenhofer
6c707dc5f5 Fixed test. 2017-11-23 23:09:11 +01:00
Martin Edenhofer
fa63fbae8a Added Italian and Polish translations. 2017-11-23 22:13:02 +01:00
Martin Edenhofer
9b0f51461b Fixed issue #1671 - Add config option for intelligent customer selection of incoming emails of agents. 2017-11-23 20:43:01 +01:00
Martin Edenhofer
b952880d5d Fixed issue #1666 - Unable to open trigger in admin interface. 2017-11-23 09:14:03 +01:00
Thorsten Eckel
705487154c Applied changes for Rubocop 0.51. 2017-11-23 09:09:44 +01:00
André Bauer
ca4e2920e2 Merge pull request #1667 from jaykijay/patch-2
Create symlink to latest Backup.
2017-11-22 17:18:34 +01:00
jayki
e2dec9b046 Update functions
This is needed for automated restore via Script to the latest Backup file. So the files latest* always point to the newest Backup.
2017-11-22 16:33:50 +01:00
Thorsten Eckel
492ca261ce Fixed bug #1663 - Exchange integration tries to import user twice and fails. 2017-11-22 10:18:47 +01:00
André Bauer
b9d728f890 replaced deprecate FactoryGirl gem with FactoryBot 2017-11-21 22:50:03 +01:00
André Bauer
112edd362c added dalli gem 2017-11-21 21:30:53 +01:00
Martin Edenhofer
460182e663 Small code cleanup. 2017-11-21 15:25:04 +01:00
Martin Edenhofer
9f204806db Fixed issue #1661 - Users mail_delivery_failed is not removed after changing the email address. 2017-11-21 11:01:07 +01:00
Martin Edenhofer
3417618798 Improved removing of html comments. 2017-11-21 08:24:03 +01:00
Martin Edenhofer
17ce2dcbde Improved agent limit detection (do not complain if role with ticket.agent permission is assigned and agent already owns a role with ticket.agent permission). 2017-11-17 15:39:56 +01:00
Martin Edenhofer
eb5ad7d9fa Fixed issue #1649 - Tickets are deleted but database is still the same size. 2017-11-17 11:41:44 +01:00
Martin Edenhofer
f627df1447 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2017-11-17 11:40:47 +01:00
Martin Edenhofer
753af9d589 Small improvements for jobs model and execution of jobs. 2017-11-17 11:39:57 +01:00
Martin Edenhofer
2203d9bd05 Merge branch 'develop' of github.com:zammad/zammad into develop 2017-11-16 22:58:09 +01:00
Martin Edenhofer
b04e0c1b64 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2017-11-16 22:54:37 +01:00
Martin Edenhofer
cb35d2b4fb Code cleanup. 2017-11-16 22:54:31 +01:00
Johannes Nickel
c7606f66ce Update ISSUE_TEMPLATE.md
added reference to the new community board.
2017-11-15 17:33:14 +01:00
Martin Edenhofer
601960f5fb Implemented issue #1171 - The ability to set the platform default language. 2017-11-15 15:06:53 +01:00
Martin Edenhofer
70565938ba Implemented issue #1623 - Translation for form widget in Dutch. 2017-11-15 12:07:37 +01:00
Martin Edenhofer
17e107aa0a Fixed this binding/proxy in callback. 2017-11-14 17:16:07 +01:00
Martin Edenhofer
f3ff650bfe Split of article actions into separate backends. 2017-11-14 17:15:49 +01:00
Umar Sheikh
509450fd30 stick to test naming convention and better variable name 2017-11-09 17:06:13 +05:00
Umar Sheikh
c1f2fb77fe tests for #1613, ensure that string is converted to boolean 2017-11-09 15:53:34 +05:00
Thorsten Eckel
ab189f46ec Fixed issue #1628 - Added support for new Twitter tweet length limit of 280 chars. 2017-11-08 17:14:12 +01:00
Martin Edenhofer
aca6073eba Fixed issue #1618 - Chat language setting or behaviour in dutch. 2017-11-07 14:42:51 +01:00
Umar Sheikh
35d8a05e8a whitespace 2017-11-07 15:40:58 +05:00
Umar Sheikh
749fe8df5e cast 'true' to true and 'false' to false in case of boolean column addition, fixes #1613 2017-11-07 15:01:12 +05:00
Martin Edenhofer
e75ce991cb Clear cache after migration is finished. 2017-11-06 17:55:34 +01:00
Martin Edenhofer
68cb27f0c1 Improved file name detection of attachments. 2017-11-06 17:43:06 +01:00
Martin Edenhofer
d185ecf469 Added additional fixtures. 2017-11-06 04:35:50 +01:00
Martin Edenhofer
99af4f187a Improved filename detection of incoming postmaster emails (use subject.eml and no file-1). 2017-11-06 04:26:00 +01:00
Martin Edenhofer
967f814ff3 Stabilised tests. 2017-11-06 02:32:47 +01:00
Martin Edenhofer
3f633f252a Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2017-11-06 02:29:14 +01:00
Thorsten Eckel
cb02d21118 Updated autodiscover dependency to fix an issue with not reachable redirected HTTP URLs in Exchange autodiscovery process - see https://github.com/WinRb/autodiscover/issues/10 . 2017-11-03 14:44:55 +01:00
Thorsten Eckel
3fc78c657c Exchange changes:
- Fixed bug: Not possible to disable SSL certificate check for import but only for autodiscover.
- Improved SSL certificate error message to show domain of affected domain to prevent users from thinking that there is an issue with their Zammad installation.
2017-11-03 14:44:50 +01:00
Thorsten Eckel
c87f75cc97 Added placeholder for better usability. 2017-11-03 14:44:46 +01:00
Martin Edenhofer
2d032e9a00 Code cleanup. 2017-11-03 08:54:13 +01:00
Martin Edenhofer
641a883227 Improved test - compare time in delta. 2017-11-03 08:51:20 +01:00
Martin Edenhofer
766bf548ef Fixed issue #1606 - Ignore Twitter search key with only #. 2017-11-03 08:13:44 +01:00
Martin Edenhofer
b82b0375f0 Improved error handling for strange/invalid email addresses. 2017-11-02 14:09:47 +01:00
Martin Edenhofer
70a03d657e Improved migration for issue #1375 - Improved handling assignment_timeout. 2017-11-02 10:00:44 +01:00
Martin Edenhofer
5f088cf8f2 Merge branch 'develop' of git.znuny.com:zammad/zammad into develop 2017-11-02 09:15:10 +01:00
Martin Edenhofer
1ef49c9e1b Added permission check for integtrations plugins. 2017-11-02 09:14:59 +01:00
Thorsten Eckel
1d2c9eded3 Follow up: Fixed issue #1442 - SSL certificate verification for certificate not matching hostnames fail. 2017-11-01 15:41:36 +01:00
Martin Edenhofer
725f21337d Fixed issue #1375 - Improved handling assignment_timeout. 2017-11-01 15:23:44 +01:00
Martin Edenhofer
dcc44feb81 Improved test. 2017-11-01 08:52:17 +01:00
Martin Edenhofer
aa50375356 Updated. 2017-10-30 13:35:18 +01:00
Martin Edenhofer
7bf73984c4 Fixed issue #1595 - Unable to sort overview by priority. 2017-10-30 13:23:23 +01:00
Thorsten Eckel
0afcc33b14 Fixed issue #1442 - IBM bluepages searches fail. 2017-10-27 12:11:50 +02:00
Thorsten Eckel
6093f96f45 Fixed typo - thanks to @MBekspert . 2017-10-25 19:45:16 +02:00
4212 changed files with 504138 additions and 80998 deletions

View File

@@ -1,44 +1,15 @@
---
engines:
brakeman:
enabled: true
bundler-audit:
enabled: true
csslint:
enabled: true
coffeelint:
enabled: true
duplication:
enabled: true
config:
languages:
- ruby
- javascript
eslint:
enabled: true
fixme:
enabled: true
phpmd:
enabled: false
rubocop:
enabled: true
ratings:
paths:
- Gemfile.lock
- "**.erb"
- "**.haml"
- "**.rb"
- "**.rhtml"
- "**.slim"
- "**.css"
- "**.coffee"
- "**.inc"
- "**.js"
- "**.jsx"
- "**.module"
exclude_paths:
- config/
- db/
- script/
- test/
- vendor/
version: "2"
exclude_patterns:
# Bundled thirdparty asset files
- "app/assets/javascripts/app/lib/**/*.js"
- "config/"
- "db/"
- "**/node_modules/"
- "script/"
- "public/assets/"
- "**/spec/"
- "**/test/"
- "**/tests/"
- "**/vendor/"
- "**/*.d.ts"

12
.editorconfig Normal file
View File

@@ -0,0 +1,12 @@
# http://editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false

View File

@@ -57,7 +57,7 @@ rules:
no-case-declarations: 2
no-div-regex: 2
no-else-return: 0
no-empty-label: 2
no-labels: 2
no-empty-pattern: 2
no-eq-null: 2
no-eval: 2
@@ -69,7 +69,6 @@ rules:
no-implied-eval: 2
no-invalid-this: 0
no-iterator: 2
no-labels: 0
no-lone-blocks: 2
no-loop-func: 2
no-magic-number: 0

View File

@@ -1,6 +1,18 @@
<!--
Hi there - thanks for filling an issue. Please ensure the following things before creating an issue - thank you! 🤓
Hi there - thanks for filing an issue. Please ensure the following things before creating an issue - thank you! 🤓
Since november 15th we handle all requests, except real bugs, at our community board.
Full explanation: https://community.zammad.org/t/major-change-regarding-github-issues-community-board/21
Please post:
- Feature requests
- Development questions
- Technical questions
on the board -> https://community.zammad.org !
If you think you hit a bug, please continue:
- Search existing issues and the CHANGELOG.md for your issue - there might be a solution already
- Make sure to use the latest version of Zammad if possible
- Add the `log/production.log` file from your system. Attention: Make sure no confidential data is in it!
@@ -8,30 +20,33 @@ Hi there - thanks for filling an issue. Please ensure the following things befor
- Don't remove the template - otherwise we will close the issue without further comments
- Ask questions about Zammad configuration and usage at our mailinglist. See: https://zammad.org/participate
Note: We always do our best. Unfortunately, sometimes the requests are too much and we can't handle everything at once. If you want to prioritize/escalate your issue, you can do so by means of a support contract (see https://zammad.com/pricing#selfhosted).
Note: We always do our best. Unfortunately, sometimes there are too many requests and we can't handle everything at once. If you want to prioritize/escalate your issue, you can do so by means of a support contract (see https://zammad.com/pricing#selfhosted).
* The upper textblock will be removed automatically when you submit your issue *
-->
### Infos:
* Used Zammad version:
* Used Zammad installation source: (source, package, ...)
* Operating system:
* Browser + version:
* Used Zammad version:
* Installation method (source, package, ..):
* Operating system:
* Database + version:
* Elasticsearch version:
* Browser + version:
### Expected behavior:
*
*
### Actual behavior:
*
*
### Steps to reproduce the behavior:
*
*
Yes I'm sure this is a bug and no feature request or a general question.

43
.github/ci.sh vendored Executable file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/env bash
#
# install & unit test zammad
#
set -o errexit
set -o pipefail
# install build dependencies
sudo apt-get update
sudo apt-get install -y --no-install-recommends autoconf automake autotools-dev bison build-essential curl git-core libffi-dev libgdbm-dev libgmp-dev libmariadbclient-dev-compat libncurses5-dev libreadline-dev libsqlite3-dev libssl-dev libtool libxml2-dev libxslt1-dev libyaml-0-2 libyaml-dev patch pkg-config postfix sqlite3 zlib1g-dev libimlib2 libimlib2-dev
# create db config
DB_CONFIG="test:\n adapter: postgresql\n database: zammad_test\n host: 127.0.0.1\n port: DB_PORT\n pool: 50\n timeout: 5000\n encoding: utf8\n username: DB_USERNAME\n password: DB_PASSWORD"
if [ "${ZAMMAD_DBS}" == "mysql" ]; then
DB_ADAPTER="mysql2"
DB_USERNAME="root"
DB_PASSWORD="password"
DB_PORT="13306"
INSTALL_OPTION="postgres"
elif [ "${ZAMMAD_DBS}" == "postgresql" ]; then
DB_ADAPTER="postgresql"
DB_USERNAME="postgres"
DB_PASSWORD="postgres"
DB_PORT="5432"
INSTALL_OPTION="mysql"
fi
echo -e "${DB_CONFIG}" | sed -e "s/adapter: postgresql/adapter: ${DB_ADAPTER}/g" -e "s/DB_USERNAME/${DB_USERNAME}/g" -e "s/DB_PASSWORD/${DB_PASSWORD}/g" -e "s/DB_PORT/${DB_PORT}/g" > config/database.yml
# install zammad
gem install bundler:1.7.3
bundle install --without "${INSTALL_OPTION}"
# unit tests
bundle exec rubocop
bundle exec rake zammad:db:init
bundle exec rspec -t ~type:system -t ~searchindex -t ~required_envs
bundle exec rake zammad:db:reset
bundle exec rake test:units
ruby -I test/ test/integration/object_manager_test.rb
ruby -I test/ test/integration/package_test.rb

39
.github/docker-image-build.sh vendored Executable file
View File

@@ -0,0 +1,39 @@
#!/usr/bin/env bash
#
# build zammads docker & docker-compose images
set -o errexit
set -o pipefail
DOCKER_REGISTRY="index.docker.io"
REPO_ROOT="$(git rev-parse --show-toplevel)"
ZAMMAD_VERSION="$(git describe --tags | sed -e 's/-[a-z0-9]\{8,\}.*//g')"
# dockerhub auth
echo "${DOCKER_PASSWORD}" | docker login --username="${DOCKER_USERNAME}" --password-stdin
# clone docker repo
DOCKER_REPOSITORY_CLONE_URL="https://github.com/${REPO_USER}/${DOCKER_GITHUB_REPOSITORY}"
echo "Cloning ${DOCKER_REPOSITORY_CLONE_URL}"
git clone "${DOCKER_REPOSITORY_CLONE_URL}"
# enter dockerfile dir
cd "${REPO_ROOT}/${DOCKER_GITHUB_REPOSITORY}"
# shellcheck disable=SC2153
for DOCKER_IMAGE in ${DOCKER_IMAGES}; do
echo "Build Zammad Docker image ${DOCKER_IMAGE} with version ${ZAMMAD_VERSION} for DockerHubs ${DOCKER_REGISTRY}/${REPO_USER}/${DOCKER_REPOSITORY} repo"
if [ "${DOCKER_REPOSITORY}" == "zammad-docker-compose" ]; then
docker build --pull --no-cache --build-arg BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" -t "${DOCKER_REGISTRY}/${REPO_USER}/${DOCKER_REPOSITORY}:${DOCKER_IMAGE}" -t "${DOCKER_REGISTRY}/${REPO_USER}/${DOCKER_REPOSITORY}:${DOCKER_IMAGE}-latest" -t "${DOCKER_REGISTRY}/${REPO_USER}/${DOCKER_REPOSITORY}:${DOCKER_IMAGE}-${ZAMMAD_VERSION}" -f "containers/${DOCKER_IMAGE}/Dockerfile" .
docker push "${DOCKER_REGISTRY}/${REPO_USER}/${DOCKER_REPOSITORY}:${DOCKER_IMAGE}"
docker push "${DOCKER_REGISTRY}/${REPO_USER}/${DOCKER_REPOSITORY}:${DOCKER_IMAGE}-latest"
docker push "${DOCKER_REGISTRY}/${REPO_USER}/${DOCKER_REPOSITORY}:${DOCKER_IMAGE}-${ZAMMAD_VERSION}"
else
docker build --pull --no-cache --build-arg BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" -t "${DOCKER_REGISTRY}/${REPO_USER}/${DOCKER_REPOSITORY}:latest" -t "${DOCKER_REGISTRY}/${REPO_USER}/${DOCKER_REPOSITORY}:${ZAMMAD_VERSION}" .
docker push "${DOCKER_REGISTRY}/${REPO_USER}/${DOCKER_REPOSITORY}:latest"
docker push "${DOCKER_REGISTRY}/${REPO_USER}/${DOCKER_REPOSITORY}:${ZAMMAD_VERSION}"
fi
done

View File

@@ -0,0 +1,24 @@
name: build-docker-compose-images
on:
push:
branches: [stable**]
jobs:
build-docker-compose-images:
runs-on: ubuntu-latest
env:
DOCKER_GITHUB_REPOSITORY: "zammad-docker-compose"
DOCKER_IMAGES: "zammad zammad-elasticsearch zammad-postgresql"
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
DOCKER_REPOSITORY: "zammad-docker-compose"
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
steps:
- name: Extract REPO_USER from GITHUB_REPOSITORY ENV
run: echo "REPO_USER=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $1}')" >> $GITHUB_ENV
- name: Checkout code
uses: actions/checkout@master
- name: Fetch all history for all tags and branches
run: git fetch --prune --unshallow
- name: Build docker image
run: .github/docker-image-build.sh

View File

@@ -0,0 +1,24 @@
name: build-docker-image
on:
push:
branches: [develop]
jobs:
build-docker-image:
runs-on: ubuntu-latest
env:
DOCKER_GITHUB_REPOSITORY: "zammad-docker"
DOCKER_IMAGES: "zammad"
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
DOCKER_REPOSITORY: "zammad"
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
steps:
- name: Extract REPO_USER from GITHUB_REPOSITORY ENV
run: echo "REPO_USER=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $1}')" >> $GITHUB_ENV
- name: Checkout code
uses: actions/checkout@master
- name: Fetch all history for all tags and branches
run: git fetch --prune --unshallow
- name: Build docker image
run: .github/docker-image-build.sh

45
.github/workflows/ci.yaml vendored Normal file
View File

@@ -0,0 +1,45 @@
name: ci
on:
pull_request
jobs:
ci:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:5
env:
MYSQL_ROOT_PASSWORD: password
ports:
- 13306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
postgres:
image: postgres:11
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
strategy:
matrix:
dbs:
- mysql
- postgresql
env:
RAILS_ENV: test
ZAMMAD_DBS: ${{ matrix.dbs }}
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7.4
- name: Increase MySQL max_allowed_packet to 1GB (workaround for unknown/missing service option)
run: |
sudo apt-get install -y mysql-client
mysql --host 127.0.0.1 --port 13306 -uroot -ppassword -e "SET GLOBAL max_allowed_packet=1073741824;"
- name: CI
run: .github/ci.sh

View File

@@ -3,8 +3,8 @@ project=zammad
output=CHANGELOG.md
since-tag=1.0.0
bug-labels=bug,minor bug,security
enhancement-labels=enhancement,feature
enhancement-labels=enhancement,feature,feature backlog
issues-wo-labels=false
include-labels=security,trigger,UX/UI,admin area,API,browser,bug,channel,chat,email filter,enhancement,feature,import,minor bug,notification,email filter,ticket templates,
issue-line-labels=enhancement,feature,bug,minor bug,notification,reporting,security,ticket templates,translation,trigger,UX/UI
include-labels=security,trigger,UX/UI,admin area,API,browser,bug,channel,chat,email filter,enhancement,feature,feature backlog,import,minor bug,notification,email filter,ticket templates,
issue-line-labels=enhancement,feature,feature backlog,bug,minor bug,notification,reporting,security,ticket templates,translation,trigger,UX/UI
exclude-tags=9.0.1,0.9.1,v0.1.8,v0.1.7,unittests_passed

112
.gitignore vendored
View File

@@ -4,62 +4,94 @@
# or operating system, you probably want to add a global ignore instead:
# git config --global core.excludesfile ~/.gitignore_global
# Ignore .swp files
.*.swp
# Configuration ================================================================
# These files will differ from one user to another;
# committing them may cause Zammad to behave unexpectedly on other machines
# Ignore bundler config
/.bundle
# Zammad -----------------------------------------------------------------------
# Ignore mac stuff
.DS_Store
# Ignore Rubymine config
/.idea
# Ignore .project files
/.project
# Ignore .rbenv-vars
/.rbenv-vars
# Ignore database config
# database (copy from config/database/database.yml, or use `rails bs:init`)
/config/database.yml
# Ignore translation cache files
# local backup config file
/contrib/backup/config
# Dynamic environment config for Gitlab
/.gitlab/environment.env
# Third-Party ------------------------------------------------------------------
# The config files / dev tools listed below are optional
# and may not be present on most users' machines
# Bundler
/.bundle
/Gemfile.local
# Clutter ======================================================================
# These files are automatically generated;
# in most cases, committing them won't do anything other than bloat the repo
# Zammad -----------------------------------------------------------------------
# database files
/db/*.sqlite3
/db/schema.rb
# translation cache files
/config/locales*.yml
/config/translations/*.yml
# Ignore coverage stuff
/coverage
# Ignore the default SQLite database.
/db/*.sqlite3
# Ignore local changes to schema.rb (e. g. through extentions)
/db/schema.rb
# Ignore custom gem file
/Gemfile.local
# Ignore node modules
# NPM / Yarn
/node_modules
/yarn.lock
# Ignore all logfiles and tempfiles.
# logfiles and tempfiles
/log
/public/assets/*.*
/public/assets/addons
/public/assets/app
/public/assets/custom
/public/assets/chat/node_modules
/tmp/*
!/tmp/pids
/tmp/pids/*
!/tmp/pids/.keep
/storage/fs
# except /tmp/pids/ which is needed for certain Zammad processes
!/tmp
!/tmp/pids
!/tmp/pids/.keep
# doorkeeper (OAuth 2)
/public/assets/doorkeeper
# exclude the figaro ENV setting helper file - run 'bundle exec figaro install' for creating your own
# see: https://github.com/laserlemon/figaro
# Ignore application configuration
/config/application.yml
# images
/public/assets/images/*
!/public/assets/images/icons/
!/public/assets/images/avatar-bg.png
!/public/assets/images/chat-demo-avatar.png
!/public/assets/images/eyedropper.gif
!/public/assets/images/icons.svg
!/public/assets/images/logo.svg
# Third-Party ------------------------------------------------------------------
# macOS
.DS_Store
# vim
.*.sw[pon]
# RubyMine
/.idea
# Eclipse
/.project
# Byebug
/.byebug_history
# SimpleCov
/coverage
# RDoc / YARD
/doc
# Backup files
*~

File diff suppressed because it is too large Load Diff

249
.gitlab/ci/base.yml Normal file
View File

@@ -0,0 +1,249 @@
# Artifacts are stored for failed jobs for 2 days
.artifacts_error: &artifacts_error
artifacts:
expire_in: 2 days
when: on_failure
paths:
- tmp/screenshot*
- tmp/screenshots/*
- log/*.log
.variables_es: &variables_es
variables:
ES_INDEX_RAND: "true"
ES_URL: "http://elasticsearch:9200"
.variables_redis_memcached: &variables_redis_memcached
variables:
REDIS_URL: "redis://redis:6379"
MEMCACHE_SERVERS: "memcached"
.variables_selenium_firefox: &variables_selenium_firefox
variables:
REMOTE_URL: "http://selenium-firefox:4444/wd/hub"
BROWSER: "firefox"
# Settings for Selenium 3:
NODE_MAX_INSTANCES: "5"
NODE_MAX_SESSION: "5"
.variables_selenium_chrome: &variables_selenium_chrome
variables:
REMOTE_URL: "http://selenium-chrome:4444/wd/hub"
BROWSER: chrome
# Settings for Selenium 3:
NODE_MAX_INSTANCES: "5"
NODE_MAX_SESSION: "5"
.variables_app_restart_cmd: &variables_app_restart_cmd
variables:
APP_RESTART_CMD: "bundle exec rake environment zammad:ci:app:restart"
.variables_rspec_slicing: &variables_rspec_slicing
variables:
RSPEC_EXAMPLE_MATCHES: "." # Default: all. Set this to one of the slices in a job to run only that slice.
RSPEC_EXAMPLE_SLICE_1_OF_4: "^[A-H]"
RSPEC_EXAMPLE_SLICE_2_OF_4: "^[I-P]"
RSPEC_EXAMPLE_SLICE_3_OF_4: "^[Q-S]"
RSPEC_EXAMPLE_SLICE_4_OF_4: "^[^A-S]" # Rest, including lower case and other characters like '#'
.rules_singletest: &rules_singletest
rules:
- if: $CI_MERGE_REQUEST_ID
when: never
- if: '$SINGLETESTNAME && $SINGLETESTNAME == $CI_JOB_NAME'
when: always
- if: '$SINGLETESTNAME && $SINGLETESTNAME != $CI_JOB_NAME'
when: never
- if: '$CI_JOB_NAME'
when: on_success
# Workaround to enable usage of mixed SSH and Docker GitLab CI runners
.tags_docker: &tags_docker
tags:
- docker
# Workaround for blocked port 25 access on cloud provider infrastructure
.tags_mail: &tags_mail
tags:
- mail
.env_base: &env_base
<<: *tags_docker
<<: *artifacts_error
<<: *rules_singletest
# DB Docker
.docker_mysql: &docker_mysql
name: registry.znuny.com/docker/zammad-mysql:stable
alias: mysql
.docker_postgresql: &docker_postgresql
name: registry.znuny.com/docker/zammad-postgresql:stable
alias: postgresql
.docker_elasticsearch: &docker_elasticsearch
name: registry.znuny.com/docker/zammad-elasticsearch:$ELASTICSEARCH_TAG
alias: elasticsearch
.docker_selenium_chrome: &docker_selenium_chrome
name: registry.znuny.com/docker/zammad-selenium-chrome:stable
alias: selenium-chrome
.docker_selenium_firefox: &docker_selenium_firefox
name: registry.znuny.com/docker/zammad-selenium-firefox:stable
alias: selenium-firefox
.docker_imap: &docker_imap
name: registry.znuny.com/docker/zammad-imap:stable
alias: mail
.docker_redis: &docker_redis
name: registry.znuny.com/docker/zammad-redis:stable
alias: redis
.docker_memcached: &docker_memcached
name: registry.znuny.com/docker/zammad-memcached:stable
alias: memcached
command: ["memcached", "-m", "256M"]
# service templates
.services_mysql: &services_mysql
services:
- <<: *docker_mysql
.services_mysql_redis_memcached: &services_mysql_redis_memcached
extends:
- .variables_redis_memcached
services:
- <<: *docker_mysql
- <<: *docker_redis
- <<: *docker_memcached
.services_postgresql: &services_postgresql
services:
- <<: *docker_postgresql
.services_postgresql_redis_memcached: &services_postgresql_redis_memcached
extends:
- .variables_redis_memcached
services:
- <<: *docker_postgresql
- <<: *docker_redis
- <<: *docker_memcached
.services_mysql_postgresql: &services_mysql_postgresql
services:
- <<: *docker_mysql
- <<: *docker_postgresql
.services_mysql_postgresql_redis_memcached: &services_mysql_postgresql_redis_memcached
extends:
- .variables_redis_memcached
services:
- <<: *docker_mysql
- <<: *docker_postgresql
- <<: *docker_redis
- <<: *docker_memcached
.services_postgresql_selenium_chrome: &services_postgresql_selenium_chrome
extends:
- .variables_selenium_chrome
services:
- <<: *docker_postgresql
- <<: *docker_selenium_chrome
.services_postgresql_selenium_firefox: &services_postgresql_selenium_firefox
extends:
- .variables_selenium_firefox
services:
- <<: *docker_postgresql
- <<: *docker_selenium_firefox
.services_mysql_postgresql_imap: &services_mysql_postgresql_imap
services:
- <<: *docker_mysql
- <<: *docker_postgresql
- <<: *docker_imap
.services_mysql_postgresql_elasticsearch: &services_mysql_postgresql_elasticsearch
variables:
ELASTICSEARCH_TAG: 'stable'
services:
- <<: *docker_mysql
- <<: *docker_postgresql
- <<: *docker_elasticsearch
.services_mysql_postgresql_elasticsearch_selenium_chrome_imap: &services_mysql_postgresql_elasticsearch_selenium_chrome_imap
extends:
- .variables_selenium_chrome
variables:
ELASTICSEARCH_TAG: 'stable'
services:
- <<: *docker_mysql
- <<: *docker_postgresql
- <<: *docker_elasticsearch
- <<: *docker_selenium_chrome
- <<: *docker_imap
.services_mysql_postgresql_elasticsearch_selenium_firefox_imap: &services_mysql_postgresql_elasticsearch_selenium_firefox_imap
extends:
- .variables_selenium_firefox
variables:
ELASTICSEARCH_TAG: 'stable'
services:
- <<: *docker_mysql
- <<: *docker_postgresql
- <<: *docker_elasticsearch
- <<: *docker_selenium_firefox
- <<: *docker_imap
.services_mysql_postgresql_elasticsearch_selenium_chrome_imap_redis_memcached: &services_mysql_postgresql_elasticsearch_selenium_chrome_imap_redis_memcached
extends:
- .variables_selenium_chrome
- .variables_redis_memcached
variables:
ELASTICSEARCH_TAG: 'stable'
services:
- <<: *docker_mysql
- <<: *docker_postgresql
- <<: *docker_elasticsearch
- <<: *docker_selenium_chrome
- <<: *docker_imap
- <<: *docker_redis
- <<: *docker_memcached
.services_mysql_postgresql_elasticsearch_selenium_firefox_imap_redis_memcached: &services_mysql_postgresql_elasticsearch_selenium_firefox_imap_redis_memcached
extends:
- .variables_selenium_firefox
- .variables_redis_memcached
variables:
ELASTICSEARCH_TAG: 'stable'
services:
- <<: *docker_mysql
- <<: *docker_postgresql
- <<: *docker_elasticsearch
- <<: *docker_selenium_firefox
- <<: *docker_imap
- <<: *docker_redis
- <<: *docker_memcached
.rules_integration_manual_start: &rules_integration_manual_start
rules:
- if: $CI_MERGE_REQUEST_ID
when: never
- if: '$CI_COMMIT_BRANCH =~ /^private/ && $INTEGRATION_TESTS == null'
when: manual
allow_failure: true
- when: on_success
# we need at least one job to store and include this template
# but we skip this via 'only' -> 'variables' -> '$IGNORE'
# $IGNORE is not defined
ignore:
stage: test
only:
variables:
- $IGNORE
script:
- ''

111
.gitlab/ci/browser-core.yml Normal file
View File

@@ -0,0 +1,111 @@
include:
# browser-core
- local: '/.gitlab/ci/browser-core/build.yml'
- local: '/.gitlab/ci/browser-core/autowizard_chrome.yml'
- local: '/.gitlab/ci/browser-core/autowizard_ff.yml'
- local: '/.gitlab/ci/browser-core/api_client_php.yml'
- local: '/.gitlab/ci/browser-core/api_client_ruby.yml'
- local: '/.gitlab/ci/browser-core/capybara_chrome.yml'
- local: '/.gitlab/ci/browser-core/capybara_ff.yml'
- local: '/.gitlab/ci/browser-core/chrome.yml'
- local: '/.gitlab/ci/browser-core/firefox.yml'
.template_browser-core: &template_browser-core
stage: browser-core
dependencies:
- browser:build
extends:
- .env_base
- .variables_es
- .variables_app_restart_cmd
variables:
RAILS_ENV: "production"
script:
- script/build/test_slice_tests.sh $TEST_SLICE
- RAILS_ENV=test bundle exec rake db:create
- bundle exec rake zammad:ci:test:start[with_elasticsearch]
- time bundle exec rails test --fail-fast test/browser
.template_browser-core_chrome: &template_browser-core_chrome
extends:
- .template_browser-core
- .services_mysql_postgresql_elasticsearch_selenium_chrome_imap_redis_memcached
.template_browser-core_firefox: &template_browser-core_firefox
extends:
- .template_browser-core
- .services_mysql_postgresql_elasticsearch_selenium_firefox_imap_redis_memcached
.template_browser-core_autowizard: &template_browser-core_autowizard
stage: browser-core
dependencies:
- browser:build
extends:
- .env_base
- .variables_app_restart_cmd
variables:
RAILS_ENV: "production"
AUTO_WIZARD_FILE: "contrib/auto_wizard_example.json"
TEST_FILE: "test/integration/auto_wizard_browser_test.rb"
script:
- RAILS_ENV=test bundle exec rake db:create
- cp $AUTO_WIZARD_FILE auto_wizard.json
- bundle exec rake zammad:ci:test:start
- bundle exec rails test $TEST_FILE
.template_browser-core_autowizard_chrome: &template_browser-core_autowizard_chrome
extends:
- .template_browser-core_autowizard
- .services_postgresql_selenium_chrome
.template_browser-core_autowizard_firefox: &template_browser-core_autowizard_firefox
extends:
- .template_browser-core_autowizard
- .services_postgresql_selenium_firefox
.template_browser-core_api_client: &template_browser-core_api_client
stage: browser-core
dependencies:
- browser:build
extends:
- .env_base
- .variables_app_restart_cmd
- .services_mysql_postgresql_redis_memcached
variables:
RAILS_ENV: "production"
.template_browser-core_capybara: &template_browser-core_capybara
stage: browser-core
dependencies:
- browser:build
extends:
- .env_base
- .variables_es
- .variables_rspec_slicing
variables:
RAILS_ENV: "test"
script:
- bundle exec rake zammad:ci:test:prepare
- echo "RSpec filter:" "$RSPEC_EXAMPLE_MATCHES"
- bundle exec rspec --require ./spec/rspec_extensions.rb --example-matches "$RSPEC_EXAMPLE_MATCHES" --fail-fast -t ~integration --profile 10 spec/system
.template_browser-core_capybara_chrome: &template_browser-core_capybara_chrome
extends:
- .template_browser-core_capybara
- .services_mysql_postgresql_elasticsearch_selenium_chrome_imap_redis_memcached
.template_browser-core_capybara_firefox: &template_browser-core_capybara_firefox
extends:
- .template_browser-core_capybara
- .services_mysql_postgresql_elasticsearch_selenium_firefox_imap_redis_memcached
# we need at least one job to store and include this template
# $IGNORE is not defined
ignore:
stage: test
only:
variables:
- $IGNORE
script:
- ''

View File

@@ -0,0 +1,17 @@
api_client_php:
extends:
- .template_browser-core_api_client
variables:
ZAMMAD_PHP_API_CLIENT_UNIT_TESTS_URL: "http://localhost:3000"
ZAMMAD_PHP_API_CLIENT_UNIT_TESTS_USERNAME: "admin@example.com"
ZAMMAD_PHP_API_CLIENT_UNIT_TESTS_PASSWORD: "test"
script:
- RAILS_ENV=test bundle exec rake db:create
- RAILS_ENV=test bundle exec rake zammad:ci:test:start zammad:setup:auto_wizard
- git clone https://github.com/zammad/zammad-api-client-php.git
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
- php composer-setup.php --install-dir=/usr/local/bin
- ln -s /usr/local/bin/composer.phar /usr/local/bin/composer
- cd zammad-api-client-php
- composer install
- vendor/bin/phpunit

View File

@@ -0,0 +1,12 @@
api_client_ruby:
extends:
- .template_browser-core_api_client
script:
- RAILS_ENV=test bundle exec rake db:create
- cp contrib/auto_wizard_test.json auto_wizard.json
- bundle exec rake zammad:ci:test:start
- git clone https://github.com/zammad/zammad-api-client-ruby.git
- cd zammad-api-client-ruby
- bundle update --bundler
- bundle install -j $(nproc)
- bundle exec rspec

View File

@@ -0,0 +1,3 @@
autowizard_chrome:
extends:
- .template_browser-core_autowizard_chrome

View File

@@ -0,0 +1,3 @@
autowizard_ff:
extends:
- .template_browser-core_autowizard_firefox

View File

@@ -0,0 +1,17 @@
browser:build:
stage: test
extends:
- .tags_docker
- .services_postgresql
artifacts:
expire_in: 1 week
paths:
- public/assets/.sprockets-manifest*
- public/assets/application-*
- public/assets/knowledge_base*
- public/assets/print-*
variables:
RAILS_ENV: "production"
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rake assets:precompile

View File

@@ -0,0 +1,23 @@
capybara:chrome:1:
extends:
- .template_browser-core_capybara_chrome
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_1_OF_4
capybara:chrome:2:
extends:
- .template_browser-core_capybara_chrome
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_2_OF_4
capybara:chrome:3:
extends:
- .template_browser-core_capybara_chrome
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_3_OF_4
capybara:chrome:4:
extends:
- .template_browser-core_capybara_chrome
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_4_OF_4

View File

@@ -0,0 +1,23 @@
capybara:firefox:1:
extends:
- .template_browser-core_capybara_firefox
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_1_OF_4
capybara:firefox:2:
extends:
- .template_browser-core_capybara_firefox
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_2_OF_4
capybara:firefox:3:
extends:
- .template_browser-core_capybara_firefox
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_3_OF_4
capybara:firefox:4:
extends:
- .template_browser-core_capybara_firefox
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_4_OF_4

View File

@@ -0,0 +1,35 @@
1_chrome:
extends:
- .template_browser-core_chrome
variables:
TEST_SLICE: "1"
2_chrome:
extends:
- .template_browser-core_chrome
variables:
TEST_SLICE: "2"
3_chrome:
extends:
- .template_browser-core_chrome
variables:
TEST_SLICE: "3"
4_chrome:
extends:
- .template_browser-core_chrome
variables:
TEST_SLICE: "4"
5_chrome:
extends:
- .template_browser-core_chrome
variables:
TEST_SLICE: "5"
6_chrome:
extends:
- .template_browser-core_chrome
variables:
TEST_SLICE: "6"

View File

@@ -0,0 +1,36 @@
1_firefox:
extends:
- .template_browser-core_firefox
variables:
TEST_SLICE: "1"
2_firefox:
extends:
- .template_browser-core_firefox
variables:
TEST_SLICE: "2"
3_firefox:
extends:
- .template_browser-core_firefox
- .tags_mail
variables:
TEST_SLICE: "3"
4_firefox:
extends:
- .template_browser-core_firefox
variables:
TEST_SLICE: "4"
5_firefox:
extends:
- .template_browser-core_firefox
variables:
TEST_SLICE: "5"
6_firefox:
extends:
- .template_browser-core_firefox
variables:
TEST_SLICE: "6"

View File

@@ -0,0 +1,73 @@
include:
# browser-integration
- local: '/.gitlab/ci/browser-integration/capybara_chrome.yml'
- local: '/.gitlab/ci/browser-integration/capybara_ff.yml'
- local: '/.gitlab/ci/browser-integration/idoit_chrome.yml'
- local: '/.gitlab/ci/browser-integration/otrs_chrome.yml'
.template_browser-integration_capybara: &template_browser-integration_capybara
stage: browser-integration
dependencies:
- browser:build
extends:
- .env_base
- .variables_app_restart_cmd
- .variables_es
variables:
RAILS_ENV: "test"
script:
- bundle exec rake zammad:ci:test:prepare
- bundle exec rspec --fail-fast --pattern "spec/system/**/*_spec.rb" -t integration --profile 10
.template_browser-integration_capybara_chrome: &template_browser-integration_capybara_chrome
extends:
- .template_browser-integration_capybara
- .services_mysql_postgresql_elasticsearch_selenium_chrome_imap_redis_memcached
.template_browser-integration_capybara_firefox: &template_browser-integration_capybara_firefox
extends:
- .template_browser-integration_capybara
- .services_mysql_postgresql_elasticsearch_selenium_firefox_imap_redis_memcached
.template_browser-integration_chrome: &template_browser-integration_chrome
stage: browser-integration
dependencies:
- browser:build
extends:
- .env_base
- .variables_app_restart_cmd
- .services_postgresql_selenium_chrome
variables:
RAILS_ENV: "production"
AUTO_WIZARD_FILE: "contrib/auto_wizard_test.json"
script:
- RAILS_ENV=test bundle exec rake db:create
- cp $AUTO_WIZARD_FILE auto_wizard.json
- bundle exec rake zammad:ci:test:start
- bundle exec rails test $TEST_FILE
.template_browser-integration_import_chrome: &template_browser-integration_import_chrome
stage: browser-integration
dependencies:
- browser:build
extends:
- .env_base
- .services_postgresql_selenium_chrome
variables:
RAILS_ENV: "production"
RAILS_SERVE_STATIC_FILES: "true"
script:
- RAILS_ENV=test bundle exec rake db:create
- bundle exec rake zammad:ci:test:start
- bundle exec rails test $TEST_FILE
# we need at least one job to store and include this template
# $IGNORE is not defined
ignore:
stage: test
only:
variables:
- $IGNORE
script:
- ''

View File

@@ -0,0 +1,3 @@
integration_capybara_chrome:
extends:
- .template_browser-integration_capybara_chrome

View File

@@ -0,0 +1,3 @@
integration_capybara_ff:
extends:
- .template_browser-integration_capybara_firefox

View File

@@ -0,0 +1,5 @@
idoit_chrome:
extends:
- .template_browser-integration_chrome
variables:
TEST_FILE: "test/integration/idoit_browser_test.rb"

View File

@@ -0,0 +1,17 @@
otrs_chrome:
extends:
- .template_browser-integration_import_chrome
variables:
TEST_FILE: "test/integration/otrs_import_browser_test.rb"
FF_NETWORK_PER_BUILD: 1 # https://docs.gitlab.com/runner/configuration/feature-flags.html
IMPORT_OTRS_ENDPOINT: "http://zammad-ci-otrsimport-app/otrs/public.pl?Action=ZammadMigrator"
TZ: "Europe/Berlin" # Required for the zammad-ci-otrsimport-app containers
services:
- name: registry.znuny.com/docker/zammad-postgresql:stable
alias: postgresql
- name: registry.znuny.com/docker/zammad-selenium-chrome:stable
alias: selenium-chrome
- name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs6
alias: zammad-ci-otrsimport-db
- name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs6
alias: zammad-ci-otrsimport-app

View File

@@ -0,0 +1,29 @@
include:
- local: '/.gitlab/ci/integration/clearbit.yml'
- local: '/.gitlab/ci/integration/email_helper_deliver.yml'
- local: '/.gitlab/ci/integration/es.yml'
- local: '/.gitlab/ci/integration/geo.yml'
- local: '/.gitlab/ci/integration/otrs.yml'
- local: '/.gitlab/ci/integration/slack.yml'
- local: '/.gitlab/ci/integration/user_agent.yml'
.template_integration: &template_integration
extends:
- .env_base
- .services_mysql_postgresql
- .rules_integration_manual_start
tags:
- integration
stage: test
variables:
RAILS_ENV: "test"
# we need at least one job to store and include this template
# $IGNORE is not defined
ignore:
stage: test
only:
variables:
- $IGNORE
script:
- ''

View File

@@ -0,0 +1,7 @@
clearbit:
extends:
- .template_integration
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/clearbit_test.rb
allow_failure: true

View File

@@ -0,0 +1,11 @@
email_helper_deliver:
extends:
- .template_integration
- .tags_mail
- .services_mysql_postgresql_imap
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/email_helper_test.rb
- bundle exec rails test test/integration/email_deliver_test.rb
- bundle exec rails test test/integration/email_keep_on_server_test.rb
- bundle exec rails test test/integration/email_postmaster_to_sender.rb

View File

@@ -0,0 +1,26 @@
.template_integration_es: &template_integration_es
extends:
- .env_base
- .services_mysql_postgresql_elasticsearch
- .variables_es
stage: test
tags:
- integration
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/elasticsearch_active_test.rb
- bundle exec rails test test/integration/elasticsearch_test.rb
- bundle exec rspec --tag searchindex --tag ~type:system --profile 10
- bundle exec rails test test/integration/report_test.rb
es:7:
<<: *template_integration_es
variables:
ELASTICSEARCH_TAG: '7'
RAILS_ENV: "test"
es:7.8:
<<: *template_integration_es
variables:
ELASTICSEARCH_TAG: '7.8.1'
RAILS_ENV: "test"

View File

@@ -0,0 +1,8 @@
geo:
extends:
- .template_integration
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/geo_calendar_test.rb
- bundle exec rails test test/integration/geo_location_test.rb
- bundle exec rails test test/integration/geo_ip_test.rb

View File

@@ -0,0 +1,82 @@
.template_integration_otrs: &template_integration_otrs
extends:
- .template_integration
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/otrs_import_test.rb
variables:
FF_NETWORK_PER_BUILD: 1 # https://docs.gitlab.com/runner/configuration/feature-flags.html
IMPORT_OTRS_ENDPOINT: "http://zammad-ci-otrsimport-app/otrs/public.pl?Action=ZammadMigrator"
TZ: "Europe/Berlin" # Required for the zammad-ci-otrsimport-app containers
otrs:6:
<<: *template_integration_otrs
services:
- name: registry.znuny.com/docker/zammad-mysql:stable
alias: mysql
- name: registry.znuny.com/docker/zammad-postgresql:stable
alias: postgresql
- name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs6
alias: zammad-ci-otrsimport-db
- name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs6
alias: zammad-ci-otrsimport-app
otrs:5:
<<: *template_integration_otrs
services:
- name: registry.znuny.com/docker/zammad-mysql:stable
alias: mysql
- name: registry.znuny.com/docker/zammad-postgresql:stable
alias: postgresql
- name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs5
alias: zammad-ci-otrsimport-db
- name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs5
alias: zammad-ci-otrsimport-app
otrs:4:
<<: *template_integration_otrs
services:
- name: registry.znuny.com/docker/zammad-mysql:stable
alias: mysql
- name: registry.znuny.com/docker/zammad-postgresql:stable
alias: postgresql
- name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs4
alias: zammad-ci-otrsimport-db
- name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs4
alias: zammad-ci-otrsimport-app
otrs:33:
<<: *template_integration_otrs
services:
- name: registry.znuny.com/docker/zammad-mysql:stable
alias: mysql
- name: registry.znuny.com/docker/zammad-postgresql:stable
alias: postgresql
- name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs33
alias: zammad-ci-otrsimport-db
- name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs33
alias: zammad-ci-otrsimport-app
otrs:32:
<<: *template_integration_otrs
services:
- name: registry.znuny.com/docker/zammad-mysql:stable
alias: mysql
- name: registry.znuny.com/docker/zammad-postgresql:stable
alias: postgresql
- name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs32
alias: zammad-ci-otrsimport-db
- name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs32
alias: zammad-ci-otrsimport-app
otrs:31:
<<: *template_integration_otrs
services:
- name: registry.znuny.com/docker/zammad-mysql:stable
alias: mysql
- name: registry.znuny.com/docker/zammad-postgresql:stable
alias: postgresql
- name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs31
alias: zammad-ci-otrsimport-db
- name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs31
alias: zammad-ci-otrsimport-app

View File

@@ -0,0 +1,13 @@
slack:
extends:
- .template_integration
rules:
- if: $CI_MERGE_REQUEST_ID
when: never
- if: '$CI_COMMIT_BRANCH =~ /^private/'
when: manual
allow_failure: true
- when: on_success
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/slack_test.rb

View File

@@ -0,0 +1,8 @@
user_agent:
extends:
- .template_integration
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/user_agent_test.rb
- export ZAMMAD_PROXY_TEST=true
- bundle exec rails test test/integration/user_agent_test.rb

90
.gitlab/ci/pre.yml Normal file
View File

@@ -0,0 +1,90 @@
# Workaround to enable usage of mixed SSH and Docker GitLab CI runners
.template_pre: &template_pre
stage: pre
extends:
- .tags_docker
- .rules_singletest
before_script:
- source /etc/profile.d/rvm.sh # ensure RVM is loaded
- source /opt/rh/rh-nodejs12/enable # ensure Node.js is available
rubocop:
<<: *template_pre
script:
- bundle install -j $(nproc) --path vendor
- bundle exec rubocop --parallel
shellcheck:
<<: *template_pre
image: koalaman/shellcheck-alpine:stable
before_script:
- echo "Disable default before_script."
script:
- shellcheck -S warning $(find . -name "*.sh" -o -name "functions" | grep -v "/vendor/")
zeitwerk_check:
<<: *template_pre
extends:
- .tags_docker
- .services_postgresql
script:
- bundle install -j $(nproc) --path vendor
- bundle exec ruby .gitlab/configure_environment.rb
- source .gitlab/environment.env
- bundle exec rake zammad:db:init
- bundle exec rails zeitwerk:check
brakeman:
<<: *template_pre
artifacts:
expire_in: 1 week
paths:
- tmp/brakeman-report.html
when: on_failure
script:
- bundle install -j $(nproc) --path vendor
- bundle exec brakeman -o /dev/stdout -o tmp/brakeman-report.html
coffeelint:
<<: *template_pre
script:
- coffeelint app/
bundle-audit:
<<: *template_pre
script:
- gem install bundler-audit
- bundle-audit update
- bundle-audit --ignore CVE-2015-9284
github:
<<: *template_pre
tags:
- deploy
before_script:
- "" # no RVM present in deploy ENV
script:
- script/build/sync_repo.sh git@github.com:zammad/zammad.git
global_refresh_envs:
extends:
- .tags_docker
- .services_postgresql
stage: pre
# ensure that only one Job runs in the whole project (branches etc.)
resource_group: global_refresh_envs
# allow download via the web UI to restore ENVs in case global cache got deleted (see: `.gitlab-ci.yml`)
artifacts:
expire_in: 1 day
paths:
- fresh.env
rules:
- if: $CI_MERGE_REQUEST_ID
when: never
- if: '$CI_COMMIT_BRANCH =~ /^private/'
when: manual
allow_failure: true
- when: on_success
script:
- bundle exec rake zammad:ci:refresh_envs

35
.gitlab/ci/rspec.yml Normal file
View File

@@ -0,0 +1,35 @@
include:
- local: '/.gitlab/ci/rspec/mysql.yml'
- local: '/.gitlab/ci/rspec/postgresql.yml'
.template_rspec: &template_rspec
extends:
- .env_base
- .variables_rspec_slicing
script:
- bundle exec rake zammad:db:init
- echo "RSpec filter:" "$RSPEC_EXAMPLE_MATCHES"
- bundle exec rspec --require ./spec/rspec_extensions.rb --example-matches "$RSPEC_EXAMPLE_MATCHES" --exclude-pattern "spec/{system,integration}/**/*_spec.rb" -t ~searchindex --profile 10
# RSpec 3rd party integration tests are independent of the database
# therefore we need only one job and choose a random database for each run
# Optionally pass INTEGRATION_TESTS=enabled to run them in private- branch
rspec:integration:
stage: test
extends:
- .env_base
- .services_mysql_postgresql_redis_memcached
- .rules_integration_manual_start
variables:
RAILS_ENV: "test"
rules:
- if: $CI_MERGE_REQUEST_ID
when: never
- if: '$CI_COMMIT_BRANCH =~ /^private/ && $INTEGRATION_TESTS != "enabled"'
when: manual
allow_failure: true
- when: always
script:
- bundle exec rake zammad:db:init
- bundle exec rspec -t type:integration --profile 10

View File

@@ -0,0 +1,31 @@
rspec:mysql:1:
stage: test
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_1_OF_4
extends:
- .services_mysql_redis_memcached
- .template_rspec
rspec:mysql:2:
stage: test
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_2_OF_4
extends:
- .services_mysql_redis_memcached
- .template_rspec
rspec:mysql:3:
stage: test
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_3_OF_4
extends:
- .services_mysql_redis_memcached
- .template_rspec
rspec:mysql:4:
stage: test
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_4_OF_4
extends:
- .services_mysql_redis_memcached
- .template_rspec

View File

@@ -0,0 +1,31 @@
rspec:postgresql:1:
stage: test
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_1_OF_4
extends:
- .services_postgresql_redis_memcached
- .template_rspec
rspec:postgresql:2:
stage: test
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_2_OF_4
extends:
- .services_postgresql_redis_memcached
- .template_rspec
rspec:postgresql:3:
stage: test
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_3_OF_4
extends:
- .services_postgresql_redis_memcached
- .template_rspec
rspec:postgresql:4:
stage: test
variables:
RSPEC_EXAMPLE_MATCHES: $RSPEC_EXAMPLE_SLICE_4_OF_4
extends:
- .services_postgresql_redis_memcached
- .template_rspec

24
.gitlab/ci/unit.yml Normal file
View File

@@ -0,0 +1,24 @@
include:
- local: '/.gitlab/ci/unit/mysql.yml'
- local: '/.gitlab/ci/unit/postgresql.yml'
.template_unit: &template_unit
extends:
- .env_base
variables:
RAILS_ENV: "test"
script:
- bundle exec rake zammad:db:init
- bundle exec rake test:units
- bundle exec rails test test/integration/object_manager_test.rb
- bundle exec rails test test/integration/package_test.rb
# we need at least one job to store and include this template
# $IGNORE is not defined
ignore:
stage: test
only:
variables:
- $IGNORE
script:
- ''

View File

@@ -0,0 +1,5 @@
unit:mysql:
stage: test
extends:
- .services_mysql_redis_memcached
- .template_unit

View File

@@ -0,0 +1,5 @@
unit:postgresql:
stage: test
extends:
- .services_postgresql_redis_memcached
- .template_unit

125
.gitlab/configure_environment.rb Executable file
View File

@@ -0,0 +1,125 @@
#!/usr/bin/env ruby
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
require 'yaml'
require 'resolv'
#
# Configures the CI system
# - either (randomly) mysql or postgresql, if it is available
# - (randomly) Redis or File as web socket session back end, if Redis is available
#
# Database config happens directly in config/database.yml, other settings are written to
# .gitlab/environment.env which must be sourced in the CI configuration.
#
class ConfigureEnvironment
@env_file_content = <<~ENV_FILE_CONTENT
#!/bin/bash
FRESHENVFILE=fresh.env && test -f $FRESHENVFILE && source $FRESHENVFILE
true
ENV_FILE_CONTENT
def self.configure_redis
if ENV['REDIS_URL'].nil? || ENV['REDIS_URL'].empty? # rubocop:disable Rails/Blank
puts 'Redis is not available, using File as web socket session store.'
return
end
if [true, false].sample
puts 'Using Redis as web socket session store.'
return
end
puts 'Using File as web socket session store.'
@env_file_content += "unset REDIS_URL\n"
end
def self.configure_memcached
if ENV['MEMCACHE_SERVERS'].nil? || ENV['MEMCACHE_SERVERS'].empty? # rubocop:disable Rails/Blank
puts 'Memcached is not available, using File as Rails cache store.'
return
end
if [true, false].sample
puts 'Using memcached as Rails cache store.'
return
end
puts "Using Zammad's file store as Rails cache store."
@env_file_content += "unset MEMCACHE_SERVERS\n"
end
def self.configure_database # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
if File.exist? File.join(__dir__, '../config/database.yml')
puts "'config/database.yml' already exists and will not be changed."
return
end
cnf = YAML.load_file(File.join(__dir__, '../config/database/database.yml'))
cnf.delete('default')
database = ENV['ENFORCE_DB_SERVICE']
# Lookup in /etc/hosts first: gitlab uses that if FF_NETWORK_PER_BUILD is not set.
if !database
hostsfile = '/etc/hosts'
database = %w[postgresql mysql].shuffle.find do |possible_database|
File.foreach(hostsfile).any? { |l| l[possible_database] }
end
end
# Lookup via DNS if needed: gitlab uses that if FF_NETWORK_PER_BUILD is enabled.
if !database
dns = Resolv::DNS.new
dns.timeouts = 3
database = %w[postgresql mysql].shuffle.find do |possible_database|
# Perform a lookup of the database host to check if it is configured as a service.
if dns.getaddress possible_database
next possible_database
end
rescue Resolv::ResolvError
# Ignore DNS lookup errors
end
end
raise "Can't find any supported database." if database.nil?
puts "Using #{database} as database service."
db_settings_map = {
'postgresql' => {
'adapter' => 'postgresql',
'username' => 'zammad',
'password' => 'zammad',
'host' => 'postgresql', # db alias from gitlab-ci.yml
},
'mysql' => {
'adapter' => 'mysql2',
'username' => 'root',
'password' => 'zammad',
'host' => 'mysql', # db alias from gitlab-ci.yml
}
}
# fetch DB settings from settings map and fallback to postgresql
db_settings = db_settings_map.fetch(database) { db_settings_map['postgresql'] }
%w[development test production].each do |environment|
cnf[environment].merge!(db_settings)
end
File.write(File.join(__dir__, '../config/database.yml'), Psych.dump(cnf))
end
def self.write_env_file
File.write(File.join(__dir__, 'environment.env'), @env_file_content)
end
def self.run
configure_redis
configure_memcached
configure_database
write_env_file
end
end
ConfigureEnvironment.run

17
.gitlab/dependabot.yml Normal file
View File

@@ -0,0 +1,17 @@
version: 2
updates:
- package-ecosystem: "bundler"
directory: "/"
schedule:
interval: "daily"
# Only create pull requests to update lockfiles. Ignore any new versions that would require package manifest changes.
versioning-strategy: lockfile-only
open-pull-requests-limit: 5
pull-request-branch-name:
separator: "/"
commit-message:
prefix: "Maintenance:"
assignees:
- mg
reviewers:
- mg

View File

@@ -0,0 +1,66 @@
## What does this MR do?
<!-- Is there a lot to say? Consider creating an issue. -->
## Screenshots <!-- Optional -->
### Before
![alt text](https://example.com/before.png)
### After
![alt text](https://example.com/after.png)
## Notes
* This MR
**does** <!-- KEEP ONLY ONE -->
does not <!-- OF THESE LINES -->
change more than 3 files / 100 lines of code.
<!-- If so, what’s the connection? Or, could you split it into multiple MRs? -->
* This MR
**does** <!-- KEEP ONLY ONE -->
does not <!-- OF THESE LINES -->
introduce new methods.
<!-- If so, are they tested? -->
* This MR
**does** <!-- KEEP ONLY ONE -->
does not <!-- OF THESE LINES -->
modify or remove existing methods.
<!-- If so, did you modify/remove their tests, as well? -->
* This MR
**does** <!-- KEEP ONLY ONE -->
does not <!-- OF THESE LINES -->
add to, modify, or remove existing test cases.
<!-- If so, explain. -->
### Performance Impact <!-- Optional -->
<!--
Does your MR optimize (or degrade) performance?
If so, apply the label and explain here.
Consider that some of OTRS’s customers had
HUNDREDS of agents, overviews, and groups,
over 2,000 tickets a day,
and over 20,000,000 (!) tickets in all.
How do your performance changes scale on a system of this size?
(Remember, these are not edge cases we can ignore;
they are really big customers, and we want to keep their business!)
-->
### Follow-up Required <!-- Optional -->
<!--
Does your MR require coordination with the documentation/support teams?
If so, apply the label and explain here.
-->

44
.overcommit.yml Normal file
View File

@@ -0,0 +1,44 @@
CommitMsg:
ALL:
enabled: false
EmptyMessage:
enabled: true
PreCommit:
ALL:
enabled: false
RuboCop:
enabled: true
on_warn: fail # Treat all warnings as failures
CoffeeLint:
enabled: true
on_warn: fail # Treat all warnings as failures
PostCheckout:
ALL:
enabled: false
PostCommit:
ALL:
enabled: false
PostMerge:
ALL:
enabled: false
PostRewrite:
ALL:
enabled: false
PrePush:
ALL:
enabled: false
PreRebase:
ALL:
enabled: false
PrepareCommitMsg:
ALL:
enabled: false

104
.pkgr.yml
View File

@@ -5,36 +5,109 @@ notifications: false
targets:
centos-7:
dependencies:
- curl
- elasticsearch
- nginx
# Only CentOS 7 has the old PostgreSQL 9.2, so explicitly require 9.3 here.
- "postgresql-server >= 9.3"
- which
- epel-release
- imlib2
- shared-mime-info
build_dependencies:
- http://download.fedoraproject.org/pub/epel/7/x86_64/Packages/i/imlib2-1.4.5-9.el7.x86_64.rpm
- http://download.fedoraproject.org/pub/epel/7/x86_64/Packages/i/imlib2-devel-1.4.5-9.el7.x86_64.rpm
- shared-mime-info
centos-8:
dependencies:
- curl
- elasticsearch
- nginx
- postgresql-server
- which
debian-8:
dependencies:
- elasticsearch
- nginx|apache2
- postgresql|mysql-server|mariadb-server|sqlite
- epel-release
- imlib2
- shared-mime-info
build_dependencies:
- http://download.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/i/imlib2-1.4.9-8.el8.x86_64.rpm
- http://download.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/i/imlib2-devel-1.4.9-8.el8.x86_64.rpm
- shared-mime-info
debian-9:
dependencies:
- elasticsearch
- curl
- elasticsearch|elasticsearch-oss
- nginx|apache2
- postgresql|mariadb-server|sqlite
- postgresql|mariadb-server
- libimlib2
- shared-mime-info
build_dependencies:
- libimlib2
- libimlib2-dev
- shared-mime-info
debian-10:
dependencies:
- curl
- elasticsearch|elasticsearch-oss
- nginx|apache2
- postgresql|mariadb-server
- libimlib2
- shared-mime-info
build_dependencies:
- libimlib2
- libimlib2-dev
- shared-mime-info
ubuntu-16.04:
dependencies:
- elasticsearch
- curl
- elasticsearch|elasticsearch-oss
- nginx|apache2
- postgresql|mysql-server|mariadb-server|sqlite
- postgresql|mysql-server|mariadb-server
- libimlib2
- shared-mime-info
build_dependencies:
- libimlib2
- libimlib2-dev
- shared-mime-info
ubuntu-18.04:
dependencies:
- curl
- elasticsearch|elasticsearch-oss
- nginx|apache2
- postgresql|mysql-server|mariadb-server
- libimlib2
- shared-mime-info
build_dependencies:
- libimlib2
- libimlib2-dev
- shared-mime-info
ubuntu-20.04:
dependencies:
- curl
- elasticsearch|elasticsearch-oss
- nginx|apache2
- postgresql|mysql-server|mariadb-server
- libimlib2
- shared-mime-info
build_dependencies:
- libimlib2
- libimlib2-dev
- shared-mime-info
sles-12:
dependencies:
- curl
- elasticsearch
- nginx
- postgresql-server
- libImlib2-1
- imlib2
build_dependencies:
- https://ftp.gwdg.de/pub/opensuse/discontinued/distribution/12.3/repo/oss/suse/x86_64/imlib2-1.4.5-12.1.1.x86_64.rpm
- https://ftp.gwdg.de/pub/opensuse/discontinued/distribution/12.3/repo/oss/suse/x86_64/imlib2-devel-1.4.5-12.1.1.x86_64.rpm
- https://ftp.gwdg.de/pub/opensuse/discontinued/distribution/12.3/repo/oss/suse/x86_64/imlib2-filters-1.4.5-12.1.1.x86_64.rpm
- https://ftp.gwdg.de/pub/opensuse/discontinued/distribution/12.3/repo/oss/suse/x86_64/libImlib2-1-1.4.5-12.1.1.x86_64.rpm
- shared-mime-info
before:
- uname -a
- ruby -v
- env
- "cat Gemfile.lock"
- contrib/cleanup.sh
- contrib/packager.io/before.sh
after:
- contrib/packager.io/after.sh
env:
@@ -43,5 +116,6 @@ env:
- ZAMMAD_RAILS_PORT=3000
- ZAMMAD_WEBSOCKET_PORT=6042
services:
- postgres
- postgres:13
before_install: contrib/packager.io/preinstall.sh
after_install: contrib/packager.io/postinstall.sh

View File

@@ -1,218 +1,5 @@
# Default enabled cops
# https://github.com/bbatsov/rubocop/blob/master/config/enabled.yml
AllCops:
Exclude:
- 'bin/rails'
- 'bin/rake'
- 'bin/spring'
- 'db/schema.rb'
Rails:
Enabled: true
# Zammad StyleGuide
Style/FrozenStringLiteralComment:
Enabled: false
Metrics/LineLength:
Description: 'Limit lines to 80 characters.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#80-character-limits'
Enabled: false
Style/NegatedIf:
Description: >-
Favor unless over if for negative conditions
(or control flow or).
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#unless-for-negatives'
Enabled: false
Style/IfUnlessModifier:
Description: >-
Favor modifier if/unless usage when you have a
single-line body.
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#if-as-a-modifier'
Enabled: false
Style/TrailingCommaInLiteral:
Description: 'Checks for trailing comma in array and hash literals.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
Enabled: false
Style/TrailingCommaInArguments:
Description: 'Checks for trailing comma in argument lists.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
Enabled: false
Style/SpaceInsideParens:
Description: 'No spaces after ( or before ).'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-spaces-braces'
Enabled: false
Style/SpaceAfterMethodName:
Description: >-
Do not put a space between a method name and the opening
parenthesis in a method definition.
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#parens-no-spaces'
Enabled: false
Style/LeadingCommentSpace:
Description: 'Comments should start with a space.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#hash-space'
Enabled: false
Style/MethodCallParentheses:
Description: 'Do not use parentheses for method calls with no arguments.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-args-no-parens'
Enabled: false
Style/SpaceInsideBrackets:
Description: 'No spaces after [ or before ].'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-spaces-braces'
Enabled: false
Style/DefWithParentheses:
Description: 'Use def with parentheses when there are arguments.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#method-parens'
Enabled: false
Style/MethodDefParentheses:
Description: >-
Checks if the method definitions have or don't have
parentheses.
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#method-parens'
Enabled: false
Style/EmptyLinesAroundClassBody:
Description: "Keeps track of empty lines around class bodies."
Enabled: false
Style/EmptyLinesAroundMethodBody:
Description: "Keeps track of empty lines around method bodies."
Enabled: false
Style/EmptyLinesAroundBlockBody:
Description: "Keeps track of empty lines around block bodies."
Enabled: false
Style/EmptyLinesAroundModuleBody:
Description: "Keeps track of empty lines around module bodies."
Enabled: false
Style/MultilineBlockChain:
Description: 'Avoid multi-line chains of blocks.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#single-line-blocks'
Enabled: false
Metrics/ClassLength:
Description: 'Avoid classes longer than 100 lines of code.'
Enabled: false
Metrics/MethodLength:
Description: 'Avoid methods longer than 10 lines of code.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#short-methods'
Enabled: false
Style/BlockComments:
Description: 'Do not use block comments.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-block-comments'
Enabled: false
Style/PerlBackrefs:
Description: 'Avoid Perl-style regex back references.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-perl-regexp-last-matchers'
Enabled: false
Style/SelfAssignment:
Description: >-
Checks for places where self-assignment shorthand should have
been used.
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#self-assignment'
Enabled: false
Style/BracesAroundHashParameters:
Description: 'Enforce braces style around hash parameters.'
Enabled: false
Rails/FindEach:
Description: 'Prefer all.find_each over all.find.'
Enabled: false
Rails/HasAndBelongsToMany:
Description: 'Prefer has_many :through to has_and_belongs_to_many.'
# StyleGuide: 'https://github.com/bbatsov/rails-style-guide#has-many-through'
Enabled: false
Style/ClassAndModuleChildren:
Description: 'Checks style of children classes and modules.'
Enabled: false
Style/FileName:
Description: 'Use snake_case for source file names.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#snake-case-files'
Enabled: true
Exclude:
- 'script/websocket-server.rb'
# 2.0
Metrics/PerceivedComplexity:
Description: >-
A complexity metric geared towards measuring complexity for a
human reader.
Enabled: false
Metrics/AbcSize:
Description: >-
A calculated magnitude based on number of assignments,
branches, and conditions.
Enabled: false
Metrics/CyclomaticComplexity:
Description: >-
A complexity metric that is strongly correlated to the number
of test cases needed to validate a method.
Enabled: false
Metrics/BlockNesting:
Description: 'Avoid excessive block nesting'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#three-is-the-number-thou-shalt-count'
Enabled: false
Metrics/ModuleLength:
Description: 'Avoid modules longer than 100 lines of code.'
Enabled: false
# TODO
Style/Documentation:
Description: 'Document classes and non-namespace modules.'
Enabled: false
Lint/UselessAssignment:
Enabled: false
Style/ExtraSpacing:
Description: 'Do not use unnecessary spacing.'
Enabled: false
# Broken!!!! Generates broken code since "String".downcase == "strinG".downcase is not equals "String".casecmp("strinG") but "String".casecmp("strinG") == 0 !!!
Performance/Casecmp:
Description: 'Use `casecmp` rather than `downcase ==`.'
Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringcasecmp-vs-stringdowncase---code'
Enabled: false
# RSpec tests
Style/NumericPredicate:
Description: >-
Checks for the use of predicate- or comparison methods for
numeric comparisons.
StyleGuide: '#predicate-methods'
# This will change to a new method call which isn't guaranteed to be on the
# object. Switching these methods has to be done with knowledge of the types
# of the variables which rubocop doesn't have.
AutoCorrect: false
Enabled: true
Exclude:
- "**/*_spec.rb"
# this is just a slim wrapper to:
# a) don't spam the root directory with rubocop files
# b) work around an issue with absolute excludes and custom development (https://github.com/rubocop-hq/rubocop/issues/4621)
inherit_from:
- .rubocop/default.yml

View File

@@ -0,0 +1,35 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
module RuboCop
module Cop
module Zammad
# This cop checks if migration file name begins with a valid timestamp
# https://github.com/zammad/zammad/issues/3702
class CorrectMigrationTimestamp < Base
MSG = 'Migration filename must begin with a valid timestamp'.freeze
def on_new_investigation
file_path = processed_source.file_path
return if !migration?(file_path)
return if config.file_to_exclude?(file_path) || config.allowed_camel_case_file?(file_path)
return if filename_good?(file_path)
add_global_offense(MSG)
end
private
def migration?(file_path)
match_path? %r{(?<!spec/)db/(migrate|addon/[^/]+)/.+\.rb}, file_path
end
def filename_good?(file_path)
File
.basename(file_path)
.match? %r{^20\d{12}_}
end
end
end
end
end

View File

@@ -0,0 +1,122 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
module RuboCop
module Cop
module Zammad
# This cop is used to identify usages of `find_by` in conditions and
# changes them to use `exists?` instead.
#
# @example
# # bad
# if User.find_by(name: 'Rubocop')
# if !User.find_by(name: 'Rubocop')
# unless User.find_by(name: 'Rubocop')
# if find_by(name: 'Rubocop')
# if !find_by(name: 'Rubocop')
# unless find_by(name: 'Rubocop')
#
# # good
# if User.exists?(name: 'Rubocop')
# if !User.exists?(name: 'Rubocop')
# unless User.exists?(name: 'Rubocop')
# if exists?(name: 'Rubocop')
# if !exists?(name: 'Rubocop')
# unless exists?(name: 'Rubocop')
class ExistsCondition < Base
def_node_matcher :find_by_condition?, <<-PATTERN
{
$(send $_ :find_by ...)
(send $(send $_ :find_by ...) :!)
}
PATTERN
MSG = 'Use `%<prefer>s` instead of `%<current>s`.'.freeze
def on_if(node)
check_for_find_by(node)
end
def on_while(node)
check_for_find_by(node)
end
def on_while_post(node)
check_for_find_by(node)
end
def on_until(node)
check_for_find_by(node)
end
def on_until_post(node)
check_for_find_by(node)
end
def autocorrect(node)
lambda do |corrector|
corrector.replace(node.loc.selector, 'exists?')
end
end
private
def check_for_find_by(node)
cond = condition(node)
handle_node(cond)
end
def check_node(node)
return if !node
if keyword_bang?(node)
receiver, = *node
handle_node(receiver)
elsif node.operator_keyword?
node.each_child_node { |op| handle_node(op) }
elsif node.begin_type? && node.children.one?
handle_node(node.children.first)
end
end
def keyword_bang?(node)
node.respond_to?(:keyword_bang?) && node.keyword_bang?
end
def handle_node(node)
if node.send_type?
check_offense(*find_by_condition?(node))
elsif %i[and or begin].include?(node.type)
check_node(node)
end
end
def condition(node)
if node.send_type?
node.receiver
else
node.condition
end
end
def check_offense(method_call = nil, receiver = nil)
return if method_call.nil?
add_offense(method_call,
message: format(MSG,
prefer: replacement(receiver),
current: current(receiver)))
end
def current(node)
node.respond_to?(:source) ? "#{node.source}.find_by" : 'find_by'
end
def replacement(node)
node.respond_to?(:source) ? "#{node.source}.exists?" : 'exists?'
end
end
end
end
end

View File

@@ -0,0 +1,67 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
module RuboCop
module Cop
module Zammad
class ExistsDateTimePrecision < Cop
def_node_matcher :column?, <<-PATTERN
$(send _ {:add_column :change_column} (sym _) (sym _) (sym :datetime) ... )
PATTERN
def_node_matcher :column_limit?, <<-PATTERN
(send ... (hash <(pair (sym :limit) $(int 3)) ...> ) )
PATTERN
def_node_matcher :table?, <<-PATTERN
$(block
(send _ {:create_table :alter_table} ... )
...
)
PATTERN
def_node_matcher :table_column?, <<-PATTERN
$(send (:lvar _) {:timestamps :datetime} ... )
PATTERN
MSG = 'Columns of type :timestamps and :datetime needs to have limit: 3.'.freeze
=begin
This rubocop will match all change_column/add_column/create_table/alter_table statements
and check if there are :datetime or :timestamps column which do not have the limit: 3 setting.
good:
change_column :smime_certificates, :not_after_at, :datetime, limit: 3
create_table :sessions do |t|
t.timestamps limit: 3, null: false
end
bad:
change_column :smime_certificates, :not_after_at, :datetime, limit: 4
create_table :sessions do |t|
t.timestamps null: false
end
=end
def on_send(node)
return add_offense(node) if invalid_column?(node)
return add_offense(node) if invalid_table?(node)
end
def invalid_table?(node)
table?(node&.parent&.parent) && table_column?(node) && !column_limit?(node)
end
def invalid_column?(node)
column?(node) && !column_limit?(node)
end
end
end
end
end

View File

@@ -0,0 +1,45 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
module RuboCop
module Cop
module Zammad
class ExistsDbStrategy < Base
def_node_matcher :migration_execute?, <<-PATTERN
$(send (const (const _ :ObjectManager ) :Attribute) :migration_execute)
PATTERN
def_node_matcher :create_attribute?, <<-PATTERN
$(send _ :create_attribute ...)
PATTERN
def_node_matcher :is_block?, <<-PATTERN
$(block ...)
PATTERN
def_node_matcher :has_reset?, <<-PATTERN
$(send _ {:describe :context :it} (_ ...) (hash ... (pair (sym :db_strategy) (sym {:reset :reset_all}))))
PATTERN
MSG = 'Add a `db_strategy: :reset` to your context/decribe when you are creating object manager attributes!'.freeze
def on_send(node)
return if !migration_execute?(node) && !create_attribute?(node)
reset = false
node_parent = node.parent
until node_parent.nil?
if is_block?(node_parent) && has_reset?(node_parent.children[0])
reset = true
break
end
node_parent = node_parent.parent
end
return if reset
add_offense(node)
end
end
end
end
end

View File

@@ -0,0 +1,90 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
module RuboCop
module Cop
module Zammad
class ExistsResetColumnInformation < Cop
def_node_matcher :table?, <<-PATTERN
$(send _ :change_table ... )
PATTERN
def_node_matcher :column?, <<-PATTERN
$(send _ {:add_column :change_column :rename_column :remove_column} ... )
PATTERN
def_node_matcher :reset?, <<-PATTERN
$( ... :reset_column_information )
PATTERN
def message(class_name)
"Changes of the schema need to be followed by a #{class_name}.reset_column_information to have the right state of the db in the migration and future migrations."
end
=begin
This rubocop will match all add, change, rename and remove column statements
and check if there are reset_column_information function calls existing for the model.
good:
change_column :smime_certificates, :not_after_at, :datetime, limit: 3
SMIMECertificate.reset_column_information
bad:
change_column :smime_certificates, :not_after_at, :datetime, limit: 3
=end
def column_classes
@column_classes ||= {}
end
def table_classes
@table_classes ||= {}
end
def reset_classes
@reset_classes ||= {}
end
def column_class(node)
node.children[2].children[0].to_s.classify
end
def reset_class(node)
node.children[0].children[1].to_s
end
def table_class(node)
node.children[2].children[0].to_s.classify
end
def on_send(node)
if column?(node)
column_classes[column_class(node)] = node
elsif table?(node)
table_classes[table_class(node)] = node
elsif reset?(node)
reset_classes[reset_class(node)] = node
end
end
def on_investigation_end
column_classes.each do |key, value|
next if reset_classes.key?(key)
add_offense(value, message: message(key))
end
table_classes.each do |key, value|
next if reset_classes.key?(key)
add_offense(value, message: message(key))
end
super
end
end
end
end
end

View File

@@ -0,0 +1,20 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
module RuboCop
module Cop
module Zammad
class ForbidRand < Base
MSG = <<~ERROR_MESSAGE.freeze
Please avoid 'rand' if possible. It does not guarantee uniqueness which means that there is a risk of collisions. Possible alternatives:
- If you need unique values, consider using 'SecureRandom.uuid'.
- To randomly select a value from a list, use [].sample.
- To generate random test data that does not need to be unique, you can use 'Faker::*'.
ERROR_MESSAGE
def on_send(node)
add_offense(node) if node.method_name.eql? :rand
end
end
end
end
end

View File

@@ -0,0 +1,63 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
require 'capybara/rspec/matchers'
module RuboCop
module Cop
module Zammad
# This cop is used to identify usages of `have_*` RSpec matcher together with `not_to`.
# `have_no_*` with `to` is preferred
#
# @example
# # bad
# expect(page).not_to have_css('#elem')
#
# # good
# expect(page).to have_no_css('#elem')
class HaveNoOverNotTo < Base
extend AutoCorrector
MSG = 'Prefer `.to %<replacement>s` over `.not_to %<original>s`.'.freeze
def_node_matcher :on_have_not_no, '(send (send nil? :expect ...) :not_to (send nil? #matcher_to_replace? ...))'
def matcher_to_replace?(matcher_name)
have_not_no?(matcher_name) && capybara_matcher?(matcher_name)
end
def have_not_no?(matcher_name) # rubocop:disable Naming/PredicateName
matcher_name.match?(%r{^have_(?!no)})
end
def capybara_matcher?(matcher_name)
Capybara::RSpecMatchers.instance_methods.include?(matcher_name)
end
def on_send(node)
on_have_not_no(node) do
add_offense(node, message: message(node)) do |corrector|
corrector.replace(original_matcher_node(node).loc.selector, alternative_matcher(node))
corrector.replace(node.loc.selector, 'to')
end
end
end
def original_matcher_node(node)
node.children[2]
end
def original_matcher(node)
original_matcher_node(node).method_name
end
def alternative_matcher(node)
original_matcher(node).to_s.sub 'have_', 'have_no_'
end
def message(node)
format(MSG, replacement: alternative_matcher(node), original: original_matcher(node))
end
end
end
end
end

View File

@@ -0,0 +1,42 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
module RuboCop
module Cop
module Zammad
# This cop is used to identify usages of `.to_sym` on Strings and
# changes them to use the `:` prefix instead.
#
# @example
# # bad
# "a-Symbol".to_sym
# 'a-Symbol'.to_sym
# "a-#{'Symbol'}".to_sym
#
# # good
# :"a-Symbol"
# :'a-Symbol'
# :"a-#{'Symbol'}"
class NoToSymOnString < Base
extend AutoCorrector
def_node_matcher :to_sym?, <<-PATTERN
{
$(send (str ...) :to_sym ...)
$(send (dstr ...) :to_sym ...)
}
PATTERN
MSG = "Don't use `.to_sym` on String. Prefer `:` prefix instead.".freeze
def on_send(node)
result = *to_sym?(node)
return if result.empty?
add_offense(node, message: MSG) do |corrector|
corrector.replace(node, ":#{result.first.source}")
end
end
end
end
end
end

View File

@@ -0,0 +1,32 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
module RuboCop
module Cop
module Zammad
# This cop is used to identify usages of `unless` conditionals
#
# @example
# # bad
# unless statement
# return unless statement
#
# # good
# if !statement
# return if !statement
class PreferNegatedIfOverUnless < Base
include ConfigurableEnforcedStyle
include NegativeConditional
extend AutoCorrector
MSG = 'Favor `if !foobar` over `unless foobar` for ' \
'negative conditions.'.freeze
def on_if(node)
return if !node.unless?
add_offense(node, message: MSG)
end
end
end
end
end

View File

@@ -0,0 +1,75 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
module RuboCop
module Cop
module Zammad
# This cop updates the copyright information or inserts it if needed.
class UpdateCopyright < Base
include RangeHelp
extend AutoCorrector
MSG = 'Copyright update required (use auto-correct to rectify this).'.freeze
COPYRIGHT = "# Copyright (C) 2012-#{Date.today.year} Zammad Foundation, http://zammad-foundation.org/".freeze # rubocop:disable Rails/Date
def on_new_investigation
if processed_source.raw_source.include? '# Copyright (C) 2012-'
update_copyright
else
insert_copyright
end
end
def insert_copyright
if processed_source.raw_source.start_with? '#!'
# Keep shebang line, obviously.
comment = processed_source.comments.first
add_offense(comment) do |corrector|
corrector.insert_after(
comment,
"\n#{COPYRIGHT}\n"
)
end
else
# Insert at the top if there is no shebang.
file_start = range_between(0, 0)
add_offense(file_start) do |corrector|
corrector.insert_before(file_start, "#{COPYRIGHT}\n\n")
end
end
end
def update_copyright
processed_source.comments.each do |comment|
break if correct_copyright?(comment)
next if !comment.text.include?('# Copyright (C) 2012-') # rubocop:disable Rails/NegateInclude
add_offense(comment) do |corrector|
corrector.replace(
comment,
replace_with(comment)
)
end
break
end
end
def correct_copyright?(comment)
return false if !comment.text.eql? COPYRIGHT
newline_after_copyright?(comment)
end
def newline_after_copyright?(comment)
processed_source[comment.location.last_line].blank?
end
def replace_with(comment)
return COPYRIGHT if newline_after_copyright?(comment)
"#{COPYRIGHT}\n"
end
end
end
end
end

322
.rubocop/default.yml Normal file
View File

@@ -0,0 +1,322 @@
# Default enabled cops
# https://github.com/rubocop-hq/rubocop/blob/master/config/default.yml
require:
- rubocop-faker
- rubocop-performance
- rubocop-rails
- rubocop-rspec
- ./rubocop_zammad.rb
inherit_from:
- todo.yml
- todo.rspec.yml
inherit_mode:
merge:
- Include
AllCops:
NewCops: enable
DisplayCopNames: true
Include:
- '.gitlab/**/*.rb'
- '.github/**/*.rb'
- '.rubocop/**/*.rb'
Exclude:
- 'bin/*'
- 'db/schema.rb'
- 'vendor/**/*'
- 'node_modules/**/*'
- 'public/assets/**/*'
- 'public/packs/**/*'
RSpec:
Include:
- "**/*_spec.rb"
- "**/*_examples.rb"
Rails:
Enabled: true
# Zammad StyleGuide
Style/FrozenStringLiteralComment:
Enabled: false
Layout/LineLength:
Description: 'Limit lines to 80 characters.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#80-character-limits'
Enabled: false
Style/NegatedIf:
Description: >-
Favor unless over if for negative conditions
(or control flow or).
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#unless-for-negatives'
Enabled: false
Style/IfUnlessModifier:
Description: >-
Favor modifier if/unless usage when you have a
single-line body.
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#if-as-a-modifier'
Enabled: false
Style/TrailingCommaInArrayLiteral:
Description: 'Checks for trailing comma in array literals.'
StyleGuide: '#no-trailing-array-commas'
Enabled: false
Style/TrailingCommaInHashLiteral:
Description: 'Checks for trailing comma in hash literals.'
Enabled: false
Style/TrailingCommaInArguments:
Description: 'Checks for trailing comma in argument lists.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
Enabled: false
Style/RescueStandardError:
Description: 'Avoid rescuing without specifying an error class.'
Enabled: true
EnforcedStyle: implicit
Layout/SpaceInsideReferenceBrackets:
Description: 'Checks the spacing inside referential brackets.'
Enabled: false
Layout/SpaceInsideArrayLiteralBrackets:
Description: 'Checks the spacing inside array literal brackets.'
Enabled: false
Style/DefWithParentheses:
Description: 'Use def with parentheses when there are arguments.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#method-parens'
Enabled: false
Layout/HashAlignment:
Description: >-
Align the elements of a hash literal if they span more than
one line.
Enabled: true
EnforcedHashRocketStyle: table
EnforcedColonStyle: table
EnforcedLastArgumentHashStyle: always_inspect
Layout/EmptyLinesAroundClassBody:
Description: "Keeps track of empty lines around class bodies."
Enabled: false
Layout/EmptyLinesAroundMethodBody:
Description: "Keeps track of empty lines around method bodies."
Enabled: false
Layout/EmptyLinesAroundBlockBody:
Description: "Keeps track of empty lines around block bodies."
Enabled: false
Layout/EmptyLinesAroundModuleBody:
Description: "Keeps track of empty lines around module bodies."
Enabled: false
Layout/ExtraSpacing:
Description: 'Do not use unnecessary spacing.'
Enabled: true
Exclude:
- 'config/routes/**/*'
- 'db/migrate/20120101000001_create_base.rb'
- 'db/migrate/20120101000010_create_ticket.rb'
Style/MultilineBlockChain:
Description: 'Avoid multi-line chains of blocks.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#single-line-blocks'
Enabled: false
Metrics/ClassLength:
Description: 'Avoid classes longer than 100 lines of code.'
Enabled: false
Metrics/MethodLength:
Description: 'Avoid methods longer than 10 lines of code.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#short-methods'
Enabled: false
Style/BlockComments:
Description: 'Do not use block comments.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-block-comments'
Enabled: false
Style/PerlBackrefs:
Description: 'Avoid Perl-style regex back references.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-perl-regexp-last-matchers'
Enabled: false
Rails/ApplicationRecord:
Exclude:
- 'app/models/application_model.rb'
- 'app/models/active_job_lock.rb'
Rails/BulkChangeTable:
Description: 'Check whether alter queries are combinable.'
Enabled: false
Rails/FindEach:
Description: 'Prefer all.find_each over all.find.'
Enabled: false
Rails/HasAndBelongsToMany:
Description: 'Prefer has_many :through to has_and_belongs_to_many.'
# StyleGuide: 'https://github.com/bbatsov/rails-style-guide#has-many-through'
Enabled: false
Rails/MatchRoute:
Description: >-
Don't use `match` to define any routes unless there is a need to map multiple request types
among [:get, :post, :patch, :put, :delete] to a single action using the `:via` option.
StyleGuide: 'https://rails.rubystyle.guide/#no-match-routes'
Enabled: false
Rails/SkipsModelValidations:
Description: >-
Use methods that skips model validations with caution.
See reference for more information.
Reference: 'http://guides.rubyonrails.org/active_record_validations.html#skipping-validations'
Enabled: true
Exclude:
- test/**/*
- "**/*_spec.rb"
- "**/*_examples.rb"
Style/ClassAndModuleChildren:
Description: 'Checks style of children classes and modules.'
Enabled: false
Naming/FileName:
Description: 'Use snake_case for source file names.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#snake-case-files'
Enabled: true
Exclude:
- 'script/websocket-server.rb'
Naming/VariableNumber:
Description: 'Use the configured style when numbering variables.'
Enabled: false
Naming/MethodParameterName:
Description: >-
Checks for method parameter names that contain capital letters,
end in numbers, or do not meet a minimal length.
Enabled: true
AllowedNames: e, id, _, ip, to
Lint/BooleanSymbol:
Description: 'Check for `:true` and `:false` symbols.'
Enabled: true
Exclude:
- "db/seeds/object_manager_attributes.rb"
- "spec/requests/integration/object_manager_attributes_spec.rb"
- "test/integration/object_manager_test.rb"
Lint/InterpolationCheck:
Description: 'Raise warning for interpolation in single q strs'
Enabled: true
Exclude:
- "test/unit/email_process_auto_response_test.rb"
- "test/unit/email_process_bounce_delivery_permanent_failed_test.rb"
- "test/unit/email_process_bounce_follow_test.rb"
- "test/unit/notification_factory_renderer_test.rb"
- "test/unit/notification_factory_template_test.rb"
- "test/unit/ticket_trigger_test.rb"
- "test/unit/ticket_trigger_recursive_disabled_test.rb"
Style/StringConcatenation:
Description: 'Checks for places where string concatenation can be replaced with string interpolation.'
StyleGuide: '#string-interpolation'
Enabled: true
Exclude:
- "config/routes/**/*"
Style/RegexpLiteral:
Description: 'This cop enforces using // or %r around regular expressions.'
EnforcedStyle: percent_r
Style/RedundantBegin:
Description: 'This cop checks for redundant `begin` blocks.'
Enabled: false
Rails/EnvironmentVariableAccess:
Description: 'This cop looks for direct access to environment variables through the ENV variable within the application code.'
Enabled: true
AllowReads: true
Rails/Output:
Exclude:
- "lib/tasks/**/*"
Include:
- "**/*_spec.rb"
# RSpec tests
Style/NumericPredicate:
Description: >-
Checks for the use of predicate- or comparison methods for
numeric comparisons.
StyleGuide: '#predicate-methods'
# This will change to a new method call which isn't guaranteed to be on the
# object. Switching these methods has to be done with knowledge of the types
# of the variables which rubocop doesn't have.
AutoCorrect: false
Enabled: true
Exclude:
- "**/*_spec.rb"
Lint/AmbiguousBlockAssociation:
Description: >-
Checks for ambiguous block association with method when param
passed without parentheses.
StyleGuide: '#syntax'
Enabled: true
Exclude:
- "spec/support/*.rb"
- "**/*_spec.rb"
- "**/*_examples.rb"
Layout/MultilineMethodCallIndentation:
Description: >-
Checks the indentation of the method name part in method calls
that span more than one line.
EnforcedStyle: indented
Include:
- "**/*_spec.rb"
Lint/UnusedMethodArgument:
AllowUnusedKeywordArguments: true
RSpec/NestedGroups:
Max: 6
RSpec/Rails/AvoidSetupHook:
Exclude:
- "test/**/*"
Zammad/PreferNegatedIfOverUnless:
Exclude:
- 'bin/rspec'
Zammad/ExistsDateTimePrecision:
Include:
- "db/migrate/*.rb"
- "**/db/addon/**/*.rb"
Zammad/ExistsResetColumnInformation:
Include:
- "db/migrate/*.rb"
- "**/db/addon/**/*.rb"
Exclude:
- 'db/migrate/201*_*.rb'
- 'db/migrate/2020*_*.rb'
Zammad/ExistsDbStrategy:
Include:
- "spec/**/*.rb"
Exclude:
- spec/support/capybara/common_actions.rb

View File

@@ -0,0 +1,12 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
require_relative 'cop/zammad/exists_condition'
require_relative 'cop/zammad/exists_date_time_precision'
require_relative 'cop/zammad/exists_db_strategy'
require_relative 'cop/zammad/exists_reset_column_information'
require_relative 'cop/zammad/correct_migration_timestamp'
require_relative 'cop/zammad/have_no_over_not_to'
require_relative 'cop/zammad/no_to_sym_on_string'
require_relative 'cop/zammad/prefer_negated_if_over_unless'
require_relative 'cop/zammad/update_copyright'
require_relative 'cop/zammad/forbid_rand'

683
.rubocop/todo.rspec.yml Normal file
View File

@@ -0,0 +1,683 @@
RSpec/AnyInstance:
Exclude:
- 'spec/lib/import/otrs/article_spec.rb'
- 'spec/lib/import/otrs/customer_spec.rb'
- 'spec/lib/import/otrs/customer_user_spec.rb'
- 'spec/lib/import/otrs/priority_spec.rb'
- 'spec/lib/import/otrs/queue_spec.rb'
- 'spec/lib/import/otrs/state_spec.rb'
- 'spec/lib/import/otrs/ticket_spec.rb'
- 'spec/lib/import/otrs/user_spec.rb'
- 'spec/models/import_job_spec.rb'
RSpec/BeforeAfterAll:
Exclude:
- 'spec/spec_helper.rb'
- 'spec/rails_helper.rb'
- 'spec/support/**/*.rb'
- 'spec/lib/sequencer/unit/import/zendesk/ticket/comment/attachment/request_spec.rb'
- 'spec/lib/sequencer/unit/import/zendesk/ticket/comment/source_based_spec.rb'
- 'spec/models/translation_spec.rb'
RSpec/ContextWording:
Exclude:
- 'spec/db/migrate/active_job_lock_cleanup_job_scheduler_spec.rb'
- 'spec/db/migrate/check_for_object_attributes_spec.rb'
- 'spec/db/migrate/forget_insecure_sessions_spec.rb'
- 'spec/db/migrate/issue_1219_zhtw_locale_typo_spec.rb'
- 'spec/db/migrate/issue_1905_exchange_login_from_remote_id_spec.rb'
- 'spec/db/migrate/issue_1977_remove_invalid_user_foreign_keys_spec.rb'
- 'spec/db/migrate/issue_2333_object_country_already_exists_spec.rb'
- 'spec/db/migrate/issue_2345_es_attachment_max_size_in_mb_setting_lower_default_spec.rb'
- 'spec/db/migrate/issue_2368_add_indices_to_histories_and_tickets_spec.rb'
- 'spec/db/migrate/issue_2541_fix_notification_email_without_body_spec.rb'
- 'spec/jobs/communicate_twitter_job_spec.rb'
- 'spec/jobs/concerns/has_active_job_lock_spec.rb'
- 'spec/jobs/concerns/has_collection_update_spec.rb'
- 'spec/jobs/concerns/has_ticket_create_screen_impact_spec.rb'
- 'spec/jobs/imap_authentication_migration_cleanup_job_spec.rb'
- 'spec/jobs/ticket_article_communicate_email_job_spec.rb'
- 'spec/lib/application_handle_info_spec.rb'
- 'spec/lib/core_ext/string_spec.rb'
- 'spec/lib/external_credential/google_spec.rb'
- 'spec/lib/external_credential/microsoft365_spec.rb'
- 'spec/lib/html_sanitizer_spec.rb'
- 'spec/lib/import/exchange/folder_spec.rb'
- 'spec/lib/import/helper_spec.rb'
- 'spec/lib/import/ldap_spec.rb'
- 'spec/lib/import/otrs/article_spec.rb'
- 'spec/lib/import/otrs/customer_spec.rb'
- 'spec/lib/import/otrs/customer_user_spec.rb'
- 'spec/lib/import/otrs/priority_spec.rb'
- 'spec/lib/import/otrs/queue_spec.rb'
- 'spec/lib/import/otrs/requester_spec.rb'
- 'spec/lib/import/otrs/state_factory_spec.rb'
- 'spec/lib/import/otrs/state_spec.rb'
- 'spec/lib/import/otrs/ticket_spec.rb'
- 'spec/lib/import/otrs/user_spec.rb'
- 'spec/lib/ldap/group_spec.rb'
- 'spec/lib/ldap/user_spec.rb'
- 'spec/lib/ldap_spec.rb'
- 'spec/lib/notification_factory/mailer_spec.rb'
- 'spec/lib/notification_factory/slack_spec.rb'
- 'spec/lib/notification_factory/template_spec.rb'
- 'spec/lib/notification_factory_spec.rb'
- 'spec/lib/password_hash_spec.rb'
- 'spec/lib/search_index_backend_spec.rb'
- 'spec/lib/secure_mailing/smime_spec.rb'
- 'spec/lib/sequencer/sequence/import/ldap/users_spec.rb'
- 'spec/lib/sequencer/unit/import/common/model/associations/assign_spec.rb'
- 'spec/lib/sequencer/unit/import/common/model/save_spec.rb'
- 'spec/lib/sequencer/unit/import/common/object_attribute/sanitized_name_spec.rb'
- 'spec/lib/sequencer/unit/import/ldap/user/attributes/role_ids/unassigned_spec.rb'
- 'spec/lib/sequencer/unit/import/zendesk/sub_sequence/base_examples.rb'
- 'spec/lib/sequencer/unit/import/zendesk/ticket/comment/source_based_spec.rb'
- 'spec/lib/sessions/backend/base_spec.rb'
- 'spec/lib/sessions/backend/ticket_overview_list_spec.rb'
- 'spec/lib/signature_detection_spec.rb'
- 'spec/lib/stats/ticket_waiting_time_spec.rb'
- 'spec/lib/zammad/application/initializer/session_store_spec.rb'
- 'spec/models/application_model/can_assets_examples.rb'
- 'spec/models/application_model/can_latest_change_examples.rb'
- 'spec/models/application_model/can_lookup_examples.rb'
- 'spec/models/application_model/checks_import_examples.rb'
- 'spec/models/calendar_spec.rb'
- 'spec/models/channel/driver/twitter_spec.rb'
- 'spec/models/channel/email_parser_spec.rb'
- 'spec/models/channel/filter/follow_up_merged_spec.rb'
- 'spec/models/channel/filter/follow_up_possible_check_spec.rb'
- 'spec/models/channel/filter/match/email_regex_spec.rb'
- 'spec/models/channel/filter/out_of_office_check_spec.rb'
- 'spec/models/concerns/can_csv_import_examples.rb'
- 'spec/models/concerns/checks_kb_client_notification_examples.rb'
- 'spec/models/concerns/has_collection_update_examples.rb'
- 'spec/models/concerns/has_group_relation_definition_examples.rb'
- 'spec/models/concerns/has_groups_examples.rb'
- 'spec/models/concerns/has_groups_permissions_examples.rb'
- 'spec/models/concerns/has_history_examples.rb'
- 'spec/models/concerns/has_roles_examples.rb'
- 'spec/models/concerns/has_search_index_backend_examples.rb'
- 'spec/models/concerns/has_ticket_create_screen_impact_examples.rb'
- 'spec/models/cti/caller_id_spec.rb'
- 'spec/models/cti/driver/base_spec.rb'
- 'spec/models/cti/log_spec.rb'
- 'spec/models/email_address_spec.rb'
- 'spec/models/history_spec.rb'
- 'spec/models/job_spec.rb'
- 'spec/models/knowledge_base/answer/translation/search_with_attachment_spec.rb'
- 'spec/models/knowledge_base/category_spec.rb'
- 'spec/models/knowledge_base/menu_item_spec.rb'
- 'spec/models/knowledge_base_spec.rb'
- 'spec/models/object_lookup_spec.rb'
- 'spec/models/object_manager/attribute/validation/future_past_spec.rb'
- 'spec/models/object_manager/attribute/validation/min_max_spec.rb'
- 'spec/models/object_manager/attribute/validation/required_spec.rb'
- 'spec/models/object_manager/attribute/validation_spec.rb'
- 'spec/models/object_manager/attribute_spec.rb'
- 'spec/models/observer/ticket/article/communicate_twitter_spec.rb'
- 'spec/models/overview_spec.rb'
- 'spec/models/role_spec.rb'
- 'spec/models/scheduler_spec.rb'
- 'spec/models/smime_certificate_spec.rb'
- 'spec/models/store/file_spec.rb'
- 'spec/models/store/provider/file_spec.rb'
- 'spec/models/store_spec.rb'
- 'spec/models/tag/item_spec.rb'
- 'spec/models/tag_spec.rb'
- 'spec/models/taskbar_spec.rb'
- 'spec/models/ticket/article_spec.rb'
- 'spec/models/ticket/number/date_spec.rb'
- 'spec/models/ticket/number/increment_spec.rb'
- 'spec/models/ticket/state_spec.rb'
- 'spec/models/ticket_spec.rb'
- 'spec/models/token_spec.rb'
- 'spec/models/translation_spec.rb'
- 'spec/models/trigger/sms_spec.rb'
- 'spec/models/trigger_spec.rb'
- 'spec/models/type_lookup_spec.rb'
- 'spec/models/user/has_ticket_create_screen_impact_examples.rb'
- 'spec/models/user_device_spec.rb'
- 'spec/models/user_spec.rb'
- 'spec/policies/ticket_policy_spec.rb'
- 'spec/policies/user_policy_spec.rb'
- 'spec/requests/cors_preflight_check_spec.rb'
- 'spec/requests/error_spec.rb'
- 'spec/requests/external_credentials_spec.rb'
- 'spec/requests/integration/check_mk_spec.rb'
- 'spec/requests/integration/gmail_spec.rb'
- 'spec/requests/integration/microsoft365_spec.rb'
- 'spec/requests/integration/object_manager_attributes_spec.rb'
- 'spec/requests/integration/smime_spec.rb'
- 'spec/requests/knowledge_base/attachments_spec.rb'
- 'spec/requests/knowledge_base/search_with_details_spec.rb'
- 'spec/requests/session_spec.rb'
- 'spec/requests/tag_spec.rb'
- 'spec/requests/ticket/article_spec.rb'
- 'spec/requests/ticket_spec.rb'
- 'spec/requests/time_accounting_spec.rb'
- 'spec/requests/upload_cache_spec.rb'
- 'spec/requests/user/permission_spec.rb'
- 'spec/requests/user_spec.rb'
- 'spec/system/**/*'
RSpec/ExampleLength:
Exclude:
- 'spec/db/migrate/20171023000001_fixed_store_upgrade_ror_45_spec.rb'
- 'spec/db/migrate/check_for_object_attributes_spec.rb'
- 'spec/db/migrate/issue_1660_fix_tree_select_configurations_spec.rb'
- 'spec/db/migrate/issue_1905_exchange_login_from_remote_id_spec.rb'
- 'spec/db/migrate/issue_1977_remove_invalid_user_foreign_keys_spec.rb'
- 'spec/db/migrate/issue_2867_footer_header_public_link_spec.rb'
- 'spec/db/migrate/object_manager_attribute_date_remove_future_past_spec.rb'
- 'spec/db/migrate/rename_locale_on_users_spec.rb'
- 'spec/jobs/communicate_twitter_job_spec.rb'
- 'spec/jobs/concerns/has_active_job_lock_spec.rb'
- 'spec/jobs/migrate_ldap_samaccountname_to_uid_job_spec.rb'
- 'spec/jobs/ticket_user_ticket_counter_job_spec.rb'
- 'spec/jobs/user_device_log_job_spec.rb'
- 'spec/lib/auto_wizard_spec.rb'
- 'spec/lib/core_ext/string_spec.rb'
- 'spec/lib/external_credential/google_spec.rb'
- 'spec/lib/external_credential/microsoft365_spec.rb'
- 'spec/lib/external_sync_spec.rb'
- 'spec/lib/import/import_job_backend_examples.rb'
- 'spec/lib/import/ldap_spec.rb'
- 'spec/lib/import/otrs/dynamic_field/checkbox_spec.rb'
- 'spec/lib/import/otrs/dynamic_field/date_spec.rb'
- 'spec/lib/import/otrs/dynamic_field/date_time_spec.rb'
- 'spec/lib/import/otrs/dynamic_field/dropdown_spec.rb'
- 'spec/lib/import/otrs/dynamic_field/multiselect_spec.rb'
- 'spec/lib/import/otrs/dynamic_field/text_area_spec.rb'
- 'spec/lib/import/otrs/dynamic_field/text_spec.rb'
- 'spec/lib/import/otrs/history/article_spec.rb'
- 'spec/lib/import/otrs/history/move_spec.rb'
- 'spec/lib/import/otrs/history/new_ticket_spec.rb'
- 'spec/lib/import/otrs/history/priority_update_spec.rb'
- 'spec/lib/import/otrs/history/state_update_spec.rb'
- 'spec/lib/import/otrs/priority_factory_spec.rb'
- 'spec/lib/import/otrs/state_factory_spec.rb'
- 'spec/lib/import/otrs/sys_config_factory_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/checkbox_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/date_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/decimal_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/dropdown_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/integer_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/regexp_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/tagger_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/text_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/textarea_spec.rb'
- 'spec/lib/ldap/group_spec.rb'
- 'spec/lib/ldap/user_spec.rb'
- 'spec/lib/ldap_spec.rb'
- 'spec/lib/notification_factory/mailer_spec.rb'
- 'spec/lib/notification_factory/renderer_spec.rb'
- 'spec/lib/notification_factory/slack_spec.rb'
- 'spec/lib/report/ticket_generic_time_spec.rb'
- 'spec/lib/search_index_backend_spec.rb'
- 'spec/lib/secure_mailing/smime_spec.rb'
- 'spec/lib/sequencer/sequence/import/ldap/users_spec.rb'
- 'spec/lib/sequencer/unit/common/attribute_mapper_spec.rb'
- 'spec/lib/sequencer/unit/import/common/mapping/flat_keys_spec.rb'
- 'spec/lib/sequencer/unit/import/common/model/attributes/remote_id_spec.rb'
- 'spec/lib/sequencer/unit/import/common/model/lookup/external_sync_spec.rb'
- 'spec/lib/sequencer/unit/import/common/remote_id/case_sensitive_spec.rb'
- 'spec/lib/sequencer/unit/import/ldap/user/attributes/role_ids/signup_spec.rb'
- 'spec/lib/sequencer/unit/import/ldap/user/lookup/attributes_spec.rb'
- 'spec/lib/sequencer/unit/import/ldap/user/mapping_spec.rb'
- 'spec/lib/sequencer/unit/import/zendesk/sub_sequence/base_examples.rb'
- 'spec/lib/sessions/backend/ticket_overview_list_spec.rb'
- 'spec/lib/sessions/event/chat_session_start_spec.rb'
- 'spec/lib/sessions/event/chat_transfer_spec.rb'
- 'spec/lib/signature_detection_spec.rb'
- 'spec/lib/upload_cache_spec.rb'
- 'spec/lib/user_info_spec.rb'
- 'spec/models/application_model/can_lookup_examples.rb'
- 'spec/models/calendar_spec.rb'
- 'spec/models/channel/driver/imap_spec.rb'
- 'spec/models/channel/driver/sms/twilio_spec.rb'
- 'spec/models/channel/driver/twitter_spec.rb'
- 'spec/models/channel/email_parser_spec.rb'
- 'spec/models/channel/filter/follow_up_merged_spec.rb'
- 'spec/models/concerns/has_collection_update_examples.rb'
- 'spec/models/concerns/has_group_relation_definition_examples.rb'
- 'spec/models/concerns/has_groups_examples.rb'
- 'spec/models/concerns/has_roles_examples.rb'
- 'spec/models/concerns/has_tags_examples.rb'
- 'spec/models/cti/caller_id_spec.rb'
- 'spec/models/cti/log_spec.rb'
- 'spec/models/history_spec.rb'
- 'spec/models/import_job_spec.rb'
- 'spec/models/object_manager/attribute_spec.rb'
- 'spec/models/overview_spec.rb'
- 'spec/models/recent_view_spec.rb'
- 'spec/models/role_group_spec.rb'
- 'spec/models/role_spec.rb'
- 'spec/models/scheduler_spec.rb'
- 'spec/models/sla/has_escalation_calculation_impact_examples.rb'
- 'spec/models/store/file_spec.rb'
- 'spec/models/store/provider/file_spec.rb'
- 'spec/models/store_spec.rb'
- 'spec/models/taskbar_spec.rb'
- 'spec/models/ticket/article_spec.rb'
- 'spec/models/ticket/article/has_ticket_contact_attributes_impact_examples.rb'
- 'spec/models/ticket/escalation_examples.rb'
- 'spec/models/ticket/overviews_spec.rb'
- 'spec/models/ticket_spec.rb'
- 'spec/models/translation_spec.rb'
- 'spec/models/trigger_spec.rb'
- 'spec/models/user_spec.rb'
- 'spec/requests/admin/knowledge_base/public_menu_spec.rb'
- 'spec/requests/api_auth_from_spec.rb'
- 'spec/requests/api_auth_spec.rb'
- 'spec/requests/calendar_spec.rb'
- 'spec/requests/external_credentials_spec.rb'
- 'spec/requests/form_spec.rb'
- 'spec/requests/integration/check_mk_spec.rb'
- 'spec/requests/integration/cti_spec.rb'
- 'spec/requests/integration/idoit_spec.rb'
- 'spec/requests/integration/github_spec.rb'
- 'spec/requests/integration/gitlab_spec.rb'
- 'spec/requests/integration/monitoring_spec.rb'
- 'spec/requests/integration/object_manager_attributes_spec.rb'
- 'spec/requests/integration/placetel_spec.rb'
- 'spec/requests/integration/sipgate_spec.rb'
- 'spec/requests/integration/smime_spec.rb'
- 'spec/requests/integration/telegram_spec.rb'
- 'spec/requests/integration/twilio_sms_spec.rb'
- 'spec/requests/integration/message_bird_sms_spec.rb'
- 'spec/requests/integration/user_device_spec.rb'
- 'spec/requests/knowledge_base/answer_attachments_cloning_spec.rb'
- 'spec/requests/links_spec.rb'
- 'spec/requests/long_polling_spec.rb'
- 'spec/requests/o_auth_spec.rb'
- 'spec/requests/organization_spec.rb'
- 'spec/requests/overview_spec.rb'
- 'spec/requests/package_spec.rb'
- 'spec/requests/report_spec.rb'
- 'spec/requests/search_spec.rb'
- 'spec/requests/settings_spec.rb'
- 'spec/requests/sla_spec.rb'
- 'spec/requests/taskbar_spec.rb'
- 'spec/requests/text_module_spec.rb'
- 'spec/requests/ticket/article_attachments_spec.rb'
- 'spec/requests/ticket/article_spec.rb'
- 'spec/requests/ticket/escalation_spec.rb'
- 'spec/requests/ticket_spec.rb'
- 'spec/requests/time_accounting_spec.rb'
- 'spec/requests/user/organization_spec.rb'
- 'spec/requests/user/permission_spec.rb'
- 'spec/requests/user_spec.rb'
- 'spec/scripts/websocket_server_spec.rb'
- 'spec/system/**/*'
RSpec/ExpectActual:
Exclude:
- 'spec/routing/**/*'
- 'spec/requests/integration/monitoring_spec.rb'
- 'spec/requests/integration/object_manager_attributes_spec.rb'
- 'spec/requests/integration/twilio_sms_spec.rb'
- 'spec/requests/integration/message_bird_sms_spec.rb'
- 'spec/requests/integration/user_device_spec.rb'
- 'spec/requests/organization_spec.rb'
- 'spec/requests/ticket/article_attachments_spec.rb'
- 'spec/requests/user/organization_spec.rb'
- 'spec/requests/user_spec.rb'
RSpec/ExpectInHook:
Exclude:
- 'spec/models/calendar_spec.rb'
- 'spec/models/concerns/has_search_index_backend_examples.rb'
- 'spec/models/ticket/article_spec.rb'
RSpec/FilePath:
Exclude:
- 'spec/db/migrate/20171023000001_fixed_store_upgrade_ror_45_spec.rb'
- 'spec/db/migrate/issue_*_spec.rb'
- 'spec/jobs/issue_*_spec.rb'
- 'spec/lib/import/base_factory_spec.rb'
- 'spec/models/knowledge_base/answer/translation/search_with_attachment_spec.rb'
- 'spec/models/trigger/sms_spec.rb'
RSpec/InstanceVariable:
Exclude:
- 'spec/lib/notification_factory/renderer_spec.rb'
- 'spec/models/import_job_spec.rb'
- 'spec/models/scheduler_spec.rb'
- 'spec/requests/api_auth_from_spec.rb'
- 'spec/requests/integration/monitoring_spec.rb'
- 'spec/requests/integration/sipgate_spec.rb'
- 'spec/requests/organization_spec.rb'
- 'spec/requests/report_spec.rb'
- 'spec/requests/text_module_spec.rb'
- 'spec/requests/ticket/article_attachments_spec.rb'
- 'spec/requests/user_spec.rb'
RSpec/LetSetup:
Exclude:
- 'spec/jobs/communicate_twitter_job_spec.rb'
- 'spec/jobs/ticket_online_notification_seen_job_spec.rb'
- 'spec/lib/external_credential/google_spec.rb'
- 'spec/lib/external_credential/microsoft365_spec.rb'
- 'spec/lib/secure_mailing/smime_spec.rb'
- 'spec/lib/sessions/backend/ticket_overview_list_spec.rb'
- 'spec/models/channel/driver/twitter_spec.rb'
- 'spec/models/channel/email_parser_spec.rb'
- 'spec/models/cti/caller_id_spec.rb'
- 'spec/models/cti/driver/base_spec.rb'
- 'spec/models/cti/log_spec.rb'
- 'spec/models/organization_spec.rb'
- 'spec/models/role_group_spec.rb'
- 'spec/models/tag_spec.rb'
- 'spec/models/ticket/article_spec.rb'
- 'spec/models/trigger_spec.rb'
- 'spec/models/user_group_spec.rb'
- 'spec/requests/external_credentials_spec.rb'
- 'spec/requests/integration/cti_spec.rb'
- 'spec/requests/integration/idoit_spec.rb'
- 'spec/requests/integration/monitoring_spec.rb'
- 'spec/requests/integration/placetel_spec.rb'
- 'spec/requests/integration/sipgate_spec.rb'
- 'spec/requests/search_spec.rb'
- 'spec/requests/ticket/escalation_spec.rb'
- 'spec/requests/time_accounting_spec.rb'
- 'spec/requests/user/organization_spec.rb'
- 'spec/requests/user_spec.rb'
RSpec/MessageSpies:
Exclude:
- 'spec/db/migrate/check_for_object_attributes_spec.rb'
- 'spec/db/migrate/issue_1660_fix_tree_select_configurations_spec.rb'
- 'spec/db/migrate/issue_1905_exchange_login_from_remote_id_spec.rb'
- 'spec/db/migrate/object_manager_attribute_date_remove_future_past_spec.rb'
- 'spec/jobs/app_version_restart_job_spec.rb'
- 'spec/jobs/search_index_job_spec.rb'
- 'spec/jobs/sla_ticket_rebuild_escalation_job_spec.rb'
- 'spec/lib/import/base_factory_examples.rb'
- 'spec/lib/import/helper_spec.rb'
- 'spec/lib/import/otrs/article/attachment_factory_spec.rb'
- 'spec/lib/import/otrs/article_customer_spec.rb'
- 'spec/lib/import/otrs/article_spec.rb'
- 'spec/lib/import/otrs/customer_spec.rb'
- 'spec/lib/import/otrs/customer_user_spec.rb'
- 'spec/lib/import/otrs/dynamic_field_examples.rb'
- 'spec/lib/import/otrs/dynamic_field_factory_spec.rb'
- 'spec/lib/import/otrs/dynamic_field_spec.rb'
- 'spec/lib/import/otrs/history_examples.rb'
- 'spec/lib/import/otrs/priority_factory_spec.rb'
- 'spec/lib/import/otrs/priority_spec.rb'
- 'spec/lib/import/otrs/queue_spec.rb'
- 'spec/lib/import/otrs/requester_spec.rb'
- 'spec/lib/import/otrs/state_factory_spec.rb'
- 'spec/lib/import/otrs/state_spec.rb'
- 'spec/lib/import/otrs/ticket_spec.rb'
- 'spec/lib/import/otrs/user_factory_spec.rb'
- 'spec/lib/import/otrs/user_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/base_examples.rb'
- 'spec/lib/import/zendesk/object_attribute/checkbox_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/date_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/decimal_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/dropdown_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/integer_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/regexp_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/tagger_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/text_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/textarea_spec.rb'
- 'spec/lib/ldap/group_spec.rb'
- 'spec/lib/ldap/guid_spec.rb'
- 'spec/lib/ldap/user_spec.rb'
- 'spec/lib/ldap_spec.rb'
- 'spec/lib/sequencer/sequence/import/ldap/users_spec.rb'
- 'spec/lib/sequencer/unit/common/attribute_mapper_spec.rb'
- 'spec/lib/sequencer/unit/import/common/mapping/flat_keys_spec.rb'
- 'spec/lib/sequencer/unit/import/common/model/attributes/remote_id_spec.rb'
- 'spec/lib/sequencer/unit/import/common/model/reset_primary_key_sequence_spec.rb'
- 'spec/lib/sequencer/unit/import/common/model/save_spec.rb'
- 'spec/lib/sequencer/unit/import/common/object_attribute/sanitized_name_spec.rb'
- 'spec/lib/sequencer/unit/import/zendesk/sub_sequence/base_examples.rb'
- 'spec/lib/sequencer/unit/import/zendesk/ticket/comment/attachment/request_spec.rb'
- 'spec/models/application_model/can_lookup_examples.rb'
- 'spec/models/channel/driver/twitter_spec.rb'
- 'spec/models/channel/email_parser_spec.rb'
- 'spec/models/concerns/has_groups_examples.rb'
- 'spec/models/concerns/has_history_examples.rb'
- 'spec/models/concerns/has_roles_examples.rb'
- 'spec/models/concerns/has_tags_examples.rb'
- 'spec/models/cti/caller_id_spec.rb'
- 'spec/models/cti/log_spec.rb'
- 'spec/models/import_job_spec.rb'
- 'spec/models/object_manager/attribute/validation/backend_spec.rb'
- 'spec/models/object_manager/attribute/validation_spec.rb'
- 'spec/models/observer/ticket/article/communicate_twitter_spec.rb'
- 'spec/models/scheduler_spec.rb'
- 'spec/models/ticket/number_spec.rb'
- 'spec/models/ticket_spec.rb'
- 'spec/models/user_spec.rb'
- 'spec/system/system/translations_spec.rb'
RSpec/MultipleExpectations:
Exclude:
- 'spec/db/migrate/20171023000001_fixed_store_upgrade_ror_45_spec.rb'
- 'spec/db/migrate/check_for_object_attributes_spec.rb'
- 'spec/db/migrate/issue_1660_fix_tree_select_configurations_spec.rb'
- 'spec/db/migrate/issue_1905_exchange_login_from_remote_id_spec.rb'
- 'spec/db/migrate/object_manager_attribute_date_remove_future_past_spec.rb'
- 'spec/db/migrate/rename_locale_on_users_spec.rb'
- 'spec/jobs/communicate_twitter_job_spec.rb'
- 'spec/jobs/concerns/has_active_job_lock_spec.rb'
- 'spec/jobs/migrate_ldap_samaccountname_to_uid_job_spec.rb'
- 'spec/jobs/search_index_job_spec.rb'
- 'spec/jobs/ticket_user_ticket_counter_job_spec.rb'
- 'spec/lib/cache_spec.rb'
- 'spec/lib/core_ext/string_spec.rb'
- 'spec/lib/email_address_validation_spec.rb'
- 'spec/lib/external_sync_spec.rb'
- 'spec/lib/html_sanitizer_spec.rb'
- 'spec/lib/import/base_factory_examples.rb'
- 'spec/lib/import/helper_spec.rb'
- 'spec/lib/import/import_job_backend_examples.rb'
- 'spec/lib/import/ldap_spec.rb'
- 'spec/lib/import/otrs/article_customer_spec.rb'
- 'spec/lib/import/otrs/customer_spec.rb'
- 'spec/lib/import/otrs/dynamic_field_spec.rb'
- 'spec/lib/import/otrs/history_examples.rb'
- 'spec/lib/import/otrs/priority_factory_spec.rb'
- 'spec/lib/import/otrs/requester_spec.rb'
- 'spec/lib/import/otrs/state_factory_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/base_examples.rb'
- 'spec/lib/import/zendesk/object_attribute/checkbox_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/date_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/decimal_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/dropdown_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/integer_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/regexp_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/tagger_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/text_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/textarea_spec.rb'
- 'spec/lib/ldap/group_spec.rb'
- 'spec/lib/ldap/guid_spec.rb'
- 'spec/lib/ldap/user_spec.rb'
- 'spec/lib/ldap_spec.rb'
- 'spec/lib/notification_factory/mailer_spec.rb'
- 'spec/lib/password_hash_spec.rb'
- 'spec/lib/secure_mailing/smime_spec.rb'
- 'spec/lib/sequencer/sequence/import/ldap/users_spec.rb'
- 'spec/lib/sequencer/unit/common/attribute_mapper_spec.rb'
- 'spec/lib/sequencer/unit/import/common/mapping/flat_keys_spec.rb'
- 'spec/lib/sequencer/unit/import/common/model/associations/assign_spec.rb'
- 'spec/lib/sequencer/unit/import/common/model/attributes/remote_id_spec.rb'
- 'spec/lib/sequencer/unit/import/common/object_attribute/sanitized_name_spec.rb'
- 'spec/lib/sequencer/unit/import/ldap/user/attributes/role_ids/unassigned_spec.rb'
- 'spec/lib/sequencer/unit/import/ldap/users/lost/deactivate_spec.rb'
- 'spec/lib/sequencer/unit/import/zendesk/sub_sequence/base_examples.rb'
- 'spec/lib/sessions/event/chat_session_start_spec.rb'
- 'spec/lib/sessions/event/chat_transfer_spec.rb'
- 'spec/lib/upload_cache_spec.rb'
- 'spec/lib/user_info_spec.rb'
- 'spec/models/application_model/can_lookup_examples.rb'
- 'spec/models/calendar_spec.rb'
- 'spec/models/channel/driver/sms/twilio_spec.rb'
- 'spec/models/channel/driver/twitter_spec.rb'
- 'spec/models/channel/email_parser_spec.rb'
- 'spec/models/concerns/has_groups_examples.rb'
- 'spec/models/concerns/has_history_examples.rb'
- 'spec/models/cti/caller_id_spec.rb'
- 'spec/models/cti/log_spec.rb'
- 'spec/models/history_spec.rb'
- 'spec/models/import_job_spec.rb'
- 'spec/models/job_spec.rb'
- 'spec/models/object_lookup_spec.rb'
- 'spec/models/object_manager/attribute/validation/backend_spec.rb'
- 'spec/models/object_manager/attribute/validation_spec.rb'
- 'spec/models/object_manager/attribute_spec.rb'
- 'spec/models/overview_spec.rb'
- 'spec/models/scheduler_spec.rb'
- 'spec/models/session_spec.rb'
- 'spec/models/sla/has_escalation_calculation_impact_examples.rb'
- 'spec/models/smime_certificate_spec.rb'
- 'spec/models/store/file_spec.rb'
- 'spec/models/store/provider/file_spec.rb'
- 'spec/models/store_spec.rb'
- 'spec/models/taskbar_spec.rb'
- 'spec/models/ticket/article_spec.rb'
- 'spec/models/ticket/article/has_ticket_contact_attributes_impact_examples.rb'
- 'spec/models/ticket/escalation_examples.rb'
- 'spec/models/ticket/number/increment_spec.rb'
- 'spec/models/ticket/number_spec.rb'
- 'spec/models/ticket/overviews_spec.rb'
- 'spec/models/ticket_spec.rb'
- 'spec/models/translation_spec.rb'
- 'spec/models/trigger_spec.rb'
- 'spec/models/type_lookup_spec.rb'
- 'spec/models/user_spec.rb'
- 'spec/requests/api_auth_from_spec.rb'
- 'spec/requests/api_auth_spec.rb'
- 'spec/requests/calendar_spec.rb'
- 'spec/requests/error_spec.rb'
- 'spec/requests/external_credentials_spec.rb'
- 'spec/requests/form_spec.rb'
- 'spec/requests/integration/check_mk_spec.rb'
- 'spec/requests/integration/cti_spec.rb'
- 'spec/requests/integration/idoit_spec.rb'
- 'spec/requests/integration/github_spec.rb'
- 'spec/requests/integration/gitlab_spec.rb'
- 'spec/requests/integration/monitoring_spec.rb'
- 'spec/requests/integration/object_manager_attributes_spec.rb'
- 'spec/requests/integration/placetel_spec.rb'
- 'spec/requests/integration/sipgate_spec.rb'
- 'spec/requests/integration/smime_spec.rb'
- 'spec/requests/integration/telegram_spec.rb'
- 'spec/requests/integration/twilio_sms_spec.rb'
- 'spec/requests/integration/message_bird_sms_spec.rb'
- 'spec/requests/integration/user_device_spec.rb'
- 'spec/requests/links_spec.rb'
- 'spec/requests/long_polling_spec.rb'
- 'spec/requests/o_auth_spec.rb'
- 'spec/requests/organization_spec.rb'
- 'spec/requests/overview_spec.rb'
- 'spec/requests/package_spec.rb'
- 'spec/requests/report_spec.rb'
- 'spec/requests/search_spec.rb'
- 'spec/requests/session_spec.rb'
- 'spec/requests/settings_spec.rb'
- 'spec/requests/sla_spec.rb'
- 'spec/requests/tag_spec.rb'
- 'spec/requests/taskbar_spec.rb'
- 'spec/requests/text_module_spec.rb'
- 'spec/requests/ticket/article_attachments_spec.rb'
- 'spec/requests/ticket/article_spec.rb'
- 'spec/requests/ticket/escalation_spec.rb'
- 'spec/requests/ticket_spec.rb'
- 'spec/requests/time_accounting_spec.rb'
- 'spec/requests/user/organization_spec.rb'
- 'spec/requests/user/permission_spec.rb'
- 'spec/requests/user_spec.rb'
- 'spec/system/**/*'
RSpec/NamedSubject:
Exclude:
- 'spec/db/migrate/issue_2019_fix_double_domain_links_in_trigger_emails_spec.rb'
- 'spec/db/migrate/issue_2541_fix_notification_email_without_body_spec.rb'
- 'spec/lib/core_ext/string_spec.rb'
- 'spec/lib/import/exchange/folder_spec.rb'
- 'spec/lib/ldap/user_spec.rb'
- 'spec/lib/sequencer/unit/import/ldap/user/attributes/role_ids/unassigned_spec.rb'
- 'spec/lib/sessions/backend/activity_stream_spec.rb'
- 'spec/lib/upload_cache_spec.rb'
- 'spec/models/channel/filter/match/email_regex_spec.rb'
- 'spec/models/http_log_spec.rb'
- 'spec/models/object_manager/attribute/validation/backend_spec.rb'
- 'spec/models/object_manager/attribute/validation/future_past_spec.rb'
- 'spec/models/object_manager/attribute/validation/required_spec.rb'
- 'spec/models/object_manager/attribute/validation_spec.rb'
- 'spec/models/object_manager/attribute_spec.rb'
RSpec/NestedGroups:
Exclude:
- 'app/models/user/avatar.rb'
- 'spec/lib/secure_mailing/smime_spec.rb'
- 'spec/models/channel/driver/twitter_spec.rb'
- 'spec/models/channel/email_parser_spec.rb'
- 'spec/models/job_spec.rb'
- 'spec/models/store/file_spec.rb'
- 'spec/models/store/provider/file_spec.rb'
- 'spec/models/store_spec.rb'
- 'spec/models/token_spec.rb'
- 'spec/models/trigger_spec.rb'
- 'spec/models/user/has_ticket_create_screen_impact_examples.rb'
- 'spec/models/user_spec.rb'
- 'spec/requests/links_spec.rb'
- 'spec/system/ticket/create_spec.rb'
RSpec/RepeatedDescription:
Exclude:
- 'spec/models/translation_spec.rb'
- 'spec/requests/form_spec.rb'
- 'spec/requests/ticket_spec.rb'
RSpec/ScatteredLet:
Exclude:
- 'spec/models/job_spec.rb'
- 'spec/models/ticket_spec.rb'
- 'spec/requests/integration/twitter_webhook_spec.rb'
RSpec/ScatteredSetup:
Exclude:
- 'spec/models/ticket_spec.rb'
- 'spec/models/user_spec.rb'
- 'spec/requests/upload_cache_spec.rb'
RSpec/SubjectStub:
Exclude:
- 'spec/lib/import/exchange/folder_spec.rb'
- 'spec/models/concerns/has_groups_examples.rb'
- 'spec/models/concerns/has_roles_examples.rb'
- 'spec/models/job_spec.rb'
- 'spec/models/object_manager/attribute/validation/future_past_spec.rb'
- 'spec/models/object_manager/attribute/validation/required_spec.rb'
RSpec/VerifiedDoubles:
Exclude:
- 'spec/db/migrate/issue_2460_fix_corrupted_twitter_ids_spec.rb'
- 'spec/jobs/communicate_twitter_job_spec.rb'
- 'spec/lib/external_sync_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/base_examples.rb'
- 'spec/lib/import/zendesk/object_attribute/checkbox_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/date_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/decimal_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/dropdown_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/integer_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/regexp_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/tagger_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/text_spec.rb'
- 'spec/lib/import/zendesk/object_attribute/textarea_spec.rb'
- 'spec/lib/ldap_spec.rb'
- 'spec/lib/sequencer/sequence/import/ldap/users_spec.rb'
- 'spec/lib/sequencer/unit/import/zendesk/sub_sequence/base_examples.rb'
- 'spec/lib/sequencer/unit/import/zendesk/ticket/comment/attachment/request_spec.rb'
- 'spec/lib/sequencer/unit/import/zendesk/ticket/comment/source_based_spec.rb'
- 'spec/models/ticket/number_spec.rb'
RSpec/MultipleMemoizedHelpers:
Description: Checks if example groups contain too many `let` and `subject` calls.
Enabled: false
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/MultipleMemoizedHelpers

951
.rubocop/todo.yml Normal file
View File

@@ -0,0 +1,951 @@
Style/Documentation:
Enabled: false
Lint/MissingCopEnableDirective:
Exclude:
- 'lib/import/factory.rb'
- 'lib/import/helper.rb'
- 'lib/import/otrs/async.rb'
- 'lib/import/otrs/history.rb'
- 'lib/import/otrs/priority_factory.rb'
- 'lib/import/otrs/state_factory.rb'
- 'lib/import/otrs/user_factory.rb'
- 'lib/import/transaction_factory.rb'
Metrics/AbcSize:
Exclude:
- 'app/controllers/activity_stream_controller.rb'
- 'app/controllers/application_controller/authenticates.rb'
- 'app/controllers/application_controller/handles_devices.rb'
- 'app/controllers/application_controller/handles_errors.rb'
- 'app/controllers/application_controller/has_user.rb'
- 'app/controllers/application_controller/logs_http_access.rb'
- 'app/controllers/application_controller/prevents_csrf.rb'
- 'app/controllers/application_controller/renders_models.rb'
- 'app/controllers/applications_controller.rb'
- 'app/controllers/attachments_controller.rb'
- 'app/controllers/channels_email_controller.rb'
- 'app/controllers/channels_google_controller.rb'
- 'app/controllers/channels_microsoft365_controller.rb'
- 'app/controllers/channels_sms_controller.rb'
- 'app/controllers/channels_telegram_controller.rb'
- 'app/controllers/channels_twitter_controller.rb'
- 'app/controllers/concerns/checks_user_attributes_by_current_user_permission.rb'
- 'app/controllers/concerns/creates_ticket_articles.rb'
- 'app/controllers/concerns/ticket_stats.rb'
- 'app/controllers/first_steps_controller.rb'
- 'app/controllers/form_controller.rb'
- 'app/controllers/getting_started_controller.rb'
- 'app/controllers/import_otrs_controller.rb'
- 'app/controllers/import_zendesk_controller.rb'
- 'app/controllers/import_freshdesk_controller.rb'
- 'app/controllers/integration/check_mk_controller.rb'
- 'app/controllers/integration/cti_controller.rb'
- 'app/controllers/integration/idoit_controller.rb'
- 'app/controllers/integration/placetel_controller.rb'
- 'app/controllers/integration/sipgate_controller.rb'
- 'app/controllers/integration/smime_controller.rb'
- 'app/controllers/knowledge_base/answers_controller.rb'
- 'app/controllers/knowledge_base/categories_controller.rb'
- 'app/controllers/knowledge_base/manage_controller.rb'
- 'app/controllers/knowledge_base/public/answers_controller.rb'
- 'app/controllers/knowledge_base/public/categories_controller.rb'
- 'app/controllers/knowledge_base/search_controller.rb'
- 'app/controllers/knowledge_bases_controller.rb'
- 'app/controllers/links_controller.rb'
- 'app/controllers/long_polling_controller.rb'
- 'app/controllers/monitoring_controller.rb'
- 'app/controllers/object_manager_attributes_controller.rb'
- 'app/controllers/online_notifications_controller.rb'
- 'app/controllers/organizations_controller.rb'
- 'app/controllers/recent_view_controller.rb'
- 'app/controllers/reports_controller.rb'
- 'app/controllers/search_controller.rb'
- 'app/controllers/sessions_controller.rb'
- 'app/controllers/settings_controller.rb'
- 'app/controllers/text_modules_controller.rb'
- 'app/controllers/ticket_articles_controller.rb'
- 'app/controllers/ticket_overviews_controller.rb'
- 'app/controllers/tickets_controller.rb'
- 'app/controllers/time_accountings_controller.rb'
- 'app/controllers/upload_caches_controller.rb'
- 'app/controllers/user_access_token_controller.rb'
- 'app/controllers/user_devices_controller.rb'
- 'app/controllers/users_controller.rb'
- 'app/helpers/knowledge_base_rich_text_helper.rb'
- 'app/jobs/collection_update_job.rb'
- 'app/jobs/communicate_facebook_job.rb'
- 'app/jobs/communicate_sms_job.rb'
- 'app/jobs/communicate_telegram_job.rb'
- 'app/jobs/communicate_twitter_job.rb'
- 'app/jobs/concerns/has_active_job_lock.rb'
- 'app/jobs/imap_authentication_migration_cleanup_job.rb'
- 'app/jobs/migrate_ldap_samaccountname_to_uid_job.rb'
- 'app/jobs/ticket_article_communicate_email_job.rb'
- 'app/jobs/ticket_user_ticket_counter_job.rb'
- 'app/models/activity_stream.rb'
- 'app/models/activity_stream/assets.rb'
- 'app/models/application_model/can_activity_stream_log.rb'
- 'app/models/application_model/can_assets.rb'
- 'app/models/application_model/can_associations.rb'
- 'app/models/application_model/can_cleanup_param.rb'
- 'app/models/application_model/can_creates_and_updates.rb'
- 'app/models/application_model/can_lookup.rb'
- 'app/models/application_model/can_lookup_search_index_attributes.rb'
- 'app/models/application_model/checks_attribute_values_and_length.rb'
- 'app/models/application_model/checks_user_columns_fillup.rb'
- 'app/models/application_model/has_attachments.rb'
- 'app/models/application_model/has_cache.rb'
- 'app/models/authorization.rb'
- 'app/models/avatar.rb'
- 'app/models/calendar.rb'
- 'app/models/channel.rb'
- 'app/models/channel/assets.rb'
- 'app/models/channel/driver/facebook.rb'
- 'app/models/channel/driver/imap.rb'
- 'app/models/channel/driver/pop3.rb'
- 'app/models/channel/driver/sendmail.rb'
- 'app/models/channel/driver/smtp.rb'
- 'app/models/channel/driver/twitter.rb'
- 'app/models/channel/email_build.rb'
- 'app/models/channel/email_parser.rb'
- 'app/models/channel/filter/auto_response_check.rb'
- 'app/models/channel/filter/bounce_delivery_permanent_failed.rb'
- 'app/models/channel/filter/bounce_follow_up_check.rb'
- 'app/models/channel/filter/database.rb'
- 'app/models/channel/filter/follow_up_check.rb'
- 'app/models/channel/filter/follow_up_merged.rb'
- 'app/models/channel/filter/follow_up_possible_check.rb'
- 'app/models/channel/filter/identify_sender.rb'
- 'app/models/channel/filter/monitoring_base.rb'
- 'app/models/channel/filter/out_of_office_check.rb'
- 'app/models/channel/filter/own_notification_loop_detection.rb'
- 'app/models/channel/filter/reply_to_based_sender.rb'
- 'app/models/channel/filter/sender_is_system_address.rb'
- 'app/models/chat.rb'
- 'app/models/chat/session.rb'
- 'app/models/chat/session/assets.rb'
- 'app/models/chat/session/search.rb'
- 'app/models/concerns/can_clone_attachments.rb'
- 'app/models/concerns/can_csv_import.rb'
- 'app/models/concerns/checks_condition_validation.rb'
- 'app/models/concerns/has_group_relation_definition.rb'
- 'app/models/concerns/has_groups.rb'
- 'app/models/concerns/has_history.rb'
- 'app/models/concerns/has_rich_text.rb'
- 'app/models/concerns/has_search_index_backend.rb'
- 'app/models/concerns/has_search_sortable.rb'
- 'app/models/cti/caller_id.rb'
- 'app/models/cti/driver/base.rb'
- 'app/models/cti/driver/placetel.rb'
- 'app/models/cti/driver/sipgate_io.rb'
- 'app/models/cti/log.rb'
- 'app/models/external_sync.rb'
- 'app/models/history.rb'
- 'app/models/import_job.rb'
- 'app/models/job.rb'
- 'app/models/job/assets.rb'
- 'app/models/karma/activity_log.rb'
- 'app/models/knowledge_base.rb'
- 'app/models/knowledge_base/answer.rb'
- 'app/models/knowledge_base/category.rb'
- 'app/models/knowledge_base/search.rb'
- 'app/models/link.rb'
- 'app/models/object_manager/attribute.rb'
- 'app/models/online_notification.rb'
- 'app/models/online_notification/assets.rb'
- 'app/models/organization/assets.rb'
- 'app/models/organization/search.rb'
- 'app/models/overview.rb'
- 'app/models/overview/assets.rb'
- 'app/models/package.rb'
- 'app/models/package/migration.rb'
- 'app/models/postmaster_filter.rb'
- 'app/models/recent_view.rb'
- 'app/models/recent_view/assets.rb'
- 'app/models/report.rb'
- 'app/models/role.rb'
- 'app/models/role/assets.rb'
- 'app/models/scheduler.rb'
- 'app/models/setting.rb'
- 'app/models/sla/assets.rb'
- 'app/models/smime_certificate.rb'
- 'app/models/store.rb'
- 'app/models/store/file.rb'
- 'app/models/store/provider/file.rb'
- 'app/models/tag.rb'
- 'app/models/tag/item.rb'
- 'app/models/taskbar.rb'
- 'app/models/text_module.rb'
- 'app/models/ticket.rb'
- 'app/models/ticket/article.rb'
- 'app/models/ticket/article/adds_metadata_email.rb'
- 'app/models/ticket/article/adds_metadata_general.rb'
- 'app/models/ticket/article/adds_metadata_origin_by_id.rb'
- 'app/models/ticket/article/assets.rb'
- 'app/models/ticket/article/enqueue_communicate_email_job.rb'
- 'app/models/ticket/article/enqueue_communicate_facebook_job.rb'
- 'app/models/ticket/article/enqueue_communicate_sms_job.rb'
- 'app/models/ticket/article/enqueue_communicate_telegram_job.rb'
- 'app/models/ticket/article/enqueue_communicate_twitter_job.rb'
- 'app/models/ticket/article/has_ticket_contact_attributes_impact.rb'
- 'app/models/ticket/article/resets_ticket_state.rb'
- 'app/models/ticket/assets.rb'
- 'app/models/ticket/escalation.rb'
- 'app/models/ticket/number/date.rb'
- 'app/models/ticket/number/increment.rb'
- 'app/models/ticket/overviews.rb'
- 'app/models/ticket/priority.rb'
- 'app/models/ticket/screen_options.rb'
- 'app/models/ticket/search.rb'
- 'app/models/ticket/search_index.rb'
- 'app/models/ticket/sets_last_owner_update_time.rb'
- 'app/models/ticket/state.rb'
- 'app/models/ticket/subject.rb'
- 'app/models/ticket/touches_associations.rb'
- 'app/models/token.rb'
- 'app/models/transaction.rb'
- 'app/models/transaction/clearbit_enrichment.rb'
- 'app/models/transaction/cti_caller_id_detection.rb'
- 'app/models/transaction/karma.rb'
- 'app/models/transaction/notification.rb'
- 'app/models/transaction/signature_detection.rb'
- 'app/models/transaction/slack.rb'
- 'app/models/translation.rb'
- 'app/models/trigger/assets.rb'
- 'app/models/user.rb'
- 'app/models/user/assets.rb'
- 'app/models/user/performs_geo_lookup.rb'
- 'app/models/user/search.rb'
- 'app/models/user/search_index.rb'
- 'app/models/user_device.rb'
- 'app/policies/controllers/external_credentials_controller_policy.rb'
- 'app/policies/ticket/article_policy.rb'
- 'app/policies/ticket_policy.rb'
- 'db/migrate/20120101000001_create_base.rb'
- 'db/migrate/20120101000010_create_ticket.rb'
- 'db/migrate/20150979000001_update_timestamps.rb'
- 'db/migrate/20160217000001_object_manager_update_user.rb'
- 'db/migrate/20161101131409_create_doorkeeper_tables.rb'
- 'db/migrate/20161117000001_job_unable_to_create_issue_432.rb'
- 'db/migrate/20161117000002_ticket_number_generator_issue_427.rb'
- 'db/migrate/20170113000001_object_manager_attribute_create_middle.rb'
- 'db/migrate/20170113000002_slack_group_config_issue_587.rb'
- 'db/migrate/20170116000001_add_ticket_time_accounting_373.rb'
- 'db/migrate/20170116000002_fixed_typos_622.rb'
- 'db/migrate/20170207081400_ticket_state_priority_defaults.rb'
- 'db/migrate/20170403000001_fixed_admin_user_permission_920.rb'
- 'db/migrate/20170419000001_ldap_support.rb'
- 'db/migrate/20170419000002_overview_role_ids.rb'
- 'db/migrate/20170516000001_trigger_recipient_update.rb'
- 'db/migrate/20170608151442_enhanced_permissions.rb'
- 'db/migrate/20170713000002_ticket_zoom_setting2.rb'
- 'db/migrate/20170905140038_cti_log_preferences_migration.rb'
- 'db/migrate/20170910000002_out_of_office2.rb'
- 'db/migrate/20171023000001_fixed_store_upgrade_ror_45.rb'
- 'db/migrate/20180226085743_issue_1660_fix_tree_select_configurations.rb'
- 'db/migrate/20180410000001_cleanup_user_preferences_notification_sound2.rb'
- 'db/migrate/20180426134922_issue_1977_remove_invalid_user_foreign_keys.rb'
- 'db/migrate/20180716060129_issue_2019_fix_double_domain_links_in_trigger_emails.rb'
- 'db/migrate/20180806000001_fixed_twitter_ticket_article_preferences7.rb'
- 'db/migrate/20180809000001_cti_generic_api.rb'
- 'db/migrate/20181017000001_cti_generic_api2.rb'
- 'db/migrate/20181123000000_issue_2368_add_indices_to_histories_and_tickets.rb'
- 'db/migrate/20190408000001_issue_2541_fix_notification_email_without_body.rb'
- 'db/migrate/20190409000001_setting_ticket_overview_priority_icon_and_color.rb'
- 'db/migrate/20190531180304_initialize_knowledge_base.rb'
- 'db/migrate/20190724000001_rename_reserved_words.rb'
- 'db/migrate/20191107050249_issue_2460_fix_corrupted_twitter_ids.rb'
- 'db/migrate/20200121000001_smime_support.rb'
- 'lib/auto_wizard.rb'
- 'lib/calendar_subscriptions.rb'
- 'lib/calendar_subscriptions/tickets.rb'
- 'lib/core_ext/active_record/connection_adapters/postgresql/schema_statements.rb'
- 'lib/core_ext/string.rb'
- 'lib/email_helper/probe.rb'
- 'lib/email_helper/verify.rb'
- 'lib/enrichment/clearbit/user.rb'
- 'lib/excel_sheet.rb'
- 'lib/excel_sheet/ticket.rb'
- 'lib/external_credential/facebook.rb'
- 'lib/external_credential/google.rb'
- 'lib/external_credential/microsoft365.rb'
- 'lib/external_credential/twitter.rb'
- 'lib/facebook.rb'
- 'lib/fill_db.rb'
- 'lib/html_sanitizer.rb'
- 'lib/idoit.rb'
- 'lib/import/exchange/item_attributes.rb'
- 'lib/import/otrs.rb'
- 'lib/import/otrs/article/attachment_factory.rb'
- 'lib/import/otrs/async.rb'
- 'lib/import/otrs/requester.rb'
- 'lib/import/otrs/state_factory.rb'
- 'lib/import/otrs/user.rb'
- 'lib/knowledge_base/menu_item_update_action.rb'
- 'lib/ldap/group.rb'
- 'lib/ldap/user.rb'
- 'lib/models.rb'
- 'lib/notification_factory/mailer.rb'
- 'lib/notification_factory/renderer.rb'
- 'lib/notification_factory/slack.rb'
- 'lib/push_messages.rb'
- 'lib/report/article_by_type_sender.rb'
- 'lib/report/base.rb'
- 'lib/report/ticket_backlog.rb'
- 'lib/report/ticket_first_solution.rb'
- 'lib/report/ticket_generic_time.rb'
- 'lib/report/ticket_moved.rb'
- 'lib/report/ticket_reopened.rb'
- 'lib/search_index_backend.rb'
- 'lib/secure_mailing/smime/incoming.rb'
- 'lib/secure_mailing/smime/outgoing.rb'
- 'lib/secure_mailing/smime/retry.rb'
- 'lib/sequencer.rb'
- 'lib/sequencer/state.rb'
- 'lib/sequencer/unit/exchange/folders/id_path_map.rb'
- 'lib/sequencer/unit/import/common/model/associations/extract.rb'
- 'lib/sequencer/unit/import/exchange/attribute_examples.rb'
- 'lib/sequencer/unit/import/exchange/folder_contacts/sub_sequence.rb'
- 'lib/sequencer/unit/import/ldap/user/attributes/role_ids/unassigned.rb'
- 'lib/sequencer/unit/import/ldap/users/sub_sequence.rb'
- 'lib/sequencer/unit/import/zendesk/sub_sequence/base.rb'
- 'lib/sequencer/unit/import/zendesk/ticket/comment/mapping.rb'
- 'lib/sequencer/unit/import/zendesk/ticket/mapping.rb'
- 'lib/sequencer/unit/import/zendesk/user/mapping.rb'
- 'lib/sequencer/units/attributes.rb'
- 'lib/service/geo_calendar/zammad.rb'
- 'lib/service/geo_ip/zammad.rb'
- 'lib/service/geo_location/gmaps.rb'
- 'lib/session_helper/collection_base.rb'
- 'lib/session_helper/collection_ticket.rb'
- 'lib/sessions.rb'
- 'lib/sessions/backend/activity_stream.rb'
- 'lib/sessions/backend/base.rb'
- 'lib/sessions/backend/ticket_overview_list.rb'
- 'lib/sessions/client.rb'
- 'lib/sessions/event.rb'
- 'lib/sessions/event/broadcast.rb'
- 'lib/sessions/event/chat_session_close.rb'
- 'lib/sessions/event/chat_session_init.rb'
- 'lib/sessions/event/chat_session_start.rb'
- 'lib/sessions/event/chat_session_update.rb'
- 'lib/sessions/event/chat_status_customer.rb'
- 'lib/sessions/event/login.rb'
- 'lib/sessions/event/spool.rb'
- 'lib/sessions/node.rb'
- 'lib/signature_detection.rb'
- 'lib/static_assets.rb'
- 'lib/stats.rb'
- 'lib/stats/ticket_channel_distribution.rb'
- 'lib/stats/ticket_escalation.rb'
- 'lib/stats/ticket_in_process.rb'
- 'lib/stats/ticket_load_measure.rb'
- 'lib/stats/ticket_reopen.rb'
- 'lib/stats/ticket_response_time.rb'
- 'lib/stats/ticket_waiting_time.rb'
- 'lib/tasks/search_index_es.rake'
- 'lib/telegram.rb'
- 'lib/transaction_dispatcher.rb'
- 'lib/twitter_sync.rb'
- 'lib/user_agent.rb'
- 'lib/websocket_server.rb'
- 'spec/**/*'
- 'test/**/*'
Metrics/BlockLength:
Exclude:
- 'Gemfile'
- 'app/controllers/application_controller/authenticates.rb'
- 'app/controllers/reports_controller.rb'
- 'app/controllers/time_accountings_controller.rb'
- 'app/models/application_model/can_assets.rb'
- 'app/models/application_model/can_associations.rb'
- 'app/models/application_model/can_cleanup_param.rb'
- 'app/models/application_model/can_creates_and_updates.rb'
- 'app/models/application_model/can_lookup.rb'
- 'app/models/channel.rb'
- 'app/models/channel/driver/imap.rb'
- 'app/models/channel/driver/pop3.rb'
- 'app/models/channel/email_parser.rb'
- 'app/models/channel/filter/bounce_delivery_permanent_failed.rb'
- 'app/models/channel/filter/database.rb'
- 'app/models/channel/filter/identify_sender.rb'
- 'app/models/chat/session/search.rb'
- 'app/models/concerns/can_be_published.rb'
- 'app/models/concerns/can_clone_attachments.rb'
- 'app/models/concerns/can_csv_import.rb'
- 'app/models/concerns/has_groups.rb'
- 'app/models/concerns/has_history.rb'
- 'app/models/concerns/has_rich_text.rb'
- 'app/models/concerns/has_search_sortable.rb'
- 'app/models/job.rb'
- 'app/models/karma/activity_log.rb'
- 'app/models/knowledge_base/search.rb'
- 'app/models/object_manager/attribute.rb'
- 'app/models/observer/transaction.rb'
- 'app/models/organization/search.rb'
- 'app/models/package.rb'
- 'app/models/package/migration.rb'
- 'app/models/scheduler.rb'
- 'app/models/ticket.rb'
- 'app/models/ticket/overviews.rb'
- 'app/models/ticket/search.rb'
- 'app/models/ticket/search_index.rb'
- 'app/models/transaction/notification.rb'
- 'app/models/transaction/slack.rb'
- 'app/models/user/search.rb'
- 'config/environments/development.rb'
- 'config/initializers/omniauth.rb'
- 'config/routes/knowledge_base.rb'
- 'config/routes/user.rb'
- 'config/routes/test.rb'
- 'config/routes/ticket.rb'
- 'db/migrate/20120101000001_create_base.rb'
- 'db/migrate/20120101000010_create_ticket.rb'
- 'db/migrate/20180806000001_fixed_twitter_ticket_article_preferences7.rb'
- 'lib/can_be_published/state_machine.rb'
- 'lib/core_ext/string.rb'
- 'lib/email_helper.rb'
- 'lib/facebook.rb'
- 'lib/fill_db.rb'
- 'lib/html_sanitizer.rb'
- 'lib/notification_factory/renderer.rb'
- 'lib/report/ticket_first_solution.rb'
- 'lib/report/ticket_generic_time.rb'
- 'lib/report/ticket_moved.rb'
- 'lib/report/ticket_reopened.rb'
- 'lib/search_index_backend.rb'
- 'lib/sessions.rb'
- 'lib/sessions/backend/ticket_overview_list.rb'
- 'lib/sessions/client.rb'
- 'lib/tasks/search_index_es.rake'
- 'lib/tasks/zammad/ci/service/puma/start.rake'
- 'lib/transaction_dispatcher.rb'
- 'lib/twitter_sync.rb'
- 'script/websocket-server.rb'
- 'spec/**/*'
- 'test/**/*'
Metrics/BlockNesting:
Exclude:
- 'app/controllers/import_otrs_controller.rb'
- 'app/controllers/time_accountings_controller.rb'
- 'app/models/avatar.rb'
- 'app/models/channel/filter/identify_sender.rb'
- 'app/models/chat.rb'
- 'app/models/concerns/has_history.rb'
- 'app/models/object_manager/attribute.rb'
- 'app/models/ticket.rb'
- 'app/models/transaction/karma.rb'
- 'app/models/transaction/notification.rb'
- 'app/models/transaction/slack.rb'
- 'lib/html_sanitizer.rb'
- 'lib/notification_factory/mailer.rb'
- 'lib/search_index_backend.rb'
- 'lib/twitter_sync.rb'
- 'test/browser_test_helper.rb'
Metrics/CyclomaticComplexity:
Exclude:
- 'app/models/ticket.rb'
- 'app/controllers/application_controller/authenticates.rb'
- 'app/controllers/application_controller/handles_devices.rb'
- 'app/controllers/application_controller/handles_errors.rb'
- 'app/controllers/application_controller/logs_http_access.rb'
- 'app/controllers/application_controller/renders_models.rb'
- 'app/controllers/channels_email_controller.rb'
- 'app/controllers/channels_google_controller.rb'
- 'app/controllers/channels_microsoft365_controller.rb'
- 'app/controllers/channels_twitter_controller.rb'
- 'app/controllers/concerns/checks_user_attributes_by_current_user_permission.rb'
- 'app/controllers/concerns/creates_ticket_articles.rb'
- 'app/controllers/first_steps_controller.rb'
- 'app/controllers/form_controller.rb'
- 'app/controllers/getting_started_controller.rb'
- 'app/controllers/import_otrs_controller.rb'
- 'app/controllers/import_zendesk_controller.rb'
- 'app/controllers/import_freshdesk_controller.rb'
- 'app/controllers/integration/check_mk_controller.rb'
- 'app/controllers/integration/smime_controller.rb'
- 'app/controllers/knowledge_base/public/categories_controller.rb'
- 'app/controllers/knowledge_base/search_controller.rb'
- 'app/controllers/long_polling_controller.rb'
- 'app/controllers/monitoring_controller.rb'
- 'app/controllers/object_manager_attributes_controller.rb'
- 'app/controllers/organizations_controller.rb'
- 'app/controllers/reports_controller.rb'
- 'app/controllers/search_controller.rb'
- 'app/controllers/sessions_controller.rb'
- 'app/controllers/ticket_articles_controller.rb'
- 'app/controllers/tickets_controller.rb'
- 'app/controllers/time_accountings_controller.rb'
- 'app/controllers/user_access_token_controller.rb'
- 'app/controllers/users_controller.rb'
- 'app/jobs/collection_update_job.rb'
- 'app/jobs/communicate_facebook_job.rb'
- 'app/jobs/communicate_sms_job.rb'
- 'app/jobs/communicate_telegram_job.rb'
- 'app/jobs/communicate_twitter_job.rb'
- 'app/jobs/ticket_article_communicate_email_job.rb'
- 'app/jobs/ticket_create_screen_job.rb'
- 'app/jobs/ticket_user_ticket_counter_job.rb'
- 'app/models/activity_stream/assets.rb'
- 'app/models/application_model/can_assets.rb'
- 'app/models/application_model/can_associations.rb'
- 'app/models/application_model/can_cleanup_param.rb'
- 'app/models/application_model/can_creates_and_updates.rb'
- 'app/models/application_model/can_lookup_search_index_attributes.rb'
- 'app/models/application_model/checks_attribute_values_and_length.rb'
- 'app/models/application_model/checks_user_columns_fillup.rb'
- 'app/models/application_model/has_attachments.rb'
- 'app/models/authorization.rb'
- 'app/models/avatar.rb'
- 'app/models/calendar.rb'
- 'app/models/channel.rb'
- 'app/models/channel/assets.rb'
- 'app/models/channel/driver/facebook.rb'
- 'app/models/channel/driver/imap.rb'
- 'app/models/channel/driver/pop3.rb'
- 'app/models/channel/driver/smtp.rb'
- 'app/models/channel/driver/twitter.rb'
- 'app/models/channel/email_build.rb'
- 'app/models/channel/email_parser.rb'
- 'app/models/channel/filter/auto_response_check.rb'
- 'app/models/channel/filter/bounce_delivery_permanent_failed.rb'
- 'app/models/channel/filter/bounce_follow_up_check.rb'
- 'app/models/channel/filter/database.rb'
- 'app/models/channel/filter/follow_up_check.rb'
- 'app/models/channel/filter/follow_up_merged.rb'
- 'app/models/channel/filter/identify_sender.rb'
- 'app/models/channel/filter/monitoring_base.rb'
- 'app/models/channel/filter/out_of_office_check.rb'
- 'app/models/channel/filter/sender_is_system_address.rb'
- 'app/models/chat.rb'
- 'app/models/chat/session.rb'
- 'app/models/chat/session/assets.rb'
- 'app/models/concerns/can_clone_attachments.rb'
- 'app/models/concerns/can_csv_import.rb'
- 'app/models/concerns/has_history.rb'
- 'app/models/concerns/has_rich_text.rb'
- 'app/models/concerns/has_search_index_backend.rb'
- 'app/models/concerns/has_search_sortable.rb'
- 'app/models/cti/caller_id.rb'
- 'app/models/cti/driver/base.rb'
- 'app/models/cti/driver/placetel.rb'
- 'app/models/cti/driver/sipgate_io.rb'
- 'app/models/cti/log.rb'
- 'app/models/external_sync.rb'
- 'app/models/history.rb'
- 'app/models/job.rb'
- 'app/models/job/assets.rb'
- 'app/models/karma/activity_log.rb'
- 'app/models/knowledge_base.rb'
- 'app/models/object_manager/attribute.rb'
- 'app/models/observer/transaction.rb'
- 'app/models/online_notification/assets.rb'
- 'app/models/organization/assets.rb'
- 'app/models/organization/search.rb'
- 'app/models/overview/assets.rb'
- 'app/models/package.rb'
- 'app/models/package/migration.rb'
- 'app/models/recent_view/assets.rb'
- 'app/models/role.rb'
- 'app/models/role/assets.rb'
- 'app/models/scheduler.rb'
- 'app/models/setting.rb'
- 'app/models/sla/assets.rb'
- 'app/models/store.rb'
- 'app/models/taskbar.rb'
- 'app/models/ticket/article.rb'
- 'app/models/ticket/article/adds_metadata_email.rb'
- 'app/models/ticket/article/adds_metadata_general.rb'
- 'app/models/ticket/article/adds_metadata_origin_by_id.rb'
- 'app/models/ticket/article/assets.rb'
- 'app/models/ticket/article/enqueue_communicate_email_job.rb'
- 'app/models/ticket/article/enqueue_communicate_facebook_job.rb'
- 'app/models/ticket/article/enqueue_communicate_sms_job.rb'
- 'app/models/ticket/article/enqueue_communicate_twitter_job.rb'
- 'app/models/ticket/article/has_ticket_contact_attributes_impact.rb'
- 'app/models/ticket/article/resets_ticket_state.rb'
- 'app/models/ticket/assets.rb'
- 'app/models/ticket/escalation.rb'
- 'app/models/ticket/number/date.rb'
- 'app/models/ticket/overviews.rb'
- 'app/models/ticket/screen_options.rb'
- 'app/models/ticket/search.rb'
- 'app/models/ticket/search_index.rb'
- 'app/models/ticket/sets_last_owner_update_time.rb'
- 'app/models/ticket/state.rb'
- 'app/models/ticket/touches_associations.rb'
- 'app/models/token.rb'
- 'app/models/transaction/clearbit_enrichment.rb'
- 'app/models/transaction/karma.rb'
- 'app/models/transaction/notification.rb'
- 'app/models/transaction/signature_detection.rb'
- 'app/models/transaction/slack.rb'
- 'app/models/translation.rb'
- 'app/models/trigger/assets.rb'
- 'app/models/user.rb'
- 'app/models/user/assets.rb'
- 'app/models/user/performs_geo_lookup.rb'
- 'app/models/user/search.rb'
- 'app/models/user/search_index.rb'
- 'app/models/user_device.rb'
- 'app/policies/ticket/article_policy.rb'
- 'db/migrate/20170207081400_ticket_state_priority_defaults.rb'
- 'db/migrate/20170403000001_fixed_admin_user_permission_920.rb'
- 'db/migrate/20170516000001_trigger_recipient_update.rb'
- 'db/migrate/20170905140038_cti_log_preferences_migration.rb'
- 'db/migrate/20171023000001_fixed_store_upgrade_ror_45.rb'
- 'db/migrate/20180410000001_cleanup_user_preferences_notification_sound2.rb'
- 'db/migrate/20180502015927_issue_1219_zhtw_locale_typo.rb'
- 'db/migrate/20180806000001_fixed_twitter_ticket_article_preferences7.rb'
- 'db/migrate/20181017000001_cti_generic_api2.rb'
- 'db/migrate/20190408000001_issue_2541_fix_notification_email_without_body.rb'
- 'db/migrate/20190724000001_rename_reserved_words.rb'
- 'lib/auto_wizard.rb'
- 'lib/core_ext/string.rb'
- 'lib/email_helper/probe.rb'
- 'lib/enrichment/clearbit/user.rb'
- 'lib/excel_sheet.rb'
- 'lib/external_credential/facebook.rb'
- 'lib/external_credential/google.rb'
- 'lib/external_credential/microsoft365.rb'
- 'lib/external_credential/twitter.rb'
- 'lib/facebook.rb'
- 'lib/fill_db.rb'
- 'lib/html_sanitizer.rb'
- 'lib/import/otrs/requester.rb'
- 'lib/import/otrs/user.rb'
- 'lib/ldap/group.rb'
- 'lib/ldap/user.rb'
- 'lib/models.rb'
- 'lib/notification_factory/mailer.rb'
- 'lib/notification_factory/renderer.rb'
- 'lib/report/article_by_type_sender.rb'
- 'lib/report/base.rb'
- 'lib/report/ticket_first_solution.rb'
- 'lib/report/ticket_generic_time.rb'
- 'lib/report/ticket_moved.rb'
- 'lib/report/ticket_reopened.rb'
- 'lib/search_index_backend.rb'
- 'lib/secure_mailing/smime/incoming.rb'
- 'lib/sequencer/unit/import/zendesk/sub_sequence/base.rb'
- 'lib/service/geo_ip/zammad.rb'
- 'lib/session_helper/collection_base.rb'
- 'lib/session_helper/collection_ticket.rb'
- 'lib/sessions.rb'
- 'lib/sessions/backend/activity_stream.rb'
- 'lib/sessions/backend/ticket_overview_list.rb'
- 'lib/sessions/client.rb'
- 'lib/sessions/event/broadcast.rb'
- 'lib/sessions/event/chat_session_close.rb'
- 'lib/sessions/event/chat_session_update.rb'
- 'lib/sessions/event/chat_status_customer.rb'
- 'lib/sessions/node.rb'
- 'lib/signature_detection.rb'
- 'lib/stats.rb'
- 'lib/stats/ticket_channel_distribution.rb'
- 'lib/stats/ticket_load_measure.rb'
- 'lib/stats/ticket_reopen.rb'
- 'lib/stats/ticket_waiting_time.rb'
- 'lib/tasks/search_index_es.rake'
- 'lib/telegram.rb'
- 'lib/transaction_dispatcher.rb'
- 'lib/twitter_sync.rb'
- 'lib/user_agent.rb'
- 'lib/websocket_server.rb'
- 'test/**/*'
Metrics/ModuleLength:
Exclude:
- 'app/controllers/application_controller/authenticates.rb'
- 'app/controllers/application_controller/renders_models.rb'
- 'app/models/application_model/can_assets.rb'
- 'app/models/application_model/can_associations.rb'
- 'app/models/application_model/can_creates_and_updates.rb'
- 'app/models/channel/email_build.rb'
- 'app/models/channel/filter/identify_sender.rb'
- 'app/models/concerns/can_be_published.rb'
- 'app/models/concerns/can_csv_import.rb'
- 'app/models/concerns/has_groups.rb'
- 'app/models/concerns/has_history.rb'
- 'app/models/concerns/has_rich_text.rb'
- 'app/models/concerns/has_search_index_backend.rb'
- 'app/models/concerns/has_search_sortable.rb'
- 'app/models/ticket/escalation.rb'
- 'app/models/ticket/overviews.rb'
- 'app/models/ticket/screen_options.rb'
- 'app/models/ticket/search.rb'
- 'app/models/user/search.rb'
- 'lib/auto_wizard.rb'
- 'lib/fill_db.rb'
- 'lib/import/otrs.rb'
- 'lib/sessions.rb'
- 'lib/sessions/node.rb'
- 'lib/signature_detection.rb'
- 'lib/static_assets.rb'
- 'lib/transaction_dispatcher.rb'
- 'spec/support/capybara/common_actions.rb'
Metrics/PerceivedComplexity:
Exclude:
- 'app/controllers/application_controller/authenticates.rb'
- 'app/controllers/application_controller/handles_devices.rb'
- 'app/controllers/application_controller/handles_errors.rb'
- 'app/controllers/application_controller/logs_http_access.rb'
- 'app/controllers/channels_email_controller.rb'
- 'app/controllers/channels_google_controller.rb'
- 'app/controllers/channels_microsoft365_controller.rb'
- 'app/controllers/concerns/creates_ticket_articles.rb'
- 'app/controllers/first_steps_controller.rb'
- 'app/controllers/form_controller.rb'
- 'app/controllers/getting_started_controller.rb'
- 'app/controllers/import_otrs_controller.rb'
- 'app/controllers/integration/check_mk_controller.rb'
- 'app/controllers/integration/smime_controller.rb'
- 'app/controllers/knowledge_base/search_controller.rb'
- 'app/controllers/long_polling_controller.rb'
- 'app/controllers/monitoring_controller.rb'
- 'app/controllers/object_manager_attributes_controller.rb'
- 'app/controllers/organizations_controller.rb'
- 'app/controllers/reports_controller.rb'
- 'app/controllers/search_controller.rb'
- 'app/controllers/sessions_controller.rb'
- 'app/controllers/ticket_articles_controller.rb'
- 'app/controllers/tickets_controller.rb'
- 'app/controllers/time_accountings_controller.rb'
- 'app/controllers/users_controller.rb'
- 'app/jobs/collection_update_job.rb'
- 'app/jobs/communicate_facebook_job.rb'
- 'app/jobs/communicate_sms_job.rb'
- 'app/jobs/communicate_telegram_job.rb'
- 'app/jobs/communicate_twitter_job.rb'
- 'app/jobs/ticket_article_communicate_email_job.rb'
- 'app/models/activity_stream/assets.rb'
- 'app/models/application_model/can_assets.rb'
- 'app/models/application_model/can_associations.rb'
- 'app/models/application_model/can_cleanup_param.rb'
- 'app/models/application_model/can_creates_and_updates.rb'
- 'app/models/application_model/checks_attribute_values_and_length.rb'
- 'app/models/application_model/checks_user_columns_fillup.rb'
- 'app/models/application_model/has_attachments.rb'
- 'app/models/application_model/can_lookup_search_index_attributes.rb'
- 'app/models/authorization.rb'
- 'app/models/avatar.rb'
- 'app/models/calendar.rb'
- 'app/models/channel.rb'
- 'app/models/channel/assets.rb'
- 'app/models/channel/driver/facebook.rb'
- 'app/models/channel/driver/imap.rb'
- 'app/models/channel/driver/pop3.rb'
- 'app/models/channel/driver/smtp.rb'
- 'app/models/channel/driver/twitter.rb'
- 'app/models/channel/email_build.rb'
- 'app/models/channel/email_parser.rb'
- 'app/models/channel/filter/auto_response_check.rb'
- 'app/models/channel/filter/bounce_delivery_permanent_failed.rb'
- 'app/models/channel/filter/bounce_follow_up_check.rb'
- 'app/models/channel/filter/database.rb'
- 'app/models/channel/filter/follow_up_check.rb'
- 'app/models/channel/filter/identify_sender.rb'
- 'app/models/channel/filter/monitoring_base.rb'
- 'app/models/channel/filter/out_of_office_check.rb'
- 'app/models/channel/filter/sender_is_system_address.rb'
- 'app/models/chat.rb'
- 'app/models/chat/session.rb'
- 'app/models/chat/session/assets.rb'
- 'app/models/concerns/can_clone_attachments.rb'
- 'app/models/concerns/can_csv_import.rb'
- 'app/models/concerns/has_history.rb'
- 'app/models/concerns/has_rich_text.rb'
- 'app/models/concerns/has_search_index_backend.rb'
- 'app/models/concerns/has_search_sortable.rb'
- 'app/models/cti/caller_id.rb'
- 'app/models/cti/driver/base.rb'
- 'app/models/cti/driver/placetel.rb'
- 'app/models/cti/driver/sipgate_io.rb'
- 'app/models/cti/log.rb'
- 'app/models/external_sync.rb'
- 'app/models/history.rb'
- 'app/models/job.rb'
- 'app/models/job/assets.rb'
- 'app/models/karma/activity_log.rb'
- 'app/models/knowledge_base.rb'
- 'app/models/object_manager/attribute.rb'
- 'app/models/observer/transaction.rb'
- 'app/models/online_notification/assets.rb'
- 'app/models/organization/assets.rb'
- 'app/models/organization/search.rb'
- 'app/models/overview/assets.rb'
- 'app/models/package.rb'
- 'app/models/package/migration.rb'
- 'app/models/recent_view/assets.rb'
- 'app/models/role.rb'
- 'app/models/role/assets.rb'
- 'app/models/scheduler.rb'
- 'app/models/setting.rb'
- 'app/models/sla/assets.rb'
- 'app/models/taskbar.rb'
- 'app/models/ticket.rb'
- 'app/models/ticket/article.rb'
- 'app/models/ticket/article/adds_metadata_email.rb'
- 'app/models/ticket/article/adds_metadata_general.rb'
- 'app/models/ticket/article/adds_metadata_origin_by_id.rb'
- 'app/models/ticket/article/assets.rb'
- 'app/models/ticket/article/enqueue_communicate_email_job.rb'
- 'app/models/ticket/article/enqueue_communicate_facebook_job.rb'
- 'app/models/ticket/article/enqueue_communicate_twitter_job.rb'
- 'app/models/ticket/article/has_ticket_contact_attributes_impact.rb'
- 'app/models/ticket/article/resets_ticket_state.rb'
- 'app/models/ticket/escalation.rb'
- 'app/models/ticket/number/date.rb'
- 'app/models/ticket/overviews.rb'
- 'app/models/ticket/screen_options.rb'
- 'app/models/ticket/search.rb'
- 'app/models/ticket/search_index.rb'
- 'app/models/ticket/sets_last_owner_update_time.rb'
- 'app/models/ticket/touches_associations.rb'
- 'app/models/token.rb'
- 'app/models/transaction/clearbit_enrichment.rb'
- 'app/models/transaction/karma.rb'
- 'app/models/transaction/notification.rb'
- 'app/models/transaction/signature_detection.rb'
- 'app/models/transaction/slack.rb'
- 'app/models/translation.rb'
- 'app/models/trigger/assets.rb'
- 'app/models/user.rb'
- 'app/models/user/assets.rb'
- 'app/models/user/performs_geo_lookup.rb'
- 'app/models/user/search.rb'
- 'app/models/user/search_index.rb'
- 'app/models/user_device.rb'
- 'app/policies/ticket/article_policy.rb'
- 'db/migrate/20170207081400_ticket_state_priority_defaults.rb'
- 'db/migrate/20170403000001_fixed_admin_user_permission_920.rb'
- 'db/migrate/20170516000001_trigger_recipient_update.rb'
- 'db/migrate/20171023000001_fixed_store_upgrade_ror_45.rb'
- 'db/migrate/20180502015927_issue_1219_zhtw_locale_typo.rb'
- 'db/migrate/20180502015927_issue_1219_zhtw_locale_typo.rb'
- 'db/migrate/20180806000001_fixed_twitter_ticket_article_preferences7.rb'
- 'db/migrate/20181017000001_cti_generic_api2.rb'
- 'db/migrate/20190408000001_issue_2541_fix_notification_email_without_body.rb'
- 'db/migrate/20190724000001_rename_reserved_words.rb'
- 'lib/auto_wizard.rb'
- 'lib/core_ext/string.rb'
- 'lib/email_helper/probe.rb'
- 'lib/enrichment/clearbit/user.rb'
- 'lib/excel_sheet.rb'
- 'lib/external_credential/facebook.rb'
- 'lib/external_credential/google.rb'
- 'lib/external_credential/microsoft365.rb'
- 'lib/external_credential/twitter.rb'
- 'lib/facebook.rb'
- 'lib/fill_db.rb'
- 'lib/html_sanitizer.rb'
- 'lib/import/exchange/item_attributes.rb'
- 'lib/import/otrs/user.rb'
- 'lib/ldap/user.rb'
- 'lib/models.rb'
- 'lib/notification_factory/mailer.rb'
- 'lib/notification_factory/renderer.rb'
- 'lib/report/article_by_type_sender.rb'
- 'lib/report/base.rb'
- 'lib/report/ticket_first_solution.rb'
- 'lib/report/ticket_generic_time.rb'
- 'lib/report/ticket_moved.rb'
- 'lib/report/ticket_reopened.rb'
- 'lib/search_index_backend.rb'
- 'lib/secure_mailing/smime/incoming.rb'
- 'lib/service/geo_ip/zammad.rb'
- 'lib/session_helper/collection_base.rb'
- 'lib/session_helper/collection_ticket.rb'
- 'lib/sessions.rb'
- 'lib/sessions/backend/activity_stream.rb'
- 'lib/sessions/backend/ticket_overview_list.rb'
- 'lib/sessions/client.rb'
- 'lib/sessions/event/broadcast.rb'
- 'lib/sessions/event/chat_session_close.rb'
- 'lib/sessions/event/chat_session_update.rb'
- 'lib/sessions/event/chat_status_customer.rb'
- 'lib/signature_detection.rb'
- 'lib/stats.rb'
- 'lib/stats/ticket_channel_distribution.rb'
- 'lib/stats/ticket_in_process.rb'
- 'lib/stats/ticket_load_measure.rb'
- 'lib/stats/ticket_reopen.rb'
- 'lib/stats/ticket_response_time.rb'
- 'lib/stats/ticket_waiting_time.rb'
- 'lib/tasks/search_index_es.rake'
- 'lib/telegram.rb'
- 'lib/transaction_dispatcher.rb'
- 'lib/twitter_sync.rb'
- 'lib/user_agent.rb'
- 'test/browser/admin_object_manager_test.rb'
- 'test/browser/keyboard_shortcuts_test.rb'
- 'test/browser_test_helper.rb'
- 'test/integration/slack_test.rb'
Rails/AssertNot:
Exclude:
- 'test/browser/admin_permissions_granular_vs_full_test.rb'
Rails/CreateTableWithTimestamps:
Exclude:
- 'db/migrate/20120101000001_create_base.rb'
- 'db/migrate/20120101000010_create_ticket.rb'
- 'db/migrate/20170419000002_overview_role_ids.rb'
- 'db/migrate/20170608151442_enhanced_permissions.rb'
Rails/HasManyOrHasOneDependent:
Exclude:
- 'app/models/chat/session.rb'
- 'app/models/concerns/has_groups.rb'
- 'app/models/email_address.rb'
- 'app/models/organization.rb'
- 'app/models/signature.rb'
- 'app/models/ticket/state_type.rb'
- 'app/models/user.rb'
Style/OptionalBooleanParameter:
Exclude:
- 'app/models/application_model/can_activity_stream_log.rb'
- 'app/models/application_model/can_cleanup_param.rb'
- 'app/models/avatar.rb'
- 'app/models/channel.rb'
- 'app/models/channel/driver/facebook.rb'
- 'app/models/channel/driver/sendmail.rb'
- 'app/models/channel/driver/sms/massenversand.rb'
- 'app/models/channel/driver/sms/message_bird.rb'
- 'app/models/channel/driver/sms/twilio.rb'
- 'app/models/channel/driver/smtp.rb'
- 'app/models/channel/driver/telegram.rb'
- 'app/models/channel/driver/twitter.rb'
- 'app/models/channel/email_build.rb'
- 'app/models/channel/email_parser.rb'
- 'app/models/chat/session.rb'
- 'app/models/concerns/has_history.rb'
- 'app/models/job.rb'
- 'app/models/karma/activity_log.rb'
- 'app/models/object_manager/attribute.rb'
- 'app/models/package.rb'
- 'app/models/scheduler.rb'
- 'app/models/setting.rb'
- 'app/models/store/file.rb'
- 'app/models/text_module.rb'
- 'app/models/ticket/escalation.rb'
- 'app/models/translation.rb'
- 'app/models/user.rb'
- 'lib/app_version.rb'
- 'lib/core_ext/string.rb'
- 'lib/external_credential/facebook.rb'
- 'lib/external_credential/google.rb'
- 'lib/external_credential/microsoft365.rb'
- 'lib/external_credential/twitter.rb'
- 'lib/html_sanitizer.rb'
- 'lib/models.rb'
- 'lib/sessions/backend/ticket_overview_list.rb'
- 'lib/sessions/node.rb'
- 'spec/support/system_init_done.rb'
- 'test/browser_test_helper.rb'

View File

@@ -1 +1 @@
2.4.1
2.7.4

View File

@@ -1,62 +0,0 @@
dist: trusty
sudo: required
group: deprecated
notifications:
email:
- me+tv@zammad.com
env:
- DB=mysql
- DB=postgresql
addons:
postgresql: "9.4"
apt:
packages:
- mysql-server-5.6
- mysql-client-core-5.6
- mysql-client-5.6
services:
- postgresql
- mysql
language: ruby
rvm:
- 2.4.1
before_install:
- git fetch --unshallow
- sudo apt-get -qq update
- sudo apt-get install -y curl git-core patch build-essential bison zlib1g-dev libssl-dev libxml2-dev libxml2-dev sqlite3 libsqlite3-dev autotools-dev libxslt1-dev libyaml-0-2 autoconf automake libreadline6-dev libyaml-dev libtool libgmp-dev libgdbm-dev libncurses5-dev pkg-config libffi-dev libmysqlclient-dev postfix
- if [ "${DB}" = "mysql" ]; then mysql -u root -e "CREATE USER 'some_user'@'localhost' IDENTIFIED BY 'some_pass';"; fi
- if [ "${DB}" = "mysql" ]; then mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'localhost';"; fi
- if [ "${DB}" = "mysql" ]; then cp config/database.yml.test-mysql config/database.yml; fi
- if [ "${DB}" = "postgresql" ]; then psql -c 'create database zammad_test;' -U postgres; fi
- if [ "${DB}" = "postgresql" ]; then cp config/database.yml.test-postgresql config/database.yml; fi
- export RAILS_ENV=test
- export ZAMMAD_VERSION=$(git describe --tags | sed -e 's/-[a-z0-9]\{8,\}.*//g')
install:
- if [ "${DB}" = "mysql" ]; then bundle install --without postgres; fi
- if [ "${DB}" = "postgresql" ]; then bundle install; fi
script:
- bundle exec rubocop
- rake db:create
- rake db:migrate
- rake db:seed
- rake test:units
- rake test:controllers
- rake assets:precompile
- rake db:drop
- rake db:create
- rake db:migrate
- rake db:seed
- ruby -I test/ test/integration/auto_wizard_test.rb
- rake db:drop
- rake db:create
- rake db:migrate
- rake db:seed
- ruby -I test/ test/integration/geo_location_test.rb
- ruby -I test/ test/integration/geo_calendar_test.rb
- ruby -I test/ test/integration/user_agent_test.rb
- ruby -I test/ test/integration/user_device_controller_test.rb
- ruby -I test/ test/integration/sipgate_controller_test.rb
- rake db:drop
after_success:
- if [ "${DB}" = "mysql" ]; then contrib/travis-ci.org/trigger-docker-build.sh; fi
- if [ "${DB}" = "mysql" ]; then contrib/travis-ci.org/trigger-docker-compose-build.sh; fi

View File

@@ -1,16 +1,186 @@
# Change Log
## [2.1.0](https://github.com/zammad/zammad/tree/2.1.0) (2017-xx-xx)
[Full Changelog](https://github.com/zammad/zammad/compare/2.0.0...2.1.0)
## [5.0.0](https://github.com/zammad/zammad/tree/5.0.0) (2021-10-05)
[Full Changelog](https://github.com/zammad/zammad/compare/4.1.0...5.0.0)
**Implemented enhancements:**
- Core Workflow: Add organization condition attributes for object User [3779](https://github.com/zammad/zammad/issues/3779) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- No script content (e. g. javascript) in emails [3365](https://github.com/zammad/zammad/issues/3365) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[mail processing](https://github.com/zammad/zammad/labels/mail processing)]
- Read-only custom objects [2102](https://github.com/zammad/zammad/issues/2102) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[object manager attribute](https://github.com/zammad/zammad/labels/object manager attribute)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- Granular admin permission for google channel is missing [3194](https://github.com/zammad/zammad/issues/3194) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)]
- Use country codes (e.g. `DE` or `ES`) for knowledgebase answer selection [3574](https://github.com/zammad/zammad/issues/3574) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)]
- New email account expert view cannot be opened without filling in all fields [3137](https://github.com/zammad/zammad/issues/3137) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)]
- Don't provide option to create API-Token if authentication via API token is disabled [3168](https://github.com/zammad/zammad/issues/3168) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)]
- Define default "stay on tab" / "close tab" behavior [257](https://github.com/zammad/zammad/issues/257) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Space after ticket hook in ticket/zoom [3265](https://github.com/zammad/zammad/issues/3265) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[ticket](https://github.com/zammad/zammad/labels/ticket)]
- Enhance LDAP login to not affect "failed logins" [2389](https://github.com/zammad/zammad/issues/2389) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[LDAP](https://github.com/zammad/zammad/labels/LDAP)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Detect Jira follow-ups [3695](https://github.com/zammad/zammad/issues/3695) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[mail processing](https://github.com/zammad/zammad/labels/mail processing)]
- csv import example file download (organizations) is empty [3514](https://github.com/zammad/zammad/issues/3514) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)]
- Add bulk option to extended search [445](https://github.com/zammad/zammad/issues/445) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- MessageBird integration [3672](https://github.com/zammad/zammad/issues/3672) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[channel](https://github.com/zammad/zammad/labels/channel)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Add attachment via Trigger and scheduler if wanted by admin [2485](https://github.com/zammad/zammad/issues/2485) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[admin area](https://github.com/zammad/zammad/labels/admin area)] [[trigger](https://github.com/zammad/zammad/labels/trigger)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Tag KB Answers [2612](https://github.com/zammad/zammad/issues/2612) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)]
- Backtrace lines pollute log [3556](https://github.com/zammad/zammad/issues/3556) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[authentication](https://github.com/zammad/zammad/labels/authentication)]
- Visualise locked users in UI and make them unlock-able for admin [2565](https://github.com/zammad/zammad/issues/2565) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Representation of inactive customers and orgnizations [3302](https://github.com/zammad/zammad/issues/3302) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- No possibility to enforce auto response if one of the blocking auto response mail header exists [3667](https://github.com/zammad/zammad/issues/3667) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[mail processing](https://github.com/zammad/zammad/labels/mail processing)]
- REST doc of Online Notification controler is outdated/wrong and expand param is missing. [3635](https://github.com/zammad/zammad/issues/3635) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)]
- Scroll background instead of foreground [978](https://github.com/zammad/zammad/issues/978) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[frontend / JS app](https://github.com/zammad/zammad/labels/frontend / JS app)]
- Log if a active user (in UI) has been logged out due to SessionTimeout [3614](https://github.com/zammad/zammad/issues/3614) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)]
- The rake task `zammad:package:migrate` does not execute migrations for linked packages. [3606](https://github.com/zammad/zammad/issues/3606) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[developer experience](https://github.com/zammad/zammad/labels/developer experience)]
- Accept 2xx as response for requests in UserAgent [3573](https://github.com/zammad/zammad/pull/3573) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)]
- Don't fail job is `deletable_id` is no longer available [3536](https://github.com/zammad/zammad/issues/3536) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[data privacy](https://github.com/zammad/zammad/labels/data privacy)]
- Add console output for searchindex rebuild status [3562](https://github.com/zammad/zammad/issues/3562) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)]
- Display minutes for session timeouts instead of seconds [3575](https://github.com/zammad/zammad/issues/3575) [[enhancement](https://github.com/zammad/zammad/labels/enhancement)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[admin area](https://github.com/zammad/zammad/labels/admin area)]
**Fixed bugs:**
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
- Inconstant alignment in the listing of attachments/submit button in new article area [3773](https://github.com/zammad/zammad/issues/3773) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Improve contrasts in answer search for articles [3783](https://github.com/zammad/zammad/issues/3783) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)]
- escaped 'Set fixed' workflows don't refresh set values on active ticket sessions [3757](https://github.com/zammad/zammad/issues/3757) [[bug](https://github.com/zammad/zammad/labels/bug)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- ObjectManager Attribute without screen attribute causes CoreWorkflows migration to fail [3781](https://github.com/zammad/zammad/issues/3781) [[bug](https://github.com/zammad/zammad/labels/bug)] [[migration / update](https://github.com/zammad/zammad/labels/migration / update)]
- Zammad preflight check warning output causes Syntax-Error in postinstall.sh and failing installation [2674](https://github.com/zammad/zammad/issues/2674) [[bug](https://github.com/zammad/zammad/labels/bug)] [[migration / update](https://github.com/zammad/zammad/labels/migration / update)]
- Shared organization issue (Create your first ticket) [2780](https://github.com/zammad/zammad/issues/2780) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[ticket](https://github.com/zammad/zammad/labels/ticket)]
- Force users to reload after system migration [3776](https://github.com/zammad/zammad/issues/3776) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Unable to cancel attachment upload [2351](https://github.com/zammad/zammad/issues/2351) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)]
- [BUG] miss spell in db/migrate/20210923172256_issue_2619_kb_header_link_color.rb [3777](https://github.com/zammad/zammad/issues/3777) [[bug](https://github.com/zammad/zammad/labels/bug)] [[blocker](https://github.com/zammad/zammad/labels/blocker)] [[migration / update](https://github.com/zammad/zammad/labels/migration / update)]
- KB header and footer link-color not changeable [2619](https://github.com/zammad/zammad/issues/2619) [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)] [[specification required](https://github.com/zammad/zammad/labels/specification required)] [[theming / skinning](https://github.com/zammad/zammad/labels/theming / skinning)]
- Syntax errors break scheduler job for good [3028](https://github.com/zammad/zammad/issues/3028) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Existing tickets: New article modal with padding-left: 0; padding-right: 0; [3772](https://github.com/zammad/zammad/issues/3772) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[regression](https://github.com/zammad/zammad/labels/regression)]
- Possible race condition causing OTRS import to fail [3765](https://github.com/zammad/zammad/issues/3765) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)]
- Incorrect alignment in the listing of attachments when creating a ticket [3746](https://github.com/zammad/zammad/issues/3746) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Saved conditions break on selections without reloading [3758](https://github.com/zammad/zammad/issues/3758) [[bug](https://github.com/zammad/zammad/labels/bug)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- Misleading view of user icons which are on vacation and disabled [3075](https://github.com/zammad/zammad/issues/3075) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[ticket](https://github.com/zammad/zammad/labels/ticket)]
- User with user_id 1 is show in admin interface (which should not) [3755](https://github.com/zammad/zammad/issues/3755) [[bug](https://github.com/zammad/zammad/labels/bug)] [[blocker](https://github.com/zammad/zammad/labels/blocker)]
- Unable to close tickets in certran cases if core workflow is used [3710](https://github.com/zammad/zammad/issues/3710) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- Login failed after upgrade to zammad 5.0 [3759](https://github.com/zammad/zammad/issues/3759) [[bug](https://github.com/zammad/zammad/labels/bug)] [[blocker](https://github.com/zammad/zammad/labels/blocker)] [[migration / update](https://github.com/zammad/zammad/labels/migration / update)]
- Unable to create a ticket in web app if default for additional boolean value is FALSE [3762](https://github.com/zammad/zammad/issues/3762) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- User search / selection does not always work if you want to correct your search [3696](https://github.com/zammad/zammad/issues/3696) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Unable to create new organization [3751](https://github.com/zammad/zammad/issues/3751) [[bug](https://github.com/zammad/zammad/labels/bug)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- Core Workflow "is not" operator is working unexpected [3752](https://github.com/zammad/zammad/issues/3752) [[bug](https://github.com/zammad/zammad/labels/bug)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- scrollPageHeader disappears when answering via email [3736](https://github.com/zammad/zammad/issues/3736) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)]
- Scheduler ignores "disable notifications == no" [3684](https://github.com/zammad/zammad/issues/3684) [[bug](https://github.com/zammad/zammad/labels/bug)] [[notification](https://github.com/zammad/zammad/labels/notification)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Notes on existing ticks are discarded by editing profile settings [3088](https://github.com/zammad/zammad/issues/3088) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)]
- Owner selection empty or pending reminder data picker not shown if customer field has content but no customer is selected (in ticket create screen) [3743](https://github.com/zammad/zammad/issues/3743) [[bug](https://github.com/zammad/zammad/labels/bug)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- Removal of Microsoft365-Channel not possible via UI when having no email address relation [3741](https://github.com/zammad/zammad/issues/3741) [[bug](https://github.com/zammad/zammad/labels/bug)] [[channel](https://github.com/zammad/zammad/labels/channel)]
- Removal of Google-Channel not possible via UI when having a normal email channel of same account [3203](https://github.com/zammad/zammad/issues/3203) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[channel](https://github.com/zammad/zammad/labels/channel)]
- Core-Workflow: Option manipulation of boolean attributes not possible [3740](https://github.com/zammad/zammad/issues/3740) [[bug](https://github.com/zammad/zammad/labels/bug)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- Core Workflow: Show hidden attributes on group selection (ticket edit) [3739](https://github.com/zammad/zammad/issues/3739) [[bug](https://github.com/zammad/zammad/labels/bug)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- OTRS migration doesn't import article creation time [3235](https://github.com/zammad/zammad/issues/3235) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)]
- Spaces stay URL-encoded when going back to search results on KB for agents [3378](https://github.com/zammad/zammad/issues/3378) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)]
- Not working unpack of mail body if decrypted body is in signed-data attachment [3705](https://github.com/zammad/zammad/issues/3705) [[bug](https://github.com/zammad/zammad/labels/bug)] [[mail processing](https://github.com/zammad/zammad/labels/mail processing)]
- It should be possible to show attributes which are configured `shown` false [3726](https://github.com/zammad/zammad/issues/3726) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- admin.core_workflow permission is missing [3732](https://github.com/zammad/zammad/issues/3732) [[bug](https://github.com/zammad/zammad/labels/bug)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- AttributeManager doesn't display boolean default values within the UI [3271](https://github.com/zammad/zammad/issues/3271) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[object manager attribute](https://github.com/zammad/zammad/labels/object manager attribute)]
- Spaces in front of mentions can cause partly content removal [3717](https://github.com/zammad/zammad/issues/3717) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Drop files here not disappearing after dropping a file [3725](https://github.com/zammad/zammad/issues/3725) [[bug](https://github.com/zammad/zammad/labels/bug)] [[regression](https://github.com/zammad/zammad/labels/regression)]
- ⚙ -> Manage -> Calendars -> Edit: "Subscribe to public holidays in" sorted wrong [2528](https://github.com/zammad/zammad/issues/2528) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)]
- Pending reminder notifications are not sent if ticket is opened in tab [2931](https://github.com/zammad/zammad/issues/2931) [[bug](https://github.com/zammad/zammad/labels/bug)] [[ticket](https://github.com/zammad/zammad/labels/ticket)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[frontend / JS app](https://github.com/zammad/zammad/labels/frontend / JS app)]
- Fields are falsey displayed as mandatory if they contain historic screen values [3721](https://github.com/zammad/zammad/issues/3721) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- `ticket.customer_id` is `current_user` breaks email fetching [3503](https://github.com/zammad/zammad/issues/3503) [[bug](https://github.com/zammad/zammad/labels/bug)] [[channel](https://github.com/zammad/zammad/labels/channel)] [[ticket](https://github.com/zammad/zammad/labels/ticket)]
- Scheduler jobs don't ensure current ticket information if they're running a long time [3329](https://github.com/zammad/zammad/issues/3329) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- groups selection for customer panel is not working anymore (with core workflows) [3713](https://github.com/zammad/zammad/issues/3713) [[bug](https://github.com/zammad/zammad/labels/bug)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- Scheduler Time offset [457](https://github.com/zammad/zammad/issues/457) [[bug](https://github.com/zammad/zammad/labels/bug)] [[trigger](https://github.com/zammad/zammad/labels/trigger)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- "Warten auf Erinnerung" - Inconsistent timestamps [2366](https://github.com/zammad/zammad/issues/2366) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Ical escaltion update the calendar entry to 2:00 am [2157](https://github.com/zammad/zammad/issues/2157) [[bug](https://github.com/zammad/zammad/labels/bug)] [[notification](https://github.com/zammad/zammad/labels/notification)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Inheritance of out of office settings [3694](https://github.com/zammad/zammad/issues/3694) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Core worflow perform action "select" should not make multiple values selectable [3712](https://github.com/zammad/zammad/issues/3712) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- Setting for CheckMK not saved in zammad [3707](https://github.com/zammad/zammad/issues/3707) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Any user can be set as a replacement for out of office [2293](https://github.com/zammad/zammad/issues/2293) [[bug](https://github.com/zammad/zammad/labels/bug)] [[personal settings/menu](https://github.com/zammad/zammad/labels/personal settings/menu)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Core Workflow Implementation [3709](https://github.com/zammad/zammad/issues/3709) [[feature backlog](https://github.com/zammad/zammad/labels/feature backlog)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[core](https://github.com/zammad/zammad/labels/core)] [[core workflows](https://github.com/zammad/zammad/labels/core workflows)]
- Can't remove auto assignment timeout [2544](https://github.com/zammad/zammad/issues/2544) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Assign Follow ups has no affect [2455](https://github.com/zammad/zammad/issues/2455) [[bug](https://github.com/zammad/zammad/labels/bug)] [[ticket](https://github.com/zammad/zammad/labels/ticket)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- The calendar shows Chilean holidays one day in advance [3706](https://github.com/zammad/zammad/issues/3706) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[regression](https://github.com/zammad/zammad/labels/regression)]
- Organization removal does not clear organization_id from Tickets [3703](https://github.com/zammad/zammad/issues/3703) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[regression](https://github.com/zammad/zammad/labels/regression)]
- Merge not possible with not set, required attributes [2634](https://github.com/zammad/zammad/issues/2634) [[bug](https://github.com/zammad/zammad/labels/bug)] [[ticket](https://github.com/zammad/zammad/labels/ticket)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[object manager attribute](https://github.com/zammad/zammad/labels/object manager attribute)]
- Merging tickets doesn’t trigger notification for target ticket [3105](https://github.com/zammad/zammad/issues/3105) [[bug](https://github.com/zammad/zammad/labels/bug)] [[notification](https://github.com/zammad/zammad/labels/notification)] [[ticket](https://github.com/zammad/zammad/labels/ticket)]
- One of DB migrations timestamp breaks migrations queue [3702](https://github.com/zammad/zammad/issues/3702) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Tags in ticket create screen displayed wrong [3701](https://github.com/zammad/zammad/issues/3701) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[regression](https://github.com/zammad/zammad/labels/regression)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)]
- Custom date attributes provide inconsistent sorting within grouping [3663](https://github.com/zammad/zammad/issues/3663) [[bug](https://github.com/zammad/zammad/labels/bug)] [[overviews](https://github.com/zammad/zammad/labels/overviews)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Mix of binary encoded ISO-8859-1 data in header fields (e.g. to) fails mail processing [3697](https://github.com/zammad/zammad/issues/3697) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[mail processing](https://github.com/zammad/zammad/labels/mail processing)]
- Zammad sends mails even though there is no email address visible in TO or CC fields (any more) [3554](https://github.com/zammad/zammad/issues/3554) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)]
- Error 500 / zammad {"error":" 123456 is out of range for ActiveModel::Type::Integer with limit 4 bytes"} [3647](https://github.com/zammad/zammad/issues/3647) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Default value not set for attributes of type input, select, tree_select, richtext, textarea, checkbox [1653](https://github.com/zammad/zammad/issues/1653) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[object manager attribute](https://github.com/zammad/zammad/labels/object manager attribute)]
- When replying, quote article content only [3539](https://github.com/zammad/zammad/issues/3539) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Trigger ignores changes on some Ticket attributes [3428](https://github.com/zammad/zammad/issues/3428) [[bug](https://github.com/zammad/zammad/labels/bug)] [[trigger](https://github.com/zammad/zammad/labels/trigger)]
- KB search does not allow pagination on endpoint [3068](https://github.com/zammad/zammad/issues/3068) [[bug](https://github.com/zammad/zammad/labels/bug)] [[API](https://github.com/zammad/zammad/labels/API)] [[search](https://github.com/zammad/zammad/labels/search)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)]
- “You have not created a ticket yet” shown but I already have closed tickets [3053](https://github.com/zammad/zammad/issues/3053) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[overviews](https://github.com/zammad/zammad/labels/overviews)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[🚧 refactoring 2.0 🚧](https://github.com/zammad/zammad/labels/🚧 refactoring 2.0 🚧)]
- Support HTML5 'required' attribute in forms [1890](https://github.com/zammad/zammad/pull/1890)
- Freshdesk import works not with more then 30_000 tickets [3681](https://github.com/zammad/zammad/issues/3681) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)]
- Pagination for knowledge base answer sorting breaks sorting [3660](https://github.com/zammad/zammad/issues/3660) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[admin area](https://github.com/zammad/zammad/labels/admin area)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)]
- Zendesk-Import `Connection reset by peer` cancels import [3583](https://github.com/zammad/zammad/issues/3583) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)] [[waiting for feedback](https://github.com/zammad/zammad/labels/waiting for feedback)]
- Prefer HTTP standard header "From" over custom "X-On-Behalf-Of" for impersonation [3113](https://github.com/zammad/zammad/issues/3113) [[API](https://github.com/zammad/zammad/labels/API)] [[help appreciated](https://github.com/zammad/zammad/labels/help appreciated)] [[authentication](https://github.com/zammad/zammad/labels/authentication)] [[hacktoberfest](https://github.com/zammad/zammad/labels/hacktoberfest)] [[:construction: refactoring :construction:](https://github.com/zammad/zammad/labels/:construction: refactoring :construction:)] [[specification required](https://github.com/zammad/zammad/labels/specification required)] [[good first issue](https://github.com/zammad/zammad/labels/good first issue)] [[deprecation](https://github.com/zammad/zammad/labels/deprecation)]
- Do not send `domain` and migrate `domain` out of Google and Microsoft 365 channels [3669](https://github.com/zammad/zammad/issues/3669) [[bug](https://github.com/zammad/zammad/labels/bug)] [[channel](https://github.com/zammad/zammad/labels/channel)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- high organization user count relates to bad performance [3648](https://github.com/zammad/zammad/issues/3648) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[performance](https://github.com/zammad/zammad/labels/performance)]
- Removing organizations removes user and ticket as well [3688](https://github.com/zammad/zammad/issues/3688) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Wrong user is used when "X-On-Behalf-Of” header value is an email that starts with digits [2851](https://github.com/zammad/zammad/issues/2851) [[bug](https://github.com/zammad/zammad/labels/bug)] [[API](https://github.com/zammad/zammad/labels/API)]
- Allow out of office for one day without setting two days [3590](https://github.com/zammad/zammad/issues/3590) [[bug](https://github.com/zammad/zammad/labels/bug)] [[personal settings/menu](https://github.com/zammad/zammad/labels/personal settings/menu)]
- FreshDesk Import doesn't pull in auto-assign domain(s) for organizations [3687](https://github.com/zammad/zammad/issues/3687) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)]
- FreshDesk Import brings in all users as inactive [3689](https://github.com/zammad/zammad/issues/3689) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)]
- KB Public UI icons are misspaced [3680](https://github.com/zammad/zammad/issues/3680) [[bug](https://github.com/zammad/zammad/labels/bug)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)]
- FreshDesk Import Error - undefined method `body' for 10:Integer [3661](https://github.com/zammad/zammad/issues/3661) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)]
- Cannot select multiple tickets in ticket overview with shift+click in Firefox [3449](https://github.com/zammad/zammad/issues/3449) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[overviews](https://github.com/zammad/zammad/labels/overviews)]
- "Drop files here" drag area not always hiding [3460](https://github.com/zammad/zammad/issues/3460) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[help appreciated](https://github.com/zammad/zammad/labels/help appreciated)]
- CTI Callerlog signaling hides "+" for new ticket if more than one user is found [2930](https://github.com/zammad/zammad/issues/2930) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[frontend / JS app](https://github.com/zammad/zammad/labels/frontend / JS app)]
- Zendesk URL check fails with Net::HTTPForbidden 403 error [3679](https://github.com/zammad/zammad/issues/3679) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)]
- Mac Mail inline PDF destroys E-Mail-Body [2407](https://github.com/zammad/zammad/issues/2407) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[mail processing](https://github.com/zammad/zammad/labels/mail processing)]
- Outdated urls on security page (third-party logins) [3627](https://github.com/zammad/zammad/issues/3627) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Duplicated article after bulk action was executed for newly created tickets without a browser refresh in between [3568](https://github.com/zammad/zammad/issues/3568) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Text Editor deletes text unrecoverably if quicktext was canceled with Ctrl+Backspace [2886](https://github.com/zammad/zammad/issues/2886) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[ticket](https://github.com/zammad/zammad/labels/ticket)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[frontend / JS app](https://github.com/zammad/zammad/labels/frontend / JS app)]
- The defined ignored attributes in the popover context are not working [3668](https://github.com/zammad/zammad/issues/3668) [[bug](https://github.com/zammad/zammad/labels/bug)] [[frontend / JS app](https://github.com/zammad/zammad/labels/frontend / JS app)]
- Ensure Upload Cache files are removed after grace period [3579](https://github.com/zammad/zammad/issues/3579) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Package installation fails because of too long file names [3666](https://github.com/zammad/zammad/issues/3666) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Package migrations fail on package installation or update due to codebase self-modification [3580](https://github.com/zammad/zammad/issues/3580) [[bug](https://github.com/zammad/zammad/labels/bug)] [[core](https://github.com/zammad/zammad/labels/core)]
- saving Boolean field with empty values [2973](https://github.com/zammad/zammad/issues/2973) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)]
- CTI-API should handle doubled requests better [3247](https://github.com/zammad/zammad/issues/3247) [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[CTI](https://github.com/zammad/zammad/labels/CTI)] [[specification required](https://github.com/zammad/zammad/labels/specification required)]
- In some situations the chat button is visible without a active websocket connection [2258](https://github.com/zammad/zammad/issues/2258) [[bug](https://github.com/zammad/zammad/labels/bug)] [[chat](https://github.com/zammad/zammad/labels/chat)]
- Fixes mistypes in article_view.coffee [3658](https://github.com/zammad/zammad/pull/3658)
- Creating and editing users via office 365 failes with Image source is invalid [3617](https://github.com/zammad/zammad/issues/3617) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- FreshDesk Import fails with timeout error [3653](https://github.com/zammad/zammad/issues/3653) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)]
- Chat widget cannot load CSS on (sub)domains that contain "ws" characters [3654](https://github.com/zammad/zammad/issues/3654) [[bug](https://github.com/zammad/zammad/labels/bug)] [[chat](https://github.com/zammad/zammad/labels/chat)]
- timezone issue with elasticsearch [2085](https://github.com/zammad/zammad/issues/2085) [[duplicate](https://github.com/zammad/zammad/labels/duplicate)]
- Invalid html signature detection for exchange warning boxes [3571](https://github.com/zammad/zammad/issues/3571) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Searching for integer fields does not work as expected [3599](https://github.com/zammad/zammad/issues/3599) [[bug](https://github.com/zammad/zammad/labels/bug)] [[search](https://github.com/zammad/zammad/labels/search)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- FreshDesk import fails on certain custom field types [3628](https://github.com/zammad/zammad/issues/3628) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)]
- Freshdesk import subdomain selection fails [3631](https://github.com/zammad/zammad/issues/3631) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)]
- Search results missing for users with two names within lastname [3598](https://github.com/zammad/zammad/issues/3598) [[bug](https://github.com/zammad/zammad/labels/bug)] [[search](https://github.com/zammad/zammad/labels/search)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- New location notification with X-On-Behalf [3611](https://github.com/zammad/zammad/issues/3611) [[bug](https://github.com/zammad/zammad/labels/bug)] [[API](https://github.com/zammad/zammad/labels/API)] [[notification](https://github.com/zammad/zammad/labels/notification)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- State list of tickets ignore locale for their sorting [3335](https://github.com/zammad/zammad/issues/3335) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[ticket](https://github.com/zammad/zammad/labels/ticket)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Newly created users are only shown in the admin interface after reload [3050](https://github.com/zammad/zammad/issues/3050) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[frontend / JS app](https://github.com/zammad/zammad/labels/frontend / JS app)]
- Migration 3.6.1 to 4.1 : No configured business hours found! [3641](https://github.com/zammad/zammad/issues/3641) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Verification tokens questionable behavior in developer mode [3116](https://github.com/zammad/zammad/issues/3116) [[developer experience](https://github.com/zammad/zammad/labels/developer experience)]
- Replacing a mention with a new leads to mentioning both agents [3636](https://github.com/zammad/zammad/issues/3636) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Attachment order is wrong [3584](https://github.com/zammad/zammad/issues/3584) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)]
- When disconnecting a Chat, customer can still continue posting messages [2559](https://github.com/zammad/zammad/issues/2559) [[bug](https://github.com/zammad/zammad/labels/bug)] [[chat](https://github.com/zammad/zammad/labels/chat)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- some macros are hidden in the drag & drop- overview with a small screen size [3359](https://github.com/zammad/zammad/issues/3359) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Add redis as an (optional) session store backend [3450](https://github.com/zammad/zammad/pull/3450)
- Text Module widget is broken/hidden after pressing backspace (once) [3637](https://github.com/zammad/zammad/issues/3637) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Mention widget show same users several times (if rest requests will return in different order) [3639](https://github.com/zammad/zammad/issues/3639) [[bug](https://github.com/zammad/zammad/labels/bug)]
- The rebuild of the index is failing [3633](https://github.com/zammad/zammad/issues/3633) [[bug](https://github.com/zammad/zammad/labels/bug)] [[chat](https://github.com/zammad/zammad/labels/chat)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Monitoring endpoint complains about `Failed to run SessionTimeoutJob.perform_now after 10 tries #<NoMethodError: undefined method `id' for nil:NilClass` [3632](https://github.com/zammad/zammad/issues/3632) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Updating package-based installations can break the front end. [3629](https://github.com/zammad/zammad/issues/3629) [[bug](https://github.com/zammad/zammad/labels/bug)]
- backup: stop using su for pg_dump [3352](https://github.com/zammad/zammad/pull/3352) [[waiting for feedback](https://github.com/zammad/zammad/labels/waiting for feedback)]
- Reply-to header ignored if from contains a system address [2551](https://github.com/zammad/zammad/issues/2551) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Maintenance: Fix handling of test that require secrets not to run for GitHub PRs. [3626](https://github.com/zammad/zammad/pull/3626)
- replacing find -mtime with find -mmin [3570](https://github.com/zammad/zammad/pull/3570)
- Ensure to migrate old calendar URLs for google calendar sources [3618](https://github.com/zammad/zammad/issues/3618) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[regression](https://github.com/zammad/zammad/labels/regression)]
- Mentions/Subscribe with read permissions [3615](https://github.com/zammad/zammad/issues/3615) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Chat-Message references not cleared with data privacy task [3610](https://github.com/zammad/zammad/issues/3610) [[bug](https://github.com/zammad/zammad/labels/bug)] [[data privacy](https://github.com/zammad/zammad/labels/data privacy)]
- Overview names are hidden in mobile view for RTL languages [3500](https://github.com/zammad/zammad/issues/3500) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[mobile](https://github.com/zammad/zammad/labels/mobile)]
- SMTP-Attachments missing when using the API under high load [2991](https://github.com/zammad/zammad/issues/2991) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Inline image conversion from jpeg to png causes huge overhead [3538](https://github.com/zammad/zammad/issues/3538) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- session timeout does regulary logout active users before timeout because of dead old sessions [3605](https://github.com/zammad/zammad/issues/3605) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Zendesk import creates new ticket numbers rather than using the Zendesk ticket IDs also as ticket numbers in Zammad [3593](https://github.com/zammad/zammad/issues/3593) [[bug](https://github.com/zammad/zammad/labels/bug)] [[import](https://github.com/zammad/zammad/labels/import)] [[ticket](https://github.com/zammad/zammad/labels/ticket)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- wrong behaviour for the disabled option in session timeout [3600](https://github.com/zammad/zammad/issues/3600) [[bug](https://github.com/zammad/zammad/labels/bug)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Header links are not responsive [3133](https://github.com/zammad/zammad/issues/3133) [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)]
- Update description of the session timeout setting [3597](https://github.com/zammad/zammad/issues/3597) [[bug](https://github.com/zammad/zammad/labels/bug)] [[admin area](https://github.com/zammad/zammad/labels/admin area)]
- Escalation calculation breaks data privacy ticket deletion [3588](https://github.com/zammad/zammad/issues/3588) [[bug](https://github.com/zammad/zammad/labels/bug)] [[data privacy](https://github.com/zammad/zammad/labels/data privacy)]
- `SessionTimeoutJob.perform_now` fails if user no longer exists [3586](https://github.com/zammad/zammad/issues/3586) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Robots.txt should allow indexing Knowledge Base on custom URLs [3164](https://github.com/zammad/zammad/issues/3164) [[bug](https://github.com/zammad/zammad/labels/bug)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)]
- DataPrivacy may fail to clear user relations [3585](https://github.com/zammad/zammad/issues/3585) [[bug](https://github.com/zammad/zammad/labels/bug)] [[data privacy](https://github.com/zammad/zammad/labels/data privacy)]
- SessionTimeoutJob.perform_now scheduler job fails on update if scheduler process wasn't restarted [3581](https://github.com/zammad/zammad/issues/3581) [[bug](https://github.com/zammad/zammad/labels/bug)]
- Freshdesk import attribute ID mapping lookup constants fail application boot in systems with changed default names [3582](https://github.com/zammad/zammad/issues/3582) [[bug](https://github.com/zammad/zammad/labels/bug)]
- mentioned KB entries with the same title in different categories can not distinguished [3559](https://github.com/zammad/zammad/issues/3559) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)] [[knowledge base](https://github.com/zammad/zammad/labels/knowledge base)]
- Invalid auto assignment conditions may break ticket view for unassigned tickets [3567](https://github.com/zammad/zammad/issues/3567) [[bug](https://github.com/zammad/zammad/labels/bug)] [[UX/UI](https://github.com/zammad/zammad/labels/UX/UI)] [[prioritised by payment](https://github.com/zammad/zammad/labels/prioritised by payment)]
- Add Greek translation for chat [3569](https://github.com/zammad/zammad/pull/3569) [[chat](https://github.com/zammad/zammad/labels/chat)] [[translation](https://github.com/zammad/zammad/labels/translation)]
- Freshdesk [865](https://github.com/zammad/zammad/issues/865) [[feature backlog](https://github.com/zammad/zammad/labels/feature backlog)] [[import](https://github.com/zammad/zammad/labels/import)]
- Old JQuery version delivered [3431](https://github.com/zammad/zammad/issues/3431) [[bug](https://github.com/zammad/zammad/labels/bug)] [[chat](https://github.com/zammad/zammad/labels/chat)]

240
Gemfile
View File

@@ -1,147 +1,239 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
source 'https://rubygems.org'
ruby '2.4.1'
# core - base
ruby '2.7.4'
gem 'rails', '~> 6.0'
gem 'rails', '5.1.4'
gem 'rails-observers'
# core - rails additions
gem 'activerecord-import'
gem 'activerecord-session_store'
# Bundle edge Rails instead:
#gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'bootsnap', require: false
gem 'composite_primary_keys'
gem 'json'
# Supported DBs
# core - application servers
gem 'puma', '~> 4', group: :puma
gem 'unicorn', group: :unicorn
# core - supported ORMs
gem 'activerecord-nulldb-adapter', group: :nulldb
gem 'mysql2', group: :mysql
gem 'pg', group: :postgres
gem 'pg', '0.21.0', group: :postgres
# core - asynchrous task execution
gem 'daemons'
gem 'delayed_job_active_record'
# core - websocket
gem 'em-websocket'
gem 'eventmachine'
gem 'hiredis', require: false
gem 'redis', require: false
# core - password security
gem 'argon2'
# core - state machine
gem 'aasm'
# core - authorization
gem 'pundit'
# core - image processing
gem 'rszr', '0.5.2'
# performance - Memcached
gem 'dalli', require: false
# Only load gems for asset compilation if they are needed to avoid
# having unneeded runtime dependencies like NodeJS.
group :assets do
gem 'sass-rails' #, github: 'rails/sass-rails'
gem 'coffee-rails'
gem 'coffee-script-source'
# asset handling - javascript execution for e.g. linux
gem 'execjs', require: false
gem 'sprockets'
# asset handling - coffee-script
gem 'coffee-rails', require: false
gem 'uglifier'
gem 'eco'
# asset handling - frontend templating
gem 'eco', require: false
# asset handling - SASS
gem 'sassc-rails', require: false
# asset handling - pipeline
gem 'sprockets', '~> 3.7.2', require: false
gem 'uglifier', require: false
gem 'autoprefixer-rails', require: false
end
gem 'autoprefixer-rails'
# Don't use mini_racer any more for asset compilation.
# Instead, use an external node.js binary.
group :mini_racer, optional: true do
gem 'libv8'
gem 'mini_racer', '0.2.9' # Newer versions require libv8-node instead which does not compile on older platforms.
end
# authentication - provider
gem 'doorkeeper'
gem 'oauth2'
gem 'omniauth'
gem 'omniauth-oauth2'
# authentication - third party
gem 'omniauth-rails_csrf_protection'
# authentication - third party providers
gem 'omniauth-facebook'
gem 'omniauth-github'
gem 'omniauth-gitlab'
gem 'omniauth-google-oauth2'
gem 'omniauth-linkedin-oauth2'
gem 'omniauth-twitter'
gem 'omniauth-microsoft-office365'
gem 'omniauth-saml'
gem 'omniauth-twitter'
gem 'omniauth-weibo-oauth2'
gem 'twitter'
gem 'telegramAPI'
# channels
gem 'gmail_xoauth'
gem 'koala'
gem 'mail'
gem 'valid_email2'
gem 'telegramAPI'
gem 'twitter'
# channels - email additions
gem 'htmlentities'
gem 'mail', git: 'https://github.com/zammad-deps/mail', branch: '2-7-stable'
gem 'mime-types'
gem 'rchardet', '>= 1.8.0'
gem 'valid_email2'
# feature - business hours
gem 'biz'
gem 'composite_primary_keys'
gem 'delayed_job_active_record'
gem 'daemons'
# feature - signature diffing
gem 'diffy'
gem 'simple-rss'
# feature - excel output
gem 'writeexcel', require: false
# e. g. on linux we need a javascript execution
gem 'libv8'
gem 'execjs'
gem 'therubyracer'
# feature - csv import/export
gem 'csv', require: false
require 'erb'
require 'yaml'
gem 'net-ldap'
# password security
gem 'argon2'
gem 'writeexcel'
gem 'icalendar'
gem 'icalendar-recurrence'
# feature - device logging
gem 'browser'
# feature - iCal export
gem 'icalendar'
gem 'icalendar-recurrence'
# feature - phone number formatting
gem 'telephone_number'
# feature - SMS
gem 'messagebird-rest'
gem 'twilio-ruby', require: false
# feature - ordering
gem 'acts_as_list'
# integrations
gem 'slack-notifier'
gem 'clearbit'
gem 'zendesk_api'
gem 'viewpoint'
gem 'rubyntlm', git: 'https://github.com/wimm/rubyntlm.git'
gem 'autodiscover', git: 'https://github.com/thorsteneckel/autodiscover.git'
gem 'clearbit', require: false
gem 'net-ldap'
gem 'slack-notifier', require: false
gem 'zendesk_api', require: false
# event machine
gem 'eventmachine'
gem 'em-websocket'
# integrations - exchange
gem 'autodiscover', git: 'https://github.com/zammad-deps/autodiscover', require: false
gem 'viewpoint', require: false
gem 'diffy'
# integrations - S/MIME
gem 'openssl'
# Gems used only for develop/test and not required
# in production environments by default.
group :development, :test do
gem 'rspec-rails'
gem 'test-unit'
# app boottime improvement
gem 'spring'
gem 'spring-commands-rspec'
gem 'sqlite3'
gem 'spring-commands-testunit'
# debugging
gem 'byebug'
gem 'pry-rails'
gem 'pry-remote'
gem 'pry-rescue'
gem 'pry-stack_explorer'
# test frameworks
gem 'rails-controller-testing'
gem 'rspec-rails'
gem 'shoulda-matchers'
gem 'test-unit'
# for testing Pundit authorisation policies in RSpec
gem 'pundit-matchers'
# code coverage
gem 'coveralls', require: false
gem 'simplecov'
gem 'simplecov-rcov'
gem 'coveralls', require: false
# UI tests w/ Selenium
gem 'selenium-webdriver', '2.53.4'
gem 'capybara'
gem 'selenium-webdriver'
# livereload on template changes (html, js, css)
gem 'guard', require: false
gem 'guard-livereload', require: false
gem 'rack-livereload'
gem 'rack-livereload', require: false
gem 'rb-fsevent', require: false
# auto symlinking
gem 'guard-symlink', require: false
# code QA
gem 'pre-commit'
gem 'rubocop'
gem 'brakeman', require: false
gem 'coffeelint'
gem 'overcommit'
gem 'rubocop'
gem 'rubocop-faker'
gem 'rubocop-performance'
gem 'rubocop-rails'
gem 'rubocop-rspec'
# changelog generation
gem 'github_changelog_generator'
# Setting ENV for testing purposes
gem 'figaro'
# Use Factory Girl for generating random test data
gem 'factory_girl_rails'
# generate random test data
gem 'factory_bot_rails'
gem 'faker'
# mock http calls
gem 'webmock'
# record and replay TCP/HTTP transactions
gem 'tcr'
gem 'vcr'
# handle deprecations in core and addons
gem 'deprecation_toolkit'
# image comparison in tests
gem 'chunky_png'
# refresh ENVs in CI environment
gem 'dotenv', require: false
# Slack helper for testing
gem 'slack-ruby-client', require: false
end
gem 'puma', group: :puma
gem 'unicorn', group: :unicorn
# load onw gem's
local_gemfile = File.join(File.dirname(__FILE__), 'Gemfile.local')
if File.exist?(local_gemfile)
eval_gemfile local_gemfile
end
# Want to extend Zammad with additional gems?
# ZAMMAD USERS: Specify them in Gemfile.local
# (That way, you can customize the Gemfile
# without having your changes overwritten during upgrades.)
# ZAMMAD DEVS: Consult the internal wiki
# (or else risk pushing unwanted changes to Gemfile.lock!)
# https://git.znuny.com/zammad/zammad/wikis/Tips#user-content-customizing-the-gemfile
eval_gemfile 'Gemfile.local' if File.exist?('Gemfile.local')

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,5 @@
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
# A sample Guardfile
# More info at https://github.com/guard/guard#readme

10
LICENSE
View File

@@ -1,7 +1,7 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -633,8 +633,8 @@ the "copyright" line and a pointer to where the full notice is found.
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
@@ -643,7 +643,7 @@ the "copyright" line and a pointer to where the full notice is found.
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
@@ -658,4 +658,4 @@ specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.
<https://www.gnu.org/licenses/>.

View File

@@ -57,7 +57,7 @@ License: MIT license
highlight.pack.js
Source: https://highlightjs.org
Copyright: 2006 Ivan Sagalaev (https://github.com/isagalaev)
License: BSD License
License: BSD License (BSD-3-Clause)
-----------------------------------------------------------------------------
jquery.flot.js
Source: https://github.com/dnschnur/flot
@@ -74,7 +74,7 @@ jquery.fineuploader-3.0.js
Source: http://github.com/Valums-File-Uploader/file-uploader
Copyright: 2010 Andrew Valums <andrew(at)valums.com>
2012 Ray Nicholus <fineuploader(at)garstasio.com>
License: MIT license, GNU GPL 2 or later, GNU LGPL 2 or later
License: GNU GPL 2 or later, GNU LGPL 2 or later
-----------------------------------------------------------------------------
jquery.noty.js
Source: https://github.com/needim/noty/
@@ -163,3 +163,38 @@ Source: https://gist.github.com/sbrin/6801034
Copyright: 2015, sbrin - https://github.com/sbrin
License: MIT license
-----------------------------------------------------------------------------
ant-design icon font
Source: https://github.com/ant-design/ant-design
Copyright: 2015-present Alipay.com, https://www.alipay.com/
License: MIT license
-----------------------------------------------------------------------------
Font Awesome icon font
Source: http://fontawesome.io/
Copyright: Font Awesome by Dave Gandy - http://fontawesome.io
License: MIT License
-----------------------------------------------------------------------------
Simple line icons font
Source: https://github.com/thesabbir/simple-line-icons
Copyright: 2016 Sabbir Ahmed & All Contributors
License: MIT license
-----------------------------------------------------------------------------
Ionicons icon font
Source: https://github.com/ionic-team/ionicons
Copyright: 2016 Drifty (http://drifty.com/)
License: MIT license
-----------------------------------------------------------------------------
Material icon font
Source: https://github.com/google/material-design-icons
Copyright: Google
License: Apache License, Version 2.0
-----------------------------------------------------------------------------
QUnit
Source: https://qunitjs.com/
Copyright: jQuery Foundation and other contributors
License: MIT
-----------------------------------------------------------------------------
Sinon.JS
Source: https://sinonjs.org
Copyright: Sinon committers
License: BSD-3
-----------------------------------------------------------------------------

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,9 @@
web: bundle exec ruby script/rails server -b ${ZAMMAD_BIND_IP:=127.0.0.1} -p ${ZAMMAD_RAILS_PORT:=3000}
websocket: bundle exec ruby script/websocket-server.rb -b ${ZAMMAD_BIND_IP:=127.0.0.1} -p ${ZAMMAD_WEBSOCKET_PORT:=6042} start
worker: bundle exec ruby script/scheduler.rb start -t
guard: bundle exec guard -P livereload
gulp: bundle exec gulp
web: bundle exec script/rails server -b ${ZAMMAD_BIND_IP:=127.0.0.1} -p ${ZAMMAD_RAILS_PORT:=3000}
websocket: bundle exec script/websocket-server.rb -b ${ZAMMAD_BIND_IP:=127.0.0.1} -p ${ZAMMAD_WEBSOCKET_PORT:=6042} start
worker: bundle exec script/scheduler.rb start -t
guard: bundle exec guard -i
// This is NOT the `gulp` Ruby gem.
// Use yarn (or npm) to install the `gulp` npm package,
// then add node_modules/.bin to your $PATH.
gulp: gulp

View File

@@ -2,24 +2,25 @@
Zammad is a web based open source helpdesk/customer support system with many
features to manage customer communication via several channels like telephone,
facebook, twitter, chat and e-mails. It is distributed under the GNU AFFERO
General Public License (AGPL) and tested on Linux, Solaris, AIX, FreeBSD,
OpenBSD and Mac OS 10.x. Do you receive many e-mails and want to answer them
with a team of agents?
facebook, twitter, chat and e-mails. It is distributed under version 3 of the
GNU AFFERO General Public License (GNU AGPLv3).
Do you receive many e-mails and want to answer them with a team of agents?
You're going to love Zammad!
## Status
- Build: [![Build Status](https://travis-ci.org/zammad/zammad.svg?branch=develop)](https://travis-ci.org/zammad/zammad)
- Code: [![Code Climate](https://codeclimate.com/github/zammad/zammad/badges/gpa.svg)](https://codeclimate.com/github/zammad/zammad) [![Coverage Status](https://coveralls.io/repos/github/zammad/zammad/badge.svg)](https://coveralls.io/github/zammad/zammad)
- CI: ![ci](https://github.com/zammad/zammad/workflows/ci/badge.svg)
- Build Docker images: ![build-docker-compose-images](https://github.com/zammad/zammad/workflows/build-docker-compose-images/badge.svg) ![build-docker-image](https://github.com/zammad/zammad/workflows/build-docker-image/badge.svg)
- Code: [![Code Climate](https://codeclimate.com/github/zammad/zammad/badges/gpa.svg)](https://codeclimate.com/github/zammad/zammad)
- Docs: [![Documentation Status](https://readthedocs.org/projects/zammad/badge/)](https://docs.zammad.org)
- Issues: [![Percentage of issues still open](http://isitmaintained.com/badge/open/zammad/zammad.svg)](https://github.com/zammad/zammad/issues "Percentage of issues still open") [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/zammad/zammad.svg)](https://github.com/zammad/zammad/issues?q=is%3Aissue+is%3Aclosed "Average time to resolve an issue")
- Download DEB/RPM: [![](https://img.shields.io/badge/Branch-develop-lightgrey.svg)](https://packager.io/gh/zammad/zammad#develop) [![](https://img.shields.io/badge/Branch-stable-lightgrey.svg)](https://packager.io/gh/zammad/zammad#stable)
- Docker multi container image: [![](https://images.microbadger.com/badges/image/zammad/zammad-docker-compose:zammad.svg)](https://microbadger.com/images/zammad/zammad-docker-compose:zammad) [![](https://img.shields.io/badge/version-stable-blue.svg)](https://hub.docker.com/r/zammad/zammad-docker-compose)
- Docker single container image: [![](https://images.microbadger.com/badges/image/zammad/zammad.svg)](https://microbadger.com/images/zammad/zammad) [![](https://images.microbadger.com/badges/version/zammad/zammad.svg)](https://hub.docker.com/r/zammad/zammad/)
- Vagrant: [![](https://img.shields.io/badge/version-develop-blue.svg)](https://github.com/zammad/zammad-vagrant)
- License: [![](https://img.shields.io/badge/License-AGPL%203.0-lightgrey.svg)](https://github.com/zammad/zammad/blob/develop/LICENSE)
- Download DEB/RPM: [![](https://img.shields.io/badge/Branch-stable-blue.svg)](https://packager.io/gh/zammad/zammad#stable) [![](https://img.shields.io/badge/Branch-develop-lightgrey.svg)](https://packager.io/gh/zammad/zammad#develop)
- Docker multi container image: [![](https://img.shields.io/badge/version-stable-blue.svg)](https://hub.docker.com/r/zammad/zammad-docker-compose)
- Docker single container image: [![](https://img.shields.io/badge/version-develop-lightgrey.svg)](https://hub.docker.com/r/zammad/zammad/)
- Vagrant: [![](https://img.shields.io/badge/version-develop-lightgrey.svg)](https://github.com/zammad/zammad-vagrant)
- License: [![](https://img.shields.io/badge/License-AGPL%203.0-brightgreen.svg)](https://github.com/zammad/zammad/blob/develop/LICENSE)
## Installing & Getting Started
@@ -33,7 +34,7 @@ https://zammad.org/screenshots
## REST API
https://docs.zammad.org/en/latest/api-intro.html
https://docs.zammad.org/en/latest/api/intro.html
## Contributing
@@ -44,4 +45,3 @@ https://zammad.org/participate
Thanks! ❤️ ❤️ ❤️
Your Zammad Team

4
Rakefile Normal file → Executable file
View File

@@ -1,7 +1,9 @@
#!/usr/bin/env rake
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
require_relative 'config/application'
Zammad::Application.load_tasks

View File

@@ -1 +1 @@
2.1.x
5.0.x

View File

@@ -1,899 +0,0 @@
class App.Controller extends Spine.Controller
@include App.LogInclude
constructor: (params) ->
# unbind old bindlings
if params && params.el && params.el.unbind
params.el.unbind()
super
# generate controllerId
@controllerId = 'controller-' + new Date().getTime() + '-' + Math.floor(Math.random() * 999999)
# apply to release controller on dom remove
@el.on('remove', @releaseController)
@el.on('remove', @release)
# create shortcuts
@Config = App.Config
@Session = App.Session
# create common accessors
@apiPath = @Config.get('api_path')
# remember ajax calls to abort them on dom release
@ajaxCalls = []
@ajax = (data) =>
ajaxId = App.Ajax.request(data)
@ajaxCalls.push ajaxId
navigate: (location, hideCurrentLocationFromHistory = false) ->
@log 'debug', "navigate to '#{location}', hide from history '#{hideCurrentLocationFromHistory}'"
# hide current location from browser history, allow to use back button in browser
if hideCurrentLocationFromHistory
if window.history
history = App.Config.get('History')
oldLocation = history[history.length-2]
if oldLocation
window.history.replaceState(null, null, oldLocation)
super location
preventDefault: (e) ->
e.preventDefault()
bind: (event, callback) =>
App.Event.bind(
event
callback
@controllerId
)
unbind: (event, callback) =>
App.Event.unbind(
event
callback
@controllerId
)
clearDelay: (delay_id) =>
App.Delay.clear(delay_id, @controllerId)
delay: (callback, timeout, delay_id, queue = false) =>
App.Delay.set(callback, timeout, delay_id, @controllerId, queue)
clearInterval: (interval_id) =>
App.Interval.clear(interval_id, @controllerId)
interval: (callback, interval, interval_id, queue = false) =>
App.Interval.set(callback, interval, interval_id, @controllerId, queue)
releaseController: =>
App.Event.unbindLevel(@controllerId)
App.Delay.clearLevel(@controllerId)
App.Interval.clearLevel(@controllerId)
if @ajaxCalls
for callId in @ajaxCalls
App.Ajax.abort(callId)
@userTicketPopupsDestroy()
@ticketPopupsDestroy()
@userPopupsDestroy()
@organizationPopupsDestroy()
release: ->
# release custom bindings after it got removed from dom
# add @title methode to set title
title: (name, translate = false) ->
# $('html head title').html(@Config.get(product_name) + ' - ' + App.i18n.translateInline(name))
title = name
if translate
title = App.i18n.translatePlain(name)
documentTitle = "#{@Config.get('product_name')} - #{title}"
document.title = documentTitle
App.Event.trigger('window-title-set', documentTitle)
copyToClipboard: (text) ->
if window.clipboardData # IE
window.clipboardData.setData('Text', text)
else
window.prompt('Copy to clipboard: Ctrl+C, Enter', text)
# disable all delay's and interval's
disconnectClient: ->
App.Delay.reset()
App.Interval.reset()
App.WebSocket.close(force: true)
# add @notify methode to create notification
notify: (data) ->
App.Event.trigger 'notify', data
# add @notifyDesktop methode to create desktop notification
notifyDesktop: (data) ->
App.Event.trigger 'notifyDesktop', data
# add @navupdate methode to update navigation
navupdate: (url, force = false) ->
# ignore navupdate untill #clues are gone
return if !force && window.location.hash is '#clues'
App.Event.trigger 'navupdate', url
# show navigation
navShow: ->
return if $('#navigation').is(':visible')
$('#navigation').removeClass('hide')
# hide navigation
navHide: ->
return if !$('#navigation').is(':visible')
$('#navigation').addClass('hide')
updateNavMenu: =>
delay = ->
App.Event.trigger('menu:render')
@delay(delay, 150)
scrollTo: (x = 0, y = 0, delay = 0) ->
a = ->
window.scrollTo(x, y)
@delay(a, delay)
scrollToIfNeeded: (element, position = true) ->
return if !element
return if !element.get(0)
if position is true
return if element.visible(true)
element.get(0).scrollIntoView(position)
shake: (element) ->
# this part is from wordpress 3, thanks to open source
shakeMe = (element, position, positionEnd) ->
positionStart = position.shift()
element.css('left', positionStart + 'px')
if position.length > 0
setTimeout(->
shakeMe(element, position, positionEnd)
, positionEnd)
else
try
element.css('position', 'static')
catch e
console.log 'error', e
position = [ 15, 30, 15, 0, -15, -30, -15, 0 ]
position = position.concat(position.concat(position))
element.css('position', 'relative')
shakeMe(element, position, 20)
# get all params of the form
formParam: (form) ->
App.ControllerForm.params(form)
formDisable: (form) ->
App.ControllerForm.disable(form)
formEnable: (form) ->
App.ControllerForm.enable(form)
formValidate: (data) ->
App.ControllerForm.validate(data)
# get all query params of the url
queryParam: ->
return if !@query
pairs = @query.split(';')
params = {}
for pair in pairs
result = pair.match('(.+?)=(.*)')
if result && result[1]
params[result[1]] = result[2]
params
# redirectToLogin: (data) ->
#
# human readable file size
humanFileSize: (size) ->
App.Utils.humanFileSize(size)
# human readable time
humanTime: (time, escalation, long = true) ->
App.PrettyDate.humanTime(time, escalation, long)
userInfo: (data) ->
el = data.el || $('[data-id="customer_info"]')
el.unbind()
# start customer info controller
new App.WidgetUser(
el: el
user_id: data.user_id
callback: data.callback
)
permissionCheckRedirect: (key, closeTab = false) ->
return true if @permissionCheck(key)
# remember requested url
location = window.location.hash
if location && location isnt '#login' && location isnt '#logout' && location isnt '#keyboard_shortcuts'
App.Config.set('requested_url', location)
if closeTab
App.TaskManager.remove(@task_key)
# redirect to login
@navigate '#login'
throw "No permission for #{key}"
false
permissionCheck: (key) ->
userId = App.Session.get('id')
return false if !userId
user = App.User.findNative(userId)
return false if !user
user.permission(key)
authenticateCheckRedirect: ->
return true if @authenticateCheck()
# remember requested url
location = window.location.hash
if location && location isnt '#login' && location isnt '#logout' && location isnt '#keyboard_shortcuts'
@Config.set('requested_url', location)
# redirect to login
@navigate '#login'
throw 'No exsisting session'
false
authenticateCheck: ->
# return true if session exists
return true if @Session.get()
false
frontendTime: (timestamp, row = {}) ->
if !row['subclass']
row['subclass'] = ''
"<span class=\"humanTimeFromNow #{row.subclass}\" data-time=\"#{timestamp}\">?</span>"
frontendTimeUpdate: =>
update = =>
@frontendTimeUpdateElement($('#app'))
App.Interval.set(update, 61000, 'frontendTimeUpdate', 'ui')
frontendTimeUpdateElement: (el) =>
ui = @
el.find('.humanTimeFromNow').each( ->
item = $(@)
ui.frontendTimeUpdateItem(item, item.text())
)
frontendTimeUpdateItem: (item, currentVal) =>
timestamp = item.data('time')
time = @humanTime(timestamp, item.hasClass('escalation'))
# only do dom updates on changes
return if time is currentVal
item.attr('title', App.i18n.translateTimestamp(timestamp))
item.html(time)
ticketPopups: (position = 'right') ->
# open ticket in new task if curent user agent
if @permissionCheck('ticket.agent')
@$('div.ticket-popover, span.ticket-popover').bind('click', (e) =>
id = $(e.target).data('id')
return if !id
ticket = App.Ticket.findNative(id)
@navigate ticket.uiUrl()
)
@ticketPopupsDestroy()
# show ticket popup
ui = @
@ticketPopupsList = @el.find('.ticket-popover').popover(
trigger: 'hover'
container: 'body'
html: true
animation: false
delay: 100
placement: position
title: ->
ticketId = $(@).data('id')
ticket = App.Ticket.find(ticketId)
App.Utils.htmlEscape(ticket.title)
content: ->
ticketId = $(@).data('id')
ticket = App.Ticket.fullLocal(ticketId)
html = $(App.view('popover/ticket')(
ticket: ticket
))
html.find('.humanTimeFromNow').each(->
ui.frontendTimeUpdateItem($(@))
)
html
)
ticketPopupsDestroy: =>
if @ticketPopupsList
@ticketPopupsList.popover('destroy')
userPopups: (position = 'right') ->
# open user in new task if current user is agent
return if !@permissionCheck('ticket.agent')
@$('div.user-popover, span.user-popover').bind('click', (e) =>
id = $(e.target).data('id')
return if !id
user = App.User.findNative(id)
@navigate user.uiUrl()
)
@userPopupsDestroy()
# show user popup
@userPopupsList = @el.find('.user-popover').popover(
trigger: 'hover'
container: 'body'
html: true
animation: false
delay: 100
placement: "auto #{position}"
title: ->
userId = $(@).data('id')
user = App.User.find(userId)
headline = App.Utils.htmlEscape(user.displayName())
if user.isOutOfOffice()
headline += " (#{App.Utils.htmlEscape(user.outOfOfficeText())})"
headline
content: ->
userId = $(@).data('id')
user = App.User.fullLocal(userId)
# get display data
userData = []
for attributeName, attributeConfig of App.User.attributesGet('view')
# check if value for _id exists
name = attributeName
nameNew = name.substr(0, name.length - 3)
if nameNew of user
name = nameNew
# add to show if value exists
if user[name] && attributeConfig.shown
# do not show firstname and lastname / already show via diplayName()
if name isnt 'firstname' && name isnt 'lastname' && name isnt 'organization'
userData.push attributeConfig
# insert data
App.view('popover/user')(
user: user
userData: userData
)
)
userPopupsDestroy: =>
if @userPopupsList
@userPopupsList.popover('destroy')
organizationPopups: (position = 'right') ->
# open org in new task if current user agent
return if !@permissionCheck('ticket.agent')
@$('div.organization-popover, span.organization-popover').bind('click', (e) =>
id = $(e.target).data('id')
return if !id
organization = App.Organization.find(id)
@navigate organization.uiUrl()
)
@organizationPopupsDestroy()
# show organization popup
@organizationPopupsList = @el.find('.organization-popover').popover(
trigger: 'hover'
container: 'body'
html: true
animation: false
delay: 100
placement: "auto #{position}"
title: ->
organization_id = $(@).data('id')
organization = App.Organization.find(organization_id)
App.Utils.htmlEscape(organization.name)
content: ->
organization_id = $(@).data('id')
organization = App.Organization.fullLocal(organization_id)
# get display data
organizationData = []
for attributeName, attributeConfig of App.Organization.attributesGet('view')
# check if value for _id exists
name = attributeName
nameNew = name.substr(0, name.length - 3)
if nameNew of organization
name = nameNew
# add to show if value exists
if organization[name] && attributeConfig.shown
# do not show firstname and lastname / already show via diplayName()
if name isnt 'name'
organizationData.push attributeConfig
# insert data
App.view('popover/organization')(
organization: organization,
organizationData: organizationData,
)
)
organizationPopupsDestroy: =>
if @organizationPopupsList
@organizationPopupsList.popover('destroy')
userTicketPopups: (params) ->
show = (data, ticket_list) =>
if !data.position
data.position = 'left'
@userTicketPopupsDestroy()
# show user popup
ui = @
@userTicketPopupsList = @el.find(data.selector).popover(
trigger: 'hover'
container: 'body'
html: true
animation: false
delay: 100
placement: "auto #{data.position}"
title: ->
$(@).find('[title="*"]').val()
content: ->
type = $(@).filter('[data-type]').data('type')
tickets = []
if ticket_list[type]
for ticketId in ticket_list[type]
tickets.push App.Ticket.fullLocal(ticketId)
# insert data
html = $(App.view('popover/user_ticket_list')(
tickets: tickets
))
html.find('.humanTimeFromNow').each( ->
ui.frontendTimeUpdateItem($(@))
)
html
)
fetch = (params) =>
@ajax(
type: 'GET'
url: "#{@Config.get('api_path')}/ticket_customer"
data:
customer_id: params.user_id
processData: true
success: (data, status, xhr) ->
App.Collection.loadAssets(data.assets)
show(params, { open: data.ticket_ids_open, closed: data.ticket_ids_closed })
)
# get data
fetch(params)
userTicketPopupsDestroy: =>
if @userTicketPopupsList
@userTicketPopupsList.popover('destroy')
anyPopoversDestroy: ->
# do not remove permanent .popover--notifications widget
$('.popover:not(.popover--notifications)').remove()
recentView: (object, o_id) =>
params =
object: object
o_id: o_id
App.Ajax.request(
id: "recent_view_#{object}_#{o_id}"
type: 'POST'
url: @Config.get('api_path') + '/recent_view'
data: JSON.stringify(params)
processData: true
)
prepareForObjectList: (items) ->
for item in items
item = @prepareForObjectListItem(item)
items
prepareForObjectListItem: (item) ->
item.link = ''
item.title = '???'
# convert backend name space to local name space
item.object = item.object.replace('::', '')
# lookup real data
if App[item.object] && App[item.object].exists(item.o_id)
object = App[item.object].findNative(item.o_id)
item.objectNative = object
item.link = object.uiUrl()
item.title = object.displayName()
item.object_name = object.objectDisplayName()
item.cssIcon = object.iconActivity(@Session.get())
item.created_by = App.User.findNative(item.created_by_id)
item
# central method, is getting called on every ticket form change
ticketFormChanges: (params, attribute, attributes, classname, form, ui) =>
if @formMeta.dependencies && @formMeta.dependencies[attribute.name]
dependency = @formMeta.dependencies[attribute.name][ parseInt(params[attribute.name]) ]
if !dependency
dependency = @formMeta.dependencies[attribute.name][ params[attribute.name] ]
if dependency
for fieldNameToChange of dependency
filter = []
if dependency[fieldNameToChange]
filter = dependency[fieldNameToChange]
# find element to replace
for item in attributes
if item.name is fieldNameToChange
item['filter'] = {}
item['filter'][ fieldNameToChange ] = filter
item.default = params[item.name]
#if !item.default
# delete item['default']
newElement = ui.formGenItem(item, classname, form)
# replace new option list
if newElement
form.find('[name="' + fieldNameToChange + '"]').closest('.form-group').replaceWith(newElement)
stopPropagation: (e) ->
e.stopPropagation()
startLoading: (el) =>
return if @initLoadingDone && !el
@initLoadingDone = true
@stopLoading()
later = =>
if el
el.html App.view('generic/page_loading')()
else
@html App.view('generic/page_loading')()
@initLoadingDoneDelay = @delay(later, 1800)
stopLoading: =>
return if !@initLoadingDoneDelay
@clearDelay(@initLoadingDoneDelay)
renderScreenSuccess: (data) ->
App.TaskManager.touch(@task_key) if @task_key
(data.el || @).html App.view('generic/error/success')(data)
renderScreenError: (data) ->
App.TaskManager.touch(@task_key) if @task_key
(data.el || @).html App.view('generic/error/generic')(data)
renderScreenNotFound: (data) ->
App.TaskManager.touch(@task_key) if @task_key
(data.el || @).html App.view('generic/error/not_found')(data)
renderScreenUnauthorized: (data) ->
App.TaskManager.touch(@task_key) if @task_key
(data.el || @).html App.view('generic/error/unauthorized')(data)
locationVerify: (e) =>
newLocation = $(e.currentTarget).attr 'href'
@log 'debug', "new location '#{newLocation}'"
return if !newLocation
@locationExecuteOrNavigate(newLocation)
locationExecuteOrNavigate: (newLocation) =>
currentLocation = Spine.Route.getPath()
@log 'debug', "current location '#{currentLocation}'"
if newLocation.replace(/#/, '') isnt currentLocation
@log 'debug', "navigate to location '#{newLocation}'"
@navigate(newLocation)
return
@locationExecute(newLocation)
locationExecute: (newLocation) =>
newLocation = newLocation.replace(/#/, '')
@log 'debug', "execute controller again for '#{newLocation}' because of same hash"
Spine.Route.matchRoutes(newLocation)
logoUrl: ->
"#{@Config.get('image_path')}/#{@Config.get('product_logo')}"
selectAll: (e) ->
e.currentTarget.focus()
e.currentTarget.select()
windowReload: (e,url) ->
if e
e.preventDefault()
$('#app').hide().attr('style', 'display: none!important')
if url
window.location = url
return true
if window.location.reload
window.location.reload()
return true
if window.location.href
window.location.href = window.location.href
return true
throw 'Cant reload page!'
class App.ControllerPermanent extends App.Controller
constructor: ->
if @requiredPermission
@permissionCheckRedirect(@requiredPermission, true)
super
@navShow()
class App.ControllerSubContent extends App.Controller
constructor: ->
if @requiredPermission
@permissionCheckRedirect(@requiredPermission)
super
show: =>
return if !@header
@title @header, true
class App.ControllerContent extends App.Controller
constructor: ->
if @requiredPermission
@permissionCheckRedirect(@requiredPermission)
super
# hide tasks
App.TaskManager.hideAll()
$('#content').removeClass('hide').removeClass('active')
@navShow()
class App.ControllerModal extends App.Controller
authenticateRequired: false
backdrop: true
keyboard: true
large: false
small: false
head: '?'
container: null
buttonClass: 'btn--success'
centerButtons: []
leftButtons: []
buttonClose: true
buttonCancel: false
buttonCancelClass: 'btn--text btn--subtle'
buttonSubmit: true
headPrefix: ''
shown: true
closeOnAnyClick: false
events:
'submit form': 'submit'
'click .js-submit:not(.is-disabled)': 'submit'
'click .js-cancel': 'cancel'
'click .js-close': 'cancel'
className: 'modal fade'
constructor: ->
super
if @authenticateRequired
return if !@authenticateCheckRedirect()
# rerender view, e. g. on langauge change
@bind('ui:rerender', =>
@update()
'modal'
)
if @shown
@render()
content: ->
'You need to implement a one @content()!'
update: =>
if @message
content = App.i18n.translateContent(@message)
else if @contentInline
content = @contentInline
else
content = @content()
modal = $(App.view('modal')
head: @head
headPrefix: @headPrefix
message: @message
detail: @detail
buttonClose: @buttonClose
buttonCancel: @buttonCancel
buttonCancelClass: @buttonCancelClass
buttonSubmit: @buttonSubmit
buttonClass: @buttonClass
centerButtons: @centerButtons
leftButtons: @leftButtons
)
modal.find('.modal-body').html content
if !@initRenderingDone
@initRenderingDone = true
@html modal
else
@$('.modal-dialog').replaceWith(modal)
@post()
post: ->
# nothing
element: =>
@el
render: =>
if @buttonSubmit is true
@buttonSubmit = 'Submit'
if @buttonCancel is true
@buttonCancel = 'Cancel & Go Back'
@update()
if @container
@el.addClass('modal--local')
if @large
@el.addClass('modal--large')
if @small
@el.addClass('modal--small')
@el.modal
keyboard: @keyboard
show: true
backdrop: @backdrop
container: @container
.on
'show.bs.modal': @onShow
'shown.bs.modal': @onShown
'hide.bs.modal': @onClose
'hidden.bs.modal': =>
@onClosed()
$('.modal').remove()
'dismiss.bs.modal': @onCancel
if @closeOnAnyClick
@el.on('click', =>
@close()
)
close: (e) =>
if e
e.preventDefault()
@el.modal('hide')
formParams: =>
if @container
return @formParam(@container.find('.modal form'))
return @formParam(@$('.modal form'))
onShow: ->
# do nothing
onShown: =>
@$('input:not([disabled]):not([type="hidden"]):not(".btn"), textarea').first().focus()
onClose: ->
# do nothing
onClosed: ->
# do nothing
onSubmit: ->
# do nothing
onCancel: ->
# do nothing
cancel: (e) =>
@close(e)
@onCancel(e)
submit: (e) =>
e.stopPropagation()
e.preventDefault()
@onSubmit(e)
class App.SessionMessage extends App.ControllerModal
onCancel: (e) =>
if @forceReload
@windowReload(e)
onClose: (e) =>
if @forceReload
@windowReload(e)
onSubmit: (e) =>
if @forceReload
@windowReload(e)
else
@close()
class App.UpdateHeader extends App.Controller
constructor: ->
super
# subscribe and reload data / fetch new data if triggered
@subscribeId = @genericObject.subscribe(@render)
release: =>
App[ @genericObject.constructor.className ].unsubscribe(@subscribeId)
render: (genericObject) =>
@el.find('.page-header h1').html(genericObject.displayName())
class App.UpdateTastbar extends App.Controller
constructor: ->
super
# subscribe and reload data / fetch new data if triggered
@subscribeId = @genericObject.subscribe(@update)
release: =>
App[ @genericObject.constructor.className ].unsubscribe(@subscribeId)
update: (genericObject) =>
# update taskbar with new meta data
App.TaskManager.touch(@task_key)
class App.ControllerWidgetPermanent extends App.Controller
constructor: (params) ->
if params.el
params.el.append('<div id="' + params.key + '"></div>')
params.el = ("##{params.key}")
super(params)
class App.ControllerWidgetOnDemand extends App.Controller
constructor: (params) ->
params.el = $("##{params.key}")
super
element: =>
$("##{@key}")
html: (raw) =>
# check if parent exists
if !$("##{@key}").get(0)
$('#app').before("<div id=\"#{@key}\" class=\"#{@className}\"></div>")
$("##{@key}").html raw

View File

@@ -0,0 +1,414 @@
class App.Controller extends Spine.Controller
@include App.LogInclude
@include App.RenderScreen
constructor: ->
super
# generate controllerId
@controllerId = 'controller-' + new Date().getTime() + '-' + Math.floor(Math.random() * 999999)
# apply to release controller on dom remove
@el.on('remove', @releaseController)
@el.on('remove', @release)
# create shortcuts
@Config = App.Config
@Session = App.Session
# create common accessors
@apiPath = @Config.get('api_path')
# remember ajax calls to abort them on dom release
@ajaxCalls = []
@ajax = (data) =>
ajaxId = App.Ajax.request(data)
@ajaxCalls.push ajaxId
navigate: (location, params = {}) ->
@log 'debug', "navigate to '#{location}'"
@log 'debug', "navigate hide from history '#{params.hideCurrentLocationFromHistory}'" if params.hideCurrentLocationFromHistory
@el.empty() if params.emptyEl
@el.remove() if params.removeEl
# hide current location from browser history, allow to use back button in browser
if params.hideCurrentLocationFromHistory
if window.history
history = App.Config.get('History')
oldLocation = history[history.length-2]
if oldLocation
window.history.replaceState(null, null, oldLocation)
super location
preventDefault: (e) ->
e.preventDefault()
controllerBind: (event, callback) =>
App.Event.bind(
event
callback
@controllerId
)
controllerUnbind: (event, callback) =>
App.Event.unbind(
event
callback
@controllerId
)
clearDelay: (delay_id) =>
App.Delay.clear(delay_id, @controllerId)
delay: (callback, timeout, delay_id, queue = false) =>
App.Delay.set(callback, timeout, delay_id, @controllerId, queue)
clearInterval: (interval_id) =>
App.Interval.clear(interval_id, @controllerId)
interval: (callback, interval, interval_id, queue = false) =>
App.Interval.set(callback, interval, interval_id, @controllerId, queue)
releaseController: =>
App.Event.unbindLevel(@controllerId)
App.Delay.clearLevel(@controllerId)
App.Interval.clearLevel(@controllerId)
@abortAjaxCalls()
# release bindings
if @el
@el.undelegate()
@el.unbind()
@el.empty()
# release spine bindings (see release() of spine.coffee)
@off()
@unbind()
@stopListening()
release: ->
# nothing
abortAjaxCalls: =>
if !@ajaxCalls
return
idsToCancel = @ajaxCalls
@ajaxCalls = []
for callId in idsToCancel
App.Ajax.abort(callId)
# add @title method to set title
title: (name, translate = false) ->
# $('html head title').html(@Config.get(product_name) + ' - ' + App.i18n.translateInline(name))
title = name
if translate
title = App.i18n.translatePlain(name)
documentTitle = "#{@Config.get('product_name')} - #{title}"
document.title = documentTitle
App.Event.trigger('window-title-set', documentTitle)
copyToClipboard: (text) ->
if window.clipboardData # IE
window.clipboardData.setData('Text', text)
else
window.prompt('Copy to clipboard: Ctrl+C, Enter', text)
# disable all delay's and interval's
disconnectClient: ->
App.Delay.reset()
App.Interval.reset()
App.WebSocket.close(force: true)
# add @notify method to create notification
notify: (data) ->
App.Event.trigger('notify', data)
# add @notifyDesktop method to create desktop notification
notifyDesktop: (data) ->
App.Event.trigger('notifyDesktop', data)
# add @navupdate method to update navigation
navupdate: (url, force = false) ->
# ignore navupdate until #clues are gone
return if !force && window.location.hash is '#clues'
App.Event.trigger('navupdate', url)
updateNavMenu: =>
delay = ->
App.Event.trigger('menu:render')
@delay(delay, 150)
closeTab: (key = @taskKey, dest) =>
return if !key?
App.TaskManager.remove(key)
dest ?= App.TaskManager.nextTaskUrl() || '#'
@navigate dest
scrollTo: (x = 0, y = 0, delay = 0) ->
a = ->
window.scrollTo(x, y)
@delay(a, delay)
scrollToIfNeeded: (element, position = true) ->
return if !element
return if !element.get(0)
if position is true
return if element.visible(true)
element.get(0).scrollIntoView(position)
shake: (element) ->
# this part is from wordpress 3, thanks to open source
shakeMe = (element, position, positionEnd) ->
positionStart = position.shift()
element.css('left', positionStart + 'px')
if position.length > 0
setTimeout(->
shakeMe(element, position, positionEnd)
, positionEnd)
else
try
element.css('position', 'static')
catch e
console.log 'error', e
position = [ 15, 30, 15, 0, -15, -30, -15, 0 ]
position = position.concat(position.concat(position))
element.css('position', 'relative')
shakeMe(element, position, 20)
# get all params of the form
formParam: (form) ->
App.ControllerForm.params(form)
formDisable: (form, type) ->
App.ControllerForm.disable(form, type)
formEnable: (form, type) ->
App.ControllerForm.enable(form, type)
formValidate: (data) ->
App.ControllerForm.validate(data)
# get all query params of the url
queryParam: ->
return if !@query
pairs = @query.split(';')
params = {}
for pair in pairs
result = pair.match('(.+?)=(.*)')
if result && result[1]
params[result[1]] = result[2]
params
# redirectToLogin: (data) ->
#
# human readable file size
humanFileSize: (size) ->
App.Utils.humanFileSize(size)
# human readable time
humanTime: (time, escalation, long = true) ->
App.PrettyDate.humanTime(time, escalation, long)
userInfo: (data) ->
el = data.el || $('[data-id="customer_info"]')
el.unbind()
# start customer info controller
new App.WidgetUser(
el: el
user_id: data.user_id
callback: data.callback
)
permissionCheckRedirect: (key, closeTab = false) ->
return true if @permissionCheck(key)
# remember requested url
@requestedUrlToStore()
if closeTab
App.TaskManager.remove(@taskKey)
# redirect to login
@navigate '#login'
throw "No permission for #{key}"
false
permissionCheck: (key) ->
App.User.current()?.permission(key)
authenticateCheckRedirect: ->
return true if @authenticateCheck()
# remember requested url
@requestedUrlToStore()
# redirect to login
@navigate '#login'
throw 'No exsisting session'
false
authenticateCheck: ->
# return true if session exists
return true if @Session.get()
false
requestedUrlToStore: ->
location = window.location.hash
return if !location
return if location is '#'
return if location is '#login'
return if location is '#logout'
return if location is '#session_timeout'
return if location is '#keyboard_shortcuts'
# remember requested url
@requestedUrlRemember(location)
requestedUrlRemember: (location) ->
App.SessionStorage.set('requested_url', location) # for authentication agains third party
App.Config.set('requested_url', location) # for local re-login
requestedUrlWas: ->
App.SessionStorage.get('requested_url') || App.Config.get('requested_url')
frontendTimeUpdate: =>
update = =>
@frontendTimeUpdateElement($('#app'))
App.Interval.set(update, 61000, 'frontendTimeUpdate', 'ui')
frontendTimeUpdateElement: (el) =>
ui = @
el.find('.humanTimeFromNow').each( ->
item = $(@)
ui.frontendTimeUpdateItem(item, item.text())
)
frontendTimeUpdateItem: (item, currentVal) =>
timestamp = item.attr('datetime')
time = @humanTime(timestamp, item.hasClass('escalation'))
# only do dom updates on changes
return if time is currentVal
newTitle = App.i18n.translateTimestamp(timestamp)
if item.attr('timezone')
newTitle += ' ' + item.attr('timezone')
item.attr('title', newTitle)
item.html(time)
recentView: (object, o_id) =>
params =
object: object
o_id: o_id
App.Ajax.request(
id: "recent_view_#{object}_#{o_id}"
type: 'POST'
url: @Config.get('api_path') + '/recent_view'
data: JSON.stringify(params)
processData: true
)
prepareForObjectList: (items) ->
for item in items
item = @prepareForObjectListItem(item)
items
prepareForObjectListItem: (item) ->
item.link = ''
item.title = '???'
# convert backend name space to local name space
item.object = item.object.replace('::', '')
# lookup real data
if App[item.object] && App[item.object].exists(item.o_id)
object = App[item.object].findNative(item.o_id)
item.objectNative = object
item.link = object.uiUrl()
item.title = object.displayName()
item.object_name = object.objectDisplayName()
item.cssIcon = object.iconActivity(@Session.get())
item.created_by = App.User.findNative(item.created_by_id)
item
stopPropagation: (e) ->
e.stopPropagation()
preventDefaultAndStopPropagation: (e) ->
e.preventDefault()
e.stopPropagation()
startLoading: (el) =>
return if @initLoadingDone && !el
@initLoadingDone = true
@stopLoading()
later = =>
if el
el.html App.view('generic/page_loading')()
else
@html App.view('generic/page_loading')()
@initLoadingDoneDelay = @delay(later, 1800)
stopLoading: =>
return if !@initLoadingDoneDelay
@clearDelay(@initLoadingDoneDelay)
locationVerify: (e) =>
newLocation = $(e.currentTarget).attr 'href'
@log 'debug', "new location '#{newLocation}'"
return if !newLocation
@locationExecuteOrNavigate(newLocation)
locationExecuteOrNavigate: (newLocation) =>
currentLocation = Spine.Route.getPath()
@log 'debug', "current location '#{currentLocation}'"
if newLocation.replace(/#/, '') isnt currentLocation
@log 'debug', "navigate to location '#{newLocation}'"
@navigate(newLocation)
return
@locationExecute(newLocation)
locationExecute: (newLocation) =>
newLocation = newLocation.replace(/#/, '')
@log 'debug', "execute controller again for '#{newLocation}' because of same hash"
Spine.Route.matchRoutes(newLocation)
logoUrl: ->
"#{@Config.get('image_path')}/#{@Config.get('product_logo')}"
selectAll: (e) ->
e.currentTarget.focus()
e.currentTarget.select()
windowReload: (e,url) ->
if e
e.preventDefault()
$('#app').hide().attr('style', 'display: none!important')
if url
window.location = url
return true
if window.location.reload
window.location.reload()
return true
if window.location.href
window.location.href = window.location.href
return true
throw 'Cant reload page!'

View File

@@ -0,0 +1,229 @@
class App.ControllerModal extends App.Controller
authenticateRequired: false
backdrop: true
keyboard: true
large: false
small: false
veryLarge: false
head: '?'
autoFocusOnFirstInput: true
container: null
buttonClass: 'btn--success'
centerButtons: []
leftButtons: []
buttonClose: true
buttonCancel: false
buttonCancelClass: 'btn--text btn--subtle'
buttonSubmit: true
includeForm: true
headPrefix: ''
shown: true
closeOnAnyClick: false
initalFormParams: {}
initalFormParamsIgnore: false
showTrySupport: false
showTryMax: 10
showTrydelay: 1000
events:
'submit form': 'submit'
'click .js-submit:not(.is-disabled)': 'submit'
'click .js-cancel': 'cancel'
'click .js-close': 'cancel'
className: 'modal fade'
constructor: ->
super
@showTryCount = 0
if @authenticateRequired
return if !@authenticateCheckRedirect()
# rerender view, e. g. on langauge change
@controllerBind('ui:rerender', =>
@update()
'modal'
)
if @shown
@render()
showDelayed: =>
delay = =>
@showTryCount += 1
@render()
@delay(delay, @showTrydelay)
modalAlreadyExists: ->
return true if $('.modal').length > 0
false
content: ->
'You need to implement a one @content()!'
update: =>
if @message
content = App.i18n.translateContent(@message)
else if @contentInline
content = @contentInline
else
content = @content()
modal = $(App.view('modal')(
head: @head
headPrefix: @headPrefix
message: @message
detail: @detail
buttonClose: @buttonClose
buttonCancel: @buttonCancel
buttonCancelClass: @buttonCancelClass
buttonSubmit: @buttonSubmit
buttonClass: @buttonClass
centerButtons: @centerButtons
leftButtons: @leftButtons
includeForm: @includeForm
))
modal.find('.modal-body').html(content)
if !@initRenderingDone
@initRenderingDone = true
@html(modal)
else
@$('.modal-dialog').replaceWith(modal)
@post()
post: ->
# nothing
element: =>
@el
render: =>
if @showTrySupport is true && @modalAlreadyExists() && @showTryCount <= @showTryMax
@showDelayed()
return
@initalFormParamsIgnore = false
if @buttonSubmit is true
@buttonSubmit = 'Submit'
if @buttonCancel is true
@buttonCancel = 'Cancel & Go Back'
@update()
if @container
@el.addClass('modal--local')
if @veryLarge
@el.addClass('modal--veryLarge')
if @large
@el.addClass('modal--large')
if @small
@el.addClass('modal--small')
@el
.on(
'show.bs.modal': @localOnShow
'shown.bs.modal': @localOnShown
'hide.bs.modal': @localOnClose
'hidden.bs.modal': @localOnClosed
'dismiss.bs.modal': @localOnCancel
).modal(
keyboard: @keyboard
show: true
backdrop: @backdrop
container: @container
)
if @closeOnAnyClick
@el.on('click', =>
@close()
)
close: (e) =>
if e
e.preventDefault()
@initalFormParamsIgnore = true
@el.modal('hide')
formParams: =>
if @container
return @formParam(@container.find('.modal form'))
return @formParam(@$('.modal form'))
showAlert: (message, suffix = 'danger') ->
alert = $('<div>')
.addClass("alert alert--#{suffix}")
.text(message)
@$('.modal-alerts-container').html(alert)
clearAlerts: ->
@$('.modal-alerts-container').empty()
localOnShow: (e) =>
@onShow(e)
onShow: (e) ->
# do nothing
localOnShown: (e) =>
@onShown(e)
onShown: (e) =>
if @autoFocusOnFirstInput
# select generated form
form = @$('.form-group').first()
# if not exists, use whole @el
if !form.get(0)
form = @el
# focus first input, select or textarea
form.find('input:not([disabled]):not([type="hidden"]):not(".btn"), select:not([disabled]), textarea:not([disabled])').first().focus()
@initalFormParams = @formParams()
localOnClose: (e) =>
diff = difference(@initalFormParams, @formParams())
if @initalFormParamsIgnore is false && !_.isEmpty(diff)
if !confirm(App.i18n.translateContent('The form content has been changed. Do you want to close it and lose your changes?'))
e.preventDefault()
return
@onClose(e)
onClose: ->
# do nothing
localOnClosed: (e) =>
@onClosed(e)
@el.modal('remove')
onClosed: (e) ->
# do nothing
localOnCancel: (e) =>
@onCancel(e)
onCancel: (e) ->
# do nothing
cancel: (e) =>
@close(e)
@onCancel(e)
onSubmit: (e) ->
# do nothing
submit: (e) =>
e.stopPropagation()
e.preventDefault()
@clearAlerts()
@onSubmit(e)
startLoading: =>
@$('.modal-body').addClass('hide')
@$('.modal-loader').removeClass('hide')
stopLoading: =>
@$('.modal-body').removeClass('hide')
@$('.modal-loader').addClass('hide')

View File

@@ -0,0 +1,15 @@
class App.ControllerAppContent extends App.Controller
constructor: (params) ->
if @requiredPermission
@permissionCheckRedirect(@requiredPermission)
# hide tasks
App.TaskManager.hideAll()
params.el = params.appEl.find('#content')
params.el.removeClass('hide').removeClass('active')
if !params.el.get(0)
params.appEl.append('<div id="content" class="content flex horizontal"></div>')
params.el = $('#content')
super(params)

View File

@@ -0,0 +1,331 @@
class App.CollectionController extends App.Controller
events:
'click .js-remove': 'remove'
'click .js-item': 'click'
'click .js-locationVerify': 'location'
observe:
field1: true
field2: false
#currentItems: {}
#1:
# a: 123
# b: 'some string'
#2:
# a: 123
# b: 'some string'
#renderList: {}
#1: ..dom..ref..
#2: ..dom..ref..
template: '_need_to_be_defined_'
uniqKey: 'id'
model: '_need_to_be_defined_'
sortBy: 'name'
order: 'ASC',
insertPosition: 'after'
globalRerender: true
constructor: ->
@events = @constructor.events unless @events
@observe = @constructor.observe unless @observe
@currentItems = {}
@renderList = {}
@queue = []
@queueRunning = false
@lastOrder = []
super
@queue.push ['renderAll']
@uIRunner()
# bind to changes
if @model
@subscribeId = App[@model].subscribe(@collectionSync)
# render on generic ui call
if @globalRerender
@controllerBind('ui:rerender', =>
@queue.push ['renderAll']
@uIRunner()
)
# render on login
@controllerBind('auth:login', =>
@queue.push ['renderAll']
@uIRunner()
)
# reset current tasks on logout
@controllerBind('auth:logout', =>
@queue.push ['renderAll']
@uIRunner()
)
@log 'debug', 'Init @uniqKey', @uniqKey
@log 'debug', 'Init @observe', @observe
@log 'debug', 'Init @model', @model
release: =>
if @subscribeId
App[@model].unsubscribe(@subscribeId)
uIRunner: =>
return if !@queue[0]
return if @queueRunning
@queueRunning = true
loop
param = @queue.shift()
if param[0] is 'domChange'
@domChange(param[1])
else if param[0] is 'domRemove'
@domRemove(param[1])
else if param[0] is 'change'
@collectionSync(param[1])
else if param[0] is 'destroy'
@collectionSync(param[1], 'destroy')
else if param[0] is 'renderAll'
@renderAll()
else
@log 'error', "Unknown type #{param[0]}", param[1]
if !@queue[0]
@onRenderEnd()
@queueRunning = false
break
collectionOrderGet: =>
newOrder = []
all = @itemsAll()
for item in all
newOrder.push item[@uniqKey]
newOrder
collectionOrderSet: (newOrder = false) =>
if !newOrder
newOrder = @collectionOrderGet()
@lastOrder = newOrder
collectionSync: (items, type) =>
# remove items
if type is 'destroy'
ids = []
for item in items
ids.push item[@uniqKey]
@queue.push ['domRemove', ids]
@uIRunner()
return
# inital render
if _.isEmpty(@renderList)
@queue.push ['renderAll']
@uIRunner()
return
# check if item order is the same
newOrder = @collectionOrderGet()
removedIds = _.difference(@lastOrder, newOrder)
addedIds = _.difference(newOrder, @lastOrder)
@log 'debug', 'collectionSync removedIds', removedIds
@log 'debug', 'collectionSync addedIds', addedIds
@log 'debug', 'collectionSync @lastOrder', @lastOrder
@log 'debug', 'collectionSync newOrder', newOrder
# add items
alreadyRemoved = false
if !_.isEmpty(addedIds)
lastOrderNew = []
for id in @lastOrder
if !_.contains(removedIds, id)
lastOrderNew.push id
# try to find positions of new items
@log 'debug', 'collectionSync lastOrderNew', lastOrderNew
applyOrder = App.Utils.diffPositionAdd(lastOrderNew, newOrder)
@log 'debug', 'collectionSync applyOrder', applyOrder
if !applyOrder
@queue.push ['renderAll']
@uIRunner()
return
if !_.isEmpty(removedIds)
alreadyRemoved = true
@queue.push ['domRemove', removedIds]
@uIRunner()
newItems = []
for apply in applyOrder
item = @itemGet(apply.id)
item.meta_position = apply.position
newItems.push item
@queue.push ['domChange', newItems]
@uIRunner()
# remove items
if !alreadyRemoved && !_.isEmpty(removedIds)
@queue.push ['domRemove', removedIds]
@uIRunner()
# update items
newItems = []
for item in items
if !_.contains(removedIds, item.id) && !_.contains(addedIds, item.id)
newItems.push item
return if _.isEmpty(newItems)
@queue.push ['domChange', newItems]
@uIRunner()
#return
# rerender all items
#@queue.push ['renderAll']
#@uIRunner()
domRemove: (ids) =>
@log 'debug', 'domRemove', ids
for id in ids
@itemAttributesDelete(id)
if @renderList[id]
@renderList[id].remove()
delete @renderList[id]
@onRemoved(id)
@collectionOrderSet()
domChange: (items) =>
@log 'debug', 'domChange items', items
@log 'debug', 'domChange @currentItems', @currentItems
changedItems = []
for item in items
@log 'debug', 'domChange|item', item
attributes = @itemAttributes(item)
currentItem = @itemAttributesGet(item[@uniqKey])
if !currentItem
@log 'debug', 'domChange|add', item
changedItems.push item
@itemAttributesSet(item[@uniqKey], attributes)
else
@log 'debug', 'domChange|change', item
@log 'debug', 'domChange|change|observe attributes', @observe
@log 'debug', 'domChange|change|current', currentItem
@log 'debug', 'domChange|change|new', attributes
for field of @observe
@log 'debug', 'domChange|change|compare', field, currentItem[field], attributes[field]
diff = !_.isEqual(currentItem[field], attributes[field])
@log 'debug', 'domChange|diff', diff
if diff
changedItems.push item
@itemAttributesSet(item[@uniqKey], attributes)
break
return if _.isEmpty(changedItems)
@renderParts(changedItems)
renderAll: =>
items = @itemsAll()
@log 'debug', 'renderAll', items
localeEls = []
for item in items
attributes = @itemAttributes(item)
@itemAttributesSet(item[@uniqKey], attributes)
localeEls.push @renderItem(item, false)
@html localeEls
@collectionOrderSet()
@onRenderEnd()
itemDestroy: (id) =>
App[@model].destroy(id)
itemsAll: =>
App[@model].search(sortBy: @sortBy, order: @order)
itemAttributesDiff: (item) =>
attributes = @itemAttributes(item)
currentItem = @itemAttributesGet(item[@uniqKey])
for field of @observe
@log 'debug', 'itemAttributesDiff|compare', field, currentItem[field], attributes[field]
diff = !_.isEqual(currentItem[field], attributes[field])
if diff
@log 'debug', 'itemAttributesDiff|diff', diff
return true
false
itemAttributesDelete: (id) =>
delete @currentItems[id]
itemAttributesGet: (id) =>
@currentItems[id]
itemAttributesSet: (id, attributes) =>
@currentItems[id] = attributes
itemAttributes: (item) =>
attributes = {}
for field of @observe
attributes[field] = item[field]
attributes
itemGet: (id) =>
App[@model].find(id)
renderParts: (items) =>
@log 'debug', 'renderParts', items
for item in items
if !@renderList[item[@uniqKey]]
@renderItem(item)
else
@renderItem(item, @renderList[item[@uniqKey]])
@collectionOrderSet()
renderItem: (item, el) =>
if @prepareForObjectListItemSupport
item = @prepareForObjectListItem(item)
@log 'debug', 'renderItem', item, @template, el, @renderList[item[@uniqKey]]
html = $(App.view(@template)(
item: item
))
if @onRenderItemEnd
@onRenderItemEnd(item, html)
itemCount = Object.keys(@renderList).length
@renderList[item[@uniqKey]] = html
if el is false
return html
else if !el
position = item.meta_position
if itemCount > position
position += 1
element = @el.find(".js-item:nth-child(#{position})")
if !element.get(0)
@el.append(html)
return
if @insertPosition is 'before'
element.before(html)
else
element.after(html)
else
el.replaceWith(html)
onRenderEnd: ->
# nothing
location: (e) =>
@locationVerify(e)
click: (e) =>
row = $(e.target).closest('.js-item')
id = row.data('id')
@onClick(id, e)
onClick: (id, e) ->
# nothing
remove: (e) =>
e.preventDefault()
e.stopPropagation()
row = $(e.target).closest('.js-item')
id = row.data('id')
@onRemove(id,e)
@itemDestroy(id)
onRemove: (id, e) ->
# nothing
onRemoved: (id) ->
# nothing

View File

@@ -0,0 +1,19 @@
class App.ControllerDrox extends App.Controller
constructor: (params) ->
super
if params.data && ( params.data.text || params.data.html )
@inline(params.data)
inline: (data) ->
@html App.view('generic/drox')(data)
if data.text
@$('.drox-body').text(data.text)
if data.html
@$('.drox-body').html(data.html)
template: (data) ->
drox = $( App.view('generic/drox')(data) )
content = App.view(data.file)(data.params)
drox.find('.drox-body').append(content)
drox

View File

@@ -1,25 +1,44 @@
class App.ControllerForm extends App.Controller
fullFormSubmitLabel: 'Submit'
fullFormSubmitAdditionalClasses: ''
fullFormButtonsContainerClass: ''
fullFormAdditionalButtons: [] # [{className: 'js-class', text: 'Label'}]
constructor: (params) ->
super
for key, value of params
@[key] = value
if !@handlers
@handlers = []
@handlers.push @showHideToggle
@handlers.push @requiredMandantoryToggle
@handlers = [ App.FormHandlerCoreWorkflow.run ]
if @handlersConfig
for key, value of @handlersConfig
if value && value.run
@handlers.push value.run
if !@model
@model = {}
if !@attributes
@attributes = []
@idPrefix = Math.floor( Math.random() * 999999 ).toString()
if @model.className
@idPrefix = "#{@model.className}_#{@idPrefix}"
# set empty class attributes if needed
if !@form
@form = @formGen()
# add alert placeholder
@form.prepend('<div class="alert alert--danger js-alert hide" role="alert"></div>')
@form.prepend('<div class="alert alert--danger js-danger js-alert hide" role="alert"></div>')
@form.prepend('<div class="alert alert--success js-success hide" role="alert"></div>')
# Fix for Issue #2510 - Zammad Customers shown as Agents in IE
# Previously the handlers are called directly, before the DOM elements are ready, thereby causing a race condition under IE11.
# Now we only dispatch the handlers after the DOM is ready.
if @handlers.length
$(@dispatchHandlers)
# if element is given, prepend form to it
if @el
@@ -29,23 +48,28 @@ class App.ControllerForm extends App.Controller
if @elReplace
@elReplace.html(@form)
# trigger change to rebuild shown/hidden item and update sub selections
if typeof @form is 'object'
@form.find('input').trigger('change')
@form.find('textarea').trigger('change')
@form.find('select').trigger('change')
# remove alert on input
@form.on('input', @hideAlert)
@finishForm = true
@form
dispatchHandlers: =>
params = App.ControllerForm.params(@form)
for attribute in @attributes
for handler in @handlers
handler(params, attribute, @attributes, @idPrefix, @form, @)
showAlert: (message) =>
@form.find('.alert').first().removeClass('hide').html(App.i18n.translateInline(message))
if Array.isArray(message)
translated = App.i18n.translateInline(message[0], message.slice(1))
else
translated = App.i18n.translateInline(message)
@form.find('.alert--danger').first().removeClass('hide').html(translated)
hideAlert: =>
@form.find('.alert').addClass('hide').html()
@form.find('.alert--danger').addClass('hide').html()
html: =>
@form.html()
@@ -54,7 +78,9 @@ class App.ControllerForm extends App.Controller
App.Log.debug 'ControllerForm', 'formGen', @model.configure_attributes
# check if own fieldset should be generated
if @noFieldset
# forced when the form is a grid form because flex-wrap doesn't work on fieldsets
# source: https://github.com/philipwalton/flexbugs#9-some-html-elements-cant-be-flex-containers
if @noFieldset || @grid
fieldset = @el
else
fieldset = $('<fieldset></fieldset>')
@@ -66,12 +92,12 @@ class App.ControllerForm extends App.Controller
if @model.attributesGet
attributesClean = @model.attributesGet(@screen)
else
attributesClean = App.Model.attributesGet(@screen, @model.configure_attributes)
attributesClean = App.Model.attributesGet(@screen, @model.configure_attributes, undefined, @model.className)
for attributeName, attribute of attributesClean
# ignore read only attributes
if !attribute.readonly
# ignore read only or not rendered attributes attributes
if !attribute.readonly && !attribute.skipRendering
# check generic filter
if @filter && !attribute.filter
@@ -80,14 +106,16 @@ class App.ControllerForm extends App.Controller
@attributes.push attribute
attribute_count = 0
className = @model.className + '_' + Math.floor( Math.random() * 999999 ).toString()
attributeCount = 0
for attribute in @attributes
attribute_count = attribute_count + 1
attributeCount = attributeCount + 1
if @isDisabled == true
attribute.disabled = true
# add item
item = @formGenItem(attribute, className, fieldset, attribute_count)
item = @formGenItem(attribute, @idPrefix, fieldset, attributeCount)
item.appendTo(fieldset)
# if password, add confirm password item
@@ -102,20 +130,37 @@ class App.ControllerForm extends App.Controller
if !attribute.single
attribute.display = attribute.display + ' (confirm)'
attribute.name = attribute.name + '_confirm'
item = @formGenItem(attribute, className, fieldset, attribute_count)
item = @formGenItem(attribute, @idPrefix, fieldset, attributeCount)
item.appendTo(fieldset)
if @fullForm
if !@formClass
@formClass = ''
fieldset = $('<form class="' + @formClass + '" autocomplete="off"><button class="btn">' + App.i18n.translateContent('Submit') + '</button></form>').prepend(fieldset)
fieldset = $("<form class='form #{@formClass}' autocomplete='off'>").prepend(fieldset)
container = $("<div class='form-buttons #{@fullFormButtonsContainerClass}'>")
for buttonConfig in @fullFormAdditionalButtons
btn = $("<button class='btn #{buttonConfig.className}'>").text(buttonConfig.text)
if buttonConfig.disabled
btn.prop('disabled', true)
container.append(btn)
$("<button type=submit class='btn #{@fullFormSubmitAdditionalClasses}\' value=\"#{@fullFormSubmitLabel}\"></button>")
.text(App.i18n.translateContent(@fullFormSubmitLabel))
.appendTo(container)
container.appendTo(fieldset)
#fieldset = $("<form class=\"#{@formClass}\" autocomplete=\"off\"><div class='horizontal #{@fullFormButtonsContainerClass}'><input type=submit class=\"btn #{@fullFormSubmitAdditionalClasses}\" value=\"#{label}\"></div></form>").prepend(fieldset)
#fieldset = $("<form class=\"#{@formClass}\" autocomplete=\"off\"><input type=submit class=\"btn #{@fullFormSubmitAdditionalClasses}\" value=\"#{label}\"></form>").prepend(fieldset)
# bind form events
if @events
for eventSelector, callback of @events
do (eventSelector, callback) ->
evs = eventSelector.split(' ')
fieldset.find( evs[1] ).bind( evs[0], (e) -> callback(e) )
fieldset.find(evs[1]).bind(evs[0], (e) -> callback(e))
# bind tool tips
fieldset.find('.js-helpMessage').tooltip()
@@ -194,20 +239,19 @@ class App.ControllerForm extends App.Controller
class: 'medium'
}
###
formGenItem: (attribute_config, classname, form, attribute_count) ->
formGenItem: (attribute_config, idPrefix, form, attributeCount) ->
attribute = clone(attribute_config, true)
# create item id
attribute.id = "#{classname}_#{attribute.name}"
attribute.id = "#{idPrefix}_#{attribute.name}"
# set label class name
attribute.label_class = @model.labelClass
# set autofocus
if @autofocus && attribute_count is 1
if @autofocus && attributeCount is 1
attribute.autofocus = 'autofocus'
# set required option
@@ -240,16 +284,24 @@ class App.ControllerForm extends App.Controller
# set params value
if @params
# check if we have a references
parts = attribute.name.split '::'
if parts[0] && parts[1]
if @params[ parts[0] ] && parts[1] of @params[ parts[0] ]
attribute.value = @params[ parts[0] ][ parts[1] ]
if parts.length > 1
deepValue = parts.reduce((memo, elem) ->
memo?[elem]
, @params)
if deepValue isnt undefined
attribute.value = deepValue
# set params value to default
if attribute.name of @params
attribute.value = @params[attribute.name]
# set new value
if 'newValue' of attribute
attribute.value = attribute.newValue
App.Log.debug 'ControllerForm', 'formGenItem-before', attribute
if App.UiElement[attribute.tag]
@@ -257,51 +309,20 @@ class App.ControllerForm extends App.Controller
else
throw "Invalid UiElement.#{attribute.tag}"
if attribute.only_shown_if_selectable
count = Object.keys(attribute.options).length
if !attribute.null && (attribute.nulloption && count is 2) || (!attribute.nulloption && count is 1)
attribute.transparent = true
attributesNew = clone(attribute)
attributesNew.type = 'hidden'
attributesNew.value = ''
for item in attribute.options
if item.value && item.value isnt ''
attributesNew.value = item.value
item = $( App.view('generic/input')( attribute: attributesNew ) )
if @handlers
item.bind('change', (e) =>
params = App.ControllerForm.params( $(e.target) )
item_bind = item
item_event = 'change'
if item.find('.richtext-content').length > 0
item_bind = item.find('.richtext-content')
item_event = 'blur'
item_bind.bind(item_event, (e) =>
@lastChangedAttribute = attribute.name
params = App.ControllerForm.params(@form)
for handler in @handlers
handler(params, attribute, @attributes, classname, form, @)
handler(params, attribute, @attributes, idPrefix, form, @)
)
# bind dependency
if @dependency
for action in @dependency
# bind on element if name is matching
if action.bind && action.bind.name is attribute.name
ui = @
do (action, attribute) ->
item.bind('change', ->
value = $(@).val()
if !value
value = $(@).find('select, input').val()
# lookup relation if needed
if action.bind.relation
data = App[action.bind.relation].find(value)
value = data.name
# check if value is used in condition
if _.contains(action.bind.value, value)
if action.change.action is 'hide'
ui.hide(action.change.name)
else
ui.show(action.change.name)
)
if !attribute.display || attribute.transparent
# hide/show item
@@ -310,14 +331,21 @@ class App.ControllerForm extends App.Controller
return item
else
placeholderObjects = {}
if @model.className && @params && ( attribute.type is 'url' || !_.isEmpty(attribute.linktemplate) ) && !_.isEmpty(@params[attribute.name])
placeholderObjects = { attribute: attribute, session: App.Session.get(), config: App.Config.all() }
placeholderObjects[@model.className.toLowerCase()] = @params
fullItem = $(
App.view('generic/attribute')(
attribute: attribute,
item: '',
bookmarkable: @bookmarkable
placeholderObjects: placeholderObjects
className: @model.className
)
)
fullItem.find('.controls').prepend( item )
fullItem.find('.controls').prepend(item)
# hide/show item
if attribute.hide
@@ -325,93 +353,144 @@ class App.ControllerForm extends App.Controller
return fullItem
@findFieldByName: (key, el) ->
return el.find('[name="' + key + '"]')
@findFieldByData: (key, el) ->
return el.find('[data-name="' + key + '"]')
@findFieldByGroup: (key, el) ->
return el.find('.form-group[data-attribute-name="' + key + '"]')
@fieldIsShown: (field) ->
return !field.closest('.form-group').hasClass('is-hidden')
@fieldIsMandatory: (field) ->
return field.closest('.form-group').hasClass('is-required')
@fieldIsRemoved: (field) ->
return field.closest('.form-group').hasClass('is-removed')
@fieldIsReadonly: (field) ->
return field.closest('.form-group').hasClass('is-readonly')
attributeIsMandatory: (name) ->
field_by_name = @constructor.findFieldByName(name, @form)
if field_by_name.length > 0
return @constructor.fieldIsMandatory(field_by_name)
field_by_data = @constructor.findFieldByData(name, @form)
if field_by_data.length > 0
return @constructor.fieldIsMandatory(field_by_data)
return false
show: (name, el = @form) ->
if !_.isArray(name)
name = [name]
for key in name
el.find('[name="' + key + '"]').closest('.form-group').removeClass('hide')
el.find('[name="' + key + '"]').removeClass('is-hidden')
el.find('[data-name="' + key + '"]').closest('.form-group').removeClass('hide')
el.find('[data-name="' + key + '"]').removeClass('is-hidden')
field_by_group = @constructor.findFieldByGroup(key, el)
field_by_group.removeClass('hide')
field_by_group.removeClass('is-hidden')
field_by_group.removeClass('is-removed')
# hide old validation states
if el
el.find('.has-error').removeClass('has-error')
el.find('.help-inline').html('')
hide: (name, el = @form) ->
hide: (name, el = @form, remove = false) ->
if !_.isArray(name)
name = [name]
for key in name
el.find('[name="' + key + '"]').closest('.form-group').addClass('hide')
el.find('[name="' + key + '"]').addClass('is-hidden')
el.find('[data-name="' + key + '"]').closest('.form-group').addClass('hide')
el.find('[data-name="' + key + '"]').addClass('is-hidden')
field_by_group = @constructor.findFieldByGroup(key, el)
field_by_group.addClass('hide')
field_by_group.addClass('is-hidden')
if remove
field_by_group.addClass('is-removed')
mandantory: (name, el = @form) ->
if !_.isArray(name)
name = [name]
for key in name
el.find('[name="' + key + '"]').attr('required', true)
el.find('[name="' + key + '"]').parents('.form-group').find('label span').html('*')
field_by_name = @constructor.findFieldByName(key, el)
field_by_data = @constructor.findFieldByData(key, el)
if !@constructor.fieldIsMandatory(field_by_name)
field_by_name.attr('required', true)
field_by_name.parents('.form-group').find('label span').html('*')
field_by_name.closest('.form-group').addClass('is-required')
if !@constructor.fieldIsMandatory(field_by_data)
field_by_data.attr('required', true)
field_by_data.parents('.form-group').find('label span').html('*')
field_by_data.closest('.form-group').addClass('is-required')
optional: (name, el = @form) ->
if !_.isArray(name)
name = [name]
for key in name
el.find('[name="' + key + '"]').attr('required', false)
el.find('[name="' + key + '"]').parents('.form-group').find('label span').html('')
field_by_name = @constructor.findFieldByName(key, el)
field_by_data = @constructor.findFieldByData(key, el)
showHideToggle: (params, changedAttribute, attributes, classname, form, ui) ->
for attribute in attributes
if attribute.shown_if
hit = false
for refAttribute, refValue of attribute.shown_if
if params[refAttribute]
if _.isArray(refValue)
for item in refValue
if params[refAttribute].toString() is item.toString()
hit = true
else if params[refAttribute].toString() is refValue.toString()
hit = true
if hit
ui.show(attribute.name)
else
ui.hide(attribute.name)
if @constructor.fieldIsMandatory(field_by_name)
field_by_name.attr('required', false)
field_by_name.parents('.form-group').find('label span').html('')
field_by_name.closest('.form-group').removeClass('is-required')
if @constructor.fieldIsMandatory(field_by_data)
field_by_data.attr('required', false)
field_by_data.parents('.form-group').find('label span').html('')
field_by_data.closest('.form-group').removeClass('is-required')
requiredMandantoryToggle: (params, changedAttribute, attributes, classname, form, ui) ->
for attribute in attributes
if attribute.required_if
hit = false
for refAttribute, refValue of attribute.required_if
if params[refAttribute]
if _.isArray( refValue )
for item in refValue
if params[refAttribute].toString() is item.toString()
hit = true
else if params[refAttribute].toString() is refValue.toString()
hit = true
if hit
ui.mandantory(attribute.name)
else
ui.optional(attribute.name)
readonly: (name, el = @form) ->
if !_.isArray(name)
name = [name]
for key in name
field_by_name = @constructor.findFieldByName(key, el)
field_by_data = @constructor.findFieldByData(key, el)
if !@constructor.fieldIsReadonly(field_by_name)
field_by_name.closest('.form-group').find('input, select').attr('readonly', true)
field_by_name.closest('.form-group').addClass('is-readonly')
if !@constructor.fieldIsReadonly(field_by_data)
field_by_data.closest('.form-group').find('input, select').attr('readonly', true)
field_by_data.closest('.form-group').addClass('is-readonly')
changeable: (name, el = @form) ->
if !_.isArray(name)
name = [name]
for key in name
field_by_name = @constructor.findFieldByName(key, el)
field_by_data = @constructor.findFieldByData(key, el)
if @constructor.fieldIsReadonly(field_by_name)
field_by_name.closest('.form-group').find('input, select').attr('readonly', false)
field_by_name.closest('.form-group').removeClass('is-readonly')
if @constructor.fieldIsReadonly(field_by_data)
field_by_data.closest('.form-group').find('input, select').attr('readonly', false)
field_by_data.closest('.form-group').removeClass('is-readonly')
validate: (params) ->
App.Model.validate(
model: @model
params: params
screen: @screen
controllerForm: @
)
# get all params of the form
@params: (form) ->
# set clearAccessories to true to remove inline image resizing handles
@params: (form, clearAccessories = false) ->
param = {}
lookupForm = @findForm(form)
if clearAccessories
# remove inline image resizing handles
lookupForm.find('.richtext.form-control').trigger('click')
# get contenteditable
for element in lookupForm.find('[contenteditable]')
name = $(element).data('name')
if name
param[name] = $(element).ceg()
@@ -420,9 +499,10 @@ class App.ControllerForm extends App.Controller
# array to names
for item in array
field = @findFieldByName(item.name, lookupForm)
# check if item is-hidden and should not be used
if lookupForm.find('[name="' + item.name + '"]').hasClass('is-hidden') || lookupForm.find('div[data-name="' + item.name + '"]').hasClass('is-hidden')
# check if item is-removed and should not be used
if @fieldIsRemoved(field)
delete param[item.name]
continue
@@ -434,13 +514,15 @@ class App.ControllerForm extends App.Controller
if item.type is 'boolean'
if value is ''
value = undefined
else if value is undefined
value = false
else if value is 'true'
value = true
else if value is 'false'
value = false
if item.type is 'integer'
if value is ''
value = undefined
value = null
else
value = parseInt(value)
if param[item.name] isnt undefined
@@ -451,17 +533,52 @@ class App.ControllerForm extends App.Controller
else
param[item.name] = value
# verify if we have not checked checkboxes
uncheckParam = {}
lookupForm.find('input[type=checkbox]').each( (index) ->
type = $(@).data('field-type')
checked = $(@).prop('checked')
name = $(@).attr('name')
if name && !checked && !(name of param)
if !(name of uncheckParam)
if type is 'boolean'
uncheckParam[name] = false
else
uncheckParam[name] = undefined
else
uncheckParam[name] = []
true
)
# verify if we have not checked radios
lookupForm.find('input[type=radio]').each( (index) ->
type = $(@).data('field-type')
checked = $(@).prop('checked')
name = $(@).attr('name')
if name && !checked && !(name of param)
if type is 'boolean'
uncheckParam[name] = false
else
uncheckParam[name] = undefined
true
)
# apply empty checkboxes & radio values to params
for key, value of uncheckParam
if !(key of param)
param[key] = value
# data type conversion
for key of param
# get {date}
if key.substr(0,6) is '{date}'
newKey = key.substr(6, key.length)
if lookupForm.find("[data-name=\"#{newKey}\"]").hasClass('is-hidden')
if lookupForm.find("[data-name=\"#{newKey}\"]").hasClass('is-removed')
param[newKey] = null
else if param[key]
try
time = new Date( Date.parse( "#{param[key]}T00:00:00Z" ) )
time = new Date( Date.parse("#{param[key]}T00:00:00Z") )
format = (number) ->
if parseInt(number) < 10
number = "0#{number}"
@@ -473,17 +590,17 @@ class App.ControllerForm extends App.Controller
param[newKey] = "invalid #{param[key]}"
console.log('ERR', err)
else
param[newKey] = undefined
param[newKey] = null
delete param[key]
# get {datetime}
else if key.substr(0,10) is '{datetime}'
newKey = key.substr(10, key.length)
if lookupForm.find("[data-name=\"#{newKey}\"]").hasClass('is-hidden')
if lookupForm.find("[data-name=\"#{newKey}\"]").hasClass('is-removed')
param[newKey] = null
else if param[key]
try
time = new Date( Date.parse( param[key] ) )
time = new Date( Date.parse(param[key]) )
if time is 'Invalid Datetime'
throw "Invalid Datetime #{param[key]}"
param[newKey] = time.toISOString().replace(/:\d\d\.\d\d\dZ$/, ':00.000Z')
@@ -491,7 +608,7 @@ class App.ControllerForm extends App.Controller
param[newKey] = "invalid #{param[key]}"
console.log('ERR', err)
else
param[newKey] = undefined
param[newKey] = null
delete param[key]
# split :: fields, build objects
@@ -501,6 +618,9 @@ class App.ControllerForm extends App.Controller
if parts[0] && parts[1] isnt undefined
if parts[1] isnt undefined && !inputSelectObject[ parts[0] ]
inputSelectObject[ parts[0] ] = {}
if parts[1] is ''
delete param[ key ]
continue
if parts[2] isnt undefined && !inputSelectObject[ parts[0] ][ parts[1] ]
inputSelectObject[ parts[0] ][ parts[1] ] = {}
if parts[3] isnt undefined && !inputSelectObject[ parts[0] ][ parts[1] ][ parts[2] ]
@@ -526,7 +646,7 @@ class App.ControllerForm extends App.Controller
# get {business_hours}
if key.substr(0,16) is '{business_hours}'
newKey = key.substr(16, key.length)
if lookupForm.find("[data-name=\"#{newKey}\"]").hasClass('is-hidden')
if lookupForm.find("[data-name=\"#{newKey}\"]").hasClass('is-removed')
param[newKey] = null
else if param[key]
newParams = {}
@@ -582,50 +702,59 @@ class App.ControllerForm extends App.Controller
App.Log.error 'ControllerForm', 'no form found!', form
form
@disable: (form) ->
@disable: (form, type = 'form') ->
lookupForm = @findForm(form)
if lookupForm
if lookupForm && type is 'form'
if lookupForm.is('button, input, select, textarea, div, span')
App.Log.debug 'ControllerForm', 'disable item...', lookupForm
lookupForm.attr('readonly', true)
lookupForm.attr('disabled', true)
lookupForm.prop('readonly', true)
lookupForm.prop('disabled', true)
return
App.Log.debug 'ControllerForm', 'disable form...', lookupForm
# set forms to read only during communication with backend
lookupForm.find('button, input, select, textarea').attr('readonly', true)
lookupForm.find('button, input, select, textarea').prop('readonly', true)
# disable radio and checkbox buttons
lookupForm.find('input[type=checkbox], input[type=radio]').prop('disabled', true)
# disable additionals submits
lookupForm.find('button').attr('disabled', true)
lookupForm.find('button').prop('disabled', true)
else
App.Log.debug 'ControllerForm', 'disable item...', form
form.attr('readonly', true)
form.attr('disabled', true)
form.prop('readonly', true)
form.prop('disabled', true)
@enable: (form) ->
@enable: (form, type = 'form') ->
lookupForm = @findForm(form)
if lookupForm
if lookupForm && type is 'form'
if lookupForm.is('button, input, select, textarea, div, span')
App.Log.debug 'ControllerForm', 'disable item...', lookupForm
lookupForm.attr('readonly', false)
lookupForm.attr('disabled', false)
lookupForm.prop('readonly', false)
lookupForm.prop('disabled', false)
return
App.Log.debug 'ControllerForm', 'enable form...', lookupForm
# enable fields again
lookupForm.find('button, input, select, textarea').attr('readonly', false)
lookupForm.find('button, input, select, textarea').prop('readonly', false)
# enable radio and checkbox buttons
lookupForm.find('input[type=checkbox], input[type=radio]').prop('disabled', false)
# enable submits again
lookupForm.find('button').attr('disabled', false)
lookupForm.find('button').prop('disabled', false)
else
App.Log.debug 'ControllerForm', 'enable item...', form
form.attr('readonly', false)
form.attr('disabled', false)
form.prop('readonly', false)
form.prop('disabled', false)
@validate: (data) ->
if data.errors && Object.keys(data.errors).length == 1 && data.errors._core_workflow isnt undefined
App.FormHandlerCoreWorkflow.delaySubmit(data.errors._core_workflow.controllerForm, data.errors._core_workflow.target || data.form)
return
lookupForm = @findForm(data.form)

View File

@@ -0,0 +1,20 @@
class App.ControllerFullPage extends App.Controller
constructor: (params) ->
if @requiredPermission
@permissionCheckRedirect(@requiredPermission)
super
replaceWith: (localElement) =>
@appEl.find('>').not(".#{@className}").remove() if @className
@appEl.find('>').filter(".#{@className}").remove() if @forceRender
@el = $(localElement)
container = @appEl.find('>').filter(".#{@className}")
if !container.get(0)
@el.addClass(@className)
@appEl.append(@el)
@delegateEvents(@events)
@refreshElements()
@el.on('remove', @releaseController)
@el.on('remove', @release)
else
container.html(@el.children())

View File

@@ -0,0 +1,11 @@
class App.ControllerGenericDescription extends App.ControllerModal
buttonClose: true
buttonCancel: false
buttonSubmit: 'Close'
head: 'Description'
content: =>
marked(App.i18n.translateContent(@description))
onSubmit: =>
@close()

View File

@@ -0,0 +1,37 @@
class App.ControllerGenericDestroyConfirm extends App.ControllerModal
buttonClose: true
buttonCancel: true
buttonSubmit: 'delete'
buttonClass: 'btn--danger'
head: 'Confirm'
small: true
content: ->
App.i18n.translateContent('Sure to delete this object?')
onSubmit: =>
options = @options || {}
options.done = =>
@close()
if @callback
@callback()
options.fail = (xhr, data) =>
@log 'errors'
@showAlert(data.human_error || data.error)
@item.destroy(options)
class App.ControllerConfirm extends App.ControllerModal
buttonClose: true
buttonCancel: true
buttonSubmit: 'yes'
buttonClass: 'btn--danger'
head: 'Confirm'
small: true
content: ->
App.i18n.translateContent(@message)
onSubmit: =>
@close()
if @callback
@callback()

View File

@@ -0,0 +1,55 @@
class App.ControllerGenericEdit extends App.ControllerModal
buttonClose: true
buttonCancel: true
buttonSubmit: true
headPrefix: 'Edit'
content: =>
@item = App[ @genericObject ].find( @id )
@head = @pageData.head || @pageData.object
@controller = new App.ControllerForm(
model: App[ @genericObject ]
params: @item
screen: @screen || 'edit'
autofocus: true
handlers: @handlers
)
@controller.form
onSubmit: (e) ->
params = @formParam(e.target)
@item.load(params)
# validate form using HTML5 validity check
element = $(e.target).closest('form').get(0)
if element && element.reportValidity && !element.reportValidity()
return false
# validate
errors = @item.validate(
controllerForm: @controller
)
if errors
@log 'error', errors
@formValidate( form: e.target, errors: errors )
return false
# disable form
@formDisable(e)
# save object
ui = @
@item.save(
done: ->
if ui.callback
item = App[ ui.genericObject ].fullLocal(@id)
ui.callback(item)
ui.close()
fail: (settings, details) ->
App[ ui.genericObject ].fetch(id: @id)
ui.log 'errors'
ui.formEnable(e)
ui.controller.showAlert(details.error_human || details.error || 'Unable to update object!')
)

View File

@@ -0,0 +1,17 @@
class App.ControllerErrorModal extends App.ControllerModal
buttonClose: true
buttonCancel: false
buttonSubmit: 'Close'
#buttonClass: 'btn--danger'
head: 'Error'
#small: true
#shown: true
showTrySupport: true
content: ->
@message
onSubmit: =>
@close()
if @callback
@callback()

View File

@@ -0,0 +1,137 @@
class App.GenericHistory extends App.ControllerModal
@extend App.PopoverProvidable
@registerPopovers 'User'
buttonClose: true
buttonCancel: false
buttonSubmit: false
head: 'History'
shown: false
constructor: ->
super
@fetch()
content: =>
localItem = @reworkItems(@items)
content = $ App.view('generic/history')(
items: localItem
)
content.find('a[data-type="sortorder"]').bind('click', (e) =>
e.preventDefault()
@sortorder()
)
content
onShown: =>
@renderPopovers()
sortorder: =>
@items = @items.reverse()
@update()
T: (name) ->
App.i18n.translateInline(name)
reworkItems: (items) ->
newItems = []
newItem = {}
lastUserId = undefined
lastTime = undefined
items = clone(items)
for item in items
if item.object is 'Ticket::Article'
item.object = 'Article'
data = item
data.created_by = App.User.find( item.created_by_id )
currentItemTime = new Date( item.created_at )
lastItemTime = new Date( new Date( lastTime ).getTime() + (15 * 1000) )
# start new section if user or time has changed
if lastUserId isnt item.created_by_id || currentItemTime > lastItemTime
lastTime = item.created_at
lastUserId = item.created_by_id
if !_.isEmpty(newItem)
newItems.push newItem
newItem =
created_at: item.created_at
created_by: App.User.find( item.created_by_id )
records: []
# build content
content = ''
if item.type is 'notification' || item.type is 'email'
content = "#{ @T( item.type ) } #{ @T( 'sent to' ) } '#{ item.value_to }'"
else if item.type is 'received_merge'
ticket = App.Ticket.find( item.id_from )
ticket_link = if ticket
"<a href=\"#ticket/zoom/#{ item.id_from }\">##{ ticket.number }</a>"
else
item.value_from
content = "#{ @T( 'Ticket' ) } #{ ticket_link } #{ @T( 'was merged into this ticket' ) }"
else if item.type is 'merged_into'
ticket = App.Ticket.find( item.id_to )
ticket_link = if ticket
"<a href=\"#ticket/zoom/#{ item.id_to }\">##{ ticket.number }</a>"
else
item.value_to
content = "#{ @T( 'This ticket was merged into' ) } #{ @T( 'ticket' ) } #{ ticket_link }"
else
content = "#{ @T( item.type ) } #{ @T(item.object) } "
if item.attribute
content += "#{ @translateItemAttribute(item) }"
# convert time stamps
if item.object is 'User' && item.attribute is 'last_login'
if item.value_from
item.value_from = App.i18n.translateTimestamp( item.value_from )
if item.value_to
item.value_to = App.i18n.translateTimestamp( item.value_to )
if item.value_from
if item.value_to
content += " #{ @T( 'from' ) }"
content += " '#{ @translateItemValue(item, item.value_from) }'"
if item.value_to
if item.value_from
content += ' &rarr;'
content += " '#{ @translateItemValue(item, item.value_to) }'"
else if item.value_from
content += " &rarr; '-'"
newItem.records.push content
if !_.isEmpty(newItem)
newItems.push newItem
newItems
translateItemValue: ({object, attribute}, value) ->
localAttribute = @objectAttribute(object, attribute)
if localAttribute && localAttribute.tag is 'datetime'
return App.i18n.translateTimestamp(value)
if /_(time|at)$/.test(attribute)
return App.i18n.translateTimestamp(value)
if localAttribute && localAttribute.translate is true
return @T(value)
App.Utils.htmlEscape(value)
translateItemAttribute: ({object, attribute}) ->
localAttribute = @objectAttribute(object, attribute)
if localAttribute && localAttribute.display
return @T(localAttribute.display)
@T(attribute)
objectAttribute: (object, attribute) ->
return if !App[object]
return if !App[object].attributesGet()
App[object].attributesGet()["#{attribute}_id"] || App[object].attributesGet()[attribute]

View File

@@ -0,0 +1,208 @@
class App.ControllerGenericIndex extends App.Controller
events:
'click [data-type=edit]': 'edit'
'click [data-type=new]': 'new'
'click [data-type=payload]': 'payload'
'click [data-type=import]': 'import'
'click .js-description': 'description'
constructor: ->
super
# set title
if @pageData.title
@title @pageData.title, true
# set nav bar
if @pageData.navupdate
@navupdate @pageData.navupdate
# bind render after a change is done
if !@disableRender
@subscribeId = App[ @genericObject ].subscribe(@render)
App[ @genericObject ].bind 'ajaxError', (rec, msg) =>
@log 'error', 'ajax', msg.status
if msg.status is 401
@log 'error', 'ajax', rec, msg, msg.status
@navigate 'login'
# execute fetch
@render()
# fetch all
if !@disableInitFetch && !@pageData.pagerAjax
App[ @genericObject ].fetchFull(
->
clear: true
)
show: =>
if @table
@table.show()
hide: =>
if @table
@table.hide()
release: =>
if @subscribeId
App[@genericObject].unsubscribe(@subscribeId)
paginate: (page) =>
return if page is @pageData.pagerSelected
@pageData.pagerSelected = page
@render()
render: =>
if @pageData.pagerAjax
sortBy = @table?.customOrderBy || @table?.orderBy || @defaultSortBy || 'id'
orderBy = @table?.customOrderDirection || @table?.orderDirection || @defaultOrder || 'ASC'
fallbackSortBy = sortBy
fallbackOrderBy = orderBy
if sortBy isnt 'id'
fallbackSortBy = "#{sortBy}, id"
fallbackOrderBy = "#{orderBy}, ASC"
@startLoading()
App[@genericObject].indexFull(
(collection, data) =>
@pageData.pagerTotalCount = data.total_count
@stopLoading()
@renderObjects(collection)
{
refresh: false
sort_by: fallbackSortBy
order_by: fallbackOrderBy
page: @pageData.pagerSelected
per_page: @pageData.pagerPerPage
}
)
return
objects = App[@genericObject].search(
sortBy: @defaultSortBy || 'name'
order: @defaultOrder
)
@renderObjects(objects)
renderObjects: (objects) =>
# remove ignored items from collection
if @ignoreObjectIDs
objects = _.filter( objects, (item) ->
return if item.id is 1
return item
)
if !@table
# show description button, only if content exists
showDescription = false
if App[ @genericObject ].description && !_.isEmpty(objects)
showDescription = true
@html App.view('generic/admin/index')(
head: @pageData.objects
notes: @pageData.notes
buttons: @pageData.buttons
menus: @pageData.menus
showDescription: showDescription
)
# show description in content if no no content exists
if _.isEmpty(objects) && App[ @genericObject ].description
description = marked(App[ @genericObject ].description)
@$('.table-overview').html(description)
return
# append content table
params = _.extend(
{
tableId: "#{@genericObject}-generic-overview"
el: @$('.table-overview')
model: App[ @genericObject ]
objects: objects
bindRow:
events:
click: @edit
container: @container
explanation: @pageData.explanation
groupBy: @groupBy
dndCallback: @dndCallback
},
@pageData.tableExtend
)
if @pageData.pagerAjax
params = _.extend(
{
pagerAjax: @pageData.pagerAjax
pagerBaseUrl: @pageData.pagerBaseUrl
pagerSelected: @pageData.pagerSelected
pagerPerPage: @pageData.pagerPerPage
pagerTotalCount: @pageData.pagerTotalCount
sortRenderCallback: @render
},
params
)
if !@table
@table = new App.ControllerTable(params)
else
@table.update(objects: objects, pagerSelected: @pageData.pagerSelected, pagerTotalCount: @pageData.pagerTotalCount)
if @pageData.logFacility
new App.HttpLog(
el: @$('.page-footer')
facility: @pageData.logFacility
)
edit: (id, e) =>
e.preventDefault()
item = App[ @genericObject ].find(id)
if @editCallback
@editCallback(item)
return
new App.ControllerGenericEdit(
id: item.id
pageData: @pageData
genericObject: @genericObject
container: @container
small: @small
large: @large
veryLarge: @veryLarge
handlers: @handlers
)
new: (e) ->
e.preventDefault()
new App.ControllerGenericNew(
pageData: @pageData
genericObject: @genericObject
container: @container
small: @small
large: @large
veryLarge: @veryLarge
handlers: @handlers
)
payload: (e) ->
e.preventDefault()
new App.WidgetPayloadExample(
baseUrl: @payloadExampleUrl
container: @el.closest('.content')
)
import: (e) ->
e.preventDefault()
@importCallback()
description: (e) =>
new App.ControllerGenericDescription(
description: App[ @genericObject ].description
container: @container
)

View File

@@ -0,0 +1,55 @@
class App.ControllerGenericNew extends App.ControllerModal
buttonClose: true
buttonCancel: true
buttonSubmit: true
headPrefix: 'New'
showTrySupport: true
content: =>
@head = @pageData.head || @pageData.object
@controller = new App.ControllerForm(
model: App[ @genericObject ]
params: @item
screen: @screen || 'create'
autofocus: true
handlers: @handlers
)
@controller.form
onSubmit: (e) ->
params = @formParam(e.target)
object = new App[ @genericObject ]
object.load(params)
# validate form using HTML5 validity check
element = $(e.target).closest('form').get(0)
if element && element.reportValidity && !element.reportValidity()
return false
# validate
errors = object.validate(
controllerForm: @controller
)
if errors
@log 'error', errors
@formValidate( form: e.target, errors: errors )
return false
# disable form
@formDisable(e)
# save object
ui = @
object.save(
done: ->
if ui.callback
item = App[ ui.genericObject ].fullLocal(@id)
ui.callback(item)
ui.close()
fail: (settings, details) ->
ui.log 'errors', details
ui.formEnable(e)
ui.controller.showAlert(details.error_human || details.error || 'Unable to create object!')
)

View File

@@ -0,0 +1,48 @@
class App.ControllerModalLoading extends App.Controller
className: 'modal fade'
showTrySupport: true
constructor: ->
super
if @container
@el.addClass('modal--local')
@render()
@el.modal(
keyboard: false
show: true
backdrop: 'static'
container: @container
).on(
'hidden.bs.modal': @localOnClosed
)
render: ->
@html App.view('generic/modal_loader')(
head: @head
message: App.i18n.translateContent(@message)
)
update: (message, translate = true) =>
if translate
message = App.i18n.translateContent(message)
@$('.js-loading').html(message)
hideIcon: =>
@$('.js-loadingIcon').addClass('hide')
showIcon: =>
@$('.js-loadingIcon').removeClass('hide')
localOnClosed: =>
@el.remove()
hide: (delay) =>
remove = =>
@el.modal('hide')
if !delay
remove()
return
App.Delay.set(remove, delay * 1000)

View File

@@ -0,0 +1,145 @@
class App.ControllerNavSidbar extends App.Controller
constructor: (params) ->
super
if @authenticateRequired
@authenticateCheckRedirect()
@render(true)
@controllerBind('ui:rerender',
=>
@render(true)
@updateNavigation(true, params)
)
show: (params = {}) =>
@navupdate ''
@shown = true
if params
for key, value of params
if key isnt 'el' && key isnt 'shown' && key isnt 'match'
@[key] = value
@updateNavigation(false, params)
if @activeController && _.isFunction(@activeController.show)
@activeController.show(params)
hide: =>
@shown = false
if @activeController && _.isFunction(@activeController.hide)
@activeController.hide()
render: (force = false) =>
groups = @groupsSorted()
selectedItem = @selectedItem(groups)
@html App.view('generic/navbar_level2/index')(
className: @configKey
)
@$('.sidebar').html App.view('generic/navbar_level2/navbar')(
groups: groups
className: @configKey
selectedItem: selectedItem
)
updateNavigation: (force, params) =>
groups = @groupsSorted()
selectedItem = @selectedItem(groups)
return if !selectedItem
return if !force && @lastTarget && selectedItem.target is @lastTarget
@lastTarget = selectedItem.target
@$('.sidebar li').removeClass('active')
@$(".sidebar li a[href=\"#{selectedItem.target}\"]").parent().addClass('active')
@executeController(selectedItem, params)
groupsSorted: =>
# get accessable groups
groups = App.Config.get(@configKey)
groupsUnsorted = []
for key, item of groups
if !item.controller
if !item.permission
groupsUnsorted.push item
else
match = false
if typeof item.permission is 'function'
match = item.permission(@)
if match
groupsUnsorted.push item
else
for permissionName in item.permission
if !match && @permissionCheck(permissionName)
match = true
groupsUnsorted.push item
_.sortBy(groupsUnsorted, (item) -> return item.prio)
selectedItem: (groups) =>
# get items of group
for group in groups
items = App.Config.get(@configKey)
itemsUnsorted = []
for key, item of items
if item.parent is group.target
if item.controller
if !item.permission
itemsUnsorted.push item
else
match = false
if typeof item.permission is 'function'
match = item.permission(@)
if match
itemsUnsorted.push item
else
for permissionName in item.permission
if !match && @permissionCheck(permissionName)
match = true
itemsUnsorted.push item
group.items = _.sortBy(itemsUnsorted, (item) -> return item.prio)
# set active item
selectedItem = undefined
for group in groups
if group.items
for item in group.items
if item.target.match("/#{@target}$")
item.active = true
selectedItem = item
else
item.active = false
if !selectedItem
for group in groups
break if selectedItem
if group.items
for item in group.items
item.active = true
selectedItem = item
break
selectedItem
executeController: (selectedItem, params) =>
if @activeController
@activeController.el.remove()
@activeController = undefined
@$('.main').append('<div>')
@activeController = new selectedItem.controller(_.extend(params, el: @$('.main div')))
setPosition: (position) =>
return if @shown
return if !position
if position.main
@$('.main').scrollTop(position.main)
if position.sidebar
@$('.sidebar').scrollTop(position.sidebar)
currentPosition: =>
data =
main: @$('.main').scrollTop()
sidebar: @$('.sidebar').scrollTop()

View File

@@ -0,0 +1,82 @@
class App.ControllerObserver extends App.Controller
model: 'Ticket'
template: 'tba'
globalRerender: true
###
observe:
title: true
observeNot:
title: true
###
constructor: ->
super
#console.trace()
@log 'debug', 'new', @object_id, @model
if App[@model].exists(@object_id)
@maybeRender(App[@model].fullLocal(@object_id))
else
App[@model].full(@object_id, @maybeRender)
# rerender, e. g. on language change
if @globalRerender
@controllerBind('ui:rerender', =>
@lastAttributres = undefined
@maybeRender(App[@model].fullLocal(@object_id))
)
subscribe: (object, typeOfChange) =>
@maybeRender(object, typeOfChange)
maybeRender: (object, typeOfChange) =>
if typeOfChange is 'remove'
@release()
@el.remove()
return
@log 'debug', 'maybeRender', @object_id, object, @model
if !@subscribeId
@subscribeId = object.subscribe(@subscribe)
# remember current attributes
currentAttributes = {}
if @observe
for key, active of @observe
if active
currentAttributes[key] = object[key]
if @observeNot
for key, value of object
if key isnt 'cid' && !@observeNot[key] && !_.isFunction(value) && !_.isObject(value)
currentAttributes[key] = value
if !@lastAttributres
@lastAttributres = {}
else
diff = difference(currentAttributes, @lastAttributres)
if _.isEmpty(diff)
@log 'debug', 'maybeRender no diff, no rerender'
return
@log 'debug', 'maybeRender.diff', diff, @observe, @model
@lastAttributres = currentAttributes
@render(object, diff)
render: (object, diff) =>
@log 'debug', 'render', @template, object, diff
@html App.view(@template)(
object: object
)
if @renderPost
@renderPost(object)
release: =>
#console.trace()
@log 'debug', 'release', @object_id, @model, @subscribeId
App[@model].unsubscribe(@subscribeId)

View File

@@ -0,0 +1,20 @@
class App.ControllerObserverActionRow extends App.ControllerObserver
constructor: ->
super
render: (object) =>
return if _.isEmpty(object)
actions = @actions(object)
@html App.view('generic/actions')(
items: actions
type: @type
)
for item in actions
do (item) =>
@$("[data-type=\"#{item.name}\"]").on(
'click'
(e) ->
e.preventDefault()
item.callback(object)
)

View File

@@ -0,0 +1,5 @@
class App.ControllerPermanent extends App.Controller
constructor: ->
if @requiredPermission
@permissionCheckRedirect(@requiredPermission, true)
super

View File

@@ -0,0 +1,52 @@
class App.ControllerReorderModal extends App.ControllerModal
head: 'Drag to reorder'
content: ->
view = $(App.view('reorder_modal')())
table = new App.ControllerTable(
pager: false
baseColWidth: null
dndCallback: ->
true
overview: ['title']
attribute_list: [
{ name: 'title', display: 'Name' }
]
objects: @items
)
view.find('.js-table-container').html(table.el)
view
onShown: ->
super
@$('.js-submit').focus()
save: ->
ids = @$('tr.item').toArray().map (el) -> parseInt(el.dataset.id)
@$('.alert').addClass('hidden')
@formDisable(@el)
@ajax(
id: 'reorder_save'
type: 'PATCH'
data: JSON.stringify({ordered_ids: ids})
url: @url
processData: true
success: (data, status, xhr) =>
App.Collection.loadAssets(data)
App.Event.trigger 'knowledge_base::sidebar::rerender'
@close()
error: (xhr) =>
data = JSON.parse(xhr.responseText)
@$('.alert--danger').removeClass('hidden').text(data.error)
@formEnable(@el)
)
onSubmit: ->
super
@save()

View File

@@ -0,0 +1,16 @@
class App.ControllerSubContent extends App.Controller
constructor: ->
if @requiredPermission
@permissionCheckRedirect(@requiredPermission)
super
show: =>
if @genericController && @genericController.show
@genericController.show()
return if !@header
@title @header, true
hide: =>
if @genericController && @genericController.hide
@genericController.hide()

View File

@@ -90,19 +90,17 @@
###
class App.ControllerTable extends App.Controller
minColWidth: 40
minColWidth: 30
baseColWidth: 130
minTableWidth: 612
checkBoxColWidth: 40
checkBoxColWidth: 30
radioColWidth: 22
sortableColWidth: 36
elements:
'.js-tableHead': 'tableHead'
events:
'click .js-sort': 'sortByColumn'
'click .js-page': 'paginate'
overviewAttributes: undefined
#model: App.TicketPriority,
@@ -111,11 +109,14 @@ class App.ControllerTable extends App.Controller
radio: false
renderState: undefined
groupBy: undefined
groupDirection: undefined
shownPerPage: 150
shownPage: 0
pagerEnabled: true
pagerItemsPerPage: 150
pagerShownPage: 0
destroy: false
customActions: []
columnsLength: undefined
headers: undefined
@@ -133,6 +134,8 @@ class App.ControllerTable extends App.Controller
customOrderDirection: undefined
customOrderBy: undefined
frontendTimeUpdateExecute: true
bindCol: {}
bindRow: {}
@@ -145,6 +148,7 @@ class App.ControllerTable extends App.Controller
@attributesListRaw ||= @attribute_list || @model.configure_attributes || {}
@attributesList = App.Model.attributesGet(false, @attributesListRaw)
@destroy = @model.configure_delete
@clone = @model.configure_clone
throw 'overviewAttributes needed' if _.isEmpty(@overviewAttributes)
throw 'attributesList needed' if _.isEmpty(@attributesList)
@@ -161,12 +165,22 @@ class App.ControllerTable extends App.Controller
for key, value of data.headerWidth
@headerWidth[key] = value
@availableWidth = @el.width()
if !@availableWidth
@availableWidth = @el.width()
if @availableWidth is 0
@availableWidth = @minTableWidth
@renderQueue()
show: =>
return if @windowIsResized isnt true
@windowIsResized = false
@onResize()
hide: ->
release: =>
$(window).off 'resize.table', @onResize
$(window).off('resize.table', @onResize)
update: (params) =>
if params.sync is true
@@ -184,7 +198,15 @@ class App.ControllerTable extends App.Controller
App.QueueManager.run('tableRender')
renderPager: (el, find = false) =>
pages = parseInt(((@objects.length - 1) / @shownPerPage))
return if !@pagerEnabled
if @pagerAjax
@renderPagerAjax(el, find)
else
@renderPagerStatic(el, find)
renderPagerAjax: (el, find = false) =>
pages = parseInt((@pagerTotalCount - 1) / @pagerPerPage)
if pages < 1
if find
el.find('.js-pager').html('')
@@ -192,8 +214,25 @@ class App.ControllerTable extends App.Controller
el.filter('.js-pager').html('')
return
pager = App.view('generic/table_pager')(
page: @shownPage
pages: pages
page: @pagerSelected - 1
pages: pages
)
if find
el.find('.js-pager').html(pager)
else
el.filter('.js-pager').html(pager)
renderPagerStatic: (el, find = false) =>
pages = parseInt(((@objects.length - 1) / @pagerItemsPerPage))
if pages < 1
if find
el.find('.js-pager').html('')
else
el.filter('.js-pager').html('')
return
pager = App.view('generic/table_pager')(
page: @pagerShownPage
pages: pages
)
if find
el.find('.js-pager').html(pager)
@@ -202,18 +241,23 @@ class App.ControllerTable extends App.Controller
render: =>
@setMaxPage()
# always render pager in case of ajax pagination
if @pagerTotalCount
@renderPager(@el, true)
if @renderState is undefined
# check if table is empty
if _.isEmpty(@objects)
@renderState = 'emptyList'
@el.html(@renderEmptyList())
$(window).on 'resize.table', @onResize
$(window).on('resize.table', @onResize)
return ['emptyList.new']
else
@renderState = 'List'
@renderTableFull()
$(window).on 'resize.table', @onResize
$(window).on('resize.table', @onResize)
return ['fullRender.new']
else if @renderState is 'emptyList' && !_.isEmpty(@objects)
@renderState = 'List'
@@ -235,9 +279,9 @@ class App.ControllerTable extends App.Controller
removedRows = _.difference(@currentRows, newRows)
addedRows = _.difference(newRows, @currentRows)
#console.log('newRows', newRows)
#console.log('removedRows', removedRows)
#console.log('addedRows', addedRows)
@log 'debug', 'table newRows', newRows
@log 'debug', 'table removedRows', removedRows
@log 'debug', 'table addedRows', addedRows
# if only rows are removed
if (!_.isEmpty(addedRows) || !_.isEmpty(removedRows)) && addedRows.length < 10 && removedRows.length < 15 && removedRows.length < newRows.length && !_.isEmpty(newRows)
@@ -267,24 +311,25 @@ class App.ControllerTable extends App.Controller
else
@$("tbody > tr:nth-child(#{position})").after(newCurrentRows[position])
@currentRows = newCurrentRows
#console.log('fullRender.contentRemoved', removePositions, addPositions)
@log 'debug', 'table.fullRender.contentRemoved', removePositions, addPositions
@renderPager(@el, true)
@frontendTimeUpdateElement(@el) if @frontendTimeUpdateExecute is true
return ['fullRender.contentRemoved', removePositions, addPositions]
if newRows.length isnt @currentRows.length
result = ['fullRender.lenghtChanged', @currentRows.length, newRows.length]
@renderTableFull(newRows)
#console.log('result', result)
@log 'debug', 'table.fullRender.lenghtChanged', result
return result
# compare rows
result = @_isSame(newRows, @currentRows)
if result isnt true
@renderTableFull(newRows)
#console.log('result', "fullRender.contentChanged|row(#{result})")
@log 'debug', "table.fullRender.contentChanged|row(#{result})"
return ['fullRender.contentChanged', result]
#console.log('result', 'noChanges')
@log 'debug', 'table.noChanges'
return ['noChanges']
renderEmptyList: =>
@@ -292,18 +337,20 @@ class App.ControllerTable extends App.Controller
explanation: @explanation
)
renderTableFull: (rows) =>
#console.log('renderTableFull', @orderBy, @orderDirection, @objects)
@tableHeaders()
renderTableFull: (rows, options = {}) =>
@log 'debug', 'table.renderTableFull', @orderBy, @orderDirection
@tableHeaders(options)
@sortList()
bulkIds = @getBulkSelected()
container = @renderTableContainer()
table = container.filter('.table')
if !rows
rows = @renderTableRows()
@currentRows = clone(rows)
else
@currentRows = clone(rows)
container.find('.js-tableBody').html(rows)
@frontendTimeUpdateElement(container) if @frontendTimeUpdateExecute is true
@renderPager(container)
@@ -331,24 +378,24 @@ class App.ControllerTable extends App.Controller
if hit
for event, callback of item.events
do (container, event, callback) ->
do (table, event, callback) ->
if cursorMap[event]
container.find("tbody > tr > td:nth-child(#{position})").css('cursor', cursorMap[event])
container.on( event, "tbody > tr > td:nth-child(#{position})",
table.find("tbody > tr > td:nth-child(#{position})").css('cursor', cursorMap[event])
table.on(event, "tbody > tr > td:nth-child(#{position})",
(e) ->
e.stopPropagation()
id = $(e.target).parents('tr').data('id')
callback(id, e)
callback(id, e, e.currentTarget)
)
# bind row
if !_.isEmpty(@bindRow)
if @bindRow.events
for event, callback of @bindRow.events
do (container, event, callback) ->
do (table, event, callback) ->
if cursorMap[event]
container.find('tbody > tr').css( 'cursor', cursorMap[event] )
container.on( event, 'tbody > tr',
table.find('tbody > tr').css( 'cursor', cursorMap[event] )
table.on(event, 'tbody > tr',
(e) ->
id = $(e.target).parents('tr').data('id')
callback(id, e)
@@ -358,8 +405,8 @@ class App.ControllerTable extends App.Controller
if @bindCheckbox
if @bindCheckbox.events
for event, callback of @bindCheckbox.events
do (container, event, callback) ->
container.delegate('input[name="bulk"]', event, (e) ->
do (table, event, callback) ->
table.delegate('input[name="bulk"]', event, (e) ->
e.stopPropagation()
id = $(e.currentTarget).parents('tr').data('id')
checked = $(e.currentTarget).prop('checked')
@@ -370,19 +417,19 @@ class App.ControllerTable extends App.Controller
if @tableId
# enable resize column
container.on 'mousedown', '.js-col-resize', @onColResizeMousedown
container.on 'click', '.js-col-resize', @stopPropagation
table.on('mousedown', '.js-col-resize', @onColResizeMousedown)
table.on('click', '.js-col-resize', @stopPropagation)
# enable checkbox bulk selection
if @checkbox
# click first tr>td, catch click
container.delegate('tr > td:nth-child(1)', 'click', (e) ->
table.delegate('tr > td:nth-child(1)', 'click', (e) ->
e.stopPropagation()
)
# bind on full bulk click
container.delegate('input[name="bulk_all"]', 'change', (e) =>
table.delegate('input[name="bulk_all"]', 'change', (e) =>
e.stopPropagation()
clicks = []
if $(e.currentTarget).prop('checked')
@@ -404,6 +451,12 @@ class App.ControllerTable extends App.Controller
return if !@bindCheckbox
return if !@bindCheckbox.events
return if _.isEmpty(clicks)
# If a select_all callback exists, then trigger it once insteading of triggering the callback once for each checkbox
if @bindCheckbox.select_all
@bindCheckbox.select_all(clicks[0]..., e)
return
for event, callback of @bindCheckbox.events
if event == 'click' || event == 'change'
for click in clicks
@@ -425,18 +478,7 @@ class App.ControllerTable extends App.Controller
$(@).width( originals.eq(index).outerWidth() )
return helper
update: @dndCallback
container.find('tbody').sortable(dndOptions)
# click on pager
container.delegate('.js-page', 'click', (e) =>
e.stopPropagation()
page = $(e.currentTarget).attr 'data-page'
render = =>
@shownPage = page
@renderTableFull()
App.QueueManager.add('tableRender', render)
App.QueueManager.run('tableRender')
)
table.find('tbody').sortable(dndOptions)
@el.html(container)
@setBulkSelected(bulkIds)
@@ -459,27 +501,58 @@ class App.ControllerTable extends App.Controller
if @checkbox || @radio
columnsLength++
groupLast = ''
groupLastName = ''
tableBody = []
objectsToShow = @objectsOfPage(@shownPage)
for object in objectsToShow
if object
position++
if @groupBy
groupByName = App.viewPrint(object, @groupBy, @attributesList)
if groupLast isnt groupByName
groupLast = groupByName
tableBody.push @renderTableGroupByRow(object, position, groupByName)
tableBody.push @renderTableRow(object, position)
objectsToShow = @objectsOfPage(@pagerShownPage)
if @groupBy
# group by raw (and not printable) value so dates work also
objectsGrouped = _.groupBy(objectsToShow, (object) => object[@groupBy])
else
objectsGrouped = { '': objectsToShow }
for groupValue in Object.keys(objectsGrouped).sort()
groupObjects = objectsGrouped[groupValue]
for object in groupObjects
objectActions = []
if object
position++
if @groupBy
groupByName = @groupObjectName(object, @groupBy)
if groupLastName isnt groupByName
groupLastName = groupByName
tableBody.push @renderTableGroupByRow(object, position, groupByName)
for action in @actions
# Check if the available key is used, it can be a Boolean or a function which should be called.
if !action.available? || action.available == true
objectActions.push action
else if typeof action.available is 'function' && action.available(object) == true
objectActions.push action
tableBody.push @renderTableRow(object, position, objectActions)
tableBody
renderTableGroupByRow: (object, position, groupByName) =>
ui_table_group_by_show_count = @Config.get('ui_table_group_by_show_count')
groupByCount = undefined
if ui_table_group_by_show_count is true
groupBy = @groupBy
groupLast = @groupObjectName(object, @groupBy)
groupByCount = 0
if @objects
for localObject in @objects
if @groupObjectName(localObject, groupBy) is groupLast
groupByCount += 1
App.view('generic/table_row_group_by')(
position: position
groupByName: groupByName
groupByCount: groupByCount
columnsLength: @columnsLength
)
renderTableRow: (object, position) =>
renderTableRow: (object, position, actions) =>
App.view('generic/table_row')(
headers: @headers
attributes: @attributesList
@@ -489,24 +562,26 @@ class App.ControllerTable extends App.Controller
sortable: @dndCallback
position: position
object: object
actions: actions
)
tableHeadersHasChanged: =>
return true if @overviewAttributes isnt @lastOverview
false
tableHeaders: =>
tableHeaders: (options = {}) =>
orderBy = @customOrderBy || @orderBy
orderDirection = @customOrderDirection || @orderDirection
#console.log('LLL', @lastOrderBy, @orderBy, @lastOrderDirection, @orderDirection, @overviewAttributes, @lastOverview)
if @headers && @lastOrderBy is orderBy && @lastOrderDirection is orderDirection && !@tableHeadersHasChanged()
#console.log('tableHeaders: same overviewAttributes just return headers', @headers)
@log 'debug', 'table.Headers: same overviewAttributes just return headers', @headers
return ['headers are the same', @headers]
@lastOverview = @overviewAttributes
# get header data
@headers = []
@actions = [].concat @customActions
availableWidth = @availableWidth
for item in @overviewAttributes
headerFound = false
for attributeName, attribute of @attributesList
@@ -517,29 +592,13 @@ class App.ControllerTable extends App.Controller
if !attribute.style
attribute.style = {}
if attributeName is item
if attributeName is item || (attributeName is "#{item}_id" || attributeName is "#{item}_ids")
# e.g. column: owner
headerFound = true
if @headerWidth[attribute.name]
attribute.displayWidth = @headerWidth[attribute.name] * @availableWidth
else if !attribute.width
attribute.displayWidth = @baseColWidth
else
# convert percentages to pixels
value = parseInt attribute.width, 10
unit = attribute.width.match(/[px|%]+/)[0]
if unit is '%'
attribute.displayWidth = value / 100 * @el.width()
else
attribute.displayWidth = value
@headers.push attribute
else
# e.g. column: owner_id or owner_ids
if attributeName is "#{item}_id" || attributeName is "#{item}_ids"
headerFound = true
if !options.skipHeadersResize
if @headerWidth[attribute.name]
attribute.displayWidth = @headerWidth[attribute.name] * @availableWidth
attribute.displayWidth = @headerWidth[attribute.name] * availableWidth
else if !attribute.width
attribute.displayWidth = @baseColWidth
else
@@ -548,51 +607,97 @@ class App.ControllerTable extends App.Controller
unit = attribute.width.match(/[px|%]+/)[0]
if unit is '%'
attribute.displayWidth = value / 100 * @el.width()
attribute.displayWidth = value / 100 * availableWidth
else
attribute.displayWidth = value
@headers.push attribute
@headers.push attribute
# execute header callback
if @callbackHeader
for callback in @callbackHeader
@headers = callback(@headers)
if @tableId
@calculateHeaderWidths()
throw 'no headers found' if _.isEmpty(@headers)
# add destroy header and col binding
if @destroy
@headers.push
name: 'destroy'
display: 'Delete'
width: '70px'
displayWidth: 70
unresizable: true
parentClass: 'js-delete'
icon: 'trash'
if @clone
@actions.push
name: 'clone'
display: 'Clone'
icon: 'clipboard'
class: 'create js-clone'
callback: (id) =>
item = @model.find(id)
item.name = "Clone: #{item.name}"
new App.ControllerGenericNew(
item: item
pageData:
object: item.constructor.className
callback: =>
@renderTableFull()
genericObject: item.constructor.className
container: @container
)
@bindCol['destroy'] =
if @destroy
@actions.push
name: 'delete'
display: 'Delete'
icon: 'trash'
class: 'danger js-delete'
callback: (id) =>
item = @model.find(id)
new App.ControllerGenericDestroyConfirm
item: item
container: @container
if @actions.length
@headers.push
name: 'action'
display: 'Action'
width: '50px'
displayWidth: 50
align: 'right'
parentClass: 'noTruncate no-padding'
unresizable: true
unsortable: true
@bindCol['action'] =
events:
click: @deleteRow
click: @toggleActionDropdown
@calculateHeaderWidths()
@storeHeaderWidths()
@columnsLength = @headers.length
if @checkbox || @radio
@columnsLength++
#console.log('tableHeaders: new headers', @headers)
@log 'debug', 'table.Headers: new headers', @headers
['new headers', @headers]
setMaxPage: =>
pages = parseInt(((@objects.length - 1) / @shownPerPage))
if parseInt(@shownPage) > pages
@shownPage = pages
return if !@pagerEnabled
pages = parseInt(((@objects.length - 1) / @pagerItemsPerPage))
if parseInt(@pagerShownPage) > pages
@pagerShownPage = pages
objectsOfPage: (page = 0) =>
return @objects if !@pagerEnabled
page = parseInt(page)
@objects.slice(page * @shownPerPage, (page + 1) * @shownPerPage)
@objects.slice(page * @pagerItemsPerPage, (page + 1) * @pagerItemsPerPage)
paginate: (e) =>
e.stopPropagation()
page = $(e.currentTarget).attr('data-page')
if @pagerAjax
@navigate "#{@pagerBaseUrl}#{(parseInt(page) + 1)}"
else
render = =>
@pagerShownPage = page
@renderTableFull()
App.QueueManager.add('tableRender', render)
App.QueueManager.run('tableRender')
sortList: =>
return if _.isEmpty(@objects)
@@ -600,8 +705,8 @@ class App.ControllerTable extends App.Controller
orderBy = @customOrderBy || @orderBy
orderDirection = @customOrderDirection || @orderDirection
#console.log('order', @orderBy, @orderDirection)
#console.log('customOrder', @customOrderBy, @customOrderDirection)
@log 'debug', 'table.order', @orderBy, @orderDirection
@log 'debug', 'table.customOrder', @customOrderBy, @customOrderDirection
return if _.isEmpty(orderBy) && _.isEmpty(@groupBy)
@@ -609,10 +714,37 @@ class App.ControllerTable extends App.Controller
@lastOrderDirection = orderDirection
@lastOrderBy = orderBy
# sorting for ajax pagination will be made in the backend
# so we only set the arrow for the sort direction
if @pagerAjax
for header in @headers
if header.name is orderBy || "#{header.name}_id" is orderBy || header.name is "#{orderBy}_id"
if orderDirection is 'DESC'
header.sortOrderIcon = ['arrow-down', 'table-sort-arrow']
else
header.sortOrderIcon = ['arrow-up', 'table-sort-arrow']
else
header.sortOrderIcon = undefined
return
# Underscore's sortBy cannot deal with null values, so we replace null values with a place holder string
sortBy = (list, iteratee) ->
_.sortBy(
list
(item) ->
res = iteratee(item)
# Checking for a falsey value would overide 0 or false to placeholder.
# UnderscoreJS sorter breaks when \uFFFF is sorted together with non-string values.
return res if res != null and res != undefined and res != ''
# null values are considered lexicographically "last"
'\uFFFF'
)
localObjects is undefined
if orderBy
for header in @headers
if header.name is orderBy || "#{header.name}_id" is orderBy
localObjects = _.sortBy(
if header.name is orderBy || "#{header.name}_id" is orderBy || header.name is "#{orderBy}_id"
localObjects = sortBy(
@objects
(item) ->
@@ -649,7 +781,7 @@ class App.ControllerTable extends App.Controller
# in case order by is not in show column, use orderBy attribute
if !localObjects
for attributeName, attribute of @attributesList
if attributeName is orderBy || "#{attributeName}_id" is orderBy
if attributeName is orderBy || "#{attributeName}_id" is orderBy || attributeName is "#{orderBy}_id"
# order by
localObjects = _.sortBy(
@@ -692,22 +824,7 @@ class App.ControllerTable extends App.Controller
# get groups
groupObjects = {}
for object in @objects
group = object[@groupBy]
if !group
withId = "#{@groupBy}_id"
if object[withId] && @attributesList[withId] && @attributesList[withId].relation
if App[@attributesList[withId].relation].exists(object[withId])
item = App[@attributesList[withId].relation].findNative(object[withId])
if item && item.displayName
group = item.displayName().toLowerCase()
else if item.name
group = item.name.toLowerCase()
if _.isEmpty(group)
group = ''
if group.displayName
group = group.displayName().toLowerCase()
else if group.name
group = group.name.toLowerCase()
group = @groupObjectName(object, @groupBy)
groupObjects[group] ||= []
groupObjects[group].push object
@@ -715,6 +832,9 @@ class App.ControllerTable extends App.Controller
for key of groupObjects
groupsSorted.push key
groupsSorted = groupsSorted.sort()
# Reverse the sorted groups depending on the groupDirection
if @groupDirection == 'DESC'
groupsSorted.reverse()
# get new order
localObjects = []
@@ -722,26 +842,67 @@ class App.ControllerTable extends App.Controller
localObjects = localObjects.concat groupObjects[group]
groupObjects[group] = [] # release old array
return if localObjects is undefined
@objects = localObjects
@lastSortedobjects = localObjects
# bind on delete dialog
deleteRow: (id, e) =>
groupObjectName: (object, key = undefined) ->
group = object
if key
if key not of object
key += '_id'
group = App.viewPrint(object, key, @attributesList)
if _.isEmpty(group)
group = ''
if group.displayName
group = group.displayName().toLowerCase()
else if group.name
group = group.name.toLowerCase()
group
onActionButtonClicked: (e) =>
id = $(e.currentTarget).parents('tr').data('id')
name = e.currentTarget.getAttribute('data-table-action')
@runAction(name, id)
runAction: (name, id) =>
action = _.findWhere @actions, name: name
action.callback(id)
toggleActionDropdown: (id, e, td) =>
e.stopPropagation()
e.preventDefault()
item = @model.find(id)
new App.ControllerGenericDestroyConfirm
item: item
container: @container
$dropdown = $(td).find('.js-table-action-menu')
if $dropdown.length
# open dropdown
$dropdown.dropdown('toggle')
# check if bind to open dropdown is already done
return if $dropdown.prop('rendered')
# remember that bind to open dropdown is already done
$dropdown.prop('rendered', true)
# bind on click now that the dropdown is open
$dropdown.on('click.dropdown', '[data-table-action]', @onActionButtonClicked)
else
# only one action - directly fire that action
name = $(td).find('[data-table-action]').attr('data-table-action')
@runAction(name, id)
calculateHeaderWidths: ->
return if !@tableId
return if !@headers
if @availableWidth is 0
@availableWidth = @minTableWidth
availableWidth = @availableWidth
widths = @getHeaderWidths()
shrinkBy = Math.ceil (widths - @availableWidth) / @getShrinkableHeadersCount()
# ensure all widths are integers
@headers = _.map @headers, (col) ->
col.displayWidth = Math.floor(col.displayWidth)
return col
shrinkBy = Math.ceil (@getHeaderWidths() - availableWidth) / @getShrinkableHeadersCount()
# make all cols evenly smaller
@headers = _.map @headers, (col) =>
@@ -750,12 +911,13 @@ class App.ControllerTable extends App.Controller
return col
# give left-over space from rounding to last column to get to 100%
roundingLeftOver = @availableWidth - @getHeaderWidths()
roundingLeftOver = availableWidth - @getHeaderWidths()
# but only if there is something left over (will get negative when there are too many columns for each column to stay in their min width)
if roundingLeftOver > 0
if roundingLeftOver > 0 && roundingLeftOver < 10
@headers[@headers.length - 1].displayWidth = @headers[@headers.length - 1].displayWidth + roundingLeftOver
@storeHeaderWidths()
true
getShrinkableHeadersCount: ->
_.reduce @headers, (memo, col) ->
@@ -779,22 +941,38 @@ class App.ControllerTable extends App.Controller
widths
setHeaderWidths: =>
@calculateHeaderWidths()
return if !@calculateHeaderWidths()
@tableHead.each (i, el) =>
@$('.js-tableHead').each (i, el) =>
el.style.width = @headers[i].displayWidth + 'px'
@storeHeaderWidths()
storeHeaderWidths: ->
widths = {}
for header in @headers
widths[header.name] = header.displayWidth / @availableWidth
@headerWidth = widths
App.LocalStorage.set(@preferencesStoreKey(), { headerWidth: widths }, @Session.get('id'))
onResize: =>
@availableWidth = @el.width()
@setHeaderWidths()
localWidth = @el.width()
if localWidth is 0
@windowIsResized = true
return
@availableWidth = localWidth
localDelay = =>
localSetHeaderWidths = =>
@availableWidth = @el.width()
@setHeaderWidths()
App.QueueManager.add('tableRender', localSetHeaderWidths)
App.QueueManager.run('tableRender')
@delay(localDelay, 200, 'table-resize-finish')
stopPropagation: (event) ->
event.stopPropagation()
@@ -806,14 +984,17 @@ class App.ControllerTable extends App.Controller
@resizeLeftStartWidth = @resizeTargetLeft.width()
@resizeRightStartWidth = @resizeTargetRight.width()
$(document).on 'mousemove.resizeCol', @onColResizeMousemove
$(document).one 'mouseup', @onColResizeMouseup
$(document).on('mousemove.resizeCol', @onColResizeMousemove)
$(document).one('mouseup', @onColResizeMouseup)
@tableWidth = @el.width()
onColResizeMousemove: (event) =>
# use pixels while moving for max precision
difference = event.pageX - @resizeStartX
if App.i18n.dir() is 'rtl'
difference = @resizeStartX - event.pageX
else
difference = event.pageX - @resizeStartX
if @resizeLeftStartWidth + difference < @minColWidth
difference = - (@resizeLeftStartWidth - @minColWidth)
@@ -825,12 +1006,12 @@ class App.ControllerTable extends App.Controller
@resizeTargetRight.width @resizeRightStartWidth - difference
onColResizeMouseup: =>
$(document).off 'mousemove.resizeCol'
$(document).off('mousemove.resizeCol')
# switch to percentage
resizeBaseWidth = @resizeTargetLeft.parents('table').width()
leftWidth = @resizeTargetLeft.width() / resizeBaseWidth
rightWidth = @resizeTargetRight.width() / resizeBaseWidth
leftWidth = @resizeTargetLeft.outerWidth() / resizeBaseWidth
rightWidth = @resizeTargetRight.outerWidth() / resizeBaseWidth
leftColumnKey = @resizeTargetLeft.attr('data-column-key')
rightColumnKey = @resizeTargetRight.attr('data-column-key')
@@ -838,17 +1019,29 @@ class App.ControllerTable extends App.Controller
# update store and runtime @headerWidth
@preferencesStore('headerWidth', leftColumnKey, leftWidth)
@headerWidth[leftColumnKey] = leftWidth
_.find(@headers, (column) -> column.name is leftColumnKey).displayWidth = leftWidth
# set header at runtime
for header in @headers
if header.name is leftColumnKey
header.displayWidth = @resizeTargetLeft.outerWidth()
# update store and runtime @headerWidth
if rightColumnKey
@preferencesStore('headerWidth', rightColumnKey, rightWidth)
@headerWidth[rightColumnKey] = rightWidth
_.find(@headers, (column) -> column.name is rightColumnKey).displayWidth = rightWidth
# set header at runtime
for header in @headers
if header.name is rightColumnKey
header.displayWidth = @resizeTargetRight.outerWidth()
sortByColumn: (event) =>
column = $(event.currentTarget).closest('[data-column-key]').attr('data-column-key')
# for ajax pagination we only accept valid attributes for sorting
if @model && @pagerAjax
return if !@attributesList[column]
orderBy = @customOrderBy || @orderBy
orderDirection = @customOrderDirection || @orderDirection
@@ -870,9 +1063,14 @@ class App.ControllerTable extends App.Controller
# update store
@preferencesStore('order', 'customOrderBy', @orderBy)
@preferencesStore('order', 'customOrderDirection', @orderDirection)
render = =>
@renderTableFull()
App.QueueManager.add('tableRender', render)
if @sortRenderCallback
App.QueueManager.add('tableRender', @sortRenderCallback)
else
render = =>
@renderTableFull(false, skipHeadersResize: true)
App.QueueManager.add('tableRender', render)
App.QueueManager.run('tableRender')
preferencesStore: (type, key, value) ->
@@ -913,4 +1111,4 @@ class App.ControllerTable extends App.Controller
for position in [0..array1.length-1]
if array1[position] isnt array2[position]
return position
true
true

View File

@@ -0,0 +1,61 @@
class App.ControllerTabs extends App.Controller
events:
'click .nav-tabs [data-toggle="tab"]': 'tabRemember'
constructor: (params) ->
@originParams = params # remember params for sub-controller
super(params)
# check authentication
if @requiredPermission
if !@permissionCheckRedirect(@requiredPermission)
throw "No permission for #{@requiredPermission}"
show: =>
return if !@controllerList
for localeController in @controllerList
if localeController && localeController.show
localeController.show()
hide: =>
return if !@controllerList
for localeController in @controllerList
if localeController && localeController.hide
localeController.hide()
render: ->
@html App.view('generic/tabs')(
header: @header
subHeader: @subHeader
tabs: @tabs
addTab: @addTab
headerSwitchName: @headerSwitchName
headerSwitchChecked: @headerSwitchChecked
)
# insert content
for tab in @tabs
@$('.tab-content').append("<div class=\"tab-pane\" id=\"#{tab.target}\"></div>")
if tab.controller
params = tab.params || {}
params.name = tab.name
params.target = tab.target
params.el = @$("##{tab.target}")
@controllerList ||= []
@controllerList.push new tab.controller(_.extend(@originParams, params))
# check if tabs need to be show / cant' use .tab(), because tabs are note shown (only one tab exists)
if @tabs.length <= 1
@$('.tab-pane').addClass('active')
return
# set last or first tab to active
@lastActiveTab = @Config.get('lastTab')
if @lastActiveTab && @$(".nav-tabs li a[href='#{@lastActiveTab}']")[0]
@$(".nav-tabs li a[href='#{@lastActiveTab}']").tab('show')
else
@$('.nav-tabs li:first a').tab('show')
tabRemember: (e) =>
@lastActiveTab = $(e.target).attr('href')
@Config.set('lastTab', @lastActiveTab)

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